centaline-data-driven 1.1.22 → 1.1.26

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 (72) hide show
  1. package/.vs/Centaline.Front_End.DataDriven/DesignTimeBuild/.dtbcache +0 -0
  2. package/build/centaline/centaline.path.js +2 -0
  3. package/build/centaline/webpack.centaline.conf.js +5 -3
  4. package/build/utils.js +2 -1
  5. package/config/dev.env.js +5 -2
  6. package/package.json +7 -5
  7. package/src/Detail.vue +28 -0
  8. package/src/Form.vue +4 -3
  9. package/src/SearchList.vue +5 -3
  10. package/src/SearchTree.vue +55 -0
  11. package/src/assets/Mvr.png +0 -0
  12. package/src/assets/VR.png +0 -0
  13. package/src/assets/collection.png +0 -0
  14. package/src/assets/dian.png +0 -0
  15. package/src/assets/ewm.png +0 -0
  16. package/src/assets/image.png +0 -0
  17. package/src/assets/location.png +0 -0
  18. package/src/assets/max-fold.png +0 -0
  19. package/src/assets/max-open.png +0 -0
  20. package/src/assets/mero.png +0 -0
  21. package/src/assets/node-collapse.png +0 -0
  22. package/src/assets/node-expand.png +0 -0
  23. package/src/assets/video.png +0 -0
  24. package/src/assets//350/256/241/347/256/227/345/231/250.png +0 -0
  25. package/src/centaline/comfirm/src/comfirm.vue +2 -2
  26. package/src/centaline/css/common.css +34 -33
  27. package/src/centaline/css/max.css +145 -0
  28. package/src/centaline/dynamicBtn/src/dynamicBtn.vue +35 -4
  29. package/src/centaline/dynamicCheckbox/src/dynamicCheckbox.vue +1 -1
  30. package/src/centaline/dynamicDetail/index.js +11 -0
  31. package/src/centaline/dynamicDetail/src/dynamicDetail.vue +39 -0
  32. package/src/centaline/dynamicDetail/src/dynamicPropertyDetailOFI.vue +1283 -0
  33. package/src/centaline/dynamicDetail/src/dynamicPropertyDetailRET.vue +29 -0
  34. package/src/centaline/dynamicForm/src/dynamicForm.vue +25 -9
  35. package/src/centaline/dynamicForm/src/dynamicFormList.vue +2 -2
  36. package/src/centaline/dynamicForm/src/dynamicFormListTable.vue +27 -6
  37. package/src/centaline/dynamicInputNumber/src/dynamicInputNumber.vue +4 -0
  38. package/src/centaline/dynamicSearchList/src/dynamicSearchList.vue +27 -6
  39. package/src/centaline/dynamicSearchList/src/dynamicSearchScreen.vue +10 -1
  40. package/src/centaline/dynamicSearchList/src/dynamicSearchTable.vue +59 -33
  41. package/src/centaline/dynamicSearchList/src/dynamicTableStatistics.vue +41 -0
  42. package/src/centaline/dynamicSearchList/src/dynamicTableToolbar.vue +7 -4
  43. package/src/centaline/dynamicSos/src/dynamicSos.vue +0 -1
  44. package/src/centaline/dynamicT/src/dynamicT.vue +18 -23
  45. package/src/centaline/dynamicTimeSelect/src/dynamicTimeSelect.vue +37 -3
  46. package/src/centaline/dynamicTree/index.js +11 -0
  47. package/src/centaline/dynamicTree/src/dynamicSearchTree.vue +66 -0
  48. package/src/centaline/dynamicTree/src/dynamicTree.vue +213 -0
  49. package/src/centaline/dynamicTree/src/dynamicTreeList.vue +65 -0
  50. package/src/centaline/loader/index.js +5 -6
  51. package/src/centaline/loader/src/ctl/Base.js +31 -2
  52. package/src/centaline/loader/src/ctl/Button.js +18 -1
  53. package/src/centaline/loader/src/ctl/ComboBoxWithTextBox.js +0 -8
  54. package/src/centaline/loader/src/ctl/Form.js +51 -7
  55. package/src/centaline/loader/src/ctl/FormList.js +7 -0
  56. package/src/centaline/loader/src/ctl/Mo.js +1 -9
  57. package/src/centaline/loader/src/ctl/Router.js +58 -1
  58. package/src/centaline/loader/src/ctl/SearchScreen.js +42 -2
  59. package/src/centaline/loader/src/ctl/SearchTable.js +28 -13
  60. package/src/centaline/loader/src/ctl/So.js +1 -9
  61. package/src/centaline/loader/src/ctl/Sos.js +2 -11
  62. package/src/centaline/loader/src/ctl/Tags.js +1 -9
  63. package/src/centaline/loader/src/ctl/TimeSelect.js +40 -13
  64. package/src/centaline/loader/src/ctl/Tree.js +154 -0
  65. package/src/centaline/loader/src/ctl/lib/Enum.js +12 -2
  66. package/src/centaline/loader/src/ctl/lib/LibFunction.js +13 -5
  67. package/src/centaline/loader/src/ctl.js +5 -1
  68. package/src/centaline/templateControls/src/dynamicTableCurrency.vue +14 -9
  69. package/src/main.js +1 -1
  70. package/src/router/index.js +11 -0
  71. package/wwwroot/static/centaline/centaline-data-driven.js +1 -7
  72. package/wwwroot/static/centaline/centaline-data-driven.js.map +1 -1
@@ -1,7 +1,8 @@
1
1
  <template>
2
2
  <div id="app-search" style="height:100%;position: fixed;">
3
- <ct-searchlist :searchConditionApi="'api/ContractList/GetLayoutOfSearch'" :searchDataApi="'api/ContractList/readlist'"></ct-searchlist>
4
- <!--<ct-searchlist :searchConditionApi="'/api/invoice-info/search-condition'" :searchDataApi="'/api/invoice-info/list'" :apiParam="para"></ct-searchlist>-->
3
+ <ct-searchlist :searchConditionApi="'/api/third-dept-tran/tran-list/layout'" :searchDataApi="'/api/third-dept-tran/tran-list'"></ct-searchlist>
4
+ <!-- <ct-searchlist :searchConditionApi="'/PropertyRETList/getLayoutOfSearch'" :searchDataApi="'/PropertyRETList/getList'"></ct-searchlist> -->
5
+ <!--<ct-searchlist :searchConditionApi="'/api/invoice-info/search-condition'" :searchDataApi="'/api/invoice-info/list'" :searchDataStatisticsApi="'api/ContractList/GetLayoutOfStatisticsTool'" :apiParam="para"></ct-searchlist>-->
5
6
  <ct-dialog-list></ct-dialog-list>
6
7
  </div>
7
8
  </template>
@@ -12,7 +13,8 @@
12
13
  name: 'App',
13
14
  data() {
14
15
  return {
15
- para: { agentId: "1424932685198864386", estateId: "L201402181627000007233", estateName: "271医院宿舍区", pageOnly: "true", pageTitle: "销控房源列表" }
16
+ //para: { agentId: "1424932685198864386", estateId: "L201402181627000007233", estateName: "271医院宿舍区", pageOnly: "true", pageTitle: "销控房源列表" }
17
+ para: {}
16
18
  }
17
19
  },
18
20
  mounted() {
@@ -0,0 +1,55 @@
1
+ <template>
2
+ <div id="app-Tree" style="height:100%;position: fixed;">
3
+ <el-container style="height: 100vh;width:100vw; border: 1px solid #eee">
4
+ <el-aside width="200px" style="background-color: rgb(238, 241, 246)">
5
+ <ct-tree :flagsearch="true" :searchConditionApi="'/SystemParameterCatalogList/getLayoutOfSearch'" :searchDataApi="'/SystemParameterCatalogList/getList'" @loaded="loaded"></ct-tree>
6
+ </el-aside>
7
+ <el-main v-if="isShowSearchlist">
8
+ <ct-searchlist :searchConditionApi="'/SystemParameterCatalogList/getLayoutOfSearch'" :searchDataApi="'/SystemParameterCatalogList/getList'" :api-param="apiParam"></ct-searchlist>
9
+ </el-main>
10
+ </el-container>
11
+ </div>
12
+ </template>
13
+
14
+ <script>
15
+ import Vue from 'vue'
16
+ export default {
17
+ name: 'Tree',
18
+ data() {
19
+ return {
20
+ isShowSearchlist: false,
21
+ apiParam: {}
22
+ }
23
+ },
24
+ methods: {
25
+ loaded(data) {
26
+ var self = this;
27
+ self.isShowSearchlist = false;
28
+ self.apiParam = data;
29
+ self.$nextTick(() => {
30
+ self.isShowSearchlist = true;
31
+ });
32
+ }
33
+ },
34
+ mounted() {
35
+ },
36
+ created() {
37
+ //模拟客户端自定义方法
38
+ Vue.prototype.$clientScript = {
39
+ open: function (data) {
40
+ window.open("http://wwww.baidu.com?test1=" + data.vContractID + "&test2=" + data.vReportNo, "_blank");
41
+ }
42
+ }
43
+ },
44
+ }
45
+ </script>
46
+ <style>
47
+ body {
48
+ height: 100%;
49
+ overflow: hidden;
50
+ }
51
+
52
+ html {
53
+ height: 100%;
54
+ }
55
+ </style>
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -1,11 +1,11 @@
1
1
  <template>
2
- <div class="ct-comfirm-content">
2
+ <div class="ct-comfirm-content max-comfirm-content">
3
3
  <div style="margin-top: 15px;margin-bottom: 15px;min-width: 150px;text-align: center;">
4
4
  <span>{{text}}</span>
5
5
  </div>
6
6
  <div style="text-align:center;width:100%">
7
7
  <el-button @click="clickHandler($event,true)" type="primary" size="mini">{{options.confirmButtonText||'确定'}}</el-button>
8
- <el-button v-if="options.flagShowcCancelButton===undfind || options.flagShowcCancelButton==='1'" @click="clickHandler($event,false)" size="mini">{{options.cancelButtonText||'取消'}}</el-button>
8
+ <el-button v-if="options.flagShowcCancelButton===undefined || options.flagShowcCancelButton==='1'" @click="clickHandler($event,false)" size="mini">{{options.cancelButtonText||'取消'}}</el-button>
9
9
  </div>
10
10
  </div>
11
11
  </template>
@@ -340,8 +340,8 @@ html {
340
340
  *display: inline;
341
341
  zoom: 1;
342
342
  height: 24px;
343
+ line-height: 24px;
343
344
  float: left;
344
- margin-top: 4px;
345
345
  }
346
346
 
347
347
  .ct-table table {
@@ -417,12 +417,10 @@ html {
417
417
 
418
418
 
419
419
  /*主要按钮*/
420
- /* .el-button{
421
- color: #fff;
422
- background-color: #b3caf5;
420
+ .el-button{
423
421
  border: none;
424
422
  }
425
- .el-button:active {
423
+ /*.el-button:active {
426
424
  background-color: #b3caf5;
427
425
  border: none;
428
426
  color: #fff;
@@ -434,49 +432,49 @@ html {
434
432
 
435
433
  } */
436
434
  .el-button--primary {
437
- background-color: #ee5d56;
438
- border-color: #ee5d56;
435
+ background-color: #EE6B6B ;
436
+ /* border-color: #EE6B6B ; */
439
437
  }
440
438
  .el-button--primary:hover ,.el-button--warning:hover{
441
439
  background: #f1706b;
442
- border-color: #f1706b;
440
+ /* border-color: #f1706b; */
443
441
  color: #FFF;
444
442
  }
445
443
  .el-button--primary:focus {
446
444
  background: #de534d;
447
- border-color: #de534d;
445
+ /* border-color: #de534d; */
448
446
  color: #FFF;
449
447
  }
450
448
  .el-button--success {
451
- background-color: #ee5d56;
452
- border-color: #ee5d56;
449
+ background-color: #EE6B6B ;
450
+ /* border-color: #EE6B6B ; */
453
451
  }
454
452
 
455
453
  .el-button--success:focus {
456
454
  background: #de534d;
457
- border-color: #de534d;
455
+ /* border-color: #de534d; */
458
456
  color: #FFF;
459
457
  }
460
458
  .el-button--success:hover {
461
459
  background: #f1706b;
462
- border-color: #f1706b;
460
+ /* border-color: #f1706b; */
463
461
  color: #FFF;
464
462
  }
465
463
  /* 工具栏按钮置灰 */
466
- .ct-tableToolbar .el-button--primary {
467
- border: 1px solid #ced0d9!important;
468
- background: -webkit-linear-gradient(top, #fff, #f2f4f7);
469
- color: #333!important;
470
- }
471
- .ct-tableToolbar .el-button--primary:hover{
472
- color: #666!important;
473
- border: 1px solid #ced0d9!important;
474
- background: linear-gradient(#F4F4F5,#DFE3F1)!important;
475
- }
476
- .ct-tableToolbar .el-button--primary:focus{
477
- border: 1px solid #ced0d9!important;
478
- background: -webkit-linear-gradient(top, #fff, #f2f4f7)!important;
479
- color: #333!important;
464
+ .ct-tableToolbar button {
465
+ border: 1px solid #ced0d9;
466
+ background-color: #f2f4f7;
467
+ color: #333;
468
+ }
469
+ .ct-tableToolbar button:hover{
470
+ color: #666;
471
+ border: 1px solid #ced0d9;
472
+ background: linear-gradient(#F4F4F5,#DFE3F1);
473
+ }
474
+ .ct-tableToolbar button:focus{
475
+ border: 1px solid #ced0d9;
476
+ background: -webkit-linear-gradient(top, #fff, #f2f4f7);
477
+ color: #333;
480
478
  }
481
479
  .ct-option.el-tag.el-tag--danger {
482
480
  background-color: #fff;
@@ -554,23 +552,23 @@ html {
554
552
  width: 100%;
555
553
  height: 100%;
556
554
  position: inherit;
557
- background: #c8c8c8;
558
- padding: 10px;
555
+ background: #eceff2;
556
+ padding: 0px;
559
557
  }
560
558
 
561
559
  .st-serach-screen {
562
560
  background: #fff;
563
561
  width: 100%;
564
562
  position: relative;
565
- border-radius:3px;
563
+ border-radius:6px;
566
564
  }
567
565
 
568
566
  .ct-searchtable{
569
567
  margin-top: 10px;
570
- padding: 0 0px 0 0px;
568
+ padding: 20px 0px 0 0px;
571
569
  background: #fff;
572
570
  -webkit-box-sizing: border-box;
573
- border-radius:3px;
571
+ border-radius:6px;
574
572
 
575
573
  }
576
574
 
@@ -648,7 +646,7 @@ html {
648
646
  min-width: initial!important;
649
647
  }
650
648
  .ct-ptb5{
651
- padding: 5px 0;
649
+ padding: 10px;
652
650
  }
653
651
  /* 导航栏经过选中时 */
654
652
  .el-col .ct-search-list{
@@ -712,4 +710,7 @@ html {
712
710
  .ct-right-10{
713
711
  right: 10px !important;
714
712
  }
713
+ .ct-table-content{
714
+ padding: 0 15px;
715
+ }
715
716
 
@@ -0,0 +1,145 @@
1
+
2
+ /* 查询搜索 */
3
+ .max-search-btn{
4
+ height: 26px;
5
+ background: #EE6B6B;
6
+ box-shadow: 0px 2px 4px 0px rgba(238,107,107,0.25);
7
+ border-color: #EE6B6B;
8
+ border-radius: 6px;
9
+
10
+ }
11
+ .max-search-btn:hover{
12
+ background-color:#FF9393;
13
+ border-color: #FF9393;
14
+ }
15
+ .max-search-btn:active,.max-search-btn:focus{
16
+ background-color: #B33136;
17
+ border-color: #B33136;
18
+ }
19
+ /* 重置按钮 */
20
+ .max-reset-btn{
21
+ height: 26px;
22
+ background: #519DA6;
23
+ border-color: #519DA6;
24
+ box-shadow: 0px 2px 4px 0px rgba(82,157,166,0.25);
25
+ border-radius: 6px;
26
+ }
27
+ .max-reset-btn:hover{
28
+ background-color:#85CAD2;
29
+ border-color: #85CAD2;
30
+ }
31
+ .max-reset-btn:active.max-reset-btn:focus{
32
+ background-color: #35838C;
33
+ border-color: #35838C;
34
+ }
35
+ /* 工具栏按钮 */
36
+ .max-ToolbarButton{
37
+ margin-right: 10px!important;
38
+ }
39
+ .max-ToolbarButton .max-btn-gray{
40
+ height: 26px;
41
+ background: #FFFFFF;
42
+ border: 1px solid #CCCCCC;
43
+ border-radius: 6px;
44
+ }
45
+ /* 弹层新增按钮 */
46
+ .max-btn-add button{ /*list-button*/
47
+ height: 26px;
48
+ background: #EE6B6B;
49
+ box-shadow: 0px 2px 4px 0px rgba(238,107,107,0.25);
50
+ border-radius: 6px;
51
+ }
52
+ .max-btn-add button:hover{
53
+ background-color:#FF9393;
54
+ border-color: #FF9393;
55
+ }
56
+ .max-btn-add button:focus,.max-btn-add button:active{
57
+ background-color: #B33136;
58
+ border-color: #B33136;
59
+ }
60
+ .max-comfirm-content button{
61
+ height: 26px;
62
+ border-radius: 6px;
63
+ }
64
+ /* 弹层内属性、输入框 */
65
+ .max-input-group{/*elinput-group*/
66
+ border-top-left-radius: 6px;
67
+ border-bottom-left-radius: 6px;
68
+ line-height: 24px;
69
+ }
70
+ .max-flex-div{
71
+ display: flex;
72
+ }
73
+
74
+ .max-input input{ /*el-input__inner*/
75
+ height: 26px!important;
76
+ line-height: 26px!important;
77
+ border-radius: 6px!important;
78
+ background: #FFFFFF;
79
+ border: 1px solid #E0E0E0;
80
+ padding: 0 15px 0 5px;
81
+ }
82
+ .inputError .el-input-group__prepend{
83
+ color: #ff5b5b!important;
84
+ }
85
+
86
+ /* 弹层表格样式 */
87
+ .max-table--border{
88
+ border-left: 1px solid #F0F0F0;
89
+ border-right: none!important;
90
+ border-bottom: none!important;
91
+ }
92
+ /* 高级查询样式 */
93
+ .max-seachpopper .el-popper{ /*SeachScreenPop*/
94
+ padding: 5px 10px 10px 10px!important;
95
+ background-color: #fff !important;
96
+ margin-top: -5px;
97
+ border-bottom-left-radius: 6px !important;
98
+ border-bottom-right-radius: 6px !important;
99
+ -webkit-box-shadow: #cfcece 0px 7px 9px 0px!important;
100
+
101
+ }
102
+ .ct-checkbox .ct-checkbox-mian{
103
+ padding-left: 0!important;
104
+ }
105
+ .cover-list-item .el-checkbox{
106
+ margin-right: 10px!important;
107
+ }
108
+
109
+ .max-open{
110
+ background: url(../../assets/max-open.png)no-repeat;
111
+ background-size: 100% 100%;
112
+ height: 12px;
113
+ width: 14px;
114
+ display: inline-block;
115
+ float: left;
116
+ margin-right: 2px;
117
+ }
118
+ .max-fold{
119
+ background: url(../../assets/max-fold.png)no-repeat;
120
+ background-size: 100% 100%;
121
+ height: 12px;
122
+ width: 14px;
123
+ display: inline-block;
124
+ float: left;
125
+ margin-right: 2px;
126
+ }
127
+
128
+ .ct-tableParent::-webkit-scrollbar-thumb{
129
+ display: block;
130
+ background-color:#bebebe;
131
+ height:5px;
132
+ border-radius:4px
133
+ }
134
+ .ct-tableParent::-webkit-scrollbar{
135
+ display: block;
136
+ width:6px;
137
+ height:6px;
138
+ background-color:#f1f1f1
139
+ }
140
+ .ct-table .cell:last-child{
141
+ white-space: nowrap;
142
+ }
143
+ .max-cover-list-item .el-input__icon{
144
+ line-height: 40px!important;
145
+ }
@@ -1,8 +1,26 @@
1
1
  <template>
2
- <el-button v-if="!model.isImport"
2
+ <el-dropdown v-if="model.isDropdown"
3
+ trigger="click"
4
+ v-bind="model.attrs"
5
+ placement="bottom"
6
+ @click.native="dropClick"
7
+ @command="commandClick"
8
+ :disabled="model.disabled">
9
+ <el-button type="primary">
10
+ {{model.label}}<i class="el-icon-arrow-down el-icon--right"></i>
11
+ </el-button>
12
+ <el-dropdown-menu slot="dropdown">
13
+ <el-dropdown-item v-for="item in model.elementOptions" :key="item.code" :command="item.code">{{item.name}}</el-dropdown-item>
14
+ </el-dropdown-menu>
15
+ </el-dropdown>
16
+ <el-button v-else-if="!model.isImport"
3
17
  :type="model.isHyperLink ? 'text' : 'primary'"
4
18
  v-bind="model.attrs" @click="$emit('click',model)"
5
- :disabled="model.disabled">{{model.label}}</el-button>
19
+ :style="{color:model.textColor,backgroundColor:model.bgColor,borderColor:model.borderColor}"
20
+ :icon="model.icon"
21
+ :disabled="model.disabled">
22
+ <!-- <i v-if="model.isShowIocn" :class="model.iconClass"></i> -->
23
+ {{model.label}}</el-button>
6
24
  <el-upload v-else
7
25
  :action="model.action"
8
26
  v-bind="model.attrs"
@@ -22,7 +40,8 @@
22
40
  name: 'ct-btn',
23
41
  props: {
24
42
  vmodel: Object,
25
- fileData: Object
43
+ fileData: Object,
44
+ optionApi:String,
26
45
  },
27
46
  mixins: [dynamicElement],
28
47
  data: function () {
@@ -63,7 +82,19 @@
63
82
  },
64
83
  handleAvatarError(info) {
65
84
  this.$message.warning("失败,请重试");
66
- }
85
+ },
86
+ dropClick(event) {
87
+ var self = this;
88
+ this.$nextTick(function () {
89
+ if (self.optionApi) {
90
+ self.model.getOptions(self.optionApi);
91
+ }
92
+ });
93
+ },
94
+ commandClick(code){
95
+ this.model.selectOptionCode=code;
96
+ this.$emit('click', this.model);
97
+ },
67
98
  }
68
99
  }
69
100
  </script>
@@ -12,7 +12,7 @@
12
12
  </el-checkbox-group>
13
13
  </span>
14
14
 
15
- <span v-if="!model.lock" class="cover-list-item-span">
15
+ <span v-if="!model.lock" class="cover-list-item-span max-cover-list-item">
16
16
  <i class="el-input__icon el-icon-circle-close" @click="clearClickHandle"></i>
17
17
  </span>
18
18
  </div>
@@ -0,0 +1,11 @@
1
+ import dynamicDetail from './src/dynamicDetail'
2
+
3
+ dynamicDetail.install = function (Vue) {
4
+ Vue.component(dynamicDetail.name, dynamicDetail);
5
+ }
6
+
7
+ if (typeof window !== 'undefined' && window.Vue) {
8
+ window.Vue.use(dynamicDetail);
9
+ }
10
+
11
+ export default dynamicDetail;
@@ -0,0 +1,39 @@
1
+ <template>
2
+ <div>
3
+ <ct-PropertyDetailOFI class="ct-PropertyDetailOFI" v-if="pageType=='PropertyDetailOFI'"></ct-PropertyDetailOFI>
4
+ <ct-PropertyDetailRET class="ct-PropertyDetailRET" v-if="pageType=='PropertyDetailRET'"></ct-PropertyDetailRET>
5
+ </div>
6
+ </template>
7
+
8
+ <script>
9
+ import dynamicPropertyDetailOFI from './dynamicPropertyDetailOFI'
10
+ import dynamicPropertyDetailRET from './dynamicPropertyDetailRET'
11
+ export default {
12
+ name: 'ct-Detail',
13
+ components: {
14
+ 'ct-PropertyDetailOFI': dynamicPropertyDetailOFI,
15
+ 'ct-PropertyDetailRET': dynamicPropertyDetailRET,
16
+ },
17
+ props: {
18
+ vmodel: Object,
19
+ api: String,
20
+ pageType: String,
21
+ },
22
+ data() {
23
+ return {
24
+ model:null,
25
+ }
26
+ },
27
+ created() {
28
+ this.model = this.vmodel;
29
+ },
30
+ methods: {
31
+ }
32
+ }
33
+ </script>
34
+ <style>
35
+
36
+ </style>
37
+
38
+
39
+