add: 新建对话和切换对话功能
This commit is contained in:
		
							
								
								
									
										12
									
								
								Frontend/Models/Chat.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								Frontend/Models/Chat.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,12 @@
 | 
				
			|||||||
 | 
					namespace Frontend.Models;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class Chat
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    public Guid Guid { get; } = Guid.NewGuid();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public string Title { get; set; } = string.Empty;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    public bool Selected { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public List<ChatMessage> Messages { get; } = new();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -1,16 +1,97 @@
 | 
				
			|||||||
@page "/"
 | 
					@page "/"
 | 
				
			||||||
 | 
					@using Frontend.Models
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<Layout>
 | 
					<Layout>
 | 
				
			||||||
    <Sider Width="200">
 | 
					    <Sider Width="200" Theme="SiderTheme.Light">
 | 
				
			||||||
 | 
					        <div class="chat-control-zone">
 | 
				
			||||||
 | 
					            <div>
 | 
				
			||||||
 | 
					                <Button Type="@ButtonType.Primary" Size="large" @onclick="@CreateChatClicked">
 | 
				
			||||||
 | 
					                    新建对话
 | 
				
			||||||
 | 
					                </Button>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                <div class="chat-list">
 | 
				
			||||||
 | 
					                    <AntList TItem="@Chat" DataSource="@_chatDictionary.Values"
 | 
				
			||||||
 | 
					                             Split="@false">
 | 
				
			||||||
 | 
					                        <ListItem OnClick="@(() => ChangeChatClicked(context.Guid))">
 | 
				
			||||||
 | 
					                            <ListItemMeta>
 | 
				
			||||||
 | 
					                                <TitleTemplate>
 | 
				
			||||||
 | 
					                                    @if (@context.Selected)
 | 
				
			||||||
 | 
					                                    {
 | 
				
			||||||
 | 
					                                        <div class="selected-chat-name">
 | 
				
			||||||
 | 
					                                            <p style="margin: 5px">@context.Title</p>
 | 
				
			||||||
 | 
					                                        </div>
 | 
				
			||||||
 | 
					                                    }
 | 
				
			||||||
 | 
					                                    else
 | 
				
			||||||
 | 
					                                    {
 | 
				
			||||||
 | 
					                                        <div class="chat-name">
 | 
				
			||||||
 | 
					                                            <p style="margin: 5px">@context.Title</p>
 | 
				
			||||||
 | 
					                                        </div>
 | 
				
			||||||
 | 
					                                    }
 | 
				
			||||||
 | 
					                                </TitleTemplate>
 | 
				
			||||||
 | 
					                            </ListItemMeta>
 | 
				
			||||||
 | 
					                        </ListItem>
 | 
				
			||||||
 | 
					                    </AntList>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
    </Sider>
 | 
					    </Sider>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <Content>
 | 
					    <Content>
 | 
				
			||||||
        <Chat />
 | 
					        <ChatZone Messages="@_chatDictionary[_currentGuid].Messages"/>
 | 
				
			||||||
    </Content>
 | 
					    </Content>
 | 
				
			||||||
</Layout>
 | 
					</Layout>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@code {
 | 
					@code {
 | 
				
			||||||
 | 
					    private readonly Dictionary<Guid, Chat> _chatDictionary = new();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private Guid _currentGuid;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    protected override void OnInitialized()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        var chat = new Chat
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Title = $"对话:{_chatDictionary.Count + 1}"
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        chat.Messages.Add(new ChatMessage
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Sender = "凯瑟琳",
 | 
				
			||||||
 | 
					            Left = true,
 | 
				
			||||||
 | 
					            Text = "向着星辰和深渊!欢迎来到冒险家协会。"
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					        chat.Selected = true;
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        _chatDictionary.Add(chat.Guid, chat);
 | 
				
			||||||
 | 
					        _currentGuid = chat.Guid;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private void CreateChatClicked()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        var chat = new Chat
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Title = $"对话:{_chatDictionary.Count + 1}"
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        chat.Messages.Add(new ChatMessage
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Sender = "凯瑟琳",
 | 
				
			||||||
 | 
					            Left = true,
 | 
				
			||||||
 | 
					            Text = "向着星辰和深渊!欢迎来到冒险家协会。"
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        _chatDictionary.Add(chat.Guid, chat);
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        // 切换到新建的对话
 | 
				
			||||||
 | 
					        _chatDictionary[_currentGuid].Selected = false;
 | 
				
			||||||
 | 
					        _currentGuid = chat.Guid;
 | 
				
			||||||
 | 
					        _chatDictionary[_currentGuid].Selected = true;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private void ChangeChatClicked(Guid guid)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        _chatDictionary[_currentGuid].Selected = false;
 | 
				
			||||||
 | 
					        _currentGuid = guid;
 | 
				
			||||||
 | 
					        _chatDictionary[_currentGuid].Selected = true;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,27 @@
 | 
				
			|||||||
 | 
					.chat-control-zone {
 | 
				
			||||||
 | 
					    margin-top: 20px;
 | 
				
			||||||
 | 
					    display: flex;
 | 
				
			||||||
 | 
					    justify-content: center;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.selected-chat-name {
 | 
				
			||||||
 | 
					    display: flex;
 | 
				
			||||||
 | 
					    justify-content: center;
 | 
				
			||||||
 | 
					    margin: 5px 5px 5px;
 | 
				
			||||||
 | 
					    padding: 5px 0 5px;
 | 
				
			||||||
 | 
					    border-radius: 5px;
 | 
				
			||||||
 | 
					    background-color: #bcc9e2;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.chat-name {
 | 
				
			||||||
 | 
					    display: flex;
 | 
				
			||||||
 | 
					    justify-content: center;
 | 
				
			||||||
 | 
					    margin: 5px 5px 5px;
 | 
				
			||||||
 | 
					    padding: 5px 0 5px;
 | 
				
			||||||
 | 
					    border-radius: 5px;
 | 
				
			||||||
 | 
					    background-color: #5d92e4;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.chat-list {
 | 
				
			||||||
 | 
					    overflow-y: auto;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -10,7 +10,7 @@
 | 
				
			|||||||
      "commandName": "Project",
 | 
					      "commandName": "Project",
 | 
				
			||||||
      "dotnetRunMessages": true,
 | 
					      "dotnetRunMessages": true,
 | 
				
			||||||
      "launchBrowser": false,
 | 
					      "launchBrowser": false,
 | 
				
			||||||
      "applicationUrl": "http://localhost:5136",
 | 
					      "applicationUrl": "http://localhost:5163",
 | 
				
			||||||
      "environmentVariables": {
 | 
					      "environmentVariables": {
 | 
				
			||||||
        "ASPNETCORE_ENVIRONMENT": "Development"
 | 
					        "ASPNETCORE_ENVIRONMENT": "Development"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,7 +2,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
<div class="content-zone">
 | 
					<div class="content-zone">
 | 
				
			||||||
    <div class="chat-zone">
 | 
					    <div class="chat-zone">
 | 
				
			||||||
        <AntList TItem="ChatMessage" DataSource="@_messages" Split="@false">
 | 
					        <AntList TItem="ChatMessage" DataSource="@Messages" Split="@false">
 | 
				
			||||||
            <ListItem>
 | 
					            <ListItem>
 | 
				
			||||||
                @if (context.Left)
 | 
					                @if (context.Left)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
@@ -46,21 +46,8 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    private string MessageSending { get; set; } = string.Empty;
 | 
					    private string MessageSending { get; set; } = string.Empty;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private readonly List<ChatMessage> _messages = new()
 | 
					    [Parameter]
 | 
				
			||||||
    {
 | 
					    public List<ChatMessage> Messages { get; set; } = null!;
 | 
				
			||||||
        new ChatMessage
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            Sender = "凯瑟琳",
 | 
					 | 
				
			||||||
            Text = "向着星辰和深渊!",
 | 
					 | 
				
			||||||
            Left = true
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        new ChatMessage
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            Sender = "凯瑟琳",
 | 
					 | 
				
			||||||
            Text = "欢迎来到冒险家协会。",
 | 
					 | 
				
			||||||
            Left = true
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private void SendMessageClicked()
 | 
					    private void SendMessageClicked()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
@@ -69,7 +56,7 @@
 | 
				
			|||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        _messages.Add(new ChatMessage
 | 
					        Messages.Add(new ChatMessage
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            Left = false,
 | 
					            Left = false,
 | 
				
			||||||
            Sender = "旅行者",
 | 
					            Sender = "旅行者",
 | 
				
			||||||
@@ -78,7 +65,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        MessageSending = string.Empty;
 | 
					        MessageSending = string.Empty;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        _messages.Add(new ChatMessage
 | 
					        Messages.Add(new ChatMessage
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            Left = true,
 | 
					            Left = true,
 | 
				
			||||||
            Sender = "凯瑟琳",
 | 
					            Sender = "凯瑟琳",
 | 
				
			||||||
@@ -6,7 +6,7 @@
 | 
				
			|||||||
            <Space >
 | 
					            <Space >
 | 
				
			||||||
                <SpaceItem>
 | 
					                <SpaceItem>
 | 
				
			||||||
                    <p class="title-text">
 | 
					                    <p class="title-text">
 | 
				
			||||||
                        自律型可重编程客服机器人
 | 
					                        试作自律型可重编程客服机器人
 | 
				
			||||||
                    </p>
 | 
					                    </p>
 | 
				
			||||||
                </SpaceItem>
 | 
					                </SpaceItem>
 | 
				
			||||||
                
 | 
					                
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user