改用 EAvatar
This commit is contained in:
parent
57f2064449
commit
aba5206b5c
2
resources/assets/js/app.js
vendored
2
resources/assets/js/app.js
vendored
@ -30,11 +30,13 @@ Vue.component('TableAction', TableAction);
|
|||||||
Vue.component('UserAvatar', UserAvatar);
|
Vue.component('UserAvatar', UserAvatar);
|
||||||
|
|
||||||
import {
|
import {
|
||||||
|
Avatar,
|
||||||
Tooltip,
|
Tooltip,
|
||||||
Dropdown,
|
Dropdown,
|
||||||
DropdownMenu,
|
DropdownMenu,
|
||||||
DropdownItem,
|
DropdownItem,
|
||||||
} from 'element-ui';
|
} from 'element-ui';
|
||||||
|
Vue.component('EAvatar', Avatar);
|
||||||
Vue.component('ETooltip', Tooltip);
|
Vue.component('ETooltip', Tooltip);
|
||||||
Vue.component('EDropdown', Dropdown);
|
Vue.component('EDropdown', Dropdown);
|
||||||
Vue.component('EDropdownMenu', DropdownMenu);
|
Vue.component('EDropdownMenu', DropdownMenu);
|
||||||
|
@ -14,8 +14,8 @@
|
|||||||
<div class="avatar-wrapper">
|
<div class="avatar-wrapper">
|
||||||
<div :class="['avatar-box', userId === userid || user.online ? 'online' : '']" :style="boxStyle">
|
<div :class="['avatar-box', userId === userid || user.online ? 'online' : '']" :style="boxStyle">
|
||||||
<em :style="spotStyle"></em>
|
<em :style="spotStyle"></em>
|
||||||
<WAvatar v-if="showImg" :src="user.userimg" :size="avatarSize"/>
|
<EAvatar v-if="showImg" :src="user.userimg" :size="avatarSize"/>
|
||||||
<WAvatar v-else :size="avatarSize" class="avatar-text">{{nickname}}</WAvatar>
|
<EAvatar v-else :size="avatarSize" class="avatar-text">{{nickname}}</EAvatar>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="showName" class="avatar-name">{{user.nickname}}</div>
|
<div v-if="showName" class="avatar-name">{{user.nickname}}</div>
|
||||||
</div>
|
</div>
|
||||||
@ -23,11 +23,9 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import WAvatar from "./WAvatar";
|
|
||||||
import {mapState} from "vuex";
|
import {mapState} from "vuex";
|
||||||
export default {
|
export default {
|
||||||
name: 'UserAvatar',
|
name: 'UserAvatar',
|
||||||
components: {WAvatar},
|
|
||||||
props: {
|
props: {
|
||||||
userid: {
|
userid: {
|
||||||
type: [String, Number],
|
type: [String, Number],
|
||||||
|
@ -25,7 +25,7 @@
|
|||||||
:avatar="item.userimg"
|
:avatar="item.userimg"
|
||||||
:disabled="isDisabled(item.userid)">
|
:disabled="isDisabled(item.userid)">
|
||||||
<div class="user-input-option">
|
<div class="user-input-option">
|
||||||
<div class="user-input-avatar"><WAvatar :src="item.userimg"/></div>
|
<div class="user-input-avatar"><EAvatar class="avatar" :src="item.userimg"/></div>
|
||||||
<div class="user-input-nickname">{{ item.nickname }}</div>
|
<div class="user-input-nickname">{{ item.nickname }}</div>
|
||||||
<div class="user-input-userid">ID: {{ item.userid }}</div>
|
<div class="user-input-userid">ID: {{ item.userid }}</div>
|
||||||
</div>
|
</div>
|
||||||
@ -36,10 +36,8 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import WAvatar from "./WAvatar";
|
|
||||||
export default {
|
export default {
|
||||||
name: 'UserInput',
|
name: 'UserInput',
|
||||||
components: {WAvatar},
|
|
||||||
props: {
|
props: {
|
||||||
value: {
|
value: {
|
||||||
type: [String, Number, Array],
|
type: [String, Number, Array],
|
||||||
|
@ -1,125 +0,0 @@
|
|||||||
<template>
|
|
||||||
<span :class="classes" :style="styles">
|
|
||||||
<img :src="src" v-if="src" @error="handleError">
|
|
||||||
<Icon :type="icon" :custom="customIcon" v-else-if="icon || customIcon"></Icon>
|
|
||||||
<span ref="children" :class="[prefixCls + '-string']" :style="childrenStyle" v-else><slot></slot></span>
|
|
||||||
</span>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import Icon from 'view-design-hi/src/components/icon';
|
|
||||||
import { oneOf } from 'view-design-hi/src/utils/assist';
|
|
||||||
|
|
||||||
const prefixCls = 'ivu-avatar';
|
|
||||||
|
|
||||||
const sizeList = ['small', 'large', 'default'];
|
|
||||||
|
|
||||||
export default {
|
|
||||||
name: 'WAvatar',
|
|
||||||
components: { Icon },
|
|
||||||
props: {
|
|
||||||
shape: {
|
|
||||||
validator (value) {
|
|
||||||
return oneOf(value, ['circle', 'square']);
|
|
||||||
},
|
|
||||||
default: 'circle'
|
|
||||||
},
|
|
||||||
size: {
|
|
||||||
type: [String, Number],
|
|
||||||
default () {
|
|
||||||
return !this.$IVIEW || this.$IVIEW.size === '' ? 'default' : this.$IVIEW.size;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
src: {
|
|
||||||
type: String
|
|
||||||
},
|
|
||||||
icon: {
|
|
||||||
type: String
|
|
||||||
},
|
|
||||||
customIcon: {
|
|
||||||
type: String,
|
|
||||||
default: ''
|
|
||||||
},
|
|
||||||
},
|
|
||||||
data () {
|
|
||||||
return {
|
|
||||||
prefixCls: prefixCls,
|
|
||||||
scale: 1,
|
|
||||||
childrenWidth: 0,
|
|
||||||
isSlotShow: false,
|
|
||||||
slotTemp: null
|
|
||||||
};
|
|
||||||
},
|
|
||||||
computed: {
|
|
||||||
classes () {
|
|
||||||
return [
|
|
||||||
`${prefixCls}`,
|
|
||||||
`${prefixCls}-${this.shape}`,
|
|
||||||
{
|
|
||||||
[`${prefixCls}-image`]: !!this.src,
|
|
||||||
[`${prefixCls}-icon`]: !!this.icon || !!this.customIcon,
|
|
||||||
[`${prefixCls}-${this.size}`]: oneOf(this.size, sizeList)
|
|
||||||
}
|
|
||||||
];
|
|
||||||
},
|
|
||||||
styles () {
|
|
||||||
let style = {};
|
|
||||||
if (this.size && !oneOf(this.size, sizeList)) {
|
|
||||||
style.width = `${this.size}px`;
|
|
||||||
style.height = `${this.size}px`;
|
|
||||||
style.lineHeight = `${this.size}px`;
|
|
||||||
style.fontSize = `${this.size/2}px`;
|
|
||||||
}
|
|
||||||
return style;
|
|
||||||
},
|
|
||||||
childrenStyle () {
|
|
||||||
let style = {};
|
|
||||||
if (this.isSlotShow) {
|
|
||||||
style = {
|
|
||||||
msTransform: `scale(${this.scale})`,
|
|
||||||
WebkitTransform: `scale(${this.scale})`,
|
|
||||||
transform: `scale(${this.scale})`,
|
|
||||||
display: 'inline-block',
|
|
||||||
};
|
|
||||||
}
|
|
||||||
return style;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
watch: {
|
|
||||||
size (val, oldVal) {
|
|
||||||
if (val !== oldVal) this.setScale();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
setScale () {
|
|
||||||
this.isSlotShow = !this.src && !this.icon;
|
|
||||||
if (this.$refs.children) {
|
|
||||||
// set children width again to make slot centered
|
|
||||||
this.childrenWidth = this.$refs.children.offsetWidth;
|
|
||||||
const avatarWidth = this.$el.getBoundingClientRect().width;
|
|
||||||
// add 4px gap for each side to get better performance
|
|
||||||
if (avatarWidth - 8 < this.childrenWidth) {
|
|
||||||
this.scale = (avatarWidth - 8) / this.childrenWidth;
|
|
||||||
} else {
|
|
||||||
this.scale = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
handleError (e) {
|
|
||||||
this.$emit('on-error', e);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
beforeCreate () {
|
|
||||||
this.slotTemp = this.$slots.default;
|
|
||||||
},
|
|
||||||
mounted () {
|
|
||||||
this.setScale();
|
|
||||||
},
|
|
||||||
updated () {
|
|
||||||
if (this.$slots.default !== this.slotTemp) {
|
|
||||||
this.slotTemp = this.$slots.default;
|
|
||||||
this.setScale();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
</script>
|
|
@ -333,13 +333,14 @@
|
|||||||
<Poptip
|
<Poptip
|
||||||
confirm
|
confirm
|
||||||
placement="bottom"
|
placement="bottom"
|
||||||
|
style="margin-left:8px"
|
||||||
@on-ok="onUser"
|
@on-ok="onUser"
|
||||||
transfer>
|
transfer>
|
||||||
<div slot="title">
|
<div slot="title">
|
||||||
<p><strong>{{$L('移除成员负责的任务将变成无负责人,')}}</strong></p>
|
<p><strong>{{$L('移除成员负责的任务将变成无负责人,')}}</strong></p>
|
||||||
<p>{{$L('注意此操作不可逆!')}}</p>
|
<p>{{$L('注意此操作不可逆!')}}</p>
|
||||||
</div>
|
</div>
|
||||||
<Button type="primary" :loading="userLoad > 0" style="margin-left:8px">{{$L('保存')}}</Button>
|
<Button type="primary" :loading="userLoad > 0">{{$L('保存')}}</Button>
|
||||||
</Poptip>
|
</Poptip>
|
||||||
</div>
|
</div>
|
||||||
</Modal>
|
</Modal>
|
||||||
|
@ -6,6 +6,8 @@
|
|||||||
.avatar-box {
|
.avatar-box {
|
||||||
position: relative;
|
position: relative;
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
.avatar-text {
|
.avatar-text {
|
||||||
background-color: $primary-color;
|
background-color: $primary-color;
|
||||||
}
|
}
|
||||||
@ -13,8 +15,8 @@
|
|||||||
position: absolute;
|
position: absolute;
|
||||||
right: 0;
|
right: 0;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
width: 9px;
|
width: 8px;
|
||||||
height: 9px;
|
height: 8px;
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
background-color: #ff0000;
|
background-color: #ff0000;
|
||||||
border: 1px solid #ffffff;
|
border: 1px solid #ffffff;
|
||||||
|
@ -27,7 +27,9 @@
|
|||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
.user-input-avatar {
|
.user-input-avatar {
|
||||||
.ivu-avatar {
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
.avatar {
|
||||||
width: 26px;
|
width: 26px;
|
||||||
height: 26px;
|
height: 26px;
|
||||||
}
|
}
|
||||||
|
1
resources/assets/sass/element.scss
vendored
1
resources/assets/sass/element.scss
vendored
@ -6,6 +6,7 @@ $--dropdown-menuItem-hover-fill: #f4f5f7;
|
|||||||
$--dropdown-menuItem-hover-color: #606266;
|
$--dropdown-menuItem-hover-color: #606266;
|
||||||
|
|
||||||
@import "~element-ui/packages/theme-chalk/src/common/transition";
|
@import "~element-ui/packages/theme-chalk/src/common/transition";
|
||||||
|
@import "~element-ui/packages/theme-chalk/src/avatar";
|
||||||
@import "~element-ui/packages/theme-chalk/src/tooltip";
|
@import "~element-ui/packages/theme-chalk/src/tooltip";
|
||||||
@import "~element-ui/packages/theme-chalk/src/dropdown";
|
@import "~element-ui/packages/theme-chalk/src/dropdown";
|
||||||
@import "~element-ui/packages/theme-chalk/src/dropdown-menu";
|
@import "~element-ui/packages/theme-chalk/src/dropdown-menu";
|
||||||
|
Loading…
x
Reference in New Issue
Block a user