feat(dashboard): fix logout flow and redesign executive dashboard with real live data, charts and feeds
deploy-chabokan / deploy (push) Canceled after 0s

This commit is contained in:
2026-08-30 09:29:26 +03:30
parent b0980f1448
commit 9ec5e22138
9 changed files with 909 additions and 123 deletions
@@ -0,0 +1,82 @@
<script setup>
import { useRouter } from 'vue-router';
const router = useRouter();
const actions = [
{
title: 'ثبت ملک جدید',
description: 'افزودن زمین، ساختمان یا آپارتمان',
icon: 'pi pi-file-plus',
color: 'bg-blue-500 text-white',
bgSoft: 'bg-blue-50 dark:bg-blue-950/30 border-blue-200 dark:border-blue-800',
route: '/property/create-property'
},
{
title: 'ثبت تراکنش انبار',
description: 'ثبت ورود یا خروج مصالح و اقلام',
icon: 'pi pi-plus-circle',
color: 'bg-emerald-500 text-white',
bgSoft: 'bg-emerald-50 dark:bg-emerald-950/30 border-emerald-200 dark:border-emerald-800',
route: '/warehouse-items/create-transaction'
},
{
title: 'فهرست املاک',
description: 'جستجو، فیلتر و مدیریت اسناد',
icon: 'pi pi-list',
color: 'bg-purple-500 text-white',
bgSoft: 'bg-purple-50 dark:bg-purple-950/30 border-purple-200 dark:border-purple-800',
route: '/property/list-properties'
},
{
title: 'اقلام و موجودی انبار',
description: 'مشاهده کاردکس و موجودی انبارها',
icon: 'pi pi-box',
color: 'bg-amber-500 text-white',
bgSoft: 'bg-amber-50 dark:bg-amber-950/30 border-amber-200 dark:border-amber-800',
route: '/warehouse-items/list'
}
];
function navigate(route) {
if (route) {
router.push(route);
}
}
</script>
<template>
<div class="card p-5 border border-surface-200 dark:border-surface-800 rounded-2xl bg-surface-0 dark:bg-surface-900">
<div class="flex justify-between items-center mb-4">
<div>
<h3 class="font-bold text-lg text-surface-900 dark:text-surface-0 mb-1">دسترسی و عملیات سریع</h3>
<p class="text-xs text-muted-color">میانبرهای پرکاربرد برای تسهیل امور مدیریت و ثبت</p>
</div>
<div class="flex items-center gap-1.5 text-xs text-emerald-600 dark:text-emerald-400 bg-emerald-50 dark:bg-emerald-950/40 px-2.5 py-1 rounded-full font-medium">
<span class="w-2 h-2 rounded-full bg-emerald-500 animate-pulse"></span>
سیستم آنلاین
</div>
</div>
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-3">
<div
v-for="item in actions"
:key="item.title"
@click="navigate(item.route)"
class="p-4 rounded-xl border transition-all duration-200 cursor-pointer hover:shadow-md flex items-center gap-3.5 group bg-surface-0 dark:bg-surface-850 hover:border-primary-400 dark:hover:border-primary-600"
>
<div :class="['w-11 h-11 rounded-xl flex items-center justify-center shrink-0 shadow-sm transition-transform group-hover:scale-110', item.color]">
<i :class="[item.icon, 'text-lg']"></i>
</div>
<div class="truncate">
<h4 class="font-semibold text-sm text-surface-900 dark:text-surface-100 group-hover:text-primary transition-colors">
{{ item.title }}
</h4>
<p class="text-[11px] text-muted-color truncate mt-0.5">
{{ item.description }}
</p>
</div>
</div>
</div>
</div>
</template>