@handaotech-design/bom 0.0.16

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 (159) hide show
  1. package/README.md +13 -0
  2. package/build.config.ts +27 -0
  3. package/dist/es/all-components.d.ts +3 -0
  4. package/dist/es/all-components.js +10 -0
  5. package/dist/es/assets/icons/operation-selected.svg +3 -0
  6. package/dist/es/assets/icons/operation.svg +3 -0
  7. package/dist/es/assets/icons/process-path-selected.svg +3 -0
  8. package/dist/es/assets/icons/process-path.svg +3 -0
  9. package/dist/es/assets/icons/process-plan-selected.svg +3 -0
  10. package/dist/es/assets/icons/process-plan.svg +3 -0
  11. package/dist/es/assets/icons/remove-minus.svg +4 -0
  12. package/dist/es/assets/icons/remove-plus.svg +5 -0
  13. package/dist/es/assets/icons/search.svg +4 -0
  14. package/dist/es/components/bom-tree/index.d.ts +3 -0
  15. package/dist/es/components/bom-tree/index.js +5 -0
  16. package/dist/es/components/bom-tree/index.vue +358 -0
  17. package/dist/es/components/bom-workbench/index.d.ts +3 -0
  18. package/dist/es/components/bom-workbench/index.js +5 -0
  19. package/dist/es/components/bom-workbench/index.vue +98 -0
  20. package/dist/es/components/gray-input/index.d.ts +3 -0
  21. package/dist/es/components/gray-input/index.js +5 -0
  22. package/dist/es/components/gray-input/index.vue +44 -0
  23. package/dist/es/components/index.d.ts +4 -0
  24. package/dist/es/components/index.js +4 -0
  25. package/dist/es/components/left-right/index.d.ts +3 -0
  26. package/dist/es/components/left-right/index.js +5 -0
  27. package/dist/es/components/left-right/index.vue +142 -0
  28. package/dist/es/defaults.d.ts +4 -0
  29. package/dist/es/defaults.js +3 -0
  30. package/dist/es/hooks/index.d.ts +1 -0
  31. package/dist/es/hooks/index.js +1 -0
  32. package/dist/es/hooks/use-ppboms.d.ts +19 -0
  33. package/dist/es/hooks/use-ppboms.js +81 -0
  34. package/dist/es/index.d.ts +7 -0
  35. package/dist/es/index.js +7 -0
  36. package/dist/es/models/bom.d.ts +35 -0
  37. package/dist/es/models/bom.js +1 -0
  38. package/dist/es/models/common.d.ts +5 -0
  39. package/dist/es/models/common.js +5 -0
  40. package/dist/es/models/index.d.ts +2 -0
  41. package/dist/es/models/index.js +2 -0
  42. package/dist/es/shared/keys.d.ts +1 -0
  43. package/dist/es/shared/keys.js +1 -0
  44. package/dist/es/shared/make-installer.d.ts +4 -0
  45. package/dist/es/shared/make-installer.js +13 -0
  46. package/dist/es/shims-vue.d.ts +5 -0
  47. package/dist/es/tokens/index.d.ts +0 -0
  48. package/dist/es/tokens/index.js +0 -0
  49. package/dist/es/types/components.d.ts +17 -0
  50. package/dist/es/utils/bom.d.ts +3 -0
  51. package/dist/es/utils/bom.js +29 -0
  52. package/dist/es/utils/config.d.ts +1 -0
  53. package/dist/es/utils/config.js +11 -0
  54. package/dist/es/utils/index.d.ts +4 -0
  55. package/dist/es/utils/index.js +4 -0
  56. package/dist/es/utils/rule-engine.d.ts +20 -0
  57. package/dist/es/utils/rule-engine.js +50 -0
  58. package/dist/es/utils/template.d.ts +1 -0
  59. package/dist/es/utils/template.js +11 -0
  60. package/dist/lib/all-components.d.ts +3 -0
  61. package/dist/lib/all-components.js +12 -0
  62. package/dist/lib/assets/icons/operation-selected.svg +3 -0
  63. package/dist/lib/assets/icons/operation.svg +3 -0
  64. package/dist/lib/assets/icons/process-path-selected.svg +3 -0
  65. package/dist/lib/assets/icons/process-path.svg +3 -0
  66. package/dist/lib/assets/icons/process-plan-selected.svg +3 -0
  67. package/dist/lib/assets/icons/process-plan.svg +3 -0
  68. package/dist/lib/assets/icons/remove-minus.svg +4 -0
  69. package/dist/lib/assets/icons/remove-plus.svg +5 -0
  70. package/dist/lib/assets/icons/search.svg +4 -0
  71. package/dist/lib/components/bom-tree/index.d.ts +3 -0
  72. package/dist/lib/components/bom-tree/index.js +26 -0
  73. package/dist/lib/components/bom-tree/index.vue +358 -0
  74. package/dist/lib/components/bom-workbench/index.d.ts +3 -0
  75. package/dist/lib/components/bom-workbench/index.js +26 -0
  76. package/dist/lib/components/bom-workbench/index.vue +98 -0
  77. package/dist/lib/components/gray-input/index.d.ts +3 -0
  78. package/dist/lib/components/gray-input/index.js +26 -0
  79. package/dist/lib/components/gray-input/index.vue +44 -0
  80. package/dist/lib/components/index.d.ts +4 -0
  81. package/dist/lib/components/index.js +49 -0
  82. package/dist/lib/components/left-right/index.d.ts +3 -0
  83. package/dist/lib/components/left-right/index.js +26 -0
  84. package/dist/lib/components/left-right/index.vue +142 -0
  85. package/dist/lib/defaults.d.ts +4 -0
  86. package/dist/lib/defaults.js +10 -0
  87. package/dist/lib/hooks/index.d.ts +1 -0
  88. package/dist/lib/hooks/index.js +16 -0
  89. package/dist/lib/hooks/use-ppboms.d.ts +19 -0
  90. package/dist/lib/hooks/use-ppboms.js +94 -0
  91. package/dist/lib/index.d.ts +7 -0
  92. package/dist/lib/index.js +61 -0
  93. package/dist/lib/models/bom.d.ts +35 -0
  94. package/dist/lib/models/bom.js +7 -0
  95. package/dist/lib/models/common.d.ts +5 -0
  96. package/dist/lib/models/common.js +11 -0
  97. package/dist/lib/models/index.d.ts +2 -0
  98. package/dist/lib/models/index.js +27 -0
  99. package/dist/lib/shared/keys.d.ts +1 -0
  100. package/dist/lib/shared/keys.js +7 -0
  101. package/dist/lib/shared/make-installer.d.ts +4 -0
  102. package/dist/lib/shared/make-installer.js +20 -0
  103. package/dist/lib/shims-vue.d.ts +5 -0
  104. package/dist/lib/tokens/index.d.ts +0 -0
  105. package/dist/lib/tokens/index.js +1 -0
  106. package/dist/lib/types/components.d.ts +17 -0
  107. package/dist/lib/utils/bom.d.ts +3 -0
  108. package/dist/lib/utils/bom.js +40 -0
  109. package/dist/lib/utils/config.d.ts +1 -0
  110. package/dist/lib/utils/config.js +18 -0
  111. package/dist/lib/utils/index.d.ts +4 -0
  112. package/dist/lib/utils/index.js +49 -0
  113. package/dist/lib/utils/rule-engine.d.ts +20 -0
  114. package/dist/lib/utils/rule-engine.js +57 -0
  115. package/dist/lib/utils/template.d.ts +1 -0
  116. package/dist/lib/utils/template.js +19 -0
  117. package/dist/style.css +86 -0
  118. package/package.json +65 -0
  119. package/rollup.config.ts +47 -0
  120. package/src/all-components.ts +12 -0
  121. package/src/assets/icons/operation-selected.svg +3 -0
  122. package/src/assets/icons/operation.svg +3 -0
  123. package/src/assets/icons/process-path-selected.svg +3 -0
  124. package/src/assets/icons/process-path.svg +3 -0
  125. package/src/assets/icons/process-plan-selected.svg +3 -0
  126. package/src/assets/icons/process-plan.svg +3 -0
  127. package/src/assets/icons/remove-minus.svg +4 -0
  128. package/src/assets/icons/remove-plus.svg +5 -0
  129. package/src/assets/icons/search.svg +4 -0
  130. package/src/components/bom-tree/index.ts +5 -0
  131. package/src/components/bom-tree/index.vue +377 -0
  132. package/src/components/bom-workbench/index.ts +5 -0
  133. package/src/components/bom-workbench/index.vue +97 -0
  134. package/src/components/gray-input/index.ts +5 -0
  135. package/src/components/gray-input/index.vue +40 -0
  136. package/src/components/index.ts +4 -0
  137. package/src/components/left-right/index.ts +5 -0
  138. package/src/components/left-right/index.vue +149 -0
  139. package/src/defaults.ts +3 -0
  140. package/src/hooks/index.ts +1 -0
  141. package/src/hooks/use-ppboms.ts +97 -0
  142. package/src/index.ts +9 -0
  143. package/src/models/bom.ts +43 -0
  144. package/src/models/common.ts +6 -0
  145. package/src/models/index.ts +2 -0
  146. package/src/shared/keys.ts +1 -0
  147. package/src/shared/make-installer.ts +21 -0
  148. package/src/shims-vue.d.ts +5 -0
  149. package/src/tokens/index.ts +0 -0
  150. package/src/types/components.d.ts +17 -0
  151. package/src/utils/bom.ts +33 -0
  152. package/src/utils/config.ts +11 -0
  153. package/src/utils/index.ts +4 -0
  154. package/src/utils/rule-engine.ts +83 -0
  155. package/src/utils/template.ts +13 -0
  156. package/tsconfig.json +7 -0
  157. package/unocss.config.ts +55 -0
  158. package/vite-env.d.ts +1 -0
  159. package/vite.config.ts +79 -0
@@ -0,0 +1,5 @@
1
+ import { withInstall } from "@handaotech-design/vue";
2
+ import LeftRight from "./index.vue";
3
+ export * from "./index.vue";
4
+ export const HdLeftRight = withInstall(LeftRight);
5
+ export default HdLeftRight;
@@ -0,0 +1,142 @@
1
+ <script lang="ts" setup>
2
+ import { debounce, throttle } from 'lodash-es'
3
+ import { onMounted, onUnmounted, ref } from 'vue'
4
+
5
+ const props = defineProps({
6
+ moduleKey: {
7
+ type: String,
8
+ required: true,
9
+ },
10
+ maxLeftWidth: {
11
+ type: Number,
12
+ required: false,
13
+ },
14
+ })
15
+ const COMPONENT_NAME = 'HdLeftRight'
16
+ defineOptions({
17
+ name: COMPONENT_NAME,
18
+ })
19
+
20
+ // 默认宽度 & 本地存储
21
+ const defaultLeftWidth = 300
22
+ const savedWidth = localStorage.getItem(`${props.moduleKey}LeftPanelWidth`)
23
+ const initialWidth = savedWidth ? parseInt(savedWidth) : defaultLeftWidth
24
+
25
+ // 响应式宽度
26
+ const leftWidth = ref(initialWidth)
27
+ const isDragging = ref(false)
28
+ let startX = 0
29
+ let startWidth = 0
30
+
31
+ // 节流更新UI(60fps)
32
+ const throttledUpdate = throttle((width: number) => {
33
+ leftWidth.value = width
34
+ }, 16)
35
+
36
+ // 防抖保存到本地存储(300ms延迟)
37
+ const debouncedSave = debounce(
38
+ (val: number) => {
39
+ localStorage.setItem(`${props.moduleKey}LeftPanelWidth`, val.toString())
40
+ },
41
+ 300,
42
+ { trailing: true }, // 确保最后一次触发
43
+ )
44
+
45
+ // 处理拖动
46
+ const handleDrag = (e: MouseEvent) => {
47
+ if (!isDragging.value) {
48
+ return
49
+ }
50
+ const delta = e.clientX - startX
51
+ const newWidth = Math.max(
52
+ 200,
53
+ Math.min(props.maxLeftWidth ?? 500, startWidth + delta),
54
+ )
55
+
56
+ throttledUpdate(newWidth) // 节流更新UI
57
+ debouncedSave(newWidth) // 防抖保存
58
+ }
59
+
60
+ // 停止拖动
61
+ const stopDrag = () => {
62
+ isDragging.value = false
63
+ document.removeEventListener('mousemove', handleDrag)
64
+ document.removeEventListener('mouseup', stopDrag)
65
+
66
+ debouncedSave.flush() // 立即执行未完成的保存
67
+ }
68
+
69
+ // 开始拖动
70
+ const startDrag = (e: MouseEvent) => {
71
+ isDragging.value = true
72
+ startX = e.clientX
73
+ startWidth = leftWidth.value
74
+ document.addEventListener('mousemove', handleDrag)
75
+ document.addEventListener('mouseup', stopDrag)
76
+ }
77
+
78
+ // 清理
79
+ onUnmounted(() => {
80
+ document.removeEventListener('mousemove', handleDrag)
81
+ document.removeEventListener('mouseup', stopDrag)
82
+ throttledUpdate.cancel()
83
+ debouncedSave.cancel()
84
+ })
85
+
86
+ // 初始化
87
+ onMounted(() => {
88
+ leftWidth.value = initialWidth
89
+ })
90
+ </script>
91
+
92
+ <template>
93
+ <div class="wrapper">
94
+ <div class="left" :style="{ width: `${leftWidth}px` }">
95
+ <slot name="left" />
96
+ </div>
97
+ <div
98
+ class="divider"
99
+ :style="{ left: `${leftWidth}px` }"
100
+ @mousedown="startDrag"
101
+ >
102
+ <div class="vertical-line" />
103
+ </div>
104
+ <div class="right">
105
+ <slot name="right" />
106
+ </div>
107
+ </div>
108
+ </template>
109
+
110
+ <style scoped>
111
+ .wrapper {
112
+ display: flex;
113
+ position: relative;
114
+ height: 100%;
115
+ }
116
+ .wrapper .left {
117
+ height: 100%;
118
+ overflow: hidden;
119
+ }
120
+ .wrapper .divider {
121
+ position: absolute;
122
+ height: 100%;
123
+ cursor: col-resize;
124
+ z-index: 1;
125
+ transition: background 0.2s;
126
+ }
127
+ .wrapper .divider .vertical-line {
128
+ width: 1px;
129
+ height: 100%;
130
+ background: #E9EBED;
131
+ }
132
+ .wrapper .divider:hover .vertical-line {
133
+ background: #2e72d2;
134
+ width: 2px;
135
+ }
136
+ .wrapper .right {
137
+ flex: 1;
138
+ overflow-y: auto;
139
+ overflow-x: hidden;
140
+ padding: 0 16px;
141
+ }
142
+ </style>
@@ -0,0 +1,4 @@
1
+ declare const _default: {
2
+ install: (app: import("vue").App) => void;
3
+ };
4
+ export default _default;
@@ -0,0 +1,3 @@
1
+ import { makeInstaller } from "./shared/make-installer.js";
2
+ import AllComponents from "./all-components.js";
3
+ export default makeInstaller([...AllComponents]);
@@ -0,0 +1 @@
1
+ export * from './use-ppboms';
@@ -0,0 +1 @@
1
+ export * from "./use-ppboms.js";
@@ -0,0 +1,19 @@
1
+ export declare enum QueryType {
2
+ ALL = "ALL",
3
+ MODEL_ESN = "MODEL_ESN"
4
+ }
5
+ interface UsePpbomsParams {
6
+ host: string;
7
+ appId: string;
8
+ appSecret: string;
9
+ queryType?: QueryType;
10
+ options?: Record<string, any>;
11
+ }
12
+ export declare const UsePpboms: (params: UsePpbomsParams) => {
13
+ data: import("vue").Ref<any>;
14
+ layoutConfig: import("vue").Ref<any>;
15
+ treeConfig: import("vue").Ref<any>;
16
+ loading: import("vue").Ref<boolean>;
17
+ getDataAndConfig: () => Promise<void>;
18
+ };
19
+ export {};
@@ -0,0 +1,81 @@
1
+ import { ref } from "vue";
2
+ import { convertBomDataToTree, getConfig } from "../utils/index.js";
3
+ import { YesNo } from "../models/index.js";
4
+ const ppbomPageConfigCode = "PPBOM_PAGE";
5
+ export var QueryType = /* @__PURE__ */ ((QueryType2) => {
6
+ QueryType2["ALL"] = "ALL";
7
+ QueryType2["MODEL_ESN"] = "MODEL_ESN";
8
+ return QueryType2;
9
+ })(QueryType || {});
10
+ export const UsePpboms = (params) => {
11
+ const { host, appId, appSecret, queryType, options } = params;
12
+ const loading = ref(false);
13
+ const data = ref();
14
+ const treeConfig = ref();
15
+ const layoutConfig = ref();
16
+ const queryBoms = async () => {
17
+ const body = {
18
+ page: 1,
19
+ pageSize: Number.MAX_SAFE_INTEGER,
20
+ ...options ?? {}
21
+ };
22
+ const response = await fetch(`http://${host}/api/public/v2/ppboms/query/all`, {
23
+ method: "POST",
24
+ headers: {
25
+ "Content-Type": "application/json",
26
+ "X-CONSUMER-ID": appId,
27
+ "Authorization": `Bearer ${appSecret}`
28
+ },
29
+ body: JSON.stringify(body)
30
+ });
31
+ return response.json();
32
+ };
33
+ const queryBomsByModelEsn = async () => {
34
+ const body = {
35
+ page: 1,
36
+ pageSize: Number.MAX_SAFE_INTEGER,
37
+ forceSettle: YesNo.YES,
38
+ lookupOnly: YesNo.YES,
39
+ ...options ?? {}
40
+ };
41
+ const response = await fetch(`http://${host}/api/public/v2/ppboms/query/by-model-esn`, {
42
+ method: "POST",
43
+ headers: {
44
+ "Content-Type": "application/json",
45
+ "X-CONSUMER-ID": appId,
46
+ "Authorization": `Bearer ${appSecret}`
47
+ },
48
+ body: JSON.stringify(body)
49
+ });
50
+ return response.json();
51
+ };
52
+ const getData = async () => {
53
+ switch (queryType) {
54
+ case "MODEL_ESN" /* MODEL_ESN */:
55
+ return await queryBomsByModelEsn();
56
+ default:
57
+ return await queryBoms();
58
+ }
59
+ };
60
+ const getDataAndConfig = async () => {
61
+ try {
62
+ loading.value = true;
63
+ const dataResp = await getData();
64
+ const configResp = await getConfig(host, ppbomPageConfigCode, appId, appSecret);
65
+ loading.value = false;
66
+ const props = configResp.config.props;
67
+ data.value = convertBomDataToTree(dataResp.data.items, props.content.tree.nodeConfig.rule);
68
+ treeConfig.value = props.content.tree;
69
+ layoutConfig.value = props.content.tree.layout;
70
+ } finally {
71
+ loading.value = false;
72
+ }
73
+ };
74
+ return {
75
+ data,
76
+ layoutConfig,
77
+ treeConfig,
78
+ loading,
79
+ getDataAndConfig
80
+ };
81
+ };
@@ -0,0 +1,7 @@
1
+ import installer from './defaults';
2
+ export * from './components';
3
+ export * from './hooks';
4
+ export * from './models';
5
+ export * from './utils';
6
+ export declare const install: (app: import("vue").App) => void;
7
+ export default installer;
@@ -0,0 +1,7 @@
1
+ import installer from "./defaults.js";
2
+ export * from "./components/index.js";
3
+ export * from "./hooks/index.js";
4
+ export * from "./models/index.js";
5
+ export * from "./utils/index.js";
6
+ export const install = installer.install;
7
+ export default installer;
@@ -0,0 +1,35 @@
1
+ import type { BaseRule } from '../utils';
2
+ import type { YesNo } from './common';
3
+ export declare const defaultTitleTemplate = "${code}";
4
+ export interface BomNodeTitleConfig {
5
+ template: string;
6
+ }
7
+ export interface WorkBenchLayoutConfig {
8
+ maxLeftWidth: number;
9
+ }
10
+ export interface BomTreeNodeConfig {
11
+ title?: BomNodeTitleConfig;
12
+ selectable?: YesNo;
13
+ icon?: string;
14
+ }
15
+ export interface BomLocalFilter {
16
+ placeholder?: string;
17
+ }
18
+ export interface BomTreeConfig {
19
+ filter?: BomLocalFilter;
20
+ nodeConfig: {
21
+ rule: BaseRule<BomTreeNodeConfig>;
22
+ };
23
+ }
24
+ export interface BomNode {
25
+ id: string;
26
+ key: string;
27
+ code: string;
28
+ version: string;
29
+ name: string;
30
+ qty: number;
31
+ children?: BomNode[];
32
+ businessType: string;
33
+ raw: Record<string, any>;
34
+ [key: string]: any;
35
+ }
@@ -0,0 +1 @@
1
+ export const defaultTitleTemplate = "${code}";
@@ -0,0 +1,5 @@
1
+ export declare enum YesNo {
2
+ YES = "YES",
3
+ NO = "NO"
4
+ }
5
+ export type Optional<T> = T | undefined | null;
@@ -0,0 +1,5 @@
1
+ export var YesNo = /* @__PURE__ */ ((YesNo2) => {
2
+ YesNo2["YES"] = "YES";
3
+ YesNo2["NO"] = "NO";
4
+ return YesNo2;
5
+ })(YesNo || {});
@@ -0,0 +1,2 @@
1
+ export * from './common';
2
+ export * from './bom';
@@ -0,0 +1,2 @@
1
+ export * from "./common.js";
2
+ export * from "./bom.js";
@@ -0,0 +1 @@
1
+ export declare const INSTALLED_KEY: unique symbol;
@@ -0,0 +1 @@
1
+ export const INSTALLED_KEY = Symbol("INSTALLED_KEY");
@@ -0,0 +1,4 @@
1
+ import type { App, Plugin } from '@vue/runtime-core';
2
+ export declare const makeInstaller: (components?: Plugin[]) => {
3
+ install: (app: App) => void;
4
+ };
@@ -0,0 +1,13 @@
1
+ import { INSTALLED_KEY } from "./keys.js";
2
+ export const makeInstaller = (components = []) => {
3
+ const install = (app) => {
4
+ if (app[INSTALLED_KEY]) {
5
+ return;
6
+ }
7
+ app[INSTALLED_KEY] = true;
8
+ components.forEach((c) => app.use(c));
9
+ };
10
+ return {
11
+ install
12
+ };
13
+ };
@@ -0,0 +1,5 @@
1
+ declare module '*.vue' {
2
+ import type { DefineComponent } from 'vue';
3
+ const component: DefineComponent<Record<string,unknown>, Record<string,unknown>, unknown>;
4
+ export default component;
5
+ }
File without changes
File without changes
@@ -0,0 +1,17 @@
1
+ // generated by unplugin-vue-components
2
+ // We suggest you to commit this file into source control
3
+ // Read more: https://github.com/vuejs/core/pull/3399
4
+ import '@vue/runtime-core'
5
+
6
+ export {}
7
+
8
+ declare module '@vue/runtime-core' {
9
+ export interface GlobalComponents {
10
+ BomTree: typeof import('./../components/bom-tree/index.vue')['default']
11
+ BomWorkbench: typeof import('./../components/bom-workbench/index.vue')['default']
12
+ GrayInput: typeof import('./../components/gray-input/index.vue')['default']
13
+ LeftRight: typeof import('./../components/left-right/index.vue')['default']
14
+ RouterLink: typeof import('vue-router')['RouterLink']
15
+ RouterView: typeof import('vue-router')['RouterView']
16
+ }
17
+ }
@@ -0,0 +1,3 @@
1
+ import type { BomNode, BomTreeNodeConfig } from '../models';
2
+ import type { BaseRule } from './rule-engine';
3
+ export declare const convertBomDataToTree: (treeData: BomNode[], nodeConfigRule: BaseRule<BomTreeNodeConfig>) => BomNode[];
@@ -0,0 +1,29 @@
1
+ import * as _ from "lodash-es";
2
+ import { YesNo, defaultTitleTemplate } from "../models/index.js";
3
+ import { RuleEngine } from "./rule-engine.js";
4
+ import { genText } from "./template.js";
5
+ const defaultTreeNodeConfig = {
6
+ title: {
7
+ template: defaultTitleTemplate
8
+ }
9
+ };
10
+ export const convertBomDataToTree = (treeData, nodeConfigRule) => {
11
+ const ruleEngine = new RuleEngine(nodeConfigRule);
12
+ const traverse = (nodes = []) => {
13
+ for (const node of nodes) {
14
+ const nodeConfig = ruleEngine.matchOne({ bomNode: node }, defaultTreeNodeConfig);
15
+ const titleTemplate = nodeConfig?.title?.template ?? defaultTitleTemplate;
16
+ Object.assign(node, {
17
+ key: node.key,
18
+ title: genText(node, titleTemplate),
19
+ selectable: nodeConfig?.selectable === YesNo.YES,
20
+ icon: nodeConfig?.icon
21
+ });
22
+ if (!_.isEmpty(node.children)) {
23
+ traverse(node.children);
24
+ }
25
+ }
26
+ };
27
+ traverse(treeData);
28
+ return treeData;
29
+ };
@@ -0,0 +1 @@
1
+ export declare const getConfig: (host: string, code: string, appId: string, appSecret: string) => Promise<any>;
@@ -0,0 +1,11 @@
1
+ export const getConfig = async (host, code, appId, appSecret) => {
2
+ const response = await fetch(`http://${host}/api/public/v2/business-configs/${code}`, {
3
+ method: "GET",
4
+ headers: {
5
+ "Content-Type": "application/json",
6
+ "X-CONSUMER-ID": appId,
7
+ "Authorization": `Bearer ${appSecret}`
8
+ }
9
+ });
10
+ return await response.json();
11
+ };
@@ -0,0 +1,4 @@
1
+ export * from './bom';
2
+ export * from './rule-engine';
3
+ export * from './template';
4
+ export * from './config';
@@ -0,0 +1,4 @@
1
+ export * from "./bom.js";
2
+ export * from "./rule-engine.js";
3
+ export * from "./template.js";
4
+ export * from "./config.js";
@@ -0,0 +1,20 @@
1
+ import type { Optional } from '../models/common';
2
+ export type RuleCondition = 'default' | 'always' | string | LogicExpression;
3
+ export interface LogicExpression {
4
+ logic: any;
5
+ conditions: any[];
6
+ }
7
+ export interface BaseRule<T> {
8
+ cases: BaseCase<T>[];
9
+ }
10
+ export interface BaseCase<T> {
11
+ key?: string;
12
+ condition: RuleCondition;
13
+ result: T;
14
+ }
15
+ export declare class RuleEngine<T> {
16
+ private readonly rule;
17
+ constructor(rule: BaseRule<T>);
18
+ matchOne(context: any, defaultResult?: T): Optional<T> | T;
19
+ matchMany(context: any, defaultResult?: T): T[];
20
+ }
@@ -0,0 +1,50 @@
1
+ export class RuleEngine {
2
+ rule;
3
+ constructor(rule) {
4
+ this.rule = rule;
5
+ }
6
+ matchOne(context, defaultResult) {
7
+ let defaultRule;
8
+ for (const caseItem of this.rule.cases) {
9
+ const cond = caseItem.condition;
10
+ if (cond === "default") {
11
+ defaultRule = caseItem;
12
+ continue;
13
+ }
14
+ if (cond === "always" || typeof cond === "string" && evaluate(cond, context)) {
15
+ return caseItem.result;
16
+ }
17
+ }
18
+ if (defaultRule) {
19
+ return defaultRule.result;
20
+ }
21
+ return defaultResult;
22
+ }
23
+ matchMany(context, defaultResult) {
24
+ const results = [];
25
+ let defaultRule;
26
+ for (const caseItem of this.rule.cases) {
27
+ const cond = caseItem.condition;
28
+ if (cond === "default") {
29
+ defaultRule = caseItem;
30
+ continue;
31
+ }
32
+ if (cond === "always" || typeof cond === "string" && evaluate(cond, context)) {
33
+ results.push(caseItem.result);
34
+ }
35
+ }
36
+ if (results.length > 0) {
37
+ return results;
38
+ }
39
+ const fallback = defaultRule?.result ?? defaultResult;
40
+ return fallback ? [fallback] : [];
41
+ }
42
+ }
43
+ function evaluate(expr, context) {
44
+ try {
45
+ const func = new Function("context", `with(context) { return ${expr}; }`);
46
+ return Boolean(func(context));
47
+ } catch {
48
+ return false;
49
+ }
50
+ }
@@ -0,0 +1 @@
1
+ export declare function genText(data: Record<string, any>, templateStr: string, defaultText?: string): string;
@@ -0,0 +1,11 @@
1
+ import * as _ from "lodash-es";
2
+ export function genText(data, templateStr, defaultText) {
3
+ const compiled = _.template(templateStr);
4
+ let str;
5
+ try {
6
+ str = compiled(data);
7
+ } catch (e) {
8
+ str = defaultText ?? "--";
9
+ }
10
+ return str;
11
+ }
@@ -0,0 +1,3 @@
1
+ import type { Plugin } from 'vue';
2
+ declare const _default: Plugin[];
3
+ export default _default;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+
7
+ var _index = _interopRequireDefault(require("./components/bom-tree/index"));
8
+ var _index2 = _interopRequireDefault(require("./components/gray-input/index"));
9
+ var _index3 = _interopRequireDefault(require("./components/left-right/index"));
10
+ var _index4 = _interopRequireDefault(require("./components/bom-workbench/index"));
11
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
12
+ module.exports = [_index2.default, _index3.default, _index.default, _index4.default];
@@ -0,0 +1,3 @@
1
+ <svg width="200" height="200" viewBox="0 0 200 200" fill="none" xmlns="http://www.w3.org/2000/svg" class="keep">
2
+ <path d="M140.222 106.426C161.171 106.426 178.086 123.392 178 144.299C177.914 165.206 161 182.085 140.05 182C119.101 182 102.187 165.034 102.273 144.127C102.273 123.906 118.328 107.283 138.591 106.426H140.222ZM96.0908 18C99.5251 18 102.358 20.8276 102.358 24.255H113.262C119.788 24.255 125.197 28.7962 126.055 34.7084H142.798C148.464 34.7941 153.101 39.0783 153.616 44.7335L153.702 45.8474V98.1148C148.636 96.4011 143.399 95.4586 137.99 95.4586C111.459 95.4586 89.9948 117.308 89.9948 144.299C89.9948 154.666 93.2574 164.863 99.3534 173.26L100.641 174.888H35.904C30.2374 174.888 25.5152 170.432 25.0859 164.777L25 163.835V45.7617C25 40.1065 29.2929 35.3082 34.9596 34.7941L35.904 34.7084H55.1363C55.9949 29.139 60.8888 24.7691 66.9848 24.3406H78.8332C78.8332 20.9133 81.6665 18.0857 85.1009 18.0857L96.0908 18ZM140.05 125.105C135.586 127.59 132.924 131.789 132.495 136.673L132.409 137.787L110.429 149.782V150.468L115.237 158.437L117.985 162.464H118.672L125.54 158.437L139.964 150.468C142.025 151.839 144.772 152.439 146.833 152.439C150.267 152.439 153.015 151.753 155.762 150.468C157.823 149.097 161.257 146.098 161.944 143.099C163.146 140.186 163.318 137.272 162.889 134.359L162.631 133.074H161.257L148.894 140.443L147.52 138.472L145.459 135.816L147.52 134.445L158.51 127.762V127.076C158.081 126.219 157.308 125.534 156.449 125.105C155.161 124.42 148.207 120.65 140.05 125.105ZM79.1767 129.561H49.5555C46.808 129.561 44.5757 131.703 44.5757 134.445C44.5757 136.93 46.3787 139.072 48.8686 139.415L49.5555 139.5H79.1767C81.9241 139.5 84.1564 137.272 84.1564 134.531C84.1564 131.789 81.9241 129.561 79.1767 129.561ZM92.3989 96.6582H49.5555C46.808 96.6582 44.5757 98.8859 44.5757 101.542C44.5757 104.027 46.3787 106.083 48.8686 106.426L49.5555 106.512H92.3989C95.1463 106.512 97.3786 104.284 97.3786 101.542C97.2928 98.8859 95.0605 96.6582 92.3989 96.6582ZM131.894 63.8411H49.5555C46.808 63.8411 44.5757 66.0689 44.5757 68.7251C44.5757 71.2099 46.3787 73.2663 48.8686 73.6091L49.5555 73.6948H131.894C134.641 73.6948 136.874 71.467 136.874 68.7251C136.874 65.9832 134.641 63.8411 131.894 63.8411ZM92.5706 30.5956H88.6211C85.8736 31.1954 83.4696 33.0804 82.2676 35.651L81.9241 36.5078C80.9797 38.9926 81.2373 41.7345 82.5251 44.1337C84.1564 47.047 87.2473 48.8463 90.5958 48.8463C95.6615 48.8463 99.8685 44.7335 99.8685 39.6781C99.8685 38.3072 99.5251 36.9362 98.9241 35.651L98.4089 34.7941L98.0655 34.28C96.7776 32.3093 94.8029 31.024 92.5706 30.5956Z" fill="#1E3B9D"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg width="200" height="200" viewBox="0 0 200 200" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M140.222 106.426C161.171 106.426 178.086 123.392 178 144.299C177.914 165.206 161 182.085 140.05 182C119.101 182 102.187 165.034 102.273 144.127C102.273 123.906 118.328 107.283 138.591 106.426H140.222ZM96.0908 18C99.5251 18 102.358 20.8276 102.358 24.255H113.262C119.788 24.255 125.197 28.7962 126.055 34.7084H142.798C148.464 34.7941 153.101 39.0783 153.616 44.7335L153.702 45.8474V98.1148C148.636 96.4011 143.399 95.4586 137.99 95.4586C111.459 95.4586 89.9948 117.308 89.9948 144.299C89.9948 154.666 93.2574 164.863 99.3534 173.26L100.641 174.888H35.904C30.2374 174.888 25.5152 170.432 25.0859 164.777L25 163.835V45.7617C25 40.1065 29.2929 35.3082 34.9596 34.7941L35.904 34.7084H55.1363C55.9949 29.139 60.8888 24.7691 66.9848 24.3406H78.8332C78.8332 20.9133 81.6665 18.0857 85.1009 18.0857L96.0908 18ZM140.05 125.105C135.586 127.59 132.924 131.789 132.495 136.673L132.409 137.787L110.429 149.782V150.468L115.237 158.437L117.985 162.464H118.672L125.54 158.437L139.964 150.468C142.025 151.839 144.772 152.439 146.833 152.439C150.267 152.439 153.015 151.753 155.762 150.468C157.823 149.097 161.257 146.098 161.944 143.099C163.146 140.186 163.318 137.272 162.889 134.359L162.631 133.074H161.257L148.894 140.443L147.52 138.472L145.459 135.816L147.52 134.445L158.51 127.762V127.076C158.081 126.219 157.308 125.534 156.449 125.105C155.161 124.42 148.207 120.65 140.05 125.105ZM79.1767 129.561H49.5555C46.808 129.561 44.5757 131.703 44.5757 134.445C44.5757 136.93 46.3787 139.072 48.8686 139.415L49.5555 139.5H79.1767C81.9241 139.5 84.1564 137.272 84.1564 134.531C84.1564 131.789 81.9241 129.561 79.1767 129.561ZM92.3989 96.6582H49.5555C46.808 96.6582 44.5757 98.8859 44.5757 101.542C44.5757 104.027 46.3787 106.083 48.8686 106.426L49.5555 106.512H92.3989C95.1463 106.512 97.3786 104.284 97.3786 101.542C97.2928 98.8859 95.0605 96.6582 92.3989 96.6582ZM131.894 63.8411H49.5555C46.808 63.8411 44.5757 66.0689 44.5757 68.7251C44.5757 71.2099 46.3787 73.2663 48.8686 73.6091L49.5555 73.6948H131.894C134.641 73.6948 136.874 71.467 136.874 68.7251C136.874 65.9832 134.641 63.8411 131.894 63.8411ZM92.5706 30.5956H88.6211C85.8736 31.1954 83.4696 33.0804 82.2676 35.651L81.9241 36.5078C80.9797 38.9926 81.2373 41.7345 82.5251 44.1337C84.1564 47.047 87.2473 48.8463 90.5958 48.8463C95.6615 48.8463 99.8685 44.7335 99.8685 39.6781C99.8685 38.3072 99.5251 36.9362 98.9241 35.651L98.4089 34.7941L98.0655 34.28C96.7776 32.3093 94.8029 31.024 92.5706 30.5956Z" fill="#2C2C2C"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg width="200" height="200" viewBox="0 0 200 200" fill="none" xmlns="http://www.w3.org/2000/svg" class="keep">
2
+ <path d="M108 167V94C108 92 109 90 110 90L175 67C178 66 182 68 182 72V153C182 155 181 157 179 158L113 182C111 183 108 181 108 179V167ZM33 45L100 22H103L167 44C179 49 179 50 167 54L103 75H100L28 50C27 50 27 47 28 47L33 45ZM92 181L25 157C23 156 22 154 22 152V72C22 68 25 66 29 67L95 90C96 90 97 92 97 93V178C97 181 95 182 92 181Z" fill="#1E3B9D"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg width="200" height="200" viewBox="0 0 200 200" fill="none" xmlns="http://www.w3.org/2000/svg" class="keep">
2
+ <path d="M108 167V94C108 92 109 90 110 90L175 67C178 66 182 68 182 72V153C182 155 181 157 179 158L113 182C111 183 108 181 108 179V167ZM33 45L100 22H103L167 44C179 49 179 50 167 54L103 75H100L28 50C27 50 27 47 28 47L33 45ZM92 181L25 157C23 156 22 154 22 152V72C22 68 25 66 29 67L95 90C96 90 97 92 97 93V178C97 181 95 182 92 181Z" fill="#2C2C2C"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg width="200" height="200" viewBox="0 0 200 200" fill="none" xmlns="http://www.w3.org/2000/svg" class="keep">
2
+ <path d="M174.922 99.9805C174.922 58.5547 141.328 24.9805 99.9023 24.9805C58.4766 24.9805 24.9023 58.5742 24.9023 100C24.9023 141.426 58.4961 175 99.9219 175C141.328 175 174.922 141.406 174.922 99.9805ZM109.336 133.164C98.9844 145.195 85.8984 149.062 84.3359 139.98C83.1445 133.164 89.3359 108.379 90.5859 99.043C90.9766 95.9961 87.4414 99.043 87.4414 99.043C87.4414 99.043 77.2852 106.836 74.9414 102.461C74.5898 101.758 77.0898 99.6289 78.0859 99.0625C78.0859 99.0625 99.2773 82.1094 106.211 85.4102C113.145 88.7109 103.789 109.609 103.086 112.695C102.402 115.801 98.0078 139.453 112.461 126.348C112.461 126.348 119.687 121.113 109.336 133.164ZM104.355 74.9609C100.684 74.9219 97.3242 72.8711 95.6055 69.6094C93.8867 66.3477 94.1211 62.4219 96.1719 59.375C98.2227 56.3281 101.797 54.6484 105.449 55.0195C110.781 55.5469 114.727 60.1758 114.434 65.5273C114.16 70.8594 109.707 75.0195 104.355 74.9609Z" fill="#1E3B9D"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg width="200" height="200" viewBox="0 0 200 200" fill="none" xmlns="http://www.w3.org/2000/svg" class="keep">
2
+ <path d="M174.922 99.9805C174.922 58.5547 141.328 24.9805 99.9023 24.9805C58.4766 24.9805 24.9023 58.5742 24.9023 100C24.9023 141.426 58.4961 175 99.9219 175C141.328 175 174.922 141.406 174.922 99.9805ZM109.336 133.164C98.9844 145.195 85.8984 149.062 84.3359 139.98C83.1445 133.164 89.3359 108.379 90.5859 99.043C90.9766 95.9961 87.4414 99.043 87.4414 99.043C87.4414 99.043 77.2852 106.836 74.9414 102.461C74.5898 101.758 77.0898 99.6289 78.0859 99.0625C78.0859 99.0625 99.2773 82.1094 106.211 85.4102C113.145 88.7109 103.789 109.609 103.086 112.695C102.402 115.801 98.0078 139.453 112.461 126.348C112.461 126.348 119.687 121.113 109.336 133.164ZM104.355 74.9609C100.684 74.9219 97.3242 72.8711 95.6055 69.6094C93.8867 66.3477 94.1211 62.4219 96.1719 59.375C98.2227 56.3281 101.797 54.6484 105.449 55.0195C110.781 55.5469 114.727 60.1758 114.434 65.5273C114.16 70.8594 109.707 75.0195 104.355 74.9609Z" fill="#2C2C2C"/>
3
+ </svg>
@@ -0,0 +1,4 @@
1
+ <svg class="keep" width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <rect x="0.5" y="0.5" width="15" height="15" rx="4.5" stroke="#1E3B9D"/>
3
+ <path d="M4 8H12" stroke="#1E3B9D" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
4
+ </svg>
@@ -0,0 +1,5 @@
1
+ <svg class="keep" width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <rect x="0.5" y="0.5" width="15" height="15" rx="4.5" stroke="#1E3B9D"/>
3
+ <path d="M4 8H12" stroke="#1E3B9D" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
4
+ <path d="M8 4L8 12" stroke="#1E3B9D" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
5
+ </svg>
@@ -0,0 +1,4 @@
1
+ <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg" class="keep">
2
+ <path d="M6.66667 11.3333C9.244 11.3333 11.3333 9.244 11.3333 6.66667C11.3333 4.08934 9.244 2 6.66667 2C4.08934 2 2 4.08934 2 6.66667C2 9.244 4.08934 11.3333 6.66667 11.3333Z" stroke="#1E3B9D" stroke-linecap="round" stroke-linejoin="round"/>
3
+ <path d="M10 10L14 14" stroke="#1E3B9D" stroke-linecap="round" stroke-linejoin="round"/>
4
+ </svg>
@@ -0,0 +1,3 @@
1
+ export * from './index.vue';
2
+ export declare const HdBomTree: any;
3
+ export default HdBomTree;