centaline-data-driven 1.2.34 → 1.2.37

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": "centaline-data-driven",
3
- "version": "1.2.34",
3
+ "version": "1.2.37",
4
4
  "description": "ccai",
5
5
  "author": "hjc <3226136347@qq.com>",
6
6
  "private": false,
package/src/Form.vue CHANGED
@@ -1,10 +1,8 @@
1
1
  <template>
2
2
  <div id="app-form" class="data-driven" style="width:100%;height:100%;overflow:auto">
3
- <ct-form :api="'/api/third-dept-tran/profit-return/applyUI'" :apiParam="apiParam"></ct-form>
4
- <!-- <ct-form :api="'/PropertyPublish/getLayoutOfNew'" :apiParam="apiParam"></ct-form> -->
3
+ <!-- <ct-form :api="'/api/third-dept-tran/profit-return/applyUI'" :apiParam="apiParam"></ct-form> -->
4
+ <ct-form :api="'/PropertyRET/getLayoutOfNewStepOne'" :apiParam="apiParam"></ct-form>
5
5
  <!-- <ct-form :source="formdata.content" :apiParam="apiParam"></ct-form> -->
6
- <!--:api="'FormSample/formdata'"-->
7
- <!--<ct-form :source="formdata.content"></ct-form>-->
8
6
  <!--<ct-form :api="'/api/form/formdata/contractDetail'" :apiParam="apiParam"></ct-form>-->
9
7
  <!--<ct-form :api="'api/Form/formdata'"></ct-form>-->
10
8
  <ct-dialog-list></ct-dialog-list>
@@ -16,10 +14,10 @@
16
14
  name: 'App',
17
15
  data() {
18
16
  return {
19
- apiParam: {profitReturnId: "1504359257134055426", actionType: 1, pageStyle: 2, pageTitle: "查看返利", pageOnly: true} ,
17
+ // apiParam: {profitReturnId: "1504359257134055426", actionType: 1, pageStyle: 2, pageTitle: "查看返利", pageOnly: true} ,
20
18
  // apiParam: {headerParam: {}, urlParam: {contractID: "06cad32e-4d0d-4b6f-bd24-16a28629a550", actionType: "0"}}
21
19
  // apiParam: {originalTraId: "1475658732246241281", actionType: 2, chanceID: "1"} ,
22
- // apiParam: {SN: "13557_132", UserID: "wuhan3"},
20
+ apiParam: {actionType: "2", pageStyle: "2", pageTitle: "新增盘源", pageOnly: "true"},
23
21
  }
24
22
  },
25
23
  methods: {
@@ -1,9 +1,9 @@
1
1
  <template>
2
2
  <div id="app-search" style="height:100%;position: fixed;">
3
- <!-- <ct-searchlist :searchConditionApi="'/api/third-dept-tran/tran-list/layout'" :searchDataApi="'/api/third-dept-tran/tran-list'"></ct-searchlist> -->
3
+ <ct-searchlist :searchConditionApi="'/api/third-dept-tran/tran-list/tran-emp-achievement-layout'" :searchDataApi="'/api/third-dept-tran/tran-list/tran-emp-achievement-list'"></ct-searchlist>
4
4
 
5
5
  <!-- <ct-searchlist :searchConditionApi="'/PropertyRETList/getLayoutOfSearch'" :searchDataApi="'/PropertyRETList/getListOfSearchModel'" :searchCategoryApi="'/PropertyRETList/getLayoutOfSearchCategory'"></ct-searchlist> -->
6
- <ct-searchlist :searchConditionApi="'/PropertyPublishLogList/getLayoutOfSearch'" :searchDataApi="'/PropertyPublishLogList/getListOfSearchModel'"></ct-searchlist>
6
+ <!-- <ct-searchlist :searchConditionApi="'/PropertyPublishLogList/getLayoutOfSearch'" :searchDataApi="'/PropertyPublishLogList/getListOfSearchModel'"></ct-searchlist> -->
7
7
 
8
8
  <!-- <ct-searchlist :searchConditionApi="'/PropertyRETList/getLayoutOfSearch'"
9
9
  :searchDataApi="'/PropertyRETList/getListOfSearchModel'"
@@ -23,8 +23,8 @@
23
23
  name: 'DataDrivenSearch',
24
24
  data() {
25
25
  return {
26
- //para: { agentId: "1424932685198864386", estateId: "L201402181627000007233", estateName: "271医院宿舍区", pageOnly: "true", pageTitle: "销控房源列表" }
27
- para: {publishID: "1503900718229229568"}
26
+ para: {searchFields: {fields: []}, pageAttribute: {pageIndex: 1}, flagSearch: true}
27
+ // para: {publishID: "1503900718229229568"}
28
28
  // para: {paramKey: "PropertyStatusID", code: "002.001", name: "盘源状态", paramName: "盘源状态"}
29
29
  }
30
30
  },
Binary file
@@ -308,6 +308,7 @@ html {
308
308
  }
309
309
 
310
310
  .errorMessage {
311
+ height: 26px;
311
312
  font-size: 12px;
312
313
  color: #ff5b5b !important;
313
314
  padding: 3px 5px;
@@ -244,7 +244,7 @@
244
244
  var self = this;
245
245
  this.model.scripts.$fd = field.id;
246
246
  this.model.scripts.$result = [];
247
-
247
+
248
248
  var clickAcion = function (field) {
249
249
  //若不是客户端方法,则直接访问接口
250
250
  if (!field.isClientFuntion) {
@@ -262,6 +262,9 @@
262
262
  self.model.pageDisabled= true;
263
263
  field.doAction(self.getFormObj(), (data) => {
264
264
  if (data.rtnCode === 200) {
265
+ if(data.notification===17){
266
+ self.clickHandler(self.model.getRtnRouter(data.content),null)
267
+ }
265
268
  if (self.model.flagAlertClose) {
266
269
  self.$common.confirm('操作成功,是否关闭本页面?', '提示', {
267
270
  confirmButtonText: '确定',
@@ -298,6 +301,11 @@
298
301
  }
299
302
  }
300
303
  else {
304
+ if(field.flagAttachSearchCondition){
305
+ if (!self.validExcute()){
306
+ return;
307
+ }
308
+ }
301
309
  if (typeof field.onClick !== 'undefined') {
302
310
  verified = self.$common.excute.call(self.model.scripts, field.onClick);
303
311
  }
@@ -305,9 +313,14 @@
305
313
  if (!submitData) {
306
314
  submitData = {};
307
315
  var tempFormData = self.model.getFormObj();
308
- field.submitFormField.forEach((v) => {
309
- submitData[v] = tempFormData[v];
310
- });
316
+ if(field.flagAttachSearchCondition){
317
+ submitData.jsonData=tempFormData;
318
+ }
319
+ else{
320
+ field.submitFormField.forEach((v) => {
321
+ submitData[v] = tempFormData[v];
322
+ });
323
+ }
311
324
  }
312
325
 
313
326
  if (field.isOpenForm) {
@@ -387,7 +400,7 @@
387
400
  }
388
401
  submitData = field.getActionPara(submitData).para;
389
402
  let title=field.pageTitle==undefined ?field.label:field.pageTitle;
390
- submitData.actionType=field.actionType;
403
+ submitData.actionType=field.actionType;
391
404
  var fun =self.$common.getDataDrivenOpts().handler[field.action];
392
405
  fun(submitData,title,self.model);
393
406
  }
@@ -562,8 +575,7 @@
562
575
  return Object.assign(formData,{'pageStyle':this.$route.query.pageStyle});
563
576
  }
564
577
  return formData;
565
- },
566
-
578
+ },
567
579
  }
568
580
  }
569
581
  </script>
@@ -3,7 +3,7 @@
3
3
  <ct-tableStats ref="tableStats" class="ct-search-table-list-header"
4
4
  v-if="!isLoading&&searchStatsApi"
5
5
  :api="searchStatsApi"
6
- @searchStats="searchStats"
6
+ @searchStats="searchStats" @setTableHeight="setTableHeight"
7
7
  :searchModel="model.searchModel"></ct-tableStats>
8
8
  <ct-tabletoolbar ref="toolbar" v-if="!isLoading" :buttons="model.buttons"
9
9
  @click="toolbarClickHandler($event)"
@@ -463,6 +463,7 @@
463
463
  setTrLazyLoading() {
464
464
  this.pageRowMax = this.firstRow + this.displayRowNumber;
465
465
  this.pageRowMin = this.firstRow - this.displayRowNumber;
466
+ this.pageRowMin=this.pageRowMin>0?this.pageRowMin:0;
466
467
  if (this.pageRowMin > 0 && this.model.listData[this.pageRowMin].$rowspan === 0) {
467
468
  for (let i = this.pageRowMin; i >= 0; i--) {
468
469
  if (this.model.listData[i].$rowspan > 0) {
@@ -505,7 +506,9 @@
505
506
  var h4 = this.$refs.footer.$el.offsetHeight | 0;
506
507
  var h5 = this.$refs.listHeader.$el.offsetHeight | 0;
507
508
  var h6 = this.$refs.listFooter.$el.offsetHeight | 0;
508
- let tableHeight = h1 - h2 - h3 - h4 - h5 - h6 - 22;
509
+ var h7 = this.$refs.tableStats?(this.$refs.tableStats.$el.offsetHeight+7 | 0):0;
510
+ let tableHeight = h1 - h2 - h3 - h4 - h5 - h6 - h7-22;
511
+ console.log(tableHeight+" "+h7);
509
512
  this.model.tableHeight = tableHeight < 40 ? 350 : tableHeight;
510
513
  this.$nextTick(() => {
511
514
  self.getScrollAttr();
@@ -520,12 +523,8 @@
520
523
  self.isBusy = true;
521
524
  self.tableLoading = true;
522
525
  self.model.nextPage((rtn) => {
523
- if (rtn) {
524
- self.$nextTick(() => {
525
- self.calculatingRowHeight();
526
- self.getScrollAttr();
527
-
528
- });
526
+ if (rtn) {
527
+ self.getScrollAttr();
529
528
  self.$forceUpdate();
530
529
  }
531
530
  self.isBusy = false;
@@ -831,25 +830,15 @@
831
830
  },
832
831
  calculatingRowHeight() {
833
832
  let self = this;
834
- let count = 0;
835
833
 
836
834
  //查询出所有没有设置$heigth的数据并重新设置$heigth
837
- let notHeigthData = self.model.listData.filter(item => {
838
- return item.$heigth === undefined || item.$heigth <= 0
839
- })
840
- if (notHeigthData && notHeigthData.length > 0) {
841
- notHeigthData.forEach((v, i) => {
835
+ self.model.listData.forEach((item, i) => {
836
+ if(item.$heigth === undefined || item.$heigth <= 0){
842
837
  if (self.$refs["rows." + i] && self.$refs["rows." + i].length > 0) {
843
- self.$set(v, "$heigth", self.$refs["rows." + i][0].clientHeight);
838
+ self.$set(item, "$heigth", self.$refs["rows." + i][0].clientHeight);
844
839
  }
845
- });
846
- }
847
-
848
- //for (let i = 0; i < self.model.listData.length; i++) {
849
- // if (self.$refs[]) {
850
- // }
851
- //}
852
- //self.$refs
840
+ }
841
+ });
853
842
  },
854
843
  updateCurrentRow(router,data) {
855
844
  let self = this;
@@ -4,21 +4,46 @@
4
4
  <!--计算占用宽度-->
5
5
  <div style="position:relative" v-if="FlagStatistics">
6
6
  <div style="position:absolute;left:-10000px" class="tab-list">
7
- <label v-for="(item, index) in data" class="btnTab" :class="[selectStats==item.code1?'active':'']" :ref="'StatisticsItem'+index">{{item.controlLabel}}</label>111
7
+ <label v-for="(item, index) in data" class="btnTab" :ref="'StatisticsItem'+index">
8
+ {{item.controlLabel}}
9
+ </label>
8
10
  </div>
9
11
  </div>
10
12
  <!--展示-->
11
13
  <div v-if="FlagStatistics" class="tab-list">
12
14
  <template v-if="showData.length===1">
13
- <label class="btnTab" v-for="(item, index) in showData[0]" :class="[selectStats==item.code1?'active':'']" @click="handleClick($event,item)">{{item.controlLabel}}</label>
15
+ <div v-for="(item, index) in showData[0]" @click="handleClick($event,item)">
16
+ <ul class="btnTab">
17
+ <li :class="[selectStats==item.code1+'*'+item.controlLabel?'activecolor':'']">{{item.controlLabel}}</li>
18
+ <li class="tdcenter">
19
+ <span :class="[selectStats==item.code1+'*'+item.controlLabel?'active':'']"></span>
20
+ </li>
21
+ </ul>
22
+ </div>
14
23
  </template>
15
24
  <template v-else-if="showData.length>1">
16
- <label class="btnTab" v-for="(item, index) in showData[0]" :class="[selectStats==item.code1?'active':'']" @click="handleClick($event,item)">{{item.controlLabel}}</label>
25
+ <div v-for="(item, index) in showData[0]" @click="handleClick($event,item)">
26
+ <ul class="btnTab">
27
+ <li :class="[selectStats==item.code1+'*'+item.controlLabel?'activecolor':'']">{{item.controlLabel}}</li>
28
+ <li class="tdcenter">
29
+ <span :class="[selectStats==item.code1+'*'+item.controlLabel?'active':'']"></span>
30
+ </li>
31
+ </ul>
32
+ </div>
17
33
  <el-popover :append-to-table="option.appendId?option.appendId:''"
18
34
  :placement="option.placement?option.placement:'left'"
19
35
  :trigger="option.trigger?option.trigger:''"
20
- class="tabl-el">
21
- <label class="tablf" v-for="(item, index) in showData[1]" :class="[selectStats==item.code1?'active':'']" @click="handleClick($event,item)">{{item.controlLabel}}</label>
36
+ >
37
+ <div v-if="FlagStatistics" class="tab-list" style="border-bottom:none">
38
+ <div class="tablf" v-for="(item, index) in showData[1]" @click="handleClick($event,item)" style="text-align:left">
39
+ <ul class="btnTab">
40
+ <li :class="[selectStats==item.code1+'*'+item.controlLabel?'activecolor':'']">{{item.controlLabel}}</li>
41
+ <li class="tdcenter">
42
+ <span :class="[selectStats==item.code1+'*'+item.controlLabel?'active':'']"></span>
43
+ </li>
44
+ </ul>
45
+ </div>
46
+ </div>
22
47
  <i slot="reference" class="icon-more"></i>
23
48
 
24
49
  </el-popover>
@@ -67,9 +92,10 @@
67
92
  self.data = data.source.content;
68
93
  self.selectVa = "";
69
94
  if (self.data.length > 0) {
70
- if (self.selectStats == []) {
71
- debugger
72
- self.selectStats = self.data[0].code1;
95
+ let i = self.data.findIndex(v => self.selectStats === (v.code1 + "*" + v.controlLabel));
96
+
97
+ if (i == -1 || self.selectStats == []) {
98
+ self.selectStats = self.data[0].code1 + "*" + self.data[0].controlLabel;
73
99
  }
74
100
  self.FlagStatistics = true;
75
101
  self.showStats();
@@ -111,12 +137,14 @@
111
137
  }
112
138
 
113
139
  }
140
+
141
+ self.$emit('setTableHeight');
114
142
  });
115
143
  },
116
144
  handleClick(ev, obj) {
117
145
  var self = this;
118
- self.selectStats = obj.code1;
119
- var fields = self.model.searchData(obj.fieldName1, obj.code1, obj.controlType, obj.searchDataType);
146
+ self.selectStats = obj.code1 + "*" + obj.controlLabel;
147
+ var fields = self.model.searchData(obj.fieldName1, obj.code1, obj.searchOperation, obj.searchDataType);
120
148
  var model = {
121
149
  "searchData": fields
122
150
  };
@@ -148,46 +176,69 @@
148
176
  </style>
149
177
 
150
178
  <style>
151
-
152
179
  .tab-list {
153
- height: 30px;
154
- border-bottom: 1px solid #E0E0E0;
180
+ border-bottom: 2px solid #E0E0E0;
155
181
  margin-bottom: 10px;
182
+ padding-bottom: 5px;
183
+ height: 30px;
156
184
  }
157
185
 
158
- .btnTab {
159
- font-size: 14px !important;
160
- font-weight: bold;
161
- padding: 5px 20px;
162
- }
163
-
164
- .btnTab:hover ,.tablf:hover{
165
- color: #ee5d56;
186
+ .tab-list .btnTab {
187
+ font-size: 14px !important;
188
+ font-weight: bold;
189
+ padding: 0px 20px 0px 20px;
190
+ cursor: pointer;
191
+ float: left;
192
+ list-style-type: none;
166
193
  }
167
- .tabl-el{
194
+
195
+ .tab-list .btnTab:hover, .tab-list .tablf:hover {
196
+ color: #ee5d56;
197
+ }
198
+
199
+ .tab-list .tabl-el {
168
200
  max-width: 150px;
169
201
  box-shadow: 0 6px 12px rgb(0 0 0 / 18%);
170
202
  }
171
- .tablf{
172
- font-size: 14px !important;
173
- font-weight: bold;
174
- text-align: center;
175
- padding: 5px 10px;
176
- display: block;
177
- }
178
- .active {
179
- color: #ee5d56 !important;
180
- border-bottom: solid 3px #ee5d56 !important;
181
- background: none;
182
- border-radius: 0 !important;
183
- }
184
203
 
185
- .icon-more {
186
- background: url(../../../assets/vertical.png)no-repeat;
187
- background-size: 80% 80%;
188
- height: 20px;
189
- width: 7px;
190
- display: inline-block;
191
- vertical-align: bottom;
192
- }
204
+ .tab-list .tablf {
205
+ font-size: 14px !important;
206
+ font-weight: bold;
207
+ text-align: center;
208
+ padding: 15px 10px;
209
+ display: block;
210
+ }
211
+
212
+ .tab-list .tdcenter {
213
+ line-height: 1px;
214
+ height: 1px;
215
+ text-align: center;
216
+ }
217
+
218
+ .tab-list .active {
219
+ color: #ee5d56 !important;
220
+ /* border-bottom-right-radius: 12px !important; */
221
+ /* border-top-right-radius: 11px; */
222
+ width: 20px;
223
+ background: -webkit-linear-gradient(right, #dfdede,#ff0c00);
224
+ height: 4px;
225
+ }
226
+
227
+ .tab-list .activecolor {
228
+ color: #ee5d56 !important;
229
+ }
230
+
231
+
232
+ .tab-list .btnTab span {
233
+ display: inline-block;
234
+ }
235
+
236
+ .tab-list .icon-more {
237
+ background: url(../../../assets/ver.png)no-repeat;
238
+ background-size: 80% 80%;
239
+ height: 20px;
240
+ width: 7px;
241
+ display: inline-block;
242
+ vertical-align: bottom;
243
+ }
193
244
  </style>
@@ -11,9 +11,9 @@
11
11
  <div ref="cttags" class="el-select__tags" :style="{'max-width':tagsWidth + 'px'}" @click="clickHandle">
12
12
  <span>
13
13
  <span class="ct-tags-value-label">{{model.valueLabel}}</span>
14
- <span class="el-tag el-tag--info" :class="[model.attrs.size?'el-tag--'+model.attrs.size:'']" v-for="item in model.value">
14
+ <span class="el-tag el-tag--info" :class="[model.attrs.size?'el-tag--'+model.attrs.size:'']" v-for="(item, index) in model.value" :key="index">
15
15
  <span class="el-select__tags-text">{{getOptionText(item)}}</span>
16
- <i v-if="!model.lock" class="el-tag__close el-icon-close" @click="deleteOption(item,$event)"></i>
16
+ <i v-if="!model.lock && !getOptionLocked(item)" class="el-tag__close el-icon-close" @click="deleteOption(item,$event)"></i>
17
17
  </span>
18
18
  </span>
19
19
  </div>
@@ -240,6 +240,16 @@
240
240
  return "";
241
241
  }
242
242
  },
243
+ getOptionLocked: function (value) {
244
+ var self = this;
245
+ var option = this.globalOptions.find((v) => { return v[self.model.optionAttrs.value] === value });
246
+ if (option) {
247
+ return option[self.model.optionAttrs.locked];
248
+ }
249
+ else {
250
+ return "";
251
+ }
252
+ },
243
253
  deleteOption(value, event) {
244
254
  var self = this;
245
255
  this.model.value.splice(
@@ -303,7 +313,13 @@
303
313
  this.$set(this, 'showClear', false);
304
314
  },
305
315
  clearClickHandle: function (event) {
316
+ var self =this;
306
317
  this.model.value.splice(0);
318
+ if(this.model.lockedValue.length>0){
319
+ this.model.lockedValue.forEach((v) => {
320
+ self.model.value.push(v);
321
+ });
322
+ }
307
323
  this.resize();
308
324
  this.tagsChange();
309
325
  this.$emit('input', this.model.value);
@@ -348,7 +348,12 @@ const Form = function (source, callBack, apiParam, failCallBack, isFormList) {
348
348
  rtn = true;
349
349
  }
350
350
  return rtn;
351
- }
351
+ },
352
+ getRtnRouter(v){
353
+ var button = Router(v);
354
+ button.is = "ct-btn";
355
+ return button;
356
+ },
352
357
  };
353
358
  valid.InitForm(rtn);
354
359
  return rtn;
@@ -14,8 +14,10 @@ const Tags = function (source, moreActionRouter) {
14
14
  label: 'name',
15
15
  displayLabel:'displayName',
16
16
  actionType: 'actionType',
17
- flagDeleted: 'flagDeleted'
17
+ flagDeleted: 'flagDeleted',
18
+ locked: 'locked'
18
19
  },
20
+ _lockedValue: null,
19
21
  _value: null,
20
22
  get value() {
21
23
  if (this._value !== null) {
@@ -102,6 +104,11 @@ const Tags = function (source, moreActionRouter) {
102
104
  //},
103
105
  reset() {
104
106
  this.value.splice(0);
107
+ if(this.model.lockedValue.length>0){
108
+ this.model.lockedValue.forEach((v) => {
109
+ this.model.value.push(v);
110
+ });
111
+ }
105
112
  this.defaultValue.forEach((v1) => {
106
113
  this.value.push(v1);
107
114
  });
@@ -183,6 +190,20 @@ const Tags = function (source, moreActionRouter) {
183
190
 
184
191
  return null;
185
192
  },
193
+ get lockedValue() {
194
+ if (this._lockedValue !== null) {
195
+ return this._lockedValue;
196
+ }
197
+ else {
198
+ this._lockedValue = [];
199
+ this.options.forEach((v) => {
200
+ if(v[this.optionAttrs.locked]){
201
+ this._lockedValue.push(v[this.optionAttrs.value]);
202
+ }
203
+ });
204
+ return this._lockedValue;
205
+ }
206
+ },
186
207
  };
187
208
  rtn = base.copy(Base(source), rtn);
188
209
  rtn = base.copy(rtn, valid.Init(rtn));
@@ -356,9 +356,14 @@ const Enum = {
356
356
  CloseTabThenUpdate: 16,
357
357
 
358
358
  /// <summary>
359
- /// 指示前端列表刷新当前行数据
359
+ /// 路由
360
360
  /// </summary>
361
- RefreshCurrentRow: 17,
361
+ Router: 17,
362
+
363
+ /// <summary>
364
+ /// 替换当前表单内容
365
+ /// </summary>
366
+ Replace: 18,
362
367
  },
363
368
 
364
369
  /// <summary>
package/src/main.js CHANGED
@@ -13,7 +13,7 @@ Vue.use(ElementUI, { size: 'mini'});
13
13
  Vue.config.productionTip = false;
14
14
  Vue.use(centaline, {
15
15
  // baseUrl: "http://10.88.22.46:7070/v1/form/router",
16
- baseUrl: "http://tjcptest.centaline.com.cn/v1/form/router",
16
+ baseUrl: "http://10.1.245.111:38028/v1/form/router",
17
17
  // baseUrl: "http://10.88.22.46:7070/",
18
18
  // flagRouterSelf: true,
19
19
  zindex: 999,
@@ -36,7 +36,7 @@ Vue.use(centaline, {
36
36
  // 获取请求头
37
37
  getRequestHeaders: function () {
38
38
  return {
39
- oldToken: '4195d16c-9b1d-43b2-b6de-ef4a9f2b7d44',
39
+ oldToken: '5e730b63-1439-4850-9e88-4a83c8609525',
40
40
  estateId: '20210729104021C49F04B55C50F6AF58',
41
41
  originalRequestURL: 'http://10.88.22.67:8080',
42
42
  Authorization:'Bearer eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6IjE0NmU5ZjEzLTVjMmYtNGVlMy1hM2U5LWIxM2QyZThjZTBhZSJ9.Gl8K5lbG7t5DyCqouu7Ux7Oh9xuAxqdOXr4JnoHCN-YwC3b2zPO-C2sHbYJUZHYQPa7kTNRmg1xJiwugpVo5Xw',