|
|
@@ -0,0 +1,84 @@
|
|
|
+<template>
|
|
|
+ <div class="partner-card column items-center q-pa-md">
|
|
|
+ <div class="partner-avatar flex flex-center q-mb-md">
|
|
|
+ <img
|
|
|
+ v-if="partner.avatarUrl"
|
|
|
+ :src="partner.avatarUrl"
|
|
|
+ class="avatar-img"
|
|
|
+ />
|
|
|
+ <span v-else class="avatar-initials text-white text-weight-bold">
|
|
|
+ {{ initials }}
|
|
|
+ </span>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class="full-width column q-gutter-sm">
|
|
|
+ <DefaultInput
|
|
|
+ :model-value="partner.social_name"
|
|
|
+ label="Nome social"
|
|
|
+ outlined
|
|
|
+ disable
|
|
|
+ bg-color="suface"
|
|
|
+ />
|
|
|
+
|
|
|
+ <DefaultInput
|
|
|
+ :model-value="partner.role"
|
|
|
+ label="Função"
|
|
|
+ outlined
|
|
|
+ disable
|
|
|
+ bg-color="suface"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script setup>
|
|
|
+import { computed } from "vue";
|
|
|
+import DefaultInput from "../defaults/DefaultInput.vue";
|
|
|
+
|
|
|
+const { partner } = defineProps({
|
|
|
+ partner: {
|
|
|
+ type: Object,
|
|
|
+ default: () => ({
|
|
|
+ social_name: null,
|
|
|
+ role: null,
|
|
|
+ avatarUrl: null,
|
|
|
+ color: "#ff8340",
|
|
|
+ }),
|
|
|
+ },
|
|
|
+});
|
|
|
+
|
|
|
+const initials = computed(() => {
|
|
|
+ if (!partner.social_name) return "";
|
|
|
+ return partner.social_name
|
|
|
+ .split(" ")
|
|
|
+ .slice(0, 2)
|
|
|
+ .map((w) => w[0]?.toUpperCase())
|
|
|
+ .join("");
|
|
|
+});
|
|
|
+</script>
|
|
|
+
|
|
|
+<style scoped>
|
|
|
+.partner-card {
|
|
|
+ border: 1px solid #e0e0e0;
|
|
|
+ border-radius: 10px;
|
|
|
+}
|
|
|
+
|
|
|
+.partner-avatar {
|
|
|
+ width: 80px;
|
|
|
+ height: 80px;
|
|
|
+ border-radius: 50%;
|
|
|
+ background-color: v-bind("partner.color || '#ff8340'");
|
|
|
+ overflow: hidden;
|
|
|
+ flex-shrink: 0;
|
|
|
+}
|
|
|
+
|
|
|
+.avatar-img {
|
|
|
+ width: 100%;
|
|
|
+ height: 100%;
|
|
|
+ object-fit: cover;
|
|
|
+}
|
|
|
+
|
|
|
+.avatar-initials {
|
|
|
+ font-size: 28px;
|
|
|
+}
|
|
|
+</style>
|