@v2coding/ui 0.1.0 → 0.1.5

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.
@@ -0,0 +1,202 @@
1
+ <template>
2
+ <document-title :title="title">
3
+ <multipane class="router-search-page" >
4
+ <div class="page-search-conditions" :class="{collapse}" :style="searchConditionsStyle">
5
+ <div v-show="!collapse" class="search-content">
6
+ <slot name="search"></slot>
7
+ </div>
8
+ <div class="indicator" @click="toggleCollapse"></div>
9
+ </div>
10
+ <multipane-resizer v-show="!collapse"/>
11
+ <div class="page-search-content" :class="{'page-content-direction-row': direction === 'row'}">
12
+ <slot></slot>
13
+ </div>
14
+ </multipane>
15
+ </document-title>
16
+ </template>
17
+
18
+ <script>
19
+ import {Multipane, MultipaneResizer} from 'vue-multipane';
20
+ import DocumentTitle from '../document-title';
21
+
22
+ export default {
23
+ name: 'ui-search-page',
24
+ components: {
25
+ Multipane,
26
+ MultipaneResizer,
27
+ DocumentTitle,
28
+ },
29
+ props: {
30
+ value: {
31
+ type: String,
32
+ default: '360px',
33
+ },
34
+ min: {
35
+ type: String,
36
+ default: '200px',
37
+ },
38
+ max: {
39
+ type: String,
40
+ default: '600px',
41
+ },
42
+ direction: {
43
+ type: String,
44
+ validator: (val) => ['row', 'column'].includes(val),
45
+ default: 'column',
46
+ },
47
+ },
48
+ data() {
49
+ return {
50
+ collapse: false,
51
+ }
52
+ },
53
+ computed: {
54
+ title() {
55
+ return this.$route.meta.name || '';
56
+ },
57
+ searchConditionsStyle() {
58
+ let width = this.value;
59
+ let min = this.min;
60
+ if (this.collapse) {
61
+ min = 0;
62
+ width = 0;
63
+ }
64
+ return {
65
+ width: width,
66
+ minWidth: min,
67
+ maxWidth: this.max,
68
+ };
69
+ },
70
+ },
71
+ methods: {
72
+ toggleCollapse() {
73
+ this.collapse = !this.collapse;
74
+ },
75
+ },
76
+ };
77
+ </script>
78
+
79
+ <style lang="scss">
80
+
81
+ .router-search-page {
82
+ height: 100%;
83
+
84
+ .page-search-conditions {
85
+ display: flex;
86
+ flex-direction: column;
87
+ position: relative;
88
+
89
+ .search-content {
90
+ flex: 1;
91
+ display: flex;
92
+ flex-direction: column;
93
+ }
94
+
95
+ .indicator {
96
+ position: absolute;
97
+ top: 50%;
98
+ right: 0;
99
+ transform: translateY(-50%);
100
+ width: 14px;
101
+ height: 36px;
102
+ opacity: 0.3;
103
+ background-color: #ccc;
104
+ transition-duration: 200ms;
105
+ transition-property: background-color, opacity;
106
+ transition-timing-function: ease-in-out;
107
+ display: flex;
108
+ align-items: center;
109
+ justify-content: center;
110
+ flex-direction: column;
111
+ border-radius: 4px 0 0 4px;
112
+ cursor: pointer;
113
+
114
+ &:hover {
115
+ opacity: 1;
116
+ background-color: var(--color-primary);
117
+ }
118
+
119
+ &:hover:before {
120
+ transform: rotate(24deg);
121
+ }
122
+ &:hover:after {
123
+ transform: rotate(-24deg);
124
+ }
125
+
126
+ &::before,
127
+ &::after {
128
+ content: '';
129
+ display: block;
130
+ position: relative;
131
+ width: 2px;
132
+ height: 10px;
133
+ background-color: #fff;
134
+ transition: all 300ms ease-in-out;
135
+ }
136
+ &::before {
137
+ bottom: -1px;
138
+ }
139
+ &::after {
140
+ top: -1px;
141
+ }
142
+ }
143
+
144
+ &.collapse {
145
+ z-index: 2;
146
+
147
+ .indicator {
148
+ border-radius: 0 4px 4px 0;
149
+ right: -14px;
150
+
151
+ &:hover:before {
152
+ transform: rotate(-24deg);
153
+ }
154
+ &:hover:after {
155
+ transform: rotate(24deg);
156
+ }
157
+ }
158
+ }
159
+ }
160
+
161
+ .page-search-content {
162
+ flex: 1;
163
+ position: relative;
164
+ display: flex;
165
+ flex-direction: column;
166
+ overflow: auto;
167
+
168
+ &.page-search-content-direction-row {
169
+ flex-direction: row;
170
+ }
171
+ }
172
+
173
+ &.layout-v > .multipane-resizer {
174
+ margin: 0;
175
+ left: 0;
176
+ position: relative;
177
+
178
+ &.collapse {
179
+ display: none;
180
+ }
181
+
182
+ &:before {
183
+ display: block;
184
+ content: "";
185
+ width: 3px;
186
+ height: 40px;
187
+ position: absolute;
188
+ top: 50%;
189
+ left: 50%;
190
+ transform: translate(-50%, -50%);
191
+ border-left: 1px solid #ccc;
192
+ border-right: 1px solid #ccc;
193
+ }
194
+
195
+ &:hover {
196
+ &:before {
197
+ border-color: #999;
198
+ }
199
+ }
200
+ }
201
+ }
202
+ </style>
@@ -1,14 +1,14 @@
1
1
  <template>
2
- <div :class="['scroll-nav__nav-wrap', `is-${direction}`]">
3
- <div :class="['scroll-nav__nav-control scroll-nav__nav-prev', scrollable ? 'scroll-nav__nav-active' : '', scrollable && scrollable.prev ? '' : 'is-disabled']" @click="scrollPrev">
2
+ <div :class="['ui-scroll-view__nav-wrap', `is-${direction}`]">
3
+ <div :class="['ui-scroll-view__nav-control ui-scroll-view__nav-prev', scrollable ? 'ui-scroll-view__nav-active' : '', scrollable && scrollable.prev ? '' : 'is-disabled']" @click="scrollPrev">
4
4
  <slot name="prev" :disabled="scrollable && !scrollable.prev"><div class="menu-nav-control"></div></slot>
5
5
  </div>
6
- <div ref="navScroll" class="scroll-nav__nav-scroll">
7
- <div ref="nav" :class="['scroll-nav__nav', `is-${direction}`]" :style="navStyle">
6
+ <div ref="navScroll" class="ui-scroll-view__nav-scroll">
7
+ <div ref="nav" :class="['ui-scroll-view__nav', `is-${direction}`]" :style="navStyle">
8
8
  <slot></slot>
9
9
  </div>
10
10
  </div>
11
- <div :class="['scroll-nav__nav-control scroll-nav__nav-next', scrollable ? 'scroll-nav__nav-active' : '', scrollable && scrollable.next ? '' : 'is-disabled']" @click="scrollNext">
11
+ <div :class="['ui-scroll-view__nav-control ui-scroll-view__nav-next', scrollable ? 'ui-scroll-view__nav-active' : '', scrollable && scrollable.next ? '' : 'is-disabled']" @click="scrollNext">
12
12
  <slot name="next" :disabled="scrollable && !scrollable.next"><div class="menu-nav-control"></div></slot>
13
13
  </div>
14
14
  </div>
@@ -22,7 +22,7 @@ const firstUpperCase = str => {
22
22
  };
23
23
 
24
24
  export default {
25
- name: 'ScrollNav',
25
+ name: 'ui-scroll-view',
26
26
  props: {
27
27
  direction: {
28
28
  type: String,
@@ -154,7 +154,7 @@ export default {
154
154
  </script>
155
155
 
156
156
  <style lang="less">
157
- .scroll-nav__nav-wrap {
157
+ .ui-scroll-view__nav-wrap {
158
158
  overflow: hidden;
159
159
  position: relative;
160
160
  display: flex;
@@ -169,10 +169,10 @@ export default {
169
169
  flex-direction: column;
170
170
  }
171
171
 
172
- .scroll-nav__nav-scroll {
172
+ .ui-scroll-view__nav-scroll {
173
173
  overflow: hidden;
174
174
 
175
- .scroll-nav__nav {
175
+ .ui-scroll-view__nav {
176
176
  position: relative;
177
177
  transition: transform .3s;
178
178
  display: flex;
@@ -189,7 +189,7 @@ export default {
189
189
  }
190
190
  }
191
191
 
192
- &.is-row .scroll-nav__nav-control {
192
+ &.is-row .ui-scroll-view__nav-control {
193
193
  flex: none;
194
194
  width: 50px;
195
195
  height: 100%;
@@ -200,7 +200,7 @@ export default {
200
200
  justify-content: center;
201
201
  visibility: hidden;
202
202
 
203
- &.scroll-nav__nav-active {
203
+ &.ui-scroll-view__nav-active {
204
204
  visibility: visible;
205
205
  }
206
206
 
@@ -233,7 +233,7 @@ export default {
233
233
  }
234
234
  }
235
235
 
236
- &.scroll-nav__nav-prev {
236
+ &.ui-scroll-view__nav-prev {
237
237
  .menu-nav-control::before {
238
238
  transform: rotate(18deg);
239
239
  }
@@ -243,7 +243,7 @@ export default {
243
243
  }
244
244
  }
245
245
 
246
- &.scroll-nav__nav-next {
246
+ &.ui-scroll-view__nav-next {
247
247
  .menu-nav-control::before {
248
248
  transform: rotate(-18deg);
249
249
  }
@@ -253,7 +253,7 @@ export default {
253
253
  }
254
254
  }
255
255
 
256
- &.scroll-nav__nav-prev:hover {
256
+ &.ui-scroll-view__nav-prev:hover {
257
257
  .menu-nav-control::before {
258
258
  transform: rotate(30deg);
259
259
  }
@@ -263,7 +263,7 @@ export default {
263
263
  }
264
264
  }
265
265
 
266
- &.scroll-nav__nav-next:hover {
266
+ &.ui-scroll-view__nav-next:hover {
267
267
  .menu-nav-control::before {
268
268
  transform: rotate(-30deg);
269
269
  }
@@ -286,7 +286,7 @@ export default {
286
286
  &.is-column {
287
287
  height: 100%;
288
288
 
289
- .scroll-nav__nav-control {
289
+ .ui-scroll-view__nav-control {
290
290
  flex: none;
291
291
  width: 100%;
292
292
  height: 35px;
@@ -297,7 +297,7 @@ export default {
297
297
  justify-content: center;
298
298
  visibility: hidden;
299
299
 
300
- &.scroll-nav__nav-active {
300
+ &.ui-scroll-view__nav-active {
301
301
  visibility: visible;
302
302
  }
303
303
 
@@ -330,7 +330,7 @@ export default {
330
330
  }
331
331
  }
332
332
 
333
- &.scroll-nav__nav-prev {
333
+ &.ui-scroll-view__nav-prev {
334
334
  .menu-nav-control::before {
335
335
  transform: rotate(-18deg);
336
336
  }
@@ -340,7 +340,7 @@ export default {
340
340
  }
341
341
  }
342
342
 
343
- &.scroll-nav__nav-next {
343
+ &.ui-scroll-view__nav-next {
344
344
  .menu-nav-control::before {
345
345
  transform: rotate(18deg);
346
346
  }
@@ -350,7 +350,7 @@ export default {
350
350
  }
351
351
  }
352
352
 
353
- &.scroll-nav__nav-prev:hover {
353
+ &.ui-scroll-view__nav-prev:hover {
354
354
  .menu-nav-control::before {
355
355
  transform: rotate(-30deg);
356
356
  }
@@ -360,7 +360,7 @@ export default {
360
360
  }
361
361
  }
362
362
 
363
- &.scroll-nav__nav-next:hover {
363
+ &.ui-scroll-view__nav-next:hover {
364
364
  .menu-nav-control::before {
365
365
  transform: rotate(30deg);
366
366
  }
@@ -104,7 +104,7 @@
104
104
  const listSearchItem = (items) => {
105
105
  return items.reduce((results, item) => {
106
106
  if (item.$options.name === TableSelectItem.name) {
107
- if (item.ignore === false) {
107
+ if (!item.ignore) {
108
108
  results.push(item);
109
109
  }
110
110
  } else {
@@ -20,7 +20,7 @@
20
20
  </div>
21
21
  </div>
22
22
  </div>
23
- <flex-scroll-view>
23
+ <fill-view>
24
24
  <el-table
25
25
  ref="table"
26
26
  height="100%"
@@ -42,7 +42,7 @@
42
42
  <div class="ui-table-empty">暂无数据</div>
43
43
  </template>
44
44
  </el-table>
45
- </flex-scroll-view>
45
+ </fill-view>
46
46
  <div v-show="hasPagination" class="footer-bar">
47
47
  <slot name="footer-bar"/>
48
48
  </div>
@@ -50,6 +50,7 @@
50
50
  </div>
51
51
  </template>
52
52
  <script>
53
+ import FillView from '../fill-view/fill-view';
53
54
  import ExportsMixin from '../exports/mixin';
54
55
  import RemoteExportsDialog from '../exports/remote-exports-dialog';
55
56
 
@@ -595,12 +596,13 @@
595
596
  // },
596
597
  },
597
598
  components: {
599
+ FillView,
598
600
  RemoteExportsDialog,
599
601
  Refresh: {
600
602
  render(createElement) {
601
603
  return createElement('el-tooltip', {props: {content: '刷新'}}, [
602
604
  createElement('el-button', {
603
- props: {icon: 'el-icon-fa-refresh', size: 'mini', circle: true},
605
+ props: {icon: 'el-icon-refresh', size: 'mini', circle: true},
604
606
  on: {click: this.$parent.reload},
605
607
  }),
606
608
  ]);
@@ -610,7 +612,7 @@
610
612
  render(createElement) {
611
613
  return createElement('el-tooltip', {props: {content: '导出Excel'}}, [
612
614
  createElement('el-button', {
613
- props: {icon: 'el-icon-fa-cloud-download', size: 'mini', circle: true},
615
+ props: {icon: 'el-icon-download', size: 'mini', circle: true},
614
616
  on: {click: this.$parent.exportsRemote},
615
617
  }),
616
618
  ]);
@@ -665,7 +667,7 @@
665
667
  }
666
668
  return createElement('el-tooltip', {props: {content: this.$parent.searchBarVisible ? '隐藏查询区域' : '显示查询区域'}}, [
667
669
  createElement('el-button', {
668
- props: {icon: 'el-icon-fa-search', circle: true},
670
+ props: {icon: 'el-icon-search', circle: true},
669
671
  on: {click: this.$parent.toggleSearchBarVisible},
670
672
  }),
671
673
  ]);
@@ -777,7 +779,7 @@
777
779
 
778
780
  .ui-table-empty {
779
781
  padding-top: 110px;
780
- background: url("../../../assets/img/empty.svg") center top no-repeat;
782
+ background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTg0IiBoZWlnaHQ9IjE1MiIgdmlld0JveD0iMCAwIDE4NCAxNTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgPGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj4KICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI0IDMxLjY3KSI+CiAgICAgIDxlbGxpcHNlIGZpbGwtb3BhY2l0eT0iLjgiIGZpbGw9IiNGNUY1RjciIGN4PSI2Ny43OTciIGN5PSIxMDYuODkiIHJ4PSI2Ny43OTciIHJ5PSIxMi42NjgiPjwvZWxsaXBzZT4KICAgICAgPHBhdGggZD0iTTEyMi4wMzQgNjkuNjc0TDk4LjEwOSA0MC4yMjljLTEuMTQ4LTEuMzg2LTIuODI2LTIuMjI1LTQuNTkzLTIuMjI1aC01MS40NGMtMS43NjYgMC0zLjQ0NC44MzktNC41OTIgMi4yMjVMMTMuNTYgNjkuNjc0djE1LjM4M2gxMDguNDc1VjY5LjY3NHoiIGZpbGw9IiNBRUI4QzIiPjwvcGF0aD4KICAgICAgPHBhdGggZD0iTTEwMS41MzcgODYuMjE0TDgwLjYzIDYxLjEwMmMtMS4wMDEtMS4yMDctMi41MDctMS44NjctNC4wNDgtMS44NjdIMzEuNzI0Yy0xLjU0IDAtMy4wNDcuNjYtNC4wNDggMS44NjdMNi43NjkgODYuMjE0djEzLjc5Mmg5NC43NjhWODYuMjE0eiIgZmlsbD0idXJsKCNsaW5lYXJHcmFkaWVudC0xKSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTMuNTYpIj48L3BhdGg+CiAgICAgIDxwYXRoIGQ9Ik0zMy44MyAwaDY3LjkzM2E0IDQgMCAwIDEgNCA0djkzLjM0NGE0IDQgMCAwIDEtNCA0SDMzLjgzYTQgNCAwIDAgMS00LTRWNGE0IDQgMCAwIDEgNC00eiIgZmlsbD0iI0Y1RjVGNyI+PC9wYXRoPgogICAgICA8cGF0aAogICAgICAgIGQ9Ik00Mi42NzggOS45NTNoNTAuMjM3YTIgMiAwIDAgMSAyIDJWMzYuOTFhMiAyIDAgMCAxLTIgMkg0Mi42NzhhMiAyIDAgMCAxLTItMlYxMS45NTNhMiAyIDAgMCAxIDItMnpNNDIuOTQgNDkuNzY3aDQ5LjcxM2EyLjI2MiAyLjI2MiAwIDEgMSAwIDQuNTI0SDQyLjk0YTIuMjYyIDIuMjYyIDAgMCAxIDAtNC41MjR6TTQyLjk0IDYxLjUzaDQ5LjcxM2EyLjI2MiAyLjI2MiAwIDEgMSAwIDQuNTI1SDQyLjk0YTIuMjYyIDIuMjYyIDAgMCAxIDAtNC41MjV6TTEyMS44MTMgMTA1LjAzMmMtLjc3NSAzLjA3MS0zLjQ5NyA1LjM2LTYuNzM1IDUuMzZIMjAuNTE1Yy0zLjIzOCAwLTUuOTYtMi4yOS02LjczNC01LjM2YTcuMzA5IDcuMzA5IDAgMCAxLS4yMjItMS43OVY2OS42NzVoMjYuMzE4YzIuOTA3IDAgNS4yNSAyLjQ0OCA1LjI1IDUuNDJ2LjA0YzAgMi45NzEgMi4zNyA1LjM3IDUuMjc3IDUuMzdoMzQuNzg1YzIuOTA3IDAgNS4yNzctMi40MjEgNS4yNzctNS4zOTNWNzUuMWMwLTIuOTcyIDIuMzQzLTUuNDI2IDUuMjUtNS40MjZoMjYuMzE4djMzLjU2OWMwIC42MTctLjA3NyAxLjIxNi0uMjIxIDEuNzg5eiIKICAgICAgICBmaWxsPSIjRENFMEU2Ij48L3BhdGg+CiAgICA8L2c+CiAgICA8cGF0aCBkPSJNMTQ5LjEyMSAzMy4yOTJsLTYuODMgMi42NWExIDEgMCAwIDEtMS4zMTctMS4yM2wxLjkzNy02LjIwN2MtMi41ODktMi45NDQtNC4xMDktNi41MzQtNC4xMDktMTAuNDA4QzEzOC44MDIgOC4xMDIgMTQ4LjkyIDAgMTYxLjQwMiAwIDE3My44ODEgMCAxODQgOC4xMDIgMTg0IDE4LjA5N2MwIDkuOTk1LTEwLjExOCAxOC4wOTctMjIuNTk5IDE4LjA5Ny00LjUyOCAwLTguNzQ0LTEuMDY2LTEyLjI4LTIuOTAyeiIgZmlsbD0iI0RDRTBFNiI+PC9wYXRoPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTQ5LjY1IDE1LjM4MykiIGZpbGw9IiNGRkYiPgogICAgICA8ZWxsaXBzZSBjeD0iMjAuNjU0IiBjeT0iMy4xNjciIHJ4PSIyLjg0OSIgcnk9IjIuODE1Ij48L2VsbGlwc2U+CiAgICAgIDxwYXRoIGQ9Ik01LjY5OCA1LjYzSDBMMi44OTguNzA0ek05LjI1OS43MDRoNC45ODVWNS42M0g5LjI1OXoiPjwvcGF0aD4KICAgIDwvZz4KICA8L2c+Cjwvc3ZnPgo=) center top no-repeat;
781
783
  background-size: auto 100px;
782
784
  color: rgba(0, 0, 0, 0.65);
783
785
  font-size: 14px;