avatar and fix rate
parent
fe8f34de37
commit
e7289f61e9
|
@ -0,0 +1,102 @@
|
||||||
|
<template>
|
||||||
|
<span :class="classes" :style="style">
|
||||||
|
<img v-if="src" :src="src"/>
|
||||||
|
<icon v-else-if="icon" :type="icon" />
|
||||||
|
<span
|
||||||
|
v-else
|
||||||
|
ref="avatorChildren"
|
||||||
|
:class="[prefixCls+'-string']"
|
||||||
|
:style="childrenStyle">
|
||||||
|
<slot></slot>
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import Icon from '../icon/index'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'Avatar',
|
||||||
|
props: {
|
||||||
|
prefixCls: {
|
||||||
|
type: String,
|
||||||
|
default: 'ant-avatar',
|
||||||
|
},
|
||||||
|
shape: {
|
||||||
|
validator (val) {
|
||||||
|
return ['circle', 'square'].includes(val)
|
||||||
|
},
|
||||||
|
default: 'circle',
|
||||||
|
},
|
||||||
|
size: {
|
||||||
|
validator (val) {
|
||||||
|
return ['small', 'large', 'default'].includes(val)
|
||||||
|
},
|
||||||
|
default: 'default',
|
||||||
|
},
|
||||||
|
src: String,
|
||||||
|
icon: String,
|
||||||
|
style: {
|
||||||
|
type: Object,
|
||||||
|
default: {},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
data () {
|
||||||
|
return {
|
||||||
|
isExitSlot: false,
|
||||||
|
scale: 1,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
classes () {
|
||||||
|
const { prefixCls, shape, size, src, icon } = this
|
||||||
|
return {
|
||||||
|
[`${prefixCls}`]: true,
|
||||||
|
[`${prefixCls}-${shape}`]: true,
|
||||||
|
[`${prefixCls}-lg`]: size === 'large',
|
||||||
|
[`${prefixCls}-sm`]: size === 'small',
|
||||||
|
[`${prefixCls}-image`]: !!src,
|
||||||
|
[`${prefixCls}-icon`]: !!icon,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
childrenStyle () {
|
||||||
|
const children = this.$refs.avatorChildren
|
||||||
|
let style = {}
|
||||||
|
if (this.isExitSlot) {
|
||||||
|
style = {
|
||||||
|
msTransform: `scale(${this.scale})`,
|
||||||
|
WebkitTransform: `scale(${this.scale})`,
|
||||||
|
transform: `scale(${this.scale})`,
|
||||||
|
position: 'absolute',
|
||||||
|
display: 'inline-block',
|
||||||
|
left: `calc(50% - ${Math.round(children.offsetWidth / 2)}px)`,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return style
|
||||||
|
},
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
setScale () {
|
||||||
|
this.isExitSlot = !this.src && !this.icon
|
||||||
|
const children = this.$refs.avatorChildren
|
||||||
|
if (children) {
|
||||||
|
const childrenWidth = children.offsetWidth
|
||||||
|
const avatarWidth = this.$el.getBoundingClientRect().width
|
||||||
|
if (avatarWidth - 8 < childrenWidth) {
|
||||||
|
this.scale = (avatarWidth - 8) / childrenWidth
|
||||||
|
} else {
|
||||||
|
this.scale = 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
mounted () {
|
||||||
|
this.setScale()
|
||||||
|
},
|
||||||
|
updated () {
|
||||||
|
this.setScale()
|
||||||
|
},
|
||||||
|
components: {
|
||||||
|
Icon,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
</script>
|
|
@ -0,0 +1,46 @@
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<div>
|
||||||
|
<avatar size="large" icon="user"/>
|
||||||
|
<avatar icon="user"/>
|
||||||
|
<avatar size="small" icon="user"/>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<avatar shape="square" size="large" icon="user" />
|
||||||
|
<avatar shape="square" icon="user" />
|
||||||
|
<avatar shape="square" size="small" icon="user" />
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<avatar icon="user" />
|
||||||
|
<avatar>U</avatar>
|
||||||
|
<avatar>USER</avatar>
|
||||||
|
<avatar src="https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png" />
|
||||||
|
<avatar :style="{ color: '#f56a00', backgroundColor: '#fde3cf' }">U</avatar>
|
||||||
|
<avatar :style="{ backgroundColor: '#87d068' }" icon="user" />
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<avatar shape="square" size="large">{{avatarValue}}</avatar>
|
||||||
|
<AntButton @click="changeValue">改变</AntButton>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import '../style'
|
||||||
|
import { Avatar, Button } from 'antd/index'
|
||||||
|
export default {
|
||||||
|
data () {
|
||||||
|
return {
|
||||||
|
avatarValue: 'current',
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
changeValue () {
|
||||||
|
this.avatarValue = 'changed'
|
||||||
|
},
|
||||||
|
},
|
||||||
|
components: {
|
||||||
|
Avatar,
|
||||||
|
AntButton: Button,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
</script>
|
|
@ -0,0 +1,3 @@
|
||||||
|
import Avatar from './Avatar'
|
||||||
|
|
||||||
|
export default Avatar
|
|
@ -0,0 +1,2 @@
|
||||||
|
import '../../style/index.less'
|
||||||
|
import './index.less'
|
|
@ -0,0 +1,48 @@
|
||||||
|
@import "../../style/themes/default";
|
||||||
|
|
||||||
|
@avatar-prefix-cls: ~"@{ant-prefix}-avatar";
|
||||||
|
|
||||||
|
.@{avatar-prefix-cls} {
|
||||||
|
display: inline-block;
|
||||||
|
text-align: center;
|
||||||
|
background: @avatar-bg;
|
||||||
|
color: @avatar-color;
|
||||||
|
white-space: nowrap;
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
|
.avatar-size(@avatar-size-base, @avatar-font-size-base);
|
||||||
|
|
||||||
|
&-lg {
|
||||||
|
.avatar-size(@avatar-size-lg, @avatar-font-size-lg);
|
||||||
|
}
|
||||||
|
|
||||||
|
&-sm {
|
||||||
|
.avatar-size(@avatar-size-sm, @avatar-font-size-sm);
|
||||||
|
}
|
||||||
|
|
||||||
|
&-square {
|
||||||
|
border-radius: @avatar-border-radius;
|
||||||
|
}
|
||||||
|
|
||||||
|
& > img {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.avatar-size(@size, @font-size) {
|
||||||
|
width: @size;
|
||||||
|
height: @size;
|
||||||
|
line-height: @size;
|
||||||
|
border-radius: @size / 2;
|
||||||
|
|
||||||
|
& > * {
|
||||||
|
line-height: @size;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.@{avatar-prefix-cls}-icon {
|
||||||
|
font-size: @font-size;
|
||||||
|
}
|
||||||
|
}
|
|
@ -19,3 +19,5 @@ export { default as Row } from './grid/Row'
|
||||||
export { default as Col } from './grid/Col'
|
export { default as Col } from './grid/Col'
|
||||||
|
|
||||||
export { default as Tag } from './tag'
|
export { default as Tag } from './tag'
|
||||||
|
|
||||||
|
export { default as Avatar } from './avatar'
|
||||||
|
|
|
@ -61,7 +61,7 @@ export default {
|
||||||
const { value, defaultValue } = this
|
const { value, defaultValue } = this
|
||||||
const reValue = value === undefined ? defaultValue : value
|
const reValue = value === undefined ? defaultValue : value
|
||||||
return {
|
return {
|
||||||
hoverValue: reValue,
|
hoverValue: undefined,
|
||||||
stateValue: reValue,
|
stateValue: reValue,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
@ -56,7 +56,7 @@ export default {
|
||||||
this.hoverValueAH = val
|
this.hoverValueAH = val
|
||||||
},
|
},
|
||||||
changeValue () {
|
changeValue () {
|
||||||
this.initValue = undefined
|
this.initValue = 4
|
||||||
},
|
},
|
||||||
getValue () {
|
getValue () {
|
||||||
console.log(this.initValue)
|
console.log(this.initValue)
|
|
@ -1,2 +1,2 @@
|
||||||
import '../../style/index.less';
|
import '../../style/index.less'
|
||||||
import './index.less';
|
import './index.less'
|
||||||
|
|
|
@ -4,3 +4,6 @@ import './radio/style'
|
||||||
import './checkbox/style'
|
import './checkbox/style'
|
||||||
import './grid/style'
|
import './grid/style'
|
||||||
import './tag/style'
|
import './tag/style'
|
||||||
|
import './rate/style'
|
||||||
|
import './pagination/style'
|
||||||
|
import './avatar/style'
|
||||||
|
|
Loading…
Reference in New Issue