| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 | <template>	<div v-if="isUser">		<main-header />		<div class="container">			<img class="avatar" src="/assets/notes.png" />			<h2 class="has-text-centered username">@{{ user.username }}</h2>			<h5>A member since {{ user.createdAt }}</h5>			<div				v-if="					$parent.role === 'admin' && !($parent.userId === user._id)				"				class="admin-functionality"			>				<a					v-if="user.role == 'default'"					class="button is-small is-info is-outlined"					@click="changeRank('admin')"					>Promote to Admin</a				>				<a					v-if="user.role == 'admin'"					class="button is-small is-danger is-outlined"					@click="changeRank('default')"					>Demote to User</a				>			</div>			<nav class="level">				<div class="level-item has-text-centered">					<p class="heading">						Rank					</p>					<p class="title role">						{{ user.role }}					</p>				</div>				<div class="level-item has-text-centered">					<p class="heading">						Songs Requested					</p>					<p class="title">						{{ user.statistics.songsRequested }}					</p>				</div>				<div class="level-item has-text-centered">					<p class="heading">						Likes					</p>					<p class="title">						{{ user.liked.length }}					</p>				</div>				<div class="level-item has-text-centered">					<p class="heading">						Dislikes					</p>					<p class="title">						{{ user.disliked.length }}					</p>				</div>			</nav>		</div>		<main-footer />	</div></template><script>import { Toast } from "vue-roaster";import MainHeader from "../MainHeader.vue";import MainFooter from "../MainFooter.vue";import io from "../../io";export default {	components: { MainHeader, MainFooter },	data() {		return {			user: {},			isUser: false		};	},	mounted: function() {		let _this = this;		io.getSocket(socket => {			_this.socket = socket;			_this.socket.emit(				"users.findByUsername",				_this.$route.params.username,				res => {					if (res.status == "error") this.$router.go("/404");					else {						_this.user = res.data;						this.user.createdAt = moment(							this.user.createdAt						).format("LL");						_this.isUser = true;					}				}			);		});	},	methods: {		changeRank(newRank) {			this.socket.emit(				"users.updateRole",				this.user._id,				newRank == "admin" ? "admin" : "default",				res => {					if (res.status == "error")						Toast.methods.addToast(res.message, 2000);					else this.user.role = newRank;					Toast.methods.addToast(						`User ${							this.$route.params.username						}'s rank has been changed to: ${newRank}`,						2000					);				}			);		}	}};</script><style lang="scss" scoped>.container {	padding: 25px;}.avatar {	border-radius: 50%;	width: 250px;	display: block;	margin: auto;}h5 {	text-align: center;	margin-bottom: 25px;	font-size: 17px;}.role {	text-transform: capitalize;}.level {	margin-top: 40px;}.admin-functionality {	text-align: center;	margin: 0 auto;}@media (max-width: 350px) {	.username {		font-size: 2.9rem;		word-wrap: break-all;	}}</style>
 |