@bytenew/bn-bus-ui 1.1.463 → 1.1.464

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/dist/assocTableSearch-Bfe96864.js +349 -0
  2. package/dist/assocTableSearch.css +1 -0
  3. package/dist/bn-bus-ui.es.js +65 -0
  4. package/dist/bn-bus-ui.umd.js +49 -0
  5. package/dist/chooseIPaasData-COrrvQKZ.js +391 -0
  6. package/dist/chooseIPaasData.css +1 -0
  7. package/dist/defaultSet-CzN1ec_d.js +297 -0
  8. package/dist/defaultSet.css +1 -0
  9. package/dist/fileFormData-D_Q1vylE.js +53 -0
  10. package/dist/formItemFooter-BvptZj_u.js +108 -0
  11. package/dist/formItemFooter.css +1 -0
  12. package/dist/funcExprDialog-BguNs9fl.js +139 -0
  13. package/dist/funcExprDialog.css +1 -0
  14. package/dist/index-0oB7QocU.js +44 -0
  15. package/dist/index-69fRP0M8.js +89 -0
  16. package/dist/index-BdklTJtF.js +66 -0
  17. package/dist/index-Bu3jHlby.js +45 -0
  18. package/dist/index-BxWx5kpG.js +89 -0
  19. package/dist/index-C5LQ0OSs.js +183 -0
  20. package/dist/index-C8YhrrUN.js +51 -0
  21. package/dist/index-COuPCIzB.js +45 -0
  22. package/dist/index-CSvVyjxx.js +178 -0
  23. package/dist/index-DCv51EXX.js +109 -0
  24. package/dist/index-DUSI6MuC.js +135 -0
  25. package/dist/index-DVzxs2vR.js +58 -0
  26. package/dist/index-Dd4b8zNb.js +746 -0
  27. package/dist/index-Md-ZlkCW.js +66 -0
  28. package/dist/index-hsSIY2FP.js +221 -0
  29. package/dist/index-n13-H3_Y.js +118 -0
  30. package/dist/index-wUl5aPUD.js +64 -0
  31. package/dist/index.css +1 -0
  32. package/dist/index2.css +1 -0
  33. package/dist/index3.css +1 -0
  34. package/dist/index4.css +1 -0
  35. package/dist/index5.css +1 -0
  36. package/dist/index6.css +1 -0
  37. package/dist/index7.css +1 -0
  38. package/dist/install-CNjs0u5x.js +23299 -0
  39. package/dist/install.css +1 -0
  40. package/dist/setOption-CXOifQcx.js +329 -0
  41. package/dist/setOption.css +1 -0
  42. package/dist/setRelationOption-C7VDhej7.js +5217 -0
  43. package/dist/setRelationOption.css +1 -0
  44. package/package.json +4 -20
  45. package/install.js +0 -134
  46. package/packages/BnAddress/index.vue +0 -141
  47. package/packages/BnAddressParse/index.vue +0 -75
  48. package/packages/BnAdvancedFilter/BnFilterView.vue +0 -145
  49. package/packages/BnAdvancedFilter/index.vue +0 -345
  50. package/packages/BnAdvancedFilter/util.js +0 -171
  51. package/packages/BnCascader/BnCascader.vue +0 -543
  52. package/packages/BnCascader/BnCascaderPanel.vue +0 -1331
  53. package/packages/BnCascader/cascaderDisplay.js +0 -102
  54. package/packages/BnCheck/BnCheck.vue +0 -253
  55. package/packages/BnColumnConfig/columnConfigDialog.vue +0 -134
  56. package/packages/BnColumnConfig/component/childrenFormSetting/assocTable.vue +0 -143
  57. package/packages/BnColumnConfig/component/childrenFormSetting/assocTableSearch.vue +0 -314
  58. package/packages/BnColumnConfig/component/childrenFormSetting/index.vue +0 -243
  59. package/packages/BnColumnConfig/component/defaultSet/defaultSet.vue +0 -114
  60. package/packages/BnColumnConfig/component/defaultSet/stringDefault.vue +0 -210
  61. package/packages/BnColumnConfig/component/funcExprDialog/funcExprDialog.vue +0 -126
  62. package/packages/BnColumnConfig/component/packageFilter/index.vue +0 -141
  63. package/packages/BnColumnConfig/component/paraExplainSet/index.vue +0 -156
  64. package/packages/BnColumnConfig/component/setOption/setOption.vue +0 -321
  65. package/packages/BnColumnConfig/component/setRelationOption/ConditionList.vue +0 -277
  66. package/packages/BnColumnConfig/component/setRelationOption/LevelHeader.vue +0 -144
  67. package/packages/BnColumnConfig/component/setRelationOption/setRelationOption.vue +0 -642
  68. package/packages/BnColumnConfig/data.js +0 -129
  69. package/packages/BnColumnConfig/index.scss +0 -23
  70. package/packages/BnColumnConfig/index.vue +0 -309
  71. package/packages/BnCondVal/BnCondVal.vue +0 -112
  72. package/packages/BnCondVal/itemVal/dateRegVal.vue +0 -39
  73. package/packages/BnCondVal/itemVal/dateVal.vue +0 -39
  74. package/packages/BnCondVal/itemVal/numRegVal.vue +0 -67
  75. package/packages/BnCondVal/itemVal/numVal.vue +0 -44
  76. package/packages/BnCondVal/itemVal/relationVal.vue +0 -73
  77. package/packages/BnCondVal/itemVal/selectColumnVal.vue +0 -58
  78. package/packages/BnCondVal/itemVal/selectVal.vue +0 -59
  79. package/packages/BnCondVal/itemVal/stringVal.vue +0 -156
  80. package/packages/BnCondition/index.vue +0 -551
  81. package/packages/BnCondition/util.js +0 -232
  82. package/packages/BnDatePicker/BnDatePicker.vue +0 -194
  83. package/packages/BnDrop/BnDrop.vue +0 -917
  84. package/packages/BnEmptyTip/BnEmptyTip.vue +0 -107
  85. package/packages/BnExportOrder/BnExportOrder.vue +0 -241
  86. package/packages/BnExportOrder/validatorCode.vue +0 -94
  87. package/packages/BnFileView/BnFileView.vue +0 -271
  88. package/packages/BnFileView/FileDetail.vue +0 -125
  89. package/packages/BnFileView/videoPreview.vue +0 -70
  90. package/packages/BnFilterOption/BnFilterOption.vue +0 -160
  91. package/packages/BnFunExpr/BnFunExpr.vue +0 -608
  92. package/packages/BnImportOrder/BnImportOrder.vue +0 -323
  93. package/packages/BnImportTemplate/BnImportTemplate.vue +0 -866
  94. package/packages/BnImportTemplate/assets/merge_tip_img.png +0 -0
  95. package/packages/BnImportTemplate/assets/sheet_tip.png +0 -0
  96. package/packages/BnImportTemplate/assets/xls.png +0 -0
  97. package/packages/BnImportTemplate/components/ImportTemplateTrigger.vue +0 -198
  98. package/packages/BnImportTemplate/components/TemplateEditDialog.vue +0 -340
  99. package/packages/BnImportTemplate/components/TemplateFieldsConfig.vue +0 -401
  100. package/packages/BnImportTemplate/components/TemplateListDialog.vue +0 -297
  101. package/packages/BnInpNum/BnInpNum.vue +0 -165
  102. package/packages/BnMenus/BnMenus.vue +0 -502
  103. package/packages/BnMenus/MenuItem.vue +0 -321
  104. package/packages/BnOrderCard/BnOrderCard.vue +0 -389
  105. package/packages/BnOrderCard/orderRemark.vue +0 -178
  106. package/packages/BnOrderCard/util.js +0 -94
  107. package/packages/BnOrderDetail/BnOrderDetail.vue +0 -338
  108. package/packages/BnOrderDetail/filterLogByUser.vue +0 -108
  109. package/packages/BnOrderDetail/orderLogs.vue +0 -53
  110. package/packages/BnOrderDetail/showSubForm/index.vue +0 -41
  111. package/packages/BnOrderDetail/showSubForm/showChildTable.vue +0 -61
  112. package/packages/BnOrderDetail/showSubForm/showTimeLine.vue +0 -131
  113. package/packages/BnOrderDetail/showSubForm/tableCellCopy.vue +0 -84
  114. package/packages/BnOrderShare/index.vue +0 -378
  115. package/packages/BnOrderShare/shareUrlInp.vue +0 -54
  116. package/packages/BnRadio/BnRadio.vue +0 -181
  117. package/packages/BnRelation/BnRelation.vue +0 -120
  118. package/packages/BnSelect/BnSelect.vue +0 -485
  119. package/packages/BnSmartForm/BnBatchForm.vue +0 -334
  120. package/packages/BnSmartForm/BnBatchFormDialog.vue +0 -423
  121. package/packages/BnSmartForm/BnSmartElf/elfLog/index.vue +0 -57
  122. package/packages/BnSmartForm/BnSmartElf/index.vue +0 -95
  123. package/packages/BnSmartForm/BnSmartFormPsychic.js +0 -629
  124. package/packages/BnSmartForm/BnSmartFormUtil.js +0 -524
  125. package/packages/BnSmartForm/addressForm/index.vue +0 -73
  126. package/packages/BnSmartForm/checkboxForm/index.vue +0 -99
  127. package/packages/BnSmartForm/childrenForm/childFormFile.vue +0 -237
  128. package/packages/BnSmartForm/childrenForm/childrenFormBody.vue +0 -260
  129. package/packages/BnSmartForm/childrenForm/index.vue +0 -110
  130. package/packages/BnSmartForm/childrenForm/searchInventory.vue +0 -115
  131. package/packages/BnSmartForm/chooseAssocTable/chooseAssocTable.vue +0 -451
  132. package/packages/BnSmartForm/chooseAssocTable/chooseChildGood.vue +0 -229
  133. package/packages/BnSmartForm/chooseAssocTable/tableCellCopy.vue +0 -84
  134. package/packages/BnSmartForm/chooseChildOrder/chooseChildOrder.vue +0 -158
  135. package/packages/BnSmartForm/chooseIPaasData/chooseIPaasData.vue +0 -307
  136. package/packages/BnSmartForm/chooseIPaasData/tableCellCopy.vue +0 -84
  137. package/packages/BnSmartForm/choosePackage/choosePackage.vue +0 -361
  138. package/packages/BnSmartForm/dateDualForm/index.vue +0 -37
  139. package/packages/BnSmartForm/dateForm/index.vue +0 -38
  140. package/packages/BnSmartForm/fileForm/fileFormData.js +0 -50
  141. package/packages/BnSmartForm/fileForm/index.vue +0 -240
  142. package/packages/BnSmartForm/formItemFooter/formItemFooter.vue +0 -38
  143. package/packages/BnSmartForm/formItemTop/formItemTop.vue +0 -42
  144. package/packages/BnSmartForm/index.vue +0 -1201
  145. package/packages/BnSmartForm/numberForm/index.vue +0 -63
  146. package/packages/BnSmartForm/radioForm/index.vue +0 -72
  147. package/packages/BnSmartForm/receiveForm/index.vue +0 -112
  148. package/packages/BnSmartForm/relationForm/index.vue +0 -82
  149. package/packages/BnSmartForm/scoreForm/index.vue +0 -39
  150. package/packages/BnSmartForm/selectForm/index.vue +0 -55
  151. package/packages/BnSmartForm/showValForm/index.vue +0 -42
  152. package/packages/BnSmartForm/showValForm/showValFormTable.vue +0 -104
  153. package/packages/BnSmartForm/smartFormsCommon.scss +0 -43
  154. package/packages/BnSmartForm/stringForm/index.vue +0 -170
  155. package/packages/BnVirtPopover/index.vue +0 -319
  156. package/packages/BnWebLog/BnWebLog.vue +0 -140
  157. package/packages/BnWorkSettingDrop/advancedOptions.js +0 -112
  158. package/packages/BnWorkSettingDrop/benBenAIUtil.js +0 -89
  159. package/packages/BnWorkSettingDrop/index.vue +0 -292
  160. package/packages/font/iconfont.css +0 -243
  161. package/packages/font/iconfont.ttf +0 -0
  162. package/packages/font/iconfont.woff +0 -0
  163. package/packages/font/iconfont.woff2 +0 -0
  164. package/utils/addressParse-old.js +0 -645
  165. package/utils/addressParse.js +0 -735
  166. package/utils/config.js +0 -68
  167. package/utils/index.js +0 -1171
@@ -1,321 +0,0 @@
1
- <template>
2
- <div class="setOpt">
3
- <!-- 顶部操作栏 -->
4
- <div class="setOpt-top w-flex-center w-flex-between">
5
- <div class="w-flex-center">
6
- <div class="setOpt-top-title">选项配置</div>
7
- <div class="w-color-orange">
8
- (共{{columnData.moduleDefinition.length}}个选项)
9
- </div>
10
- <div class="w-margin-left8" v-if="filedType != 'DataFields'">
11
- <el-button link type="primary" @click="showBatchAdd=!showBatchAdd;addOptionText=''" class="w-padding0">
12
- <span class="bnUIcon bnUIcon-batchAdd w-padding-right2 w-font14"></span>
13
- 批量
14
- </el-button>
15
- <el-button link type="primary" @click="addOption()" class="w-padding0">
16
- <span class="bnUIcon bnUIcon-addFile w-padding-right2 w-font14"></span>添加
17
- </el-button>
18
- </div>
19
- </div>
20
- <div class="w-flex-center" v-if="openDataField">
21
- <div class="setOpt-filedType">
22
- <el-segmented v-model="filedType" :props="{value:'id',label:'title'}" @change="changeFiledType"
23
- :options="[{id:'',title:'选项'},{id:'DataFields',title:'数据字典'}]" />
24
- </div>
25
- </div>
26
- </div>
27
- <!-- 批量添加区域 -->
28
- <div v-if="showBatchAdd && filedType != 'DataFields'" class="setOpt-batch">
29
- <el-input v-model="addOptionText" type="textarea" clearable :rows="4" resize="none"
30
- @keydown.enter="addOption('add')"
31
- placeholder="支持换行、逗号、空格分隔,自动去重,最多添加100个,手动按回车键自动进行追加操作"></el-input>
32
- <div class="w-flex-right w-margin-top8">
33
- <el-button link type="warning" @click="showBatchAdd=false;addOptionText=''">收起</el-button>
34
- <el-button link type="primary" @click="addOption('add')">追加</el-button>
35
- <el-button link type="primary" @click="addOption('cover')">覆盖</el-button>
36
- </div>
37
- </div>
38
- <div v-if="filedType != 'DataFields'">
39
- <!-- 选项列表 -->
40
- <el-scrollbar max-height="260px" class="setOpt-list" ref="optionList">
41
- <draggable v-model="columnData.moduleDefinition" item-key="id"
42
- handle=".setOpt-list-item-drag" ghost-class="ghost-item"
43
- chosen-class="chosen-item" animation="300" tag="div">
44
- <template #item="{element, index}">
45
- <div class="setOpt-list-item" :class="[componentWidth>400?'two':'one']">
46
- <div class="setOpt-list-item-drag w-default-hover">
47
- <span class="bnUIcon bnUIcon-move"></span>
48
- </div>
49
- <el-input v-model.trim="element.title" clearable
50
- :class="{ 'is-new-option': isNewOption(element.title) }"
51
- @focus="oldTitle = element.title" maxlength="100" show-word-limit
52
- @blur="updateOptionTitle(element.title)"></el-input>
53
- <el-switch v-model="element.columnStatus" :active-value="1" :inactive-value="0"
54
- class="w-padding-lr6"></el-switch>
55
- <span class="bnUIcon bnUIcon-delete" @click="deleteOption(index, element.title)"></span>
56
- </div>
57
- </template>
58
- </draggable>
59
- </el-scrollbar>
60
- <div class="w-empty" v-if="!columnData.moduleDefinition || columnData.moduleDefinition.length == 0">暂无选项数据</div>
61
- </div>
62
- <div class="w-margin-top8" v-else>
63
- <BnSelect v-model="columnData.insideDataSourceInfo.field" clearable filterable
64
- :labelInValue="false" placeholder="请选择你的数据字典"
65
- :pathUrl="'/ipaas/web/enum/userList'"
66
- :post-data="{
67
- pageSize: 1000,
68
- pageNum: 1,
69
- data: {
70
- type: 1,
71
- }
72
- }"
73
- :postFunc="postFunc"
74
- ></BnSelect>
75
- </div>
76
- </div>
77
- </template>
78
-
79
- <script>
80
- import {cloneDeep} from "lodash";
81
-
82
- export default {
83
- name: "setOption",
84
- props: {
85
- columnData: {
86
- type: Object,
87
- default: () => ({}),
88
- },
89
- openDataField: Boolean, // 是否支持数据字典配置
90
- postFunc: Function, // API请求函数
91
- extendPost: Object, // 额外的请求参数
92
- },
93
- data() {
94
- return {
95
- addOptionText: "", // 批量添加输入框内容
96
- showBatchAdd: false, // 是否显示批量添加区域
97
- newOptions: [], // 新增选项名称数组(用于橘黄色高亮)
98
- oldTitle: "", // 记录修改前的标题(用于更新newOptions)
99
- componentWidth: 0, // 组件宽度
100
- filedType: "", //是否选择数据字典 option选项 DataFields数据字典
101
- };
102
- },
103
- mounted() {
104
- this.filedType = this.columnData.insideDataSourceInfo?.type || ''
105
- // 计算组件宽度
106
- this.calculateWidth();
107
- },
108
- methods: {
109
- /**
110
- * 计算组件宽度
111
- */
112
- calculateWidth() {
113
- this.$nextTick(() => {
114
- const el = this.$el;
115
- if (el) {
116
- this.componentWidth = el.offsetWidth;
117
- }
118
- });
119
- },
120
- /**
121
- * 切换字典还是选项
122
- */
123
- changeFiledType() {
124
- this.columnData.moduleDefinition=[];
125
- this.columnData.defaultInfo={};
126
- this.columnData.insideDataSourceInfo = {}
127
- if(this.filedType == 'DataFields'){
128
- this.columnData.insideDataSourceInfo = { type: "DataFields",table:'',field:''};
129
- }
130
- },
131
- /**
132
- * 判断是否为新增选项(用于橘黄色高亮)
133
- */
134
- isNewOption(title) {
135
- return this.newOptions.includes(title);
136
- },
137
-
138
- /**
139
- * 更新选项标题
140
- * 当用户修改输入框内容时,同步更新newOptions数组
141
- */
142
- updateOptionTitle(newTitle) {
143
- if (this.oldTitle === newTitle) return;
144
- const index = this.newOptions.indexOf(this.oldTitle);
145
- if (index > -1) {
146
- this.newOptions.splice(index, 1, newTitle);
147
- }
148
- this.oldTitle = "";
149
- },
150
-
151
- /**
152
- * 解析批量输入文本
153
- * 支持换行、中英文逗号、空格分隔,自动去重,最多100个
154
- */
155
- parseBatchText(text) {
156
- return text.split(/[\n,,\s]+/)
157
- .map(item => item.trim())
158
- .filter(Boolean)
159
- .slice(0, 100); // 限制最多100个
160
- },
161
-
162
- /**
163
- * 过滤已存在的选项
164
- * 返回需要真正新增的选项列表
165
- */
166
- filterExistingOptions(optionList) {
167
- const existingTitles = this.columnData.moduleDefinition.map(item => item.title);
168
- return optionList.filter(title => !existingTitles.includes(title));
169
- },
170
-
171
- /**
172
- * 构造选项对象
173
- */
174
- buildOptions(optionList, idList) {
175
- const startSeq = this.columnData.moduleDefinition.length + 1;
176
- return optionList.map((title, index) => ({
177
- sequence: startSeq + index,
178
- code: idList[index],
179
- columnStatus: 1,
180
- id: idList[index],
181
- title,
182
- }));
183
- },
184
-
185
- /**
186
- * 滚动到列表底部
187
- */
188
- scrollToBottom() {
189
- this.$nextTick(() => {
190
- const scrollbar = this.$refs.optionList;
191
- if (scrollbar && scrollbar.$el) {
192
- const wrap = scrollbar.$el.querySelector('.el-scrollbar__wrap');
193
- if (wrap) {
194
- wrap.scrollTop = wrap.scrollHeight;
195
- }
196
- }
197
- });
198
- },
199
-
200
- /**
201
- * 添加选项
202
- * @param {String} type - 操作类型:'add'追加、'cover'覆盖、undefined单个添加
203
- */
204
- async addOption(type) {
205
- let optionList = [];
206
- // 单个添加
207
- if (!type) {
208
- const sort = this.newOptions.length + 1;
209
- const title = `选项${sort}`;
210
- optionList = [title];
211
- this.newOptions.push(title);
212
- }
213
- // 批量添加
214
- else {
215
- // 解析并去重
216
- optionList = [...new Set(this.parseBatchText(this.addOptionText))];
217
- // 所有新输入的名字都加入newOptions(包括重复的,用于高亮显示)
218
- this.newOptions.push(...optionList);
219
-
220
- // 过滤已存在的选项
221
- optionList = this.filterExistingOptions(optionList);
222
-
223
- // 如果没有需要新增的选项,直接返回
224
- if (optionList.length === 0) return;
225
- }
226
- // 请求生成唯一ID
227
- const appId = this.extendPost?.appId || 'noApp';
228
- const res = await this.postFunc(
229
- `/v2/projects/customId/${optionList.length}/${appId}`,
230
- null,
231
- 'get'
232
- );
233
- if (!res.code) {
234
- const options = this.buildOptions(optionList, res.data);
235
-
236
- // 覆盖或追加
237
- this.columnData.moduleDefinition = type === 'cover'
238
- ? cloneDeep(options)
239
- : [...this.columnData.moduleDefinition, ...options];
240
-
241
- this.scrollToBottom();
242
- }
243
- },
244
- /**
245
- * 删除选项
246
- */
247
- deleteOption(index, title) {
248
- this.columnData.moduleDefinition.splice(index, 1);
249
- // 同步删除newOptions中的记录
250
- const newOptionIndex = this.newOptions.indexOf(title);
251
- if (newOptionIndex > -1) {
252
- this.newOptions.splice(newOptionIndex, 1);
253
- }
254
- },
255
- },
256
- };
257
- </script>
258
- <style scoped lang="scss">
259
- .setOpt {
260
- // 顶部操作栏
261
- &-top {
262
- height: 32px;
263
- font-size: 14px;
264
-
265
- &-title {
266
- font-weight: 500;
267
- }
268
- }
269
-
270
- // 批量添加区域
271
- &-batch {
272
- margin-top: 10px;
273
- }
274
-
275
- &-filedType .el-segmented {
276
- --el-segmented-item-selected-color: #fff;
277
- --el-segmented-item-selected-bg-color: #409EFF;
278
- --el-border-radius-base: 16px;
279
- }
280
-
281
- // 选项列表
282
- &-list {
283
- margin-top: 10px;
284
- padding-right: 10px;
285
- & .el-scrollbar__view > div {
286
- display: flex;
287
- flex-wrap: wrap;
288
- gap: 10px;
289
- }
290
-
291
- &-item {
292
- display: flex;
293
- align-items: center;
294
- cursor: pointer;
295
-
296
- &.two {
297
- width: calc(50% - 5px);
298
- }
299
-
300
- &.one {
301
- width: 100%;
302
- }
303
-
304
- &-drag {
305
- padding-right: 8px;
306
- }
307
-
308
- // 新增选项橘黄色高亮样式
309
- :deep(.is-new-option) {
310
- .el-input__wrapper {
311
- box-shadow: 0 0 0 1px #ff9800 inset;
312
-
313
- &:hover, &.is-focus {
314
- box-shadow: 0 0 0 1px #ff9800 inset !important;
315
- }
316
- }
317
- }
318
- }
319
- }
320
- }
321
- </style>
@@ -1,277 +0,0 @@
1
- <template>
2
- <div class="condition-list">
3
- <!-- 空状态提示 -->
4
- <div v-if="showEmpty" class="condition-list__empty">
5
- &nbsp;&nbsp;没有设置条件,
6
- <el-button type="text" @click="handleAdd()">新增条件</el-button>
7
- </div>
8
-
9
- <!-- 提示信息(仅非第一级且未选中父级时显示) -->
10
- <div v-if="showTip" class="condition-list__tip">
11
- 选中父级菜单,才能设置子级选项
12
- </div>
13
-
14
- <!-- 可拖拽的选项列表 -->
15
- <draggable
16
- v-if="showList"
17
- v-model="localOptions"
18
- item-key="id"
19
- handle=".drag-handle"
20
- ghost-class="ghost-item"
21
- chosen-class="chosen-item"
22
- animation="300"
23
- @end="handleDragEnd"
24
- >
25
- <template #item="{element, index}">
26
- <div
27
- class="condition-item"
28
- :class="{ 'condition-item--active': isActive(element) }"
29
- @click="$emit('select', element)"
30
- >
31
- <!-- 拖拽手柄 -->
32
- <div class="condition-item__drag drag-handle">
33
- <span class="bnUIcon bnUIcon-move"></span>
34
- </div>
35
-
36
- <!-- 选项名称输入框 -->
37
- <div class="condition-item__input">
38
- <el-input v-model="element.title" placeholder="设置名称"/>
39
- </div>
40
-
41
- <!-- 操作按钮组 -->
42
- <div class="condition-item__actions">
43
- <!-- 添加按钮 -->
44
- <span
45
- class="condition-item__action-icon bnUIcon bnUIcon-add"
46
- @click.stop="handleAdd(index)"
47
- title="添加"
48
- />
49
-
50
- <!-- 启用/禁用开关 -->
51
- <el-switch
52
- v-model="element.columnStatus"
53
- active-value="1"
54
- inactive-value="0"
55
- @click.stop
56
- />
57
-
58
- <!-- 删除按钮 -->
59
- <span
60
- class="condition-item__action-icon bnUIcon bnUIcon-delete"
61
- @click.stop="$emit('delete', index)"
62
- title="删除"
63
- />
64
- </div>
65
- </div>
66
- </template>
67
- </draggable>
68
- </div>
69
- </template>
70
-
71
- <script>
72
- import draggable from 'vuedraggable';
73
-
74
- /**
75
- * 条件列表组件
76
- * 用于显示和管理联动选项列表,支持拖拽排序
77
- */
78
- export default {
79
- name: 'ConditionList',
80
-
81
- components: {
82
- draggable
83
- },
84
-
85
- props: {
86
- // 选项列表数据
87
- options: {
88
- type: Array,
89
- default: () => []
90
- },
91
-
92
- // 当前选中的选项
93
- selectedOption: {
94
- type: Object,
95
- default: null
96
- },
97
-
98
- // 当前级别(0表示第一级)
99
- level: {
100
- type: Number,
101
- required: true
102
- },
103
-
104
- // 是否为第一级
105
- isFirstLevel: {
106
- type: Boolean,
107
- default: false
108
- },
109
-
110
- // 父级是否已选中(仅非第一级需要)
111
- hasParentSelected: {
112
- type: Boolean,
113
- default: true
114
- }
115
- },
116
-
117
- emits: ['select', 'add', 'delete', 'update:options'],
118
-
119
- computed: {
120
- // 本地选项列表(用于v-model)
121
- localOptions: {
122
- get() {
123
- return this.options || [];
124
- },
125
- set(value) {
126
- this.$emit('update:options', value);
127
- }
128
- },
129
-
130
- // 是否显示提示信息(仅非第一级且未选中父级时显示)
131
- showTip() {
132
- return !this.isFirstLevel && !this.hasParentSelected;
133
- },
134
-
135
- // 是否显示空状态(有父级选中或是第一级,且列表为空时显示)
136
- showEmpty() {
137
- return (this.isFirstLevel || this.hasParentSelected) && this.localOptions.length === 0;
138
- },
139
-
140
- // 是否显示列表
141
- showList() {
142
- return this.localOptions.length > 0;
143
- }
144
- },
145
-
146
- methods: {
147
- /**
148
- * 判断是否为当前选中项
149
- */
150
- isActive(element) {
151
- return this.selectedOption?.id === element.id;
152
- },
153
-
154
- /**
155
- * 处理添加操作
156
- */
157
- handleAdd(index) {
158
- this.$emit('add', index !== undefined ? index : -1);
159
- },
160
-
161
- /**
162
- * 处理拖拽结束
163
- */
164
- handleDragEnd() {
165
- // 更新序号
166
- this.localOptions.forEach((option, index) => {
167
- option.sequence = index;
168
- });
169
- this.$emit('update:options', this.localOptions);
170
- }
171
- }
172
- };
173
- </script>
174
-
175
- <style scoped lang="scss">
176
- .condition-list {
177
- height: 100%;
178
- overflow-y: auto;
179
-
180
- // 空状态
181
- &__empty {
182
- padding: 10px;
183
- font-size: 12px;
184
- color: #999;
185
-
186
- .el-button {
187
- font-size: 12px;
188
- }
189
- }
190
-
191
- // 提示信息
192
- &__tip {
193
- padding: 10px;
194
- line-height: 22px;
195
- font-size: 12px;
196
- color: #999;
197
- }
198
- }
199
-
200
- // 条件项样式
201
- .condition-item {
202
- display: flex;
203
- align-items: center;
204
- width: 100%;
205
- height: 34px;
206
- transition: background-color 0.3s;
207
- cursor: pointer;
208
-
209
- &--active {
210
- background-color: #e0ecfe;
211
- }
212
-
213
- &:hover {
214
- background-color: #eef5fe;
215
- }
216
-
217
- // 拖拽手柄
218
- &__drag {
219
- width: 25px;
220
- height: 34px;
221
- line-height: 34px;
222
- text-align: center;
223
- cursor: move;
224
- flex-shrink: 0;
225
- }
226
-
227
- // 输入框
228
- &__input {
229
- flex: 1;
230
- padding: 2px 5px;
231
- min-width: 0;
232
- }
233
-
234
- // 操作按钮组
235
- &__actions {
236
- display: flex;
237
- align-items: center;
238
- gap: 5px;
239
- padding-right: 5px;
240
- flex-shrink: 0;
241
- }
242
-
243
- // 操作图标
244
- &__action-icon {
245
- width: 20px;
246
- height: 20px;
247
- display: flex;
248
- align-items: center;
249
- justify-content: center;
250
- cursor: pointer;
251
- transition: opacity 0.3s;
252
-
253
- &:hover {
254
- opacity: 0.6;
255
- }
256
-
257
- &.bnUIcon-add {
258
- color: #67c23a;
259
- }
260
-
261
- &.bnUIcon-delete {
262
- color: #f56c6c;
263
- }
264
- }
265
- }
266
-
267
- // 拖拽效果
268
- .ghost-item {
269
- opacity: 0.5;
270
- background: #f0f0f0;
271
- }
272
-
273
- .chosen-item {
274
- opacity: 0.9;
275
- }
276
- </style>
277
-