@zkwq/business 0.0.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 (231) hide show
  1. package/dist/index.css +1 -0
  2. package/dist/index.js +21861 -0
  3. package/dist/index.umd.cjs +46 -0
  4. package/package.json +27 -0
  5. package/src/components/base/ui/alert/Alert.vue +94 -0
  6. package/src/components/base/ui/autocomplete/autocomplete-suggestions.vue +77 -0
  7. package/src/components/base/ui/autocomplete/autocomplete.vue +305 -0
  8. package/src/components/base/ui/backtop/main.vue +112 -0
  9. package/src/components/base/ui/button/Button.vue +84 -0
  10. package/src/components/base/ui/button/ButtonGroup.vue +10 -0
  11. package/src/components/base/ui/carousel/Carousel.vue +304 -0
  12. package/src/components/base/ui/carousel/CarouselItem.vue +137 -0
  13. package/src/components/base/ui/cascader/cascader.vue +650 -0
  14. package/src/components/base/ui/cascader-panel/cascader-menu.vue +138 -0
  15. package/src/components/base/ui/cascader-panel/cascader-node.vue +246 -0
  16. package/src/components/base/ui/cascader-panel/cascader-panel.vue +382 -0
  17. package/src/components/base/ui/cascader-panel/node.js +166 -0
  18. package/src/components/base/ui/cascader-panel/store.js +62 -0
  19. package/src/components/base/ui/checkbox/checkbox-button.vue +199 -0
  20. package/src/components/base/ui/checkbox/checkbox-group.vue +48 -0
  21. package/src/components/base/ui/checkbox/checkbox.vue +222 -0
  22. package/src/components/base/ui/col/col.js +71 -0
  23. package/src/components/base/ui/collapse/collapse-item.vue +180 -0
  24. package/src/components/base/ui/collapse/collapse.vue +73 -0
  25. package/src/components/base/ui/color-picker/color.js +317 -0
  26. package/src/components/base/ui/color-picker/components/alpha-slider.vue +132 -0
  27. package/src/components/base/ui/color-picker/components/hue-slider.vue +123 -0
  28. package/src/components/base/ui/color-picker/components/picker-dropdown.vue +119 -0
  29. package/src/components/base/ui/color-picker/components/predefine.vue +61 -0
  30. package/src/components/base/ui/color-picker/components/sv-panel.vue +100 -0
  31. package/src/components/base/ui/color-picker/draggable.js +36 -0
  32. package/src/components/base/ui/color-picker/index.js +2 -0
  33. package/src/components/base/ui/color-picker/main.vue +188 -0
  34. package/src/components/base/ui/date-picker/basic/date-table.vue +441 -0
  35. package/src/components/base/ui/date-picker/basic/month-table.vue +254 -0
  36. package/src/components/base/ui/date-picker/basic/time-spinner.vue +304 -0
  37. package/src/components/base/ui/date-picker/basic/year-table.vue +101 -0
  38. package/src/components/base/ui/date-picker/panel/date-range.vue +680 -0
  39. package/src/components/base/ui/date-picker/panel/date.vue +597 -0
  40. package/src/components/base/ui/date-picker/panel/month-range.vue +289 -0
  41. package/src/components/base/ui/date-picker/panel/time-range.vue +248 -0
  42. package/src/components/base/ui/date-picker/panel/time-select.vue +178 -0
  43. package/src/components/base/ui/date-picker/panel/time.vue +186 -0
  44. package/src/components/base/ui/date-picker/picker/date-picker.js +43 -0
  45. package/src/components/base/ui/date-picker/picker/time-picker.js +39 -0
  46. package/src/components/base/ui/date-picker/picker/time-select.js +21 -0
  47. package/src/components/base/ui/date-picker/picker.vue +942 -0
  48. package/src/components/base/ui/dialog/Index.vue +212 -0
  49. package/src/components/base/ui/directive/repeat-click.js +24 -0
  50. package/src/components/base/ui/directive/ripple.js +303 -0
  51. package/src/components/base/ui/divider/Divider.vue +37 -0
  52. package/src/components/base/ui/drawer/Drawer.vue +202 -0
  53. package/src/components/base/ui/dropdown/dropdown-item.vue +39 -0
  54. package/src/components/base/ui/dropdown/dropdown-menu.vue +63 -0
  55. package/src/components/base/ui/dropdown/dropdown.vue +308 -0
  56. package/src/components/base/ui/form/Form.vue +167 -0
  57. package/src/components/base/ui/form/FormItem.vue +334 -0
  58. package/src/components/base/ui/form/LabelWrap.vue +69 -0
  59. package/src/components/base/ui/icon/icon.vue +13 -0
  60. package/src/components/base/ui/image/image-viewer.vue +302 -0
  61. package/src/components/base/ui/image/main.vue +248 -0
  62. package/src/components/base/ui/index.js +189 -0
  63. package/src/components/base/ui/input/Input.vue +438 -0
  64. package/src/components/base/ui/input/calcTextareaHeight.js +104 -0
  65. package/src/components/base/ui/input-number/input-number.vue +285 -0
  66. package/src/components/base/ui/locale/format.js +32 -0
  67. package/src/components/base/ui/locale/index.js +48 -0
  68. package/src/components/base/ui/locale/lang/zh-CN.js +120 -0
  69. package/src/components/base/ui/menu/menu-item-group.vue +45 -0
  70. package/src/components/base/ui/menu/menu-item.vue +112 -0
  71. package/src/components/base/ui/menu/menu-mixin.js +44 -0
  72. package/src/components/base/ui/menu/menu.vue +312 -0
  73. package/src/components/base/ui/menu/submenu.vue +408 -0
  74. package/src/components/base/ui/message/index.js +2 -0
  75. package/src/components/base/ui/message/main.js +87 -0
  76. package/src/components/base/ui/message/main.vue +110 -0
  77. package/src/components/base/ui/message-box/main.js +216 -0
  78. package/src/components/base/ui/message-box/main.vue +323 -0
  79. package/src/components/base/ui/mixin/emitter.js +31 -0
  80. package/src/components/base/ui/mixin/focus.js +9 -0
  81. package/src/components/base/ui/mixin/locale.js +9 -0
  82. package/src/components/base/ui/mixin/migrating.js +33 -0
  83. package/src/components/base/ui/pagination/pager.vue +163 -0
  84. package/src/components/base/ui/pagination/pagination.jsx +391 -0
  85. package/src/components/base/ui/popover/directive.js +20 -0
  86. package/src/components/base/ui/popover/index.js +14 -0
  87. package/src/components/base/ui/popover/main.vue +236 -0
  88. package/src/components/base/ui/progress/Progress.vue +227 -0
  89. package/src/components/base/ui/radio/radio-button.vue +114 -0
  90. package/src/components/base/ui/radio/radio-group.vue +111 -0
  91. package/src/components/base/ui/radio/radio.vue +134 -0
  92. package/src/components/base/ui/row/row.js +47 -0
  93. package/src/components/base/ui/scrollbar/bar.jsx +91 -0
  94. package/src/components/base/ui/scrollbar/index.jsx +203 -0
  95. package/src/components/base/ui/scrollbar/util.js +32 -0
  96. package/src/components/base/ui/select/Option.vue +168 -0
  97. package/src/components/base/ui/select/OptionGroup.vue +60 -0
  98. package/src/components/base/ui/select/Select.vue +920 -0
  99. package/src/components/base/ui/select/SelectDropdown.vue +74 -0
  100. package/src/components/base/ui/select/navigation-mixin.js +54 -0
  101. package/src/components/base/ui/skeleton/index.js +8 -0
  102. package/src/components/base/ui/skeleton/src/img-placeholder.vue +16 -0
  103. package/src/components/base/ui/skeleton/src/index.vue +80 -0
  104. package/src/components/base/ui/skeleton/src/item.vue +22 -0
  105. package/src/components/base/ui/skeleton-item/index.js +8 -0
  106. package/src/components/base/ui/slider/button.vue +238 -0
  107. package/src/components/base/ui/slider/main.vue +427 -0
  108. package/src/components/base/ui/slider/marker.js +18 -0
  109. package/src/components/base/ui/style/alert.scss +147 -0
  110. package/src/components/base/ui/style/animations.scss +65 -0
  111. package/src/components/base/ui/style/autocomplete.scss +81 -0
  112. package/src/components/base/ui/style/backtop.scss +20 -0
  113. package/src/components/base/ui/style/button-group.scss +0 -0
  114. package/src/components/base/ui/style/button.scss +380 -0
  115. package/src/components/base/ui/style/carousel-item.scss +50 -0
  116. package/src/components/base/ui/style/carousel.scss +161 -0
  117. package/src/components/base/ui/style/cascader-panel.scss +120 -0
  118. package/src/components/base/ui/style/cascader.scss +185 -0
  119. package/src/components/base/ui/style/checkbox-button.scss +0 -0
  120. package/src/components/base/ui/style/checkbox-group.scss +0 -0
  121. package/src/components/base/ui/style/checkbox.scss +360 -0
  122. package/src/components/base/ui/style/col.scss +156 -0
  123. package/src/components/base/ui/style/collapse-item.scss +0 -0
  124. package/src/components/base/ui/style/collapse.scss +114 -0
  125. package/src/components/base/ui/style/color-picker.scss +387 -0
  126. package/src/components/base/ui/style/config.scss +4 -0
  127. package/src/components/base/ui/style/date-picker/date-picker.scss +97 -0
  128. package/src/components/base/ui/style/date-picker/date-range-picker.scss +101 -0
  129. package/src/components/base/ui/style/date-picker/date-table.scss +151 -0
  130. package/src/components/base/ui/style/date-picker/month-table.scss +82 -0
  131. package/src/components/base/ui/style/date-picker/picker-panel.scss +117 -0
  132. package/src/components/base/ui/style/date-picker/picker.scss +197 -0
  133. package/src/components/base/ui/style/date-picker/time-picker.scss +85 -0
  134. package/src/components/base/ui/style/date-picker/time-range-picker.scss +31 -0
  135. package/src/components/base/ui/style/date-picker/time-spinner.scss +110 -0
  136. package/src/components/base/ui/style/date-picker/year-table.scss +51 -0
  137. package/src/components/base/ui/style/date-picker.scss +12 -0
  138. package/src/components/base/ui/style/dialog.scss +123 -0
  139. package/src/components/base/ui/style/divider.scss +47 -0
  140. package/src/components/base/ui/style/drawer.scss +218 -0
  141. package/src/components/base/ui/style/dropdown-item.scss +0 -0
  142. package/src/components/base/ui/style/dropdown-menu.scss +0 -0
  143. package/src/components/base/ui/style/dropdown.scss +185 -0
  144. package/src/components/base/ui/style/form-item.scss +0 -0
  145. package/src/components/base/ui/style/form.scss +203 -0
  146. package/src/components/base/ui/style/function.scss +43 -0
  147. package/src/components/base/ui/style/icon.scss +1167 -0
  148. package/src/components/base/ui/style/image.scss +184 -0
  149. package/src/components/base/ui/style/index.scss +57 -0
  150. package/src/components/base/ui/style/input-number.scss +187 -0
  151. package/src/components/base/ui/style/input.scss +477 -0
  152. package/src/components/base/ui/style/menu-item-group.scss +0 -0
  153. package/src/components/base/ui/style/menu-item.scss +0 -0
  154. package/src/components/base/ui/style/menu.scss +294 -0
  155. package/src/components/base/ui/style/message-box.scss +231 -0
  156. package/src/components/base/ui/style/message.scss +120 -0
  157. package/src/components/base/ui/style/mixins.scss +196 -0
  158. package/src/components/base/ui/style/option-group.scss +42 -0
  159. package/src/components/base/ui/style/option.scss +36 -0
  160. package/src/components/base/ui/style/pagination.scss +295 -0
  161. package/src/components/base/ui/style/popover.scss +40 -0
  162. package/src/components/base/ui/style/popper.scss +102 -0
  163. package/src/components/base/ui/style/popup.scss +42 -0
  164. package/src/components/base/ui/style/progress.scss +141 -0
  165. package/src/components/base/ui/style/radio-button.scss +113 -0
  166. package/src/components/base/ui/style/radio-group.scss +9 -0
  167. package/src/components/base/ui/style/radio.scss +203 -0
  168. package/src/components/base/ui/style/ripple.scss +35 -0
  169. package/src/components/base/ui/style/row.scss +39 -0
  170. package/src/components/base/ui/style/scrollbar.scss +75 -0
  171. package/src/components/base/ui/style/select-dropdown.scss +59 -0
  172. package/src/components/base/ui/style/select.scss +154 -0
  173. package/src/components/base/ui/style/skeleton-item.scss +84 -0
  174. package/src/components/base/ui/style/skeleton.scss +40 -0
  175. package/src/components/base/ui/style/slider.scss +250 -0
  176. package/src/components/base/ui/style/switch.scss +116 -0
  177. package/src/components/base/ui/style/tabs.scss +602 -0
  178. package/src/components/base/ui/style/tag.scss +174 -0
  179. package/src/components/base/ui/style/tooltip.scss +146 -0
  180. package/src/components/base/ui/style/transition.scss +138 -0
  181. package/src/components/base/ui/style/upload.scss +603 -0
  182. package/src/components/base/ui/style/utils.scss +39 -0
  183. package/src/components/base/ui/style/var.scss +1007 -0
  184. package/src/components/base/ui/switch/index.vue +174 -0
  185. package/src/components/base/ui/tabs/tab-bar.vue +57 -0
  186. package/src/components/base/ui/tabs/tab-nav.vue +294 -0
  187. package/src/components/base/ui/tabs/tab-pane.vue +56 -0
  188. package/src/components/base/ui/tabs/tabs.vue +191 -0
  189. package/src/components/base/ui/tag/Tag.vue +60 -0
  190. package/src/components/base/ui/tooltip/tooltip.jsx +234 -0
  191. package/src/components/base/ui/upload/Index.vue +340 -0
  192. package/src/components/base/ui/upload/Upload.vue +216 -0
  193. package/src/components/base/ui/upload/UploadDragger.vue +70 -0
  194. package/src/components/base/ui/upload/UploadList.vue +100 -0
  195. package/src/components/base/ui/upload/ajax.js +85 -0
  196. package/src/components/base/ui/util/aria-dialog.js +90 -0
  197. package/src/components/base/ui/util/aria-utils.js +122 -0
  198. package/src/components/base/ui/util/clickoutside.js +76 -0
  199. package/src/components/base/ui/util/date-util.js +292 -0
  200. package/src/components/base/ui/util/date.js +370 -0
  201. package/src/components/base/ui/util/debounce.js +21 -0
  202. package/src/components/base/ui/util/deepmerge.js +100 -0
  203. package/src/components/base/ui/util/dom.js +215 -0
  204. package/src/components/base/ui/util/index.js +262 -0
  205. package/src/components/base/ui/util/menu/aria-menubar.js +14 -0
  206. package/src/components/base/ui/util/menu/aria-menuitem.js +49 -0
  207. package/src/components/base/ui/util/menu/aria-submenu.js +59 -0
  208. package/src/components/base/ui/util/merge.js +14 -0
  209. package/src/components/base/ui/util/popper.js +1235 -0
  210. package/src/components/base/ui/util/popup/index.js +218 -0
  211. package/src/components/base/ui/util/popup/popup-manager.js +194 -0
  212. package/src/components/base/ui/util/resize-events.js +32 -0
  213. package/src/components/base/ui/util/scroll-into-view.js +27 -0
  214. package/src/components/base/ui/util/scrollbar-width.js +29 -0
  215. package/src/components/base/ui/util/shared.js +7 -0
  216. package/src/components/base/ui/util/throttle.js +91 -0
  217. package/src/components/base/ui/util/types.js +24 -0
  218. package/src/components/base/ui/util/vdom.js +5 -0
  219. package/src/components/base/ui/util/vue-popper.js +188 -0
  220. package/src/components/normal/AggsItemH.vue +139 -0
  221. package/src/index.js +10 -0
  222. package/src/static/base-icons.ttf +0 -0
  223. package/src/static/base-icons.woff +0 -0
  224. package/src/static/label_bg.png +0 -0
  225. package/src/static/term-label-bg.png +0 -0
  226. package/src/style/app-article.scss +698 -0
  227. package/src/style/app-comment.scss +259 -0
  228. package/src/style/app-recommend.scss +48 -0
  229. package/src/style/app-richtext.scss +176 -0
  230. package/src/style/index.scss +523 -0
  231. package/vite.config.js +38 -0
@@ -0,0 +1,123 @@
1
+ <template>
2
+ <div class="base-color-hue-slider" :class="{ 'is-vertical': vertical }">
3
+ <div class="base-color-hue-slider__bar" @click="handleClick" ref="bar"></div>
4
+ <div class="base-color-hue-slider__thumb"
5
+ :style="{
6
+ left: thumbLeft + 'px',
7
+ top: thumbTop + 'px'
8
+ }"
9
+ ref="thumb">
10
+ </div>
11
+ </div>
12
+ </template>
13
+
14
+ <script>
15
+ import draggable from '../draggable';
16
+
17
+ export default {
18
+ name: 'base-color-hue-slider',
19
+
20
+ props: {
21
+ color: {
22
+ required: true
23
+ },
24
+
25
+ vertical: Boolean
26
+ },
27
+
28
+ data() {
29
+ return {
30
+ thumbLeft: 0,
31
+ thumbTop: 0
32
+ };
33
+ },
34
+
35
+ computed: {
36
+ hueValue() {
37
+ const hue = this.color.get('hue');
38
+ return hue;
39
+ }
40
+ },
41
+
42
+ watch: {
43
+ hueValue() {
44
+ this.update();
45
+ }
46
+ },
47
+
48
+ methods: {
49
+ handleClick(event) {
50
+ const thumb = this.$refs.thumb;
51
+ const target = event.target;
52
+
53
+ if (target !== thumb) {
54
+ this.handleDrag(event);
55
+ }
56
+ },
57
+
58
+ handleDrag(event) {
59
+ const rect = this.$el.getBoundingClientRect();
60
+ const { thumb } = this.$refs;
61
+ let hue;
62
+
63
+ if (!this.vertical) {
64
+ let left = event.clientX - rect.left;
65
+ left = Math.min(left, rect.width - thumb.offsetWidth / 2);
66
+ left = Math.max(thumb.offsetWidth / 2, left);
67
+
68
+ hue = Math.round((left - thumb.offsetWidth / 2) / (rect.width - thumb.offsetWidth) * 360);
69
+ } else {
70
+ let top = event.clientY - rect.top;
71
+ top = Math.min(top, rect.height - thumb.offsetHeight / 2);
72
+ top = Math.max(thumb.offsetHeight / 2, top);
73
+
74
+ hue = Math.round((top - thumb.offsetHeight / 2) / (rect.height - thumb.offsetHeight) * 360);
75
+ }
76
+
77
+ this.color.set('hue', hue);
78
+ },
79
+
80
+ getThumbLeft() {
81
+ if (this.vertical) return 0;
82
+ const el = this.$el;
83
+ const hue = this.color.get('hue');
84
+
85
+ if (!el) return 0;
86
+ const thumb = this.$refs.thumb;
87
+ return Math.round(hue * (el.offsetWidth - thumb.offsetWidth / 2) / 360);
88
+ },
89
+
90
+ getThumbTop() {
91
+ if (!this.vertical) return 0;
92
+ const el = this.$el;
93
+ const hue = this.color.get('hue');
94
+
95
+ if (!el) return 0;
96
+ const thumb = this.$refs.thumb;
97
+ return Math.round(hue * (el.offsetHeight - thumb.offsetHeight / 2) / 360);
98
+ },
99
+
100
+ update() {
101
+ this.thumbLeft = this.getThumbLeft();
102
+ this.thumbTop = this.getThumbTop();
103
+ }
104
+ },
105
+
106
+ mounted() {
107
+ const { bar, thumb } = this.$refs;
108
+
109
+ const dragConfig = {
110
+ drag: (event) => {
111
+ this.handleDrag(event);
112
+ },
113
+ end: (event) => {
114
+ this.handleDrag(event);
115
+ }
116
+ };
117
+
118
+ draggable(bar, dragConfig);
119
+ draggable(thumb, dragConfig);
120
+ this.update();
121
+ }
122
+ };
123
+ </script>
@@ -0,0 +1,119 @@
1
+ <template>
2
+ <transition name="base-zoom-in-top" @after-leave="doDestroy">
3
+ <div
4
+ class="base-color-dropdown"
5
+ v-show="showPopper">
6
+ <div class="base-color-dropdown__main-wrapper">
7
+ <hue-slider ref="hue" :color="color" vertical style="float: right;"></hue-slider>
8
+ <sv-panel ref="sl" :color="color"></sv-panel>
9
+ </div>
10
+ <alpha-slider v-if="showAlpha" ref="alpha" :color="color"></alpha-slider>
11
+ <predefine v-if="predefine" :color="color" :colors="predefine"></predefine>
12
+ <div class="base-color-dropdown__btns">
13
+ <span class="base-color-dropdown__value">
14
+ <base-input
15
+ v-model="customInput"
16
+ @keyup.native.enter="handleConfirm"
17
+ @blur="handleConfirm"
18
+ size="small"
19
+ :validate-event="false">
20
+ </base-input>
21
+ </span>
22
+ <base-button
23
+ light
24
+ size="small"
25
+ @click="$emit('clear')">
26
+ {{ t('base.colorpicker.clear') }}
27
+ </base-button>
28
+ <base-button
29
+ type="primary"
30
+ size="small"
31
+ @click="confirmValue">
32
+ {{ t('base.colorpicker.confirm') }}
33
+ </base-button>
34
+ </div>
35
+ </div>
36
+ </transition>
37
+ </template>
38
+
39
+ <script>
40
+ import SvPanel from './sv-panel';
41
+ import HueSlider from './hue-slider';
42
+ import AlphaSlider from './alpha-slider';
43
+ import Predefine from './predefine';
44
+ import Popper from '../../util/vue-popper';
45
+ import Locale from '../../mixin/locale';
46
+ import BaseInput from '../../input/Input';
47
+ import BaseButton from '../../button/Button';
48
+
49
+ export default {
50
+ name: 'base-color-picker-dropdown',
51
+
52
+ mixins: [Popper, Locale],
53
+
54
+ components: {
55
+ SvPanel,
56
+ HueSlider,
57
+ AlphaSlider,
58
+ BaseInput,
59
+ BaseButton,
60
+ Predefine
61
+ },
62
+
63
+ props: {
64
+ color: {
65
+ required: true
66
+ },
67
+ showAlpha: Boolean,
68
+ predefine: Array
69
+ },
70
+
71
+ data() {
72
+ return {
73
+ customInput: ''
74
+ };
75
+ },
76
+
77
+ computed: {
78
+ currentColor() {
79
+ const parent = this.$parent;
80
+ return !parent.value && !parent.showPanelColor ? '' : parent.color.value;
81
+ }
82
+ },
83
+
84
+ methods: {
85
+ confirmValue() {
86
+ this.$emit('pick');
87
+ },
88
+
89
+ handleConfirm() {
90
+ this.color.fromString(this.customInput);
91
+ }
92
+ },
93
+
94
+ mounted() {
95
+ this.$parent.popperElm = this.popperElm = this.$el;
96
+ this.referenceElm = this.$parent.$el;
97
+ },
98
+
99
+ watch: {
100
+ showPopper(val) {
101
+ if (val === true) {
102
+ this.$nextTick(() => {
103
+ const { sl, hue, alpha } = this.$refs;
104
+ sl && sl.update();
105
+ hue && hue.update();
106
+ alpha && alpha.update();
107
+ });
108
+ }
109
+ },
110
+
111
+ currentColor: {
112
+ immediate: true,
113
+ handler(val) {
114
+ this.customInput = val;
115
+ }
116
+ }
117
+ }
118
+ };
119
+ </script>
@@ -0,0 +1,61 @@
1
+ <template>
2
+ <div class="base-color-predefine">
3
+ <div class="base-color-predefine__colors">
4
+ <div class="base-color-predefine__color-selector"
5
+ :class="{selected: item.selected, 'is-alpha': item._alpha < 100}"
6
+ v-for="(item, index) in rgbaColors"
7
+ :key="colors[index]"
8
+ @click="handleSelect(index)">
9
+ <div :style="{'background-color': item.value}">
10
+ </div>
11
+ </div>
12
+ </div>
13
+ </div>
14
+ </template>
15
+
16
+ <script>
17
+ import Color from '../color';
18
+
19
+ export default {
20
+ props: {
21
+ colors: { type: Array, required: true },
22
+ color: { required: true }
23
+ },
24
+ data() {
25
+ return {
26
+ rgbaColors: this.parseColors(this.colors, this.color)
27
+ };
28
+ },
29
+ methods: {
30
+ handleSelect(index) {
31
+ this.color.fromString(this.colors[index]);
32
+ },
33
+ parseColors(colors, color) {
34
+ return colors.map(value => {
35
+ const c = new Color();
36
+ c.enableAlpha = true;
37
+ c.format = 'rgba';
38
+ c.fromString(value);
39
+ c.selected = c.value === color.value;
40
+ return c;
41
+ });
42
+ }
43
+ },
44
+ watch: {
45
+ '$parent.currentColor'(val) {
46
+ const color = new Color();
47
+ color.fromString(val);
48
+
49
+ this.rgbaColors.forEach(item => {
50
+ item.selected = color.compare(item);
51
+ });
52
+ },
53
+ colors(newVal) {
54
+ this.rgbaColors = this.parseColors(newVal, this.color);
55
+ },
56
+ color(newVal) {
57
+ this.rgbaColors = this.parseColors(this.colors, newVal);
58
+ }
59
+ }
60
+ };
61
+ </script>
@@ -0,0 +1,100 @@
1
+ <template>
2
+ <div class="base-color-svpanel"
3
+ :style="{
4
+ backgroundColor: background
5
+ }">
6
+ <div class="base-color-svpanel__white"></div>
7
+ <div class="base-color-svpanel__black"></div>
8
+ <div class="base-color-svpanel__cursor"
9
+ :style="{
10
+ top: cursorTop + 'px',
11
+ left: cursorLeft + 'px'
12
+ }">
13
+ <div></div>
14
+ </div>
15
+ </div>
16
+ </template>
17
+
18
+ <script>
19
+ import draggable from '../draggable';
20
+
21
+ export default {
22
+ name: 'base-sl-panel',
23
+
24
+ props: {
25
+ color: {
26
+ required: true
27
+ }
28
+ },
29
+
30
+ computed: {
31
+ colorValue() {
32
+ const hue = this.color.get('hue');
33
+ const value = this.color.get('value');
34
+ return { hue, value };
35
+ }
36
+ },
37
+
38
+ watch: {
39
+ colorValue() {
40
+ this.update();
41
+ }
42
+ },
43
+
44
+ methods: {
45
+ update() {
46
+ const saturation = this.color.get('saturation');
47
+ const value = this.color.get('value');
48
+
49
+ const el = this.$el;
50
+ let { clientWidth: width, clientHeight: height } = el;
51
+
52
+ this.cursorLeft = saturation * width / 100;
53
+ this.cursorTop = (100 - value) * height / 100;
54
+
55
+ this.background = 'hsl(' + this.color.get('hue') + ', 100%, 50%)';
56
+ },
57
+
58
+ handleDrag(event) {
59
+ const el = this.$el;
60
+ const rect = el.getBoundingClientRect();
61
+
62
+ let left = event.clientX - rect.left;
63
+ let top = event.clientY - rect.top;
64
+ left = Math.max(0, left);
65
+ left = Math.min(left, rect.width);
66
+
67
+ top = Math.max(0, top);
68
+ top = Math.min(top, rect.height);
69
+
70
+ this.cursorLeft = left;
71
+ this.cursorTop = top;
72
+ this.color.set({
73
+ saturation: left / rect.width * 100,
74
+ value: 100 - top / rect.height * 100
75
+ });
76
+ }
77
+ },
78
+
79
+ mounted() {
80
+ draggable(this.$el, {
81
+ drag: (event) => {
82
+ this.handleDrag(event);
83
+ },
84
+ end: (event) => {
85
+ this.handleDrag(event);
86
+ }
87
+ });
88
+
89
+ this.update();
90
+ },
91
+
92
+ data() {
93
+ return {
94
+ cursorTop: 0,
95
+ cursorLeft: 0,
96
+ background: 'hsl(0, 100%, 50%)'
97
+ };
98
+ }
99
+ };
100
+ </script>
@@ -0,0 +1,36 @@
1
+ import Vue from 'vue';
2
+ let isDragging = false;
3
+
4
+ export default function(element, options) {
5
+ if (Vue.prototype.$isServer) return;
6
+ const moveFn = function(event) {
7
+ if (options.drag) {
8
+ options.drag(event);
9
+ }
10
+ };
11
+ const upFn = function(event) {
12
+ document.removeEventListener('mousemove', moveFn);
13
+ document.removeEventListener('mouseup', upFn);
14
+ document.onselectstart = null;
15
+ document.ondragstart = null;
16
+
17
+ isDragging = false;
18
+
19
+ if (options.end) {
20
+ options.end(event);
21
+ }
22
+ };
23
+ element.addEventListener('mousedown', function(event) {
24
+ if (isDragging) return;
25
+ document.onselectstart = function() { return false; };
26
+ document.ondragstart = function() { return false; };
27
+
28
+ document.addEventListener('mousemove', moveFn);
29
+ document.addEventListener('mouseup', upFn);
30
+ isDragging = true;
31
+
32
+ if (options.start) {
33
+ options.start(event);
34
+ }
35
+ });
36
+ }
@@ -0,0 +1,2 @@
1
+ import ColorPicker from './main';
2
+ export default ColorPicker;
@@ -0,0 +1,188 @@
1
+ <template>
2
+ <div
3
+ :class="[
4
+ 'base-color-picker',
5
+ colorDisabled ? 'is-disabled' : '',
6
+ colorSize ? `base-color-picker--${ colorSize }` : ''
7
+ ]"
8
+ v-clickoutside="hide">
9
+ <div class="base-color-picker__mask" v-if="colorDisabled"></div>
10
+ <div class="base-color-picker__trigger" @click="handleTrigger">
11
+ <span class="base-color-picker__color" :class="{ 'is-alpha': showAlpha }">
12
+ <span class="base-color-picker__color-inner"
13
+ :style="{
14
+ backgroundColor: displayedColor
15
+ }"></span>
16
+ <span class="base-color-picker__empty base-icon-close" v-if="!value && !showPanelColor"></span>
17
+ </span>
18
+ <span class="base-color-picker__icon base-icon-arrow-down" v-show="value || showPanelColor"></span>
19
+ </div>
20
+ <picker-dropdown
21
+ ref="dropdown"
22
+ :class="['base-color-picker__panel', popperClass || '']"
23
+ v-model="showPicker"
24
+ @pick="confirmValue"
25
+ @clear="clearValue"
26
+ :color="color"
27
+ :show-alpha="showAlpha"
28
+ :predefine="predefine">
29
+ </picker-dropdown>
30
+ </div>
31
+ </template>
32
+
33
+ <script>
34
+ import Color from './color';
35
+ import PickerDropdown from './components/picker-dropdown.vue';
36
+ import Clickoutside from '../util/clickoutside';
37
+ import Emitter from '../mixin/emitter';
38
+
39
+ export default {
40
+ name: 'BaseColorPicker',
41
+
42
+ mixins: [Emitter],
43
+
44
+ props: {
45
+ value: String,
46
+ showAlpha: Boolean,
47
+ colorFormat: String,
48
+ disabled: Boolean,
49
+ size: String,
50
+ popperClass: String,
51
+ predefine: Array
52
+ },
53
+
54
+ inject: {
55
+ baseForm: {
56
+ default: ''
57
+ },
58
+ baseFormItem: {
59
+ default: ''
60
+ }
61
+ },
62
+
63
+ directives: { Clickoutside },
64
+
65
+ computed: {
66
+ displayedColor() {
67
+ if (!this.value && !this.showPanelColor) {
68
+ return 'transparent';
69
+ }
70
+
71
+ return this.displayedRgb(this.color, this.showAlpha);
72
+ },
73
+
74
+ _baseFormItemSize() {
75
+ return (this.elFormItem || {}).elFormItemSize;
76
+ },
77
+
78
+ colorSize() {
79
+ return this.size || this._baseFormItemSize || (this.$ELEMENT || {}).size;
80
+ },
81
+
82
+ colorDisabled() {
83
+ return this.disabled || (this.baseForm || {}).disabled;
84
+ }
85
+ },
86
+
87
+ watch: {
88
+ value(val) {
89
+ if (!val) {
90
+ this.showPanelColor = false;
91
+ } else if (val && val !== this.color.value) {
92
+ this.color.fromString(val);
93
+ }
94
+ },
95
+ color: {
96
+ deep: true,
97
+ handler() {
98
+ this.showPanelColor = true;
99
+ }
100
+ },
101
+ displayedColor(val) {
102
+ if (!this.showPicker) return;
103
+ const currentValueColor = new Color({
104
+ enableAlpha: this.showAlpha,
105
+ format: this.colorFormat
106
+ });
107
+ currentValueColor.fromString(this.value);
108
+
109
+ const currentValueColorRgb = this.displayedRgb(currentValueColor, this.showAlpha);
110
+ if (val !== currentValueColorRgb) {
111
+ this.$emit('active-change', val);
112
+ }
113
+ }
114
+ },
115
+
116
+ methods: {
117
+ handleTrigger() {
118
+ if (this.colorDisabled) return;
119
+ this.showPicker = !this.showPicker;
120
+ },
121
+ confirmValue() {
122
+ const value = this.color.value;
123
+ this.$emit('input', value);
124
+ this.$emit('change', value);
125
+ this.dispatch('BaseFormItem', 'base.form.change', value);
126
+ this.showPicker = false;
127
+ },
128
+ clearValue() {
129
+ this.$emit('input', null);
130
+ this.$emit('change', null);
131
+ if (this.value !== null) {
132
+ this.dispatch('BaseFormItem', 'base.form.change', null);
133
+ }
134
+ this.showPanelColor = false;
135
+ this.showPicker = false;
136
+ this.resetColor();
137
+ },
138
+ hide() {
139
+ this.showPicker = false;
140
+ this.resetColor();
141
+ },
142
+ resetColor() {
143
+ this.$nextTick(_ => {
144
+ if (this.value) {
145
+ this.color.fromString(this.value);
146
+ } else {
147
+ this.showPanelColor = false;
148
+ }
149
+ });
150
+ },
151
+ displayedRgb(color, showAlpha) {
152
+ if (!(color instanceof Color)) {
153
+ throw Error('color should be instance of Color Class');
154
+ }
155
+
156
+ const { r, g, b } = color.toRgb();
157
+ return showAlpha
158
+ ? `rgba(${ r }, ${ g }, ${ b }, ${ color.get('alpha') / 100 })`
159
+ : `rgb(${ r }, ${ g }, ${ b })`;
160
+ }
161
+ },
162
+
163
+ mounted() {
164
+ const value = this.value;
165
+ if (value) {
166
+ this.color.fromString(value);
167
+ }
168
+ this.popperElm = this.$refs.dropdown.$el;
169
+ },
170
+
171
+ data() {
172
+ const color = new Color({
173
+ enableAlpha: this.showAlpha,
174
+ format: this.colorFormat
175
+ });
176
+
177
+ return {
178
+ color,
179
+ showPicker: false,
180
+ showPanelColor: false
181
+ };
182
+ },
183
+
184
+ components: {
185
+ PickerDropdown
186
+ }
187
+ };
188
+ </script>