<template>
    <div class="user-view-inline">
        <Tooltip
            :disabled="loadIng"
            :delay="delay"
            :transfer="transfer"
            :placement="placement"
            maxWidth="auto"
            @on-popper-show="getUserData(30)">
            <div class="user-view-info">
                <UserImg v-if="showimg" class="user-view-img" :info="userInfo" :style="imgStyle"/>
                <div v-if="showname" class="user-view-name">{{nickname || username}}</div>
            </div>
            <div slot="content" style="white-space:normal">
                <div v-if="!showname">{{$L('昵称')}}: {{nickname || '-'}}</div>
                <div>{{$L('用户名')}}: {{username}}</div>
                <div>{{$L('职位/职称')}}: {{profession || '-'}}</div>
            </div>
        </Tooltip>
    </div>
</template>

<style lang="scss">
    .user-view-inline {
        .ivu-tooltip {
            max-width: 100%;
            display: flex;
            flex-direction: column;
            justify-content: center;
            .ivu-tooltip-rel {
                max-width: 100%;
                white-space: nowrap;
                overflow: hidden;
                text-overflow: ellipsis;
                .user-view-info {
                    .user-view-img {
                        .usertext-container-text {
                            transform: scale(0.86);
                        }
                    }
                }
            }
        }
    }
</style>
<style lang="scss" scoped>
    .user-view-inline {
        display: inline-block;
        max-width: 100%;
        .user-view-info {
            display: flex;
            align-items: center;
            .user-view-img {
                width: 16px;
                height: 16px;
                font-size: 12px;
                line-height: 16px;
                border-radius: 50%;
                margin-right: 3px;
            }
            .user-view-title {
                flex: 1;
                line-height: 1.2;
            }
        }
    }
</style>

<script>
    export default {
        name: 'UserView',
        props: {
            username: {
                default: ''
            },
            delay: {
                type: Number,
                default: 600
            },
            transfer: {
                type: Boolean,
                default: true
            },
            placement: {
                default: 'bottom'
            },
            showimg: {
                type: Boolean,
                default: false
            },
            imgsize: {

            },
            imgfontsize: {

            },
            showname: {
                type: Boolean,
                default: true
            },
            info: {
                default: null
            },
        },
        data() {
            return {
                loadIng: true,

                nickname: null,
                userimg: '',
                profession: ''
            }
        },
        mounted() {
            this.getUserData(300);
        },
        watch: {
            username() {
                this.getUserData(300);
            },
            info: {
                handler() {
                    this.upInfo()
                },
                deep: true
            }
        },
        computed: {
            userInfo() {
                const {username, nickname, userimg} = this;
                return {username, nickname, userimg}
            },
            imgStyle() {
                const {imgsize, imgfontsize} = this;
                const myStyle = {};
                if (imgsize) {
                    const size = /^\d+$/.test(imgsize) ? (imgsize + 'px') : imgsize;
                    myStyle.width = size;
                    myStyle.height = size;
                    myStyle.lineHeight = size;
                }
                if (imgfontsize) {
                    myStyle.fontSize = /^\d+$/.test(imgfontsize) ? (imgfontsize + 'px') : imgfontsize;
                }
                return myStyle;
            }
        },
        methods: {
            isJson(obj) {
                return typeof (obj) == "object" && Object.prototype.toString.call(obj).toLowerCase() == "[object object]" && typeof obj.length == "undefined";
            },

            upInfo() {
                if (this.isJson(this.info)) {
                    this.$set(this.info, 'nickname', this.nickname);
                    this.$set(this.info, 'userimg', this.userimg);
                }
            },

            getUserData(cacheTime) {
                $A.getUserBasic(this.username, (data, success) => {
                    if (success) {
                        this.nickname = data.nickname;
                        this.userimg = data.userimg;
                        this.profession = data.profession;
                    } else {
                        this.nickname = '';
                        this.userimg = '';
                        this.profession = '';
                    }
                    this.loadIng = false;
                    this.$emit("on-result", data);
                    this.upInfo();
                }, cacheTime);
            }
        }
    }
</script>