u
This commit is contained in:
@@ -109,131 +109,3 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@code {
|
||||
private UserNode? _currentUser;
|
||||
private bool _isExpanded;
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
await LoadCurrentUser();
|
||||
}
|
||||
|
||||
private async Task LoadCurrentUser()
|
||||
{
|
||||
// Mock data - replace with actual API call
|
||||
_currentUser = new UserNode
|
||||
{
|
||||
Id = 1,
|
||||
FirstName = "علی",
|
||||
LastName = "رضایی",
|
||||
Avatar = "images/avatar1.jpg",
|
||||
PersonalPurchase = 2500000,
|
||||
TeamPurchase = 15000000,
|
||||
Children = new List<UserNode>
|
||||
{
|
||||
new UserNode
|
||||
{
|
||||
Id = 2,
|
||||
FirstName = "مریم",
|
||||
LastName = "احمدی",
|
||||
Avatar = "images/avatar2.jpg",
|
||||
PersonalPurchase = 1800000,
|
||||
TeamPurchase = 8500000,
|
||||
Children = new List<UserNode>
|
||||
{
|
||||
new UserNode
|
||||
{
|
||||
Id = 5,
|
||||
FirstName = "سارا",
|
||||
LastName = "کریمی",
|
||||
PersonalPurchase = 1200000,
|
||||
TeamPurchase = 3200000
|
||||
},
|
||||
new UserNode
|
||||
{
|
||||
Id = 6,
|
||||
FirstName = "امیر",
|
||||
LastName = "حسینی",
|
||||
PersonalPurchase = 950000,
|
||||
TeamPurchase = 1800000
|
||||
}
|
||||
}
|
||||
},
|
||||
new UserNode
|
||||
{
|
||||
Id = 3,
|
||||
FirstName = "حسن",
|
||||
LastName = "کریمی",
|
||||
Avatar = "images/avatar3.jpg",
|
||||
PersonalPurchase = 2200000,
|
||||
TeamPurchase = 9200000,
|
||||
Children = new List<UserNode>
|
||||
{
|
||||
new UserNode
|
||||
{
|
||||
Id = 7,
|
||||
FirstName = "فاطمه",
|
||||
LastName = "رضایی",
|
||||
PersonalPurchase = 1350000,
|
||||
TeamPurchase = 4100000
|
||||
}
|
||||
}
|
||||
},
|
||||
new UserNode
|
||||
{
|
||||
Id = 4,
|
||||
FirstName = "زهرا",
|
||||
LastName = "محمدی",
|
||||
Avatar = "images/avatar4.jpg",
|
||||
PersonalPurchase = 1950000,
|
||||
TeamPurchase = 7800000
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
private void ToggleExpand()
|
||||
{
|
||||
_isExpanded = !_isExpanded;
|
||||
StateHasChanged();
|
||||
}
|
||||
|
||||
private void ToggleChildExpand(long userId)
|
||||
{
|
||||
var child = FindChild(_currentUser, userId);
|
||||
if (child != null)
|
||||
{
|
||||
child.IsExpanded = !child.IsExpanded;
|
||||
StateHasChanged();
|
||||
}
|
||||
}
|
||||
|
||||
private UserNode? FindChild(UserNode? node, long userId)
|
||||
{
|
||||
if (node == null) return null;
|
||||
if (node.Id == userId) return node;
|
||||
|
||||
if (node.Children != null)
|
||||
{
|
||||
foreach (var child in node.Children)
|
||||
{
|
||||
var found = FindChild(child, userId);
|
||||
if (found != null) return found;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public class UserNode
|
||||
{
|
||||
public long Id { get; set; }
|
||||
public string? FirstName { get; set; }
|
||||
public string? LastName { get; set; }
|
||||
public string? Avatar { get; set; }
|
||||
public long? PersonalPurchase { get; set; }
|
||||
public long? TeamPurchase { get; set; }
|
||||
public List<UserNode>? Children { get; set; }
|
||||
public bool IsExpanded { get; set; }
|
||||
}
|
||||
}
|
||||
130
src/FrontOffice.Main/Shared/OrganizationChart.razor.cs
Normal file
130
src/FrontOffice.Main/Shared/OrganizationChart.razor.cs
Normal file
@@ -0,0 +1,130 @@
|
||||
namespace FrontOffice.Main.Shared;
|
||||
public partial class OrganizationChart
|
||||
{
|
||||
private UserNode? _currentUser;
|
||||
private bool _isExpanded;
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
await LoadCurrentUser();
|
||||
}
|
||||
|
||||
private async Task LoadCurrentUser()
|
||||
{
|
||||
// Mock data - replace with actual API call
|
||||
_currentUser = new UserNode
|
||||
{
|
||||
Id = 1,
|
||||
FirstName = "علی",
|
||||
LastName = "رضایی",
|
||||
Avatar = "images/avatar1.jpg",
|
||||
PersonalPurchase = 2500000,
|
||||
TeamPurchase = 15000000,
|
||||
Children = new List<UserNode>
|
||||
{
|
||||
new UserNode
|
||||
{
|
||||
Id = 2,
|
||||
FirstName = "مریم",
|
||||
LastName = "احمدی",
|
||||
Avatar = "images/avatar2.jpg",
|
||||
PersonalPurchase = 1800000,
|
||||
TeamPurchase = 8500000,
|
||||
Children = new List<UserNode>
|
||||
{
|
||||
new UserNode
|
||||
{
|
||||
Id = 5,
|
||||
FirstName = "سارا",
|
||||
LastName = "کریمی",
|
||||
PersonalPurchase = 1200000,
|
||||
TeamPurchase = 3200000
|
||||
},
|
||||
new UserNode
|
||||
{
|
||||
Id = 6,
|
||||
FirstName = "امیر",
|
||||
LastName = "حسینی",
|
||||
PersonalPurchase = 950000,
|
||||
TeamPurchase = 1800000
|
||||
}
|
||||
}
|
||||
},
|
||||
new UserNode
|
||||
{
|
||||
Id = 3,
|
||||
FirstName = "حسن",
|
||||
LastName = "کریمی",
|
||||
Avatar = "images/avatar3.jpg",
|
||||
PersonalPurchase = 2200000,
|
||||
TeamPurchase = 9200000,
|
||||
Children = new List<UserNode>
|
||||
{
|
||||
new UserNode
|
||||
{
|
||||
Id = 7,
|
||||
FirstName = "فاطمه",
|
||||
LastName = "رضایی",
|
||||
PersonalPurchase = 1350000,
|
||||
TeamPurchase = 4100000
|
||||
}
|
||||
}
|
||||
},
|
||||
new UserNode
|
||||
{
|
||||
Id = 4,
|
||||
FirstName = "زهرا",
|
||||
LastName = "محمدی",
|
||||
Avatar = "images/avatar4.jpg",
|
||||
PersonalPurchase = 1950000,
|
||||
TeamPurchase = 7800000
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
private void ToggleExpand()
|
||||
{
|
||||
_isExpanded = !_isExpanded;
|
||||
StateHasChanged();
|
||||
}
|
||||
|
||||
private void ToggleChildExpand(long userId)
|
||||
{
|
||||
var child = FindChild(_currentUser, userId);
|
||||
if (child != null)
|
||||
{
|
||||
child.IsExpanded = !child.IsExpanded;
|
||||
StateHasChanged();
|
||||
}
|
||||
}
|
||||
|
||||
private UserNode? FindChild(UserNode? node, long userId)
|
||||
{
|
||||
if (node == null) return null;
|
||||
if (node.Id == userId) return node;
|
||||
|
||||
if (node.Children != null)
|
||||
{
|
||||
foreach (var child in node.Children)
|
||||
{
|
||||
var found = FindChild(child, userId);
|
||||
if (found != null) return found;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public class UserNode
|
||||
{
|
||||
public long Id { get; set; }
|
||||
public string? FirstName { get; set; }
|
||||
public string? LastName { get; set; }
|
||||
public string? Avatar { get; set; }
|
||||
public long? PersonalPurchase { get; set; }
|
||||
public long? TeamPurchase { get; set; }
|
||||
public List<UserNode>? Children { get; set; }
|
||||
public bool IsExpanded { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -134,7 +134,7 @@
|
||||
.org-level::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: -20px;
|
||||
top: -40px;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
width: 2px;
|
||||
@@ -142,6 +142,17 @@
|
||||
background: #ddd;
|
||||
}
|
||||
|
||||
.org-level::after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: -20px;
|
||||
left: 0;
|
||||
right: 0;
|
||||
height: 2px;
|
||||
background: #ddd;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.org-sublevel {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
@@ -161,6 +172,17 @@
|
||||
background: #ddd;
|
||||
}
|
||||
|
||||
.org-sublevel::after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
height: 2px;
|
||||
background: #ddd;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
/* Responsive adjustments */
|
||||
@media (max-width: 768px) {
|
||||
.org-chart-container {
|
||||
|
||||
Reference in New Issue
Block a user