committed by
GitHub
12 changed files with 557 additions and 4 deletions
|
After Width: | Height: | Size: 17 KiB |
@ -0,0 +1,93 @@ |
|||
<template> |
|||
<List :class="prefixCls"> |
|||
<Row :gutter="16"> |
|||
<template v-for="(item, index) in list" :key="index"> |
|||
<Col :span="6"> |
|||
<ListItem> |
|||
<Card :hoverable="true" :class="`${prefixCls}__card`"> |
|||
<div :class="`${prefixCls}__card-title`"> |
|||
<Icon class="icon" v-if="item.icon" :icon="item.icon" :color="item.color" /> |
|||
{{ item.title }} |
|||
</div> |
|||
<div :class="`${prefixCls}__card-num`"> |
|||
活跃用户:<span>{{ item.active }}</span> 万 |
|||
</div> |
|||
<div :class="`${prefixCls}__card-num`"> |
|||
新增用户:<span>{{ item.new }}</span> |
|||
</div> |
|||
<Icon |
|||
:class="`${prefixCls}__card-download`" |
|||
v-if="item.download" |
|||
:icon="item.download" |
|||
/> |
|||
</Card> |
|||
</ListItem> |
|||
</Col> |
|||
</template> |
|||
</Row> |
|||
</List> |
|||
</template> |
|||
<script lang="ts"> |
|||
import { defineComponent } from 'vue'; |
|||
import { List, Card, Row, Col } from 'ant-design-vue'; |
|||
import Icon from '/@/components/Icon/index'; |
|||
import { applicationList } from './data'; |
|||
|
|||
export default defineComponent({ |
|||
components: { |
|||
List, |
|||
ListItem: List.Item, |
|||
Card, |
|||
Row, |
|||
Col, |
|||
Icon, |
|||
}, |
|||
setup() { |
|||
return { |
|||
prefixCls: 'account-center-application', |
|||
list: applicationList, |
|||
}; |
|||
}, |
|||
}); |
|||
</script> |
|||
<style lang="less" scoped> |
|||
.account-center-application { |
|||
&__card { |
|||
width: 100%; |
|||
|
|||
/deep/ .ant-card-body { |
|||
padding: 16px; |
|||
} |
|||
|
|||
&-title { |
|||
margin-bottom: 5px; |
|||
font-size: 16px; |
|||
font-weight: 500; |
|||
color: rgba(0, 0, 0, 0.85); |
|||
|
|||
.icon { |
|||
margin-top: -5px; |
|||
font-size: 22px; |
|||
} |
|||
} |
|||
|
|||
&-num { |
|||
margin-left: 24px; |
|||
line-height: 36px; |
|||
color: #7d7a7a; |
|||
|
|||
span { |
|||
margin-left: 5px; |
|||
font-size: 18px; |
|||
color: #000; |
|||
} |
|||
} |
|||
|
|||
&-download { |
|||
float: right; |
|||
font-size: 20px !important; |
|||
color: #1890ff; |
|||
} |
|||
} |
|||
} |
|||
</style> |
|||
@ -0,0 +1,90 @@ |
|||
<template> |
|||
<List item-layout="vertical" :class="prefixCls"> |
|||
<template v-for="(item, index) in list" :key="index"> |
|||
<ListItem> |
|||
<ListItemMeta> |
|||
<template #description> |
|||
<div :class="`${prefixCls}__content`">{{ item.content }}</div> |
|||
</template> |
|||
<template #title> |
|||
<p :class="`${prefixCls}__title`"> {{ item.title }}</p> |
|||
<div> |
|||
<template v-for="(tag, index) in item.description" :key="index"> |
|||
<Tag class="mb-2">{{ tag }}</Tag> |
|||
</template> |
|||
</div> |
|||
</template> |
|||
</ListItemMeta> |
|||
<div> |
|||
<template v-for="(action, index) in actions" :key="index"> |
|||
<div :class="`${prefixCls}__action`"> |
|||
<Icon |
|||
v-if="action.icon" |
|||
:class="`${prefixCls}__action-icon`" |
|||
:icon="action.icon" |
|||
:color="action.color" |
|||
/> |
|||
{{ action.text }} |
|||
</div> |
|||
</template> |
|||
<span :class="`${prefixCls}__time`">{{ item.time }}</span> |
|||
</div> |
|||
</ListItem> |
|||
</template> |
|||
</List> |
|||
</template> |
|||
<script lang="ts"> |
|||
import { defineComponent } from 'vue'; |
|||
import { List, Tag } from 'ant-design-vue'; |
|||
import Icon from '/@/components/Icon/index'; |
|||
import { actions, articleList } from './data'; |
|||
|
|||
export default defineComponent({ |
|||
components: { |
|||
List, |
|||
ListItem: List.Item, |
|||
ListItemMeta: List.Item.Meta, |
|||
Tag, |
|||
Icon, |
|||
}, |
|||
setup() { |
|||
return { |
|||
prefixCls: 'account-center-article', |
|||
list: articleList, |
|||
actions, |
|||
}; |
|||
}, |
|||
}); |
|||
</script> |
|||
<style lang="less" scoped> |
|||
.account-center-article { |
|||
&__title { |
|||
margin-bottom: 12px; |
|||
font-size: 18px; |
|||
} |
|||
|
|||
&__content { |
|||
color: rgba(0, 0, 0, 0.65); |
|||
} |
|||
|
|||
&__action { |
|||
display: inline-block; |
|||
padding: 0 16px; |
|||
color: rgba(0, 0, 0, 0.45); |
|||
|
|||
&:not(:last-child) { |
|||
border-right: 1px solid rgba(206, 206, 206, 0.4); |
|||
} |
|||
|
|||
&-icon { |
|||
margin-right: 3px; |
|||
} |
|||
} |
|||
|
|||
&__time { |
|||
position: absolute; |
|||
right: 20px; |
|||
color: rgba(0, 0, 0, 0.45); |
|||
} |
|||
} |
|||
</style> |
|||
@ -0,0 +1,69 @@ |
|||
<template> |
|||
<List :class="prefixCls"> |
|||
<Row :gutter="16"> |
|||
<template v-for="(item, index) in list" :key="index"> |
|||
<Col :span="6"> |
|||
<ListItem> |
|||
<Card :hoverable="true" :class="`${prefixCls}__card`"> |
|||
<img :src="demoImg" /> |
|||
<div :class="`${prefixCls}__card-title`"> |
|||
{{ item.title }} |
|||
</div> |
|||
<div :class="`${prefixCls}__card-content`"> {{ item.content }}</div> |
|||
</Card> |
|||
</ListItem> |
|||
</Col> |
|||
</template> |
|||
</Row> |
|||
</List> |
|||
</template> |
|||
<script lang="ts"> |
|||
import { defineComponent } from 'vue'; |
|||
import { List, Card, Row, Col } from 'ant-design-vue'; |
|||
import demoImg from '/@/assets/images/demo.png'; |
|||
import { projectList } from './data'; |
|||
|
|||
export default defineComponent({ |
|||
components: { |
|||
List, |
|||
ListItem: List.Item, |
|||
Card, |
|||
Row, |
|||
Col, |
|||
}, |
|||
setup() { |
|||
return { |
|||
prefixCls: 'account-center-project', |
|||
list: projectList, |
|||
demoImg, |
|||
}; |
|||
}, |
|||
}); |
|||
</script> |
|||
<style lang="less" scoped> |
|||
.account-center-project { |
|||
&__card { |
|||
width: 100%; |
|||
|
|||
/deep/ .ant-card-body { |
|||
padding: 0 0 24px 0; |
|||
} |
|||
|
|||
img { |
|||
width: 100%; |
|||
height: 100px; |
|||
} |
|||
|
|||
&-title { |
|||
margin: 5px 10px; |
|||
font-size: 16px; |
|||
font-weight: 500; |
|||
color: rgba(0, 0, 0, 0.85); |
|||
} |
|||
|
|||
&-content { |
|||
margin: 5px 10px; |
|||
} |
|||
} |
|||
} |
|||
</style> |
|||
@ -0,0 +1,133 @@ |
|||
export interface ListItem { |
|||
title: string; |
|||
icon: string; |
|||
color?: string; |
|||
} |
|||
|
|||
export interface TabItem { |
|||
key: string; |
|||
name: string; |
|||
component: string; |
|||
} |
|||
|
|||
export const tags: string[] = [ |
|||
'很有想法的', |
|||
'专注设计', |
|||
'川妹子', |
|||
'大长腿', |
|||
'海纳百川', |
|||
'前端开发', |
|||
'vue3', |
|||
]; |
|||
|
|||
export const teams: ListItem[] = [ |
|||
{ |
|||
icon: 'ant-design:alipay-circle-outlined', |
|||
title: '科学搬砖组', |
|||
color: '#ff4000', |
|||
}, |
|||
{ |
|||
icon: 'emojione-monotone:letter-a', |
|||
title: '中二少年团', |
|||
color: '#7c51b8', |
|||
}, |
|||
{ |
|||
icon: 'ant-design:alipay-circle-outlined', |
|||
title: '高逼格设计', |
|||
color: '#00adf7', |
|||
}, |
|||
{ |
|||
icon: 'ant-design:codepen-circle-filled', |
|||
title: '程序员日常', |
|||
color: '#00adf7', |
|||
}, |
|||
{ |
|||
icon: 'ant-design:dribbble-circle-filled', |
|||
title: '科学搬砖组', |
|||
color: '#ff4000', |
|||
}, |
|||
{ |
|||
icon: 'ant-design:behance-square-filled', |
|||
title: '程序员日常', |
|||
color: '#7c51b8', |
|||
}, |
|||
]; |
|||
|
|||
export const details: ListItem[] = [ |
|||
{ |
|||
icon: 'ant-design:contacts-outlined', |
|||
title: '交互专家', |
|||
}, |
|||
{ |
|||
icon: 'ant-design:cluster-outlined', |
|||
title: '蚂蚁金服-某某某事业群', |
|||
}, |
|||
{ |
|||
icon: 'ant-design:home-outlined', |
|||
title: '福建省厦门市', |
|||
}, |
|||
]; |
|||
|
|||
export const achieveList: TabItem[] = [ |
|||
{ |
|||
key: '1', |
|||
name: '文章', |
|||
component: 'Article', |
|||
}, |
|||
{ |
|||
key: '2', |
|||
name: '应用', |
|||
component: 'Application', |
|||
}, |
|||
{ |
|||
key: '3', |
|||
name: '项目', |
|||
component: 'Project', |
|||
}, |
|||
]; |
|||
|
|||
export const actions: any[] = [ |
|||
{ icon: 'ant-design:star-outlined', text: '156', color: '#018ffb' }, |
|||
{ icon: 'ant-design:like-filled', text: '156', color: '#459ae8' }, |
|||
{ icon: 'ant-design:message-filled', text: '2', color: '#42d27d' }, |
|||
]; |
|||
|
|||
export const articleList = (() => { |
|||
const result: any[] = []; |
|||
for (let i = 0; i < 4; i++) { |
|||
result.push({ |
|||
title: 'Ant Design', |
|||
description: ['Ant Design', '设计语言', '蚂蚁金服'], |
|||
content: |
|||
'段落示意:蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案', |
|||
time: '2020-11-14 11:20', |
|||
}); |
|||
} |
|||
return result; |
|||
})(); |
|||
|
|||
export const applicationList = (() => { |
|||
const result: any[] = []; |
|||
for (let i = 0; i < 8; i++) { |
|||
result.push({ |
|||
title: 'Ant Design', |
|||
icon: 'emojione-monotone:letter-a', |
|||
color: '#7c51b8', |
|||
active: '100', |
|||
new: '1,799', |
|||
download: 'bx:bx-download', |
|||
}); |
|||
} |
|||
return result; |
|||
})(); |
|||
|
|||
export const projectList = (() => { |
|||
const result: any[] = []; |
|||
for (let i = 0; i < 8; i++) { |
|||
result.push({ |
|||
title: 'Angular', |
|||
content: '那是一种内在的东西, 他们到达不了,', |
|||
}); |
|||
} |
|||
return result; |
|||
})(); |
|||
@ -0,0 +1,149 @@ |
|||
<template> |
|||
<div :class="prefixCls"> |
|||
<Row :class="`${prefixCls}-top`"> |
|||
<Col :span="9" :class="`${prefixCls}-col`"> |
|||
<Row> |
|||
<Col :span="8"> |
|||
<div :class="`${prefixCls}-top__avatar`"> |
|||
<img width="70" :src="headerImg" /> |
|||
<span>Serati Ma</span> |
|||
<div>海纳百川,有容乃大</div> |
|||
</div> |
|||
</Col> |
|||
<Col :span="16"> |
|||
<div :class="`${prefixCls}-top__detail`"> |
|||
<template v-for="(detail, index) in details" :key="index"> |
|||
<p> |
|||
<Icon :icon="detail.icon" /> |
|||
{{ detail.title }} |
|||
</p> |
|||
</template> |
|||
</div> |
|||
</Col> |
|||
</Row> |
|||
</Col> |
|||
<Col :span="7" :class="`${prefixCls}-col`"> |
|||
<CollapseContainer title="标签" :canExpan="false"> |
|||
<template v-for="(tag, index) in tags" :key="index"> |
|||
<Tag class="mb-2">{{ tag }}</Tag> |
|||
</template> |
|||
</CollapseContainer> |
|||
</Col> |
|||
<Col :span="8" :class="`${prefixCls}-col`"> |
|||
<CollapseContainer :class="`${prefixCls}-top__team`" title="团队" :canExpan="false"> |
|||
<div v-for="(team, index) in teams" :key="index" :class="`${prefixCls}-top__team-item`"> |
|||
<Icon :icon="team.icon" :color="team.color" /> |
|||
<span>{{ team.title }}</span> |
|||
</div> |
|||
</CollapseContainer> |
|||
</Col> |
|||
</Row> |
|||
<div :class="`${prefixCls}-bottom`"> |
|||
<Tabs> |
|||
<template v-for="item in achieveList" :key="item.key"> |
|||
<TabPane :tab="item.name"> |
|||
<component :is="item.component" /> |
|||
</TabPane> |
|||
</template> |
|||
</Tabs> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script lang="ts"> |
|||
import { Row, Col, Tag, Tabs } from 'ant-design-vue'; |
|||
import { defineComponent } from 'vue'; |
|||
import { CollapseContainer } from '/@/components/Container/index'; |
|||
import Icon from '/@/components/Icon/index'; |
|||
import Article from './Article.vue'; |
|||
import Application from './Application.vue'; |
|||
import Project from './Project.vue'; |
|||
|
|||
import headerImg from '/@/assets/images/header.jpg'; |
|||
import { tags, teams, details, achieveList } from './data'; |
|||
|
|||
export default defineComponent({ |
|||
components: { |
|||
CollapseContainer, |
|||
Icon, |
|||
Row, |
|||
Col, |
|||
Tag, |
|||
Tabs, |
|||
TabPane: Tabs.TabPane, |
|||
Article, |
|||
Application, |
|||
Project, |
|||
}, |
|||
setup() { |
|||
return { |
|||
prefixCls: 'account-center', |
|||
headerImg, |
|||
tags, |
|||
teams, |
|||
details, |
|||
achieveList, |
|||
}; |
|||
}, |
|||
}); |
|||
</script> |
|||
<style lang="less" scoped> |
|||
.account-center { |
|||
&-col:not(:last-child) { |
|||
padding: 0 10px; |
|||
|
|||
&:not(:last-child) { |
|||
border-right: 1px dashed rgb(206, 206, 206, 0.5); |
|||
} |
|||
} |
|||
|
|||
&-top { |
|||
padding: 10px; |
|||
margin: 16px 16px 12px 16px; |
|||
background: #fff; |
|||
border-radius: 3px; |
|||
|
|||
&__avatar { |
|||
text-align: center; |
|||
|
|||
img { |
|||
border-radius: 50%; |
|||
} |
|||
|
|||
span { |
|||
display: block; |
|||
font-size: 20px; |
|||
font-weight: 500; |
|||
} |
|||
|
|||
div { |
|||
margin-top: 3px; |
|||
font-size: 12px; |
|||
} |
|||
} |
|||
|
|||
&__detail { |
|||
padding-left: 20px; |
|||
margin-top: 15px; |
|||
} |
|||
|
|||
&__team { |
|||
&-item { |
|||
display: inline-block; |
|||
padding: 4px 18px; |
|||
} |
|||
|
|||
span { |
|||
margin-left: 3px; |
|||
} |
|||
} |
|||
} |
|||
|
|||
&-bottom { |
|||
padding: 10px; |
|||
margin: 0 16px 16px 16px; |
|||
background: #fff; |
|||
border-radius: 3px; |
|||
} |
|||
} |
|||
</style> |
|||
Loading…
Reference in new issue