Resource.vue 7.6 KB
Newer Older
A
ailululu 已提交
1 2 3 4 5
<template>
  <doc-header></doc-header>
  <div class="resource-main">
    <div class="resource-main-content">
      <h3 class="sub-title">资源</h3>
A
ailululu 已提交
6
      <p class="sub-desc"
7 8
        >想要了解 NutUI 设计体系背后的故事?如何才能更好的应用?你可以查阅下述我们为你精挑细选的文章。也欢迎关注 NutUI
        官方专栏,这里常有关于 NutUI 设计体系下相关话题内容的最新分享和讨论。</p
A
ailululu 已提交
9
      >
A
ailululu 已提交
10
    </div>
richard_1015's avatar
richard_1015 已提交
11 12 13 14
  </div>
  <!-- 设计资源 -->
  <div class="resource-content">
    <div class="resource-block">
A
ailululu 已提交
15
      <h4 class="sub-title">设计资源</h4>
16 17 18 19 20 21
      <p class="sub-desc"
        >NutUI 3x 基于 JD APP 10.0 视觉规范实现的组件库,在这里可以下载 NutUI 的设计资源。
        <a class="download" download href="https://storage.360buyimg.com/nutui-static/NutUI3xStyleGuide.sketch"
          >点击下载
        </a></p
      >
richard_1015's avatar
richard_1015 已提交
22
      <img
23
        src="https://img11.360buyimg.com/imagetools/jfs/t1/206767/18/7920/405226/6181e655E6b5be4de/47a13df50b92106b.jpg"
richard_1015's avatar
richard_1015 已提交
24 25 26 27 28 29 30 31
      />
    </div>
    <div class="resource-block">
      <div class="no-data" v-if="articleList.length === 0">
        <img class="nodata-img-joy" src="../../assets/images/img-joy.png" />
        <p class="nodata-desc">敬请期待</p>
      </div>
      <div class="tab-box" v-else>
A
ailululu 已提交
32
        <div class="tab-hd">
A
ailululu 已提交
33 34
          <div
            class="tab-hd-item"
A
ailululu 已提交
35 36
            :class="{ active: activeIndex === index }"
            v-for="(item, index) in tabData"
A
ailululu 已提交
37 38 39
            :key="index"
            @click="clickTab(index)"
          >
A
ailululu 已提交
40 41 42
            {{ item.title }}
          </div>
        </div>
43 44 45 46 47 48 49
        <template v-for="pItem in articleList" v-show="activeIndex === 0">
          <h3>{{ pItem.year }}</h3>
          <div class="tab-bd">
            <div class="design-item" v-for="item in pItem.list" :key="item.id" @click="toLink(item.id)">
              <img class="img-design" :src="item.cover_image" />
              <p class="design-title" v-hover>{{ item.title }}</p>
            </div>
A
ailululu 已提交
50
          </div>
51
        </template>
A
ailululu 已提交
52 53
      </div>
    </div>
A
ailululu 已提交
54
    <!-- 社区文章 -->
A
ailululu 已提交
55 56
    <div class="resource-block">
      <h4 class="sub-title">社区文章</h4>
richard_1015's avatar
richard_1015 已提交
57
      <p class="sub-desc"></p>
A
ailululu 已提交
58
      <ul class="article-box">
59 60
        <li class="article-item" v-for="item in communityArticleList" :key="item.id">
          <a class="article-link" target="_blank" :href="item.link"> {{ item.title }} - {{ item.user_name }} </a>
A
ailululu 已提交
61 62 63 64 65 66 67
        </li>
      </ul>
    </div>
  </div>
  <doc-footer></doc-footer>
</template>
<script lang="ts">
A
ailululu 已提交
68
import { defineComponent, onMounted, reactive, toRefs } from 'vue';
69
import { onBeforeRouteUpdate, RouteLocationNormalized, useRoute } from 'vue-router';
A
ailululu 已提交
70 71
import Header from '@/sites/doc/components/Header.vue';
import Footer from '@/sites/doc/components/Footer.vue';
richard_1015's avatar
richard_1015 已提交
72
import { RefData } from '@/sites/assets/util/ref';
richard_1015's avatar
richard_1015 已提交
73
import { ApiService } from '@/sites/service/ApiService';
A
ailululu 已提交
74 75 76 77 78 79 80
export default defineComponent({
  name: 'doc',
  components: {
    [Header.name]: Header,
    [Footer.name]: Footer
  },
  setup() {
richard_1015's avatar
richard_1015 已提交
81
    const articleList: any[] = [];
richard_1015's avatar
richard_1015 已提交
82
    const communityArticleList: any[] = [];
A
ailululu 已提交
83
    const data = reactive({
richard_1015's avatar
richard_1015 已提交
84
      articleList,
richard_1015's avatar
richard_1015 已提交
85
      communityArticleList,
A
ailululu 已提交
86 87 88 89
      tabData: [
        {
          title: '全部文章'
        }
richard_1015's avatar
richard_1015 已提交
90 91 92 93 94 95
        // {
        //   title: '性能体验'
        // },
        // {
        //   title: '性能体验'
        // }
A
ailululu 已提交
96
      ],
J
Jerry 已提交
97 98
      activeIndex: 0,
      showNutuiCat: false
A
ailululu 已提交
99
    });
A
ailululu 已提交
100
    const watchDemoUrl = (router: RouteLocationNormalized) => {
richard_1015's avatar
richard_1015 已提交
101
      RefData.getInstance().currentRoute.value = router.name as string;
A
ailululu 已提交
102
    };
richard_1015's avatar
richard_1015 已提交
103
    onMounted(() => {
A
ailululu 已提交
104 105 106 107 108
      // 路由
      const route = useRoute();
      watchDemoUrl(route);

      // 文章列表接口
richard_1015's avatar
richard_1015 已提交
109
      const apiService = new ApiService();
richard_1015's avatar
richard_1015 已提交
110
      apiService.getArticle().then((res) => {
richard_1015's avatar
richard_1015 已提交
111
        if (res?.state == 0) {
richard_1015's avatar
richard_1015 已提交
112
          (res.value.data.arrays as any[]).forEach((element) => {
richard_1015's avatar
richard_1015 已提交
113
            if (element.type == 1) {
114 115 116 117 118 119 120 121 122 123
              let year = element.create_time.split('-')[0];
              let index = data.articleList.findIndex((item) => item.year == year);
              if (index == -1) {
                data.articleList.push({
                  year,
                  list: [element]
                });
              } else {
                data.articleList[index].list.push(element);
              }
richard_1015's avatar
richard_1015 已提交
124 125 126 127
            } else {
              data.communityArticleList.push(element);
            }
          });
richard_1015's avatar
richard_1015 已提交
128 129 130
        }
      });
    });
richard_1015's avatar
richard_1015 已提交
131
    onBeforeRouteUpdate((to) => {
A
ailululu 已提交
132 133
      watchDemoUrl(to);
    });
A
ailululu 已提交
134 135 136
    const clickTab = (index: number) => {
      data.activeIndex = index;
    };
A
ailululu 已提交
137 138 139
    const toLink = (id: number) => {
      window.open('//jelly.jd.com/article/' + id);
    };
A
ailululu 已提交
140
    return {
A
ailululu 已提交
141
      ...toRefs(data),
A
ailululu 已提交
142 143
      clickTab,
      toLink
A
ailululu 已提交
144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183
    };
  }
});
</script>

<style lang="scss" scoped>
$mainRed: #fa685d;
.resource {
  &-main {
    background-color: #1d1d1d;
    &-content {
      max-width: 1200px;
      margin: 0 auto;
      padding-top: 48px;
      padding-bottom: 53px;
      background: url('../../assets/images/bg-article.png') no-repeat;
      background-size: 307px 200px;
      background-position: right 280px top 0;
      .sub-title {
        margin-left: 8px;
        margin-bottom: 40px;
        line-height: 36px;
        font-size: 30px;
        color: $white;
      }
      .sub-desc {
        line-height: 22px;
        font-size: 16px;
        color: $white;
      }
    }
  }
  &-content {
    max-width: 1200px;
    margin: 0 auto;
    padding: 50px 0;
  }
  &-block {
    margin-bottom: 50px;
    text-align: left;
richard_1015's avatar
richard_1015 已提交
184
    .download {
185 186 187 188 189
      color: #38f;
    }
    > img {
      width: 100%;
      box-shadow: 0px 1px 7px 0px rgba(237, 238, 241, 1);
richard_1015's avatar
richard_1015 已提交
190
    }
A
ailululu 已提交
191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221
    .sub-title {
      margin-bottom: 15px;
      line-height: 42px;
      font-size: 30px;
      color: #1a1a1a;
    }
    .sub-desc {
      margin-bottom: 40px;
      line-height: 22px;
      font-size: 16px;
      color: #959fb1;
    }
    .sub-red {
      color: #fa2c19;
    }
  }
}
.no-data {
  text-align: center;
  .nodata-img-joy {
    width: 269px;
    height: 153px;
    margin-bottom: 30px;
  }
  .nodata-desc {
    font-size: 16px;
    color: #959fb1;
  }
}
.tab {
  &-box {
222 223 224
    > h3 {
      margin-bottom: 10px;
    }
A
ailululu 已提交
225 226 227 228 229 230 231 232 233
  }
  &-hd {
    display: flex;
    margin-bottom: 30px;
  }
  &-bd {
    display: flex;
    width: 100%;
    flex-wrap: wrap;
A
ailululu 已提交
234
    justify-content: flex-start;
A
ailululu 已提交
235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252
  }
  &-hd-item {
    margin-right: 40px;
    line-height: 25px;
    font-size: 18px;
    color: #808080;
    cursor: pointer;
    &:first-child {
      color: #1a1a1a;
    }
    &.active {
      color: #e32c36;
    }
  }
}
.design {
  &-item {
    width: 280px;
A
ailululu 已提交
253
    margin-right: 26px;
A
ailululu 已提交
254
    margin-bottom: 45px;
A
ailululu 已提交
255 256 257 258
    cursor: pointer;
    &:nth-child(4n) {
      margin-right: 0;
    }
A
ailululu 已提交
259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307
    .img-design {
      width: 280px;
      height: 170px;
      margin-bottom: 20px;
      border-radius: 5px;
    }
  }
  &-title {
    width: 280px;
    height: 44px;
    line-height: 22px;
    font-size: 16px;
    color: #1d1d21;
    text-overflow: -o-ellipsis-lastline;
    overflow: hidden;
    text-overflow: ellipsis;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    line-clamp: 2;
    -webkit-box-orient: vertical;
  }
}
.article {
  &-item {
    position: relative;
    padding-left: 34px;
    margin-bottom: 20px;
    color: $mainRed;
    &:before {
      content: '';
      display: inline-block;
      position: absolute;
      top: 50%;
      left: 0;
      margin-top: -8px;
      width: 12px;
      height: 12px;
      border: 2px solid #fa2c19;
      border-radius: 50%;
    }
  }
  &-link {
    line-height: 22px;
    font-size: 14px;
    color: $mainRed;
    cursor: pointer;
  }
}
</style>