206 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			Vue
		
	
	
	
			
		
		
	
	
			206 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			Vue
		
	
	
	
| <template>
 | |
|   <div class="md-cg">
 | |
|     <h1 class="md-cg-title">Mand Mobile</h1>
 | |
|     <h1 class="md-cg-subtitle">面向金融场景的移动端Vue组件库</h1>
 | |
|     <div class="md-cg-logo">
 | |
|       <img src="//manhattan.didistatic.com/static/manhattan/mand/docs/mand-logo-black.svg" alt="">
 | |
|     </div>
 | |
|     <section
 | |
|       v-for="(category, i) in components" :key="i"
 | |
|       class="cg-category"
 | |
|       :class="{'active': category.show}">
 | |
|       <div
 | |
|         class="cg-category-title"
 | |
|         :class="{'active': category.show}"
 | |
|         @click="toggleCategory(i, category)">
 | |
|         {{ category.name }}  <span>{{ category.text }}</span>
 | |
|         <md-icon name="arrow" size="md"></md-icon>
 | |
|       </div>
 | |
|       <transition name="slide-fade">
 | |
|         <div class="cg-category-list" v-show="category.show">
 | |
|           <div class="cg-category-item"
 | |
|             v-for="(item, j) in category.list"
 | |
|             :key="j"
 | |
|             @click="goToComponent(item.path)">
 | |
|             <div class="cg-category-item-inner">
 | |
|               {{ item.name }} - {{ item.text }}
 | |
|               <md-icon name="arrow" size="sm"></md-icon>
 | |
|             </div>
 | |
|           </div>
 | |
|           <div class="cg-category-item" @click="toggleCategory(i, category)">
 | |
|             <div class="cg-category-item-inner close">收起</div>
 | |
|           </div>
 | |
|         </div>
 | |
|       </transition>
 | |
|     </section>
 | |
|     <h1 class="md-cg-copyright">Produced By DiDi - FDC × MFE</h1>
 | |
|   </div>
 | |
| </template>
 | |
| 
 | |
| <script>
 | |
| import components from './components.json'
 | |
| import Icon from '../components/icon'
 | |
| 
 | |
| export default {
 | |
|   name: 'category',
 | |
|   components: {
 | |
|     [Icon.name]: Icon,
 | |
|   },
 | |
|   data() {
 | |
|     return {
 | |
|       components,
 | |
|     }
 | |
|   },
 | |
|   methods: {
 | |
|     toggleCategory(index, category) {
 | |
|       category.show = !category.show
 | |
|       this.$set(this.components, index, category)
 | |
|     },
 | |
|     goToComponent(path) {
 | |
|       this.$router.push(path)
 | |
|     },
 | |
|   },
 | |
| }
 | |
| 
 | |
| </script>
 | |
| 
 | |
| <style lang="stylus" scoped>
 | |
| block()
 | |
|   float left
 | |
|   width 100%
 | |
| .md-cg
 | |
|   padding 20px 20px 50px
 | |
|   clearfix()
 | |
|   .md-cg-title
 | |
|     block()
 | |
|     margin 20px 0
 | |
|     font-size font-heading-large
 | |
|     font-weight font-weight-normal
 | |
|     color color-text-minor
 | |
|     span
 | |
|       color color-text-base
 | |
|   .md-cg-subtitle
 | |
|     block()
 | |
|     margin-bottom 30px
 | |
|     font-size font-body-normal
 | |
|     font-weight 300
 | |
|     color color-text-minor
 | |
|   .md-cg-logo
 | |
|     position fixed
 | |
|     top -.3rem
 | |
|     right -.3rem
 | |
|     width 2rem
 | |
|     height 2rem
 | |
|     opacity .05
 | |
|     z-index -1
 | |
|     img
 | |
|       width 100%
 | |
|   .cg-category
 | |
|     block()
 | |
|     position relative
 | |
|     z-index 3
 | |
|     height 120px
 | |
|     margin-bottom 20px
 | |
|     border-radius border-width-base
 | |
|     transform translate(0, 0)
 | |
|     &.active
 | |
|       height auto
 | |
|     // box-shadow shadow-bottom
 | |
|     .cg-category-title
 | |
|       position relative
 | |
|       z-index 2
 | |
|       block()
 | |
|       height 120px
 | |
|       padding 0 h-gap-lg
 | |
|       line-height 120px
 | |
|       font-size font-heading-normal
 | |
|       font-family DINAlternate-Bold
 | |
|       // font-weight font-weight-medium
 | |
|       color color-text-base
 | |
|       box-sizing border-box
 | |
|       box-shadow 0 2px 4px rgba(0, 0, 0, .08)
 | |
|       background color-bg-base
 | |
|       overflow hidden
 | |
|       span
 | |
|         font-size font-body-large
 | |
|         color color-text-minor
 | |
|       .md-icon
 | |
|         position absolute
 | |
|         right h-gap-lg
 | |
|         top 50%
 | |
|         transform translateY(-50%)
 | |
|         transition transform .3s ease-in-out-quint
 | |
|       &.active .md-icon
 | |
|           transform translateY(-50%) rotate(90deg)
 | |
|       &:before
 | |
|         content ""
 | |
|         position absolute
 | |
|         left 0
 | |
|         top 0
 | |
|         width 4px
 | |
|         height 100%
 | |
|         border-radius border-width-base
 | |
|         // display none
 | |
|     &:nth-of-type(1) .cg-category-title:before
 | |
|       background #5E83DD
 | |
|     &:nth-of-type(2) .cg-category-title:before
 | |
|       background #83D23A
 | |
|     &:nth-of-type(3) .cg-category-title:before
 | |
|       background #FF7A2E
 | |
|     &:nth-of-type(4) .cg-category-title:before
 | |
|       background #FFC013
 | |
|     &:nth-of-type(5) .cg-category-title:before
 | |
|       background #FF525D
 | |
|     .cg-category-list
 | |
|       block()
 | |
|       background #FCFCFC
 | |
|       box-shadow 0 2px 4px rgba(0, 0, 0, .08)
 | |
|       .cg-category-item
 | |
|         block()
 | |
|         padding 0 h-gap-lg
 | |
|         box-sizing border-box
 | |
|         -webkit-tap-highlight-color transparent
 | |
|         .cg-category-item-inner
 | |
|           position relative
 | |
|           block()
 | |
|           height 100px
 | |
|           line-height 100px
 | |
|           font-size font-body-normal
 | |
|           font-family DINAlternate-Bold
 | |
|           color color-text-minor
 | |
|           hairline(bottom, color-border-base)
 | |
|           .md-icon
 | |
|             position absolute
 | |
|             right 0
 | |
|             top 50%
 | |
|             line-height 32px
 | |
|             transform translateY(-50%)
 | |
|           &.close
 | |
|             text-align center
 | |
|             color color-text-link
 | |
|             &:before
 | |
|               display none
 | |
| 
 | |
| 
 | |
|   .md-cg-copyright
 | |
|     position fixed
 | |
|     left 0
 | |
|     bottom 20px
 | |
|     width 100%
 | |
|     text-align center
 | |
|     font-size font-minor-normal
 | |
|     font-weight 300
 | |
|     color color-text-caption
 | |
| 
 | |
| .slide-fade-enter-active
 | |
|   transition all .3s ease
 | |
| .slide-fade-leave-active
 | |
|   transition all .3s ease
 | |
| .slide-fade-enter
 | |
| /* .slide-fade-leave-active below version 2.1.8 */
 | |
|   transform translate3d(0, -10px, 0)
 | |
|   opacity 0
 | |
| .slide-fade-leave-to
 | |
|   opacity 0
 | |
| </style>
 |