| ¶Ô±ÈÐÂÎļþ | 
|  |  |  | 
|---|
|  |  |  | <template> | 
|---|
|  |  |  | <div class="light" :class="{normal: !warn && !danger, warn: !danger && warn, danger, mini: mini}"> | 
|---|
|  |  |  | <em><i></i></em> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <script> | 
|---|
|  |  |  | export default { | 
|---|
|  |  |  | name: 'Light', | 
|---|
|  |  |  | props: { | 
|---|
|  |  |  | // è¦å | 
|---|
|  |  |  | warn: { | 
|---|
|  |  |  | type: Boolean, | 
|---|
|  |  |  | default: false | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | // å±é© | 
|---|
|  |  |  | danger: { | 
|---|
|  |  |  | type: Boolean, | 
|---|
|  |  |  | default: false | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | // æå°å°ºå¯¸ | 
|---|
|  |  |  | mini: { | 
|---|
|  |  |  | type: Boolean, | 
|---|
|  |  |  | default: false | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | </script> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <style scoped lang="scss"> | 
|---|
|  |  |  | $cycle-size01: 16px; | 
|---|
|  |  |  | $cycle-size02: 6px; | 
|---|
|  |  |  | $normal-color: #00CC99; | 
|---|
|  |  |  | $warn-color: #FFCC33; | 
|---|
|  |  |  | $danger-color: #FF3300; | 
|---|
|  |  |  | @mixin light-status ($cycle-bg) { | 
|---|
|  |  |  | em { | 
|---|
|  |  |  | background: $cycle-bg; | 
|---|
|  |  |  | i { | 
|---|
|  |  |  | background: $cycle-bg - 30; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | .light { | 
|---|
|  |  |  | display: inline-block; | 
|---|
|  |  |  | border-radius: 50%; | 
|---|
|  |  |  | em { | 
|---|
|  |  |  | width: $cycle-size01; | 
|---|
|  |  |  | height: $cycle-size01; | 
|---|
|  |  |  | border-radius: 50%; | 
|---|
|  |  |  | display: flex; | 
|---|
|  |  |  | justify-content: center; | 
|---|
|  |  |  | align-items: center; | 
|---|
|  |  |  | i { | 
|---|
|  |  |  | display: block; | 
|---|
|  |  |  | width: $cycle-size02; | 
|---|
|  |  |  | height: $cycle-size02; | 
|---|
|  |  |  | border-radius: 50%; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | &.mini { | 
|---|
|  |  |  | em { | 
|---|
|  |  |  | width: 12px; | 
|---|
|  |  |  | height: 12px; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // æ£å¸¸ | 
|---|
|  |  |  | &.normal { | 
|---|
|  |  |  | @include light-status($normal-color); | 
|---|
|  |  |  | animation: shine-normal infinite 1s; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // è¦å | 
|---|
|  |  |  | &.warn { | 
|---|
|  |  |  | @include light-status($warn-color); | 
|---|
|  |  |  | animation: shine-warn infinite .8s; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // å±é© | 
|---|
|  |  |  | &.danger { | 
|---|
|  |  |  | @include light-status($danger-color); | 
|---|
|  |  |  | animation: shine-danger infinite .5s; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | @keyframes shine-normal { | 
|---|
|  |  |  | 0% { | 
|---|
|  |  |  | box-shadow: 0 0 5px $normal-color + 10; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 25% { | 
|---|
|  |  |  | box-shadow: 0 0 10px $normal-color + 10; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 50% { | 
|---|
|  |  |  | box-shadow: 0 0 15px $normal-color + 10; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 100% { | 
|---|
|  |  |  | box-shadow: 0 0 20px $normal-color + 10; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | @keyframes shine-warn { | 
|---|
|  |  |  | 0% { | 
|---|
|  |  |  | box-shadow: 0 0 5px $warn-color - 50; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 25% { | 
|---|
|  |  |  | box-shadow: 0 0 10px $warn-color - 50; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 50% { | 
|---|
|  |  |  | box-shadow: 0 0 15px $warn-color - 50; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 100% { | 
|---|
|  |  |  | box-shadow: 0 0 20px $warn-color - 50; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | @keyframes shine-danger { | 
|---|
|  |  |  | 0% { | 
|---|
|  |  |  | box-shadow: 0 0 5px $danger-color + 10; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 25% { | 
|---|
|  |  |  | box-shadow: 0 0 10px $danger-color + 10; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 50% { | 
|---|
|  |  |  | box-shadow: 0 0 15px $danger-color + 10; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 100% { | 
|---|
|  |  |  | box-shadow: 0 0 20px $danger-color + 10; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | </style> | 
|---|