jufubao-base 1.0.168 → 1.0.169-beta10

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 (41) hide show
  1. package/package.json +1 -1
  2. package/src/components/JfbBaseLogin/Attr.js +1147 -510
  3. package/src/components/JfbBaseLogin/JfbBaseLogin.vue +364 -63
  4. package/src/components/JfbBaseMapSearch/MapSearchMp.vue +1 -1
  5. package/src/components/JfbBaseOrderDetail/Api.js +12 -7
  6. package/src/components/JfbBaseOrderDetail/Attr.js +28 -14
  7. package/src/components/JfbBaseOrderDetail/JfbBaseOrderDetail.vue +68 -18
  8. package/src/components/JfbBaseOrderDetail/Mock.js +3 -1
  9. package/src/components/JfbBaseTfkCardBind/Api.js +49 -30
  10. package/src/components/JfbBaseTfkCardBind/Attr.js +635 -38
  11. package/src/components/JfbBaseTfkCardBind/JfbBaseTfkCardBind.vue +617 -22
  12. package/src/components/JfbBaseTfkCardBind/Mock.js +19 -9
  13. package/src/components/JfbBaseTfkCardDetail/Api.js +19 -32
  14. package/src/components/JfbBaseTfkCardDetail/Attr.js +692 -33
  15. package/src/components/JfbBaseTfkCardDetail/JfbBaseTfkCardDetail.vue +630 -23
  16. package/src/components/JfbBaseTfkCardDetail/Mock.js +151 -11
  17. package/src/components/JfbBaseTfkCardLogin/Api.js +19 -34
  18. package/src/components/JfbBaseTfkCardLogin/Attr.js +898 -33
  19. package/src/components/JfbBaseTfkCardLogin/JfbBaseTfkCardLogin.vue +741 -17
  20. package/src/components/JfbBaseTfkCardLogin/Mock.js +677 -11
  21. package/src/components/JfbBaseTfkCardLogin/XdCouponItem.vue +271 -0
  22. package/src/components/JfbBaseTfkSearch/AllList.vue +232 -0
  23. package/src/components/JfbBaseTfkSearch/Api.js +11 -42
  24. package/src/components/JfbBaseTfkSearch/Attr.js +225 -33
  25. package/src/components/JfbBaseTfkSearch/ContentCinema.vue +157 -0
  26. package/src/components/JfbBaseTfkSearch/ContentFilm.vue +179 -0
  27. package/src/components/JfbBaseTfkSearch/ContentProduct.vue +308 -0
  28. package/src/components/JfbBaseTfkSearch/ContentShop.vue +184 -0
  29. package/src/components/JfbBaseTfkSearch/CusAttr.js +213 -0
  30. package/src/components/JfbBaseTfkSearch/CustomList.vue +402 -0
  31. package/src/components/JfbBaseTfkSearch/JfbBaseTfkSearch.vue +230 -26
  32. package/src/components/JfbBaseTfkSearch/Mock.js +90 -11
  33. package/src/components/JfbBaseTfkSearch/SkeletonCinema.vue +45 -0
  34. package/src/components/JfbBaseTfkSearch/SkeletonFilm.vue +109 -0
  35. package/src/components/JfbBaseTfkSearch/SkeletonProduct.vue +246 -0
  36. package/src/components/JfbBaseTfkSearch/SkeletonShop.vue +81 -0
  37. package/src/components/JfbBaseTfkSearch/handleKeyword.js +24 -0
  38. package/src/components/JfbBaseTfkSearch/listMixins.js +153 -0
  39. package/src/components/JfbBaseTfkSearch/search.js +293 -0
  40. package/src/mixins/colorCardMixins.js +71 -9
  41. package/src/mixins/componentsMixins.js +346 -23
@@ -1,4 +1,5 @@
1
1
  'use strict';
2
+ import CusAttr from "./CusAttr";
2
3
 
3
4
  /**
4
5
  * @description 当表单组件中有联动操作时候,使用方法进行返回
@@ -8,50 +9,241 @@ export default {
8
9
  content: (data) => {
9
10
  return [
10
11
  {
11
- label: '背景颜色:',
12
- ele: 'xd-color',
13
- valueKey: 'bgcolor',
14
- value: data.bgcolor || '',
15
- placeholder: '请输入占位框背景颜色',
16
- classNmae: 'input80',
12
+ label: '是否支持聚好兑:',
13
+ ele: 'xd-radio',
14
+ valueKey: 'isShowExchange',
15
+ value: data['isShowExchange'] || "N",
16
+ groupKey:'content',
17
17
  rules: [
18
- {
19
- required: true,
20
- message: '请输入占位框背景颜色',
21
- trigger: 'blur'
22
- },
18
+ {required: true, message: '请选择', trigger: ['blur', 'change']}
19
+ ],
20
+ list: [
21
+ {"label": "支持", "value": "Y"},
22
+ {"label": "不支持", "value": "N"},
23
23
  ]
24
24
  },
25
25
  {
26
- label: '选中路径:',
27
- ele: 'xd-select-pages-path',
28
- valueKey: 'select-pages-path',
29
- value: data['select-pages-path'] || null,
26
+ label: '外边间距:',
27
+ ele: 'el-input',
28
+ type: 'number',
29
+ groupKey:'style',
30
+ valueKey: 'outSpacing',
31
+ value: data['outSpacing'] || '',
32
+ notice: '外边间距设置,单位:像素,默认值:<span style="color:red">20</span> px',
33
+ inline: false,
34
+ className: 'input60',
35
+ },
36
+ //todo
37
+ {
38
+ label: '菜单配置',
39
+ ele: "title",
40
+ groupKey:'style',
41
+ size: "small",
42
+ },
43
+ {
44
+ label: "菜单外边距",
45
+ ele: "xd-margin-padding",
46
+ valueKey: 'menuMargin',
47
+ value: data['menuMargin'] || {
48
+ top: 0,
49
+ right: 0,
50
+ bottom: 0,
51
+ left: 0,
52
+ },
53
+ groupKey:'style',
30
54
  setting: {
31
- router: XdBus.getParentApi('getPagesTree')
55
+ type: 'padding',
32
56
  },
57
+ placeholder: '请设置边距',
58
+ inline: false,
59
+ notice: '设置内边距,<span style="color: red">单位:像素</span>。',
60
+ },
61
+ {
62
+ label: "菜单内边距",
63
+ ele: "xd-margin-padding",
64
+ valueKey: 'menuPadding',
65
+ value: data['menuPadding'] || {
66
+ top: 0,
67
+ right: 0,
68
+ bottom: 0,
69
+ left: 0,
70
+ },
71
+ groupKey:'style',
72
+ setting: {
73
+ type: 'padding',
74
+ },
75
+ placeholder: '请设置内边距',
76
+ inline: false,
77
+ notice: '设置内边距,<span style="color: red">单位:像素</span>。',
78
+ },
79
+ {
80
+ label: "菜单背景色",
81
+ ele: "xd-color",
82
+ valueKey: 'menuBgColor',
83
+ value: data['menuBgColor'] || '#FFFFFF',
84
+ groupKey:'style',
85
+ placeholder: '请选择菜单背景色',
33
86
  },
34
- data.bgcolor && {
35
- label: '高度:',
87
+ {
88
+ label: "菜单字体设置",
89
+ ele: "xd-text-and-bgc",
90
+ groupKey:'style',
91
+ valueKey: 'menuTabColor',
92
+ value: data['menuTabColor'] || null,
93
+ setting: {
94
+ fontSize: true, //字体大小选择
95
+ color: true, //文字颜色选项
96
+ bgColor: true, //背景选项
97
+ weight: true, //文字粗细
98
+ },
99
+ handleCustom({action, data}) {
100
+ XdBus.getParentApi('getOptionsSettingList')({setting_id: 'edtix_style_font_size'})
101
+ .then(res => {
102
+ data.cb(res.list)
103
+ })
104
+ .catch(error => {
105
+ console.error(error);
106
+ data.cb([])
107
+ });
108
+ },
109
+ },
110
+ {
111
+ label: "菜单间距设置:",
112
+ groupKey:'style',
36
113
  ele: 'el-input',
37
- type: 'number',
38
- valueKey: 'height',
39
- value: data.height || 100,
40
- placeholder: '请输入占位框高度,单位像素,默认:10px',
41
- className: 'input80',
42
- rules: [
43
- {
44
- required: true,
45
- message: '请输入占位框高度',
46
- trigger: 'blur'
47
- },
48
- ]
114
+ valueKey: 'menuItemMargin',
115
+ value: data.menuItemMargin || 40,
116
+ type: "number",
117
+ className: "input40",
118
+ placeholder: '请输入菜单间距',
119
+ inline: false,
120
+ notice: '设置菜单间距,<span style="color: red">单位:像素</span>。默认值:<span style="color: red">40</span>像素',
121
+ },
122
+ {
123
+ label: "菜单底部横线粗细:",
124
+ ele: "el-input",
125
+ valueKey: "menuBorderWidth",
126
+ value: data.menuBorderWidth || 1,
127
+ groupKey: "style",
128
+ type: "number",
129
+ },
130
+ {
131
+ label: '菜单单项内边距设置:',
132
+ groupKey:'style',
133
+ ele: 'xd-margin-padding',
134
+ valueKey: 'menuItemPadding',
135
+ value: data.menuItemPadding || null,
136
+ setting: {
137
+ type: 'padding',
138
+ },
139
+ placeholder: '请设置边距',
140
+ inline: false,
141
+ notice: '设置内边距,<span style="color: red">单位:像素</span>。默认值:<span style="color: red">20</span>像素',
142
+ },
143
+ {
144
+ label: "全部-列表样式配置",
145
+ ele: "title",
146
+ groupKey:'style',
147
+ size: "small",
148
+ },
149
+ {
150
+ label: "列表背景色",
151
+ ele: "xd-color",
152
+ valueKey: 'allListBgColor',
153
+ value: data['allListBgColor'] || '#FFFFFF',
154
+ groupKey:'style',
155
+ placeholder: '请选择列表背景色',
49
156
  },
50
157
  {
51
- label: '', //label
52
- ele: 'slot', //package 名称
53
- slot: 'is_reference',
158
+ label: "业务板块内边距",
159
+ ele: "xd-margin-padding",
160
+ valueKey: "allModulePadding",
161
+ value: data['allModulePadding'] || null,
162
+ groupKey:'style',
163
+ setting: {
164
+ type: 'padding',
165
+ },
166
+ placeholder: '请设置内边距',
167
+ inline: false,
168
+ notice: '设置内边距,<span style="color: red">单位:像素</span>。',
169
+ },
170
+ {
171
+ label: "业务板块标题样式",
172
+ ele: "xd-radio",
173
+ valueKey: "allModuleTitleStyle",
174
+ value: data['allModuleTitleStyle'] || 'underline',
175
+ groupKey:'style',
176
+ placeholder: '请选择标题展示样式',
177
+ list: [
178
+ {label: "底线", value: 'underline'},
179
+ {label: "背景", value: 'background'},
180
+ ],
54
181
  },
182
+ data.allModuleTitleStyle === 'background' &&{
183
+ label: "业务板块标题背景色",
184
+ ele: "xd-color",
185
+ valueKey: 'allModuleTitleBgColor',
186
+ value: data['allModuleTitleBgColor'] || '#FFFFFF',
187
+ groupKey:'style',
188
+ placeholder: '请选择业务板块背景色',
189
+ },
190
+ {
191
+ label: "业务板块标题内边距",
192
+ ele: "xd-margin-padding",
193
+ valueKey: "allModuleTitlePadding",
194
+ value: data['allModuleTitlePadding'] || null,
195
+ groupKey:'style',
196
+ setting: {
197
+ type: 'padding',
198
+ },
199
+ placeholder: '请设置内边距',
200
+ inline: false,
201
+ notice: '设置内边距,<span style="color: red">单位:像素</span>。',
202
+ },
203
+ {
204
+ label: "业务板块查看更多展示样式",
205
+ ele: "xd-radio",
206
+ valueKey: "allModuleMoreStyle",
207
+ value: data['allModuleMoreStyle'] || 'text',
208
+ groupKey:'style',
209
+ placeholder: '请选择查看更多展示样式',
210
+ list: [
211
+ {label: "文案", value: 'text'},
212
+ {label: "按钮", value: 'button'},
213
+ ],
214
+ },
215
+ {
216
+ label: "业务板块间距设置",
217
+ ele: "el-input",
218
+ valueKey: "allModuleMargin",
219
+ value: data.allModuleMargin || 20,
220
+ groupKey: "style",
221
+ type: "number",
222
+ },
223
+
224
+
225
+ {
226
+ label: "搜索范围",
227
+ ele: "xd-search-setting-options",
228
+ valueKey: 'searchScope',
229
+ value: data['searchScope'] || [],
230
+ groupKey:'content',
231
+ placeholder: '请选择内容圆角设置',
232
+ multiple: false,
233
+ className: 'input80',
234
+ handleCustom({ action, data }) {
235
+ XdBus.getParentApi('getSearchSettingOptions')()
236
+ .then(res => {
237
+ data.cb(res.list)
238
+ })
239
+ .catch(error => {
240
+ console.error(error);
241
+ });
242
+ },
243
+ },
244
+
245
+ //列表相关属性
246
+ ...CusAttr(data),
55
247
  ].filter(i=>i)
56
248
  },
57
249
  advanced: [],
@@ -0,0 +1,157 @@
1
+ <template>
2
+ <view class="content" @click="handleCinemaDetail">
3
+ <view class="title" v-html="cusName"></view>
4
+ <view class="address">{{item['address']}}</view>
5
+ <view class="bottom">
6
+ <view class="distance">
7
+ <template v-if="item['distance']">
8
+ <xd-font-icon size="26" icon="icondizhi" :color="color.SEAT"></xd-font-icon>
9
+ <text :style="{color: color.SEAT}">{{item['distance']}}</text>
10
+ </template>
11
+ </view>
12
+ <view class="btn">
13
+ <!--不展示核销类型【SELL】-->
14
+ <view
15
+ v-for="(name,index) in item['cinema_type_name']"
16
+ v-if="item['cinema_type'][index] !== 'SELL'"
17
+ :key="index"
18
+ @click.stop="handleBtn(item['cinema_type'][index])"
19
+ :style="{
20
+ backgroundColor:color[item['cinema_type'][index]],
21
+ color:'#fff'
22
+ }">{{name}}</view>
23
+ </view>
24
+ </view>
25
+ </view>
26
+ </template>
27
+
28
+ <script>
29
+ import XdButton from "@/components/XdButton/XdButton.vue";
30
+ import XdFontIcon from "@/components/XdFontIcon/XdFontIcon.vue";
31
+ import handleKeyword from "./handleKeyword";
32
+
33
+ export default {
34
+ name:'ContentCinema',
35
+ components:{
36
+ XdButton,
37
+ XdFontIcon
38
+ },
39
+ props:{
40
+ keyword:{
41
+ type:String,
42
+ default: '',
43
+ },
44
+ item:Object,
45
+ color: {
46
+ type: Object,
47
+ default: {}
48
+ },
49
+
50
+ },
51
+ computed:{
52
+ cusName(){
53
+ return handleKeyword(this, this.item['cinema_name'], this.keyword)
54
+ },
55
+ },
56
+ data(){
57
+ return {
58
+
59
+ }
60
+ },
61
+ created() {
62
+
63
+ },
64
+ methods:{
65
+ handleCinemaDetail(){
66
+ //优先在线选座
67
+ if(this.item['cinema_type'].includes('SEAT')) {
68
+ this.handleSchedule();
69
+ return
70
+ }
71
+ if(this.item['cinema_type'].includes('CODE')) {
72
+ this.handleCodeDetail();
73
+ return
74
+ }
75
+ if(this.item['cinema_type'].includes('SELL')) {
76
+ this.handleCashierDetail();
77
+ return
78
+ }
79
+ console.error(`${JSON.stringify(this.item['cinema_type'])}`)
80
+ },
81
+
82
+ handleBtn(code){
83
+ if(code === 'SEAT') this.handleSchedule();
84
+ else if(code === 'CODE') this.handleCodeDetail();
85
+ else if(code === 'SELL') this.handleCashierDetail();
86
+ else console.error(`${JSON.stringify(this.item['cinema_type'])}`)
87
+ },
88
+
89
+ //电子码
90
+ handleCodeDetail(){
91
+ console.warn(`handleCodeDetail`)
92
+ this.$emit('on-code-detail', this.item);
93
+ },
94
+ //核销
95
+ handleCashierDetail(){
96
+ console.warn(`handleCashierDetail`)
97
+ this.$emit('on-cashier-detail', this.item);
98
+ },
99
+
100
+ //选座排期
101
+ handleSchedule(){
102
+ console.warn(`handleSchedule`)
103
+ this.$emit('on-schedule', this.item);
104
+ },
105
+ }
106
+ }
107
+ </script>
108
+
109
+ <style scoped lang="less">
110
+ .content {
111
+ .title {
112
+ font-size: 30rpx;
113
+ line-height: 40rpx;
114
+ margin-bottom: 20rpx;
115
+ color: #333;
116
+ font-weight: 500;
117
+ }
118
+ .address {
119
+ font-size: 24rpx;
120
+ line-height: 30rpx;
121
+ color: #999;
122
+ margin-bottom: 15rpx;
123
+ }
124
+
125
+ .bottom {
126
+ display: flex;
127
+ justify-content: space-between;
128
+ align-items: center;
129
+ margin-top: 30rpx;
130
+
131
+ & > .distance {
132
+ display: flex;
133
+ justify-content: flex-start;
134
+ align-items: center;
135
+
136
+ & > text {
137
+ margin-left: 10rpx;
138
+ font-size: 24rpx;
139
+ }
140
+ }
141
+
142
+ & > .btn {
143
+ display: flex;
144
+ justify-content: flex-end;
145
+ align-items: center;
146
+
147
+ & > view {
148
+ margin-left: 10rpx;
149
+ padding: 0 30rpx;
150
+ line-height: 60rpx;
151
+ border-radius: 30rpx;
152
+ font-size: 26rpx;
153
+ }
154
+ }
155
+ }
156
+ }
157
+ </style>
@@ -0,0 +1,179 @@
1
+ <template>
2
+ <view class="content" @click="handleDetail(item)">
3
+ <view
4
+ class="image"
5
+ :style="{marginRight: outSpacing + 'rpx',borderRadius:borderRadius+'rpx'}"
6
+ >
7
+ <image :src="imageUrl" :alt="item['show_name']"></image>
8
+ </view>
9
+ <view class="middle">
10
+ <view class="name" v-html="name"></view>
11
+ <view class="other">类型:{{item['type']}}</view>
12
+ <view class="other">导演:{{item['director']}}</view>
13
+ <view class="other">主演:{{item['leading_role']}}</view>
14
+ </view>
15
+ <view class="right">
16
+ <view class="score">
17
+ <template v-if="item['remark']">
18
+ <text>评分:</text><text :style="{color:color}">{{item['remark']}}</text>
19
+ </template>
20
+ </view>
21
+ <view class="btn">
22
+ <template v-if="type === 'hot'">
23
+ <xd-button
24
+ v-if="item['show_button'] === '1'"
25
+ type="primary"
26
+ style="display:block;"
27
+ size="small"
28
+ @click.stop="handleBuy(item)">购票</xd-button>
29
+ <xd-button
30
+ v-else-if="item['show_button'] === '2'"
31
+ type="subPrimary"
32
+ style="display:block;"
33
+ size="small"
34
+ @click="handleBuy(item)">预售</xd-button>
35
+ </template>
36
+ <template v-if="type === 'rightnow'">
37
+ <xd-button
38
+ v-if="item['show_button'] === '3'"
39
+ type="success"
40
+ style="display:block;"
41
+ size="small"
42
+ @click.stop="handleDetail(item)"
43
+ >想看</xd-button>
44
+ <xd-button
45
+ v-else-if="item['show_button'] === '2'"
46
+ type="subPrimary"
47
+ style="display:block;"
48
+ size="small"
49
+ @click.stop="handleBuy(item)">预售</xd-button>
50
+ </template>
51
+ </view>
52
+ </view>
53
+ </view>
54
+ </template>
55
+
56
+ <script>
57
+ import XdButton from "@/components/XdButton/XdButton.vue";
58
+ import getServiceUrl from "@/common/getServiceUrl";
59
+ import handleKeyword from "./handleKeyword";
60
+
61
+ export default {
62
+ name:'ContentItem',
63
+ components:{
64
+ XdButton
65
+ },
66
+ props:{
67
+ keyword:{
68
+ type:String,
69
+ default:''
70
+ },
71
+ item:Object,
72
+ outSpacing: {
73
+ type: Number|String,
74
+ default: 20
75
+ },
76
+ color: {
77
+ type: String,
78
+ default: ''
79
+ },
80
+ type:{
81
+ type: String,
82
+ default: 'hot'
83
+ },
84
+ borderRadius:{
85
+ type: String,
86
+ default: '10'
87
+ }
88
+
89
+ },
90
+ computed:{
91
+ imageUrl(){
92
+ return getServiceUrl(this.item['poster'])
93
+ },
94
+ name(){
95
+ return handleKeyword(this, this.item.show_name, this.keyword);
96
+ }
97
+ },
98
+ created() {
99
+
100
+ },
101
+ methods:{
102
+ handleDetail(item){
103
+ console.log('handleDetail.item',item,item.id);
104
+ this.$emit('on-film-detail',item.id);
105
+ },
106
+ handleBuy(item){
107
+ console.log('handleDetail.item',item,item.id);
108
+ this.$emit('on-buy',item.id);
109
+ }
110
+ }
111
+ }
112
+ </script>
113
+
114
+ <style scoped lang="less">
115
+ .content {
116
+ display: flex;
117
+ justify-content: space-between;
118
+ align-items: center;
119
+
120
+ .image {
121
+ width: 160rpx;
122
+ height: 240rpx;
123
+ flex-shrink: 0;
124
+ overflow: hidden;
125
+
126
+ & > image {
127
+ width: 100%;
128
+ height: 100%;
129
+ }
130
+ }
131
+ .middle {
132
+ flex: 1;
133
+ & .name {
134
+ font-size: 30rpx;
135
+ font-weight: 500;
136
+ margin-bottom: 20rpx;
137
+ .uni-max-cut(2, 90);
138
+ line-height: 45rpx;
139
+ }
140
+
141
+ & .other {
142
+ font-size: 25rpx;
143
+ color: #999;
144
+ .uni-max-cut(1,36);
145
+ line-height: 36rpx;
146
+ margin-bottom: 10rpx;
147
+ &:last-child {
148
+ margin-bottom: 0!important;
149
+ }
150
+ }
151
+ }
152
+
153
+ .right {
154
+ flex-shrink: 0;
155
+ display: flex;
156
+ align-content: space-between;
157
+ align-items: flex-end;
158
+ justify-content: flex-end;
159
+ flex-flow: wrap;
160
+ height: 100%;
161
+ box-sizing: border-box;
162
+ width: 160rpx;
163
+
164
+ & .score {
165
+ height: 40rpx;
166
+ width:100%;
167
+ text-align: right;
168
+ & > text:nth-child(1) {
169
+ font-size: 20rpx;
170
+ }
171
+ & > text:nth-child(2) {
172
+ font-size: 28rpx;
173
+ }
174
+
175
+ }
176
+
177
+ }
178
+ }
179
+ </style>