vsyswin-ui 0.2.59 → 0.2.62

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": "vsyswin-ui",
3
- "version": "0.2.59",
3
+ "version": "0.2.62",
4
4
  "main": "lib/vsyswin-ui.umd.min.js",
5
5
  "private": false,
6
6
  "description": "Vue2.x的应用组件库.",
@@ -0,0 +1,14 @@
1
+
2
+ import buttonList from './src/button-list.vue'
3
+ import buttonItem from './src/button-item.vue'
4
+
5
+ // 为组件提供 install 安装方法,供按需引入
6
+ buttonList.install = function (Vue) {
7
+ Vue.component(buttonList.name, buttonList)
8
+ }
9
+ buttonItem.install = function (Vue) {
10
+ Vue.component(buttonItem.name, buttonItem)
11
+ }
12
+
13
+ // 默认导出组件
14
+ export default { buttonList, buttonItem }
@@ -0,0 +1,68 @@
1
+ <script>
2
+ export default {
3
+ name: 'SyButtonContainer',
4
+ props: {
5
+ buttons: {
6
+ type: Array,
7
+ default: () => []
8
+ }
9
+ },
10
+ computed: {
11
+ trigger() {
12
+ return this.$parent.trigger
13
+ }
14
+ },
15
+ render(h) {
16
+ let contents = []
17
+ if (this.buttons.length <= 3) {
18
+ contents = this.buttons.map((btn) => {
19
+ return btn.$slots.default
20
+ })
21
+ } else {
22
+ const preBtns = this.buttons.slice(0, 2).map((btn) => btn.$slots.default)
23
+ const moreBtns = this.buttons.slice(2).map((btn) => {
24
+ const slotDefault = btn.$slots.default
25
+ const elBtn = slotDefault[0].componentOptions.children[0]
26
+ const listenersFn = slotDefault[0].componentOptions.listeners.click
27
+ const icon = slotDefault[0].componentOptions.propsData.icon || ''
28
+ const text = elBtn.text
29
+ return h(
30
+ 'el-dropdown-item',
31
+ {
32
+ props: { icon },
33
+ nativeOn: {
34
+ click: listenersFn
35
+ }
36
+ },
37
+ [text]
38
+ )
39
+ })
40
+ const moreDiv = h('div', { class: 'sy-button-dots' }, [h('i', { class: 'el-icon-more' })])
41
+ const dropDown = h(
42
+ 'el-dropdown',
43
+ {
44
+ props: { trigger: this.trigger, size: 'medium', placement: 'bottom-end' }
45
+ },
46
+ [moreDiv, h('el-dropdown-menu', { slot: 'dropdown' }, moreBtns)]
47
+ )
48
+ contents = [...preBtns, dropDown]
49
+ }
50
+
51
+ return h(
52
+ 'div',
53
+ {
54
+ class: 'sy-buttons'
55
+ },
56
+ contents
57
+ )
58
+ }
59
+ }
60
+ </script>
61
+
62
+ <style lang="scss" scoped>
63
+ .sy-button-dots {
64
+ width: 18px;
65
+ height: 18px;
66
+ cursor: pointer;
67
+ }
68
+ </style>
@@ -0,0 +1,15 @@
1
+ <script>
2
+ export default {
3
+ name: 'SyButtonItem',
4
+ mounted() {
5
+ this.$parent.buttons.push(this)
6
+ },
7
+ render(h) {
8
+ return h('div', { style: { display: 'none' } })
9
+ }
10
+ }
11
+ </script>
12
+
13
+ <style lang="scss" scoped>
14
+
15
+ </style>
@@ -0,0 +1,30 @@
1
+ <template>
2
+ <div class="sy-btn-ellipsis">
3
+ <slot></slot>
4
+ <button-container :buttons="buttons"></button-container>
5
+ </div>
6
+ </template>
7
+
8
+ <script>
9
+ import buttonContainer from './button-container.vue'
10
+ export default {
11
+ name: 'SyButtonList',
12
+ components: { buttonContainer },
13
+ props: {
14
+ trigger: {
15
+ type: String,
16
+ default: 'hover',
17
+ validator: (value) => ['hover', 'click'].includes(value)
18
+ }
19
+ },
20
+ data() {
21
+ return {
22
+ buttons: []
23
+ }
24
+ }
25
+ }
26
+ </script>
27
+
28
+ <style lang="scss" scoped>
29
+
30
+ </style>
package/packages/index.js CHANGED
@@ -1,3 +1,4 @@
1
+ import './styles/common-old.scss'
1
2
  import './styles/common.scss'
2
3
  import './styles/iconfont/iconfont.css'
3
4
 
@@ -12,9 +13,12 @@ import paging from './paging'
12
13
  import newSearchBar from './newSearchBar' // 高级筛选
13
14
  import table from './table' // 表格组件
14
15
  import dragSet from './drag-set'
16
+ import buttonEllipsis from './button-ellipsis'
17
+
18
+ const { buttonList, buttonItem } = buttonEllipsis
15
19
 
16
20
  // 存储组件列表
17
- const components = [layout, searchTree, selectProject, selectTree, SearchBar, simpleSearchBar, inputMore, paging, newSearchBar, table, dragSet]
21
+ const components = [layout, searchTree, selectProject, selectTree, buttonItem, buttonList, SearchBar, simpleSearchBar, inputMore, paging, newSearchBar, table, dragSet]
18
22
 
19
23
  // 定义 install 方法,接收 Vue 作为参数。如果使用 use 注册插件,则所有的组件都将被注册
20
24
  const install = function (Vue) {
@@ -37,6 +41,8 @@ export default {
37
41
  searchTree,
38
42
  selectProject,
39
43
  selectTree,
44
+ buttonItem,
45
+ buttonList,
40
46
  SearchBar,
41
47
  simpleSearchBar,
42
48
  inputMore,
@@ -7,6 +7,7 @@
7
7
  prev-text="上一页"
8
8
  next-text="下一页"
9
9
  size="small"
10
+ :pager-count="pagerCount"
10
11
  @size-change="handleSizeChange"
11
12
  @current-change="handlePageChange"
12
13
  :current-page="pagination.currentPage"
@@ -53,6 +54,10 @@ export default {
53
54
  default() {
54
55
  return [10, 20, 50, 100, 200]
55
56
  }
57
+ },
58
+ pagerCount: {
59
+ type: Number,
60
+ default: 7
56
61
  }
57
62
  },
58
63
  computed: {
@@ -493,6 +493,18 @@ export default {
493
493
  })
494
494
  return list
495
495
  },
496
+ // 设置底部标签,比如日期重新设置了值,但是底部没有标签,使用该方法来生成
497
+ /*
498
+ this.$set(this.searchList[10].itemList[0], 'value', [1649865600000, 1657727999000])
499
+ this.$set(this.searchList[10].itemList[0], 'isActive', true)
500
+ this.$nextTick(() => {
501
+ this.$refs.searchbarRef.setTagList()
502
+ })
503
+ */
504
+ setTagList() {
505
+ const filterList = this.createTagList()
506
+ this.tagList = filterList
507
+ },
496
508
  // 搜索按钮
497
509
  handleSearch(skipShrink) {
498
510
  if (this.$slots.default) {
@@ -0,0 +1,506 @@
1
+ @import './variables.scss';
2
+ // 重置样式
3
+ * {
4
+ margin: 0;
5
+ padding: 0;
6
+ }
7
+
8
+ html,
9
+ body,
10
+ #app {
11
+ height: 100%;
12
+ }
13
+
14
+ body {
15
+ color: #000;
16
+ background: #fff;
17
+ font-family: 'Helvetica Neue', Helvetica, 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', 微软雅黑, Arial, sans-serif;
18
+ -webkit-font-smoothing: antialiased;
19
+ -webkit-text-size-adjust: none;
20
+ font-size: 14px;
21
+ }
22
+
23
+ ol,
24
+ ul,
25
+ li {
26
+ list-style: none;
27
+ }
28
+
29
+ /* 滑动条 */
30
+
31
+ ::-webkit-scrollbar {
32
+ width: 8px;
33
+ height: 8px;
34
+ }
35
+
36
+ ::-webkit-scrollbar-thumb {
37
+ background-color: #cccccc;
38
+ border-radius: 8px;
39
+ }
40
+
41
+ ::-webkit-scrollbar-track-piece {
42
+ background-color: transparent;
43
+ border-radius: 8px;
44
+ }
45
+
46
+ a:focus,
47
+ input:focus {
48
+ outline: none;
49
+ }
50
+
51
+ /* 一些共用的样式 */
52
+
53
+ .main-container {
54
+ height: 100%;
55
+ overflow: hidden;
56
+ background: #f2f5f9;
57
+ padding: 0 24px;
58
+ box-sizing: border-box;
59
+ &.no-head {
60
+ .bd {
61
+ height: calc(100% - 20px);
62
+ }
63
+ }
64
+ .hd {
65
+ height: 44px;
66
+ display: flex;
67
+ padding: 0 20px;
68
+ align-items: center;
69
+ justify-content: space-between;
70
+ > h2 {
71
+ font-size: 14px;
72
+ margin: 0;
73
+ color: $header-color;
74
+ font-weight: 700;
75
+ }
76
+ > .hd-right {
77
+ color: $header-color;
78
+ display: flex;
79
+ align-items: center;
80
+ }
81
+ }
82
+ .bd {
83
+ /* 本来想使用flex布局,但是vxe-table支持不友好,还是需要改成 calc计算的方式 */
84
+ height: calc(100% - 64px);
85
+ padding: 4px 20px 10px;
86
+ box-sizing: border-box;
87
+ background-color: #fff;
88
+ &.west-east-wrap {
89
+ // 左右结构的布局,去掉padding,使用flex布局
90
+ padding: 0;
91
+ display: flex;
92
+ }
93
+ .con-main {
94
+ height: calc(100% - 46px);
95
+ .con-scroll-wrapper {
96
+ height: 100%;
97
+ overflow: hidden;
98
+ }
99
+ }
100
+ .west-tree-box {
101
+ /* 左侧树盒子 */
102
+ width: 260px;
103
+ height: 100%;
104
+ background: #fff;
105
+ border-right: 1px solid #e3e3e3;
106
+ // overflow-x: scroll;
107
+ position: relative;
108
+ transition: all 0.5s;
109
+ .west-tree-content {
110
+ position: absolute;
111
+ width: 100%;
112
+ height: 100%;
113
+ padding: 0;
114
+ overflow-x: hidden;
115
+ overflow-y: auto;
116
+ box-sizing: border-box;
117
+ }
118
+ .pick-left {
119
+ position: absolute;
120
+ width: 21px;
121
+ height: 54px;
122
+ right: 0;
123
+ top: 50%;
124
+ margin-top: -27px;
125
+ cursor: pointer;
126
+ }
127
+ }
128
+ .east-content {
129
+ /* 右侧表格内容区域盒子 */
130
+ &.no-padding {
131
+ padding: 0;
132
+ }
133
+ height: 100%;
134
+ padding: 4px 20px 10px;
135
+ box-sizing: border-box;
136
+ transition: all 0.5s;
137
+ position: relative;
138
+ .pick-right {
139
+ position: absolute;
140
+ width: 21px;
141
+ height: 54px;
142
+ left: 0;
143
+ top: 50%;
144
+ margin-top: -27px;
145
+ cursor: pointer;
146
+ }
147
+ }
148
+ }
149
+ .tab-content-container {
150
+ // tab的内容区域
151
+ height: calc(100% - 64px);
152
+ overflow: hidden;
153
+ background: #fff;
154
+ display: flex;
155
+ &.no-left {
156
+ display: block;
157
+ }
158
+ .west-tree-box {
159
+ /* 左侧树盒子 */
160
+ width: 260px;
161
+ height: 100%;
162
+ background: #fff;
163
+ border-right: 1px solid #e3e3e3;
164
+ // overflow-x: scroll;
165
+ position: relative;
166
+ transition: all 0.5s;
167
+ .pick-left {
168
+ position: absolute;
169
+ width: 21px;
170
+ height: 54px;
171
+ right: 0;
172
+ top: 50%;
173
+ margin-top: -27px;
174
+ cursor: pointer;
175
+ }
176
+ }
177
+ .east-content {
178
+ /* 右侧表格内容区域盒子 */
179
+ height: 100%;
180
+ transition: all 0.5s;
181
+ position: relative;
182
+ .pick-right {
183
+ position: absolute;
184
+ width: 21px;
185
+ height: 54px;
186
+ left: 0;
187
+ top: 50%;
188
+ margin-top: -27px;
189
+ cursor: pointer;
190
+ }
191
+ }
192
+ .tab-bd {
193
+ /* 还是需要改成 calc计算的方式 vxe-table的max-height才会生效有滚动条*/
194
+ height: calc(100% - 0px);
195
+ padding: 4px 20px 10px;
196
+ box-sizing: border-box;
197
+ background-color: #fff;
198
+ .tab-search {
199
+ height: 46px;
200
+ display: flex;
201
+ justify-content: space-between;
202
+ }
203
+ .tab-main {
204
+ height: calc(100% - 46px);
205
+ &.footer-btns {
206
+ height: calc(100% - 96px);
207
+ }
208
+ .tab-scroll-wrapper {
209
+ height: 100%;
210
+ overflow: hidden;
211
+ }
212
+ }
213
+ .tab-footer-btns {
214
+ padding-top: 16px;
215
+ text-align: center;
216
+ }
217
+ }
218
+ }
219
+ .subpage-container {
220
+ // 子页面布局
221
+ height: 100%;
222
+ &.no-head {
223
+ .sub-bd {
224
+ height: 100%;
225
+ }
226
+ }
227
+ .sub-hd {
228
+ height: 44px;
229
+ display: flex;
230
+ padding: 0 20px;
231
+ align-items: center;
232
+ justify-content: space-between;
233
+ background-color: var(--page-bg);
234
+ > h2 {
235
+ font-size: 14px;
236
+ margin: 0;
237
+ color: $header-color;
238
+ font-weight: 700;
239
+ }
240
+ }
241
+ .sub-bd {
242
+ height: calc(100% - 44px);
243
+ box-sizing: border-box;
244
+ background-color: #fff;
245
+ .sub-main {
246
+ height: calc(100% - 0px);
247
+ .sub-scroll-wrapper {
248
+ height: 100%;
249
+ overflow: hidden;
250
+ }
251
+ }
252
+ }
253
+ }
254
+ .el-textarea {
255
+ position: relative;
256
+ .txtCount {
257
+ position: absolute;
258
+ right: 10px;
259
+ bottom: 5px;
260
+ color: #afbacb;
261
+ }
262
+ }
263
+ }
264
+
265
+ .title-tabs {
266
+ // 自定义的tabs
267
+ &.el-tabs {
268
+ height: 44px !important;
269
+ .el-tabs__header {
270
+ padding-bottom: 0px !important;
271
+ // padding-left: 20px;
272
+ padding-right: 20px;
273
+ .el-tabs__active-bar {
274
+ background-color: $primary-color;
275
+ }
276
+ .el-tabs__item {
277
+ height: 44px;
278
+ line-height: 44px;
279
+ font-weight: 600;
280
+ &.is-active,
281
+ &:hover {
282
+ color: $primary-color;
283
+ }
284
+ }
285
+ .el-tabs__nav-wrap::after {
286
+ background-color: transparent;
287
+ }
288
+ }
289
+ .el-tab-pane {
290
+ height: 0 !important;
291
+ }
292
+ }
293
+ }
294
+
295
+ // 简单搜栏样式
296
+ .header-filter {
297
+ display: flex;
298
+ align-items: center;
299
+ justify-content: space-between;
300
+ // padding-top: 6px;
301
+ margin-bottom: 16px;
302
+ .el-input-group__append {
303
+ background-color: $primary-color !important;
304
+ border: 1px solid $primary-color !important;
305
+ .el-button {
306
+ padding-left: 12px;
307
+ padding-right: 10px;
308
+ color: #fff;
309
+ }
310
+ }
311
+ .el-input__icon {
312
+ line-height: 32px;
313
+ }
314
+ .header-filter-btns {
315
+ min-height: 40px;
316
+ .el-button--text {
317
+ color: $primary-color;
318
+ }
319
+ }
320
+ .el-input__inner {
321
+ height: 32px !important;
322
+ line-height: 32px !important;
323
+ border-radius: 0px !important;
324
+ }
325
+ }
326
+
327
+ .dialog-inner-content {
328
+ border: 1px solid rgba(0, 0, 0, 0.08);
329
+ padding: 40px 20px 10px;
330
+ position: relative;
331
+ box-sizing: border-box;
332
+ > h3 {
333
+ position: absolute;
334
+ left: 0;
335
+ top: 0;
336
+ right: 0;
337
+ height: 40px;
338
+ line-height: 40px;
339
+ background-color: rgba(0, 0, 0, 0.08);
340
+ padding-left: 20px;
341
+ color: $primary-color;
342
+ font-weight: 600;
343
+ }
344
+ }
345
+
346
+ .vxe-modal--wrapper.type--modal.no-body-scroll .vxe-modal--body .vxe-modal--content {
347
+ overflow: hidden;
348
+ }
349
+
350
+ .dialog-footer-btns {
351
+ text-align: center;
352
+ }
353
+
354
+ .accessory {
355
+ // 上传附件的样式
356
+ .title {
357
+ height: 40px;
358
+ line-height: 40px;
359
+ .label {
360
+ float: left;
361
+ font-size: 14px;
362
+ color: #777e8c;
363
+ }
364
+ .upload {
365
+ float: right;
366
+ }
367
+ }
368
+ }
369
+
370
+ // 弹出选择窗口
371
+ .el-input-group__append.select-append {
372
+ padding: 0 8px;
373
+ .el-button {
374
+ margin-left: -8px;
375
+ margin-right: -8px;
376
+ padding-left: 5px;
377
+ padding-right: 5px;
378
+ }
379
+ }
380
+
381
+ /* 自定义分页样式 */
382
+
383
+ .el-pagination.cus-pagination .el-input__inner {
384
+ padding-left: 0px !important;
385
+ }
386
+
387
+ .cus-pagination.el-pagination span:not([class*='suffix']),
388
+ .el-pagination button {
389
+ padding: 0 6px;
390
+ }
391
+
392
+ .cus-pagination.el-pagination.is-background .btn-prev:disabled,
393
+ .el-pagination.is-background .btn-next:disabled {
394
+ background-color: transparent !important;
395
+ border: 1px solid #eaedf1;
396
+ }
397
+
398
+ .el-pagination.is-background .btn-prev,
399
+ .el-pagination.is-background .btn-next,
400
+ .el-pagination.is-background .el-pager li {
401
+ margin: 0 2px;
402
+ }
403
+
404
+ .el-pagination.is-background.cus-pagination .btn-prev,
405
+ .el-pagination.is-background.cus-pagination .btn-next {
406
+ background-color: transparent !important;
407
+ border: 1px solid #eaedf1;
408
+ }
409
+
410
+ .el-pagination.is-background.cus-pagination .btn-prev,
411
+ .el-pagination.is-background.cus-pagination .btn-next,
412
+ .el-pagination.is-background.cus-pagination .el-pager li {
413
+ background-color: transparent;
414
+ border: 1px solid #eaedf1;
415
+ border-radius: 2px;
416
+ }
417
+
418
+ .el-pagination.is-background.cus-pagination .el-pager li:not(.disabled).active {
419
+ border-radius: 2px;
420
+ border-color: transparent;
421
+ }
422
+
423
+ .cus-pagination .el-pagination__jump {
424
+ margin-left: 0;
425
+ }
426
+
427
+ .cus-pagination .el-input__inner {
428
+ height: 28px !important;
429
+ line-height: 28px !important;
430
+ }
431
+
432
+ // 使表格树的单元格radio不显示
433
+ .vxe-table .select-disable .vxe-cell--radio {
434
+ &.is--disabled {
435
+ color: #666;
436
+ }
437
+ padding-left: 0;
438
+ .vxe-radio--icon {
439
+ display: none;
440
+ }
441
+ }
442
+
443
+ /* 对 element-ui 样式的一些扩展 及自定义样式*/
444
+
445
+ .el-button {
446
+ .iconfont {
447
+ // .el-button下使用iconfont图标
448
+ font-size: 14px;
449
+ + span {
450
+ margin-left: 5px;
451
+ }
452
+ }
453
+ + .el-dropdown {
454
+ // 此样式主要是searchbar 右侧的下拉按钮
455
+ margin-left: 10px;
456
+ }
457
+ }
458
+
459
+ // 表格的操作按钮样式
460
+ .operation-a {
461
+ color: $primary-color;
462
+ cursor: pointer;
463
+ }
464
+
465
+ .operation-a + .operation-a {
466
+ margin-left: 10px;
467
+ }
468
+
469
+ .search-condition-list {
470
+ // 搜索条件的标签列表
471
+ .el-tag {
472
+ margin-bottom: 10px;
473
+ }
474
+
475
+ .tags:not(:first-child) {
476
+ margin-left: 6px;
477
+ }
478
+ .tags.clearall {
479
+ cursor: pointer;
480
+ }
481
+ }
482
+
483
+ // 右上角的选择年份
484
+ .drop-select-year {
485
+ position: relative;
486
+ .el-input--prefix .el-input__inner {
487
+ font-family: 'Helvetica Neue', Helvetica, 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', 微软雅黑, Arial, sans-serif;
488
+ padding-left: 10px;
489
+ padding-right: 10px;
490
+ border: none;
491
+ background: none;
492
+ cursor: pointer;
493
+ color: #000;
494
+ font-weight: 600;
495
+ }
496
+ .el-input__icon {
497
+ width: 0;
498
+ display: none;
499
+ }
500
+ .right-p {
501
+ position: absolute;
502
+ top: 9px;
503
+ right: -2px;
504
+ color: #000;
505
+ }
506
+ }