jufubao-base 1.0.290-beta2 → 1.0.290

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 (30) hide show
  1. package/package.json +1 -1
  2. package/src/components/CusCouponChose/CusCouponChose.vue +1027 -0
  3. package/src/components/CusCouponItem/CusCouponItem.vue +298 -0
  4. package/src/components/CusEnter/CusEnter.vue +360 -0
  5. package/src/components/CusPoster/CusPoster.vue +212 -0
  6. package/src/components/CusPoster/CusSwiperDot.vue +234 -0
  7. package/src/components/CusProduct/CusProduct.vue +372 -0
  8. package/src/components/CusShops/CusShops.vue +518 -0
  9. package/src/components/CusSwiperDot/CusSwiperDot.vue +234 -0
  10. package/src/components/CusTab/CusTab.vue +411 -0
  11. package/src/components/CusVideo/CusVideo.vue +170 -0
  12. package/src/components/JfbBaseFooter/Attr.js +10 -155
  13. package/src/components/JfbBaseFooter/JfbBaseFooter.vue +98 -44
  14. package/src/components/JfbBaseFooter/XdFooterBar.vue +324 -0
  15. package/src/components/JfbBaseFooter/cusAttr/advanced.js +12 -0
  16. package/src/components/JfbBaseFooter/cusAttr/content.js +475 -0
  17. package/src/components/JfbBaseFooter/cusAttr/style.js +7 -0
  18. package/src/components/JfbBaseFooter/cusAttr/tools.js +17 -0
  19. package/src/components/JfbBaseSavingDetail/JfbBaseSavingDetail.vue +2 -14
  20. package/src/components/JfbBaseTfkSearch/Api.js +15 -0
  21. package/src/components/JfbBaseTfkSearch/CustomList.vue +10 -0
  22. package/src/components/JfbBaseTfkSearch/JfbBaseTfkSearch.vue +255 -7
  23. package/src/components/JfbBaseTfkSearch/XdQueryFilter.vue +347 -0
  24. package/src/components/JfbBaseTfkSearch/XdQuerySort.vue +192 -0
  25. package/src/components/JfbBaseTfkSearch/listMixins.js +8 -6
  26. package/src/components/JfbBaseUserInfo/Attr.js +12 -0
  27. package/src/components/JfbBaseUserInfo/JfbBaseUserInfo.vue +8 -2
  28. package/src/mixins/componentsMixins.js +363 -55
  29. package/src/mixins/posterMixins.js +27 -199
  30. package/src/mixins/productCompMixins.js +252 -0
@@ -0,0 +1,170 @@
1
+ <template>
2
+ <view class="video-box">
3
+ <view class="thumb" :class="{noImageUrl: !imageUrl}" v-if="!playStatus">
4
+ <image :src="imageUrl" v-if="imageUrl" />
5
+ <view v-if="videoUrl" @click="handlePlay()">
6
+ <xd-font-icon
7
+ :icon="iconFont"
8
+ size="100"
9
+ color="#fff"
10
+ ></xd-font-icon>
11
+ </view>
12
+ </view>
13
+ <view
14
+ class="video"
15
+ :style="{borderRadius: radius + 'rpx'}"
16
+ v-else
17
+ >
18
+ <video
19
+ v-if="videoUrl"
20
+ :src="videoUrl"
21
+ :autoplay="autoplay === 'Y'"
22
+ @ended="handleEnd()"
23
+ @error="handleError"
24
+ ></video>
25
+ </view>
26
+ </view>
27
+ </template>
28
+
29
+ <script>
30
+ import getServiceUrl from '@/common/getServiceUrl'
31
+ import XdFontIcon from "@/components/XdFontIcon/XdFontIcon";
32
+
33
+ export default {
34
+ name:'CusVideo',
35
+ components:{
36
+ XdFontIcon
37
+ },
38
+ props:{
39
+ margin:{
40
+ type: Object,
41
+ default(){
42
+ return {}
43
+ }
44
+ },
45
+ poster:{
46
+ type:Object,
47
+ required: true
48
+ },
49
+ radius:{
50
+ type: String|Number,
51
+ default: 0
52
+ },
53
+ video:{
54
+ type:Object,
55
+ required: true
56
+ },
57
+ },
58
+ data(){
59
+ return {
60
+ isPreview: false,
61
+
62
+ //play
63
+ imageUrl: '',
64
+ videoUrl: '',
65
+ playStatus: false,
66
+ autoplay: 'N',
67
+ }
68
+ },
69
+ computed: {
70
+ iconFont(){
71
+ if(this.autoplay === 'N') return 'iconplayright'
72
+ if(this.autoplay === 'E') return 'iconshibai';
73
+ if(this.autoplay === 'R') return 'iconplayreplay';
74
+ },
75
+ },
76
+ watch:{
77
+ poster(){
78
+ this.init();
79
+ }
80
+ },
81
+ created() {
82
+ this.isPreview = this.$configProject.isPreview;
83
+ this.init();
84
+ },
85
+ methods:{
86
+ init(){
87
+ if(this.poster.size) {
88
+ this.width = Number(this.poster.size.width);
89
+ this.height = Number(this.poster.size.height);
90
+ }
91
+
92
+ let {image_url, thumb} = this.video;
93
+ if(image_url) this.videoUrl = getServiceUrl(image_url);
94
+ if(thumb) this.imageUrl = getServiceUrl(thumb);
95
+ },
96
+ handlePlay(){
97
+ if(this.autoplay === 'E') return;
98
+ this.playStatus = !this.playStatus;
99
+ this.autoplay = "Y";
100
+ },
101
+
102
+ handleEnd(){
103
+ setTimeout(()=>{
104
+ this.playStatus = !this.playStatus;
105
+ this.autoplay = "R";
106
+ }, 1000)
107
+ },
108
+
109
+ handleError(){
110
+ this.$xdConfirm({
111
+ title: '温馨提示',
112
+ content:'当前视频资源无法播放',
113
+ cancel: false,
114
+ confirmText:'我知道了',
115
+ zIndex:10000,
116
+ success:()=>{
117
+ this.playStatus = !this.playStatus;
118
+ this.autoplay = "R";
119
+ }
120
+ })
121
+
122
+ }
123
+ }
124
+ }
125
+ </script>
126
+
127
+
128
+
129
+ <style scoped lang="less">
130
+ .video-box {
131
+ width: 100%;
132
+ height: 100%;
133
+ box-sizing: border-box;
134
+ view.noImageUrl {
135
+ background: rgba(0,0,0,.6);
136
+ }
137
+ view.thumb {
138
+ height: 100%;
139
+ width: 100%;
140
+ position: relative;
141
+ overflow: hidden;
142
+
143
+ & > view {
144
+ width: 120rpx;
145
+ height: 120rpx;
146
+ position: absolute;
147
+ top: 50%;
148
+ left: 50%;
149
+ margin-top: -60rpx;
150
+ margin-left:-60rpx;
151
+ }
152
+
153
+ & > image {
154
+ height: 100%;
155
+ width: 100%;
156
+ }
157
+ }
158
+
159
+ view.video {
160
+ overflow: hidden;
161
+ height: 100%;
162
+ width: 100%;
163
+
164
+ & video {
165
+ height: 100%;
166
+ width: 100%;
167
+ }
168
+ }
169
+ }
170
+ </style>
@@ -1,163 +1,18 @@
1
1
  'use strict';
2
- import ICONS from '@/ICONS'
2
+
3
+ import style from "./cusAttr/style";
4
+ import advanced from "./cusAttr/advanced";
5
+ import content from "./cusAttr/content";
3
6
 
4
7
  export default {
5
8
  style: [],
6
- advanced: [],
7
- content:(data)=>{
8
- let footerSettingImage = [];
9
- let footerSetting = [];
10
- if(data['footerSettingImage'] && data['footerSettingImage'].length > 0 ) {
11
- footerSettingImage = data['footerSettingImage'];
12
- }
13
- if(data['footer-setting'] && data['footer-setting'].length > 0){
14
- footerSetting = data['footer-setting'];
15
- footerSetting.map((item,index)=>{
16
- if(!footerSettingImage[index]) footerSettingImage[index] = {};
17
- footerSettingImage[index] = Object.assign({},JSON.parse(JSON.stringify(item)),footerSettingImage[index])
18
- })
19
- }
9
+ content: (data, gValue, gColor, oldData={}) => {
20
10
  return [
21
- {
22
- label: '',
23
- ele: 'slot',
24
- slot: 'is_reference_title',
25
- groupKey: 'advanced',
26
- },
27
- {
28
- label: '背景图设置:',
29
- ele: 'xd-upload',
30
- valueKey: 'backgroundImage',
31
- groupKey:'content',
32
- value: data.backgroundImage || {},
33
- defaultValue: data.backgroundImage || null,
34
- slot: true,
35
- oneWidth: 375,
36
- oneHeight: 55,
37
- elinputClassName: 'input40',
38
- tipsformet: '上传文件格式:@imageType@,不超过@size@MB。建议尺寸:<span style="color:red">750*110</span>像素',
39
- type: ['jpg', 'png', 'jpeg'],
40
- styleType: 'one',
41
- uploadType: 'aliyun',
42
- size: .5,
43
- action: 'action',
44
- sort: true,
45
- maxlen: 1,
46
- },
47
- {
48
- label: '背景颜色:',
49
- ele: 'xd-color',
50
- valueKey: 'bgColor',
51
- groupKey:'content',
52
- value: data['bgColor'] || '',
53
- placeholder: '请选择背景颜色',
54
- setting: {
55
- isAlpha: false
56
- },
57
- classNmae: 'input80',
58
- },
59
- {
60
- label: '边框颜色:',
61
- ele: 'xd-color',
62
- valueKey: 'borderColor',
63
- groupKey:'content',
64
- value: data['borderColor'] || '',
65
- placeholder: '请选择边框颜色',
66
- setting: {
67
- isAlpha: false
68
- },
69
- classNmae: 'input80',
70
- },
71
- {
72
- label: '菜单文字颜色:',
73
- ele: 'xd-color',
74
- valueKey: 'color',
75
- groupKey:'content',
76
- value: data['color'] || '',
77
- setting: {
78
- isAlpha: false
79
- },
80
- placeholder: '请选择菜单文字颜色',
81
- classNmae: 'input80',
82
- },
83
- {
84
- label: '菜单文字选中颜色:',
85
- ele: 'xd-color',
86
- valueKey: 'selectedColor',
87
- groupKey:'content',
88
- setting: {
89
- isAlpha: false
90
- },
91
- value:data['selectedColor'] || '',
92
- placeholder: '请选择菜单文字选中颜色',
93
- classNmae: 'input80',
94
- },
95
- footerSetting.length > 0 && {
96
- label: '菜单图片配置:',
97
- ele: 'xd-footer-setting',
98
- valueKey: 'footerSettingImage',
99
- groupKey:'content',
100
- value: footerSettingImage,
101
- setting: {
102
- router: XdBus.getParentApi('getPagesTree'),
103
- hideAdd: true,
104
- showField: {
105
- path: false,
106
- icon: false,
107
- notice: false,
108
- image: true,
109
- actImage: true
110
- }
111
- },
112
- handleCustom({action,data}){
113
- if(action === 'number') {
114
- XdBus.getParentApi('getOptionsNoticeNumber')()
115
- .then(res => {
116
- data.cb(res.list)
117
- })
118
- .catch();
119
- }
120
- },
121
- },
122
-
123
- {
124
- label: '菜单配置:',
125
- ele: 'xd-footer-setting',
126
- valueKey: 'footer-setting',
127
- groupKey:'advanced',
128
- value: footerSetting,
129
- setting: {
130
- router: XdBus.getParentApi('getPagesTree'),
131
- icons:ICONS,
132
- showField: {
133
- path: true,
134
- icon: true,
135
- notice: true,
136
- }
137
- },
138
- handleCustom({action,data}){
139
- console.log(`handleCustom.${action}`, data);
140
- if(action === 'number') {
141
- XdBus.getParentApi('getOptionsNoticeNumber')()
142
- .then(res => {
143
- data.cb(res.list)
144
- })
145
- .catch();
146
- }
147
- },
148
- inline: false,
149
- notice: '设置底部菜单的链接地址1、标题(最多<sapn style="color: red">五个汉字</sapn>)、ICON图标(<a href="https://www.iconfont.cn/manage/index?spm=a313x.7781069.1998910419.db775f1f3&manage_type=myprojects&projectId=3378319&keyword=&project_type=&page=" style="color: blue" target="_blank">ICONFONT库</a>)、ICON大小(单位:<sapn style="color: red">像素</sapn>)和是否有消息数量显示(无数量显示可以不填写)',
150
- rules: [
151
- {required: true, message: '请添加内容', trigger: 'change'},
152
- ],
153
- },
154
- {
155
- label: '',
156
- ele: 'slot',
157
- slot: 'is_reference',
158
- groupKey: 'advanced',
159
- },
160
- ].filter(i=>i);
11
+ ...content(data, gValue, gColor, oldData),
12
+ ...style(data, gValue, gColor, oldData),
13
+ ...advanced(data, gValue, gColor,oldData ),
14
+ ].filter(i => i)
161
15
  },
16
+ advanced: [],
162
17
  };
163
18
 
@@ -23,7 +23,7 @@
23
23
  style="height:100%"
24
24
  v-if="list !== null"
25
25
  :height="height"
26
- :tabbar="list"
26
+ :tab-bar="list"
27
27
  :view="view"
28
28
  :styles="styles"
29
29
  :key="footerBarKey"
@@ -36,7 +36,7 @@
36
36
 
37
37
  <script>
38
38
  import XdFontIcon from "@/components/XdFontIcon/XdFontIcon";
39
- import XdFooterBar from "@/components/XdFooterBar/XdFooterBar";
39
+ import XdFooterBar from "./XdFooterBar";
40
40
  import { jfbRootExec, jfbRootFnExec } from "@/utils/xd.event";
41
41
  import JfbBaseFooterMixin from "./JfbBaseFooterMixin";
42
42
  import componentsMixins from "@/mixins/componentsMixins";
@@ -44,7 +44,8 @@
44
44
  import {getNoUrl} from "@/utils/nourl";
45
45
  import {
46
46
  getContainerPropsValue,
47
- getComponentAttr
47
+ getComponentAttr,
48
+ gCPVal
48
49
  } from "@/utils/xd.base";
49
50
  import getServiceUrl from "@/common/getServiceUrl";
50
51
 
@@ -65,6 +66,7 @@
65
66
  backgroundSize: '100% 100%',
66
67
  backgroundRepeat: 'no-repeat',
67
68
  backgroundPosition: 'top center',
69
+ backgroundColor: this.backgroundColor,
68
70
  '--border-color': this.borderColor
69
71
  }
70
72
 
@@ -74,51 +76,49 @@
74
76
  return params
75
77
  }
76
78
  },
79
+ watch: {
80
+ container(value,oloValue) {
81
+ if(JSON.stringify(value) === JSON.stringify(oloValue)) return;
82
+ if (this.$configProject['isPreview']){
83
+ this.init(value);
84
+ this.getNumber();
85
+ this.footerBarKey = this.$xdUniHelper.randomChar(20);
86
+ }
87
+ }
88
+ },
77
89
  data() {
78
90
  return {
91
+ closeMask: true,
79
92
  height: 0,
80
93
  list: null,
81
94
  view: false,
82
95
  numObj: {},
83
96
  footerBarKey: 'footerBarKey', //刷新
84
97
  baseUrl: '',
98
+ footerTpl:'', //模版样式
99
+
100
+ //样式
85
101
  backgroundImage: '',
86
- borderColor: ''
87
- }
88
- },
89
- watch: {
90
- container(value,oloValue) {
91
- if(JSON.stringify(value) === JSON.stringify(oloValue)) return;
92
- if (this.$configProject['isPreview']){
93
- this.init(value);
94
- this.getNumber();
95
- this.footerBarKey = this.$xdUniHelper.randomChar(20);
96
- }
102
+ backgroundColor:'#fff',
103
+ borderColor: '',
97
104
  }
98
105
  },
99
106
  created() {
100
107
  this.view = this.$configProject.isPreview;
101
108
 
102
- //非预览模式
103
109
  //#ifdef H5
104
110
  if (!this.$configProject.isPreview){
105
111
  this.baseUrl = this.projectAttr['deploy_dir']
106
112
  }
107
113
  //#endif
108
114
 
109
- //设置高度
110
- if(this.$configProject.isPreview) {
111
- this.height = getComponentAttr(this.componentAttr, 'height');
112
- }
113
- else {
114
- this.height = getComponentAttr(this.componentAttr, 'height');
115
- }
116
-
117
- this.height = Number(this.height);
115
+ this.height = Number(getComponentAttr(this.componentAttr, 'height'));
118
116
 
119
117
  this.init(this.container);
118
+
120
119
  //监听重试消息数量
121
120
  this.$xdRoot.$on('restFooterNumber', this.handle)
121
+
122
122
  },
123
123
  methods: {
124
124
  handle(){
@@ -196,29 +196,83 @@
196
196
 
197
197
  /**
198
198
  * @description 监听事件变化
199
- * @param value {object} 业务组件对象自己
199
+ * @param container {object} 业务组件对象自己
200
200
  */
201
- init(value) {
201
+ init(container) {
202
+ this.footerTpl = gCPVal(container, 'footerTpl', 'noraml');
203
+
202
204
  //设置底部菜单
203
- let bar = getContainerPropsValue(value, 'content.footer-setting', []);
204
- let imageIcons = getContainerPropsValue(value, 'content.footerSettingImage', []);
205
- this.backgroundImage = getContainerPropsValue(value, 'content.backgroundImage', '');
206
- this.borderColor = getContainerPropsValue(value, 'content.borderColor', '#eee');
205
+ let settingKey = 'footer-setting';
206
+ if(this.footerTpl === 'itemCenterBig') settingKey = 'footer-setting-center-big'
207
+ let barList = gCPVal(container, settingKey, []);
208
+ let imageIcons = gCPVal(container, 'footerSettingImage', []);
209
+
210
+ this.backgroundImage = gCPVal(container, 'backgroundImage', '',{sKey:'navStatus',fields:['bgColor','backgroundImage','borderColor']});
211
+ this.backgroundColor = gCPVal(container, 'bgColor', '#fff',{sKey:'navStatus',fields:['bgColor','backgroundImage','borderColor']});
212
+ this.borderColor = gCPVal(container, 'bgColor', ['#fff','#eee'],{sKey:'navStatus',fields:['bgColor','backgroundImage','borderColor']});
213
+ let color = gCPVal(container,'color', '');
214
+ let selectedColor = gCPVal(container,'selectedColor', '');
215
+ let isShowTitle = gCPVal(container, 'isShowTitle', 'Y');
216
+ this.iconStyle = gCPVal(container, 'iconStyle', [
217
+ {
218
+ cusColor:{
219
+ iconColor: '#333',
220
+ color:'#333'
221
+ },
222
+ cusActColor:{
223
+ color: this.mainColor,
224
+ iconColor: this.mainColor
225
+ }
226
+ },
227
+ {
228
+ cusColor:{
229
+ iconColor: color || '#333',
230
+ color:color || '#333'
231
+ },
232
+ cusActColor:{
233
+ color: selectedColor || this.mainColor,
234
+ iconColor: selectedColor || this.mainColor
235
+ }
236
+ }
237
+ ],{sKey:'iconStyleStatus',fields:['iconStyle','color','selectedColor']});
238
+ let borderColor = gCPVal(container, 'centerColor', this.backgroundColor,{sKey:'iconCenterStatus',fields:['centerWidth','centerColor']});
239
+ let borderWidth = gCPVal(container, 'centerWidth', 12,{sKey:'iconCenterStatus',fields:['centerWidth','centerColor']});
240
+
241
+
207
242
  this.list = {
208
- bgColor: getContainerPropsValue(value, 'content.bgColor', '#fff'),
209
- bodyStyle: this.bodyStyle,
210
- selectedColor: getContainerPropsValue(value, 'content.selectedColor', this.mainColor),
211
- color: getContainerPropsValue(value, 'content.color', '#333'),
212
- list: bar.map((item,index)=>{
213
- return {
214
- name: item.name.slice(0, 6),
215
- icon: item.icon,
216
- path: item.path.value,
217
- size: item.size,
243
+ tpl:this.footerTpl,
244
+ hasName: isShowTitle === 'Y',
245
+ borderColor,
246
+ borderWidth,
247
+ bgColor: this.backgroundColor,
248
+ color:this.iconStyle.cusColor.color,
249
+ selectedColor:this.iconStyle.cusActColor.color,
250
+ iconColor:this.iconStyle.cusColor.iconColor,
251
+ selectedIconColor:this.iconStyle.cusActColor.iconColor,
252
+ list: barList.map((item,index)=>{
253
+ let selfImage = (item.image && item.image.url) ? getServiceUrl(item.image.url,'size3'):'';
254
+ let selfActImage = (item.actImage && item.actImage.url) ? getServiceUrl(item.actImage.url,'size3'):'';
255
+ let image = (selfImage || selfActImage) || this.getImage(imageIcons,index,'image') || this.getImage(imageIcons,index,'actImage');
256
+ let actImage = (selfActImage || selfImage) || this.getImage(imageIcons,index,'actImage') || this.getImage(imageIcons,index,'image');
257
+ let iconType = 'icon';
258
+ if(!item['iconType'] && (actImage || image)) iconType = 'image';
259
+ if(['icon','image'].includes(item['iconType'])) iconType = item['iconType'];
260
+ let router = {
261
+ path: (item.path && item.path.value) ? item.path.value :'',
218
262
  num: this.numObj[index] ? this.numObj[index]: 0 ,
219
- image: this.getImage(imageIcons,index,'image') || this.getImage(imageIcons,index,'actImage'),
220
- actImage: this.getImage(imageIcons,index,'actImage') || this.getImage(imageIcons,index,'image'),
221
263
  }
264
+ if(isShowTitle === 'Y') router['name'] = item.name ? item.name.slice(0, 5): '';
265
+ if(iconType === 'icon') {
266
+ router['icon'] = item.icon;
267
+ router['image'] = '';
268
+ router['actImage'] = '';
269
+ }
270
+ if(iconType === 'image') {
271
+ router['icon'] = '';
272
+ router['image'] = image;
273
+ router['actImage'] = actImage;
274
+ }
275
+ return router
222
276
  }),
223
277
  };
224
278
  },
@@ -234,12 +288,12 @@
234
288
  border-color: var(--border-color);
235
289
  }
236
290
  }
237
-
238
291
 
239
- .jfb-base-footer {
240
292
 
293
+ .jfb-base-footer {
241
294
  &__body{
242
295
  box-sizing: border-box;
296
+ overflow: inherit!important;
243
297
  }
244
298
  }
245
299
  </style>