Login Layout

This commit is contained in:
Sedat Öztürk 2025-05-28 21:30:08 +03:00
parent 9671116426
commit 3bf7d70dea
13 changed files with 3994 additions and 69 deletions

View file

@ -44,7 +44,7 @@ public static class LanguagesDbContextModelCreatingExtensions
b.Property(a => a.CultureName).HasMaxLength(10).IsRequired(); b.Property(a => a.CultureName).HasMaxLength(10).IsRequired();
b.Property(a => a.ResourceName).HasMaxLength(50); b.Property(a => a.ResourceName).HasMaxLength(50);
b.Property(a => a.Key).HasMaxLength(100); b.Property(a => a.Key).HasMaxLength(100);
b.Property(a => a.Value).HasMaxLength(250).IsRequired(); b.Property(a => a.Value).HasMaxLength(1000).IsRequired();
}); });
} }
} }

View file

@ -4255,6 +4255,18 @@
"en": "Blank", "en": "Blank",
"tr": "Boş" "tr": "Boş"
}, },
{
"resourceName": "Platform",
"key": "LoginPanel.Profil",
"en": "Founder",
"tr": "Kurucu"
},
{
"resourceName": "Platform",
"key": "LoginPanel.Message",
"en": "From interactive desktop applications to immersive web and mobile solutions, from AI-powered systems to data-driven decision-making mechanisms, we are here to provide intelligent solutions to your needs today and ensure your sustainable success in the future.",
"tr": "Etkileşimli masaüstü uygulamalarından sürükleyici web ve mobil çözümlere, yapay zekâ destekli sistemlerden veri odaklı karar mekanizmalarına kadar, bugünkü ihtiyaçlarınıza akıllı çözümler sunmak ve gelecekte de sürdürülebilir başarınızı garanti altına almak için buradayız."
},
{ {
"resourceName": "Platform", "resourceName": "Platform",
"key": "AI.Welcome", "key": "AI.Welcome",

View file

@ -1,15 +0,0 @@
using System;
using System.Text.Json;
using Volo.Abp.Domain.Entities;
namespace Kurs.Platform.Entities;
public class LogEntry: Entity<Guid>
{
public DateTime Timestamp { get; set; }
public string Level { get; set; }
public string Message { get; set; }
public string? MessageTemplate { get; set; }
public string? Exception { get; set; }
public JsonDocument? Properties { get; set; }
}

View file

@ -39,7 +39,6 @@ public class PlatformDbContext :
public DbSet<PublicApi> PublicApis { get; set; } public DbSet<PublicApi> PublicApis { get; set; }
public DbSet<GlobalSearch> GlobalSearchs { get; set; } public DbSet<GlobalSearch> GlobalSearchs { get; set; }
public DbSet<AiBot> AiBots { get; set; } public DbSet<AiBot> AiBots { get; set; }
public DbSet<LogEntry> LogEntrys { get; set; }
#region Entities from the modules #region Entities from the modules
@ -206,11 +205,5 @@ public class PlatformDbContext :
b.ToTable(PlatformConsts.DbTablePrefix + nameof(AiBot), PlatformConsts.DbSchema); b.ToTable(PlatformConsts.DbTablePrefix + nameof(AiBot), PlatformConsts.DbSchema);
b.ConfigureByConvention(); b.ConfigureByConvention();
}); });
builder.Entity<LogEntry>(b =>
{
b.ToTable(PlatformConsts.DbTablePrefix + nameof(LogEntry), PlatformConsts.DbSchema);
b.ConfigureByConvention();
});
} }
} }

View file

@ -0,0 +1,42 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace Kurs.Platform.Migrations
{
/// <inheritdoc />
public partial class UpdateLanguageTextValueLength : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AlterColumn<string>(
name: "Value",
table: "PLanguageText",
type: "character varying(1000)",
maxLength: 1000,
nullable: false,
collation: "tr-x-icu",
oldClrType: typeof(string),
oldType: "character varying(250)",
oldMaxLength: 250,
oldCollation: "tr-x-icu");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.AlterColumn<string>(
name: "Value",
table: "PLanguageText",
type: "character varying(250)",
maxLength: 250,
nullable: false,
collation: "tr-x-icu",
oldClrType: typeof(string),
oldType: "character varying(1000)",
oldMaxLength: 1000,
oldCollation: "tr-x-icu");
}
}
}

View file

@ -198,8 +198,8 @@ namespace Kurs.Platform.Migrations
b.Property<string>("Value") b.Property<string>("Value")
.IsRequired() .IsRequired()
.HasMaxLength(250) .HasMaxLength(1000)
.HasColumnType("character varying(250)") .HasColumnType("character varying(1000)")
.UseCollation("tr-x-icu"); .UseCollation("tr-x-icu");
b.HasKey("Id"); b.HasKey("Id");

View file

@ -82,7 +82,7 @@ define(['./workbox-54d0af47'], (function (workbox) { 'use strict';
"revision": "3ca0b8505b4bec776b69afdba2768812" "revision": "3ca0b8505b4bec776b69afdba2768812"
}, { }, {
"url": "index.html", "url": "index.html",
"revision": "0.i5lc19up29o" "revision": "0.8b8tnlffsvo"
}], {}); }], {});
workbox.cleanupOutdatedCaches(); workbox.cleanupOutdatedCaches();
workbox.registerRoute(new workbox.NavigationRoute(workbox.createHandlerBoundToURL("index.html"), { workbox.registerRoute(new workbox.NavigationRoute(workbox.createHandlerBoundToURL("index.html"), {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 71 KiB

View file

@ -1,6 +1,6 @@
import Side from './Side' //import Side from './Side'
// import Cover from './Cover' //import Cover from './Cover'
// import Simple from './Simple' import Simple from './Simple'
import View from '@/views' import View from '@/views'
import { useStoreState } from '@/store' import { useStoreState } from '@/store'
import { LAYOUT_TYPE_BLANK } from '@/constants/theme.constant' import { LAYOUT_TYPE_BLANK } from '@/constants/theme.constant'
@ -13,9 +13,9 @@ const AuthLayout = () => {
{layoutType === LAYOUT_TYPE_BLANK ? ( {layoutType === LAYOUT_TYPE_BLANK ? (
<View /> <View />
) : ( ) : (
<Side> <Simple>
<View /> <View />
</Side> </Simple>
)} )}
</div> </div>
) )

View file

@ -3,46 +3,55 @@ import Logo from '@/components/template/Logo'
import { APP_NAME } from '@/constants/app.constant' import { APP_NAME } from '@/constants/app.constant'
import type { CommonProps } from '@/@types/common' import type { CommonProps } from '@/@types/common'
import type { ReactNode, ReactElement } from 'react' import type { ReactNode, ReactElement } from 'react'
import { Avatar } from '@/components/ui'
import { useLocalization } from '@/utils/hooks/useLocalization'
interface CoverProps extends CommonProps { interface CoverProps extends CommonProps {
content?: ReactNode content?: ReactNode
} }
const Cover = ({ children, content, ...rest }: CoverProps) => { const Cover = ({ children, content, ...rest }: CoverProps) => {
const { translate } = useLocalization()
return ( return (
<div className="grid lg:grid-cols-3 h-full"> <div className="grid lg:grid-cols-3 h-full">
<div <div
className="col-span-2 bg-no-repeat bg-cover py-6 px-16 flex-col justify-between bg-white dark:bg-gray-800 hidden lg:flex" className="col-span-2 bg-no-repeat bg-cover py-6 px-16 flex-col justify-between dark:bg-gray-800 hidden lg:flex relative"
style={{ style={{
backgroundImage: `url('/img/others/auth-cover-bg.jpg')`, backgroundImage: `url('/img/others/auth-cover-bg.jpg')`,
}} }}
> >
{/* Koyulaştırıcı katman */}
<div className="absolute inset-0 bg-black bg-opacity-50 z-0"></div>
<div className="relative z-10 flex flex-col h-full justify-between">
<Logo mode="dark" /> <Logo mode="dark" />
<div> <div>
<h3 className="text-white mb-4"> <div className="mb-6 flex items-center gap-4">
Jump start your project with Elstar <Avatar className="border-2 border-white" shape="circle" src="/img/others/cto.png" />
</h3> <div className="text-white">
<p className="text-lg text-white opacity-80 max-w-[700px]"> <div className="font-semibold text-base">Sedat ÖZTÜRK</div>
From interactive desktop applications to immersive web and mobile <span className="opacity-80">{translate('::LoginPanel.Profil')}</span>
solutions, we exist to meet your needs today and ensure continued </div>
success tomorrow. </div>
</p> <p className="text-lg text-white opacity-80">{translate('::LoginPanel.Message')}</p>
</div> </div>
<span className="text-white"> <span className="text-white">
Copyright &copy; {`${new Date().getFullYear()}`}{' '} Copyright &copy; {`${new Date().getFullYear()}`}{' '}
<span className="font-semibold">{`${APP_NAME}`}</span>{' '} <span className="font-semibold">{`${APP_NAME}`}</span>{' '}
</span> </span>
</div> </div>
</div>
<div className="flex flex-col justify-center items-center bg-white dark:bg-gray-800"> <div className="flex flex-col justify-center items-center bg-white dark:bg-gray-800">
<div className="w-full xl:max-w-[450px] px-8 max-w-[380px]"> <div className="w-full xl:max-w-[450px] px-8 max-w-[380px]">
<div className="mb-8">{content}</div> <div className="mb-8">{content}</div>
{children {children ? cloneElement(children as ReactElement, { ...rest }) : null}
? cloneElement(children as ReactElement, { ...rest })
: null}
</div> </div>
</div> </div>
</div> </div>
) )
} }
export default Cover export default Cover

View file

@ -3,12 +3,15 @@ import Avatar from '@/components/ui/Avatar'
import Logo from '@/components/template/Logo' import Logo from '@/components/template/Logo'
import { APP_NAME } from '@/constants/app.constant' import { APP_NAME } from '@/constants/app.constant'
import type { CommonProps } from '@/@types/common' import type { CommonProps } from '@/@types/common'
import { useLocalization } from '@/utils/hooks/useLocalization'
interface SideProps extends CommonProps { interface SideProps extends CommonProps {
content?: React.ReactNode content?: React.ReactNode
} }
const Side = ({ children, content, ...rest }: SideProps) => { const Side = ({ children, content, ...rest }: SideProps) => {
const { translate } = useLocalization()
return ( return (
<div className="grid lg:grid-cols-3 h-full"> <div className="grid lg:grid-cols-3 h-full">
<div <div
@ -25,12 +28,11 @@ const Side = ({ children, content, ...rest }: SideProps) => {
<Avatar className="border-2 border-white" shape="circle" src="/img/others/cto.png" /> <Avatar className="border-2 border-white" shape="circle" src="/img/others/cto.png" />
<div className="text-white"> <div className="text-white">
<div className="font-semibold text-base">Sedat ÖZTÜRK</div> <div className="font-semibold text-base">Sedat ÖZTÜRK</div>
<span className="opacity-80">Founder</span> <span className="opacity-80">{ translate('::LoginPanel.Profil')}</span>
</div> </div>
</div> </div>
<p className="text-lg text-white opacity-80"> <p className="text-lg text-white opacity-80">
From interactive desktop applications to immersive web and mobile solutions, we exist to { translate('::LoginPanel.Message')}
meet your needs today and ensure continued success tomorrow.
</p> </p>
</div> </div>
<span className="text-white"> <span className="text-white">

View file

@ -37,7 +37,7 @@ export const themeConfig: ThemeConfig = {
controlSize: 'md', controlSize: 'md',
navMode: THEME_ENUM.NAV_MODE_LIGHT, navMode: THEME_ENUM.NAV_MODE_LIGHT,
layout: { layout: {
type: THEME_ENUM.LAYOUT_TYPE_MODERN, type: THEME_ENUM.LAYOUT_TYPE_SIMPLE,
sideNavCollapse: false, sideNavCollapse: false,
}, },
} }