openatc-components 0.0.1 → 0.0.2

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 (154) hide show
  1. package/.babelrc +18 -18
  2. package/.editorconfig +9 -9
  3. package/.eslintignore +5 -5
  4. package/.eslintrc.js +29 -29
  5. package/.postcssrc.js +10 -10
  6. package/README.md +30 -30
  7. package/build/build.js +41 -41
  8. package/build/check-versions.js +54 -54
  9. package/build/package.config.js +58 -58
  10. package/build/package.dev.config.js +25 -25
  11. package/build/package.prod.config.js +60 -60
  12. package/build/utils.js +101 -101
  13. package/build/vue-loader.conf.js +22 -22
  14. package/build/webpack.base.conf.js +109 -109
  15. package/build/webpack.dev.conf.js +95 -95
  16. package/build/webpack.prod.conf.js +149 -149
  17. package/config/dev.env.js +7 -7
  18. package/config/index.js +76 -76
  19. package/config/prod.env.js +4 -4
  20. package/config/test.env.js +7 -7
  21. package/index.html +12 -12
  22. package/package/kisscomps/components/CircleMenu/KissCircleMenu.vue +398 -398
  23. package/package/kisscomps/components/CircleMenu/index.js +2 -2
  24. package/package/kisscomps/components/DashBoard/MakeGradientColor.js +84 -84
  25. package/package/kisscomps/components/DashBoard/dashboard.js +471 -471
  26. package/package/kisscomps/components/DashBoard/dashboard.vue +57 -57
  27. package/package/kisscomps/components/DashBoard/index.js +2 -2
  28. package/package/kisscomps/components/Horizontal/KissHorizontal.vue +146 -146
  29. package/package/kisscomps/components/Horizontal/index.js +2 -2
  30. package/package/kisscomps/components/HorizontalChildren/KissHorizontalChildren.vue +196 -196
  31. package/package/kisscomps/components/HorizontalChildren/index.js +2 -2
  32. package/package/kisscomps/components/KissCircleMenu/CircleMenu.vue +113 -113
  33. package/package/kisscomps/components/KissCircleMenu/index.js +2 -2
  34. package/package/kisscomps/components/KissCircleMenu/style/index.less +1 -1
  35. package/package/kisscomps/components/KissCircleMenu/style/main/core.less +161 -161
  36. package/package/kisscomps/components/KissCircleMenu/style/main/other.less +94 -94
  37. package/package/kisscomps/components/KissCircleMenu/style/mixin/mixin.less +36 -36
  38. package/package/kisscomps/components/KissCircleMenu/style/var/var.less +21 -21
  39. package/package/kisscomps/components/KissCircleMenu/utils/colorRE.js +5 -5
  40. package/package/kisscomps/components/KissMessageBox/KissMessageBox.vue +108 -108
  41. package/package/kisscomps/components/KissMessageBox/index.js +2 -2
  42. package/package/kisscomps/components/KissSearchInput/index.js +2 -2
  43. package/package/kisscomps/components/KissSearchInput/kisssearchinput.vue +77 -77
  44. package/package/kisscomps/components/KissSimulationProgress/KissSimulationProgress.vue +294 -294
  45. package/package/kisscomps/components/KissSimulationProgress/index.js +2 -2
  46. package/package/kisscomps/components/StatusBar/StatusBar.vue +222 -222
  47. package/package/kisscomps/components/StatusBar/index.js +2 -2
  48. package/package/kisscomps/components/TragResize/index.js +2 -2
  49. package/package/kisscomps/components/TragResize/kissdragresize.vue +536 -536
  50. package/package/kisscomps/components/TragResize/util/dom.js +23 -23
  51. package/package/kisscomps/components/TragResize/util/fns.js +3 -3
  52. package/package/kisscomps/components/XRDDirSelector/XRDDirSelector.1.vue +320 -320
  53. package/package/kisscomps/components/XRDDirSelector/XRDDirSelector.vue +345 -345
  54. package/package/kisscomps/components/XRDDirSelector/index.js +2 -2
  55. package/package/kisscomps/components/button/index.js +2 -2
  56. package/package/kisscomps/components/button/kissbutton.vue +168 -168
  57. package/package/kisscomps/components/compass3D/compass.vue +180 -180
  58. package/package/kisscomps/components/compass3D/index.js +2 -2
  59. package/package/kisscomps/components/header/index.js +2 -2
  60. package/package/kisscomps/components/header/kissHead.vue +83 -83
  61. package/package/kisscomps/components/horizontalMenu/index.js +2 -2
  62. package/package/kisscomps/components/horizontalMenu/kissHorizontalMenu.vue +254 -254
  63. package/package/kisscomps/components/input/index.js +2 -2
  64. package/package/kisscomps/components/input/kissinput.vue +57 -57
  65. package/package/kisscomps/components/menu/index.js +2 -2
  66. package/package/kisscomps/components/menu/kissmenu.vue +324 -324
  67. package/package/kisscomps/components/mutipletips/Tdrag.js +585 -585
  68. package/package/kisscomps/components/mutipletips/index.js +2 -2
  69. package/package/kisscomps/components/mutipletips/kissmutipletips.vue +192 -192
  70. package/package/kisscomps/components/panel/index.js +2 -2
  71. package/package/kisscomps/components/panel/kissPanel.vue +151 -151
  72. package/package/kisscomps/components/select/chosen.jquery.min.js +3 -3
  73. package/package/kisscomps/components/select/index.js +2 -2
  74. package/package/kisscomps/components/select/kissselect.vue +527 -527
  75. package/package/kisscomps/components/tablebutton/index.js +2 -2
  76. package/package/kisscomps/components/tablebutton/tablebutton.vue +97 -97
  77. package/package/kisscomps/components/timectrl/KissTimeCtrl.vue +67 -67
  78. package/package/kisscomps/components/timectrl/index.js +2 -2
  79. package/package/kisscomps/components/timectrl/timectrl.css +851 -851
  80. package/package/kisscomps/components/tip/Tdrag.js +585 -585
  81. package/package/kisscomps/components/tip/index.js +2 -2
  82. package/package/kisscomps/components/tip/kisstips.1.vue +154 -154
  83. package/package/kisscomps/components/tip/kisstips.vue +154 -154
  84. package/package/kisscomps/components/tip/kisstips.vue.bak +211 -211
  85. package/package/kisscomps/index.js +71 -71
  86. package/package/kissui.js +203 -203
  87. package/package/kissui.min.js +203 -203
  88. package/package.json +1 -1
  89. package/src/App.vue +25 -25
  90. package/src/kisscomps/components/CircleMenu/KissCircleMenu.vue +398 -398
  91. package/src/kisscomps/components/CircleMenu/index.js +2 -2
  92. package/src/kisscomps/components/DashBoard/MakeGradientColor.js +84 -84
  93. package/src/kisscomps/components/DashBoard/dashboard.js +471 -471
  94. package/src/kisscomps/components/DashBoard/dashboard.vue +57 -57
  95. package/src/kisscomps/components/DashBoard/index.js +2 -2
  96. package/src/kisscomps/components/KissCircleMenu/CircleMenu.vue +113 -113
  97. package/src/kisscomps/components/KissCircleMenu/index.js +2 -2
  98. package/src/kisscomps/components/KissCircleMenu/style/index.less +1 -1
  99. package/src/kisscomps/components/KissCircleMenu/style/main/core.less +161 -161
  100. package/src/kisscomps/components/KissCircleMenu/style/main/other.less +94 -94
  101. package/src/kisscomps/components/KissCircleMenu/style/mixin/mixin.less +36 -36
  102. package/src/kisscomps/components/KissCircleMenu/style/var/var.less +21 -21
  103. package/src/kisscomps/components/KissCircleMenu/utils/colorRE.js +5 -5
  104. package/src/kisscomps/components/KissSearchInput/index.js +2 -2
  105. package/src/kisscomps/components/KissSearchInput/kisssearchinput.vue +77 -77
  106. package/src/kisscomps/components/SchemeConfig/closePhaselControlModal/index.vue +193 -0
  107. package/src/kisscomps/components/SchemeConfig/index.js +2 -0
  108. package/src/kisscomps/components/SchemeConfig/lockingPhaselControlModal/index.vue +214 -0
  109. package/src/kisscomps/components/SchemeConfig/manualControlModal/index.vue +176 -0
  110. package/src/kisscomps/components/SchemeConfig/realtimeStatusModal/index.vue +294 -0
  111. package/src/kisscomps/components/SchemeConfig/schemeconfig.vue +711 -0
  112. package/src/kisscomps/components/StatusBar/StatusBar.vue +222 -222
  113. package/src/kisscomps/components/StatusBar/index.js +2 -2
  114. package/src/kisscomps/components/TragResize/index.js +2 -2
  115. package/src/kisscomps/components/TragResize/kissdragresize.vue +536 -536
  116. package/src/kisscomps/components/XRDDirSelector/XRDDirSelector.1.vue +320 -320
  117. package/src/kisscomps/components/XRDDirSelector/XRDDirSelector.vue +345 -345
  118. package/src/kisscomps/components/XRDDirSelector/index.js +2 -2
  119. package/src/kisscomps/components/button/index.js +2 -2
  120. package/src/kisscomps/components/button/kissbutton.vue +168 -168
  121. package/src/kisscomps/components/compass3D/compass.vue +180 -180
  122. package/src/kisscomps/components/compass3D/index.js +2 -2
  123. package/src/kisscomps/components/horizontalMenu/index.js +2 -2
  124. package/src/kisscomps/components/horizontalMenu/kissHorizontalMenu.vue +254 -254
  125. package/src/kisscomps/components/input/index.js +2 -2
  126. package/src/kisscomps/components/input/kissinput.vue +57 -57
  127. package/src/kisscomps/components/menu/index.js +2 -2
  128. package/src/kisscomps/components/menu/kissmenu.vue +324 -324
  129. package/src/kisscomps/components/mutipletips/Tdrag.js +585 -585
  130. package/src/kisscomps/components/mutipletips/index.js +2 -2
  131. package/src/kisscomps/components/mutipletips/kissmutipletips.vue +192 -192
  132. package/src/kisscomps/components/select/chosen.jquery.min.js +3 -3
  133. package/src/kisscomps/components/select/index.js +2 -2
  134. package/src/kisscomps/components/select/kissselect.vue +527 -527
  135. package/src/kisscomps/components/timectrl/KissTimeCtrl.vue +67 -67
  136. package/src/kisscomps/components/timectrl/index.js +2 -2
  137. package/src/kisscomps/components/tip/Tdrag.js +585 -585
  138. package/src/kisscomps/components/tip/index.js +2 -2
  139. package/src/kisscomps/components/tip/kisstips.1.vue +154 -154
  140. package/src/kisscomps/components/tip/kisstips.vue +154 -154
  141. package/src/kisscomps/components/tip/kisstips.vue.bak +211 -211
  142. package/src/kisscomps/index.js +73 -71
  143. package/src/main.js +23 -23
  144. package/src/router/index.js +15 -15
  145. package/src/views/home.1.vue +479 -479
  146. package/src/views/home.vue +196 -196
  147. package/test/e2e/custom-assertions/elementCount.js +27 -27
  148. package/test/e2e/nightwatch.conf.js +46 -46
  149. package/test/e2e/runner.js +48 -48
  150. package/test/e2e/specs/test.js +19 -19
  151. package/test/unit/.eslintrc +7 -7
  152. package/test/unit/jest.conf.js +30 -30
  153. package/test/unit/setup.js +3 -3
  154. package/test/unit/specs/HelloWorld.spec.js +11 -11
@@ -1,398 +1,398 @@
1
- <template>
2
- <div class='quick-menu' ref='quickMenu' :style='quickMenuStyle'>
3
- <div v-for='(n,key) in menuCount' class='sub-menu' :style='getSubMenu(n-1)' :key='key'>
4
- <router-link v-if='menuUrlList[n-1].isLink' :to='menuUrlList[n-1].url' :target='openNewTab' :style='subMenuStyle' @mouseover.stop='mouseEnterSubMenu' @mouseout.stop='mouseOutSubMenu'>
5
- <i :class='iconClass[n-1]' ref='icon'></i>
6
- </router-link>
7
- <a v-else :style='subMenuStyle' @mouseover.stop='mouseEnterSubMenu' @mouseout.stop='mouseOutSubMenu' @click='processCallback(key)'>
8
- <i :class='iconClass[n-1]' ref='icon'></i>
9
- </a>
10
- </div>
11
- <div class='menu' :style='menuStyle'>
12
- <div class='core-menu' @click='toggleMenu'>
13
- <div class='bar'></div>
14
- </div>
15
- </div>
16
- </div>
17
- </template>
18
- <script>
19
- export default{
20
- name: 'kiss-circle-menu',
21
- props: {
22
- menuCount: {
23
- type: Number,
24
- required: true,
25
- default: 4
26
- },
27
- iconClass: {
28
- type: Array,
29
- required: true
30
- },
31
- menuUrlList: {
32
- type: Array,
33
- required: true
34
- },
35
- backgroundColor: {
36
- type: String,
37
- default: '#20babb'
38
- },
39
- color: {
40
- type: String,
41
- default: '#fff'
42
- },
43
- isOpenNewTab: {
44
- type: Boolean,
45
- default: false
46
- },
47
- position: {
48
- type: String,
49
- default: 'top-left'
50
- }
51
- },
52
- computed: {
53
- openNewTab () {
54
- return this.isOpenNewTab ? '_blank' : '_self'
55
- },
56
- quickMenuStyle () {
57
- const topPosition = { top: '30px' }
58
- const bottomPosition = { bottom: '30px' }
59
- const leftPosition = { left: '30px' }
60
- const rightPosition = { right: '30px' }
61
- let style = this.isTop ? topPosition : bottomPosition
62
- Object.assign(style, this.isLeft ? leftPosition : rightPosition)
63
- Object.assign(style, {transform: this.isLeft ? 'rotate(-180deg)' : 'rotate(180deg)'})
64
- return style
65
- },
66
- menuStyle () {
67
- return {
68
- backgroundColor: this.backgroundColor,
69
- color: this.color
70
- }
71
- },
72
- subMenuStyle () {
73
- const style = {
74
- backgroundColor: this.backgroundColor,
75
- color: this.color
76
- }
77
- return style
78
- },
79
-
80
- isTop () {
81
- return !!~this.position.toLowerCase().indexOf('top')
82
- },
83
- isLeft () {
84
- return !!~this.position.toLowerCase().indexOf('left')
85
- }
86
- },
87
- data () {
88
- return {
89
- menuSize: 60,
90
- subMenu4: [[['0', '-160'], ['-80', '-138.6'], ['-138.6', '-80'], ['-160', '0']], [['0', '-160'], ['80', '-138.6'], ['138.6', '-80'], ['160', '0']], [['0', '160'], ['138.6', '80'], ['80', '138.6'], ['160', '0']], [['-160', '0'], ['-138.6', '80'], ['-80', '138.6'], ['0', '160']]],
91
- subMenu3: [[['-160', '0'], ['-113', '-113'], ['0', '-160']], [['0', '-160'], ['113', '-113'], ['160', '0']], [['0', '160'], ['113', '113'], ['160', '0']], [['-160', '0'], ['-113', '113'], ['0', '160']]],
92
- subMenu2: [[['-160', '0'], ['0', '-160']], [['0', '-160'], ['160', '0']], [['0', '160'], ['160', '0']], [['-160', '0'], ['0', '160']]]
93
- }
94
- },
95
- methods: {
96
- getSubMenu (n) {
97
- let menuPosition = this.menuCount === 4 ? this.subMenu4 : this.menuCount === 3 ? this.subMenu3 : this.subMenu2
98
- menuPosition = this.isTop && this.isLeft ? menuPosition[2] : this.isTop && !this.isLeft ? menuPosition[1] : !this.isTop && this.isLeft ? menuPosition[3] : menuPosition[0]
99
- return {
100
- top: menuPosition[n][0] + 'px', left: menuPosition[n][1] + 'px'
101
- }
102
- },
103
- toggleMenu (e) {
104
- let menuEl = this.$refs.quickMenu
105
- let menuIconEl = this.$refs.icon
106
- if (!~menuEl.className.indexOf(' active')) {
107
- menuEl.className += ' active'
108
- menuIconEl.forEach(function (element, index) {
109
- element.className += ' menu-animate'
110
- })
111
- } else {
112
- menuEl.className = menuEl.className.replace(' active', '')
113
- menuIconEl.forEach(function (element, index) {
114
- element.className = element.className.replace(' menu-animate', '')
115
- })
116
- }
117
- },
118
- processCallback (key) {
119
- console.log(key)
120
- this.$emit('process', key)
121
- },
122
- mouseEnterSubMenu (e) {
123
- if (e.target.tagName === 'A') {
124
- e.target.style.backgroundColor = this.lightenColor(this.backgroundColor, 20)
125
- // e.target.firstElementChild.style.backgroundColor = this.lightenColor(this.backgroundColor, 20)
126
- } else if (e.target.tagName === 'I') {
127
- e.target.parentElement.style.backgroundColor = this.lightenColor(this.backgroundColor, 20)
128
- // e.target.style.backgroundColor = this.lightenColor(this.backgroundColor, 20)
129
- }
130
- },
131
- mouseOutSubMenu (e) {
132
- if (e.target.tagName === 'A') {
133
- e.target.style.backgroundColor = this.backgroundColor
134
- // e.target.firstElementChild.style.backgroundColor = this.backgroundColor
135
- } else if (e.target.tagName === 'I') {
136
- e.target.parentElement.style.backgroundColor = this.backgroundColor
137
- // e.target.style.backgroundColor = this.backgroundColor
138
- }
139
- },
140
- lightenColor (hex, amt) {
141
- var usePound = false
142
- if (hex[0] === '#') {
143
- hex = hex.slice(1)
144
- usePound = true
145
- }
146
- var num = parseInt(hex, 16)
147
- var r = (num >> 16) + amt
148
-
149
- if (r > 255) r = 255
150
- else if (r < 0) r = 0
151
-
152
- var b = ((num >> 8) & 0x00FF) + amt
153
- if (b > 255) b = 255
154
- else if (b < 0) b = 0
155
-
156
- var g = (num & 0x0000FF) + amt
157
- if (g > 255) g = 255
158
- else if (g < 0) g = 0
159
- return (usePound ? '#' : '') + (g | (b << 8) | (r << 16)).toString(16)
160
- }
161
- }
162
- }
163
- </script>
164
- <style lang='less'>
165
- .menu-animate {
166
- -webkit-animation: bounce 1s linear 1s;
167
- -moz-animation: bounce 1s linear 1s;
168
- animation: bounce 1s linear 1s;
169
- }
170
-
171
- .quick-menu {
172
- color: #fff;
173
- position: fixed;
174
- width: 60px;
175
- height: 60px;
176
- -webkit-transition: all 1s ease;
177
- -moz-transition: all 1s ease;
178
- transition: all 1s ease;
179
- right: 30px;
180
- > .menu {
181
- display: block;
182
- position: absolute;
183
- border-radius: 50% !important;
184
- width: 60px;
185
- height: 60px;
186
- text-align: center;
187
- box-shadow: 0 3px 10px rgba(0, 0, 0, 0.23), 0 3px 10px rgba(0, 0, 0, 0.16);
188
- color: #fff;
189
- -webkit-transition: all 1s ease;
190
- -moz-transition: all 1s ease;
191
- transition: all 1s ease;
192
- .core-menu {
193
- width: 100%;
194
- height: 100%;
195
- position: absolute;
196
- left: 0px;
197
- top: 0px;
198
- width: 60px;
199
- height: 60px;
200
- -webkit-transform: rotate(180deg);
201
- -moz-transform: rotate(180deg);
202
- -ms-transform: rotate(180deg);
203
- -o-transform: rotate(180deg);
204
- transform: rotate(180deg);
205
- -webkit-transition: all 1s ease;
206
- -moz-transition: all 1s ease;
207
- transition: all 1s ease;
208
- .bar {
209
- -webkit-transition: all 1s ease;
210
- -moz-transition: all 1s ease;
211
- transition: all 1s ease;
212
- width: 28px;
213
- height: 3px;
214
- background: #fff;
215
- position: absolute;
216
- top: 35%;
217
- margin-top: -1.5px;
218
- left: 16px;
219
- -webkit-transform-origin: 0% 50%;
220
- -moz-transform-origin: 0% 50%;
221
- -ms-transform-origin: 0% 50%;
222
- -o-transform-origin: 0% 50%;
223
- transform-origin: 0% 50%;
224
- &:before ,&:after{
225
- -webkit-transition: all 1s ease;
226
- -moz-transition: all 1s ease;
227
- transition: all 1s ease;
228
- content: '';
229
- width: 28px;
230
- height: 3px;
231
- background: #fff;
232
- position: absolute;
233
- left: 0px;
234
- -webkit-transform-origin: 0% 50%;
235
- -moz-transform-origin: 0% 50%;
236
- -ms-transform-origin: 0% 50%;
237
- -o-transform-origin: 0% 50%;
238
- transform-origin: 0% 50%;
239
- }
240
- &:before{
241
- margin-top: 30%;
242
- }
243
- &:after {
244
- margin-top: 60%;
245
- }
246
- }
247
- }
248
- }
249
- .sub-menu{
250
- -webkit-box-sizing: border-box;
251
- -moz-box-sizing: border-box;
252
- box-sizing: border-box;
253
- position: absolute;
254
- width: 60px;
255
- height: 60px;
256
- font-size: 30px;
257
- text-align: center;
258
- border-radius: 50% !important;
259
- a{
260
- outline: none;
261
- text-decoration: none;
262
- display: inline-block;
263
- border-radius: 50% !important;
264
- width: 100%;
265
- height: 100%;
266
- i {
267
- outline: none;
268
- font-size:30px;
269
- margin-top:12px;
270
- background:transparent;
271
- &:before{
272
- vertical-align: middle;
273
- }
274
- }
275
- &:hover {
276
- cursor: pointer;
277
- }
278
- }
279
- }
280
- &.active{
281
- -webkit-transform: rotate(0deg)!important;
282
- -moz-transform: rotate(0deg)!important;
283
- -ms-transform: rotate(0deg)!important;
284
- -o-transform: rotate(0deg)!important;
285
- transform: rotate(0deg)!important;
286
- .menu{
287
- -webkit-transform: scale(0.7);
288
- -moz-transform: scale(0.7);
289
- -ms-transform: scale(0.7);
290
- -o-transform: scale(0.7);
291
- transform: scale(0.7);
292
- .bar {
293
- top: 50%;
294
- margin-top: -1.5px;
295
- left: 50%;
296
- margin-left: -12px;
297
- -webkit-transform-origin: 50% 50%;
298
- -moz-transform-origin: 50% 50%;
299
- -ms-transform-origin: 50% 50%;
300
- -o-transform-origin: 50% 50%;
301
- transform-origin: 50% 50%;
302
- -webkit-transform: rotate(405deg);
303
- -moz-transform: rotate(405deg);
304
- -ms-transform: rotate(405deg);
305
- -o-transform: rotate(405deg);
306
- transform: rotate(405deg);
307
- &:before {
308
- -webkit-transform-origin: 50% 50%;
309
- -moz-transform-origin: 50% 50%;
310
- -ms-transform-origin: 50% 50%;
311
- -o-transform-origin: 50% 50%;
312
- transform-origin: 50% 50%;
313
- -webkit-transform: rotate(-450deg);
314
- -moz-transform: rotate(-450deg);
315
- -ms-transform: rotate(-450deg);
316
- -o-transform: rotate(-450deg);
317
- transform: rotate(-450deg);
318
- margin-top: 0px;
319
- }
320
- &:after{
321
- opacity: 0;
322
- }
323
- }
324
- }
325
- }
326
- }
327
- @-webkit-keyframes bounce {
328
- 0%,100% {
329
- -webkit-transform: translateY(0px);
330
- }
331
- 10% {
332
- -webkit-transform: translateY(6px);
333
- }
334
- 30% {
335
- -webkit-transform: translateY(-4px);
336
- }
337
- 70% {
338
- -webkit-transform: translateY(3px);
339
- }
340
- 90% {
341
- -webkit-transform: translateY(-2px);
342
- }
343
- }
344
- @-moz-keyframes bounce {
345
- 0%,100% {
346
- -moz-transform: translateY(0px);
347
- }
348
- 10% {
349
- -moz-transform: translateY(6px);
350
- }
351
- 30% {
352
- -moz-transform: translateY(-4px);
353
- }
354
- 70% {
355
- -moz-transform: translateY(3px);
356
- }
357
- 90% {
358
- -moz-transform: translateY(-2px);
359
- }
360
- }
361
- @keyframes bounce {
362
- 0%,100% {
363
- -webkit-transform: translateY(0px);
364
- -moz-transform: translateY(0px);
365
- -ms-transform: translateY(0px);
366
- -o-transform: translateY(0px);
367
- transform: translateY(0px);
368
- }
369
- 10% {
370
- -webkit-transform: translateY(6px);
371
- -moz-transform: translateY(6px);
372
- -ms-transform: translateY(6px);
373
- -o-transform: translateY(6px);
374
- transform: translateY(6px);
375
- }
376
- 30% {
377
- -webkit-transform: translateY(-4px);
378
- -moz-transform: translateY(-4px);
379
- -ms-transform: translateY(-4px);
380
- -o-transform: translateY(-4px);
381
- transform: translateY(-4px);
382
- }
383
- 70% {
384
- -webkit-transform: translateY(3px);
385
- -moz-transform: translateY(3px);
386
- -ms-transform: translateY(3px);
387
- -o-transform: translateY(3px);
388
- transform: translateY(3px);
389
- }
390
- 90% {
391
- -webkit-transform: translateY(-2px);
392
- -moz-transform: translateY(-2px);
393
- -ms-transform: translateY(-2px);
394
- -o-transform: translateY(-2px);
395
- transform: translateY(-2px);
396
- }
397
- }
398
- </style>
1
+ <template>
2
+ <div class='quick-menu' ref='quickMenu' :style='quickMenuStyle'>
3
+ <div v-for='(n,key) in menuCount' class='sub-menu' :style='getSubMenu(n-1)' :key='key'>
4
+ <router-link v-if='menuUrlList[n-1].isLink' :to='menuUrlList[n-1].url' :target='openNewTab' :style='subMenuStyle' @mouseover.stop='mouseEnterSubMenu' @mouseout.stop='mouseOutSubMenu'>
5
+ <i :class='iconClass[n-1]' ref='icon'></i>
6
+ </router-link>
7
+ <a v-else :style='subMenuStyle' @mouseover.stop='mouseEnterSubMenu' @mouseout.stop='mouseOutSubMenu' @click='processCallback(key)'>
8
+ <i :class='iconClass[n-1]' ref='icon'></i>
9
+ </a>
10
+ </div>
11
+ <div class='menu' :style='menuStyle'>
12
+ <div class='core-menu' @click='toggleMenu'>
13
+ <div class='bar'></div>
14
+ </div>
15
+ </div>
16
+ </div>
17
+ </template>
18
+ <script>
19
+ export default{
20
+ name: 'kiss-circle-menu',
21
+ props: {
22
+ menuCount: {
23
+ type: Number,
24
+ required: true,
25
+ default: 4
26
+ },
27
+ iconClass: {
28
+ type: Array,
29
+ required: true
30
+ },
31
+ menuUrlList: {
32
+ type: Array,
33
+ required: true
34
+ },
35
+ backgroundColor: {
36
+ type: String,
37
+ default: '#20babb'
38
+ },
39
+ color: {
40
+ type: String,
41
+ default: '#fff'
42
+ },
43
+ isOpenNewTab: {
44
+ type: Boolean,
45
+ default: false
46
+ },
47
+ position: {
48
+ type: String,
49
+ default: 'top-left'
50
+ }
51
+ },
52
+ computed: {
53
+ openNewTab () {
54
+ return this.isOpenNewTab ? '_blank' : '_self'
55
+ },
56
+ quickMenuStyle () {
57
+ const topPosition = { top: '30px' }
58
+ const bottomPosition = { bottom: '30px' }
59
+ const leftPosition = { left: '30px' }
60
+ const rightPosition = { right: '30px' }
61
+ let style = this.isTop ? topPosition : bottomPosition
62
+ Object.assign(style, this.isLeft ? leftPosition : rightPosition)
63
+ Object.assign(style, {transform: this.isLeft ? 'rotate(-180deg)' : 'rotate(180deg)'})
64
+ return style
65
+ },
66
+ menuStyle () {
67
+ return {
68
+ backgroundColor: this.backgroundColor,
69
+ color: this.color
70
+ }
71
+ },
72
+ subMenuStyle () {
73
+ const style = {
74
+ backgroundColor: this.backgroundColor,
75
+ color: this.color
76
+ }
77
+ return style
78
+ },
79
+
80
+ isTop () {
81
+ return !!~this.position.toLowerCase().indexOf('top')
82
+ },
83
+ isLeft () {
84
+ return !!~this.position.toLowerCase().indexOf('left')
85
+ }
86
+ },
87
+ data () {
88
+ return {
89
+ menuSize: 60,
90
+ subMenu4: [[['0', '-160'], ['-80', '-138.6'], ['-138.6', '-80'], ['-160', '0']], [['0', '-160'], ['80', '-138.6'], ['138.6', '-80'], ['160', '0']], [['0', '160'], ['138.6', '80'], ['80', '138.6'], ['160', '0']], [['-160', '0'], ['-138.6', '80'], ['-80', '138.6'], ['0', '160']]],
91
+ subMenu3: [[['-160', '0'], ['-113', '-113'], ['0', '-160']], [['0', '-160'], ['113', '-113'], ['160', '0']], [['0', '160'], ['113', '113'], ['160', '0']], [['-160', '0'], ['-113', '113'], ['0', '160']]],
92
+ subMenu2: [[['-160', '0'], ['0', '-160']], [['0', '-160'], ['160', '0']], [['0', '160'], ['160', '0']], [['-160', '0'], ['0', '160']]]
93
+ }
94
+ },
95
+ methods: {
96
+ getSubMenu (n) {
97
+ let menuPosition = this.menuCount === 4 ? this.subMenu4 : this.menuCount === 3 ? this.subMenu3 : this.subMenu2
98
+ menuPosition = this.isTop && this.isLeft ? menuPosition[2] : this.isTop && !this.isLeft ? menuPosition[1] : !this.isTop && this.isLeft ? menuPosition[3] : menuPosition[0]
99
+ return {
100
+ top: menuPosition[n][0] + 'px', left: menuPosition[n][1] + 'px'
101
+ }
102
+ },
103
+ toggleMenu (e) {
104
+ let menuEl = this.$refs.quickMenu
105
+ let menuIconEl = this.$refs.icon
106
+ if (!~menuEl.className.indexOf(' active')) {
107
+ menuEl.className += ' active'
108
+ menuIconEl.forEach(function (element, index) {
109
+ element.className += ' menu-animate'
110
+ })
111
+ } else {
112
+ menuEl.className = menuEl.className.replace(' active', '')
113
+ menuIconEl.forEach(function (element, index) {
114
+ element.className = element.className.replace(' menu-animate', '')
115
+ })
116
+ }
117
+ },
118
+ processCallback (key) {
119
+ console.log(key)
120
+ this.$emit('process', key)
121
+ },
122
+ mouseEnterSubMenu (e) {
123
+ if (e.target.tagName === 'A') {
124
+ e.target.style.backgroundColor = this.lightenColor(this.backgroundColor, 20)
125
+ // e.target.firstElementChild.style.backgroundColor = this.lightenColor(this.backgroundColor, 20)
126
+ } else if (e.target.tagName === 'I') {
127
+ e.target.parentElement.style.backgroundColor = this.lightenColor(this.backgroundColor, 20)
128
+ // e.target.style.backgroundColor = this.lightenColor(this.backgroundColor, 20)
129
+ }
130
+ },
131
+ mouseOutSubMenu (e) {
132
+ if (e.target.tagName === 'A') {
133
+ e.target.style.backgroundColor = this.backgroundColor
134
+ // e.target.firstElementChild.style.backgroundColor = this.backgroundColor
135
+ } else if (e.target.tagName === 'I') {
136
+ e.target.parentElement.style.backgroundColor = this.backgroundColor
137
+ // e.target.style.backgroundColor = this.backgroundColor
138
+ }
139
+ },
140
+ lightenColor (hex, amt) {
141
+ var usePound = false
142
+ if (hex[0] === '#') {
143
+ hex = hex.slice(1)
144
+ usePound = true
145
+ }
146
+ var num = parseInt(hex, 16)
147
+ var r = (num >> 16) + amt
148
+
149
+ if (r > 255) r = 255
150
+ else if (r < 0) r = 0
151
+
152
+ var b = ((num >> 8) & 0x00FF) + amt
153
+ if (b > 255) b = 255
154
+ else if (b < 0) b = 0
155
+
156
+ var g = (num & 0x0000FF) + amt
157
+ if (g > 255) g = 255
158
+ else if (g < 0) g = 0
159
+ return (usePound ? '#' : '') + (g | (b << 8) | (r << 16)).toString(16)
160
+ }
161
+ }
162
+ }
163
+ </script>
164
+ <style lang='less'>
165
+ .menu-animate {
166
+ -webkit-animation: bounce 1s linear 1s;
167
+ -moz-animation: bounce 1s linear 1s;
168
+ animation: bounce 1s linear 1s;
169
+ }
170
+
171
+ .quick-menu {
172
+ color: #fff;
173
+ position: fixed;
174
+ width: 60px;
175
+ height: 60px;
176
+ -webkit-transition: all 1s ease;
177
+ -moz-transition: all 1s ease;
178
+ transition: all 1s ease;
179
+ right: 30px;
180
+ > .menu {
181
+ display: block;
182
+ position: absolute;
183
+ border-radius: 50% !important;
184
+ width: 60px;
185
+ height: 60px;
186
+ text-align: center;
187
+ box-shadow: 0 3px 10px rgba(0, 0, 0, 0.23), 0 3px 10px rgba(0, 0, 0, 0.16);
188
+ color: #fff;
189
+ -webkit-transition: all 1s ease;
190
+ -moz-transition: all 1s ease;
191
+ transition: all 1s ease;
192
+ .core-menu {
193
+ width: 100%;
194
+ height: 100%;
195
+ position: absolute;
196
+ left: 0px;
197
+ top: 0px;
198
+ width: 60px;
199
+ height: 60px;
200
+ -webkit-transform: rotate(180deg);
201
+ -moz-transform: rotate(180deg);
202
+ -ms-transform: rotate(180deg);
203
+ -o-transform: rotate(180deg);
204
+ transform: rotate(180deg);
205
+ -webkit-transition: all 1s ease;
206
+ -moz-transition: all 1s ease;
207
+ transition: all 1s ease;
208
+ .bar {
209
+ -webkit-transition: all 1s ease;
210
+ -moz-transition: all 1s ease;
211
+ transition: all 1s ease;
212
+ width: 28px;
213
+ height: 3px;
214
+ background: #fff;
215
+ position: absolute;
216
+ top: 35%;
217
+ margin-top: -1.5px;
218
+ left: 16px;
219
+ -webkit-transform-origin: 0% 50%;
220
+ -moz-transform-origin: 0% 50%;
221
+ -ms-transform-origin: 0% 50%;
222
+ -o-transform-origin: 0% 50%;
223
+ transform-origin: 0% 50%;
224
+ &:before ,&:after{
225
+ -webkit-transition: all 1s ease;
226
+ -moz-transition: all 1s ease;
227
+ transition: all 1s ease;
228
+ content: '';
229
+ width: 28px;
230
+ height: 3px;
231
+ background: #fff;
232
+ position: absolute;
233
+ left: 0px;
234
+ -webkit-transform-origin: 0% 50%;
235
+ -moz-transform-origin: 0% 50%;
236
+ -ms-transform-origin: 0% 50%;
237
+ -o-transform-origin: 0% 50%;
238
+ transform-origin: 0% 50%;
239
+ }
240
+ &:before{
241
+ margin-top: 30%;
242
+ }
243
+ &:after {
244
+ margin-top: 60%;
245
+ }
246
+ }
247
+ }
248
+ }
249
+ .sub-menu{
250
+ -webkit-box-sizing: border-box;
251
+ -moz-box-sizing: border-box;
252
+ box-sizing: border-box;
253
+ position: absolute;
254
+ width: 60px;
255
+ height: 60px;
256
+ font-size: 30px;
257
+ text-align: center;
258
+ border-radius: 50% !important;
259
+ a{
260
+ outline: none;
261
+ text-decoration: none;
262
+ display: inline-block;
263
+ border-radius: 50% !important;
264
+ width: 100%;
265
+ height: 100%;
266
+ i {
267
+ outline: none;
268
+ font-size:30px;
269
+ margin-top:12px;
270
+ background:transparent;
271
+ &:before{
272
+ vertical-align: middle;
273
+ }
274
+ }
275
+ &:hover {
276
+ cursor: pointer;
277
+ }
278
+ }
279
+ }
280
+ &.active{
281
+ -webkit-transform: rotate(0deg)!important;
282
+ -moz-transform: rotate(0deg)!important;
283
+ -ms-transform: rotate(0deg)!important;
284
+ -o-transform: rotate(0deg)!important;
285
+ transform: rotate(0deg)!important;
286
+ .menu{
287
+ -webkit-transform: scale(0.7);
288
+ -moz-transform: scale(0.7);
289
+ -ms-transform: scale(0.7);
290
+ -o-transform: scale(0.7);
291
+ transform: scale(0.7);
292
+ .bar {
293
+ top: 50%;
294
+ margin-top: -1.5px;
295
+ left: 50%;
296
+ margin-left: -12px;
297
+ -webkit-transform-origin: 50% 50%;
298
+ -moz-transform-origin: 50% 50%;
299
+ -ms-transform-origin: 50% 50%;
300
+ -o-transform-origin: 50% 50%;
301
+ transform-origin: 50% 50%;
302
+ -webkit-transform: rotate(405deg);
303
+ -moz-transform: rotate(405deg);
304
+ -ms-transform: rotate(405deg);
305
+ -o-transform: rotate(405deg);
306
+ transform: rotate(405deg);
307
+ &:before {
308
+ -webkit-transform-origin: 50% 50%;
309
+ -moz-transform-origin: 50% 50%;
310
+ -ms-transform-origin: 50% 50%;
311
+ -o-transform-origin: 50% 50%;
312
+ transform-origin: 50% 50%;
313
+ -webkit-transform: rotate(-450deg);
314
+ -moz-transform: rotate(-450deg);
315
+ -ms-transform: rotate(-450deg);
316
+ -o-transform: rotate(-450deg);
317
+ transform: rotate(-450deg);
318
+ margin-top: 0px;
319
+ }
320
+ &:after{
321
+ opacity: 0;
322
+ }
323
+ }
324
+ }
325
+ }
326
+ }
327
+ @-webkit-keyframes bounce {
328
+ 0%,100% {
329
+ -webkit-transform: translateY(0px);
330
+ }
331
+ 10% {
332
+ -webkit-transform: translateY(6px);
333
+ }
334
+ 30% {
335
+ -webkit-transform: translateY(-4px);
336
+ }
337
+ 70% {
338
+ -webkit-transform: translateY(3px);
339
+ }
340
+ 90% {
341
+ -webkit-transform: translateY(-2px);
342
+ }
343
+ }
344
+ @-moz-keyframes bounce {
345
+ 0%,100% {
346
+ -moz-transform: translateY(0px);
347
+ }
348
+ 10% {
349
+ -moz-transform: translateY(6px);
350
+ }
351
+ 30% {
352
+ -moz-transform: translateY(-4px);
353
+ }
354
+ 70% {
355
+ -moz-transform: translateY(3px);
356
+ }
357
+ 90% {
358
+ -moz-transform: translateY(-2px);
359
+ }
360
+ }
361
+ @keyframes bounce {
362
+ 0%,100% {
363
+ -webkit-transform: translateY(0px);
364
+ -moz-transform: translateY(0px);
365
+ -ms-transform: translateY(0px);
366
+ -o-transform: translateY(0px);
367
+ transform: translateY(0px);
368
+ }
369
+ 10% {
370
+ -webkit-transform: translateY(6px);
371
+ -moz-transform: translateY(6px);
372
+ -ms-transform: translateY(6px);
373
+ -o-transform: translateY(6px);
374
+ transform: translateY(6px);
375
+ }
376
+ 30% {
377
+ -webkit-transform: translateY(-4px);
378
+ -moz-transform: translateY(-4px);
379
+ -ms-transform: translateY(-4px);
380
+ -o-transform: translateY(-4px);
381
+ transform: translateY(-4px);
382
+ }
383
+ 70% {
384
+ -webkit-transform: translateY(3px);
385
+ -moz-transform: translateY(3px);
386
+ -ms-transform: translateY(3px);
387
+ -o-transform: translateY(3px);
388
+ transform: translateY(3px);
389
+ }
390
+ 90% {
391
+ -webkit-transform: translateY(-2px);
392
+ -moz-transform: translateY(-2px);
393
+ -ms-transform: translateY(-2px);
394
+ -o-transform: translateY(-2px);
395
+ transform: translateY(-2px);
396
+ }
397
+ }
398
+ </style>