@bytenew/bn-bus-ui 1.1.461 → 1.1.463

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 (167) hide show
  1. package/install.js +134 -0
  2. package/package.json +20 -4
  3. package/packages/BnAddress/index.vue +141 -0
  4. package/packages/BnAddressParse/index.vue +75 -0
  5. package/packages/BnAdvancedFilter/BnFilterView.vue +145 -0
  6. package/packages/BnAdvancedFilter/index.vue +345 -0
  7. package/packages/BnAdvancedFilter/util.js +171 -0
  8. package/packages/BnCascader/BnCascader.vue +543 -0
  9. package/packages/BnCascader/BnCascaderPanel.vue +1331 -0
  10. package/packages/BnCascader/cascaderDisplay.js +102 -0
  11. package/packages/BnCheck/BnCheck.vue +253 -0
  12. package/packages/BnColumnConfig/columnConfigDialog.vue +134 -0
  13. package/packages/BnColumnConfig/component/childrenFormSetting/assocTable.vue +143 -0
  14. package/packages/BnColumnConfig/component/childrenFormSetting/assocTableSearch.vue +314 -0
  15. package/packages/BnColumnConfig/component/childrenFormSetting/index.vue +243 -0
  16. package/packages/BnColumnConfig/component/defaultSet/defaultSet.vue +114 -0
  17. package/packages/BnColumnConfig/component/defaultSet/stringDefault.vue +210 -0
  18. package/packages/BnColumnConfig/component/funcExprDialog/funcExprDialog.vue +126 -0
  19. package/packages/BnColumnConfig/component/packageFilter/index.vue +141 -0
  20. package/packages/BnColumnConfig/component/paraExplainSet/index.vue +156 -0
  21. package/packages/BnColumnConfig/component/setOption/setOption.vue +321 -0
  22. package/packages/BnColumnConfig/component/setRelationOption/ConditionList.vue +277 -0
  23. package/packages/BnColumnConfig/component/setRelationOption/LevelHeader.vue +144 -0
  24. package/packages/BnColumnConfig/component/setRelationOption/setRelationOption.vue +642 -0
  25. package/packages/BnColumnConfig/data.js +129 -0
  26. package/packages/BnColumnConfig/index.scss +23 -0
  27. package/packages/BnColumnConfig/index.vue +309 -0
  28. package/packages/BnCondVal/BnCondVal.vue +112 -0
  29. package/packages/BnCondVal/itemVal/dateRegVal.vue +39 -0
  30. package/packages/BnCondVal/itemVal/dateVal.vue +39 -0
  31. package/packages/BnCondVal/itemVal/numRegVal.vue +67 -0
  32. package/packages/BnCondVal/itemVal/numVal.vue +44 -0
  33. package/packages/BnCondVal/itemVal/relationVal.vue +73 -0
  34. package/packages/BnCondVal/itemVal/selectColumnVal.vue +58 -0
  35. package/packages/BnCondVal/itemVal/selectVal.vue +59 -0
  36. package/packages/BnCondVal/itemVal/stringVal.vue +156 -0
  37. package/packages/BnCondition/index.vue +551 -0
  38. package/packages/BnCondition/util.js +232 -0
  39. package/packages/BnDatePicker/BnDatePicker.vue +194 -0
  40. package/packages/BnDrop/BnDrop.vue +917 -0
  41. package/packages/BnEmptyTip/BnEmptyTip.vue +107 -0
  42. package/packages/BnExportOrder/BnExportOrder.vue +241 -0
  43. package/packages/BnExportOrder/validatorCode.vue +94 -0
  44. package/packages/BnFileView/BnFileView.vue +271 -0
  45. package/packages/BnFileView/FileDetail.vue +125 -0
  46. package/packages/BnFileView/videoPreview.vue +70 -0
  47. package/packages/BnFilterOption/BnFilterOption.vue +160 -0
  48. package/packages/BnFunExpr/BnFunExpr.vue +608 -0
  49. package/packages/BnImportOrder/BnImportOrder.vue +323 -0
  50. package/packages/BnImportTemplate/BnImportTemplate.vue +866 -0
  51. package/packages/BnImportTemplate/assets/merge_tip_img.png +0 -0
  52. package/packages/BnImportTemplate/assets/sheet_tip.png +0 -0
  53. package/packages/BnImportTemplate/assets/xls.png +0 -0
  54. package/packages/BnImportTemplate/components/ImportTemplateTrigger.vue +198 -0
  55. package/packages/BnImportTemplate/components/TemplateEditDialog.vue +340 -0
  56. package/packages/BnImportTemplate/components/TemplateFieldsConfig.vue +401 -0
  57. package/packages/BnImportTemplate/components/TemplateListDialog.vue +297 -0
  58. package/packages/BnInpNum/BnInpNum.vue +165 -0
  59. package/packages/BnMenus/BnMenus.vue +502 -0
  60. package/packages/BnMenus/MenuItem.vue +321 -0
  61. package/packages/BnOrderCard/BnOrderCard.vue +389 -0
  62. package/packages/BnOrderCard/orderRemark.vue +178 -0
  63. package/packages/BnOrderCard/util.js +94 -0
  64. package/packages/BnOrderDetail/BnOrderDetail.vue +338 -0
  65. package/packages/BnOrderDetail/filterLogByUser.vue +108 -0
  66. package/packages/BnOrderDetail/orderLogs.vue +53 -0
  67. package/packages/BnOrderDetail/showSubForm/index.vue +41 -0
  68. package/packages/BnOrderDetail/showSubForm/showChildTable.vue +61 -0
  69. package/packages/BnOrderDetail/showSubForm/showTimeLine.vue +131 -0
  70. package/packages/BnOrderDetail/showSubForm/tableCellCopy.vue +84 -0
  71. package/packages/BnOrderShare/index.vue +378 -0
  72. package/packages/BnOrderShare/shareUrlInp.vue +54 -0
  73. package/packages/BnRadio/BnRadio.vue +181 -0
  74. package/packages/BnRelation/BnRelation.vue +120 -0
  75. package/packages/BnSelect/BnSelect.vue +485 -0
  76. package/packages/BnSmartForm/BnBatchForm.vue +334 -0
  77. package/packages/BnSmartForm/BnBatchFormDialog.vue +423 -0
  78. package/packages/BnSmartForm/BnSmartElf/elfLog/index.vue +57 -0
  79. package/packages/BnSmartForm/BnSmartElf/index.vue +95 -0
  80. package/packages/BnSmartForm/BnSmartFormPsychic.js +629 -0
  81. package/packages/BnSmartForm/BnSmartFormUtil.js +524 -0
  82. package/packages/BnSmartForm/addressForm/index.vue +73 -0
  83. package/packages/BnSmartForm/checkboxForm/index.vue +99 -0
  84. package/packages/BnSmartForm/childrenForm/childFormFile.vue +237 -0
  85. package/packages/BnSmartForm/childrenForm/childrenFormBody.vue +260 -0
  86. package/packages/BnSmartForm/childrenForm/index.vue +110 -0
  87. package/packages/BnSmartForm/childrenForm/searchInventory.vue +115 -0
  88. package/packages/BnSmartForm/chooseAssocTable/chooseAssocTable.vue +451 -0
  89. package/packages/BnSmartForm/chooseAssocTable/chooseChildGood.vue +229 -0
  90. package/packages/BnSmartForm/chooseAssocTable/tableCellCopy.vue +84 -0
  91. package/packages/BnSmartForm/chooseChildOrder/chooseChildOrder.vue +158 -0
  92. package/packages/BnSmartForm/chooseIPaasData/chooseIPaasData.vue +307 -0
  93. package/packages/BnSmartForm/chooseIPaasData/tableCellCopy.vue +84 -0
  94. package/packages/BnSmartForm/choosePackage/choosePackage.vue +361 -0
  95. package/packages/BnSmartForm/dateDualForm/index.vue +37 -0
  96. package/packages/BnSmartForm/dateForm/index.vue +38 -0
  97. package/packages/BnSmartForm/fileForm/fileFormData.js +50 -0
  98. package/packages/BnSmartForm/fileForm/index.vue +240 -0
  99. package/packages/BnSmartForm/formItemFooter/formItemFooter.vue +38 -0
  100. package/packages/BnSmartForm/formItemTop/formItemTop.vue +42 -0
  101. package/packages/BnSmartForm/index.vue +1201 -0
  102. package/packages/BnSmartForm/numberForm/index.vue +63 -0
  103. package/packages/BnSmartForm/radioForm/index.vue +72 -0
  104. package/packages/BnSmartForm/receiveForm/index.vue +112 -0
  105. package/packages/BnSmartForm/relationForm/index.vue +82 -0
  106. package/packages/BnSmartForm/scoreForm/index.vue +39 -0
  107. package/packages/BnSmartForm/selectForm/index.vue +55 -0
  108. package/packages/BnSmartForm/showValForm/index.vue +42 -0
  109. package/packages/BnSmartForm/showValForm/showValFormTable.vue +104 -0
  110. package/packages/BnSmartForm/smartFormsCommon.scss +43 -0
  111. package/packages/BnSmartForm/stringForm/index.vue +170 -0
  112. package/packages/BnVirtPopover/index.vue +319 -0
  113. package/packages/BnWebLog/BnWebLog.vue +140 -0
  114. package/packages/BnWorkSettingDrop/advancedOptions.js +112 -0
  115. package/packages/BnWorkSettingDrop/benBenAIUtil.js +89 -0
  116. package/packages/BnWorkSettingDrop/index.vue +292 -0
  117. package/packages/font/iconfont.css +243 -0
  118. package/packages/font/iconfont.ttf +0 -0
  119. package/packages/font/iconfont.woff +0 -0
  120. package/packages/font/iconfont.woff2 +0 -0
  121. package/utils/addressParse-old.js +645 -0
  122. package/utils/addressParse.js +735 -0
  123. package/utils/config.js +68 -0
  124. package/utils/index.js +1171 -0
  125. package/dist/assocTableSearch-C14i_zJO.js +0 -349
  126. package/dist/assocTableSearch.css +0 -1
  127. package/dist/bn-bus-ui.es.js +0 -65
  128. package/dist/bn-bus-ui.umd.js +0 -49
  129. package/dist/chooseIPaasData-Cl_5qkFA.js +0 -391
  130. package/dist/chooseIPaasData.css +0 -1
  131. package/dist/defaultSet-I4xpf8a4.js +0 -297
  132. package/dist/defaultSet.css +0 -1
  133. package/dist/fileFormData-D_Q1vylE.js +0 -53
  134. package/dist/formItemFooter-CTA7rDtV.js +0 -108
  135. package/dist/formItemFooter.css +0 -1
  136. package/dist/funcExprDialog-Cm5BiRM3.js +0 -139
  137. package/dist/funcExprDialog.css +0 -1
  138. package/dist/index-B6b4uj8v.js +0 -51
  139. package/dist/index-BWdkDTbz.js +0 -109
  140. package/dist/index-BdZ1zOap.js +0 -89
  141. package/dist/index-BdzNjjMC.js +0 -64
  142. package/dist/index-BfpZqab2.js +0 -66
  143. package/dist/index-BmkiB4hr.js +0 -66
  144. package/dist/index-Br1sqCoo.js +0 -58
  145. package/dist/index-C9qrl-yc.js +0 -183
  146. package/dist/index-CXFJXCn5.js +0 -746
  147. package/dist/index-DF114jZq.js +0 -135
  148. package/dist/index-DFPfZ_Il.js +0 -178
  149. package/dist/index-DSEtu7TN.js +0 -44
  150. package/dist/index-Did0UUWV.js +0 -221
  151. package/dist/index-DrPj-tmI.js +0 -45
  152. package/dist/index-DzDf9s2W.js +0 -89
  153. package/dist/index-LnjudNEI.js +0 -118
  154. package/dist/index-ObCfCmDT.js +0 -45
  155. package/dist/index.css +0 -1
  156. package/dist/index2.css +0 -1
  157. package/dist/index3.css +0 -1
  158. package/dist/index4.css +0 -1
  159. package/dist/index5.css +0 -1
  160. package/dist/index6.css +0 -1
  161. package/dist/index7.css +0 -1
  162. package/dist/install-C-scqkds.js +0 -23103
  163. package/dist/install.css +0 -1
  164. package/dist/setOption-CSnWzOny.js +0 -329
  165. package/dist/setOption.css +0 -1
  166. package/dist/setRelationOption-CJcHdfaa.js +0 -5217
  167. package/dist/setRelationOption.css +0 -1
@@ -0,0 +1,102 @@
1
+ import { isEmpty } from 'lodash';
2
+
3
+ const DEFAULT_OPTION_PROPS = {
4
+ value: 'id',
5
+ label: 'title',
6
+ children: 'children'
7
+ };
8
+
9
+ function mergeOptionProps(optionProps = {}) {
10
+ return { ...DEFAULT_OPTION_PROPS, ...optionProps };
11
+ }
12
+
13
+ /** 根据 value 路径在 options 树中解析各级 label(labelInValue=false 时用于回显) */
14
+ export function resolvePathLabelsFromTree(pathValues, rootOptions, optionProps = {}) {
15
+ if (!Array.isArray(pathValues) || !pathValues.length) {
16
+ return [];
17
+ }
18
+
19
+ const merged = mergeOptionProps(optionProps);
20
+ const labels = [];
21
+ let currentOptions = rootOptions || [];
22
+
23
+ for (const value of pathValues) {
24
+ const node = currentOptions.find(item => item?.[merged.value] === value);
25
+ if (!node) {
26
+ labels.push(String(value ?? ''));
27
+ break;
28
+ }
29
+ const label = node[merged.label] ?? node.title ?? node.label;
30
+ labels.push(label != null && label !== '' ? label : String(value ?? ''));
31
+ currentOptions = node[merged.children] || [];
32
+ }
33
+
34
+ return labels;
35
+ }
36
+
37
+ /** 将各级 label 拼接为展示文本 */
38
+ export function joinPathLabels(labels, {
39
+ separator = ' / ',
40
+ showAllLevels = true
41
+ } = {}) {
42
+ const filtered = (labels || []).filter(label => label != null && label !== '');
43
+ if (!filtered.length) {
44
+ return '';
45
+ }
46
+ const sep = ` ${String(separator).trim()} `;
47
+ return showAllLevels ? filtered.join(sep) : filtered[filtered.length - 1];
48
+ }
49
+
50
+ /** 格式化单条路径为展示文本 */
51
+ export function formatPathDisplay(path, {
52
+ labelInValue = true,
53
+ optionProps = {},
54
+ options,
55
+ separator = ' / ',
56
+ showAllLevels = true
57
+ } = {}) {
58
+ if (isEmpty(path) || !Array.isArray(path) || !path.length) {
59
+ return '';
60
+ }
61
+
62
+ const merged = mergeOptionProps(optionProps);
63
+ let labels;
64
+
65
+ if (labelInValue) {
66
+ labels = path.map(item => {
67
+ if (item && typeof item === 'object') {
68
+ return item[merged.label] ?? item.title ?? item.label ?? '';
69
+ }
70
+ return String(item ?? '');
71
+ });
72
+ } else if (options?.length) {
73
+ labels = resolvePathLabelsFromTree(path, options, optionProps);
74
+ } else {
75
+ labels = path.map(item => String(item ?? ''));
76
+ }
77
+
78
+ return joinPathLabels(labels, { separator, showAllLevels });
79
+ }
80
+
81
+ /** 多选:解析为带 label 的 tag 列表 */
82
+ export function getMultipleDisplayTags(modelValue, options = {}) {
83
+ if (!Array.isArray(modelValue) || !modelValue.length) {
84
+ return [];
85
+ }
86
+
87
+ return modelValue.map((path, index) => ({
88
+ index,
89
+ label: formatPathDisplay(path, options)
90
+ })).filter(item => item.label);
91
+ }
92
+
93
+ /** 是否为空值 */
94
+ export function isEmptyValue(modelValue, { multiple, labelInValue } = {}) {
95
+ if (multiple) {
96
+ return !Array.isArray(modelValue) || modelValue.length === 0;
97
+ }
98
+ if (labelInValue) {
99
+ return isEmpty(modelValue);
100
+ }
101
+ return !Array.isArray(modelValue) || modelValue.length === 0;
102
+ }
@@ -0,0 +1,253 @@
1
+ <!--
2
+ @Auther:辛巴
3
+ @Date:2023/02/22
4
+ @Description:复选框组件
5
+ @VERSION:1.0-->
6
+ <template>
7
+ <div class="bnChecked" :class="{'disabled': disabled}" @click="handleClick">
8
+ <span class="bnChecked-status" :class="{'checked': isCheck}">
9
+ <span class="bnChecked-status-inner"></span>
10
+ </span>
11
+ <slot>
12
+ <span class="bnChecked-label" v-if="title" :style="labelStyle" :title="title">{{ title }}</span>
13
+ </slot>
14
+ </div>
15
+ </template>
16
+
17
+ <script>
18
+ export default {
19
+ name: "BnCheck",
20
+ props: {
21
+ modelValue: [Boolean, String, Number, Array],
22
+ trueData: { type: [Boolean, String, Number, Object], default: true },
23
+ falseData: { type: [Boolean, String, Number], default: false },
24
+ // option基础结构
25
+ optionProps: {
26
+ default() {
27
+ return {
28
+ value: 'id',
29
+ label: 'title'
30
+ };
31
+ }
32
+ },
33
+ isChecked: Function,
34
+ onClick: Function,
35
+ disabled: {
36
+ type: Boolean,
37
+ default: false
38
+ },
39
+ stop: {
40
+ type: Boolean,
41
+ default: false
42
+ },
43
+ label: String,
44
+ labelStyle: {
45
+ type: Object,
46
+ default: () => ({})
47
+ }
48
+ },
49
+ computed: {
50
+ title() {
51
+ let label = this.label||'';
52
+ if (typeof this.trueData == 'object' && !this.label) {
53
+ label = this.trueData[this.optionProps.label]
54
+ }
55
+ return label;
56
+ },
57
+ isCheck() {
58
+ if (this.isChecked) {
59
+ const result = this.isChecked({
60
+ value: this.modelValue,
61
+ trueData: this.trueData,
62
+ falseData: this.falseData
63
+ });
64
+ return typeof result === "boolean" ? result : result > -1;
65
+ } else {
66
+ return this.check();
67
+ }
68
+ },
69
+ value: {
70
+ get() {
71
+ return this.modelValue;
72
+ },
73
+ set(val) {
74
+ this.$emit("update:modelValue", val);
75
+ }
76
+ }
77
+ },
78
+ methods: {
79
+ /**
80
+ * 组件默认判断
81
+ * */
82
+ check() {
83
+ if (typeof this.trueData == 'object') {
84
+ if (Array.isArray(this.modelValue)) {
85
+ let getItem = this.modelValue.filter(i => i[this.optionProps.value] == this.trueData[this.optionProps.value])
86
+ return getItem.length > 0
87
+ } else if (this.trueData) {
88
+ return this.modelValue[this.optionProps.value] == this.trueData[this.optionProps.value]
89
+ } else {
90
+ return Boolean(this.modelValue);
91
+ }
92
+ } else {
93
+ if (Array.isArray(this.modelValue)) {
94
+ return this.modelValue.includes(this.trueData);
95
+ } else if (this.trueData !== undefined) {
96
+ return this.modelValue === this.trueData;
97
+ } else {
98
+ return Boolean(this.modelValue);
99
+ }
100
+ }
101
+ },
102
+ /**
103
+ * 点击事件
104
+ * */
105
+ handleClick() {
106
+ if (this.stop || this.disabled) {
107
+ this.emitClick();
108
+ return;
109
+ }
110
+ if (this.isCheck) {
111
+ if (Array.isArray(this.modelValue)) {
112
+ let index;
113
+ if (this.isChecked) {
114
+ index = this.isChecked({
115
+ value: this.modelValue,
116
+ trueData: this.trueData,
117
+ falseData: this.falseData
118
+ })
119
+ } else {
120
+ if (typeof this.trueData == 'object') {
121
+ let ids = this.value.map(i => i[this.optionProps.value])
122
+ index = ids.indexOf(this.trueData[this.optionProps.value])
123
+ } else {
124
+ index = this.value.indexOf(this.trueData)
125
+ }
126
+ }
127
+ this.value.splice(index, 1);
128
+ } else {
129
+ this.value = this.falseData;
130
+ }
131
+ } else {
132
+ if (Array.isArray(this.modelValue)) {
133
+ this.value.push(this.trueData);
134
+ } else {
135
+ this.value = this.trueData;
136
+ }
137
+ }
138
+ this.$emit("change", {
139
+ value: this.modelValue,
140
+ trueData: this.trueData,
141
+ falseData: this.falseData
142
+ });
143
+ this.emitClick();
144
+ },
145
+ /**
146
+ * 点击事件透出
147
+ * */
148
+ emitClick() {
149
+ if (this.onClick) {
150
+ this.onClick({
151
+ value: this.modelValue,
152
+ trueData: this.trueData,
153
+ falseData: this.falseData
154
+ });
155
+ }
156
+ }
157
+ }
158
+ };
159
+ </script>
160
+
161
+ <style scoped lang="scss">
162
+ .bnChecked {
163
+ display: inline-flex;
164
+ align-items: center;
165
+ height: 22px;
166
+ cursor: pointer;
167
+ }
168
+
169
+ .bnChecked.disabled {
170
+ cursor: not-allowed;
171
+ }
172
+
173
+ .bnChecked.disabled > :nth-child(2) {
174
+ opacity: 0.2;
175
+ }
176
+
177
+ .bnChecked-status {
178
+ box-sizing: content-box !important;
179
+ position: relative;
180
+ display: block;
181
+ width: 14px;
182
+ height: 14px;
183
+ background-color: #fff;
184
+ border: 1px solid #d9d9d9;
185
+ border-radius: 2px;
186
+ transition: all 0.3s;
187
+ }
188
+
189
+ .bnChecked-status.checked {
190
+ border-color: #1890ff;
191
+ background-color: #1890ff;
192
+ }
193
+
194
+ .disabled .bnChecked-status {
195
+ background-color: #f0f0f0 !important;
196
+ border-color: #ccc !important;
197
+ }
198
+
199
+ .disabled .bnChecked-status-inner {
200
+ background-color: #f0f0f0 !important;
201
+ }
202
+
203
+ .disabled .checked .bnChecked-status-inner::after {
204
+ border-color: #ccc !important;
205
+ }
206
+
207
+ .bnChecked-status-inner {
208
+ position: relative;
209
+ display: block;
210
+ width: 14px;
211
+ height: 14px;
212
+ background-color: #fff;
213
+ border-radius: 2px;
214
+ transition: all 0.3s;
215
+ }
216
+
217
+ .bnChecked-status-inner::after {
218
+ position: absolute;
219
+ top: 50%;
220
+ left: calc(50% - 3px);
221
+ width: 5px;
222
+ height: 8px;
223
+ border: 2px solid #fff;
224
+ border-top: 0;
225
+ border-left: 0;
226
+ transform: rotate(45deg) scale(0) translate(-50%, -50%);
227
+ opacity: 0;
228
+ transition: all 0.1s cubic-bezier(0.71, -0.46, 0.88, 0.6), opacity 0.1s;
229
+ content: "";
230
+ }
231
+
232
+ .checked .bnChecked-status-inner {
233
+ background-color: #1890ff;
234
+ }
235
+
236
+ .checked .bnChecked-status-inner::after {
237
+ transform: rotate(45deg) scale(1) translate(-50%, -50%);
238
+ opacity: 1;
239
+ transition: all 0.2s cubic-bezier(0.12, 0.4, 0.29, 1.46) 0.1s;
240
+ }
241
+
242
+ .bnChecked-label {
243
+ box-sizing: content-box !important;
244
+ max-width: calc(100% - 22px);
245
+ padding: 0 8px;
246
+ font-size: 14px;
247
+ color: #444;
248
+ user-select: none;
249
+ white-space: nowrap;
250
+ overflow: hidden;
251
+ text-overflow: ellipsis;
252
+ }
253
+ </style>
@@ -0,0 +1,134 @@
1
+ <template>
2
+ <el-dialog v-model="visible" :title="dialogTitle" top="20px" :close-on-click-modal="false" width="900"
3
+ class="columnConfigDialog" :destroy-on-close="true" append-to-body>
4
+ <el-scrollbar max-height="calc(100vh - 150px)">
5
+ <BnColumnConfig ref="BnColumnConfig" v-model="componentData" v-bind="$props"></BnColumnConfig>
6
+ </el-scrollbar>
7
+ <template #footer>
8
+ <div class="w-flex-right">
9
+ <el-button @click="visible = false">取消</el-button>
10
+ <el-button type="primary" :loading="loading" @click="saveColumn">确认</el-button>
11
+ </div>
12
+ </template>
13
+ </el-dialog>
14
+ </template>
15
+
16
+ <script>
17
+ import {cloneDeep} from "lodash";
18
+ import {columnData} from "./data.js";
19
+
20
+ export default {
21
+ name: "FuncExprDialog",
22
+ props: {
23
+ componentList: Array,
24
+ // 列数
25
+ row: {
26
+ type: Number,
27
+ default: 1
28
+ },
29
+ // 需要隐藏的配置根据字段来
30
+ hideFiled: {
31
+ type: Array,
32
+ default() {
33
+ return []
34
+ }
35
+ },
36
+ // 组件列表
37
+ columnList: {
38
+ type: Array,
39
+ default() {
40
+ return []
41
+ }
42
+ },
43
+ // 是否禁用
44
+ disabled: Boolean,
45
+ openDataField: Boolean,
46
+ postFunc: Function,
47
+ extendPost: Object,
48
+ // 多包裹数据回填
49
+ dataBack: {
50
+ type: Object,
51
+ default() {
52
+ return {}
53
+ }
54
+ },
55
+ // 是否是子表单配置子组件
56
+ isChildren: Boolean
57
+ },
58
+ computed: {
59
+ dialogTitle() {
60
+ const {name, columnCode} = this.componentData;
61
+ if (columnCode && name.length > 12) {
62
+ return `组件设置-【${name.substring(0, 12)}...】`;
63
+ } else if (!columnCode) {
64
+ return `新增组件`;
65
+ }
66
+ return `组件设置-【${name}】`;
67
+ },
68
+ },
69
+ data() {
70
+ return {
71
+ visible: false,
72
+ loading: false,
73
+ componentData: cloneDeep(columnData),
74
+ }
75
+ },
76
+ methods: {
77
+ open(data) {
78
+ const cloneData = data ? cloneDeep(data) : cloneDeep(columnData)
79
+ // 兼容历史脏数据:valueEmptyCheck 字段需统一为字符串 '1'/'0'
80
+ const valueEmptyCheck = cloneData.extraInfo?.valueEmptyCheck;
81
+ if (valueEmptyCheck === 1 || valueEmptyCheck === 0) {
82
+ cloneData.extraInfo.valueEmptyCheck = String(valueEmptyCheck);
83
+ }
84
+ this.componentData = cloneData;
85
+ this.visible = true;
86
+ },
87
+ saveColumn() {
88
+ if (!this.componentData.behaviorType) {
89
+ this.$message.warning('请选择组件类型再保存')
90
+ return;
91
+ } else if (!this.componentData.name) {
92
+ this.$message.warning('请设置组件名称再保存')
93
+ return;
94
+ }
95
+ // 子表单不需要保存,直接将对象返回给父级
96
+ if (this.isChildren) {
97
+ this.$emit('saveOver', this.componentData);
98
+ this.visible = false;
99
+ return;
100
+ }
101
+ this.loading = true;
102
+ const params = {
103
+ tableCode: this.extendPost.tableCode,
104
+ defaultInfo: this.componentData.defaultInfo || '',
105
+ behaviorType: this.componentData.behaviorType,
106
+ name: this.componentData.name,
107
+ extraInfo: JSON.stringify(this.componentData.extraInfo),
108
+ moduleDefinition: this.componentData.moduleDefinition ? JSON.stringify(this.componentData.moduleDefinition) : '[]',
109
+ insideDataSourceInfo: this.componentData.insideDataSourceInfo ? JSON.stringify(this.componentData.insideDataSourceInfo) : '{}'
110
+ }
111
+ if (this.componentData.defaultInfo && typeof this.componentData.defaultInfo == 'object') {
112
+ params.defaultInfo = JSON.stringify(this.componentData.defaultInfo)
113
+ }
114
+ if (this.componentData.columnCode) {
115
+ params.columnCode = this.componentData.columnCode
116
+ }
117
+ let url = params.columnCode ? '/biztable/definition/updateColumn' : '/biztable/definition/addColumn'
118
+ this.postFunc(url, params).then(res => {
119
+ this.loading = false;
120
+ if (!res.code) {
121
+ this.$message.success('操作成功');
122
+ this.visible = false;
123
+ this.$emit('saveOver', this.componentData);
124
+ }
125
+ })
126
+ }
127
+ }
128
+ }
129
+ </script>
130
+ <style lang="scss">
131
+ .columnConfigDialog.el-dialog {
132
+ margin-bottom: 0 !important;
133
+ }
134
+ </style>
@@ -0,0 +1,143 @@
1
+ <template>
2
+ <el-dialog v-model="visible" title="关联其他工作表组件" top="20px" :close-on-click-modal="false" width="600"
3
+ :destroy-on-close="true" append-to-body>
4
+ <div class="assocTable">
5
+ <el-form :model="assocTableData" label-width="auto" v-loading="loading">
6
+ <el-form-item label="选择关联表">
7
+ <BnSelect v-model="assocTableData.tableCode" :option-props="{value:'tableCode',label:'tableName'}"
8
+ :labelInValue="false" :options="tableList"></BnSelect>
9
+ </el-form-item>
10
+ <el-form-item label="关联表内组件">
11
+ <el-select v-model="assocTableData.tableColumns" placeholder="please select your zone">
12
+ <el-option label="Zone one" value="shanghai"/>
13
+ <el-option label="Zone two" value="beijing"/>
14
+ </el-select>
15
+ </el-form-item>
16
+ </el-form>
17
+ </div>
18
+ <template #footer>
19
+ <div class="w-flex-right">
20
+ <el-button @click="visible = false">取消</el-button>
21
+ <el-button type="primary" :loading="loading" @click="saveColumn">确认</el-button>
22
+ </div>
23
+ </template>
24
+ </el-dialog>
25
+ </template>
26
+
27
+ <script>
28
+ import {cloneDeep} from "lodash";
29
+
30
+ export default {
31
+ name: "assocTable",
32
+ props: {
33
+ columnData: {
34
+ type: Object,
35
+ default: () => ({}),
36
+ },
37
+ postFunc: Function,
38
+ extendPost: Object,
39
+ },
40
+ data() {
41
+ return {
42
+ visible: false,
43
+ loading: false,
44
+ assocTableData: {
45
+ table: "",
46
+ tableColumns: []
47
+ },
48
+ tableList: [],
49
+ componentData: {},
50
+ }
51
+ },
52
+ methods: {
53
+ async open(data) {
54
+ this.assocTableData = {
55
+ table: "",
56
+ tableCode: "",
57
+ tableColumns: []
58
+ }
59
+ this.visible = true;
60
+ this.loading = true;
61
+ if (this.tableList.length == 0) {
62
+ await this.getTableList()
63
+ }
64
+ if (this.columnData.insideDataSourceInfo.type == 'group') {
65
+ this.assocTableData.table = this.columnData.insideDataSourceInfo.table;
66
+ this.assocTableData.tableCode = this.columnData.insideDataSourceInfo.tableCode;
67
+ await this.getComList()
68
+ this.columnData.moduleDefinition.forEach(c => {
69
+ if (c.insideDataSourceInfo?.fieldCode) {
70
+ this.assocTableData.tableColumns.push(c.insideDataSourceInfo.fieldCode)
71
+ }
72
+ })
73
+ console.log(this.assocTableData.tableColumns)
74
+ }
75
+ this.componentData = data ? cloneDeep(data) : cloneDeep({})
76
+ this.loading = false;
77
+ },
78
+ /**
79
+ * 获取应用下的表
80
+ * */
81
+ async getTableList() {
82
+ let res = await this.postFunc(`/biztable/instance/app?appCode=${this.extendPost.appCode || ''}&tables=1`, null, 'get')
83
+ if (!res.code && res.data) {
84
+ this.tableList = res.data.tables;
85
+ }
86
+ },
87
+ /**
88
+ * 获取表下的组件
89
+ * */
90
+ async getComList() {
91
+ let res = await this.postFunc(`/biztable/definition/table?tableCode=${this.assocTableData.tableCode}&columns=1`, null, 'get')
92
+ if (!res.code && res.data) {
93
+ console.log(res)
94
+ }
95
+ },
96
+ saveColumn() {
97
+ if (!this.componentData.behaviorType) {
98
+ this.$message.warning('请选择组件类型再保存')
99
+ return;
100
+ } else if (!this.componentData.name) {
101
+ this.$message.warning('请设置组件名称再保存')
102
+ return;
103
+ }
104
+ // 子表单不需要保存,直接将对象返回给父级
105
+ if (this.isChildren) {
106
+ this.$emit('saveOver', this.componentData);
107
+ this.visible = false;
108
+ return;
109
+ }
110
+ this.loading = true;
111
+ const params = {
112
+ tableCode: this.extendPost.tableCode,
113
+ defaultInfo: this.componentData.defaultInfo || '',
114
+ behaviorType: this.componentData.behaviorType,
115
+ name: this.componentData.name,
116
+ extraInfo: JSON.stringify(this.componentData.extraInfo),
117
+ moduleDefinition: this.componentData.moduleDefinition ? JSON.stringify(this.componentData.moduleDefinition) : '[]',
118
+ insideDataSourceInfo: this.componentData.insideDataSourceInfo ? JSON.stringify(this.componentData.insideDataSourceInfo) : '{}'
119
+ }
120
+ if (this.componentData.defaultInfo && typeof this.componentData.defaultInfo == 'object') {
121
+ params.defaultInfo = JSON.stringify(this.componentData.defaultInfo)
122
+ }
123
+ if (this.componentData.columnCode) {
124
+ params.columnCode = this.componentData.columnCode
125
+ }
126
+ let url = params.columnCode ? '/biztable/definition/updateColumn' : '/biztable/definition/addColumn'
127
+ this.postFunc(url, params).then(res => {
128
+ this.loading = false;
129
+ if (!res.code) {
130
+ this.$message.success('操作成功');
131
+ this.visible = false;
132
+ this.$emit('saveOver', this.componentData);
133
+ }
134
+ })
135
+ }
136
+ }
137
+ }
138
+ </script>
139
+ <style lang="scss" scoped>
140
+ .assocTable {
141
+ max-height: calc(100vh - 200px);
142
+ }
143
+ </style>