@bytenew/bn-bus-ui 1.1.462 → 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-CmzOXI5w.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-jkTJEMKT.js +0 -391
  130. package/dist/chooseIPaasData.css +0 -1
  131. package/dist/defaultSet-CiYuSOzT.js +0 -297
  132. package/dist/defaultSet.css +0 -1
  133. package/dist/fileFormData-D_Q1vylE.js +0 -53
  134. package/dist/formItemFooter-BpnVUUgV.js +0 -108
  135. package/dist/formItemFooter.css +0 -1
  136. package/dist/funcExprDialog-BMc-n5FL.js +0 -139
  137. package/dist/funcExprDialog.css +0 -1
  138. package/dist/index-8GQJARcF.js +0 -44
  139. package/dist/index-8apT0r8m.js +0 -66
  140. package/dist/index-BOFu3qAH.js +0 -183
  141. package/dist/index-BSKXuSid.js +0 -89
  142. package/dist/index-BhYvDd_Q.js +0 -45
  143. package/dist/index-BhqkeVFc.js +0 -45
  144. package/dist/index-CK7_Ou7F.js +0 -89
  145. package/dist/index-Cfb8D3Fg.js +0 -58
  146. package/dist/index-D1fGD0mX.js +0 -51
  147. package/dist/index-DE_eQGbT.js +0 -746
  148. package/dist/index-DfgiBqzS.js +0 -221
  149. package/dist/index-Dobi0ms9.js +0 -66
  150. package/dist/index-DuyQNxe0.js +0 -118
  151. package/dist/index-DxpJkrN7.js +0 -64
  152. package/dist/index-FGHeG46m.js +0 -109
  153. package/dist/index-P2M7CUTe.js +0 -178
  154. package/dist/index-xCz2zysE.js +0 -135
  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--7IU60oV.js +0 -23103
  163. package/dist/install.css +0 -1
  164. package/dist/setOption-DehYZpZr.js +0 -329
  165. package/dist/setOption.css +0 -1
  166. package/dist/setRelationOption-BL-AFUoF.js +0 -5217
  167. package/dist/setRelationOption.css +0 -1
@@ -0,0 +1,321 @@
1
+ <!--
2
+ @Description: BnMenus 递归菜单项子组件,负责渲染子菜单折叠标题与叶子节点
3
+ @VERSION: 1.0
4
+ -->
5
+ <template>
6
+ <!-- 有子菜单:渲染可折叠的分组标题 -->
7
+ <div v-if="hasChildren" class="BnMenus-sub" :class="{ 'is-open': opened }">
8
+ <div
9
+ class="BnMenus-sub-title"
10
+ :class="{ 'is-disable-fold': disableFold }"
11
+ :style="rowPaddingStyle"
12
+ @click="toggleSubMenu"
13
+ >
14
+ <div class="BnMenus-sub-title-inner">
15
+ <div class="BnMenus-item" :title="menu.title || menu.meta?.title">
16
+ <span v-if="menuIcon" class="BnMenus-item-icon" :class="menuIcon"></span>
17
+ <span class="BnMenus-item-folder">{{ menu.title || menu.meta?.title }}</span>
18
+ </div>
19
+ <!-- 展开 / 收起箭头;禁止折叠时显示圆点标识 -->
20
+ <span
21
+ v-if="disableFold"
22
+ class="BnMenus-sub-dot bnUIcon bnUIcon-circle w-font12"
23
+ :style="{ color: themeColor }"
24
+ ></span>
25
+ <span
26
+ v-else
27
+ class="BnMenus-sub-arrow bnUIcon bnUIcon-arrow2 w-font12"
28
+ :class="{ 'is-open': opened }"
29
+ ></span>
30
+ </div>
31
+ </div>
32
+ <div v-show="opened" class="BnMenus-sub-list">
33
+ <menu-item
34
+ v-for="(item, index) in menu.children"
35
+ :key="bnMenus.getMenuIndex(item) || index"
36
+ :menu="item"
37
+ :level="level + 1"
38
+ :theme-index="themeIndex"
39
+ />
40
+ </div>
41
+ </div>
42
+ <!-- 无子菜单:渲染可点击的叶子节点 -->
43
+ <div
44
+ v-else
45
+ class="BnMenus-body-item"
46
+ :class="{
47
+ 'is-active': active && !useBorderActive,
48
+ 'is-active-border': active && useBorderActive
49
+ }"
50
+ :style="[rowPaddingStyle, activeStyle]"
51
+ @click="bnMenus.selectMenu(menu)"
52
+ >
53
+ <div class="BnMenus-item" :title="menu.title || menu.meta?.title">
54
+ <span v-if="menuIcon" class="BnMenus-item-icon" :class="menuIcon"></span>
55
+ <span class="BnMenus-item-text">{{ menu.title || menu.meta?.title }}</span>
56
+ <span v-if="active" class="BnMenus-item-stick bnUIcon bnUIcon-stick"></span>
57
+ </div>
58
+ </div>
59
+ </template>
60
+
61
+ <script>
62
+ export default {
63
+ name: "MenuItem",
64
+ // 注入父组件 BnMenus 实例
65
+ inject: ['bnMenus'],
66
+ props: {
67
+ // 当前菜单项数据,含 name、icon、meta、children 等字段
68
+ menu: {
69
+ type: Object,
70
+ required: true
71
+ },
72
+ // 当前菜单层级,从 1 开始,用于计算左侧缩进
73
+ level: {
74
+ type: Number,
75
+ default: 1
76
+ },
77
+ // 所属一级菜单的索引,用于循环取主题色;子级继承父级传入的值
78
+ themeIndex: {
79
+ type: Number,
80
+ default: 0
81
+ }
82
+ },
83
+ computed: {
84
+ /** 是否含有子菜单 */
85
+ hasChildren() {
86
+ return this.menu.children?.length > 0
87
+ },
88
+ /** 子菜单是否已展开 */
89
+ opened() {
90
+ return this.bnMenus.isOpen(this.menu)
91
+ },
92
+ /** 当前项是否禁止展开/收起 */
93
+ disableFold() {
94
+ return this.bnMenus.isDisableFold(this.menu)
95
+ },
96
+ /** 当前项是否处于选中高亮状态 */
97
+ active() {
98
+ return this.bnMenus.isActive(this.menu)
99
+ },
100
+ /**
101
+ * 菜单图标 class,优先取顶层 icon,兼容 meta.icon
102
+ * @returns {String} 矢量图标库 class 名,无图标时返回空字符串
103
+ */
104
+ menuIcon() {
105
+ return this.menu.icon || this.menu.meta?.icon || ''
106
+ },
107
+ /** 当前项所属一级菜单的主题色 */
108
+ themeColor() {
109
+ return this.bnMenus.getThemeColor(this.themeIndex)
110
+ },
111
+ /** 选中时是否使用边框高亮(menu.border / menu.meta.border) */
112
+ useBorderActive() {
113
+ return !!(this.menu.border || this.menu.meta?.border)
114
+ },
115
+ /**
116
+ * 选中态 CSS 变量,供样式中动态设置文字色与背景色
117
+ * @returns {Object} 未选中时返回空对象
118
+ */
119
+ activeStyle() {
120
+ if (!this.active) return {}
121
+ return {
122
+ '--menu-theme-color': this.themeColor,
123
+ '--menu-theme-bg': this.bnMenus.getThemeBg(this.themeIndex)
124
+ }
125
+ },
126
+ /**
127
+ * 行级左右边距:基础左右各 10px,子级每深一层左侧额外缩进 10px
128
+ */
129
+ rowPaddingStyle() {
130
+ return { paddingLeft: `${10 + (this.level - 1) * 10}px` }
131
+ }
132
+ },
133
+ methods: {
134
+ /** 切换当前子菜单展开 / 收起 */
135
+ toggleSubMenu() {
136
+ if (this.disableFold) return
137
+ this.bnMenus.toggleSubMenu(this.menu)
138
+ }
139
+ }
140
+ }
141
+ </script>
142
+
143
+ <style scoped lang="scss">
144
+ @import "../font/iconfont.css";
145
+
146
+ // 菜单项通用样式
147
+ .BnMenus-body-item {
148
+ cursor: pointer;
149
+ user-select: none;
150
+ padding: 0 10px;
151
+
152
+ .BnMenus-item {
153
+ display: flex;
154
+ align-items: center;
155
+ width: 100%;
156
+ height: 40px;
157
+ line-height: 40px;
158
+ border-radius: 8px;
159
+ padding: 0 10px;
160
+ overflow: hidden;
161
+ border: 1px solid transparent;
162
+ box-sizing: border-box;
163
+ }
164
+ }
165
+
166
+ .BnMenus-sub-title {
167
+ cursor: pointer;
168
+ user-select: none;
169
+ padding-right: 10px;
170
+
171
+ &.is-disable-fold {
172
+ cursor: default;
173
+ }
174
+
175
+ .BnMenus-item {
176
+ display: flex;
177
+ align-items: center;
178
+ flex: 1;
179
+ min-width: 0;
180
+ height: 40px;
181
+ line-height: 40px;
182
+ border-radius: 8px;
183
+ padding: 0 10px;
184
+ overflow: hidden;
185
+ }
186
+ }
187
+
188
+ .BnMenus-body-item,
189
+ .BnMenus-sub-title {
190
+ // 默认态图标颜色
191
+ .BnMenus-item-icon {
192
+ flex-shrink: 0;
193
+ margin-right: 8px;
194
+ font-size: 16px;
195
+ line-height: 1;
196
+ color: #86909c;
197
+ }
198
+
199
+ // 默认态文字颜色
200
+ .BnMenus-item-folder {
201
+ flex: 1;
202
+ min-width: 0;
203
+ white-space: nowrap;
204
+ overflow: hidden;
205
+ text-overflow: ellipsis;
206
+ color: #333;
207
+ font-size: 14px;
208
+ font-weight: 600;
209
+ }
210
+ // 默认态文字颜色
211
+ .BnMenus-item-text {
212
+ flex: 1;
213
+ min-width: 0;
214
+ white-space: nowrap;
215
+ overflow: hidden;
216
+ text-overflow: ellipsis;
217
+ color: #4a5565;
218
+ font-size: 14px;
219
+ }
220
+ }
221
+
222
+ // 叶子节点 hover 背景
223
+ .BnMenus-body-item:hover .BnMenus-item {
224
+ background: #edf5ff;
225
+ }
226
+
227
+ // 选中高亮:主题色加粗文字 + 浅色背景
228
+ .BnMenus-body-item.is-active {
229
+ .BnMenus-item {
230
+ background: var(--menu-theme-bg);
231
+ }
232
+
233
+ .BnMenus-item-text {
234
+ color: var(--menu-theme-color);
235
+ font-weight: 600;
236
+ }
237
+
238
+ .BnMenus-item-icon {
239
+ color: var(--menu-theme-color);
240
+ }
241
+
242
+ .BnMenus-item-stick {
243
+ color: var(--menu-theme-color);
244
+ }
245
+ }
246
+
247
+ // 选中高亮(border 模式):主题色边框,无背景色
248
+ .BnMenus-body-item.is-active-border {
249
+ .BnMenus-item {
250
+ background: transparent;
251
+ border-color: var(--menu-theme-color);
252
+ }
253
+
254
+ .BnMenus-item-text {
255
+ color: var(--menu-theme-color);
256
+ font-weight: 600;
257
+ }
258
+
259
+ .BnMenus-item-icon {
260
+ color: var(--menu-theme-color);
261
+ }
262
+
263
+ .BnMenus-item-stick {
264
+ color: var(--menu-theme-color);
265
+ }
266
+
267
+ &:hover .BnMenus-item {
268
+ background: transparent;
269
+ }
270
+ }
271
+
272
+ // 选中态右侧竖条标识
273
+ .BnMenus-item-stick {
274
+ flex-shrink: 0;
275
+ font-size: 14px;
276
+ line-height: 1;
277
+ }
278
+
279
+ .BnMenus-sub-title {
280
+ // 外层仅负责左右留白与层级缩进,背景色在内层
281
+ &-inner {
282
+ display: flex;
283
+ align-items: center;
284
+ height: 40px;
285
+ border-radius: 5px;
286
+ padding-right: 6px;
287
+
288
+ &:hover {
289
+ background: #edf5ff;
290
+ }
291
+ }
292
+
293
+ .BnMenus-item {
294
+ padding-right: 0;
295
+ }
296
+ }
297
+
298
+ // 子菜单展开箭头,展开时旋转 180°
299
+ .BnMenus-sub-arrow {
300
+ flex-shrink: 0;
301
+ margin-left: 4px;
302
+ font-size: 12px;
303
+ color: #86909c;
304
+ transition: transform 0.2s;
305
+
306
+ &.is-open {
307
+ transform: rotate(180deg);
308
+ }
309
+ }
310
+
311
+ // 禁止折叠时的圆点标识,颜色取所属一级菜单 THEME_COLORS 主题色
312
+ .BnMenus-sub-dot {
313
+ flex-shrink: 0;
314
+ margin-left: 4px;
315
+ font-size: 12px;
316
+ }
317
+
318
+ .BnMenus-sub-list {
319
+ overflow: hidden;
320
+ }
321
+ </style>
@@ -0,0 +1,389 @@
1
+ <!--
2
+ @Auther:辛巴
3
+ @Date:2025/10/16
4
+ @Description:工单详情弹框订单卡片组件
5
+ @VERSION:1.0-->
6
+ <template>
7
+ <div class="bnOrder">
8
+ <orderRemark ref="orderRemark" @overRemark="overRemark" :post-func="postFunc"></orderRemark>
9
+ <el-card class="bnOrder-card" v-if="orderData.tid && orderData.CRMTRADE">
10
+ <div class="bnOrder-info">
11
+ <div class="bnOrder-info-item">
12
+ <span class="bnOrder-info-title">订单号:</span>
13
+ <span class="w-default-hover" @click="openTid('tid')">{{ orderData.tid }}</span>
14
+ </div>
15
+ <div class="bnOrder-info-item">
16
+ <span class="bnOrder-info-title">付款时间:</span>
17
+ <span>{{ orderData.CRMTRADE.payTime || '-' }}</span>
18
+ </div>
19
+ </div>
20
+ <div class="bnOrder-info">
21
+ <div class="bnOrder-info-item">
22
+ <span class="bnOrder-info-title">店铺:</span>
23
+ <span class="w-color-orange">{{ orderData?.CRMSELLER?.title || '-' }}</span>
24
+ </div>
25
+ <div class="bnOrder-info-item">
26
+ <span class="bnOrder-info-title">昵称:</span>
27
+ <span class="w-color-blue">{{ orderData.CRMTRADE.buyerNick.slice(0, 10) }}</span>
28
+ <span class="bnUIcon bnUIcon-openLock w-color-blue w-cursor-pointer"
29
+ v-if="!decryptIs.includes('buyerNick')" @click="decryptData('buyerNick')"></span>
30
+ </div>
31
+ </div>
32
+ <div class="bnOrder-info">
33
+ <div class="bnOrder-info-item">
34
+ <span class="bnOrder-info-title">收货地址:</span>
35
+ <span class="w-margin-right8" v-for="(item,index) in ['receiverAddress','receiverName','buyMobile']"
36
+ :key="index">
37
+ <span> {{ orderData.CRMTRADE[item] }}</span>
38
+ <span class="bnUIcon bnUIcon-openLock w-color-blue w-cursor-pointer"
39
+ v-if="!decryptIs.includes(item)"
40
+ @click="decryptData(item)"></span>
41
+ </span>
42
+ </div>
43
+ </div>
44
+ <el-table :data="orderData.CRMORDER" :show-header="false" style="width: 100%">
45
+ <el-table-column width="560">
46
+ <template #default="scope">
47
+ <div class="bnOrder-good">
48
+ <div class="w-flex-top">
49
+ <div>
50
+ <el-image
51
+ class="bnOrder-good-img"
52
+ style=""
53
+ :preview-teleported="true"
54
+ :src="scope.row.picUrl"
55
+ :preview-src-list="[scope.row.picUrl]"
56
+ show-progress fit="cover"
57
+ />
58
+ </div>
59
+ <div class="bnOrder-good-info">
60
+ <div class="w-text-over-two w-color-black3 w-default-hover" @click="openTid(scope.row.sourceItemId)">
61
+ {{ scope.row.title }}
62
+ </div>
63
+ <div class="w-font13">
64
+ <span class="w-color-gray">商品属性:</span>{{ scope.row.skuPropName || '-' }}
65
+ <span class="w-color-gray w-margin-left8">商家编码:</span>{{ scope.row.outerSkuId || '-' }}
66
+ </div>
67
+ </div>
68
+ </div>
69
+ <div>
70
+ <span class="w-font12 w-margin-right2">x</span><span
71
+ class="w-font16 w-font-weight">{{ scope.row.num }}</span>
72
+ </div>
73
+ </div>
74
+ </template>
75
+ </el-table-column>
76
+ <el-table-column>
77
+ <template #default="scope">
78
+ <div class="w-flex-lrCenter w-text-over">
79
+ <span class="w-font-weight w-font16 w-color-deep-orange">¥{{ scope.row.price }}</span>
80
+ </div>
81
+ </template>
82
+ </el-table-column>
83
+ </el-table>
84
+ <div class="bnOrder-flag">
85
+ <div class="bnOrder-info-item w-color-black8">卖家备注:</div>
86
+ <div class="bnOrder-flag-content">
87
+ <span v-if="orderData.CRMTRADE.sellerFlag && sellerRemarksColor"
88
+ class="bnUIcon bnUIcon-flag" :class="[`flag-color-${sellerRemarksColor}`]"></span>
89
+ <span class="w-font14 w-margin-lr3">{{ orderData.CRMTRADE.sellerMemo }}</span>
90
+ <span class="w-color-blue w-cursor-pointer w-font14" @click="orderRemark">编辑备注</span>
91
+ </div>
92
+ </div>
93
+ </el-card>
94
+ </div>
95
+ </template>
96
+
97
+ <script>
98
+ import {flagList} from "./util.js";
99
+ import orderRemark from "./orderRemark.vue";
100
+
101
+ export default {
102
+ name: "BnOrderCard",
103
+ components: {orderRemark},
104
+ props: {
105
+ // 接口请求外部转发
106
+ postFunc: Function,
107
+ // 扩展参数
108
+ extendPost: {
109
+ type: Object,
110
+ default() {
111
+ return {}
112
+ }
113
+ },
114
+ },
115
+ computed: {
116
+ // 获取订单备注旗帜颜色
117
+ sellerRemarksColor() {
118
+ const {sellerFlag} = this.orderData.CRMTRADE;
119
+ const {sellerType} = this.orderData.CRMSELLER;
120
+ // 特殊值,如果 flag 为100,一律展示橙色(因为其他平台没有橙色,橙黄相反的问题处理 - 布奇。)
121
+ if (sellerFlag == '100') {
122
+ return 'orange'
123
+ }
124
+ let flags = this.flagList[sellerType || 1];
125
+ // 没找到旗子列表(说明该平台没有旗帜)展示空旗帜
126
+ if (flags) {
127
+ let flagFind = flags.find(flag => flag.key == sellerFlag);
128
+ return flagFind.className;
129
+ } else {
130
+ return false
131
+ }
132
+ },
133
+ },
134
+ data() {
135
+ return {
136
+ flagList: flagList,
137
+ orderData: {},
138
+ // 解密历史
139
+ decryptIs:[]
140
+ }
141
+ },
142
+ created() {
143
+ this.getOrderData();
144
+ },
145
+ methods: {
146
+ /**
147
+ * 获取订单信息
148
+ * */
149
+ async getOrderData() {
150
+ let res = await this.postFunc(`/v2/ods/getOdsInfoByDetail/${this.extendPost.projectId}`, {
151
+ ...this.extendPost
152
+ })
153
+ if (!res.code) {
154
+ this.orderData = res.data;
155
+ }
156
+ },
157
+ /**
158
+ * 点击修改订单备注
159
+ * */
160
+ orderRemark() {
161
+ let postData = {
162
+ tid: this.orderData.CRMTRADE.tid, // 订单Id
163
+ sellerId: this.orderData.CRMSELLER.id, //淘宝店铺Id
164
+ sellerType: this.orderData.CRMSELLER.sellerType, //淘宝店铺Id
165
+ flag: this.orderData.CRMTRADE.sellerFlag,// 备注旗帜
166
+ sellerMemo: this.orderData.CRMTRADE.sellerMemo, // 备注内容
167
+ type: this.orderData.CRMTRADE && this.orderData.CRMTRADE.sellerMemo ? 'update' : 'create' // 1、create 新增 2、update 更新
168
+ }
169
+ this.$refs.orderRemark.open(postData)
170
+ },
171
+ /**
172
+ * 备注完毕更新备注信息
173
+ * */
174
+ overRemark(data) {
175
+ this.orderData.CRMTRADE.sellerFlag = data.flag;
176
+ this.orderData.CRMTRADE.sellerMemo = data.sellerMemo;
177
+ },
178
+ /**
179
+ * 打开订单详情\商品详情。
180
+ * type:tid-订单 其他-商品id
181
+ * */
182
+ openTid(type) {
183
+ if (['1', '8'].includes(this.orderData.CRMSELLER.sellerType)) {
184
+ let url = ''
185
+ if (type == 'tid') {
186
+ url = `https://trade.taobao.com/trade/detail/trade_item_detail.htm?spm=a1z09.1.0.0.d3wYGE&bizOrderId=${this.orderData.CRMTRADE.tid}`
187
+ } else {
188
+ url = `http://item.taobao.com/item.htm?id=${type}`
189
+ }
190
+ window.open(url, '_target')
191
+ } else {
192
+ this.$message.warning('仅淘天支持订单信息跳转')
193
+ }
194
+ },
195
+ /**
196
+ * 数据解密
197
+ * */
198
+ decryptData(type) {
199
+ this.decryptIs.push(type)
200
+ let sellerType = Number(this.orderData.CRMSELLER.sellerType);
201
+ let bool1 = Boolean([37, 21, 19, 29, 42, 25, 46].includes(sellerType) &&
202
+ ['buyerNick', 'buyMobile', 'receiverName', 'receiverAddress'].includes(type))
203
+ let bool2 = Boolean([1, 3, 8, 17, 36, 42, 25, 43, 44, 46].includes(sellerType) &&
204
+ ['buyMobile', 'receiverName', 'receiverAddress'].includes(type))
205
+ if (bool1 || bool2) {
206
+ let type = this.type == 'buyerNick' ? 'receiverName' : this.type;
207
+ let condition = {
208
+ taskId: this.extendPost.taskId,
209
+ sourceId: this.orderData.tid,
210
+ }
211
+ if (type == 'receiverAddress') {
212
+ let addressList = this.orderData.CRMTRADE.receiverAddress.split(',');
213
+ let addressString = ''
214
+ for (let i = 0; i < addressList.length; i++) {
215
+ if (i < 3) {
216
+ addressString += (addressList[i] + ',')
217
+ } else {
218
+ addressString += addressList[i]
219
+ }
220
+ }
221
+ condition[type] = addressString
222
+ } else {
223
+ condition[type] = this.orderData.CRMTRADE[type];
224
+ }
225
+ let postData = {
226
+ typeEnum: [1, 8].includes(sellerType) ? 12 : 1,// 类型
227
+ sellerId: this.orderData.CRMSELLER.id,
228
+ sellerType: sellerType,
229
+ appId: this.extendPost.appId,
230
+ projectId: this.extendPost.projectId,
231
+ conditions: [condition]
232
+ };
233
+ this.postFunc('/v2/decrypt/getReceiverInfo', postData).then(res => {
234
+ if (!res.code) {
235
+ this.orderData.CRMTRADE[type] = type == 'buyMobile' ? res.data[0].receiverPhone : res.data[0][type]
236
+ }
237
+ })
238
+ } else {
239
+ let postData = {
240
+ appId: this.extendPost.appId, //小程序id
241
+ projectId: this.extendPost.projectId,
242
+ tid: this.orderData.tid,
243
+ }
244
+ this.postFunc(`/v2/ods/getOdsInfoByDetail/${this.extendPost.projectId}`, postData).then(res => {
245
+ if (!res.code) {
246
+ this.orderData.CRMTRADE[type] = type == 'buyMobile' ? res.data[0].receiverPhone : res.data[0][type]
247
+ }
248
+ })
249
+ }
250
+ }
251
+ }
252
+ };
253
+ </script>
254
+
255
+ <style scoped lang="scss">
256
+ @import "../font/iconfont.css";
257
+ // 班牛旗帜颜色
258
+ // 灰色
259
+ .flag-color-gray {
260
+ color: #999999;
261
+ }
262
+
263
+ // 红色
264
+ .flag-color-red {
265
+ color: #EA3D3D;
266
+ }
267
+
268
+ // 黄色
269
+ .flag-color-yellow {
270
+ color: #FFC60B;
271
+ }
272
+
273
+ // 绿色
274
+ .flag-color-green {
275
+ color: #3ACB36;
276
+ }
277
+
278
+ // 蓝色
279
+ .flag-color-blue {
280
+ color: #0664F0;
281
+ }
282
+
283
+ // 紫色
284
+ .flag-color-purple {
285
+ color: #BA2FFF;
286
+ }
287
+
288
+ // 橙色
289
+ .flag-color-orange {
290
+ color: #F48804;
291
+ }
292
+
293
+ // 浅蓝色
294
+ .flag-color-lightBlue {
295
+ color: #41B4FA;
296
+ }
297
+
298
+ // 浅粉色
299
+ .flag-color-lightPink {
300
+ color: #E5B6B6;
301
+ }
302
+
303
+ // 深绿色
304
+ .flag-color-bottleGreen {
305
+ color: #9BA217;
306
+ }
307
+
308
+ // 桃红色
309
+ .flag-color-peach {
310
+ color: #E4248E;
311
+ }
312
+
313
+ // 青色(抖音的,在班牛没有这个颜色,班牛这边是深绿色)
314
+ .flag-color-cyan {
315
+ color: #9BA217;
316
+ }
317
+
318
+ .bnOrder {
319
+ position: relative;
320
+ width: 100%;
321
+
322
+ &-card {
323
+ width: 100%;
324
+ padding: 0;
325
+
326
+ :deep(.el-card__body) {
327
+ padding: 0;
328
+ }
329
+ }
330
+
331
+ &-info {
332
+ display: flex;
333
+ align-items: center;
334
+ height: 40px;
335
+ background: #f5f7fa;
336
+ padding: 0 15px;
337
+ border-bottom: 1px solid #dcdfe6;
338
+
339
+ &-item {
340
+ height: 40px;
341
+ line-height: 40px;
342
+ font-size: 14px;
343
+ margin-right: 10px;
344
+ }
345
+
346
+ &-title {
347
+ color: #888;
348
+ }
349
+
350
+ }
351
+
352
+ &-good {
353
+ display: flex;
354
+ align-items: center;
355
+ justify-content: space-between;
356
+
357
+ &-info {
358
+ padding: 0 10px;
359
+
360
+ }
361
+
362
+ &-img {
363
+ width: 68px;
364
+ height: 68px;
365
+ background: #f5f5f5;
366
+ border-radius: 4px;
367
+ }
368
+
369
+ &-num {
370
+ display: flex;
371
+ }
372
+ }
373
+
374
+ &-flag {
375
+ min-height: 40px;
376
+ background: #f5f7fa;
377
+ padding: 0 15px;
378
+ display: flex;
379
+
380
+ &-content {
381
+ max-width: calc(100% - 80px);
382
+ padding: 8px 0;
383
+ line-height: 20px;
384
+ }
385
+ }
386
+
387
+ }
388
+
389
+ </style>