vdesign-ui 0.1.22 → 0.1.24-beta

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 (60) hide show
  1. package/dist/components/activityviews/index.vue +13 -11
  2. package/dist/components/button/index.vue +1 -1
  3. package/dist/components/checkbox/index.vue +0 -26
  4. package/dist/components/dropdown/index.vue +72 -69
  5. package/dist/components/dropdown/style.less +23 -1
  6. package/dist/components/empty/404-dark.png +0 -0
  7. package/dist/components/empty/404.png +0 -0
  8. package/dist/components/empty/index.vue +30 -2
  9. package/dist/components/empty/network-dark.png +0 -0
  10. package/dist/components/empty/network.png +0 -0
  11. package/dist/components/empty/nocoupons-dark.png +0 -0
  12. package/dist/components/empty/nocoupons.png +0 -0
  13. package/dist/components/empty/nodata-dark.png +0 -0
  14. package/dist/components/empty/nodata.png +0 -0
  15. package/dist/components/empty/nomargin-dark.png +0 -0
  16. package/dist/components/empty/nomargin.png +0 -0
  17. package/dist/components/empty/nonotice-dark.png +0 -0
  18. package/dist/components/empty/nonotice.png +0 -0
  19. package/dist/components/empty/noocomments-dark.png +0 -0
  20. package/dist/components/empty/noocomments.png +0 -0
  21. package/dist/components/empty/noorders-dark.png +0 -0
  22. package/dist/components/empty/noorders.png +0 -0
  23. package/dist/components/empty/noposition-dark.png +0 -0
  24. package/dist/components/empty/noposition.png +0 -0
  25. package/dist/components/empty/nosearch-dark.png +0 -0
  26. package/dist/components/empty/nosearch.png +0 -0
  27. package/dist/components/footer/index.vue +1 -1
  28. package/dist/components/footnav/footnav-item/index.vue +2 -6
  29. package/dist/components/icon/font/iconfont.css +59 -949
  30. package/dist/components/icon/font/iconfont.js +1 -1
  31. package/dist/components/input/index.vue +31 -8
  32. package/dist/components/input/style.less +0 -1
  33. package/dist/components/loading/img_status_loading_white_ani.svg +155 -0
  34. package/dist/components/loading/img_status_refresh_ani.svg +158 -0
  35. package/dist/components/loading/index.vue +4 -3
  36. package/dist/components/loading/style.less +1 -1
  37. package/dist/components/mixins/clickoutside.js +81 -81
  38. package/dist/components/pagebreak/index.vue +11 -5
  39. package/dist/components/radio/index.vue +3 -7
  40. package/dist/components/radio/style.css +213 -0
  41. package/dist/components/radio/style.less +5 -0
  42. package/dist/components/result/index.vue +1 -2
  43. package/dist/components/selector/index.vue +64 -31
  44. package/dist/components/selector/style.less +10 -0
  45. package/dist/components/slider/index.vue +0 -6
  46. package/dist/components/title/index.vue +1 -1
  47. package/dist/components/upload/index.vue +67 -189
  48. package/dist/img/img_status_loading_white_ani.b56fcfae.svg +155 -0
  49. package/dist/img/img_status_refresh_ani.d0e59f12.svg +158 -0
  50. package/dist/token.css +10 -2
  51. package/dist/vdesign-ui.common.js +888 -795
  52. package/dist/vdesign-ui.css +1 -1
  53. package/dist/vdesign-ui.umd.js +888 -795
  54. package/dist/vdesign-ui.umd.min.js +3 -3
  55. package/package.json +1 -1
  56. package/dist/components/loading/loading.png +0 -0
  57. package/dist/components/loading/refresh.png +0 -0
  58. package/dist/img/404-dark.775df5bb.png +0 -0
  59. package/dist/img/network-dark.11a147bb.png +0 -0
  60. package/dist/img/nodata-dark.b0ea0e39.png +0 -0
@@ -13,7 +13,7 @@
13
13
  <vd-icon v-if="closeIcon" class="vd-activityviews__close" :name="currentCloseIcon" svg
14
14
  @click="onCancel"></vd-icon>
15
15
  <vd-button v-if="closeBtn" class="vd-activityviews__done" type="primary_text" size="large"
16
- @click="onCancel">{{ closeBtn }}</vd-button>
16
+ @click="onCancel">{{ closeBtn }}</vd-button>
17
17
  </slot>
18
18
  </div>
19
19
  <p v-if="description" class="vd-activityviews__description">{{ description }}</p>
@@ -23,8 +23,9 @@
23
23
  <div v-if="actionSheet" class="vd-activityviews__action">
24
24
  <p v-if="title" class="vd-activityviews__action-title vd-hairline--bottom">{{ title }}</p>
25
25
  <div class="vd-activityviews__actions">
26
- <vd-button v-for="(item, index) in actions" block size="large" :type="item.type" :key="index" :class="{ 'vd-hairline--bottom': index !== actions.length - 1 }"
27
- :disabled="item.disabled" @click.stop="onSelect(item)" >{{ item.name }}</vd-button>
26
+ <vd-button v-for="(item, index) in actions" block size="large" :type="item.type"
27
+ :key="index" :class="{ 'vd-hairline--bottom': index !== actions.length - 1 }"
28
+ :disabled="item.disabled" @click.stop="onSelect(item)">{{ item.name }}</vd-button>
28
29
  </div>
29
30
  <div v-if="cancelText" class="vd-activityviews__gap"></div>
30
31
  <div v-if="cancelText" class="vd-activityviews__cancel" @click="onCancel">
@@ -47,7 +48,7 @@ export default {
47
48
  props: {
48
49
  value: Boolean,
49
50
  title: String,
50
- backDefault:Boolean,
51
+ backDefault: Boolean,
51
52
  closeIcon: Boolean,
52
53
  closeBtn: String,
53
54
  description: String,
@@ -69,7 +70,7 @@ export default {
69
70
  default: true
70
71
  },
71
72
  disabled: Boolean,
72
- closeOnOverlay:{
73
+ closeOnOverlay: {
73
74
  type: Boolean,
74
75
  default: true
75
76
  },
@@ -79,7 +80,7 @@ export default {
79
80
  }
80
81
  },
81
82
  computed: {
82
- visible(){
83
+ visible() {
83
84
  return this.value
84
85
  },
85
86
  currentCloseIcon() {
@@ -121,20 +122,21 @@ export default {
121
122
 
122
123
  .vd-activityviews-fade-enter-active,
123
124
  .vd-activityviews-fade-leave-active {
124
- transition: opacity 0.3s;
125
+ transition: opacity 0.3s;
125
126
  }
127
+
126
128
  .vd-activityviews-fade-enter,
127
129
  .vd-activityviews-fade-leave-to {
128
- opacity: 0;
130
+ opacity: 0;
129
131
  }
130
132
 
131
133
  .vd-activityviews-slide-up-enter-active,
132
134
  .vd-activityviews-slide-up-leave-active {
133
- transition: transform 0.3s;
135
+ transition: transform 0.3s;
134
136
  }
137
+
135
138
  .vd-activityviews-slide-up-enter,
136
139
  .vd-activityviews-slide-up-leave-to {
137
- transform: translateY(100%);
140
+ transform: translateY(100%);
138
141
  }
139
-
140
142
  </style>
@@ -33,7 +33,7 @@ export default {
33
33
  },
34
34
  loadingIcon: {
35
35
  type: String,
36
- default: 'icon_show_statisticsprice'
36
+ default: 'icon_show_list_loading'
37
37
  },
38
38
  block: {
39
39
  type: Boolean,
@@ -37,31 +37,6 @@
37
37
  <slot></slot>
38
38
  </span>
39
39
  </template>
40
- <!-- <div class="vd-checkbox-button__icon">
41
- <vd-icon
42
- v-if="icon"
43
- :name="icon"
44
- class="vd-checkbox-button__icon--large"
45
- :class="{ 'vd-checkbox-button__icon-mb': iconDescriptionText }"
46
- ></vd-icon>
47
- <vd-icon
48
- v-if="LeftIcon"
49
- :name="LeftIcon"
50
- class="vd-checkbox-button__icon--small"
51
- ></vd-icon>
52
- <span
53
- v-if="iconText"
54
- class="vd-checkbox-button__text"
55
- :class="{ 'vd-checkbox-button__text-mb': descriptionText }"
56
- >{{ iconText }}</span
57
- >
58
- </div>
59
- <span class="vd-checkbox-button-descript" v-if="descriptionText">{{
60
- descriptionText
61
- }}</span>
62
- <span class="vd-checkbox-button__icon-descript" v-if="iconDescriptionText">{{
63
- iconDescriptionText
64
- }}</span> -->
65
40
  </label>
66
41
  </template>
67
42
  <script>
@@ -97,7 +72,6 @@ export default {
97
72
  currentValue: this.value,
98
73
  group: false,
99
74
  parent: findComponentUpward(this, "vd-checkbox-group"),
100
- // name: "",
101
75
  };
102
76
  },
103
77
  computed: {
@@ -1,44 +1,36 @@
1
1
  <template>
2
2
  <div class="vd-dropdown" :class="wrapClasses" v-show="isMask">
3
- <transition :name="isAnimation ? 'vd-dropdown-fade' : ''">
3
+ <!-- <transition :name="isAnimation ? 'vd-dropdown-fade' : ''">
4
4
  <div class="vd-menu-mask" @click.stop="clickMenuMask"></div>
5
- </transition>
6
-
5
+ </transition> -->
7
6
  <transition :name="isAnimation ? 'vd-dropdown-slide-down' : ''">
8
- <div class="vd-dropdown-menu" v-show="value">
9
-
7
+ <div v-clickoutside="clickMenuMask" class="vd-dropdown-menu" v-show="isMask">
10
8
  <template v-if="!isMultiple && !$slots.custom">
11
- <div class="vd-dropdown-item" :class="itemClass(item)" v-for="(item, index) of datalist" :key="item.name"
9
+ <div class="vd-dropdown-item" :class="itemClass(item)" v-for="(item, index) in datalist" :key="item.name"
12
10
  @click.stop="selectedItem(item, index)">
13
11
  <span class="vd-dropdown-left">
14
12
  <vd-icon v-if="item.icon" :name="item.icon" svg class="vd-dropdown-icon"></vd-icon>
15
13
  <span class="vd-dropdown-group-cell">
16
- <span class="vd-dropdown-text">
17
- {{ item.text }}
18
- </span>
19
- <span v-if="['group'].includes(types)" class="vd-dropdown-group-sub">
14
+ <span class="vd-dropdown-text">{{ item.text }}</span>
15
+ <span v-if="types === 'group'" class="vd-dropdown-group-sub">
20
16
  <vd-icon v-if="item.subIcon" :name="item.subIcon" svg class="vd-dropdown-sub-icon"></vd-icon>
21
17
  <span class="vd-dropdown-subtext" v-html="item.subText"></span>
22
18
  </span>
23
19
  </span>
24
20
  </span>
25
-
26
- <vd-icon v-if="['primary'].includes(types) && item.selected" class="vd-dropdown-active-select"
21
+ <vd-icon v-if="types === 'primary' && item.selected" class="vd-dropdown-active-select"
27
22
  name="icon_btn_singleslt" color="#1BC47D"></vd-icon>
28
- <span v-if="['state'].includes(types)" v-html="item.stateText" class="vd-dropdown-state-text"
23
+ <span v-if="types === 'state'" v-html="item.stateText" class="vd-dropdown-state-text"
29
24
  :class="`vd-dropdown-state-text--${item.state}`"></span>
30
25
  </div>
31
26
  </template>
32
27
 
33
28
  <template v-if="isMultiple">
34
- <div class="vd-dropdown-item" :class="itemClass(item)" v-for="item of datalist" :key="item.name">
35
-
36
- <vd-checkbox v-model="item.selected"
37
- :disabled="!item.selected && max <= list.filter(value => value.selected == true).length ? true : false">
29
+ <div class="vd-dropdown-item" :class="itemClass(item)" v-for="item in datalist" :key="item.name">
30
+ <vd-checkbox v-model="item.selected" :disabled="!item.selected && max <= selectedCount">
38
31
  {{ item.text }}
39
32
  </vd-checkbox>
40
-
41
- <vd-icon v-if="['primary'].includes(types) && item.selected" class="vd-dropdown-active-select"
33
+ <vd-icon v-if="types === 'primary' && item.selected" class="vd-dropdown-active-select"
42
34
  name="icon_btn_singleslt" color="#1BC47D"></vd-icon>
43
35
  </div>
44
36
  <div class="vd-dropdown--btn">
@@ -52,16 +44,20 @@
52
44
  </div>
53
45
  </div>
54
46
  </transition>
55
-
56
47
  </div>
57
48
  </template>
49
+
58
50
  <script>
51
+ import clickoutside from "../mixins/clickoutside.js";
52
+
59
53
  const prefixCls = 'vd-dropdown';
60
54
  export default {
61
55
  name: 'vd-dropdown',
56
+ directives: {
57
+ clickoutside
58
+ },
62
59
  props: {
63
60
  isAnimation: {
64
- //是否有动画效果
65
61
  type: Boolean,
66
62
  default: false
67
63
  },
@@ -71,7 +67,6 @@ export default {
71
67
  validator: value => ['primary', 'secondary', 'state', 'group'].includes(value)
72
68
  },
73
69
  value: {
74
- //是否显示
75
70
  type: Boolean,
76
71
  default: false
77
72
  },
@@ -83,13 +78,17 @@ export default {
83
78
  type: Boolean,
84
79
  default: false
85
80
  },
81
+ alignment: {
82
+ type: String,
83
+ default: 'center',
84
+ validator: value => ['start', 'end', 'center'].includes(value)
85
+ },
86
86
  col: {
87
- //显示的列数
88
87
  type: [Number, String],
89
88
  default: 1
90
89
  },
91
90
  max: {
92
- type: [String, Number],
91
+ type: [Number, String],
93
92
  default: 5
94
93
  },
95
94
  custom: {
@@ -98,49 +97,40 @@ export default {
98
97
  },
99
98
  list: {
100
99
  type: Array,
101
- default: () => {
102
- return [];
103
- }
104
- },
105
- // state
106
- state: {
107
- type: String,
108
- default: 'close',
109
- validator: value => ['open', 'preopen', 'close', 'fusing', 'pre', 'last'].includes(value)
100
+ default: () => []
110
101
  },
111
- stateText: {
102
+ for: {
112
103
  type: String,
113
104
  default: ''
114
105
  },
115
- // group
116
- subText: {
117
- type: String,
118
- default: ''
119
- },
120
- subIcon: {
121
- type: String,
122
- default: ''
123
- }
124
- },
125
- watch: {
126
- value(val) {
127
- this.isMask = val ? true : false
128
- }
129
106
  },
130
107
  data() {
131
108
  return {
132
- datalist: [],
133
- isMask: false
109
+ datalist: []
134
110
  };
135
111
  },
136
- mounted() {
137
- this.datalist = [...this.list];
112
+ watch: {
113
+ list: {
114
+ immediate: true,
115
+ handler(val) {
116
+ this.datalist = [...val];
117
+ }
118
+ },
119
+ value(val){
120
+ if(!val){
121
+ this.$emit('close')
122
+ }
123
+ }
138
124
  },
139
125
  computed: {
126
+ isMask() {
127
+ return this.value;
128
+ },
140
129
  wrapClasses() {
141
130
  return {
142
131
  [`${prefixCls}-${this.types}`]: this.types,
143
132
  [`${prefixCls}--divided`]: this.types !== 'state',
133
+ [`${prefixCls}-${this.alignment}`]: this.alignment
144
134
  };
145
135
  },
146
136
  okBtnTxt() {
@@ -148,6 +138,9 @@ export default {
148
138
  },
149
139
  resetBtnTxt() {
150
140
  return '重置';
141
+ },
142
+ selectedCount() {
143
+ return this.datalist.filter(item => item.selected).length;
151
144
  }
152
145
  },
153
146
  methods: {
@@ -155,36 +148,46 @@ export default {
155
148
  return {
156
149
  [`${prefixCls}--disabled`]: item.disabled,
157
150
  [`${prefixCls}--active`]: item.selected
158
- }
151
+ };
159
152
  },
160
- clickMenuMask() {
161
- this.isMask = false;
162
- this.$emit('close');
153
+ findParentWithNameAttr(element, nameValue) {
154
+ // 如果当前元素具有 name 属性且与传入的值匹配,返回该元素
155
+ if (element.getAttribute && element.getAttribute('alias-name') === nameValue) {
156
+ return element;
157
+ }
158
+ // 如果已经到达根元素 (document 或 null),停止查找
159
+ if (element.parentElement) {
160
+ return this.findParentWithNameAttr(element.parentElement, nameValue); // 递归查找父元素
161
+ }
162
+ return null; // 没有找到带 name 属性的匹配元素
163
+ },
164
+ clickMenuMask(e) {
165
+ if (this.value) {
166
+ if(this.for){
167
+ const nameElement = this.findParentWithNameAttr(e, this.for)
168
+ // 如果没找到就说明点外面了
169
+ if (!nameElement) {
170
+ this.$emit('input', false);
171
+ }
172
+ }
173
+ }
163
174
  },
164
175
  selectedItem(item, index) {
165
- this.$emit('change', item, index);
166
- },
167
- selectMultiple(index) {
168
- const count = this.datalist.filter(item => item.selected).length;
169
- if (!this.datalist[index].selected && count >= this.max) {
170
- this.$emit('maxTip');
171
- return;
172
- }
173
- this.$set(this.datalist[index], 'selected', !this.datalist[index].selected);
176
+ this.$emit('change', item, index); // 通知父组件选中项改变
174
177
  },
175
178
  resetMenu() {
176
- this.datalist.map(value => (value.selected = false));
179
+ this.datalist.forEach(item => (item.selected = false));
177
180
  this.$emit('reset', this.datalist);
178
181
  },
179
182
  sureMenu() {
180
- this.isMask = false;
181
- this.$emit('close');
182
- this.$emit('ok', this.datalist);
183
+ this.$emit('close'); // 关闭菜单
184
+ this.$emit('ok', this.datalist); // 确认并返回数据
183
185
  }
184
186
  }
185
187
  };
186
188
  </script>
187
189
 
190
+
188
191
  <style lang="less">
189
192
  @import './style.less';
190
193
 
@@ -35,11 +35,33 @@
35
35
  transform-origin: top center;
36
36
  position: absolute;
37
37
  transition: transform 0.25s ease, opacity 0.25s ease;
38
- inset-inline-start: 50%;
39
38
  inset-block-start: 100%;
39
+ // 默认 center
40
+ inset-inline-start: 50%;
40
41
  transform: translate(var(--translate-x), 2px);
41
42
  }
42
43
 
44
+ &-start {
45
+ .@{dropdown-prefix-cls}-menu {
46
+ inset-inline-start: 0;
47
+ transform: translate(0, 2px);
48
+ }
49
+ }
50
+
51
+ &-end {
52
+ .@{dropdown-prefix-cls}-menu {
53
+ inset-inline-start: inherit;
54
+ inset-inline-end: 0;
55
+ transform: translate(0, 2px);
56
+ }
57
+ }
58
+
59
+ &-center {
60
+ .@{dropdown-prefix-cls}-menu {
61
+ inset-inline-start: 50%;
62
+ transform: translate(var(--translate-x), 2px);
63
+ }
64
+ }
43
65
 
44
66
  &-primary {
45
67
  .@{dropdown-prefix-cls}-menu {
Binary file
Binary file
@@ -25,7 +25,7 @@ export default {
25
25
  default: 'nodata', // 默认类型
26
26
  validator(value) {
27
27
  // 只接受以下类型值
28
- return ['nodata', 'network', 'not-found'].includes(value);
28
+ return ['nodata', 'network', 'not-found','noposition','nomargin','nocoupons','nosearch','nonotice','noorders','noocomments'].includes(value);
29
29
  }
30
30
  },
31
31
  },
@@ -43,7 +43,35 @@ export default {
43
43
  'not-found': {
44
44
  light: require('./404.png'),
45
45
  dark: require('./404-dark.png')
46
- }
46
+ },
47
+ noposition: {
48
+ light: require('./noposition.png'),
49
+ dark: require('./noposition-dark.png')
50
+ },
51
+ nomargin: {
52
+ light: require('./nomargin.png'),
53
+ dark: require('./nomargin-dark.png')
54
+ },
55
+ nocoupons: {
56
+ light: require('./nocoupons.png'),
57
+ dark: require('./nocoupons-dark.png')
58
+ },
59
+ nosearch: {
60
+ light: require('./nosearch.png'),
61
+ dark: require('./nosearch-dark.png')
62
+ },
63
+ nonotice: {
64
+ light: require('./nonotice.png'),
65
+ dark: require('./nonotice-dark.png')
66
+ },
67
+ noorders: {
68
+ light: require('./noorders.png'),
69
+ dark: require('./noorders-dark.png')
70
+ },
71
+ noocomments: {
72
+ light: require('./noocomments.png'),
73
+ dark: require('./noocomments-dark.png')
74
+ },
47
75
  }
48
76
  }
49
77
  },
Binary file
Binary file
@@ -4,7 +4,7 @@
4
4
  <slot>
5
5
  </slot>
6
6
  </div>
7
- <p class="vd-footer__text" v-html="text"></p>
7
+ <p class="vd-footer__text" v-if="text">{{ text }}</p>
8
8
  </div>
9
9
  </template>
10
10
 
@@ -1,8 +1,7 @@
1
1
  <template>
2
2
  <div class="vd-foot-nav-item" :class="{ 'vd-foot-nav-item--active': active }" @click="onClick">
3
- <vd-icon v-if="icon" :name="icon" :svg="isSvg"></vd-icon>
4
- <vd-badge v-if="dot || badge" :is-dot="dot" :value="badge" :max="99">
5
- <vd-icon :name="iconName" size="large" :svg="isSvg"></vd-icon>
3
+ <vd-badge v-if="iconName|| $slots.icon" :is-dot="dot" :value="badge" :max="99">
4
+ <slot name="icon"><vd-icon :name="iconName" size="large" :svg="isSvg"></vd-icon></slot>
6
5
  </vd-badge>
7
6
  <slot></slot>
8
7
  </div>
@@ -25,9 +24,6 @@ export default {
25
24
  name: {
26
25
  type: String,
27
26
  },
28
- text: {
29
- type: String,
30
- },
31
27
  dot: {
32
28
  type: Boolean,
33
29
  },