diff --git a/README.md b/README.md index 455d617..9378e37 100644 --- a/README.md +++ b/README.md @@ -28,3 +28,11 @@ * viewmodel中Promise+async解析结果数据为Bean * Page页面aboutToAppear(页面即将显示)方法中调用viewmodel中的接口 +### 3.3 v3.0 + +* 使用UI容器(Scroll、Row、Column、List)和常用组件Text、Image搭建UI界面 +* 自定义组件用于List-ListItem使用 +* Swiper实现轮播图 +* @State实现数据变化监听 +* 样式文件实现复杂布局 +* Resource:color-颜色命名文字不能大写,float-fp后缀对应文字,vp后缀对应宽度长度 \ No newline at end of file diff --git a/entry/src/main/ets/bean/ArticleBean.ets b/entry/src/main/ets/bean/ArticleBean.ets index 239b5ed..98b0d35 100644 --- a/entry/src/main/ets/bean/ArticleBean.ets +++ b/entry/src/main/ets/bean/ArticleBean.ets @@ -19,6 +19,7 @@ export class ArticleList { export class Article { + isTop:boolean = false; //是否为置顶 adminAdd: boolean = false; //是否为管理员添加 apkLink: string = ''; //apk链接 audit: number = 0; diff --git a/entry/src/main/ets/pages/HomePage.ets b/entry/src/main/ets/pages/HomePage.ets index 73b561e..4815dfd 100644 --- a/entry/src/main/ets/pages/HomePage.ets +++ b/entry/src/main/ets/pages/HomePage.ets @@ -1,8 +1,11 @@ // 导入页面路由模块 import router from '@ohos.router'; import HttpConfig from '../api/HttpConfig'; +import { Article, ArticleList, ArticleTop } from '../bean/ArticleBean'; import { Banner } from '../bean/BannerBean'; +import Constants from '../common/constants/Constants'; import Logger from '../utils/Logger'; +import ArticleItem from '../view/ArticleItem'; import HomeViewModel from '../viewmodel/HomeViewModel'; /** @@ -12,23 +15,33 @@ import HomeViewModel from '../viewmodel/HomeViewModel'; @Entry @Component export default struct HomePage { + private swiperController: SwiperController = new SwiperController(); + @State bannerData: Banner[] = []; + @State articleTopData: Article[] = []; + @State articleListData: ArticleList = new ArticleList() + @State articleData: Article[] = []; + + //页面即将显示时 aboutToAppear() { //1-首页全部接口数据 HomeViewModel.getHomeData().then(result => { - //1-result[0]-Banner - let bannerData = result[0] - //2-result[1]-置顶文章 - let articleTopData = result[1] - //3-result[3] - 文章列表 - let articleListData = result[2] + this.bannerData = result[0] as Banner[] + this.articleTopData = (result[1] as Article[]) + this.articleTopData.forEach(item => { + item.isTop = true + }) + this.articleListData = result[2] + this.articleData = [...this.articleTopData, ...this.articleListData.datas] + console.log("result") }) //2-首页-文章接口数据 HomeViewModel.getArticle(0).then(result => { + var aa = this.bannerData; result.datas.forEach((article, index) => { console.log('article>>>', article) }) @@ -37,14 +50,25 @@ export default struct HomePage { } build() { - Row() { + Scroll() { Column() { - Text("首页") - .fontSize(50) - .fontWeight(FontWeight.Bold) + if (this.bannerData.length > 0) { + Swiper(this.swiperController) { + ForEach(this.bannerData, (banner: Banner) => { + Image(banner.imagePath) + }, (img: Resource) => JSON.stringify(img.id)) + }.height(200).width('100%') + .autoPlay(true) + } + //Article + List() { + ForEach(this.articleData, (article: Article) => { + ListItem() { + ArticleItem({ article: article }) + } + }) + } } - .width('100%') - } - .height('100%') + }.height(Constants.FULL_PERCENT) } } \ No newline at end of file diff --git a/entry/src/main/ets/pages/Splash.ets b/entry/src/main/ets/pages/Splash.ets index f1569f2..fd15d9f 100644 --- a/entry/src/main/ets/pages/Splash.ets +++ b/entry/src/main/ets/pages/Splash.ets @@ -51,8 +51,8 @@ struct Splash { .width(Constants.FULL_PERCENT) .height(Constants.FULL_PERCENT) Image($r('app.media.ic_logo')) - .width($r('app.float.192')) - .height($r('app.float.192')) + .width($r('app.float.192vp')) + .height($r('app.float.192vp')) .offset({ y: `-${Constants.PERCENTAGE_15}` }) diff --git a/entry/src/main/ets/utils/Utils.ets b/entry/src/main/ets/utils/Utils.ets new file mode 100644 index 0000000..b85bd43 --- /dev/null +++ b/entry/src/main/ets/utils/Utils.ets @@ -0,0 +1,25 @@ + +/** + * @desc:工具类 + */ + +//1-判断是否为空字符串 +const isEmpty = (data) => { + return data == undefined || data == "" || data.length <= 0 + +}; +//2-格式化字符串 +const formatHtml = (html) => { + let data = '' + if (!isEmpty(html)) { + let regSymbol = RegExp("&.*;") + let regHtml = RegExp(/<[^>]*>/g); + data = html.replace(regSymbol, '').replace(regHtml, '') + } + return data +} + +export { + isEmpty, + formatHtml +}; \ No newline at end of file diff --git a/entry/src/main/ets/view/ArticleItem.ets b/entry/src/main/ets/view/ArticleItem.ets new file mode 100644 index 0000000..69c7565 --- /dev/null +++ b/entry/src/main/ets/view/ArticleItem.ets @@ -0,0 +1,169 @@ +/** + * @desc:文章Item + */ +import * as Utils from "../utils/Utils"; +import { Article } from '../bean/ArticleBean' +import Constants from '../common/constants/Constants'; +import { when } from '@ohos/hypium'; + +@Component +export default struct ArticleItem { + article: Article = new Article() + @State isTop: boolean = false; + @State hasTag: boolean = false; + @State tag: string = ''; + @State author: string | number = ''; + @State title: string = ''; + @State desc: string = ''; + @State hasPic: boolean = false; + @State hasSuperChapterName: boolean = false; + @State superChapterName: string = ''; + @State hasChapterName: boolean = false; + @State chapterName: string = ''; + + aboutToAppear() { + let item = this.article + + this.isTop = item.isTop; + this.hasTag = !Utils.isEmpty(item.tags); + this.tag = !this.hasTag ? '暂无' : item.tags[0].name; + this.author = Utils.isEmpty(item.author) ? Utils.isEmpty(item.shareUser) ? '' : item.shareUser : item.author; + + + //this.author = Utils.isEmpty(item.author) ? Utils.isEmpty(item.shareUser) ? '' : item.shareUser : item.author; + this.title = Utils.formatHtml(item.title); + this.desc = Utils.formatHtml(item.desc) + this.hasPic = !Utils.isEmpty(item.envelopePic) + this.hasSuperChapterName = !Utils.isEmpty(item.superChapterName) + this.superChapterName = Utils.isEmpty(item.superChapterName) ? '' : Utils.formatHtml(item.superChapterName) + this.hasChapterName = !Utils.isEmpty(item.chapterName) + this.chapterName = Utils.isEmpty(item.chapterName) ? '' : Utils.formatHtml(item.chapterName) + + } + + build() { + Column() { + //第一行 + Row() { + + //1-tag + if (this.hasTag) { + Text(this.tag) + .height($r('app.float.23vp')) + .fontSize($r('app.float.12fp')) + .textAlign(TextAlign.Center) + .borderRadius($r('app.float.3vp')) + .fontColor($r('app.color.white')) + .backgroundColor('red') + .padding({ + left: $r('app.float.10vp'), + right: $r('app.float.10vp'), + top: $r('app.float.5vp'), + bottom: $r('app.float.5vp') + }) + } + Row() { + Image($r('app.media.ic_me_normal')).width($r('app.float.18vp')).height($r('app.float.18vp')) + Text(this.author.toString()).margin({ left: $r('app.float.5vp') }) //2-author + }.margin({ left: $r('app.float.5vp'), right: $r('app.float.5vp') }) + + Row() { + Image($r('app.media.ic_clock')).width($r('app.float.18vp')).height($r('app.float.18vp')) + Text(this.article.niceDate) //3-time + } + }.width(Constants.FULL_PERCENT).justifyContent(FlexAlign.SpaceBetween) + //第2行 + Flex({ direction: FlexDirection.Row }) { + Column() { + Text(this.title) + //.width(Constants.FULL_PERCENT) + .maxLines(2) + .textOverflow({ overflow: TextOverflow.Ellipsis }) + .fontSize($r('app.float.18fp')) + .fontColor(Color.Black) + .align(Alignment.TopStart) + Text(this.desc) + //.width(Constants.FULL_PERCENT) + .maxLines(2) + .textOverflow({ overflow: TextOverflow.Ellipsis }) + .fontColor(Color.Gray) + .align(Alignment.TopStart) + }.flexGrow(1) + //.width('70%') + .alignItems(HorizontalAlign.Start) + + if (this.hasPic) { + //Image('https://img1.baidu.com/it/u=2653588009,1450076812&fm=253&app=138&size=w931&n=0&f=JPEG&fmt=auto?sec=1699722000&t=b4f916a93f7e4735cf7c4c69416ab2fb') + Image(this.article.envelopePic) + .width($r('app.float.60vp')) + .height('100%') + } + }.height($r('app.float.80vp')).margin({ top: $r('app.float.5vp') }) + //第3行 + Row() { + //置顶 + if (this.isTop) { + Text('置顶') + .height($r('app.float.23vp')) + .fontSize($r('app.float.12fp')) + .borderRadius($r('app.float.3vp')) + .textAlign(TextAlign.Center) + .fontColor($r('app.color.white')) + .backgroundColor($r('app.color.dark_orange')) + .padding({ + left: $r('app.float.10vp'), + right: $r('app.float.10vp'), + top: $r('app.float.5vp'), + bottom: $r('app.float.5vp') + }) + .margin({ right: $r('app.float.10vp') }) + } + + if (this.hasSuperChapterName) { + Text(this.superChapterName) + .height($r('app.float.23vp')) + .fontSize($r('app.float.12fp')) + .borderRadius($r('app.float.3vp')) + .textAlign(TextAlign.Center) + .fontColor($r('app.color.white')) + .backgroundColor($r('app.color.olive')) + .padding({ + left: $r('app.float.10vp'), + right: $r('app.float.10vp'), + top: $r('app.float.5vp'), + bottom: $r('app.float.5vp') + }) + .margin({ right: $r('app.float.10vp') }) + } + if (this.hasChapterName) { + Text(this.chapterName) + .height($r('app.float.23vp')) + .fontSize($r('app.float.12fp')) + .borderRadius($r('app.float.3vp')) + .textAlign(TextAlign.Center) + .fontColor($r('app.color.white')) + .backgroundColor($r('app.color.teal')) + .padding({ + left: $r('app.float.10vp'), + right: $r('app.float.10vp'), + top: $r('app.float.5vp'), + bottom: $r('app.float.5vp') + }) + .margin({ right: $r('app.float.10vp') }) + } + }.width(Constants.FULL_PERCENT).justifyContent(FlexAlign.Start).margin({ top: $r('app.float.5vp') }) + + } + //.height(160) + .width(Constants.FULL_PERCENT) + .padding({ + top: $r('app.float.5vp'), + bottom: $r('app.float.5vp'), + left: $r('app.float.10vp'), + right: $r('app.float.10vp') + }) + .borderWidth(0.5) + .borderColor(Color.Gray) + .backgroundColor('#FFF1F3F5') + } +} \ No newline at end of file diff --git a/entry/src/main/ets/viewmodel/HomeViewModel.ets b/entry/src/main/ets/viewmodel/HomeViewModel.ets index 6272b7b..d5d4e6a 100644 --- a/entry/src/main/ets/viewmodel/HomeViewModel.ets +++ b/entry/src/main/ets/viewmodel/HomeViewModel.ets @@ -5,19 +5,32 @@ import List from '@ohos.util.List'; import HttpConfig from '../api/HttpConfig'; import { articleListReq, articleTopReq, bannerReq } from '../api/HttpRequest'; import ResponseResult from '../api/ResponseResult'; -import { ArticleList, ArticleTop } from '../bean/ArticleBean'; +import { Article, ArticleList, ArticleTop } from '../bean/ArticleBean'; import { Banner } from '../bean/BannerBean'; import Logger from '../utils/Logger'; /** * @desc:HomePage对应数据处理类 */ class HomeViewModel { + // bannerData: List + // articleTopData: ArticleTop + // articleListData: ArticleList + + //首页-banner轮播图、置顶文章、文章三个接口 getHomeData() { return Promise.all([this.getBanner(), this.getArticleTop(), this.getArticle(0)]) + // .then(result => { + // //1-result[0]-Banner + // this.bannerData = result[0] + // //2-result[1]-置顶文章 + // this.articleTopData = result[1] + // //3-result[3] - 文章列表 + // this.articleListData = result[2] + // }) } //1-首页-Banner - getBanner(): Promise> { + getBanner(): Promise { return new Promise(async (resolve: Function, reject: Function) => { bannerReq().then((data: ResponseResult) => { if (data.errorCode === HttpConfig.SERVER_CODE_SUCCESS) { @@ -30,7 +43,7 @@ class HomeViewModel { }) } //2-首页-置顶 - getArticleTop(): Promise { + getArticleTop(): Promise { return new Promise(async (resolve: Function, reject: Function) => { articleTopReq().then((data: ResponseResult) => { if (data.errorCode === HttpConfig.SERVER_CODE_SUCCESS) { diff --git a/entry/src/main/resources/base/element/color.json b/entry/src/main/resources/base/element/color.json index 8f1cd27..512b2b9 100644 --- a/entry/src/main/resources/base/element/color.json +++ b/entry/src/main/resources/base/element/color.json @@ -19,6 +19,550 @@ { "name": "bottom_tabs_font_color", "value": "#000000" + }, + { + "name": "light_pink", + "value": "#FFB6C1" + }, + { + "name": "pink", + "value": "#FFC0CB" + }, + { + "name": "crimson", + "value": "#DC143C" + }, + { + "name": "lavender_blush", + "value": "#FF0F50" + }, + { + "name": "paleViolet_red", + "value": "#DB7093" + }, + { + "name": "hot_pink", + "value": "#FF69B4" + }, + { + "name": "deep_pink", + "value": "#FF1493" + }, + { + "name": "medium_violet_red", + "value": "#C71585" + }, + { + "name": "orchid", + "value": "#DA70D6" + }, + { + "name": "thistle", + "value": "#D8BFD8" + }, + { + "name": "plum", + "value": "#DDA0DD" + }, + { + "name": "violet", + "value": "#EE82EE" + }, + { + "name": "magenta", + "value": "#FF00FF" + }, + { + "name": "fuchsia", + "value": "#FF00FF" + }, + { + "name": "dark_magenta", + "value": "#8B008B" + }, + { + "name": "purple", + "value": "#800080" + }, + { + "name": "medium_orchid", + "value": "#BA55D3" + }, + { + "name": "dark_violet", + "value": "#9400D3" + }, + { + "name": "dark_orchid", + "value": "#9932CC" + }, + { + "name": "indigo", + "value": "#4B0082" + }, + { + "name": "blue_violet", + "value": "#8A2BE2" + }, + { + "name": "medium_purple", + "value": "#9370DB" + }, + { + "name": "medium_slate_blue", + "value": "#7B68EE" + }, + { + "name": "slate_blue", + "value": "#6A5ACD" + }, + { + "name": "dark_slate_blue", + "value": "#483D8B" + }, + { + "name": "lavender", + "value": "#E6E6FA" + }, + { + "name": "ghost_white", + "value": "#F8F8FF" + }, + { + "name": "blue", + "value": "#0000FF" + }, + { + "name": "indigo_blue", + "value": "#0000FF" + }, + { + "name": "medium_blue", + "value": "#0000CD" + }, + { + "name": "midnight_blue", + "value": "#191970" + }, + { + "name": "dark_blue", + "value": "#00008B" + }, + { + "name": "navy", + "value": "#000080" + }, + { + "name": "royal_blue", + "value": "#4169E1" + }, + { + "name": "cornflower_blue", + "value": "#6495ED" + }, + { + "name": "light_steel_blue", + "value": "#B0C4DE" + }, + { + "name": "light_slate_gray", + "value": "#778899" + }, + { + "name": "slate_gray", + "value": "#708090" + }, + { + "name": "dodger_blue", + "value": "#1E90FF" + }, + { + "name": "steel_blue", + "value": "#4682B4" + }, + { + "name": "light_sky_blue", + "value": "#87CEFA" + }, + { + "name": "sky_blue", + "value": "#87CEEB" + }, + { + "name": "deep_sky_blue", + "value": "#00BFFF" + }, + { + "name": "light_blue", + "value": "#ADD8E6" + }, + { + "name": "powder_blue", + "value": "#B0E0E6" + }, + { + "name": "cadet_blue", + "value": "#5F9EA0" + }, + { + "name": "azure", + "value": "#F0FFFF" + }, + { + "name": "light_cyan", + "value": "#E1FFFF" + }, + { + "name": "pale_turquoise", + "value": "#AFEEEE" + }, + { + "name": "cyan", + "value": "#00FFFF" + }, + { + "name": "aqua", + "value": "#00FFFF" + }, + { + "name": "dark_turquoise", + "value": "#00CED1" + }, + { + "name": "dark_slate_gray", + "value": "#2F4F4F" + }, + { + "name": "dark_cyan", + "value": "#008B8B" + }, + { + "name": "teal", + "value": "#008080" + }, + { + "name": "medium_turquoise", + "value": "#48D1CC" + }, + { + "name": "light_sea_green", + "value": "#20B2AA" + }, + { + "name": "turquoise", + "value": "#40E0D0" + }, + { + "name": "auqamarin", + "value": "#7FFFAA" + }, + { + "name": "medium_aquamarine", + "value": "#00FA9A" + }, + { + "name": "medium_spring_green", + "value": "#00FF7F" + }, + { + "name": "mint_cream", + "value": "#F5FFFA" + }, + { + "name": "spring_green", + "value": "#3CB371" + }, + { + "name": "sea_green", + "value": "#2E8B57" + }, + { + "name": "honeydew", + "value": "#F0FFF0" + }, + { + "name": "light_green", + "value": "#90EE90" + }, + { + "name": "pale_green", + "value": "#98FB98" + }, + { + "name": "dark_sea_green", + "value": "#8FBC8F" + }, + { + "name": "lime_green", + "value": "#32CD32" + }, + { + "name": "lime", + "value": "#00FF00" + }, + { + "name": "forest_green", + "value": "#228B22" + }, + { + "name": "green", + "value": "#008000" + }, + { + "name": "dark_green", + "value": "#006400" + }, + { + "name": "chartreuse", + "value": "#7FFF00" + }, + { + "name": "lawn_green", + "value": "#7CFC00" + }, + { + "name": "green_yellow", + "value": "#ADFF2F" + }, + { + "name": "olive_drab", + "value": "#556B2F" + }, + { + "name": "beige", + "value": "#F5F5DC" + }, + { + "name": "light_goldenrod_yellow", + "value": "#FAFAD2" + }, + { + "name": "ivory", + "value": "#FFFFF0" + }, + { + "name": "light_yellow", + "value": "#FFFFE0" + }, + { + "name": "yellow", + "value": "#FFFF00" + }, + { + "name": "olive", + "value": "#808000" + }, + { + "name": "dark_khaki", + "value": "#BDB76B" + }, + { + "name": "lemon_chiffon", + "value": "#FFFACD" + }, + { + "name": "pale_godenrod", + "value": "#EEE8AA" + }, + { + "name": "khaki", + "value": "#F0E68C" + }, + { + "name": "gold", + "value": "#FFD700" + }, + { + "name": "cornislk", + "value": "#FFF8DC" + }, + { + "name": "gold_enrod", + "value": "#DAA520" + }, + { + "name": "floral_white", + "value": "#FFFAF0" + }, + { + "name": "oldLace", + "value": "#FDF5E6" + }, + { + "name": "wheat", + "value": "#F5DEB3" + }, + { + "name": "moccasin", + "value": "#FFE4B5" + }, + { + "name": "orange", + "value": "#FFA500" + }, + { + "name": "papaya_whip", + "value": "#FFEFD5" + }, + { + "name": "blanched_almond", + "value": "#FFEBCD" + }, + { + "name": "navajo_white", + "value": "#FFDEAD" + }, + { + "name": "antique_white", + "value": "#FAEBD7" + }, + { + "name": "tan", + "value": "#D2B48C" + }, + { + "name": "bruly_wood", + "value": "#DEB887" + }, + { + "name": "bisque", + "value": "#FFE4C4" + }, + { + "name": "dark_orange", + "value": "#FF8C00" + }, + { + "name": "linen", + "value": "#FAF0E6" + }, + { + "name": "peru", + "value": "#CD853F" + }, + { + "name": "peach_puff", + "value": "#FFDAB9" + }, + { + "name": "sandy_brown", + "value": "#F4A460" + }, + { + "name": "chocolate", + "value": "#D2691E" + }, + { + "name": "saddle_brown", + "value": "#8B4513" + }, + { + "name": "sea_shell", + "value": "#FFF5EE" + }, + { + "name": "sienna", + "value": "#A0522D" + }, + { + "name": "light_salmon", + "value": "#FFA07A" + }, + { + "name": "coral", + "value": "#FF7F50" + }, + { + "name": "orange_red", + "value": "#FF4500" + }, + { + "name": "dark_salmon", + "value": "#E9967A" + }, + { + "name": "tomato", + "value": "#FF6347" + }, + { + "name": "misty_rose", + "value": "#FFE4E1" + }, + { + "name": "salmon", + "value": "#FA8072" + }, + { + "name": "snow", + "value": "#FFFAFA" + }, + { + "name": "light_coral", + "value": "#FFFAFA" + }, + { + "name": "rosy_brown", + "value": "#BC8F8F" + }, + { + "name": "indian_red", + "value": "#CD5C5C" + }, + { + "name": "red", + "value": "#FF0000" + }, + { + "name": "brown", + "value": "#A52A2A" + }, + { + "name": "fire_brick", + "value": "#B22222" + }, + { + "name": "dark_red", + "value": "#8B0000" + }, + { + "name": "maroon", + "value": "#800000" + }, + { + "name": "white", + "value": "#FFFFFF" + }, + { + "name": "white_smoke", + "value": "#F5F5F5" + }, + { + "name": "gainsboro", + "value": "#DCDCDC" + }, + { + "name": "light_gray", + "value": "#D3D3D3" + }, + { + "name": "silver", + "value": "#C0C0C0" + }, + { + "name": "dark_gray", + "value": "#A9A9A9" + }, + { + "name": "gray", + "value": "#808080" + }, + { + "name": "dim_gray", + "value": "#696969" + }, + { + "name": "black", + "value": "#000000" } ] } \ No newline at end of file diff --git a/entry/src/main/resources/base/element/float.json b/entry/src/main/resources/base/element/float.json index 94ca5b1..8d58f2b 100644 --- a/entry/src/main/resources/base/element/float.json +++ b/entry/src/main/resources/base/element/float.json @@ -5,20 +5,236 @@ "value": "10fp" }, { - "name": "5", - "value": "5vp" + "name": "font_size_24fp", + "value": "24fp" }, { - "name": "192", - "value": "192vp" + "name": "font_size_16fp", + "value": "16fp" }, { - "name": "font_size_24fp", - "value": "24fp" + "name": "1fp", + "value": "1fp" }, { - "name": "font_size_16fp", + "name": "2fp", + "value": "2fp" + }, + { + "name": "3fp", + "value": "3fp" + }, + { + "name": "4fp", + "value": "4fp" + }, + { + "name": "5fp", + "value": "5fp" + }, + { + "name": "6fp", + "value": "6fp" + }, + { + "name": "7fp", + "value": "7fp" + }, + { + "name": "8fp", + "value": "8fp" + }, + { + "name": "9fp", + "value": "9fp" + }, + { + "name": "10fp", + "value": "10fp" + }, + { + "name": "11fp", + "value": "11fp" + }, + { + "name": "12fp", + "value": "12fp" + }, + { + "name": "13fp", + "value": "13fp" + }, + { + "name": "14fp", + "value": "14fp" + }, + { + "name": "15fp", + "value": "15fp" + }, + { + "name": "16fp", "value": "16fp" + }, + { + "name": "17fp", + "value": "17fp" + }, + { + "name": "18fp", + "value": "18fp" + }, + { + "name": "19fp", + "value": "19fp" + }, + { + "name": "20fp", + "value": "20fp" + }, + { + "name": "1vp", + "value": "1vp" + }, + { + "name": "2vp", + "value": "2vp" + }, + { + "name": "3vp", + "value": "3vp" + }, + { + "name": "4vp", + "value": "4vp" + }, + { + "name": "5vp", + "value": "5vp" + }, + { + "name": "6vp", + "value": "6vp" + }, + { + "name": "7vp", + "value": "7vp" + }, + { + "name": "8vp", + "value": "8vp" + }, + { + "name": "9vp", + "value": "9vp" + }, + { + "name": "10vp", + "value": "10vp" + }, + { + "name": "11vp", + "value": "11vp" + }, + { + "name": "12vp", + "value": "12vp" + }, + { + "name": "13vp", + "value": "13vp" + }, + { + "name": "14vp", + "value": "14vp" + }, + { + "name": "15vp", + "value": "15vp" + }, + { + "name": "16vp", + "value": "16vp" + }, + { + "name": "17vp", + "value": "17vp" + }, + { + "name": "18vp", + "value": "18vp" + }, + { + "name": "19vp", + "value": "19vp" + }, + { + "name": "20vp", + "value": "20vp" + }, + { + "name": "21vp", + "value": "21vp" + }, + { + "name": "22vp", + "value": "22vp" + }, + { + "name": "23vp", + "value": "24vp" + }, + { + "name": "24vp", + "value": "24vp" + }, + { + "name": "25vp", + "value": "25vp" + }, + { + "name": "26vp", + "value": "26vp" + }, + { + "name": "27vp", + "value": "27vp" + }, + { + "name": "28vp", + "value": "28vp" + }, + { + "name": "29vp", + "value": "29vp" + }, + { + "name": "30vp", + "value": "30vp" + }, + { + "name": "50vp", + "value": "50vp" + }, + { + "name": "60vp", + "value": "60vp" + }, + { + "name": "70vp", + "value": "70vp" + }, + { + "name": "80vp", + "value": "80vp" + }, + { + "name": "140vp", + "value": "140vp" + }, + { + "name": "192vp", + "value": "192vp" } ] } \ No newline at end of file diff --git a/entry/src/main/resources/base/media/ic_clock.png b/entry/src/main/resources/base/media/ic_clock.png new file mode 100644 index 0000000..7edb2c1 Binary files /dev/null and b/entry/src/main/resources/base/media/ic_clock.png differ