jufubao-base 1.0.74 → 1.0.75

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jufubao-base",
3
- "version": "1.0.74",
3
+ "version": "1.0.75",
4
4
  "private": false,
5
5
  "description": "聚福宝业务组件基础插件包",
6
6
  "main": "index.js",
@@ -12,6 +12,33 @@ export default {
12
12
  ele: 'slot', //package 名称
13
13
  slot: 'is_reference_title',
14
14
  },
15
+ {
16
+ ele: 'title',
17
+ label: '基础设置',
18
+ size: 'small', //default/mini/small
19
+ },
20
+ {
21
+ label: '布局:',
22
+ ele: 'xd-radio',
23
+ valueKey: 'is_layout',
24
+ value: data['is_layout'] || 'noraml',
25
+ placeholder: '请选择是否有边框',
26
+ multiple: false,
27
+ className: 'input80',
28
+ list: [
29
+ {label: '平铺', value: 'noraml'},
30
+ {label: '悬浮', value: 'fixed'},
31
+ ]
32
+ },
33
+ data['is_layout'] ==='fixed' && {
34
+ label: '自定义名称:',
35
+ ele: 'el-input',
36
+ type: 'text',
37
+ valueKey: 'fastName',
38
+ value: data['fastName']? data['fastName']: '快速导航',
39
+ placeholder: '请输入自定义名称',
40
+ className: 'input80',
41
+ },
15
42
  {
16
43
  label: '快速链接配置:', //label
17
44
  ele: 'xd-footer-setting', //package 名称
@@ -63,12 +90,12 @@ export default {
63
90
  },
64
91
  ],
65
92
  },
66
- {
93
+ data['is_layout'] ==='noraml' && {
67
94
  ele: 'title',
68
95
  label: '样式设置',
69
96
  size: 'small', //default/mini/small
70
97
  },
71
- {
98
+ data['is_layout'] ==='noraml' && {
72
99
  label: '文字大小:',
73
100
  ele: 'xd-site-select-list',
74
101
  valueKey: 'fontSize',
@@ -88,7 +115,7 @@ export default {
88
115
  });
89
116
  },
90
117
  },
91
- {
118
+ data['is_layout'] ==='noraml' && {
92
119
  label: '背景颜色:',
93
120
  ele: 'xd-color',
94
121
  valueKey: 'backgroundColor',
@@ -96,7 +123,7 @@ export default {
96
123
  placeholder: '请选择背景颜色',
97
124
  classNmae: 'input80',
98
125
  },
99
- {
126
+ data['is_layout'] ==='noraml' && {
100
127
  label: '文字颜色:',
101
128
  ele: 'xd-color',
102
129
  valueKey: 'textColor',
@@ -104,7 +131,7 @@ export default {
104
131
  placeholder: '请选择文字颜色',
105
132
  classNmae: 'input80',
106
133
  },
107
- {
134
+ data['is_layout'] ==='noraml' && {
108
135
  label: 'ICON颜色:',
109
136
  ele: 'xd-color',
110
137
  valueKey: 'iconColor',
@@ -112,7 +139,7 @@ export default {
112
139
  placeholder: '请选择ICON颜色',
113
140
  classNmae: 'input80',
114
141
  },
115
- {
142
+ data['is_layout'] ==='noraml' && {
116
143
  label: '间距:',
117
144
  ele: 'el-input',
118
145
  type: 'number',
@@ -121,7 +148,7 @@ export default {
121
148
  placeholder: '请输入间距',
122
149
  className: 'input80',
123
150
  },
124
- {
151
+ data['is_layout'] ==='noraml' && {
125
152
  label: '内容边距设置:',
126
153
  ele: 'xd-margin-padding',
127
154
  valueKey: 'margin',
@@ -134,12 +161,12 @@ export default {
134
161
  inline: false,
135
162
  notice: '内容边距设置,<span style="color: red">单位:像素</span>。默认值:0像素',
136
163
  },
137
- {
164
+ data['is_layout'] ==='noraml' && {
138
165
  ele: 'title',
139
166
  label: '边框设置',
140
167
  size: 'small', //default/mini/small
141
168
  },
142
- {
169
+ data['is_layout'] ==='noraml' && {
143
170
  label: '是否有边框:',
144
171
  ele: 'xd-radio',
145
172
  valueKey: 'is_border',
@@ -152,7 +179,7 @@ export default {
152
179
  {label: '否', value: 'N'},
153
180
  ]
154
181
  },
155
- data['is_border'] === 'Y' && {
182
+ data['is_layout'] ==='noraml' && data['is_border'] === 'Y' && {
156
183
  label: '边框颜色:',
157
184
  ele: 'xd-color',
158
185
  valueKey: 'is_border_c',
@@ -160,7 +187,7 @@ export default {
160
187
  placeholder: '请选择边框颜色',
161
188
  classNmae: 'input80',
162
189
  },
163
- data['is_border'] === 'Y' && {
190
+ data['is_layout'] ==='noraml' && data['is_border'] === 'Y' && {
164
191
  label: '边框大小:',
165
192
  ele: 'el-input',
166
193
  type: 'number',
@@ -169,7 +196,7 @@ export default {
169
196
  placeholder: '请输入边框颜色',
170
197
  className: 'input80',
171
198
  },
172
- {
199
+ data['is_layout'] ==='noraml' && {
173
200
  label: '内容圆角设置:',
174
201
  ele: 'xd-site-select-list',
175
202
  valueKey: 'radius',
@@ -14,68 +14,92 @@
14
14
  </view>
15
15
  <!-- #endif -->
16
16
  <view class="jfb-base-fast-link__body">
17
- <view class="fast-link" :style="{ margin: outMargin}" v-if="list.length > 0">
18
- <view
19
- class="fast-link__item"
20
- v-for="item in list"
21
- :key="item.key"
22
- :style="{
23
- background: backgroundColor,
24
- border: borderBox,
25
- borderRadius: radius + 'rpx',
26
- marginBottom: padding + 'rpx'
27
- }"
28
- @click="handleClick(item)"
29
- >
30
- <view class="fast-link__item-icon" v-if="item.icon">
31
- <xd-font-icon :color="iconColor" :size="item.size" :icon="item.icon"></xd-font-icon>
32
- </view>
33
- <view class="fast-link__item-text" :style="{color: color, fontSize: fontSize + 'rpx'}">
34
- <view>{{item.name}}</view>
35
- <view v-if="item['subName']" :style="subNameSize" @click.stop="toCall(item['subName'])">{{item['subName']}}</view>
36
- </view>
37
- <view class="fast-link__item-go" v-if="item.path">
38
- <xd-font-icon :color="iconColor" size="24" icon="iconxiangyou_xian"></xd-font-icon>
17
+ <template v-if="is_layout === 'noraml'">
18
+ <view class="fast-link" :style="{ margin: outMargin}" v-if="list.length > 0">
19
+ <view
20
+ class="fast-link__item"
21
+ v-for="item in list"
22
+ :key="item.key"
23
+ :style="{
24
+ background: backgroundColor,
25
+ border: borderBox,
26
+ borderRadius: radius + 'rpx',
27
+ marginBottom: padding + 'rpx'
28
+ }"
29
+ @click="handleClick(item)"
30
+ >
31
+ <view class="fast-link__item-icon" v-if="item.icon">
32
+ <xd-font-icon :color="iconColor" :size="item.size" :icon="item.icon"></xd-font-icon>
33
+ </view>
34
+ <view class="fast-link__item-text" :style="{color: color, fontSize: fontSize + 'rpx'}">
35
+ <view>{{item.name}}</view>
36
+ <view v-if="item['subName']" :style="subNameSize" @click.stop="toCall(item['subName'])">{{item['subName']}}</view>
37
+ </view>
38
+ <view class="fast-link__item-go" v-if="item.path">
39
+ <xd-font-icon :color="iconColor" size="24" icon="iconxiangyou_xian"></xd-font-icon>
40
+ </view>
39
41
  </view>
40
42
  </view>
41
- </view>
43
+ </template>
44
+ <template v-if="is_layout === 'fixed'">
45
+ <template v-if="isPreview">
46
+ <view
47
+ class="jfb-base-fast-link__body-pop"
48
+ :style="{backgroundColor:backgroundColor, color:warningColor}"
49
+ >弹窗模式方便编辑(占位),在线上此模块不显</view>
50
+ </template>
51
+ <xd-fast-nav
52
+ :list="listNave"
53
+ :color="mainColor"
54
+ :is-preview="isPreview"
55
+ :fast-name="fastName"
56
+ :layoutInfo="layoutInfo"
57
+ ></xd-fast-nav>
58
+ </template>
42
59
  </view>
43
60
  </view>
44
61
  </template>
45
62
 
46
63
  <script>
47
64
  import XdFontIcon from "@/components/XdFontIcon/XdFontIcon";
48
- import { jfbRootExec } from "@/utils/xd.event";
49
65
  import JfbBaseFastLinkMixin from "./JfbBaseFastLinkMixin";
50
66
  import componentsMixins from "@/mixins/componentsMixins";
51
67
  import extsMixins from "@/mixins/extsMixins"
52
68
  import { getContainerPropsValue } from "@/utils/xd.base";
69
+ import XdFastNav from "./XdFastNav.vue";
70
+ import Color from "color";
53
71
  const color = require('color');
54
-
55
-
72
+
73
+
56
74
  export default {
57
75
  name: "JfbBaseFastLink",
58
76
  components: {
59
- XdFontIcon
77
+ XdFontIcon,
78
+ XdFastNav
60
79
  },
61
80
  mixins: [componentsMixins,extsMixins,JfbBaseFastLinkMixin],
62
81
  data() {
63
82
  return {
83
+ listNave:[],
64
84
  list: [],
65
-
85
+ backgroundColor: '',
86
+ isPreview:false,
87
+
66
88
  //基础信息
67
89
  background: '#fff',
68
90
  color: '#000',
69
91
  fontSize: 26,
70
92
  radius: 10,
71
93
  iconColor: '#999',
72
-
73
-
94
+ is_layout: 'noraml',
95
+ fastName:'快速导航',
96
+
97
+
74
98
  //边框
75
99
  is_border: 'Y',
76
100
  is_border_w: 0,
77
101
  is_border_c: '',
78
-
102
+
79
103
  //其他
80
104
  margin: {
81
105
  top: 0,
@@ -84,7 +108,6 @@
84
108
  bottom: 0
85
109
  },
86
110
  padding: 20, //间距
87
-
88
111
  }
89
112
  },
90
113
  watch: {
@@ -92,7 +115,7 @@
92
115
  this.init(value)
93
116
  }
94
117
  },
95
-
118
+
96
119
  computed: {
97
120
  outMargin(){
98
121
  let margin = `${this.margin.top !== null ? this.margin.top : 20}rpx`;
@@ -105,7 +128,7 @@
105
128
  if (this.is_border === 'Y') return `${this.is_border_w}rpx solid ${this.is_border_c}`;
106
129
  else return '0';
107
130
  },
108
-
131
+
109
132
  subNameSize(){
110
133
  return {
111
134
  fontSize: '32rpx',
@@ -113,13 +136,15 @@
113
136
  }
114
137
  }
115
138
  },
116
-
139
+
117
140
  created() {
141
+ this.isPreview = this.$configProject['isPreview'];
142
+ this.backgroundColor = Color(this.warningColor).alpha(0.2).toString();
118
143
  this.init(this.container);
119
144
  },
120
145
  methods: {
121
146
  toCall(num){
122
- reg = /^[0-9\-]{8,20}$/;
147
+ const reg = /^[0-9\-]{8,20}$/;
123
148
  if(reg.test(num)) {
124
149
  num = num.replace(/[-]/g,'');
125
150
  uni.makePhoneCall(num)
@@ -143,21 +168,41 @@
143
168
  this.radius = getContainerPropsValue(container, 'content.radius', 10);
144
169
  this.iconColor = getContainerPropsValue(container, 'content.iconColor', '#999');
145
170
  this.padding = getContainerPropsValue(container, 'content.padding', 20);
146
-
171
+ this.is_layout = getContainerPropsValue(container, 'content.is_layout', 'noraml');
172
+ this.fastName = getContainerPropsValue(container, 'content.fastName', '快速导航');
147
173
  this.is_border = getContainerPropsValue(container, 'content.is_border', 'N');
148
174
  this.is_border_c = getContainerPropsValue(container, 'content.is_border_c', '#fff');
149
175
  this.is_border_w = getContainerPropsValue(container, 'content.is_border_w', 2);
150
-
151
176
  this.list = getContainerPropsValue(container, 'content.quick_link_list', []).map(item=>{
152
177
  return {
153
178
  ...item,
154
179
  key: this.$xdUniHelper.randomChar(20),
155
- size: Number(item.size ? item.size : 18) * 2,
180
+ size: item.size * this.$pxNum
156
181
  }
157
182
  });
158
183
  this.margin = getContainerPropsValue(container, 'content.margin', {top: 0, left: 0, right: 0, bottom: 0});
184
+
185
+ this.listNave = this.list.map(item=>{
186
+ const {appValue,path} = item.path
187
+ if(appValue === undefined && path === undefined) {
188
+ return { name: item.name, path: item.path.value, icon: item.icon, size: item.size}
189
+ }
190
+ else{
191
+ const {dir,fixed_business_code} = item.path;
192
+ let bus = fixed_business_code? Base64.encodeURI(JSON.stringify({business_code: fixed_business_code})):'';
193
+ if(bus) bus = `?x-common=${bus}`;
194
+ let jumpUrl = '';
195
+ //#ifdef H5
196
+ if(dir) jumpUrl = `//${window.location.host}/${dir}${path}`;
197
+ else jumpUrl = path;
198
+ //#endif
199
+ jumpUrl = `${jumpUrl}${bus}}`;
200
+ return { name: item.name, path: jumpUrl, icon: item.icon, size: item.size }
201
+ }
202
+ })
203
+
159
204
  },
160
-
205
+
161
206
  onJfbUpdate(...data) {
162
207
  console.log('event.onJfbUpdate', data)
163
208
  },
@@ -175,11 +220,21 @@
175
220
  .jfb-base-fast-link {
176
221
  display: flex;
177
222
  min-height: unit(100, rpx);
223
+
178
224
  &__body{
179
225
  flex: 1;
226
+
227
+ &-pop {
228
+ min-height: 58rpx;
229
+ text-align: center;
230
+ line-height: 58rpx;
231
+ color: #666;
232
+ font-size: unit(24, rpx);
233
+ padding:unit(20, rpx);
234
+ }
180
235
  }
181
236
  }
182
-
237
+
183
238
  .fast-link {
184
239
  &__item {
185
240
  cursor: pointer;
@@ -189,11 +244,11 @@
189
244
  align-items: center;
190
245
  box-sizing: border-box;
191
246
  line-height: unit(50, rpx);
192
-
247
+
193
248
  &:last-child {
194
249
  margin-bottom: 0!important;
195
250
  }
196
-
251
+
197
252
  &-icon, &-go {
198
253
  width: unit(50, rpx);
199
254
  height: unit(50, rpx);
@@ -202,7 +257,7 @@
202
257
  align-items: center;
203
258
  flex-shrink: 0;
204
259
  }
205
-
260
+
206
261
  &-text {
207
262
  flex: 1;
208
263
  padding: 0 unit(20, rpx);
@@ -212,5 +267,5 @@
212
267
  }
213
268
  }
214
269
  }
215
-
270
+
216
271
  </style>
@@ -0,0 +1,190 @@
1
+ <template>
2
+ <view
3
+ class="xd-fast-nave"
4
+ v-if="list && list.length > 0"
5
+ :style="{
6
+ zIndex: uizIndex,
7
+ bottom: uiTop + 'rpx'
8
+ }"
9
+ >
10
+ <view class="xd-fast-nave__body">
11
+ <view class="xd-fast-nave__body-close" v-if="close" @click="close=false">
12
+ <xd-font-icon icon="iconjiantou_zuo" color="#fff" size="30"></xd-font-icon>
13
+ <view>{{fastName}}</view>
14
+ </view>
15
+ <view class="xd-fast-nave__body-open" v-else @click="close=true">
16
+ <xd-font-icon icon="iconjiantou_you" color="#fff" size="30"></xd-font-icon>
17
+ <view>收起</view>
18
+ </view>
19
+ <view class="xd-fast-nave__body-list" v-if="!close">
20
+ <view
21
+ class="xd-fast-nave__body-list-item"
22
+ v-for="(item,index) in list"
23
+ :key="index"
24
+ @click="handleClick(item)"
25
+ >
26
+ <view>
27
+ <xd-font-icon v-if="item.icon" :icon="item.icon" size="34" :color="color"></xd-font-icon>
28
+ </view>
29
+ <view :style="{color: color}">{{item.name}}</view>
30
+ <view v-show="index !== 0" :style="{background: lineColor}"></view>
31
+ </view>
32
+ </view>
33
+ <view class="xd-fast-nave__body-mask" v-if="!close" @click="close=true"></view>
34
+ </view>
35
+ </view>
36
+ </template>
37
+
38
+ <script>
39
+ import XdFontIcon from "@/components/XdFontIcon/XdFontIcon";
40
+ import Color from "color";
41
+
42
+ export default {
43
+ name: "XdFastNav",
44
+ components:{
45
+ XdFontIcon
46
+ },
47
+ props:{
48
+ top: {
49
+ type: Number|String,
50
+ default: 100
51
+ },
52
+ zIndex: {
53
+ type: Number| String,
54
+ default: 100
55
+ },
56
+ list:{
57
+ type: Array|Object,
58
+ required: true,
59
+ },
60
+ color: {
61
+ type: String,
62
+ required: true
63
+ },
64
+ isPreview:{
65
+ type: Boolean,
66
+ default: false
67
+ },
68
+ fastName:{
69
+ type:String,
70
+ default: '快速导航'
71
+ },
72
+ layoutInfo:{
73
+ type:Object,
74
+ default(){
75
+ return {}
76
+ }
77
+ },
78
+ },
79
+ data(){
80
+ return {
81
+ uizIndex: 100,
82
+ close: true,
83
+ lineColor: '#fff'
84
+ }
85
+ },
86
+
87
+ computed:{
88
+ uiTop(){
89
+ return this.top + this.layoutInfo.bottomHeight + this.layoutInfo.footerHeight;
90
+ }
91
+ },
92
+
93
+ created() {
94
+ this.lineColor = Color(this.color).alpha(0.2).toString();
95
+ },
96
+
97
+ methods: {
98
+ handleClick(item){
99
+ if(this.isPreview) {
100
+ console.warn(item.path);
101
+ return;
102
+ }
103
+ this.close = true;
104
+ this.$xdUniHelper.navigateTo({
105
+ url: item.path
106
+ },false);
107
+ },
108
+ }
109
+ }
110
+ </script>
111
+
112
+ <style scoped lang="less">
113
+ .xd-fast-nave {
114
+ position: fixed;
115
+ right:0;
116
+
117
+ &__body {
118
+ display: flex;
119
+ justify-content: flex-end;
120
+ align-items: center;
121
+ height: unit(100,rpx);
122
+
123
+ &-mask{
124
+ position: fixed;
125
+ z-index: 48;
126
+ left: 0;
127
+ right: 0;
128
+ top: 0;
129
+ bottom: 0;
130
+ }
131
+
132
+ &-list {
133
+ position: relative;
134
+ z-index: 50;
135
+ display: flex;
136
+ justify-content: flex-end;
137
+ align-items: center;
138
+ background: #fff;
139
+ border-radius: unit(15, rpx) 0 0 unit(15, rpx);
140
+ box-shadow: 0 0 unit(10,rpx) rgba(0,0,0,.1);
141
+
142
+ &-item {
143
+ text-align: center;
144
+ padding: 10rpx unit(20,rpx);
145
+ height: unit(80,rpx);
146
+ position: relative;
147
+ display: flex;
148
+ justify-content: center;
149
+ align-items: center;
150
+ flex-flow: wrap;
151
+
152
+
153
+ & > view {
154
+ flex-shrink: 0;
155
+ width: 100%;
156
+ font-size: unit(26, rpx);
157
+ }
158
+
159
+ &> view:last-child {
160
+ width: 1px;
161
+ left: 0;
162
+ top: unit(10,rpx);
163
+ bottom: unit(10, rpx);
164
+ position: absolute;
165
+ }
166
+ }
167
+ }
168
+
169
+ &-close,&-open {
170
+ background: rgba(0,0,0,.5);
171
+ border-radius: unit(15,rpx) 0 0 unit(15, rpx);
172
+ display: flex;
173
+ justify-content: center;
174
+ text-align: center;
175
+ align-items: center;
176
+ height: unit(90, rpx);
177
+ padding: 0 unit(15,rpx);
178
+ box-sizing: border-box;
179
+ box-shadow: 0 0 unit(20, rpx) rgba(0, 0, 0, .1);
180
+
181
+ & > view:last-child {
182
+ font-size: unit(24,rpx);
183
+ width: unit(50,rpx);
184
+ color: #fff;
185
+ margin-left: unit(10,rpx);
186
+ }
187
+ }
188
+ }
189
+ }
190
+ </style>
@@ -20,7 +20,9 @@
20
20
  <!-- #endif -->
21
21
  <view class="jfb-base-order-detail__body" v-if="info && info !== null">
22
22
  <view>
23
- <view class="jfb-base-order-detail__body-time">
23
+ <view class="jfb-base-order-detail__body-time" :style="{
24
+ top: (layoutInfo.top-2) + 'rpx',
25
+ }">
24
26
  <xd-font-icon
25
27
  size="48"
26
28
  v-if="info.status.status_type === 'wait'"
@@ -54,6 +56,7 @@
54
56
  {{ info.status.status_name }}
55
57
  </view>
56
58
  </view>
59
+ <view style="height: 90rpx;"></view>
57
60
  </view>
58
61
  <view :style="{ padding: outMargin }">
59
62
  <view v-if="info.film_show && info.film_show !== null">
@@ -1289,6 +1292,11 @@ export default {
1289
1292
  font-weight: 500;
1290
1293
  color: #333333;
1291
1294
  font-size: unit(32, rpx);
1295
+ position: fixed;
1296
+ left: 0;
1297
+ width: 100%;
1298
+ background: #FFFFFF;
1299
+ z-index: 999;
1292
1300
  }
1293
1301
 
1294
1302
  &-status {