doway-coms 1.6.62 → 1.6.64

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 (69) hide show
  1. package/.browserslistrc +2 -2
  2. package/README.md +28 -28
  3. package/package.json +52 -52
  4. package/packages/BaseButton/index.js +7 -7
  5. package/packages/BaseButton/src/index.vue +241 -241
  6. package/packages/BaseCheckbox/index.js +7 -7
  7. package/packages/BaseCheckbox/src/index.vue +134 -134
  8. package/packages/BaseDate/index.js +7 -7
  9. package/packages/BaseDate/src/index.vue +197 -197
  10. package/packages/BaseDateMonth/index.js +8 -0
  11. package/packages/BaseDateMonth/src/index.vue +164 -0
  12. package/packages/BaseDateWeek/index.js +7 -7
  13. package/packages/BaseDateWeek/src/index.vue +163 -163
  14. package/packages/BaseDatetime/index.js +7 -7
  15. package/packages/BaseDatetime/src/index.vue +196 -196
  16. package/packages/BaseForm/index.js +7 -7
  17. package/packages/BaseForm/src/index.vue +686 -666
  18. package/packages/BaseGantt/index.js +9 -9
  19. package/packages/BaseGantt/src/index.vue +608 -608
  20. package/packages/BaseGrid/index.js +9 -9
  21. package/packages/BaseGrid/src/index.vue +2735 -2735
  22. package/packages/BaseGridAdjust/index.js +9 -9
  23. package/packages/BaseGridAdjust/src/index.vue +482 -482
  24. package/packages/BaseInput/index.js +7 -7
  25. package/packages/BaseInput/src/index.vue +164 -164
  26. package/packages/BaseIntervalInput/index.js +7 -7
  27. package/packages/BaseIntervalInput/src/index.vue +310 -310
  28. package/packages/BaseKanbanEmpty/index.js +7 -7
  29. package/packages/BaseKanbanEmpty/src/index.vue +176 -176
  30. package/packages/BaseNumberInput/index.js +7 -7
  31. package/packages/BaseNumberInput/src/index.vue +229 -229
  32. package/packages/BasePagination/index.js +7 -7
  33. package/packages/BasePagination/src/index.vue +91 -91
  34. package/packages/BasePictureCard/index.js +7 -7
  35. package/packages/BasePictureCard/src/index.vue +580 -580
  36. package/packages/BasePrintPreview/index.js +7 -7
  37. package/packages/BasePrintPreview/src/index.vue +117 -117
  38. package/packages/BasePulldown/index.js +7 -7
  39. package/packages/BasePulldown/src/index.vue +1136 -1136
  40. package/packages/BaseSearch/index.js +7 -7
  41. package/packages/BaseSearch/src/index.vue +935 -935
  42. package/packages/BaseSelect/index.js +7 -7
  43. package/packages/BaseSelect/src/index.vue +155 -155
  44. package/packages/BaseSelectMulti/index.js +7 -7
  45. package/packages/BaseSelectMulti/src/index.vue +148 -148
  46. package/packages/BaseTextArea/index.js +7 -7
  47. package/packages/BaseTextArea/src/index.vue +178 -178
  48. package/packages/BaseTime/index.js +7 -7
  49. package/packages/BaseTime/src/index.vue +166 -166
  50. package/packages/BaseTool/index.js +7 -7
  51. package/packages/BaseTool/src/index.vue +349 -349
  52. package/packages/BaseToolStatus/index.js +7 -7
  53. package/packages/BaseToolStatus/src/index.vue +388 -388
  54. package/packages/LeaveAMessage/index.js +7 -7
  55. package/packages/LeaveAMessage/src/index.vue +568 -571
  56. package/packages/index.js +167 -167
  57. package/packages/styles/default.less +80 -80
  58. package/packages/utils/api.js +88 -88
  59. package/packages/utils/auth.js +38 -38
  60. package/packages/utils/common.js +595 -595
  61. package/packages/utils/dom.js +181 -181
  62. package/packages/utils/enum.js +83 -83
  63. package/packages/utils/filters.js +458 -458
  64. package/packages/utils/gridFormat.js +60 -60
  65. package/packages/utils/msg.js +16 -16
  66. package/packages/utils/patchFiles.js +44 -44
  67. package/packages/utils/request.js +169 -169
  68. package/packages/utils/store.js +261 -261
  69. package/vue.config.js +59 -59
@@ -1,350 +1,350 @@
1
- <template>
2
- <div class="status-bar">
3
- <div class="status-bar-btns">
4
- <!-- <a-space> -->
5
- <a-button
6
- class="status-bar-btn"
7
- size="small"
8
- :type="btn.isPrimary === true ? 'primary' : 'default'"
9
- v-show="btn.visible === true"
10
- @click="btnClick(btn)"
11
- v-for="btn in internalBtns.filter(x => x.align !== 'right')"
12
- :key="btn.code"
13
- >
14
- {{ btn.caption }}
15
- </a-button>
16
- <!-- </a-space> -->
17
- </div>
18
- <div class="status-bar-btns" style="float:right">
19
- <a-button
20
- class="status-bar-btn"
21
- size="small"
22
- :type="btn.isPrimary === true ? 'primary' : 'default'"
23
- v-show="btn.visible === true"
24
- @click="btnClick(btn)"
25
- v-for="btn in internalBtns.filter(x => x.align == 'right')"
26
- :key="btn.code"
27
- >
28
- {{ btn.caption }}
29
- </a-button>
30
- </div>
31
- <!-- <base-attach-viewer
32
- @closePdf="closePdf"
33
- v-if="isShowPdf"
34
- :pdfurl="pdfUrl"
35
- ></base-attach-viewer> -->
36
- </div>
37
- </template>
38
-
39
- <script>
40
- import { Button } from 'ant-design-vue'
41
- export default {
42
- name: 'BaseTool',
43
- components:{
44
- 'a-button': Button
45
- },
46
- data() {
47
- return {
48
- internalWorkFlowBtns: [],
49
- internalBtns: [],
50
- internalStatuss: [],
51
- internalFormRow: {},
52
- isShowPdf: false,
53
- pdfUrl: ''
54
- }
55
- },
56
- props: {
57
- workFlowBtns: {
58
- type: Array,
59
- default: () => {
60
- return []
61
- }
62
- },
63
- actionData: {
64
- type: Object,
65
- default: () => {
66
- return {}
67
- },
68
- deep: true
69
- },
70
- objectName: {
71
- // 对象信息
72
- type: String,
73
- default: 'artRout'
74
- },
75
- formRow: {
76
- type: Object,
77
- default: function() {
78
- return {}
79
- }
80
- },
81
- btns: {
82
- // 按钮
83
- type: Array,
84
- default: function() {
85
- return []
86
- }
87
- },
88
- statuss: {
89
- // 状态栏
90
- type: Array,
91
- default: function() {
92
- return []
93
- }
94
- }
95
- },
96
- watch: {
97
- workFlowBtns: {
98
- handler: function(newVal) {
99
- this.internalWorkFlowBtns = newVal
100
- },
101
- deep: true
102
- },
103
- btns: {
104
- handler: function(newVal) {
105
- this.internalBtns = newVal
106
- },
107
- deep: true
108
- }
109
- },
110
- created() {
111
- this.internalWorkFlowBtns = this.workFlowBtns
112
- this.internalBtns = this.btns
113
- // this.internalStatuss = statusBar[this.objectName].statuss
114
- // this.setBtnStatus()
115
- // 筛选判断用户是否有权限查看关系按钮
116
- },
117
- methods: {
118
- closePdf() {
119
- this.isShowPdf = false
120
- },
121
- // setBtnStatus () {
122
- // for (let i = 0; i < this.btns.length; i++) {
123
- // if (this.btns[i].visibleStatus.indexOf(this.formRow.status) >= 0) {
124
- // this.btns[i].visible = true
125
- // } else {
126
- // this.btns[i].visible = false
127
- // }
128
- // }
129
- // },
130
- btnClick(btn) {
131
- this.$emit(btn.code, btn)
132
- // let vm = this
133
- // if (btn.confirmMsg) {
134
- // this.$confirm(btn.confirmMsg, '提示', {
135
- // confirmButtonText: '确定',
136
- // cancelButtonText: '取消',
137
- // type: 'warning',
138
- // customClass: 'dw-error-msg'
139
- // }).then(() => {
140
- // vm.$emit('btnClick', btn)
141
- // }).catch(() => { })
142
- // } else {
143
- // this.$emit('btnClick', btn)
144
- // }
145
- }
146
- }
147
- }
148
- </script>
149
- <style lang="scss" scoped>
150
- //所在状态状态提示样式
151
- .current-status {
152
- color: #010101 !important;
153
- font-weight: bold;
154
- background-color: #ffc56b !important;
155
- }
156
- //所在状态状态指向提示样式
157
- .current-status::before {
158
- content: " ";
159
- display: block;
160
- position: absolute;
161
- top: 0px;
162
- left: auto;
163
- bottom: auto;
164
- right: -12px;
165
- border-top: 16px solid transparent;
166
- border-bottom: 18px solid transparent;
167
- border-right: none;
168
- border-left: 11px solid #ffc56b !important;
169
- z-index: 10;
170
- }
171
- //所在状态状态指向提示样式
172
- .current-status::after {
173
- content: " ";
174
- display: block;
175
- position: absolute;
176
- top: 0px;
177
- left: auto;
178
- bottom: auto;
179
- right: -11px;
180
- border-left: 11px solid #ffc56b !important;
181
- border-top: 16px solid transparent;
182
- border-bottom: 18px solid transparent;
183
- border-right: none;
184
- z-index: 11;
185
- }
186
- //未使用的状态提示样式
187
- .inactive-status {
188
- background-color: #f9f9f9;
189
- }
190
- //未使用的状态指向提示样式
191
- .inactive-status::before {
192
- content: " ";
193
- display: block;
194
- position: absolute;
195
- top: 0px;
196
- left: auto;
197
- bottom: auto;
198
- right: -12px;
199
- border-top: 16px solid transparent;
200
- border-bottom: 18px solid transparent;
201
- border-right: none;
202
- border-left: 11px solid #ccc !important;
203
- z-index: 10;
204
- }
205
- //未使用的状态指向提示样式
206
- .inactive-status::after {
207
- content: " ";
208
- display: block;
209
- position: absolute;
210
- top: 0px;
211
- left: auto;
212
- bottom: auto;
213
- right: -11px;
214
- border-left: 11px solid #f9f9f9 !important;
215
- border-top: 16px solid transparent;
216
- border-bottom: 18px solid transparent;
217
- border-right: none;
218
- z-index: 11;
219
- }
220
- //状态条样式
221
- .status-bar {
222
- display: flex;
223
- justify-content: space-between;
224
- border-bottom: 1px solid #ccc;
225
- border-top: 1px solid #ccc;
226
- // padding-top: 1px;
227
-
228
- padding-left: 8px;
229
- // padding-bottom: 1px;
230
- // border-left: none;
231
- //状态栏高度
232
- .status-bar-btns {
233
- line-height: 30px;
234
- float: left;
235
- // margin-left: 85%;
236
- // margin-right: 10px;
237
- //状态工作按钮样式
238
- .status-bar-btn {
239
- // margin-top: 1px;
240
- // border-radius: 3px;
241
- // height: 28px;
242
- // font-size: 12px;
243
- // padding: 5px 10px;
244
- margin-right: 8px;
245
- }
246
- //状态工作按钮样式
247
- .btn-primary {
248
- color: #efefef;
249
- background-color: #219bff;
250
- cursor: pointer;
251
- // margin-top: 1px;
252
- }
253
- }
254
-
255
- //状态提示按钮样式
256
- .status-bar-status {
257
- overflow: hidden;
258
- .el-status-btn-wrapper {
259
- overflow: visible;
260
- border-left: 1px solid #ccc;
261
- // border-bottom: 1px solid #ccc;
262
- .el-status-btn {
263
- margin-left: 0px !important;
264
- color: #000;
265
- padding-left: 20px;
266
- padding-right: 20px;
267
- position: relative;
268
- padding-left: 22px;
269
- cursor: default;
270
- font-size: 11px;
271
- background-color: #fff;
272
- }
273
- .el-status-btn::before {
274
- content: " ";
275
- display: block;
276
- position: absolute;
277
- top: 0px;
278
- left: auto;
279
- bottom: auto;
280
- right: -12px;
281
- border-top: 16px solid transparent;
282
- border-bottom: 18px solid transparent;
283
- border-right: none;
284
- border-left: 11px solid #ccc !important;
285
- z-index: 10;
286
- }
287
- .el-status-btn::after {
288
- content: " ";
289
- display: block;
290
- position: absolute;
291
- top: 0px;
292
- left: auto;
293
- bottom: auto;
294
- right: -11px;
295
- border-left: 11px solid white !important;
296
- border-top: 16px solid transparent;
297
- border-bottom: 18px solid transparent;
298
- border-right: none;
299
- z-index: 11;
300
- }
301
- .status-primary {
302
- color: #0b0b0b;
303
- font-size: 12px;
304
- border-radius: 0;
305
- background-color: #fafafa;
306
- margin-left: 0px !important;
307
- padding-left: 20px;
308
- padding-right: 20px;
309
- position: relative;
310
- padding-left: 22px;
311
- cursor: default;
312
- }
313
- .status-primary::before {
314
- content: " ";
315
- display: block;
316
- position: absolute;
317
- top: 0px;
318
- left: auto;
319
- bottom: auto;
320
- right: -12px;
321
- border-top: 16px solid transparent;
322
- border-bottom: 18px solid transparent;
323
- border-right: none;
324
- border-left: 11px solid #ccc;
325
- z-index: 10;
326
- }
327
-
328
- .status-primary::after {
329
- content: " ";
330
- display: block;
331
- position: absolute;
332
- top: 0px;
333
- left: auto;
334
- bottom: auto;
335
- right: -11px;
336
- border-left: 11px solid #f9f9f9;
337
- border-top: 16px solid transparent;
338
- border-bottom: 18px solid transparent;
339
- border-right: none;
340
- z-index: 11;
341
- }
342
- }
343
- }
344
- }
345
- </style>
346
-
347
- <style lang="less">
348
- @import '../../styles/default.less';
349
- </style>
1
+ <template>
2
+ <div class="status-bar">
3
+ <div class="status-bar-btns">
4
+ <!-- <a-space> -->
5
+ <a-button
6
+ class="status-bar-btn"
7
+ size="small"
8
+ :type="btn.isPrimary === true ? 'primary' : 'default'"
9
+ v-show="btn.visible === true"
10
+ @click="btnClick(btn)"
11
+ v-for="btn in internalBtns.filter(x => x.align !== 'right')"
12
+ :key="btn.code"
13
+ >
14
+ {{ btn.caption }}
15
+ </a-button>
16
+ <!-- </a-space> -->
17
+ </div>
18
+ <div class="status-bar-btns" style="float:right">
19
+ <a-button
20
+ class="status-bar-btn"
21
+ size="small"
22
+ :type="btn.isPrimary === true ? 'primary' : 'default'"
23
+ v-show="btn.visible === true"
24
+ @click="btnClick(btn)"
25
+ v-for="btn in internalBtns.filter(x => x.align == 'right')"
26
+ :key="btn.code"
27
+ >
28
+ {{ btn.caption }}
29
+ </a-button>
30
+ </div>
31
+ <!-- <base-attach-viewer
32
+ @closePdf="closePdf"
33
+ v-if="isShowPdf"
34
+ :pdfurl="pdfUrl"
35
+ ></base-attach-viewer> -->
36
+ </div>
37
+ </template>
38
+
39
+ <script>
40
+ import { Button } from 'ant-design-vue'
41
+ export default {
42
+ name: 'BaseTool',
43
+ components:{
44
+ 'a-button': Button
45
+ },
46
+ data() {
47
+ return {
48
+ internalWorkFlowBtns: [],
49
+ internalBtns: [],
50
+ internalStatuss: [],
51
+ internalFormRow: {},
52
+ isShowPdf: false,
53
+ pdfUrl: ''
54
+ }
55
+ },
56
+ props: {
57
+ workFlowBtns: {
58
+ type: Array,
59
+ default: () => {
60
+ return []
61
+ }
62
+ },
63
+ actionData: {
64
+ type: Object,
65
+ default: () => {
66
+ return {}
67
+ },
68
+ deep: true
69
+ },
70
+ objectName: {
71
+ // 对象信息
72
+ type: String,
73
+ default: 'artRout'
74
+ },
75
+ formRow: {
76
+ type: Object,
77
+ default: function() {
78
+ return {}
79
+ }
80
+ },
81
+ btns: {
82
+ // 按钮
83
+ type: Array,
84
+ default: function() {
85
+ return []
86
+ }
87
+ },
88
+ statuss: {
89
+ // 状态栏
90
+ type: Array,
91
+ default: function() {
92
+ return []
93
+ }
94
+ }
95
+ },
96
+ watch: {
97
+ workFlowBtns: {
98
+ handler: function(newVal) {
99
+ this.internalWorkFlowBtns = newVal
100
+ },
101
+ deep: true
102
+ },
103
+ btns: {
104
+ handler: function(newVal) {
105
+ this.internalBtns = newVal
106
+ },
107
+ deep: true
108
+ }
109
+ },
110
+ created() {
111
+ this.internalWorkFlowBtns = this.workFlowBtns
112
+ this.internalBtns = this.btns
113
+ // this.internalStatuss = statusBar[this.objectName].statuss
114
+ // this.setBtnStatus()
115
+ // 筛选判断用户是否有权限查看关系按钮
116
+ },
117
+ methods: {
118
+ closePdf() {
119
+ this.isShowPdf = false
120
+ },
121
+ // setBtnStatus () {
122
+ // for (let i = 0; i < this.btns.length; i++) {
123
+ // if (this.btns[i].visibleStatus.indexOf(this.formRow.status) >= 0) {
124
+ // this.btns[i].visible = true
125
+ // } else {
126
+ // this.btns[i].visible = false
127
+ // }
128
+ // }
129
+ // },
130
+ btnClick(btn) {
131
+ this.$emit(btn.code, btn)
132
+ // let vm = this
133
+ // if (btn.confirmMsg) {
134
+ // this.$confirm(btn.confirmMsg, '提示', {
135
+ // confirmButtonText: '确定',
136
+ // cancelButtonText: '取消',
137
+ // type: 'warning',
138
+ // customClass: 'dw-error-msg'
139
+ // }).then(() => {
140
+ // vm.$emit('btnClick', btn)
141
+ // }).catch(() => { })
142
+ // } else {
143
+ // this.$emit('btnClick', btn)
144
+ // }
145
+ }
146
+ }
147
+ }
148
+ </script>
149
+ <style lang="scss" scoped>
150
+ //所在状态状态提示样式
151
+ .current-status {
152
+ color: #010101 !important;
153
+ font-weight: bold;
154
+ background-color: #ffc56b !important;
155
+ }
156
+ //所在状态状态指向提示样式
157
+ .current-status::before {
158
+ content: " ";
159
+ display: block;
160
+ position: absolute;
161
+ top: 0px;
162
+ left: auto;
163
+ bottom: auto;
164
+ right: -12px;
165
+ border-top: 16px solid transparent;
166
+ border-bottom: 18px solid transparent;
167
+ border-right: none;
168
+ border-left: 11px solid #ffc56b !important;
169
+ z-index: 10;
170
+ }
171
+ //所在状态状态指向提示样式
172
+ .current-status::after {
173
+ content: " ";
174
+ display: block;
175
+ position: absolute;
176
+ top: 0px;
177
+ left: auto;
178
+ bottom: auto;
179
+ right: -11px;
180
+ border-left: 11px solid #ffc56b !important;
181
+ border-top: 16px solid transparent;
182
+ border-bottom: 18px solid transparent;
183
+ border-right: none;
184
+ z-index: 11;
185
+ }
186
+ //未使用的状态提示样式
187
+ .inactive-status {
188
+ background-color: #f9f9f9;
189
+ }
190
+ //未使用的状态指向提示样式
191
+ .inactive-status::before {
192
+ content: " ";
193
+ display: block;
194
+ position: absolute;
195
+ top: 0px;
196
+ left: auto;
197
+ bottom: auto;
198
+ right: -12px;
199
+ border-top: 16px solid transparent;
200
+ border-bottom: 18px solid transparent;
201
+ border-right: none;
202
+ border-left: 11px solid #ccc !important;
203
+ z-index: 10;
204
+ }
205
+ //未使用的状态指向提示样式
206
+ .inactive-status::after {
207
+ content: " ";
208
+ display: block;
209
+ position: absolute;
210
+ top: 0px;
211
+ left: auto;
212
+ bottom: auto;
213
+ right: -11px;
214
+ border-left: 11px solid #f9f9f9 !important;
215
+ border-top: 16px solid transparent;
216
+ border-bottom: 18px solid transparent;
217
+ border-right: none;
218
+ z-index: 11;
219
+ }
220
+ //状态条样式
221
+ .status-bar {
222
+ display: flex;
223
+ justify-content: space-between;
224
+ border-bottom: 1px solid #ccc;
225
+ border-top: 1px solid #ccc;
226
+ // padding-top: 1px;
227
+
228
+ padding-left: 8px;
229
+ // padding-bottom: 1px;
230
+ // border-left: none;
231
+ //状态栏高度
232
+ .status-bar-btns {
233
+ line-height: 30px;
234
+ float: left;
235
+ // margin-left: 85%;
236
+ // margin-right: 10px;
237
+ //状态工作按钮样式
238
+ .status-bar-btn {
239
+ // margin-top: 1px;
240
+ // border-radius: 3px;
241
+ // height: 28px;
242
+ // font-size: 12px;
243
+ // padding: 5px 10px;
244
+ margin-right: 8px;
245
+ }
246
+ //状态工作按钮样式
247
+ .btn-primary {
248
+ color: #efefef;
249
+ background-color: #219bff;
250
+ cursor: pointer;
251
+ // margin-top: 1px;
252
+ }
253
+ }
254
+
255
+ //状态提示按钮样式
256
+ .status-bar-status {
257
+ overflow: hidden;
258
+ .el-status-btn-wrapper {
259
+ overflow: visible;
260
+ border-left: 1px solid #ccc;
261
+ // border-bottom: 1px solid #ccc;
262
+ .el-status-btn {
263
+ margin-left: 0px !important;
264
+ color: #000;
265
+ padding-left: 20px;
266
+ padding-right: 20px;
267
+ position: relative;
268
+ padding-left: 22px;
269
+ cursor: default;
270
+ font-size: 11px;
271
+ background-color: #fff;
272
+ }
273
+ .el-status-btn::before {
274
+ content: " ";
275
+ display: block;
276
+ position: absolute;
277
+ top: 0px;
278
+ left: auto;
279
+ bottom: auto;
280
+ right: -12px;
281
+ border-top: 16px solid transparent;
282
+ border-bottom: 18px solid transparent;
283
+ border-right: none;
284
+ border-left: 11px solid #ccc !important;
285
+ z-index: 10;
286
+ }
287
+ .el-status-btn::after {
288
+ content: " ";
289
+ display: block;
290
+ position: absolute;
291
+ top: 0px;
292
+ left: auto;
293
+ bottom: auto;
294
+ right: -11px;
295
+ border-left: 11px solid white !important;
296
+ border-top: 16px solid transparent;
297
+ border-bottom: 18px solid transparent;
298
+ border-right: none;
299
+ z-index: 11;
300
+ }
301
+ .status-primary {
302
+ color: #0b0b0b;
303
+ font-size: 12px;
304
+ border-radius: 0;
305
+ background-color: #fafafa;
306
+ margin-left: 0px !important;
307
+ padding-left: 20px;
308
+ padding-right: 20px;
309
+ position: relative;
310
+ padding-left: 22px;
311
+ cursor: default;
312
+ }
313
+ .status-primary::before {
314
+ content: " ";
315
+ display: block;
316
+ position: absolute;
317
+ top: 0px;
318
+ left: auto;
319
+ bottom: auto;
320
+ right: -12px;
321
+ border-top: 16px solid transparent;
322
+ border-bottom: 18px solid transparent;
323
+ border-right: none;
324
+ border-left: 11px solid #ccc;
325
+ z-index: 10;
326
+ }
327
+
328
+ .status-primary::after {
329
+ content: " ";
330
+ display: block;
331
+ position: absolute;
332
+ top: 0px;
333
+ left: auto;
334
+ bottom: auto;
335
+ right: -11px;
336
+ border-left: 11px solid #f9f9f9;
337
+ border-top: 16px solid transparent;
338
+ border-bottom: 18px solid transparent;
339
+ border-right: none;
340
+ z-index: 11;
341
+ }
342
+ }
343
+ }
344
+ }
345
+ </style>
346
+
347
+ <style lang="less">
348
+ @import '../../styles/default.less';
349
+ </style>
350
350