jufubao-base 1.0.169-beta1 → 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 (39) hide show
  1. package/package.json +1 -1
  2. package/src/components/JfbBaseLogin/Attr.js +54 -16
  3. package/src/components/JfbBaseMapSearch/MapSearchMp.vue +1 -1
  4. package/src/components/JfbBaseOrderDetail/Api.js +12 -7
  5. package/src/components/JfbBaseOrderDetail/Attr.js +28 -14
  6. package/src/components/JfbBaseOrderDetail/JfbBaseOrderDetail.vue +68 -18
  7. package/src/components/JfbBaseOrderDetail/Mock.js +3 -1
  8. package/src/components/JfbBaseTfkCardBind/Api.js +49 -30
  9. package/src/components/JfbBaseTfkCardBind/Attr.js +61 -10
  10. package/src/components/JfbBaseTfkCardBind/JfbBaseTfkCardBind.vue +169 -9
  11. package/src/components/JfbBaseTfkCardBind/Mock.js +19 -9
  12. package/src/components/JfbBaseTfkCardDetail/Api.js +26 -0
  13. package/src/components/JfbBaseTfkCardDetail/Attr.js +336 -9
  14. package/src/components/JfbBaseTfkCardDetail/JfbBaseTfkCardDetail.vue +236 -30
  15. package/src/components/JfbBaseTfkCardDetail/Mock.js +2 -2
  16. package/src/components/JfbBaseTfkCardLogin/Attr.js +301 -5
  17. package/src/components/JfbBaseTfkCardLogin/JfbBaseTfkCardLogin.vue +317 -158
  18. package/src/components/JfbBaseTfkCardLogin/Mock.js +2 -46
  19. package/src/components/JfbBaseTfkCardLogin/XdCouponItem.vue +271 -0
  20. package/src/components/JfbBaseTfkSearch/AllList.vue +232 -0
  21. package/src/components/JfbBaseTfkSearch/Api.js +11 -42
  22. package/src/components/JfbBaseTfkSearch/Attr.js +225 -33
  23. package/src/components/JfbBaseTfkSearch/ContentCinema.vue +157 -0
  24. package/src/components/JfbBaseTfkSearch/ContentFilm.vue +179 -0
  25. package/src/components/JfbBaseTfkSearch/ContentProduct.vue +308 -0
  26. package/src/components/JfbBaseTfkSearch/ContentShop.vue +184 -0
  27. package/src/components/JfbBaseTfkSearch/CusAttr.js +213 -0
  28. package/src/components/JfbBaseTfkSearch/CustomList.vue +402 -0
  29. package/src/components/JfbBaseTfkSearch/JfbBaseTfkSearch.vue +230 -26
  30. package/src/components/JfbBaseTfkSearch/Mock.js +90 -11
  31. package/src/components/JfbBaseTfkSearch/SkeletonCinema.vue +45 -0
  32. package/src/components/JfbBaseTfkSearch/SkeletonFilm.vue +109 -0
  33. package/src/components/JfbBaseTfkSearch/SkeletonProduct.vue +246 -0
  34. package/src/components/JfbBaseTfkSearch/SkeletonShop.vue +81 -0
  35. package/src/components/JfbBaseTfkSearch/handleKeyword.js +24 -0
  36. package/src/components/JfbBaseTfkSearch/listMixins.js +153 -0
  37. package/src/components/JfbBaseTfkSearch/search.js +293 -0
  38. package/src/mixins/colorCardMixins.js +71 -9
  39. package/src/mixins/componentsMixins.js +346 -23
@@ -14,72 +14,256 @@
14
14
  </view>
15
15
  <!-- #endif -->
16
16
  <view class="jfb-base-tfk-search__body">
17
- <view>测试插件( {{containerId}} )</view>
17
+ <view class="x-line"></view>
18
+ <view :class="{hidden: keyword}">
19
+ <xd-search-history ref="searchHistory"
20
+ :saveKey="containerId+'_search_history'"
21
+ :saveLength="10"
22
+ @onClick="handleToSearch"></xd-search-history>
23
+ </view>
24
+ <view v-if="keyword">
25
+ <view class="menu_wrap" :style="menuWrapBoxStyle">
26
+ <view class="menu_list" :style="menuBoxStyle">
27
+ <view class="menu_item"
28
+ v-for="(item, i) in showMenuList" :key="item.value"
29
+ @click="handleSwitchMenu(item)"
30
+ >
31
+ <view class="menu_inner"
32
+ :style="[
33
+ menuItemBoxStyle,
34
+ item.value === tabId ? menuItemActiveStyle : menuItemStyle,
35
+ {
36
+ marginRight: i === showMenuList.length - 1 ? '0' : menuItemMargin + 'rpx',
37
+ }
38
+ ]"
39
+ >{{ item.label }}</view>
40
+ </view>
41
+ </view>
42
+ </view>
43
+ <view v-if="!isPreview" style="height: 100rpx;"></view>
44
+
45
+ <view class="tfk-search" :style="{padding: outSpacing + 'rpx'}">
46
+ <all-list v-if="!tabId"
47
+ :keyword="keyword"
48
+ @on-parent-vm="handleParentVm"
49
+ @on-list="handleList"
50
+ @on-switch="handleSwitchMenu"
51
+ ></all-list>
52
+ <custom-list
53
+ v-else
54
+ :tab-id="tabId"
55
+ :keyword="keyword"
56
+ ref="customList"
57
+ @on-parent-vm="handleParentVm"
58
+ @on-list="handleList"
59
+ ></custom-list>
60
+ </view>
61
+ </view>
62
+
18
63
  </view>
19
64
  </view>
20
65
  </template>
21
66
 
22
67
  <script>
68
+ import XdSearchHistory from "@/components/XdSearchHistory/XdSearchHistory";
23
69
  import XdFontIcon from "@/components/XdFontIcon/XdFontIcon";
24
70
  import { jfbRootExec } from "@/utils/xd.event";
25
71
  import JfbBaseTfkSearchMixin from "./JfbBaseTfkSearchMixin";
26
72
  import { getContainerPropsValue } from "@/utils/xd.base";
27
73
  import componentsMixins from "@/mixins/componentsMixins";
28
74
  import extsMixins from "@/mixins/extsMixins";
75
+ import listMixins from "./listMixins";
76
+ import CustomList from "./CustomList.vue";
77
+ import search from './search';
78
+ import AllList from "./AllList.vue";
79
+
29
80
  export default {
30
81
  name: "JfbBaseTfkSearch",
31
82
  components: {
32
- XdFontIcon
83
+ CustomList,
84
+ XdFontIcon,
85
+ AllList,
86
+ XdSearchHistory
33
87
  },
34
88
  mixins: [
35
- componentsMixins, extsMixins, JfbBaseTfkSearchMixin
89
+ componentsMixins, extsMixins, JfbBaseTfkSearchMixin,listMixins
36
90
  ],
37
91
  data() {
38
92
  return {
93
+ hideMask: true,
94
+ tabId: '', //cinema/film/shop/product
95
+ keyword: '',
96
+ options:{},
97
+ menuList: [],
98
+ //公共样式
99
+ outSpacing:20,
100
+ isPreview: false,
39
101
 
40
- //todo
102
+ //面板
103
+ menuMargin: {},
104
+ menuPadding: {},
105
+ menuBgColor: {},
106
+ menuItemPadding: {},
107
+ menuTabColor: {},
108
+ menuBorderWidth: 1,
109
+ menuItemMargin: 40,
110
+ searchScope: [],
111
+ allListBgColor: "",
112
+ allModulePadding: {},
113
+ allModuleTitleBgColor: {},
114
+ allModuleTitlePadding: {},
115
+ allModuleMoreStyle: "",
116
+ allModuleMargin: 20,
117
+ allModuleTitleStyle: "",
41
118
  }
42
119
  },
120
+ computed: {
121
+ showMenuList(){
122
+ return [{label: "全部", value: "all"}, ...this.menuList]
123
+ },
124
+ menuWrapBoxStyle(){
125
+ let padding = `${this.checkValue(this.menuMargin.top, 20)}rpx`;
126
+ padding = `${padding} ${this.checkValue(this.menuMargin.right, 20)}rpx`;
127
+ padding = `${padding} ${this.checkValue(this.menuMargin.bottom, 20)}rpx`;
128
+ padding = `${padding} ${this.checkValue(this.menuMargin.left, 20)}rpx`;
129
+
130
+ let style = {padding};
131
+ if(!this.isPreview){
132
+ style['position'] = 'fixed';
133
+ style['top'] = `${this.layoutInfo.top}rpx`;
134
+ }
135
+ return this.styleObjectToString(style)
136
+ },
137
+ menuBoxStyle(){
138
+ let padding = `${this.checkValue(this.menuPadding.top, 20)}rpx`;
139
+ padding = `${padding} ${this.checkValue(this.menuPadding.right, 20)}rpx`;
140
+ padding = `${padding} ${this.checkValue(this.menuPadding.bottom, 20)}rpx`;
141
+ padding = `${padding} ${this.checkValue(this.menuPadding.left, 20)}rpx`;
142
+ return this.styleObjectToString({
143
+ padding: padding,
144
+ backgroundColor: this.menuBgColor,
145
+ })
146
+ },
147
+ menuItemBoxStyle(){
148
+ let padding = `${this.checkValue(this.menuItemPadding.top, 20)}rpx`;
149
+ padding = `${padding} ${this.checkValue(this.menuItemPadding.right, 20)}rpx`;
150
+ padding = `${padding} ${this.checkValue(this.menuItemPadding.bottom, 20)}rpx`;
151
+ padding = `${padding} ${this.checkValue(this.menuItemPadding.left, 20)}rpx`;
152
+ return this.styleObjectToString({
153
+ padding
154
+ })
155
+ },
156
+ menuItemStyle(){
157
+ let styleObj = {
158
+ color: this.menuTabColor['color'] || '#333',
159
+ background: this.menuTabColor['bgColor'] || 'transparent',
160
+ fontSize: this.menuTabColor['fontSize'] || '30rpx',
161
+ fontWeight: this.menuTabColor['fontWeight'] || 'normal',
162
+ borderWidth: this.menuBorderWidth + 'px',
163
+ }
164
+
165
+ return this.styleObjectToString(styleObj)
166
+ },
167
+ menuItemActiveStyle(){
168
+ let defaultTextColor = this.mainColor;
169
+ let styleActiveObj = {
170
+ color: this.menuTabColor['actColor'] || defaultTextColor,
171
+ background: this.menuTabColor['actBgColor'] || 'transparent',
172
+ fontSize: this.menuTabColor['actFontSize'] || '30rpx',
173
+ fontWeight: this.menuTabColor['actFontWeight'] || 'normal',
174
+ borderBottom: `${this.menuBorderWidth}px solid ${this.menuTabColor['actColor'] || defaultTextColor}`
175
+ }
176
+ return this.styleObjectToString(styleActiveObj)
177
+ },
178
+ },
43
179
  watch: {
44
180
  container(value, oldValue) {
45
181
  if (JSON.stringify(value) === JSON.stringify(oldValue)) return;
46
- if (this.$configProject['isPreview']) this.init(value)
182
+ if (this.$configProject['isPreview']){
183
+ this.cusInit(value)
184
+ this.init(value);
185
+ }
47
186
  },
48
187
  },
49
188
  created() {
189
+ this.cusInit(this.container);
50
190
  this.init(this.container);
51
-
52
- //todo
53
191
  },
54
- methods: {
55
- onJfbLoad(options) {
56
-
57
- // jfbRootExec('baiduUserLogin', {
58
192
 
59
- // vm: this,// data: {
60
-
61
- // account: 'gaoshiyong',// password: '123456789',// type: 3,// ...options
193
+ methods: {
194
+ /**
195
+ * @description 获取数据列表
196
+ * @param params
197
+ * @param cb {Function}
198
+ */
199
+ handleList({params, cb}){
200
+ let data = {...params};
201
+ if(this.tabId === ''){
202
+ data['search_range'] = this.searchScope.map(item => item.value.split("@")[0]).join(',');
203
+ }
62
204
 
63
- // }
205
+ jfbRootExec("getTfkSearchList", {
206
+ vm: this,
207
+ data: data
208
+ }).then(res => {
209
+ if(this.tabId === ''){
210
+ if(!this.$configProject['isPreview']){
211
+ this.menuList = res.tabs;
212
+ }
213
+ cb(res.list)
214
+ }else{
215
+ if(res.list.length > 0) cb(res.list[0])
216
+ else cb(null)
217
+ }
218
+ }).catch((e)=>{
219
+ if(this.tabId === ''){
220
+ //todo
221
+ }
222
+ else cb(null)
223
+ })
224
+ },
64
225
 
65
- // }).then().catch()
226
+ onJfbLoad(options) {
227
+ this.options = options;
66
228
  },
67
229
  /**
68
230
  * @description 监听事件变化
69
231
  * @param container {object} 业务组件对象自己
70
232
  */
71
233
  init(container) {
234
+ this.outSpacing = getContainerPropsValue(container, 'content.outSpacing', '20');
235
+ this.menuMargin = getContainerPropsValue(container, 'content.menuMargin', {});
236
+ this.menuPadding = getContainerPropsValue(container, 'content.menuPadding', {});
237
+ this.menuBgColor = getContainerPropsValue(container, 'content.menuBgColor', '');
238
+ this.menuItemPadding = getContainerPropsValue(container, 'content.menuItemPadding', {});
239
+ this.menuTabColor = getContainerPropsValue(container, 'content.menuTabColor', {});
240
+ this.menuBorderWidth = getContainerPropsValue(container, 'content.menuBorderWidth', 1);
241
+ this.menuItemMargin = getContainerPropsValue(container, 'content.menuItemMargin', 40);
242
+ this.searchScope = getContainerPropsValue(container, 'content.searchScope', []);
243
+ this.allListBgColor = getContainerPropsValue(container, 'content.allListBgColor', '');
244
+ this.allModulePadding = getContainerPropsValue(container, 'content.allModulePadding', {});
245
+ this.allModuleTitleBgColor = getContainerPropsValue(container, 'content.allModuleTitleBgColor', '');
246
+ this.allModuleTitlePadding = getContainerPropsValue(container, 'content.allModuleTitlePadding', {});
247
+ this.allModuleMoreStyle = getContainerPropsValue(container, 'content.allModuleMoreStyle', "");
248
+ this.allModuleMargin = getContainerPropsValue(container, 'content.allModuleMargin', 20);
249
+ this.allModuleTitleStyle = getContainerPropsValue(container, 'content.allModuleTitleStyle', "");
72
250
 
73
- //this.bgcolor = getContainerPropsValue(container, 'content.bgcolor', '#fff');
74
-
75
- //this.height = getContainerPropsValue(container, 'content.height', 10);
251
+ if(this.$configProject['isPreview']){
252
+ this.menuList = this.searchScope;
253
+ this.keyword = "搜索关键字";
254
+ this.isPreview = true;
255
+ }
76
256
  },
77
- onJfbScroll(options) {
78
- console.log('event.onJfbScroll', options)
257
+ handleSwitchMenu(item){
258
+ this.tabId = item.value;
79
259
  },
80
- onJfbReachBottom(options) {
81
- console.log('event.onJfbReachBottom', options)
260
+ handleToSearch(item){
261
+ this.keyword = item;
82
262
  },
263
+ onJfbScroll(options) {
264
+ // console.log('event.onJfbScroll', options)
265
+ },
266
+
83
267
  onJfbShow(options) {
84
268
  console.log('event.onJfbShow', options)
85
269
  },
@@ -92,8 +276,16 @@
92
276
  onJfbUpdate(...data) {
93
277
  console.log('event.onJfbUpdate', data)
94
278
  },
95
- onJfbCustomEvent(options) {
96
- console.log('event.onJfbReachBottom', options)
279
+ onJfbCustomEvent({action, data}) {
280
+ if(action === 'baseHeader@search'){
281
+ uni.pageScrollTo({
282
+ scrollTop: 0,
283
+ duration: 0
284
+ });
285
+ this.keyword = data;
286
+ this.tabId = '';
287
+ this.$refs.searchHistory.addHistory(data);
288
+ }
97
289
  },
98
290
  }
99
291
  }
@@ -105,7 +297,19 @@
105
297
 
106
298
  .jfb-base-tfk-search {
107
299
  &__body{
108
-
300
+ .hidden{
301
+ display: none;
302
+ }
303
+ .menu_wrap{
304
+ box-sizing: border-box;
305
+ width: 100%;
306
+ left: 0;
307
+ z-index: 999;
308
+ }
309
+ .menu_list{
310
+ display: flex;
311
+ box-sizing: border-box;
312
+ }
109
313
  }
110
314
  }
111
315
  </style>
@@ -1,13 +1,92 @@
1
- 'use strict';
1
+ "use strict";
2
2
 
3
3
  module.exports = {
4
-
5
- getTfkByIdFilmSquate:{},
6
-
7
- updateTfkFilmPaiqiDate:{},
8
-
9
- removeTfkFilmAddress:{},
10
-
11
- addTfkFilmcart:{},
12
-
13
- }
4
+ getTfkSearchList: {
5
+ list: [
6
+ {
7
+ type: "product",
8
+ name: "蛋糕",
9
+ detail_redirect_data:
10
+ '{"dir":"wtxsaas","host":"sandbox-website-05.jufubao.cn","path":"\\/main\\/order\\/detail","appType":"h5","site_id":"17928cc37788be02","site_url":"https:\\/\\/sandbox-website-05.jufubao.cn\\/wtxsaas\\/main\\/order\\/detail","frontPath":"\\/wtxsaas\\/main\\/order\\/detail","fixed_business_code":""}',
11
+ detail1_redirect_data: "",
12
+ more_redirect_data: "",
13
+ sort: 0,
14
+ setting_id: 1,
15
+ next_page_token: 'a:2:{i:0;d:1705.0785;i:1;s:8:"60030143";}',
16
+ items: [
17
+ {
18
+ brand_id: 100003,
19
+ brand_name: "品牌jls0519",
20
+ list_title: "3",
21
+ market_price: 2000,
22
+ market_tags: [],
23
+ product_id: 60030143,
24
+ product_name: "仅快递实物商品(北京廊坊支持配送)",
25
+ product_type: "good",
26
+ promo_price: 0,
27
+ sale_num: 8,
28
+ sale_price: 3000,
29
+ status: "ok",
30
+ thumb: "/uploads/20231215/b2ce0235129aa592044f96343f25c338.jpeg"
31
+ }
32
+ ]
33
+ },
34
+ {
35
+ type: "shop",
36
+ name: "门店",
37
+ detail_redirect_data: "",
38
+ detail1_redirect_data: "",
39
+ more_redirect_data: "",
40
+ sort: 1,
41
+ setting_id: 5,
42
+ next_page_token: "a:1:{i:0;d:4.4;}",
43
+ items: [
44
+ {
45
+ brand_id: 0,
46
+ brand_name: "",
47
+ shop_icon:
48
+ "https://dimg04.uat.qa.nt.ctripcorp.com/images/1lo4a12000007fyeg8D96.gif",
49
+ distance: 4,
50
+ business_status: "5",
51
+ full_address: "北京北京北京市东城区景山前街4号",
52
+ phone: "",
53
+ consume_mode: ["TRAVEL"],
54
+ consume_mode_name: "",
55
+ shop_id: 1052782,
56
+ resource_shop_id: 8000302,
57
+ resource_shop_name: "故宫-测试1-攻略修改",
58
+ shop_tags: {},
59
+ stars: 2
60
+ }
61
+ ]
62
+ },
63
+ {
64
+ type: "cinema",
65
+ name: "影院",
66
+ detail_redirect_data:
67
+ '{"dir":"apply06","host":"sandbox-website-05.jufubao.cn","path":"\\/main\\/movie\\/suhedule","appType":"h5","site_id":"17928cc37788be02","site_url":"https:\\/\\/sandbox-website-05.jufubao.cn\\/apply06\\/main\\/movie\\/suhedule","frontPath":"\\/apply06\\/main\\/movie\\/suhedule","fixed_business_code":""}',
68
+ detail1_redirect_data:
69
+ '{"dir":"apply06","host":"sandbox-website-05.jufubao.cn","path":"\\/main\\/movie\\/cdetailnew","appType":"h5","site_id":"17928cc37788be02","site_url":"https:\\/\\/sandbox-website-05.jufubao.cn\\/apply06\\/main\\/movie\\/cdetailnew","frontPath":"\\/apply06\\/main\\/movie\\/cdetailnew","fixed_business_code":""}',
70
+ more_redirect_data: "",
71
+ sort: 3,
72
+ setting_id: 10,
73
+ next_page_token: 1,
74
+ items: [
75
+ {
76
+ address: "朝阳区安慧里三区10号 (北辰购物中心对面)",
77
+ brand_id: 0,
78
+ brand_name: "",
79
+ cinema_id: 6771413,
80
+ cinema_name: "北京剧院",
81
+ cinema_type: ["SEAT"],
82
+ cinema_type_name: ["在线选座"],
83
+ distance: "",
84
+ is_open: "Y",
85
+ shop_icon: ""
86
+ }
87
+ ]
88
+ }
89
+ ],
90
+ request_id: "f6c04f1d2eb3385b"
91
+ }
92
+ };
@@ -0,0 +1,45 @@
1
+ <template>
2
+ <view class="skeleton-wrap-item">
3
+ <view class="title skeleton-item"></view>
4
+ <view class="address skeleton-item"></view>
5
+ <view class="bottom">
6
+ <view class="local skeleton-item"></view>
7
+ <view class="btn skeleton-item"></view>
8
+ </view>
9
+ </view>
10
+ </template>
11
+
12
+ <script>
13
+ export default {
14
+ name: "SkeletonCinema"
15
+ }
16
+ </script>
17
+
18
+ <style scoped lang="less">
19
+ .skeleton-wrap-item {
20
+ height: 200rpx;
21
+ display: block;
22
+
23
+ & > .title {
24
+ .skeleton-item(100%, 60rpx);
25
+ margin-bottom: 20rpx;
26
+ }
27
+ & > .address {
28
+ .skeleton-item(100%, 40rpx);
29
+ margin-bottom: 20rpx;
30
+ }
31
+ & > .bottom {
32
+ display: flex;
33
+ justify-content: space-between;
34
+ align-items: center;
35
+
36
+ & > .local {
37
+ .skeleton-item(120rpx, 30rpx);
38
+ }
39
+ & > .btn {
40
+ .skeleton-item(150rpx, 60rpx);
41
+ }
42
+ }
43
+ }
44
+ </style>
45
+
@@ -0,0 +1,109 @@
1
+ <template>
2
+ <view class="skeleton-wrap-item">
3
+ <view class="skeleton-wrap-item-image skeleton-item" :style="{marginRight:outSpacing + 'rpx'}"></view>
4
+ <view class="skeleton-wrap-item-title">
5
+ <view class="title skeleton-item"></view>
6
+ <view class="type skeleton-item"></view>
7
+ <view class="director skeleton-item"></view>
8
+ <view class="star skeleton-item"></view>
9
+ </view>
10
+ <view class="skeleton-wrap-item-btn skeleton-item" :style="{marginLeft:outSpacing + 'rpx'}">
11
+ <view class="score skeleton-item"></view>
12
+ <view class="btn skeleton-item"></view>
13
+ </view>
14
+ </view>
15
+ </template>
16
+
17
+ <script>
18
+ export default {
19
+ name: "SkeletonFilm",
20
+ props:{
21
+ outSpacing:{
22
+ type: Number|String,
23
+ default:20
24
+ }
25
+ }
26
+ }
27
+ </script>
28
+
29
+
30
+
31
+ <style scoped lang="less">
32
+ .skeleton-wrap-item {
33
+ height: 240rpx;
34
+ display: flex;
35
+ justify-content: space-between;
36
+ align-items: center;
37
+
38
+ //影片列表骨架
39
+ &-image {
40
+ .skeleton-item(160rpx, 240rpx);
41
+ flex-shrink: 0;
42
+ margin-right: 20rpx;
43
+ }
44
+
45
+ &-title {
46
+ flex: 1;
47
+
48
+ .title {
49
+ .skeleton-item(100%, 50rpx);
50
+ margin-bottom: 20rpx;
51
+ }
52
+
53
+ .director,.star,.type {
54
+ .skeleton-item(100%, 40rpx);
55
+ margin-bottom: 10rpx;
56
+ }
57
+ }
58
+
59
+ &-btn {
60
+ display: flex;
61
+ align-content: space-between;
62
+ align-items: flex-end;
63
+ justify-content: flex-end;
64
+ flex-flow: wrap;
65
+ height: 100%;
66
+ box-sizing: border-box;
67
+ padding: 10rpx 0;
68
+ width: 130rpx;
69
+ flex-shrink: 0;
70
+
71
+ & > .score {
72
+ .skeleton-item(100rpx, 40rpx);
73
+ }
74
+ & > .btn {
75
+ .skeleton-item(130rpx, 60rpx);
76
+ }
77
+ }
78
+
79
+ &:last-child {
80
+ margin-bottom: 0!important;
81
+ }
82
+
83
+ //影院列表骨架
84
+ &.list {
85
+ display: block;
86
+ }
87
+ & > .title {
88
+ .skeleton-item(100%, 60rpx);
89
+ margin-bottom: 20rpx;
90
+ }
91
+ & > .address {
92
+ .skeleton-item(100%, 40rpx);
93
+ margin-bottom: 20rpx;
94
+ }
95
+ & > .bottom {
96
+ display: flex;
97
+ justify-content: space-between;
98
+ align-items: center;
99
+ padding-top: 30rpx;
100
+
101
+ & > .local {
102
+ .skeleton-item(120rpx, 30rpx);
103
+ }
104
+ & > .btn {
105
+ .skeleton-item(150rpx, 70rpx);
106
+ }
107
+ }
108
+ }
109
+ </style>