vue2-client 1.2.0 → 1.2.1

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 (120) hide show
  1. package/README.md +65 -65
  2. package/babel.config.js +1 -0
  3. package/docs/notice.md +24 -0
  4. package/index.js +28 -28
  5. package/package.json +1 -1
  6. package/src/App.vue +93 -93
  7. package/src/base-client/all.js +57 -57
  8. package/src/base-client/components/common/CreateQuery/CreateQuery.vue +1159 -1159
  9. package/src/base-client/components/common/CreateQuery/index.md +42 -42
  10. package/src/base-client/components/common/CreateSimpleFormQuery/CreateSimpleFormQuery.vue +540 -540
  11. package/src/base-client/components/common/CreateSimpleFormQuery/index.md +42 -42
  12. package/src/base-client/components/common/CustomColumnsDrawer/index.md +46 -46
  13. package/src/base-client/components/common/FormGroupEdit/FormGroupEdit.vue +150 -150
  14. package/src/base-client/components/common/FormGroupEdit/index.md +43 -43
  15. package/src/base-client/components/common/FormGroupQuery/index.md +43 -43
  16. package/src/base-client/components/common/XAddForm/XAddForm.vue +323 -323
  17. package/src/base-client/components/common/XAddForm/index.md +60 -60
  18. package/src/base-client/components/common/XBadge/index.md +39 -39
  19. package/src/base-client/components/common/XCard/index.md +43 -43
  20. package/src/base-client/components/common/XForm/XForm.vue +275 -275
  21. package/src/base-client/components/common/XForm/XFormItem.vue +217 -217
  22. package/src/base-client/components/common/XForm/index.md +196 -196
  23. package/src/base-client/components/common/XFormCol/index.md +35 -35
  24. package/src/base-client/components/common/XFormTable/XFormTable.vue +405 -405
  25. package/src/base-client/components/common/XFormTable/index.md +89 -89
  26. package/src/base-client/components/common/XTable/XTable.vue +262 -262
  27. package/src/base-client/components/common/XTable/index.md +255 -255
  28. package/src/base-client/components/common/XTreeOne/XTreeOne.vue +105 -105
  29. package/src/base-client/components/iot/CustomerDetailsView/CustomerDetailsView.vue +226 -226
  30. package/src/base-client/components/iot/CustomerDetailsView/index.md +41 -41
  31. package/src/base-client/components/iot/DataAnalysisUser/DataAnalysisUser.vue +127 -127
  32. package/src/base-client/components/iot/DataAnalysisViewGD/DataAnalysisViewGD.vue +548 -548
  33. package/src/base-client/components/iot/DeviceBrandDetailsView/DeviceBrandDetailsView.vue +453 -453
  34. package/src/base-client/components/iot/DeviceDetailsView/DeviceDetailsView.vue +231 -231
  35. package/src/base-client/components/iot/DeviceDetailsView/index.md +43 -43
  36. package/src/base-client/components/iot/DeviceDetailsView/part/DeviceDetailsCount.vue +330 -330
  37. package/src/base-client/components/iot/DeviceDetailsView/part/DeviceDetailsException.vue +57 -57
  38. package/src/base-client/components/iot/DeviceDetailsView/part/DeviceDetailsInstruct.vue +122 -122
  39. package/src/base-client/components/iot/DeviceDetailsView/part/DeviceDetailsInstructOperate.vue +122 -122
  40. package/src/base-client/components/iot/DeviceDetailsView/part/DeviceDetailsMain.vue +225 -225
  41. package/src/base-client/components/iot/DeviceDetailsView/part/DeviceDetailsRead.vue +135 -135
  42. package/src/base-client/components/iot/DeviceTypeDetailsView/DeviceTypeDetailsView.vue +277 -277
  43. package/src/base-client/components/iot/InstructDetailsView/InstructDetailsView.vue +472 -472
  44. package/src/base-client/components/iot/InstructDetailsView/index.md +45 -45
  45. package/src/base-client/components/iot/LogDetailsView/LogDetailsView.vue +380 -380
  46. package/src/base-client/components/iot/LogDetailsView/index.md +43 -43
  47. package/src/base-client/components/iot/MeterDetailsView/MeterDetailsView.vue +360 -360
  48. package/src/base-client/components/iot/MeterDetailsView/index.md +43 -43
  49. package/src/base-client/components/iot/MeterDetailsView/part/MeterDetailsCount.vue +335 -335
  50. package/src/base-client/components/iot/MeterDetailsView/part/MeterDetailsException.vue +185 -185
  51. package/src/base-client/components/iot/MeterDetailsView/part/MeterDetailsHandPlan.vue +292 -292
  52. package/src/base-client/components/iot/MeterDetailsView/part/MeterDetailsInstruct.vue +237 -237
  53. package/src/base-client/components/iot/MeterDetailsView/part/MeterDetailsMain.vue +257 -257
  54. package/src/base-client/components/iot/MeterDetailsView/part/MeterDetailsSellGas.vue +190 -190
  55. package/src/base-client/components/iot/WebmeterAnalysisView/WebmeterAnalysisView.vue +723 -723
  56. package/src/base-client/components/iot/WebmeterAnalysisView/index.md +48 -48
  57. package/src/base-client/components/system/DictionaryDetailsView/DictionaryDetailsView.vue +232 -232
  58. package/src/base-client/components/system/DictionaryDetailsView/index.md +41 -41
  59. package/src/base-client/components/system/QueryParamsDetailsView/QueryParamsDetailsView.vue +248 -248
  60. package/src/base-client/components/ticket/EmployeeDetailsView/EmployeeDetailsView.vue +406 -406
  61. package/src/base-client/components/ticket/TicketDetailsView/TicketDetailsView.vue +486 -486
  62. package/src/base-client/components/ticket/TicketDetailsView/part/TicketDetailsFlow.vue +184 -184
  63. package/src/base-client/components/ticket/TicketSubmitSuccessView/TicketSubmitSuccessView.vue +303 -303
  64. package/src/base-client/plugins/AppData.js +69 -69
  65. package/src/base-client/plugins/GetLoginInfoService.js +221 -221
  66. package/src/base-client/plugins/index.js +21 -21
  67. package/src/bootstrap.js +27 -27
  68. package/src/components/Ellipsis/Ellipsis.vue +64 -64
  69. package/src/components/Ellipsis/index.md +38 -38
  70. package/src/components/NumberInfo/index.md +43 -43
  71. package/src/components/STable/README.md +341 -341
  72. package/src/components/Trend/index.md +45 -45
  73. package/src/components/cache/AKeepAlive.js +172 -172
  74. package/src/components/checkbox/index.js +7 -7
  75. package/src/components/index.js +36 -36
  76. package/src/components/menu/menu.js +273 -273
  77. package/src/components/setting/Setting.vue +237 -237
  78. package/src/components/table/advance/AdvanceTable.vue +275 -275
  79. package/src/components/transition/PageToggleTransition.vue +97 -97
  80. package/src/layouts/CommonLayout.vue +42 -42
  81. package/src/layouts/PageLayout.vue +151 -151
  82. package/src/layouts/SinglePageView.vue +74 -74
  83. package/src/layouts/header/AdminHeader.vue +109 -109
  84. package/src/layouts/header/HeaderAvatar.vue +60 -60
  85. package/src/layouts/header/HeaderNotice.vue +97 -97
  86. package/src/layouts/tabs/TabsHead.vue +190 -190
  87. package/src/layouts/tabs/TabsView.vue +355 -355
  88. package/src/main.js +20 -20
  89. package/src/mock/goods/index.js +108 -108
  90. package/src/mock/index.js +12 -12
  91. package/src/mock/project/index.js +17 -17
  92. package/src/mock/user/current.js +13 -13
  93. package/src/mock/user/login.js +39 -39
  94. package/src/mock/workplace/index.js +15 -15
  95. package/src/pages/exception/403.vue +25 -25
  96. package/src/pages/exception/404.vue +25 -25
  97. package/src/pages/exception/500.vue +25 -25
  98. package/src/pages/login/Login.vue +194 -194
  99. package/src/pages/report/ReportTableHome.vue +28 -28
  100. package/src/pages/resourceManage/resourceManageMain.vue +55 -55
  101. package/src/pages/system/applyInstallView/Core.vue +570 -570
  102. package/src/pages/system/applyInstallView/index.vue +34 -34
  103. package/src/pages/system/dictionary/index.vue +41 -41
  104. package/src/pages/system/queryParams/index.vue +41 -41
  105. package/src/router/async/config.async.js +25 -25
  106. package/src/router/async/router.map.js +59 -59
  107. package/src/router/guards.js +104 -104
  108. package/src/router/index.js +27 -27
  109. package/src/services/api/common.js +39 -39
  110. package/src/services/api/restTools.js +23 -23
  111. package/src/services/dataSource.js +12 -12
  112. package/src/services/user.js +34 -34
  113. package/src/store/modules/setting.js +114 -114
  114. package/src/utils/i18n.js +80 -80
  115. package/src/utils/indexedDB.js +146 -146
  116. package/src/utils/request.js +197 -197
  117. package/src/utils/routerUtil.js +15 -2
  118. package/tests/unit/ReportTable.spec.js +15 -15
  119. package/vue.config.js +153 -153
  120. package/webpack.config.js +12 -12
@@ -1,248 +1,248 @@
1
- <template>
2
- <div>
3
- <a-drawer
4
- title="查询配置详情"
5
- placement="right"
6
- :width="isMobile ? screenWidth : screenWidth * 0.85"
7
- :visible="visible"
8
- @close="onClose"
9
- >
10
- <create-query
11
- :to-edit-json="getColumnJson()"
12
- :visible.sync="createQueryVisible"
13
- @saveQueryParams="saveQueryParams"
14
- />
15
- <a-spin :spinning="loadDetails">
16
- <a-page-header :title="details.f_name+(details.f_remark ? '(' + details.f_remark + ')' : '')">
17
- <div class="row">
18
- <div class="content">
19
- <a-descriptions size="small" :column="isMobile ? 1 : 2">
20
- <a-descriptions-item label="所属模块">{{ details.f_module }}</a-descriptions-item>
21
- <a-descriptions-item label="创建人">{{ details.f_inputtor }}</a-descriptions-item>
22
- <a-descriptions-item label="创建时间">{{ details.f_input_date }}</a-descriptions-item>
23
- <a-descriptions-item label="描述">{{ details.f_remark }}</a-descriptions-item>
24
- </a-descriptions>
25
- </div>
26
- </div>
27
- <!-- actions -->
28
- <template v-slot:extra>
29
- <a-button-group style="margin-right: 4px;">
30
- <a-button type="dashed" @click="initView" :loading="loadDetails">刷新</a-button>
31
- </a-button-group>
32
- <a-button-group style="margin-right: 4px;">
33
- </a-button-group>
34
- </template>
35
- <template slot="footer">
36
- <a-tabs :default-active-key="tabActiveKey" :activeKey="tabActiveKey" @change="handleTabChange" style="margin-bottom: 23px;">
37
- <template v-for="value in tabList">
38
- <a-tab-pane :key="value.key" :tab="value.tab"/>
39
- </template>
40
- </a-tabs>
41
- <div v-if="!loadDetails">
42
- <div v-if="tabActiveKey === '1'">
43
- <a-button type="primary" @click="toCreateQuery">
44
- <a-icon :style="iconStyle" type="api"/>编辑查询配置
45
- </a-button>
46
- <a-card title="查询配置预览" :bordered="true" size="small" style="margin-top: 20px;">
47
- <json-viewer :copyable="{copyText: '复制', copiedText: '已复制'}" :value="getColumnJson()" :expand-depth="parseInt('100')" style="overflow: auto;max-height: 440px"></json-viewer>
48
- </a-card>
49
- </div>
50
- </div>
51
- </template>
52
- </a-page-header>
53
- </a-spin>
54
- </a-drawer>
55
- </div>
56
- </template>
57
-
58
- <script>
59
- import JsonViewer from 'vue-json-viewer'
60
- import { mapState, mapGetters } from 'vuex'
61
- import { post } from '@vue2-client/services/api/restTools'
62
- import XFormTable from '@vue2-client/base-client/components/common/XFormTable/XFormTable'
63
- import { QueryParamsDetailsViewApi } from '@vue2-client/services/api/QueryParamsDetailsViewApi'
64
-
65
- export default {
66
- name: 'DeviceTypeDetailsView',
67
- components: {
68
- JsonViewer,
69
- XFormTable
70
- },
71
- data () {
72
- return {
73
- // 页面宽度
74
- screenWidth: document.documentElement.clientWidth,
75
- // Tab页签
76
- tabActiveKey: '1',
77
- // 图标样式
78
- iconStyle: {
79
- position: 'relative',
80
- top: '1px'
81
- },
82
- // 是否显示生成查询配置抽屉
83
- createQueryVisible: false,
84
- // 设备类型详情
85
- details: {
86
- f_module: '',
87
- f_name: '',
88
- f_remark: '',
89
- f_content: '',
90
- f_input_date: '',
91
- f_inputtor: ''
92
- },
93
- tabList: [
94
- { key: '1', tab: '编辑查询配置' }
95
- ],
96
- // 详情加载
97
- loadDetails: false
98
- }
99
- },
100
- mounted () {
101
- this.initView()
102
- },
103
- computed: {
104
- ...mapGetters(['account/user']),
105
- ...mapState('account', { currUser: 'user' }),
106
- ...mapState('setting', ['isMobile'])
107
- },
108
- props: {
109
- id: {
110
- type: String,
111
- required: true
112
- },
113
- visible: {
114
- type: Boolean,
115
- default: false
116
- }
117
- },
118
- methods: {
119
- // 初始化组件
120
- initView () {
121
- this.tabActiveKey = '1'
122
- this.getDetails(this.id)
123
- },
124
- toCreateQuery () {
125
- this.createQueryVisible = true
126
- },
127
- getColumnJson () {
128
- if (this.details.f_content) {
129
- return JSON.parse(this.details.f_content)
130
- } else {
131
- return {}
132
- }
133
- },
134
- onClose () {
135
- this.$emit('update:visible', false)
136
- },
137
- // 获取详情信息
138
- getDetails (id) {
139
- this.loadDetails = true
140
- return post(QueryParamsDetailsViewApi.getQueryParamsDetails, {
141
- id: id
142
- }).then(res => {
143
- this.details = res
144
- this.loadDetails = false
145
- }, err => {
146
- this.loadDetails = false
147
- console.error(err)
148
- })
149
- },
150
- // 存储查询配置信息
151
- saveQueryParams (source) {
152
- return post('/webmeterapi/updateQueryParamsData', {
153
- id: this.id,
154
- source: source
155
- }).then(res => {
156
- this.$message.success('保存查询配置成功')
157
- this.getDetails(this.id)
158
- }, err => {
159
- console.error(err)
160
- })
161
- },
162
- // Tab切换
163
- handleTabChange (key) {
164
- this.tabActiveKey = key
165
- }
166
- },
167
- watch: {
168
- 'visible' (val) {
169
- if (val) {
170
- this.initView()
171
- }
172
- }
173
- }
174
- }
175
- </script>
176
-
177
- <style lang="less" scoped>
178
- .business {
179
- color: #ffffff;
180
- }
181
- .business:enabled:hover {
182
- background-color: #85CE61 !important;
183
- border-color: #85CE61 !important;
184
- }
185
- .business:enabled {
186
- background-color: #67c23a;
187
- border-color: #67c23a;
188
- }
189
- .business:disabled {
190
- color: rgba(0, 0, 0, 0.25);
191
- }
192
- .detail-layout {
193
- margin-left: 44px;
194
- }
195
- .text {
196
- color: rgba(0, 0, 0, .45);
197
- }
198
-
199
- .heading {
200
- color: rgba(0, 0, 0, .85);
201
- font-size: 20px;
202
- }
203
-
204
- .no-data {
205
- color: rgba(0, 0, 0, .25);
206
- text-align: center;
207
- line-height: 64px;
208
- font-size: 16px;
209
-
210
- i {
211
- font-size: 24px;
212
- margin-right: 16px;
213
- position: relative;
214
- top: 3px;
215
- }
216
- }
217
-
218
- .mobile {
219
- .detail-layout {
220
- margin-left: unset;
221
- }
222
- .text {
223
-
224
- }
225
- .status-list {
226
- text-align: left;
227
- }
228
- }
229
-
230
- .row {
231
- display: flex;
232
-
233
- .content {
234
- -webkit-box-flex: 1;
235
- flex: auto;
236
- -ms-flex: auto;
237
- }
238
-
239
- .extra {
240
- flex: 0 1 auto;
241
- -webkit-box-flex: 0;
242
- -ms-flex: 0 1 auto;
243
- min-width: 242px;
244
- margin-left: 88px;
245
- text-align: right;
246
- }
247
- }
248
- </style>
1
+ <template>
2
+ <div>
3
+ <a-drawer
4
+ title="查询配置详情"
5
+ placement="right"
6
+ :width="isMobile ? screenWidth : screenWidth * 0.85"
7
+ :visible="visible"
8
+ @close="onClose"
9
+ >
10
+ <create-query
11
+ :to-edit-json="getColumnJson()"
12
+ :visible.sync="createQueryVisible"
13
+ @saveQueryParams="saveQueryParams"
14
+ />
15
+ <a-spin :spinning="loadDetails">
16
+ <a-page-header :title="details.f_name+(details.f_remark ? '(' + details.f_remark + ')' : '')">
17
+ <div class="row">
18
+ <div class="content">
19
+ <a-descriptions size="small" :column="isMobile ? 1 : 2">
20
+ <a-descriptions-item label="所属模块">{{ details.f_module }}</a-descriptions-item>
21
+ <a-descriptions-item label="创建人">{{ details.f_inputtor }}</a-descriptions-item>
22
+ <a-descriptions-item label="创建时间">{{ details.f_input_date }}</a-descriptions-item>
23
+ <a-descriptions-item label="描述">{{ details.f_remark }}</a-descriptions-item>
24
+ </a-descriptions>
25
+ </div>
26
+ </div>
27
+ <!-- actions -->
28
+ <template v-slot:extra>
29
+ <a-button-group style="margin-right: 4px;">
30
+ <a-button type="dashed" @click="initView" :loading="loadDetails">刷新</a-button>
31
+ </a-button-group>
32
+ <a-button-group style="margin-right: 4px;">
33
+ </a-button-group>
34
+ </template>
35
+ <template slot="footer">
36
+ <a-tabs :default-active-key="tabActiveKey" :activeKey="tabActiveKey" @change="handleTabChange" style="margin-bottom: 23px;">
37
+ <template v-for="value in tabList">
38
+ <a-tab-pane :key="value.key" :tab="value.tab"/>
39
+ </template>
40
+ </a-tabs>
41
+ <div v-if="!loadDetails">
42
+ <div v-if="tabActiveKey === '1'">
43
+ <a-button type="primary" @click="toCreateQuery">
44
+ <a-icon :style="iconStyle" type="api"/>编辑查询配置
45
+ </a-button>
46
+ <a-card title="查询配置预览" :bordered="true" size="small" style="margin-top: 20px;">
47
+ <json-viewer :copyable="{copyText: '复制', copiedText: '已复制'}" :value="getColumnJson()" :expand-depth="parseInt('100')" style="overflow: auto;max-height: 440px"></json-viewer>
48
+ </a-card>
49
+ </div>
50
+ </div>
51
+ </template>
52
+ </a-page-header>
53
+ </a-spin>
54
+ </a-drawer>
55
+ </div>
56
+ </template>
57
+
58
+ <script>
59
+ import JsonViewer from 'vue-json-viewer'
60
+ import { mapState, mapGetters } from 'vuex'
61
+ import { post } from '@vue2-client/services/api/restTools'
62
+ import XFormTable from '@vue2-client/base-client/components/common/XFormTable/XFormTable'
63
+ import { QueryParamsDetailsViewApi } from '@vue2-client/services/api/QueryParamsDetailsViewApi'
64
+
65
+ export default {
66
+ name: 'DeviceTypeDetailsView',
67
+ components: {
68
+ JsonViewer,
69
+ XFormTable
70
+ },
71
+ data () {
72
+ return {
73
+ // 页面宽度
74
+ screenWidth: document.documentElement.clientWidth,
75
+ // Tab页签
76
+ tabActiveKey: '1',
77
+ // 图标样式
78
+ iconStyle: {
79
+ position: 'relative',
80
+ top: '1px'
81
+ },
82
+ // 是否显示生成查询配置抽屉
83
+ createQueryVisible: false,
84
+ // 设备类型详情
85
+ details: {
86
+ f_module: '',
87
+ f_name: '',
88
+ f_remark: '',
89
+ f_content: '',
90
+ f_input_date: '',
91
+ f_inputtor: ''
92
+ },
93
+ tabList: [
94
+ { key: '1', tab: '编辑查询配置' }
95
+ ],
96
+ // 详情加载
97
+ loadDetails: false
98
+ }
99
+ },
100
+ mounted () {
101
+ this.initView()
102
+ },
103
+ computed: {
104
+ ...mapGetters(['account/user']),
105
+ ...mapState('account', { currUser: 'user' }),
106
+ ...mapState('setting', ['isMobile'])
107
+ },
108
+ props: {
109
+ id: {
110
+ type: String,
111
+ required: true
112
+ },
113
+ visible: {
114
+ type: Boolean,
115
+ default: false
116
+ }
117
+ },
118
+ methods: {
119
+ // 初始化组件
120
+ initView () {
121
+ this.tabActiveKey = '1'
122
+ this.getDetails(this.id)
123
+ },
124
+ toCreateQuery () {
125
+ this.createQueryVisible = true
126
+ },
127
+ getColumnJson () {
128
+ if (this.details.f_content) {
129
+ return JSON.parse(this.details.f_content)
130
+ } else {
131
+ return {}
132
+ }
133
+ },
134
+ onClose () {
135
+ this.$emit('update:visible', false)
136
+ },
137
+ // 获取详情信息
138
+ getDetails (id) {
139
+ this.loadDetails = true
140
+ return post(QueryParamsDetailsViewApi.getQueryParamsDetails, {
141
+ id: id
142
+ }).then(res => {
143
+ this.details = res
144
+ this.loadDetails = false
145
+ }, err => {
146
+ this.loadDetails = false
147
+ console.error(err)
148
+ })
149
+ },
150
+ // 存储查询配置信息
151
+ saveQueryParams (source) {
152
+ return post('/webmeterapi/updateQueryParamsData', {
153
+ id: this.id,
154
+ source: source
155
+ }).then(res => {
156
+ this.$message.success('保存查询配置成功')
157
+ this.getDetails(this.id)
158
+ }, err => {
159
+ console.error(err)
160
+ })
161
+ },
162
+ // Tab切换
163
+ handleTabChange (key) {
164
+ this.tabActiveKey = key
165
+ }
166
+ },
167
+ watch: {
168
+ 'visible' (val) {
169
+ if (val) {
170
+ this.initView()
171
+ }
172
+ }
173
+ }
174
+ }
175
+ </script>
176
+
177
+ <style lang="less" scoped>
178
+ .business {
179
+ color: #ffffff;
180
+ }
181
+ .business:enabled:hover {
182
+ background-color: #85CE61 !important;
183
+ border-color: #85CE61 !important;
184
+ }
185
+ .business:enabled {
186
+ background-color: #67c23a;
187
+ border-color: #67c23a;
188
+ }
189
+ .business:disabled {
190
+ color: rgba(0, 0, 0, 0.25);
191
+ }
192
+ .detail-layout {
193
+ margin-left: 44px;
194
+ }
195
+ .text {
196
+ color: rgba(0, 0, 0, .45);
197
+ }
198
+
199
+ .heading {
200
+ color: rgba(0, 0, 0, .85);
201
+ font-size: 20px;
202
+ }
203
+
204
+ .no-data {
205
+ color: rgba(0, 0, 0, .25);
206
+ text-align: center;
207
+ line-height: 64px;
208
+ font-size: 16px;
209
+
210
+ i {
211
+ font-size: 24px;
212
+ margin-right: 16px;
213
+ position: relative;
214
+ top: 3px;
215
+ }
216
+ }
217
+
218
+ .mobile {
219
+ .detail-layout {
220
+ margin-left: unset;
221
+ }
222
+ .text {
223
+
224
+ }
225
+ .status-list {
226
+ text-align: left;
227
+ }
228
+ }
229
+
230
+ .row {
231
+ display: flex;
232
+
233
+ .content {
234
+ -webkit-box-flex: 1;
235
+ flex: auto;
236
+ -ms-flex: auto;
237
+ }
238
+
239
+ .extra {
240
+ flex: 0 1 auto;
241
+ -webkit-box-flex: 0;
242
+ -ms-flex: 0 1 auto;
243
+ min-width: 242px;
244
+ margin-left: 88px;
245
+ text-align: right;
246
+ }
247
+ }
248
+ </style>