centaline-data-driven 1.2.85 → 1.2.88
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 +1 -1
- package/src/Detail.vue +1 -1
- package/src/SearchList.vue +4 -8
- package/src/centaline/css/common.css +9 -0
- package/src/centaline/dynamicContact/src/dynamicContact.vue +3 -0
- package/src/centaline/dynamicDetail/src/dynamicContactList.vue +3 -0
- package/src/centaline/dynamicDetail/src/dynamicPropertyDetailRET.vue +3 -0
- package/src/centaline/dynamicDetail/src/dynamicPropertySimpleDetailRET.vue +21 -1
- package/src/centaline/dynamicDtd/src/dynamicDtd.vue +1 -5
- package/src/centaline/dynamicForm/src/dynamicForm.vue +11 -2
- package/src/centaline/dynamicForm/src/dynamicFormListTable.vue +3 -1
- package/src/centaline/dynamicLayout/src/dynamicLayout.vue +9 -4
- package/src/centaline/dynamicRichText/src/dynamicRichText.vue +5 -3
- package/src/centaline/dynamicSearchList/src/dynamicSearchTable.vue +6 -0
- package/src/centaline/dynamicSearchList/src/dynamicTableStats.vue +1 -1
- package/src/centaline/dynamicT/src/dynamicT.vue +11 -2
- package/src/centaline/loader/src/ctl/Base.js +3 -0
- package/src/centaline/loader/src/ctl/ContactList.js +2 -2
- package/src/centaline/loader/src/ctl/Detail.js +4 -1
- package/src/centaline/loader/src/ctl/Dtd.js +2 -3
- package/src/centaline/loader/src/ctl/Router.js +3 -0
- package/src/centaline/loader/src/ctl/SearchScreen.js +5 -0
- package/src/centaline/loader/src/ctl/SearchTable.js +1 -1
- package/src/centaline/loader/src/ctl/lib/Enum.js +18 -0
- package/src/centaline/mixins/dynamicElement.js +0 -1
- package/src/main.js +1 -1
- package/wwwroot/static/centaline/centaline-data-driven.js +3 -3
- package/wwwroot/static/centaline/centaline-data-driven.js.map +1 -1
package/package.json
CHANGED
package/src/Detail.vue
CHANGED
package/src/SearchList.vue
CHANGED
|
@@ -4,14 +4,14 @@
|
|
|
4
4
|
|
|
5
5
|
<!-- <ct-searchlist :searchConditionApi="'/PropertyRETList/getLayoutOfSearch'" :searchDataApi="'/PropertyRETList/getListOfSearchModel'" :searchCategoryApi="'/PropertyRETList/getLayoutOfSearchCategory'"></ct-searchlist> -->
|
|
6
6
|
|
|
7
|
-
<ct-searchlist :searchConditionApi="'/SystemParameterList/getLayoutOfSearch'"
|
|
8
|
-
:searchDataApi="'/SystemParameterList/getListOfSearchModel'" :apiParam="para"></ct-searchlist>
|
|
7
|
+
<!-- <ct-searchlist :searchConditionApi="'/SystemParameterList/getLayoutOfSearch'"
|
|
8
|
+
:searchDataApi="'/SystemParameterList/getListOfSearchModel'" :apiParam="para"></ct-searchlist> -->
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
<ct-searchlist :searchConditionApi="'/PropertyRETList/getLayoutOfSearch'"
|
|
11
11
|
:searchDataApi="'/PropertyRETList/getListOfSearchModel'"
|
|
12
12
|
:searchCategoryApi="'/PropertyRETList/getLayoutOfSearchCategory'"
|
|
13
13
|
:searchStatsApi="'/exampleList/getListStats'"
|
|
14
|
-
></ct-searchlist>
|
|
14
|
+
></ct-searchlist>
|
|
15
15
|
|
|
16
16
|
<!--<ct-searchlist :searchConditionApi="'/api/invoice-info/search-condition'" :searchDataApi="'/api/invoice-info/list'" :searchDataStatisticsApi="'api/ContractList/GetLayoutOfStatisticsTool'" :apiParam="para"></ct-searchlist>-->
|
|
17
17
|
<!-- <ct-searchlist :searchConditionApi="'/PropertyStatusList/getLayoutOfSearch'" :searchDataApi="'/PropertyStatusList/getListOfSearchModel'" :apiParam="para"></ct-searchlist> -->
|
|
@@ -26,10 +26,6 @@
|
|
|
26
26
|
data() {
|
|
27
27
|
return {
|
|
28
28
|
para:{
|
|
29
|
-
code: "001.001",
|
|
30
|
-
name: "物业用途",
|
|
31
|
-
paramKey: "PropertyUsageID",
|
|
32
|
-
paramName: "物业用途"
|
|
33
29
|
},
|
|
34
30
|
// para: {searchFields: {fields: []}, pageAttribute: {pageIndex: 1}, flagSearch: true}
|
|
35
31
|
// para: {publishID: "1503900718229229568"}
|
|
@@ -803,5 +803,14 @@ html {
|
|
|
803
803
|
.el-input-group{
|
|
804
804
|
line-height: 26px;
|
|
805
805
|
}
|
|
806
|
+
.shortcutFollow .ct-form{
|
|
807
|
+
margin:0px !important;
|
|
808
|
+
}
|
|
809
|
+
.shortcutFollow .ct-form .el-card__body{
|
|
810
|
+
padding:0px !important;
|
|
811
|
+
}
|
|
812
|
+
.shortcutFollow .ct-form .el-card__body .el-col{
|
|
813
|
+
padding:0px 5px 0 0 !important;
|
|
814
|
+
}
|
|
806
815
|
|
|
807
816
|
|
|
@@ -258,6 +258,9 @@
|
|
|
258
258
|
let query = self.$common.objectToQueryStr(submitData);
|
|
259
259
|
window.open(field.action + query, "_blank");
|
|
260
260
|
}
|
|
261
|
+
else if (field.isOpenUrlInBrowse) {// 浏览器打开
|
|
262
|
+
window.open(submitData[field.submitFormField], "_blank");
|
|
263
|
+
}
|
|
261
264
|
else{
|
|
262
265
|
field.doAction(submitData, (data) => {
|
|
263
266
|
self.model.doAction(data,field);
|
|
@@ -399,6 +399,9 @@
|
|
|
399
399
|
let query = self.$common.objectToQueryStr(submitData);
|
|
400
400
|
window.open(field.action + query, "_blank");
|
|
401
401
|
}
|
|
402
|
+
else if (field.isOpenUrlInBrowse) {// 浏览器打开
|
|
403
|
+
window.open(submitData[field.submitFormField], "_blank");
|
|
404
|
+
}
|
|
402
405
|
else{
|
|
403
406
|
field.doAction(submitData, (data) => {
|
|
404
407
|
self.model.doAction(data,field);
|
|
@@ -584,6 +584,9 @@
|
|
|
584
584
|
let query = self.$common.objectToQueryStr(submitData);
|
|
585
585
|
window.open(field.action + query, "_blank");
|
|
586
586
|
}
|
|
587
|
+
else if (field.isOpenUrlInBrowse) {// 浏览器打开
|
|
588
|
+
window.open(submitData[field.submitFormField], "_blank");
|
|
589
|
+
}
|
|
587
590
|
else{
|
|
588
591
|
field.doAction(submitData, (data) => {
|
|
589
592
|
self.model.doAction(data,field);
|
|
@@ -67,7 +67,10 @@
|
|
|
67
67
|
</component>
|
|
68
68
|
</div>
|
|
69
69
|
<span :slot="showIndex>0?'reference':''" class="more" style="margin-left: 10px;"></span>
|
|
70
|
-
</el-popover>
|
|
70
|
+
</el-popover>
|
|
71
|
+
</div>
|
|
72
|
+
<div ref="shortcutFollow" v-if="model.shortcutFollowForm!==undefined && model.shortcutFollowForm!==null" class="shortcutFollow" style="margin-top: 16px;">
|
|
73
|
+
<ct-form :source="model.shortcutFollowForm" @submit="saveShortcutFollow"></ct-form>
|
|
71
74
|
</div>
|
|
72
75
|
<div class="tablist-info base-box">
|
|
73
76
|
<div class="details-tabs-box">
|
|
@@ -90,11 +93,13 @@
|
|
|
90
93
|
<script>
|
|
91
94
|
import dynamicElement from '../../mixins/dynamicElement';
|
|
92
95
|
import dynamicContact from '../../dynamicContact/src/dynamicContact.vue';
|
|
96
|
+
import dynamicForm from '../../dynamicForm/src/dynamicForm.vue';
|
|
93
97
|
export default {
|
|
94
98
|
name: 'ct-PropertySimpleDetailRET',
|
|
95
99
|
mixins: [dynamicElement],
|
|
96
100
|
components: {
|
|
97
101
|
'ct-contact': dynamicContact,
|
|
102
|
+
'ct-form': dynamicForm,
|
|
98
103
|
},
|
|
99
104
|
props: {
|
|
100
105
|
vmodel: Object,
|
|
@@ -393,6 +398,9 @@
|
|
|
393
398
|
let query = self.$common.objectToQueryStr(submitData);
|
|
394
399
|
window.open(field.action + query, "_blank");
|
|
395
400
|
}
|
|
401
|
+
else if (field.isOpenUrlInBrowse) {// 浏览器打开
|
|
402
|
+
window.open(submitData[field.submitFormField], "_blank");
|
|
403
|
+
}
|
|
396
404
|
else{
|
|
397
405
|
field.doAction(submitData, (data) => {
|
|
398
406
|
self.model.doAction(data,field);
|
|
@@ -445,6 +453,18 @@
|
|
|
445
453
|
clickPrevHandler() {
|
|
446
454
|
this.$emit('clickPrevHandler');
|
|
447
455
|
},
|
|
456
|
+
saveShortcutFollow(){
|
|
457
|
+
var self=this;
|
|
458
|
+
self.model.tags1.forEach((v,i) => {
|
|
459
|
+
if(v.appID=='Follow'){
|
|
460
|
+
self.model.activeIndex1=i.toString();
|
|
461
|
+
self.listKey=self.listKey+1;
|
|
462
|
+
self.model.searchConditionApiTags1=v.searchConditionApiUrl||'';
|
|
463
|
+
self.model.searchDataApiTags1=v.searchDataApiUrl||'';
|
|
464
|
+
self.model.paramDataTags1 = v.paramData || '';
|
|
465
|
+
}
|
|
466
|
+
});
|
|
467
|
+
},
|
|
448
468
|
}
|
|
449
469
|
}
|
|
450
470
|
</script>
|
|
@@ -49,9 +49,7 @@
|
|
|
49
49
|
pickerOptions: this.getPickerOptions()
|
|
50
50
|
};
|
|
51
51
|
},
|
|
52
|
-
|
|
53
|
-
mounted() {
|
|
54
|
-
|
|
52
|
+
mounted() {
|
|
55
53
|
var self = this;
|
|
56
54
|
this.$nextTick(function () {
|
|
57
55
|
if (self.vmodel) {
|
|
@@ -70,10 +68,8 @@
|
|
|
70
68
|
},
|
|
71
69
|
watch: {
|
|
72
70
|
'model.value': function () {
|
|
73
|
-
|
|
74
71
|
},
|
|
75
72
|
'model.value1': function () {
|
|
76
|
-
|
|
77
73
|
},
|
|
78
74
|
},
|
|
79
75
|
methods: {
|
|
@@ -308,7 +308,7 @@
|
|
|
308
308
|
}
|
|
309
309
|
field.disabled = false;
|
|
310
310
|
self.model.pageDisabled= false;
|
|
311
|
-
});
|
|
311
|
+
},self.model.scripts);
|
|
312
312
|
}
|
|
313
313
|
//无值,触发submit事件
|
|
314
314
|
else {
|
|
@@ -399,6 +399,9 @@
|
|
|
399
399
|
let query = self.$common.objectToQueryStr(submitData);
|
|
400
400
|
window.open(field.action + query, "_blank");
|
|
401
401
|
}
|
|
402
|
+
else if (field.isOpenUrlInBrowse) {// 浏览器打开
|
|
403
|
+
window.open(submitData[field.submitFormField], "_blank");
|
|
404
|
+
}
|
|
402
405
|
else if (field.isExport) {
|
|
403
406
|
submitData = field.getActionPara(submitData).para;
|
|
404
407
|
self.model.export(field, submitData);
|
|
@@ -475,7 +478,13 @@
|
|
|
475
478
|
self.model.requiredHandle(field);
|
|
476
479
|
//self.model.validMrf(field);
|
|
477
480
|
|
|
478
|
-
if(field.
|
|
481
|
+
if(field.routerKeyForEnterKey){
|
|
482
|
+
var router =self.model.actionRouters.find((v) => {
|
|
483
|
+
return v.id === field.routerKeyForEnterKey;
|
|
484
|
+
});
|
|
485
|
+
self.clickHandler(router);
|
|
486
|
+
}
|
|
487
|
+
else if(field.onAfterChanged){
|
|
479
488
|
var router =self.model.actionRouters.find((v) => {
|
|
480
489
|
return v.id === field.onAfterChanged;
|
|
481
490
|
});
|
|
@@ -52,7 +52,9 @@
|
|
|
52
52
|
<span v-else-if="scope.row.isSet" class="el-tag el-tag--mini" style="cursor: pointer;" @click="saveRow(scope.row,scope.$index,false)">
|
|
53
53
|
取消
|
|
54
54
|
</span>
|
|
55
|
-
<span v-for="(v,i) in model.buttons"
|
|
55
|
+
<span v-for="(v,i) in model.buttons"
|
|
56
|
+
v-if="!scope.row.isSet && v.show && ( !v.rightField || !scope.row[v.rightField] || scope.row[v.rightField].value == 1 )"
|
|
57
|
+
class="el-tag el-tag--info el-tag--mini" style="cursor: pointer;" @click="buttonClick(scope.row, v)">
|
|
56
58
|
{{v.label}}
|
|
57
59
|
</span>
|
|
58
60
|
</template>
|
|
@@ -97,10 +97,15 @@
|
|
|
97
97
|
getValue(data, val) {
|
|
98
98
|
return val.split('.').reduce((data, currentVal) => {
|
|
99
99
|
var rtn = data[currentVal];
|
|
100
|
-
if (rtn
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
100
|
+
if (typeof rtn !== 'undefined') {
|
|
101
|
+
if (rtn.toString().indexOf('"') != -1) {
|
|
102
|
+
rtn = rtn.replace(/"/g, "'");
|
|
103
|
+
rtn = rtn.replace(/>/g, ">");
|
|
104
|
+
rtn = rtn.replace(/</g, "<");
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
rtn = "";
|
|
104
109
|
}
|
|
105
110
|
return rtn
|
|
106
111
|
}, data)
|
|
@@ -247,9 +247,11 @@
|
|
|
247
247
|
this.config.toolbars = [['help']];
|
|
248
248
|
return;
|
|
249
249
|
}
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
250
|
+
else if (!this.model.lock) {
|
|
251
|
+
this.config.maximumWords = this.model && this.model.max ? parseFloat(this.model.max) : 5000;
|
|
252
|
+
this.config.serverUrl = this.model.action;
|
|
253
|
+
this.config.imageUrl = this.model.action;
|
|
254
|
+
}
|
|
253
255
|
},
|
|
254
256
|
computed: {
|
|
255
257
|
|
|
@@ -750,6 +750,9 @@
|
|
|
750
750
|
let query = self.$common.objectToQueryStr(submitData);
|
|
751
751
|
window.open(action + query, "_blank");
|
|
752
752
|
}
|
|
753
|
+
else if (field.isOpenUrlInBrowse) {// 浏览器打开
|
|
754
|
+
window.open(submitData[field.submitFormField], "_blank");
|
|
755
|
+
}
|
|
753
756
|
else {
|
|
754
757
|
//self.operationLoading = true;
|
|
755
758
|
|
|
@@ -928,6 +931,9 @@
|
|
|
928
931
|
let query = self.$common.objectToQueryStr(submitData);
|
|
929
932
|
window.open(action + query, "_blank");
|
|
930
933
|
}
|
|
934
|
+
else if (field.isOpenUrlInBrowse) {// 浏览器打开
|
|
935
|
+
window.open(submitData[field.submitFormField], "_blank");
|
|
936
|
+
}
|
|
931
937
|
else {
|
|
932
938
|
//self.operationLoading = true;
|
|
933
939
|
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
</el-input>
|
|
22
22
|
|
|
23
23
|
<span v-if="model.sufLabel" class="spanMessage ct-flex-div-span">{{model.sufLabel}}</span>
|
|
24
|
-
<ctQuickInputSos v-if="!model.lock && model.paramName" class="ct-flex-div-span" :pn="model.paramName" :action="api" @click="
|
|
24
|
+
<ctQuickInputSos v-if="!model.lock && model.paramName" class="ct-flex-div-span" :pn="model.paramName" :action="api" @click="quickSelect"></ctQuickInputSos>
|
|
25
25
|
</div>
|
|
26
26
|
<transition name="el-fade-in" class="ct-flex-div-span">
|
|
27
27
|
<span v-show="!valid" class="errorMessage ">
|
|
@@ -80,7 +80,16 @@
|
|
|
80
80
|
}
|
|
81
81
|
},
|
|
82
82
|
search() {
|
|
83
|
-
if(this.model.autoSearch)
|
|
83
|
+
if(this.model.autoSearch) {
|
|
84
|
+
this.$emit('click');
|
|
85
|
+
}
|
|
86
|
+
else if(this.model.routerKeyForEnterKey){
|
|
87
|
+
this.changeHandler(this.model.value);
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
quickSelect(v) {
|
|
91
|
+
this.model.value=v;
|
|
92
|
+
this.search();
|
|
84
93
|
},
|
|
85
94
|
},
|
|
86
95
|
}</script>
|
|
@@ -379,11 +379,11 @@ const ContactList = function (source,para ,callBack) {
|
|
|
379
379
|
var deleteRow = response.content.split(',');
|
|
380
380
|
if (deleteRow) {
|
|
381
381
|
deleteRow.forEach((r) => {
|
|
382
|
-
let strat
|
|
382
|
+
let strat=-1;
|
|
383
383
|
let count=0;
|
|
384
384
|
rtn._listData.forEach((v,i) => {
|
|
385
385
|
if(v[rtn.rowHiddenKey]===r){
|
|
386
|
-
if(strat
|
|
386
|
+
if(strat===-1)strat=i;
|
|
387
387
|
count=count+1;
|
|
388
388
|
}
|
|
389
389
|
});
|
|
@@ -32,7 +32,7 @@ const Detail = function (source,para ,callBack) {
|
|
|
32
32
|
_commissionList:null,
|
|
33
33
|
get title() {
|
|
34
34
|
return data.title;
|
|
35
|
-
|
|
35
|
+
},
|
|
36
36
|
get fields1() {
|
|
37
37
|
return data.fields1;
|
|
38
38
|
},
|
|
@@ -370,6 +370,9 @@ const Detail = function (source,para ,callBack) {
|
|
|
370
370
|
}
|
|
371
371
|
return rtn._commissionList;
|
|
372
372
|
},
|
|
373
|
+
get shortcutFollowForm() {
|
|
374
|
+
return data.shortcutFollowForm;
|
|
375
|
+
},
|
|
373
376
|
doAction(response,field) {
|
|
374
377
|
if (response.responseData) {
|
|
375
378
|
response = response.responseData;
|
|
@@ -64,9 +64,8 @@ const Dtd = function (source, dateType) {
|
|
|
64
64
|
},
|
|
65
65
|
reset() {
|
|
66
66
|
this.formatValue = this.defaultFormat;
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
source.code2 = this.formatValue[1];
|
|
67
|
+
rtn.value = this.formatValue[0];
|
|
68
|
+
rtn.value1 = this.formatValue[1];
|
|
70
69
|
},
|
|
71
70
|
getFormObj() {
|
|
72
71
|
var rtnFormObj = {};
|
|
@@ -98,6 +98,9 @@ const Router = function (source) {
|
|
|
98
98
|
get isSearchPageWithList() {
|
|
99
99
|
return source.pageStyle === Enum.PageStyle.SearchPageWithList;
|
|
100
100
|
},
|
|
101
|
+
get isOpenUrlInBrowse() {
|
|
102
|
+
return source.actionType === Enum.ActionType.OpenUrlInBrowse;
|
|
103
|
+
},
|
|
101
104
|
//打开页面(1Form,2SearchList(弹在tab),3Tab,4执行客户端脚本,5SearchList(弹出))
|
|
102
105
|
get navToNewPage() {
|
|
103
106
|
return source.navToNewPage;
|
|
@@ -48,6 +48,11 @@ const SearchScreen = function (source, callBack, screenPara) {
|
|
|
48
48
|
this._sourceFieldsArr = [];
|
|
49
49
|
|
|
50
50
|
for (let key in source.content.fields) {
|
|
51
|
+
if((source.content.fields[key].controlType===Enum.ControlType.DateRange
|
|
52
|
+
|| source.content.fields[key].controlType===Enum.ControlType.DateTimeRange)
|
|
53
|
+
&& source.content.fields[key].code2==undefined){
|
|
54
|
+
source.content.fields[key].code2='';
|
|
55
|
+
}
|
|
51
56
|
let field = source.content.fields[key];
|
|
52
57
|
this._sourceFieldsArr.push(field);
|
|
53
58
|
}
|
|
@@ -609,7 +609,7 @@ const SearchTable = function (data, callBack, searchModel, flagSearch, defaultSe
|
|
|
609
609
|
rtn.dataDictionary[row[rtn.primaryKey]][vkey] = row[vkey];
|
|
610
610
|
}
|
|
611
611
|
});
|
|
612
|
-
if (rtn.cellLayout
|
|
612
|
+
if (rtn.cellLayout) {
|
|
613
613
|
rtn.$vue.$set(rtn.listData, rtn.selectIndex, rtn.dataDictionary[searchValue1]);
|
|
614
614
|
}
|
|
615
615
|
}
|
|
@@ -377,6 +377,21 @@ const Enum = {
|
|
|
377
377
|
/// 执行 拨打电话 的动作
|
|
378
378
|
/// </summary>
|
|
379
379
|
CallTel: 19,
|
|
380
|
+
|
|
381
|
+
/// <summary>
|
|
382
|
+
/// 弹出浮层 播放录音
|
|
383
|
+
/// </summary>
|
|
384
|
+
ListenVoice: 20,
|
|
385
|
+
|
|
386
|
+
/// <summary>
|
|
387
|
+
/// 弹出浮层 播放视频
|
|
388
|
+
/// </summary>
|
|
389
|
+
SeeVoice: 21,
|
|
390
|
+
|
|
391
|
+
/// <summary>
|
|
392
|
+
/// 在浏览器中打开一个 relationField 执行的URL
|
|
393
|
+
/// </summary>
|
|
394
|
+
OpenUrlInBrowse: 22,
|
|
380
395
|
},
|
|
381
396
|
|
|
382
397
|
/// <summary>
|
|
@@ -482,6 +497,9 @@ const Enum = {
|
|
|
482
497
|
Dropdown : 3
|
|
483
498
|
},
|
|
484
499
|
|
|
500
|
+
/// <summary>
|
|
501
|
+
/// 页面打开类型
|
|
502
|
+
/// </summary>
|
|
485
503
|
PageStyle:
|
|
486
504
|
{
|
|
487
505
|
/// <summary>
|
package/src/main.js
CHANGED
|
@@ -39,7 +39,7 @@ Vue.use(centaline, {
|
|
|
39
39
|
// 获取请求头
|
|
40
40
|
getRequestHeaders: function () {
|
|
41
41
|
return {
|
|
42
|
-
oldToken: '
|
|
42
|
+
oldToken: 'd7a1705d-d8f4-4fee-9778-f9f6e402eacd',
|
|
43
43
|
originalRequestURL: 'http://10.88.22.67:8080',
|
|
44
44
|
EstateInfo: ' {"estateId":"201703020943128D8A8FCF463E4016D6","estateName":"undefined"}',
|
|
45
45
|
Authorization:'Bearer eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6Ijk4NGM0ZjJlLTRhNTgtNDM4YS1iNjkxLWQyMTI4ZjdlYjNlMyJ9.nxO4kEXzIM2RJTXuX_AOoctKFvBiTZUEwHTu1YSFMn8JBjM9p-RK31ZB8ckJvlwgjiDGdbuGt1QOZRRP9KS3qQ',
|