jufubao-base 1.0.279-beta101 → 1.0.279-beta103

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 (24) hide show
  1. package/package.json +1 -1
  2. package/src/components/JfbBaseCard/JfbBaseCard.vue +6 -0
  3. package/src/components/JfbBaseCardEntry/JfbBaseCardEntry.vue +6 -0
  4. package/src/components/JfbBaseCardV2/JfbBaseCardV2.vue +6 -0
  5. package/src/components/JfbBaseCardV3/JfbBaseCardV3.vue +6 -0
  6. package/src/components/JfbBaseChangeCompany/Api.js +3 -43
  7. package/src/components/JfbBaseChangeCompany/Attr.js +8 -38
  8. package/src/components/JfbBaseChangeCompany/JfbBaseChangeCompany.vue +170 -80
  9. package/src/components/JfbBaseChangeCompany/Mock.js +1 -7
  10. package/src/components/JfbBaseChangeCompany/cusAttr/advanced.js +24 -0
  11. package/src/components/JfbBaseChangeCompany/cusAttr/content.js +27 -0
  12. package/src/components/JfbBaseChangeCompany/cusAttr/style.js +127 -0
  13. package/src/components/JfbBaseChoseCompany/Api.js +11 -36
  14. package/src/components/JfbBaseChoseCompany/Attr.js +8 -38
  15. package/src/components/JfbBaseChoseCompany/JfbBaseChoseCompany.vue +318 -79
  16. package/src/components/JfbBaseChoseCompany/Mock.js +2 -6
  17. package/src/components/JfbBaseChoseCompany/cusAttr/advanced.js +24 -0
  18. package/src/components/JfbBaseChoseCompany/cusAttr/content.js +69 -0
  19. package/src/components/JfbBaseChoseCompany/cusAttr/style.js +327 -0
  20. package/src/components/JfbBaseHeader/JfbBaseHeader.vue +1 -0
  21. package/src/components/JfbBaseNotice/JfbBaseNotice.vue +2 -3
  22. package/src/components/JfbBaseOrderDetail/JfbBaseOrderDetail.vue +153 -7
  23. package/src/components/JfbBasePay/JfbBasePay.vue +7 -4
  24. package/src/components/JfbBaseWalletIndex/JfbBaseWalletIndex.vue +1 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jufubao-base",
3
- "version": "1.0.279-beta101",
3
+ "version": "1.0.279-beta103",
4
4
  "private": false,
5
5
  "description": "聚福宝业务组件基础插件包",
6
6
  "main": "index.js",
@@ -652,6 +652,12 @@ export default {
652
652
 
653
653
  //登录成功调整地址优先级
654
654
  this.inCallback = inCallback || this.allEntryPath || this.settings.index;
655
+
656
+ //检查是否为小程序环境
657
+ //#ifdef H5
658
+ if(this.jfbAuthorize.checkIsH5ToMpEnv(this, this.inCallback ,'card')) return;
659
+ // #endif
660
+
655
661
  this.getContent();
656
662
 
657
663
  this.getCardList(options);
@@ -825,6 +825,12 @@ export default {
825
825
 
826
826
  //登录成功调整地址优先级
827
827
  this.inCallback = inCallback || this.allEntryPath || this.settings.index;
828
+
829
+ //检查是否为小程序环境
830
+ //#ifdef H5
831
+ if(this.jfbAuthorize.checkIsH5ToMpEnv(this, this.inCallback ,'card')) return;
832
+ // #endif
833
+
828
834
  this.getContent();
829
835
  if(this.tabIndex===1) {
830
836
  this.getCardList(options);
@@ -233,6 +233,12 @@
233
233
  }
234
234
  this.inCallback = inCallback || this.settings.index;
235
235
 
236
+ //检查是否为小程序环境
237
+ //#ifdef H5
238
+ if(this.jfbAuthorize.checkIsH5ToMpEnv(this, this.inCallback ,'card')) return;
239
+ // #endif
240
+
241
+
236
242
  this.getList();
237
243
  },
238
244
 
@@ -131,6 +131,12 @@
131
131
  }
132
132
  this.inCallback = inCallback || this.settings.index;
133
133
 
134
+ //检查是否为小程序环境
135
+ //#ifdef H5
136
+ if(this.jfbAuthorize.checkIsH5ToMpEnv(this, this.inCallback ,'card')) return;
137
+ // #endif
138
+
139
+
134
140
  this.getList();
135
141
  },
136
142
 
@@ -7,51 +7,11 @@
7
7
  module.exports = [
8
8
  {
9
9
  //设置方法名字当别忘记加上【模块名字】:Change
10
- mapFnName: 'getChangeByIdFilmSquate',
10
+ mapFnName: 'getChangeCompanyItem',
11
11
  title: '获取电影广场列表',
12
- path: '/api/account/film/list-film-square',
12
+ path: '/saas/v1/company/item',
13
13
  isRule: false,
14
- params: {
15
- last_key: ['当前页', 'Number', '必选'],
16
- page_size: ['每页数量', 'Number', '必选'],
17
- },
18
- isConsole: true,
19
- disabled: true,
20
- },
21
- {
22
- //设置方法名字当别忘记加上【模块名字】:Change
23
- mapFnName: 'updateChangeFilmPaiqiDate',
24
- title: '更新排期',
25
- path: '/api/account/film/paiqi-date',
26
- isRule: false,
27
- params: {
28
- film_id: ['电影id', 'Number', '必选'],
29
- cinema_id: ['影院id', 'Number', '必选'],
30
- },
31
- isConsole: true,
32
- disabled: true,
33
- },
34
- {
35
- //设置方法名字当别忘记加上【模块名字】:Change
36
- mapFnName: 'removeChangeFilmAddress',
37
- title: '删除我的配送地址',
38
- path: '/api/account/film/paiqi-date',
39
- isRule: false,
40
- params: {
41
- film_id: ['电影id', 'Number', '必选'],
42
- },
43
- isConsole: true,
44
- disabled: true,
45
- },
46
- {
47
- //设置方法名字当别忘记加上【模块名字】:Change
48
- mapFnName: 'addChangeFilmcart',
49
- title: '添加购物车',
50
- path: '/api/account/film/paiqi-date',
51
- isRule: false,
52
- params: {
53
- film_id: ['电影id', 'Number', '必选'],
54
- },
14
+ params: {},
55
15
  isConsole: true,
56
16
  disabled: true,
57
17
  },
@@ -1,48 +1,18 @@
1
1
  'use strict';
2
-
2
+ import Style from './cusAttr/style'
3
+ import Advanced from './cusAttr/advanced'
4
+ import Content from './cusAttr/content'
3
5
  /**
4
6
  * @description 当表单组件中有联动操作时候,使用方法进行返回
5
7
  */
6
8
  export default {
7
9
  style: [],
8
- content: (data) => {
10
+ content: (data, gValue, gColor, oldData) => {
9
11
  return [
10
- {
11
- label: '背景颜色:',
12
- ele: 'xd-color',
13
- valueKey: 'bgColor',
14
- value: data.bgColor || '',
15
- placeholder: '请输入占位框背景颜色',
16
- groupKey:'content',
17
- },
18
- {
19
- label: '选中路径:',
20
- groupKey:'advanced',
21
- className: 'input100',
22
- ele: 'xd-select-pages-path',
23
- valueKey: 'select-pages-path',
24
- value: data['select-pages-path'] || null,
25
- setting: {
26
- router: XdBus.getParentApi('getPagesTree')
27
- },
28
- },
29
- data.bgColor && {
30
- label: '高度:',
31
- ele: 'el-input',
32
- groupKey:'style',
33
- type: 'number',
34
- valueKey: 'height',
35
- value: data.height || 100,
36
- placeholder: '请输入占位框高度,单位像素,默认:10px',
37
- className: 'input60',
38
- },
39
- {
40
- label: '', //label
41
- groupKey:'advanced',
42
- ele: 'slot', //package 名称
43
- slot: 'is_reference',
44
- },
45
- ].filter(i=>i)
12
+ ...Style(data, gValue, gColor, oldData),
13
+ ...Advanced(data, gValue, gColor, oldData),
14
+ ...Content(data, gValue, gColor, oldData),
15
+ ].filter(i => i)
46
16
  },
47
17
  advanced: [],
48
18
  };
@@ -2,110 +2,200 @@
2
2
  <view
3
3
  class="jfb-base-change-company"
4
4
  @click="handleEditxSelect"
5
- :class="{ editx : isEditx && active }"
5
+ :class="{ editx: isEditx && active }"
6
6
  >
7
7
  <!--#ifdef H5-->
8
8
  <view
9
9
  class="jfb-base-change-company__edit"
10
- :class="{ editx : isEditx && active }"
10
+ :class="{ editx: isEditx && active }"
11
11
  v-if="isEditx && active"
12
12
  >
13
- <view class="jfb-base-change-company__edit-icon" @click="delEdit">删除</view>
13
+ <view class="jfb-base-change-company__edit-icon" @click="delEdit"
14
+ >删除</view
15
+ >
14
16
  </view>
15
17
  <!-- #endif -->
16
18
  <view class="jfb-base-change-company__body">
17
- <view>测试插件( {{containerId}} )</view>
19
+ <view
20
+ @click="handleToChangeCompany"
21
+ :style="[contWrapStyle]"
22
+ class="jfb-base-change-company__body-wrap"
23
+ >
24
+ <view class="jfb-base-change-company__body-wrap-left">
25
+ <XdFontIcon size="28" icon="iconxingzhuangjiehe"></XdFontIcon>
26
+ <view
27
+ :style="{
28
+ margin: companyPosition === 'left' ? '0 0 0 16rpx' : '0 auto',
29
+ }"
30
+ class="jfb-base-change-company__body-wrap-left-name"
31
+ >{{ company_name||'请选择企业' }}</view
32
+ >
33
+ </view>
34
+ <XdFontIcon size="28" icon="iconxiangyou_xian"></XdFontIcon>
35
+ </view>
18
36
  </view>
19
37
  </view>
20
38
  </template>
21
39
 
22
40
  <script>
23
- import XdFontIcon from "@/components/XdFontIcon/XdFontIcon";
24
- import { jfbRootExec } from "@/utils/xd.event";
25
- import JfbBaseChangeCompanyMixin from "./JfbBaseChangeCompanyMixin";
26
- import { getContainerPropsValue } from "@/utils/xd.base";
27
- import componentsMixins from "@/mixins/componentsMixins";
28
- import extsMixins from "@/mixins/extsMixins";
29
- export default {
30
- name: "JfbBaseChangeCompany",
31
- components: {
32
- XdFontIcon
33
- },
34
- mixins: [
35
- componentsMixins, extsMixins, JfbBaseChangeCompanyMixin
36
- ],
37
- data() {
38
- return {
41
+ import XdFontIcon from "@/components/XdFontIcon/XdFontIcon";
42
+ import { jfbRootExec } from "@/utils/xd.event";
43
+ import JfbBaseChangeCompanyMixin from "./JfbBaseChangeCompanyMixin";
44
+ import { getContainerPropsValue, gCPVal } from "@/utils/xd.base";
45
+ import componentsMixins from "@/mixins/componentsMixins";
46
+ import extsMixins from "@/mixins/extsMixins";
47
+ import store from "@/store";
39
48
 
40
- //todo
41
- }
49
+ export default {
50
+ name: "JfbBaseChangeCompany",
51
+ components: {
52
+ XdFontIcon,
53
+ },
54
+ mixins: [componentsMixins, extsMixins, JfbBaseChangeCompanyMixin],
55
+ data() {
56
+ return {
57
+ companyPosition: "",
58
+ contentPadding: {},
59
+ backgroundColor: "",
60
+ fontStyle: {},
61
+ changeCompanyPath: "",
62
+ company_name: ''
63
+ };
64
+ },
65
+ watch: {
66
+ container(value, oldValue) {
67
+ if (JSON.stringify(value) === JSON.stringify(oldValue)) return;
68
+ if (this.$configProject["isPreview"]) this.init(value);
42
69
  },
43
- watch: {
44
- container(value, oldValue) {
45
- if (JSON.stringify(value) === JSON.stringify(oldValue)) return;
46
- if (this.$configProject['isPreview']) this.init(value)
47
- },
70
+ },
71
+ computed: {
72
+ contWrapStyle() {
73
+ return {
74
+ padding: this.getMarginAndPadding(this.contentPadding),
75
+ backgroundColor: this.backgroundColor,
76
+ color: this.fontStyle.color,
77
+ };
48
78
  },
49
- created() {
50
- this.init(this.container);
79
+ },
80
+ created() {
81
+ this.init(this.container);
51
82
 
52
- //todo
83
+ //todo
84
+ },
85
+ methods: {
86
+ onJfbLoad(options) {
87
+ jfbRootExec("getChangeCompanyItem", {
88
+ vm: this,
89
+ data: {},
90
+ }).then((res) => {
91
+ this.company_name = res.company_name
92
+ });
53
93
  },
54
- methods: {
55
- onJfbLoad(options) {
56
-
57
- // jfbRootExec('baiduUserLogin', {
58
-
59
- // vm: this,// data: {
60
-
61
- // account: 'gaoshiyong',// password: '123456789',// type: 3,// ...options
62
-
63
- // }
64
-
65
- // }).then().catch()
66
- },
67
- /**
68
- * @description 监听事件变化
69
- * @param container {object} 业务组件对象自己
70
- */
71
- init(container) {
72
-
73
- //this.bgcolor = getContainerPropsValue(container, 'content.bgcolor', '#fff');
74
-
75
- //this.height = getContainerPropsValue(container, 'content.height', 10);
76
- },
77
- onJfbScroll(options) {
78
- console.log('event.onJfbScroll', options)
79
- },
80
- onJfbReachBottom(options) {
81
- console.log('event.onJfbReachBottom', options)
82
- },
83
- onJfbShow(options) {
84
- console.log('event.onJfbShow', options)
85
- },
86
- onJfbHide(options) {
87
- console.log('event.onJfbHide', options)
88
- },
89
- onJfbBack(options) {
90
- console.log('event.onJfbBack', options)
91
- },
92
- onJfbUpdate(...data) {
93
- console.log('event.onJfbUpdate', data)
94
- },
95
- onJfbCustomEvent(options) {
96
- console.log('event.onJfbReachBottom', options)
97
- },
98
- }
99
- }
94
+ /**
95
+ * @description 监听事件变化
96
+ * @param container {object} 业务组件对象自己
97
+ */
98
+ init(container) {
99
+ //content
100
+ this.companyPosition = gCPVal(container, "companyPosition", "left", {});
101
+ //style
102
+ this.contentPadding = gCPVal(
103
+ container,
104
+ "contentPadding",
105
+ { top: 24, bottom: 24, left: 48, right: 48 },
106
+ {
107
+ sKey: "contentPaddingStatus",
108
+ fields: ["contentPadding"],
109
+ isPMR: true,
110
+ }
111
+ );
112
+ this.backgroundColor = gCPVal(container, "backgroundColor", "", {
113
+ sKey: "backgroundStyleStatus",
114
+ fields: ["backgroundColor"],
115
+ });
116
+ this.fontStyle = gCPVal(
117
+ container,
118
+ "fontStyle",
119
+ [
120
+ {
121
+ color: "#333",
122
+ },
123
+ ],
124
+ { sKey: "fontStyleStatus", fields: ["fontStyle"], isMerge: true }
125
+ );
126
+ console.log(this.fontStyle, "this.fontStyle");
100
127
 
128
+ //advanced
129
+ this.changeCompanyPath = getContainerPropsValue(
130
+ container,
131
+ "content.changeCompanyPath",
132
+ { value: "" }
133
+ ).value;
134
+ },
135
+ handleToChangeCompany() {
136
+ let redirect_url = "";
137
+ //是否需要设置返回地址
138
+ if (store.state.configProject.platform === "mp.weixin")
139
+ redirect_url = this["$xdUniHelper"].parseURL().source;
140
+ if (store.state.configProject.platform === "h5")
141
+ redirect_url = this.$route.fullPath;
142
+ this.$xdUniHelper.navigateTo({
143
+ url: `${this.changeCompanyPath}?redirect_url=${Base64.encodeURI(redirect_url)}`,
144
+ });
145
+ },
146
+ onJfbScroll(options) {
147
+ console.log("event.onJfbScroll", options);
148
+ },
149
+ onJfbReachBottom(options) {
150
+ console.log("event.onJfbReachBottom", options);
151
+ },
152
+ onJfbShow(options) {
153
+ console.log("event.onJfbShow", options);
154
+ },
155
+ onJfbHide(options) {
156
+ console.log("event.onJfbHide", options);
157
+ },
158
+ onJfbBack(options) {
159
+ console.log("event.onJfbBack", options);
160
+ },
161
+ onJfbUpdate(...data) {
162
+ console.log("event.onJfbUpdate", data);
163
+ },
164
+ onJfbCustomEvent(options) {
165
+ console.log("event.onJfbReachBottom", options);
166
+ },
167
+ },
168
+ };
101
169
  </script>
102
170
 
103
171
  <style scoped lang="less">
104
- @import "./JfbBaseChangeCompanyLess.less";
105
-
106
- .jfb-base-change-company {
107
- &__body{
172
+ @import "./JfbBaseChangeCompanyLess.less";
108
173
 
174
+ .jfb-base-change-company {
175
+ &__body {
176
+ &-wrap {
177
+ display: flex;
178
+ justify-content: space-between;
179
+ align-items: center;
180
+ &-left {
181
+ display: flex;
182
+ align-items: center;
183
+ flex: 1;
184
+ &-name {
185
+ margin-left: 16rpx;
186
+ font-size: 28rpx;
187
+ text-overflow: -o-ellipsis-lastline;
188
+ overflow: hidden; //溢出内容隐藏
189
+ text-overflow: ellipsis; //文本溢出部分用省略号表示
190
+ display: -webkit-box; //特别显示模式
191
+ -webkit-line-clamp: 1; //行数
192
+ line-clamp: 2;
193
+ -webkit-box-orient: vertical; //盒子中内容竖直排列
194
+ width: 80%;
195
+ word-break: break-all;
196
+ }
197
+ }
109
198
  }
110
199
  }
200
+ }
111
201
  </style>
@@ -2,12 +2,6 @@
2
2
 
3
3
  module.exports = {
4
4
 
5
- getChangeByIdFilmSquate:{},
6
-
7
- updateChangeFilmPaiqiDate:{},
8
-
9
- removeChangeFilmAddress:{},
10
-
11
- addChangeFilmcart:{},
5
+ getChangeCompanyItem: { "company_name": "公司体验平台", "request_id": "e3507345b2d924d5" },
12
6
 
13
7
  }
@@ -0,0 +1,24 @@
1
+ 'use strict';
2
+ import {
3
+ dataVal,
4
+ } from "@/utils/AttrTools";
5
+
6
+ export default (data, gValue, gColor, oldData) => {
7
+ return [
8
+ {
9
+ label: '切换企业',
10
+ ele: 'xd-select-pages-path',
11
+ labelInline: true,
12
+ valueKey: 'changeCompanyPath',
13
+ placeholder: '请选择切换企业跳转地址',
14
+ value: dataVal({ data, key: 'changeCompanyPath', dValue: null, gValue }),
15
+ groupKey: 'advanced',
16
+ className: 'input100',
17
+ setting: {
18
+ mode: 'new',
19
+ router: XdBus.getParentApi('getPagesTree'),
20
+ },
21
+ inline: false,
22
+ },
23
+ ]
24
+ }
@@ -0,0 +1,27 @@
1
+ 'use strict';
2
+ import {
3
+ dataVal,
4
+ } from "@/utils/AttrTools";
5
+
6
+ export default (data, gValue, gColor, oldData) => {
7
+ return [
8
+ {
9
+ ele: 'title',
10
+ label: '基础',
11
+ size: 'small',
12
+ groupKey: 'content',
13
+ },
14
+ {
15
+ label: '企业展示位置',
16
+ ele: 'xd-radio',
17
+ groupKey: 'content',
18
+ valueKey: 'companyPosition',
19
+ value: dataVal({ data, key: 'companyPosition', dValue: 'left' }),
20
+ labelInline: true,
21
+ list: [
22
+ { label: '居左', value: 'left' },
23
+ { label: '居中', value: 'center' },
24
+ ]
25
+ },
26
+ ]
27
+ }
@@ -0,0 +1,127 @@
1
+ 'use strict';
2
+ import {
3
+ dataVal,
4
+ statusDataVal,
5
+ statusShow
6
+ } from "@/utils/AttrTools";
7
+
8
+ export default (data, gValue, gColor, oldData) => {
9
+ return [
10
+ {
11
+ ele: 'title',
12
+ label: '内容区',
13
+ size: 'small',
14
+ groupKey: 'style',
15
+ },
16
+ {
17
+ label: '内边距',
18
+ ele: 'xd-radio',
19
+ groupKey: 'style',
20
+ valueKey: 'contentPaddingStatus',
21
+ value: statusDataVal({ data, key: 'contentPaddingStatus', fields: ['contentPadding'], gValue }),
22
+ labelInline: true,
23
+ list: [
24
+ { label: '默认', value: 'D' },
25
+ { label: '自定义', value: 'C' },
26
+ ]
27
+ },
28
+ { ele: 'group_start' },
29
+ {
30
+ label: '',
31
+ groupKey: 'style',
32
+ ele: 'xd-margin-padding',
33
+ valueKey: 'contentPadding',
34
+ value: dataVal({
35
+ data,
36
+ key: 'contentPadding',
37
+ dValue: {top:24,bottom:24,left:48,right:48},
38
+ gValue,
39
+ isPM: true,
40
+ }),
41
+ setting: {
42
+ type: 'padding',
43
+ bottom: false,
44
+ top: false,
45
+ },
46
+ placeholder: '请填充设置',
47
+ hidden: !statusShow({ data, key: 'contentPaddingStatus', fields: ['contentPadding'], gValue }),
48
+ },
49
+ { ele: 'group_end' },
50
+ {
51
+ ele: 'title',
52
+ label: '企业样式',
53
+ size: 'small',
54
+ groupKey: 'style',
55
+ },
56
+ {
57
+ label: '背景',
58
+ ele: 'xd-radio',
59
+ groupKey: 'style',
60
+ valueKey: 'backgroundStyleStatus',
61
+ value: statusDataVal({ data, key: 'backgroundStyleStatus', fields: ['backgroundColor'], gValue }),
62
+ labelInline: true,
63
+ list: [
64
+ { label: '默认', value: 'D' },
65
+ { label: '自定义', value: 'C' },
66
+ ]
67
+ },
68
+ { ele: 'group_start' },
69
+ {
70
+ label: '背景颜色',
71
+ ele: 'xd-color',
72
+ labelInline: true,
73
+ valueKey: 'backgroundColor',
74
+ value: dataVal({ data, key: 'backgroundColor', dValue: '', gValue }),
75
+ hidden: !statusShow({ data, key: 'backgroundStyleStatus', fields: ['backgroundColor'], gValue }),
76
+ placeholder: '请选择背景颜色',
77
+ className: 'input80',
78
+ groupKey: 'style',
79
+ setting: {
80
+ showAlpha: true
81
+ },
82
+ },
83
+ { ele: 'group_end' },
84
+ {
85
+ label: '文字颜色',
86
+ ele: 'xd-radio',
87
+ groupKey: 'style',
88
+ valueKey: 'fontStyleStatus',
89
+ value: statusDataVal({ data, key: 'fontStyleStatus', fields: ['fontColor'], gValue }),
90
+ labelInline: true,
91
+ list: [
92
+ { label: '默认', value: 'D' },
93
+ { label: '自定义', value: 'C' },
94
+ ]
95
+ },
96
+ { ele: 'group_start' },
97
+ {
98
+ label: '',
99
+ ele: 'xd-text-and-bgc',
100
+ groupKey: 'style',
101
+ valueKey: 'fontStyle',
102
+ value: dataVal({ data, key: 'fontStyle', dValue: {}, gValue }),
103
+ hidden: !statusShow({ data, key: 'fontStyleStatus', fields: ['fontStyle'], gValue }),
104
+ setting: {
105
+ fontSize: false,
106
+ weight: false,
107
+ bgColor: false,
108
+ selected: false,
109
+ default: {
110
+ color: '#333',
111
+ },
112
+ isBorder: false,
113
+ },
114
+ handleCustom({ action, data }) {
115
+ XdBus.getParentApi('getOptionsSettingList')({ setting_id: 'edtix_style_font_size' })
116
+ .then(res => {
117
+ data.cb(res.list)
118
+ })
119
+ .catch(error => {
120
+ console.error(error);
121
+ data.cb([])
122
+ });
123
+ },
124
+ },
125
+ { ele: 'group_end' },
126
+ ]
127
+ }