jufubao-base 1.0.73 → 1.0.75-beta1

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.73",
3
+ "version": "1.0.75-beta1",
4
4
  "private": false,
5
5
  "description": "聚福宝业务组件基础插件包",
6
6
  "main": "index.js",
@@ -121,7 +121,7 @@
121
121
  </view>
122
122
  </view>
123
123
  <view class="jfb-base-con-list__body-content-foot"
124
- >可在个人中心-我的票券进行查看</view
124
+ >可在我的-我的票券进行查看</view
125
125
  >
126
126
  </view>
127
127
  </view>
@@ -139,7 +139,7 @@
139
139
  title="活动规则说明"
140
140
  :show.sync="showRule"
141
141
  >
142
- <xd-content-xss :html="notice"></xd-content-xss>
142
+ <xd-content-xss style="text-align:left" :html="notice"></xd-content-xss>
143
143
  </xd-dailog>
144
144
  </view>
145
145
  </view>
@@ -12,6 +12,24 @@ 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
+ },
15
33
  {
16
34
  label: '快速链接配置:', //label
17
35
  ele: 'xd-footer-setting', //package 名称
@@ -63,12 +81,12 @@ export default {
63
81
  },
64
82
  ],
65
83
  },
66
- {
84
+ data['is_layout'] ==='noraml' && {
67
85
  ele: 'title',
68
86
  label: '样式设置',
69
87
  size: 'small', //default/mini/small
70
88
  },
71
- {
89
+ data['is_layout'] ==='noraml' && {
72
90
  label: '文字大小:',
73
91
  ele: 'xd-site-select-list',
74
92
  valueKey: 'fontSize',
@@ -88,7 +106,7 @@ export default {
88
106
  });
89
107
  },
90
108
  },
91
- {
109
+ data['is_layout'] ==='noraml' && {
92
110
  label: '背景颜色:',
93
111
  ele: 'xd-color',
94
112
  valueKey: 'backgroundColor',
@@ -96,7 +114,7 @@ export default {
96
114
  placeholder: '请选择背景颜色',
97
115
  classNmae: 'input80',
98
116
  },
99
- {
117
+ data['is_layout'] ==='noraml' && {
100
118
  label: '文字颜色:',
101
119
  ele: 'xd-color',
102
120
  valueKey: 'textColor',
@@ -104,7 +122,7 @@ export default {
104
122
  placeholder: '请选择文字颜色',
105
123
  classNmae: 'input80',
106
124
  },
107
- {
125
+ data['is_layout'] ==='noraml' && {
108
126
  label: 'ICON颜色:',
109
127
  ele: 'xd-color',
110
128
  valueKey: 'iconColor',
@@ -112,7 +130,7 @@ export default {
112
130
  placeholder: '请选择ICON颜色',
113
131
  classNmae: 'input80',
114
132
  },
115
- {
133
+ data['is_layout'] ==='noraml' && {
116
134
  label: '间距:',
117
135
  ele: 'el-input',
118
136
  type: 'number',
@@ -121,7 +139,7 @@ export default {
121
139
  placeholder: '请输入间距',
122
140
  className: 'input80',
123
141
  },
124
- {
142
+ data['is_layout'] ==='noraml' && {
125
143
  label: '内容边距设置:',
126
144
  ele: 'xd-margin-padding',
127
145
  valueKey: 'margin',
@@ -134,12 +152,12 @@ export default {
134
152
  inline: false,
135
153
  notice: '内容边距设置,<span style="color: red">单位:像素</span>。默认值:0像素',
136
154
  },
137
- {
155
+ data['is_layout'] ==='noraml' && {
138
156
  ele: 'title',
139
157
  label: '边框设置',
140
158
  size: 'small', //default/mini/small
141
159
  },
142
- {
160
+ data['is_layout'] ==='noraml' && {
143
161
  label: '是否有边框:',
144
162
  ele: 'xd-radio',
145
163
  valueKey: 'is_border',
@@ -152,7 +170,7 @@ export default {
152
170
  {label: '否', value: 'N'},
153
171
  ]
154
172
  },
155
- data['is_border'] === 'Y' && {
173
+ data['is_layout'] ==='noraml' && data['is_border'] === 'Y' && {
156
174
  label: '边框颜色:',
157
175
  ele: 'xd-color',
158
176
  valueKey: 'is_border_c',
@@ -160,7 +178,7 @@ export default {
160
178
  placeholder: '请选择边框颜色',
161
179
  classNmae: 'input80',
162
180
  },
163
- data['is_border'] === 'Y' && {
181
+ data['is_layout'] ==='noraml' && data['is_border'] === 'Y' && {
164
182
  label: '边框大小:',
165
183
  ele: 'el-input',
166
184
  type: 'number',
@@ -169,7 +187,7 @@ export default {
169
187
  placeholder: '请输入边框颜色',
170
188
  className: 'input80',
171
189
  },
172
- {
190
+ data['is_layout'] ==='noraml' && {
173
191
  label: '内容圆角设置:',
174
192
  ele: 'xd-site-select-list',
175
193
  valueKey: 'radius',
@@ -14,68 +14,85 @@
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 :list="listNave" :color="mainColor" :is-preview="isPreview"></xd-fast-nav>
52
+ </template>
42
53
  </view>
43
54
  </view>
44
55
  </template>
45
56
 
46
57
  <script>
47
58
  import XdFontIcon from "@/components/XdFontIcon/XdFontIcon";
48
- import { jfbRootExec } from "@/utils/xd.event";
49
59
  import JfbBaseFastLinkMixin from "./JfbBaseFastLinkMixin";
50
60
  import componentsMixins from "@/mixins/componentsMixins";
51
61
  import extsMixins from "@/mixins/extsMixins"
52
62
  import { getContainerPropsValue } from "@/utils/xd.base";
63
+ import XdFastNav from "./XdFastNav.vue";
64
+ import Color from "color";
53
65
  const color = require('color');
54
-
55
-
66
+
67
+
56
68
  export default {
57
69
  name: "JfbBaseFastLink",
58
70
  components: {
59
- XdFontIcon
71
+ XdFontIcon,
72
+ XdFastNav
60
73
  },
61
74
  mixins: [componentsMixins,extsMixins,JfbBaseFastLinkMixin],
62
75
  data() {
63
76
  return {
77
+ listNave:[],
64
78
  list: [],
65
-
79
+ backgroundColor: '',
80
+ isPreview:false,
81
+
66
82
  //基础信息
67
83
  background: '#fff',
68
84
  color: '#000',
69
85
  fontSize: 26,
70
86
  radius: 10,
71
87
  iconColor: '#999',
72
-
73
-
88
+ is_layout: 'noraml',
89
+
90
+
74
91
  //边框
75
92
  is_border: 'Y',
76
93
  is_border_w: 0,
77
94
  is_border_c: '',
78
-
95
+
79
96
  //其他
80
97
  margin: {
81
98
  top: 0,
@@ -84,7 +101,6 @@
84
101
  bottom: 0
85
102
  },
86
103
  padding: 20, //间距
87
-
88
104
  }
89
105
  },
90
106
  watch: {
@@ -92,7 +108,7 @@
92
108
  this.init(value)
93
109
  }
94
110
  },
95
-
111
+
96
112
  computed: {
97
113
  outMargin(){
98
114
  let margin = `${this.margin.top !== null ? this.margin.top : 20}rpx`;
@@ -105,7 +121,7 @@
105
121
  if (this.is_border === 'Y') return `${this.is_border_w}rpx solid ${this.is_border_c}`;
106
122
  else return '0';
107
123
  },
108
-
124
+
109
125
  subNameSize(){
110
126
  return {
111
127
  fontSize: '32rpx',
@@ -113,13 +129,15 @@
113
129
  }
114
130
  }
115
131
  },
116
-
132
+
117
133
  created() {
134
+ this.isPreview = this.$configProject['isPreview'];
135
+ this.backgroundColor = Color(this.warningColor).alpha(0.2).toString();
118
136
  this.init(this.container);
119
137
  },
120
138
  methods: {
121
139
  toCall(num){
122
- reg = /^[0-9\-]{8,20}$/;
140
+ const reg = /^[0-9\-]{8,20}$/;
123
141
  if(reg.test(num)) {
124
142
  num = num.replace(/[-]/g,'');
125
143
  uni.makePhoneCall(num)
@@ -143,11 +161,12 @@
143
161
  this.radius = getContainerPropsValue(container, 'content.radius', 10);
144
162
  this.iconColor = getContainerPropsValue(container, 'content.iconColor', '#999');
145
163
  this.padding = getContainerPropsValue(container, 'content.padding', 20);
146
-
164
+ this.is_layout = getContainerPropsValue(container, 'content.is_layout', 'fixed');
165
+
147
166
  this.is_border = getContainerPropsValue(container, 'content.is_border', 'N');
148
167
  this.is_border_c = getContainerPropsValue(container, 'content.is_border_c', '#fff');
149
168
  this.is_border_w = getContainerPropsValue(container, 'content.is_border_w', 2);
150
-
169
+
151
170
  this.list = getContainerPropsValue(container, 'content.quick_link_list', []).map(item=>{
152
171
  return {
153
172
  ...item,
@@ -156,8 +175,26 @@
156
175
  }
157
176
  });
158
177
  this.margin = getContainerPropsValue(container, 'content.margin', {top: 0, left: 0, right: 0, bottom: 0});
178
+ this.listNave = this.list.map(item=>{
179
+ const {dir, path,fixed_business_code} = item;
180
+ let bus = fixed_business_code? Base64.encodeURI(JSON.stringify({business_code: fixed_business_code})):'';
181
+ let jumpUrl = item.path;
182
+ //#ifdef H5
183
+ jumpUrl = `//${window.location.host}/${dir}${path}`;
184
+ //#endif
185
+
186
+ if(item['fixed_business_code'] === '') {
187
+ item['path'] = `${jumpUrl}?x-common=${bus}}`
188
+ }
189
+ else{
190
+ item['redirect_data']['path'] = `${jumpUrl}?x-common=${bus}}`
191
+ }
192
+
193
+ return { name: '首页', path: '/pages/company/zmyx11/index', icon: 'cakeiconfont cakeshouye', size: 24 }
194
+ })
195
+
159
196
  },
160
-
197
+
161
198
  onJfbUpdate(...data) {
162
199
  console.log('event.onJfbUpdate', data)
163
200
  },
@@ -175,11 +212,21 @@
175
212
  .jfb-base-fast-link {
176
213
  display: flex;
177
214
  min-height: unit(100, rpx);
215
+
178
216
  &__body{
179
217
  flex: 1;
218
+
219
+ &-pop {
220
+ min-height: 58rpx;
221
+ text-align: center;
222
+ line-height: 58rpx;
223
+ color: #666;
224
+ font-size: unit(24, rpx);
225
+ padding:unit(20, rpx);
226
+ }
180
227
  }
181
228
  }
182
-
229
+
183
230
  .fast-link {
184
231
  &__item {
185
232
  cursor: pointer;
@@ -189,11 +236,11 @@
189
236
  align-items: center;
190
237
  box-sizing: border-box;
191
238
  line-height: unit(50, rpx);
192
-
239
+
193
240
  &:last-child {
194
241
  margin-bottom: 0!important;
195
242
  }
196
-
243
+
197
244
  &-icon, &-go {
198
245
  width: unit(50, rpx);
199
246
  height: unit(50, rpx);
@@ -202,7 +249,7 @@
202
249
  align-items: center;
203
250
  flex-shrink: 0;
204
251
  }
205
-
252
+
206
253
  &-text {
207
254
  flex: 1;
208
255
  padding: 0 unit(20, rpx);
@@ -212,5 +259,5 @@
212
259
  }
213
260
  }
214
261
  }
215
-
262
+
216
263
  </style>
@@ -0,0 +1,171 @@
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>快速导航</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
+ },
69
+ data(){
70
+ return {
71
+ uiTop: 100,
72
+ uizIndex: 100,
73
+ close: true,
74
+ lineColor: '#fff'
75
+ }
76
+ },
77
+
78
+ created() {
79
+ this.lineColor = Color(this.color).alpha(0.2).toString();
80
+ },
81
+
82
+ methods: {
83
+ handleClick(item){
84
+ if(this.isPreview) return;
85
+ this.close = true;
86
+ this.$xdUniHelper.navigateTo({
87
+ url: item.path
88
+ },false);
89
+ },
90
+ }
91
+ }
92
+ </script>
93
+
94
+ <style scoped lang="less">
95
+ .xd-fast-nave {
96
+ position: fixed;
97
+ right:0;
98
+
99
+ &__body {
100
+ display: flex;
101
+ justify-content: flex-end;
102
+ align-items: center;
103
+ height: unit(100,rpx);
104
+
105
+ &-mask{
106
+ position: fixed;
107
+ z-index: 48;
108
+ left: 0;
109
+ right: 0;
110
+ top: 0;
111
+ bottom: 0;
112
+ }
113
+
114
+ &-list {
115
+ position: relative;
116
+ z-index: 50;
117
+ display: flex;
118
+ justify-content: flex-end;
119
+ align-items: center;
120
+ background: #fff;
121
+ border-radius: unit(15, rpx) 0 0 unit(15, rpx);
122
+ box-shadow: 0 0 unit(10,rpx) rgba(0,0,0,.1);
123
+
124
+ &-item {
125
+ text-align: center;
126
+ padding: 10rpx unit(20,rpx);
127
+ height: unit(80,rpx);
128
+ position: relative;
129
+ display: flex;
130
+ justify-content: center;
131
+ align-items: center;
132
+ flex-flow: wrap;
133
+
134
+
135
+ & > view {
136
+ flex-shrink: 0;
137
+ width: 100%;
138
+ font-size: unit(26, rpx);
139
+ }
140
+
141
+ &> view:last-child {
142
+ width: 1px;
143
+ left: 0;
144
+ top: unit(10,rpx);
145
+ bottom: unit(10, rpx);
146
+ position: absolute;
147
+ }
148
+ }
149
+ }
150
+
151
+ &-close,&-open {
152
+ background: rgba(0,0,0,.5);
153
+ border-radius: unit(15,rpx) 0 0 unit(15, rpx);
154
+ display: flex;
155
+ justify-content: flex-end;
156
+ align-items: center;
157
+ height: unit(90, rpx);
158
+ padding: 0 unit(15,rpx);
159
+ box-sizing: border-box;
160
+ box-shadow: 0 0 unit(20, rpx) rgba(0, 0, 0, .1);
161
+
162
+ & > view:last-child {
163
+ font-size: unit(24,rpx);
164
+ width: unit(50,rpx);
165
+ color: #fff;
166
+ margin-left: unit(10,rpx);
167
+ }
168
+ }
169
+ }
170
+ }
171
+ </style>