User Details ve Genel düzenlemeler

This commit is contained in:
Sedat Öztürk 2026-05-25 12:14:42 +03:00
parent e50a02bddc
commit 0b5eb3d978
6 changed files with 577 additions and 527 deletions

View file

@ -3108,6 +3108,12 @@
"en": "Lockout Settings",
"tr": "Kilit Ayarları"
},
{
"resourceName": "Platform",
"key": "Abp.Identity.User.LockoutManagement.ConnectionsTimes",
"en": "Connections Times",
"tr": "Bağlantı Süreleri"
},
{
"resourceName": "Platform",
"key": "Abp.Identity.User.UserInformation.Name",

View file

@ -4168,7 +4168,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep
EditingFormJson = JsonSerializer.Serialize(new List<EditingFormDto>()
{
new() {
Order = 1, ColCount = 2, ColSpan = 1, ItemType = "group", Items =
Order = 1, ColCount = 4, ColSpan = 1, ItemType = "group", Items =
[
new EditingFormItemDto { Order = 1, DataField = "CategoryId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton },
new EditingFormItemDto { Order = 2, DataField = "TypeId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton },
@ -4176,9 +4176,9 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep
new EditingFormItemDto { Order = 4, DataField = "Name", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxTextBox },
new EditingFormItemDto { Order = 5, DataField = "Place", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxTextBox },
new EditingFormItemDto { Order = 6, DataField = "UserId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton },
new EditingFormItemDto { Order = 7, DataField = "Description", ColSpan = 2, EditorType2 = EditorTypes.dxTextArea },
new EditingFormItemDto { Order = 8, DataField = "Status", ColSpan = 1, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton },
new EditingFormItemDto { Order = 9, DataField = "ParticipantsCount", ColSpan = 1, EditorType2 = EditorTypes.dxNumberBox },
new EditingFormItemDto { Order = 7, DataField = "Status", ColSpan = 1, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton },
new EditingFormItemDto { Order = 8, DataField = "ParticipantsCount", ColSpan = 1, EditorType2 = EditorTypes.dxNumberBox },
new EditingFormItemDto { Order = 9, DataField = "Description", ColSpan = 2, EditorType2 = EditorTypes.dxTextArea },
new EditingFormItemDto { Order = 10, DataField = "Photos", ColSpan = 1, EditorType2 = EditorTypes.dxImageUpload, EditorOptions = EditorOptionValues.ImageUploadOptions },
]}
}),
@ -4474,7 +4474,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep
EditingOptionJson = DefaultEditingOptionJson(listFormName, 500, 250, true, true, true, true, false),
EditingFormJson = JsonSerializer.Serialize(new List<EditingFormDto>() {
new() { Order=1, ColCount=1, ColSpan=1, ItemType="group", Items=[
new EditingFormItemDto { Order = 1, DataField = "Name", ColSpan = 1, IsRequired = true, EditorType2=EditorTypes.dxTextBox },
new EditingFormItemDto { Order = 1, DataField = "UserId", ColSpan = 1, IsRequired = true, EditorType2=EditorTypes.dxSelectBox },
]}
}),
InsertFieldsDefaultValueJson = DefaultInsertFieldsDefaultValueJson(),

View file

@ -76,7 +76,7 @@ public static class PlatformConsts
public static class Branches
{
public const string BranchCode = "DEMO";
public const string BranchName = "Demo Şube";
public const string BranchName = "Demo";
public const long BranchVknTckn = 52849619172;
public const string BranchTaxOffice = "Sarıgazi";
public const string BranchMobileNumber = "5449476346";

View file

@ -59,13 +59,11 @@ import {
FaMinusCircle,
FaPlusCircle,
FaTrash,
FaSitemap,
FaCogs,
FaTrashAlt,
FaEdit,
FaUsers,
FaUserPlus,
FaUserShield,
FaUserFriends,
} from 'react-icons/fa'
import { object, string } from 'yup'
import { ROUTES_ENUM } from '@/routes/route.constant'
@ -389,8 +387,8 @@ const OrganizationUnits = () => {
return (
<div
className={classNames(
'h-6 text-md flex gap-2 items-center',
node.isSelected ? 'bg-indigo-200' : '',
'h-8 text-md flex gap-2 items-center',
node.isSelected ? 'bg-indigo-200 text-black dark:text-black' : '',
)}
style={style}
ref={dragHandle}
@ -403,7 +401,7 @@ const OrganizationUnits = () => {
{node.isInternal && (node.isOpen ? <FaMinusCircle /> : <FaPlusCircle />)}
</div>
<FaFolder className="ml-2 w-3" color="#337ab7" />
<FaFolder className="w-3" color="#337ab7" />
<span className="node-text m-1">
{node.isEditing ? (
@ -431,17 +429,23 @@ const OrganizationUnits = () => {
<div className="file-actions">
<div className="flex gap-1 folderFileActions">
<Button
icon={<FaUserPlus size="20" color="#2d6da3" />}
size='xs'
variant='plain'
icon={<FaUserPlus color="#2d6da3" />}
onClick={() => setIsMoveAllUsersOpen(true)}
title={translate('::Abp.Identity.OrganizationUnit.MoveAllUsers')}
></Button>
<Button
icon={<FaEdit size="20" className="text-teal-900" />}
size='xs'
variant='plain'
icon={<FaEdit className="text-teal-900" />}
onClick={() => node.edit()}
title={translate('::Abp.Identity.OrganizationUnit.Rename')}
></Button>
<Button
icon={<FaTrashAlt size="20" color="#d9534f" />}
size='xs'
variant='plain'
icon={<FaTrashAlt color="#d9534f" />}
onClick={() => setDeleteRow({ id: node.data.id, name: 'Organization Unit' })}
title={translate('::Delete')}
></Button>
@ -469,7 +473,7 @@ const OrganizationUnits = () => {
<Button
variant="solid"
size="sm"
icon={activeOu ? <FaSitemap /> : <FaCogs />}
icon={activeOu ? <FaUserFriends /> : <FaUserPlus />}
title={translate('::Abp.Identity.OrganizationUnit.AddUnit')}
onClick={(e) => {
e.preventDefault()

View file

@ -167,11 +167,16 @@ function UserDetails() {
{({ isSubmitting, values }) => {
return (
<Form>
<div className="w-1/2">
<div>
<FormContainer size="md">
<div className="grid grid-cols-1 lg:grid-cols-2 gap-2 w-full">
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-2 w-full">
{/* Personal Information */}
<div>
<h6 className="mb-4">
{translate(
'::Abp.Identity.User.UserInformation.ContactInformation',
)}
</h6>
<FormItem
label={translate('::Abp.Identity.User.UserInformation.Name')}
>
@ -182,9 +187,7 @@ function UserDetails() {
component={Input}
/>
</FormItem>
</div>
<div>
<FormItem
label={translate('::Abp.Identity.User.UserInformation.Surname')}
>
@ -195,14 +198,7 @@ function UserDetails() {
component={Input}
/>
</FormItem>
</div>
<div>
<h6 className="mb-4">
{translate(
'::Abp.Identity.User.UserInformation.ContactInformation',
)}
</h6>
<FormItem label={translate('::Abp.Account.EmailAddress')}>
<Field
type="text"
@ -224,6 +220,10 @@ function UserDetails() {
component={Input}
/>
</FormItem>
</div>
<div>
<h6 className="mb-4">&nbsp;</h6>
<FormItem label={translate('::Abp.Account.HomeAddress')}>
<Field
type="text"
@ -438,11 +438,9 @@ function UserDetails() {
</FormContainer>
</div>
<div className="w-1/2">
<Button variant="solid" block loading={isSubmitting} type="submit">
{isSubmitting ? translate('::SavingWithThreeDot') : translate('::Save')}
</Button>
</div>
</Form>
)
}}
@ -479,7 +477,7 @@ function UserDetails() {
return (
<Form>
<div className="w-1/2">
<div>
<FormContainer size="md">
<div className="grid grid-cols-1 lg:grid-cols-2 gap-4 w-full">
{/* Şube Management */}
@ -549,7 +547,7 @@ function UserDetails() {
</FormContainer>
</div>
<div className="w-1/2 mt-4">
<div className="mt-4">
<Button variant="solid" block loading={isSubmitting} type="submit">
{isSubmitting ? translate('::SavingWithThreeDot') : translate('::Save')}
</Button>
@ -601,9 +599,9 @@ function UserDetails() {
return (
<Form>
<div className="w-1/2">
<div>
<FormContainer size="md">
<div className="grid grid-cols-1 lg:grid-cols-2 gap-2 w-full">
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-2 w-full">
<div>
<FormItem
label={translate(
@ -664,7 +662,9 @@ function UserDetails() {
<Field
type="text"
name="sskNo"
placeholder={translate('::Abp.Identity.User.UserInformation.SskNo')}
placeholder={translate(
'::Abp.Identity.User.UserInformation.SskNo',
)}
component={Input}
/>
</FormItem>
@ -680,7 +680,9 @@ function UserDetails() {
field={field}
form={form}
value={field.value ? dayjs(field.value).toDate() : null}
placeholder={translate('::Abp.Identity.User.UserInformation.HireDate')}
placeholder={translate(
'::Abp.Identity.User.UserInformation.HireDate',
)}
onChange={(date) => {
form.setFieldValue(
field.name,
@ -695,7 +697,9 @@ function UserDetails() {
<div>
<FormItem
label={translate('::Abp.Identity.User.UserInformation.TerminationDate')}
label={translate(
'::Abp.Identity.User.UserInformation.TerminationDate',
)}
>
<Field name="terminationDate">
{({ field, form }: FieldProps) => (
@ -703,7 +707,9 @@ function UserDetails() {
field={field}
form={form}
value={field.value ? dayjs(field.value).toDate() : null}
placeholder={translate('::Abp.Identity.User.UserInformation.TerminationDate')}
placeholder={translate(
'::Abp.Identity.User.UserInformation.TerminationDate',
)}
onChange={(date) => {
form.setFieldValue(
field.name,
@ -719,11 +725,9 @@ function UserDetails() {
</FormContainer>
</div>
<div className="w-1/2">
<Button variant="solid" block loading={isSubmitting} type="submit">
{isSubmitting ? translate('::SavingWithThreeDot') : translate('::Save')}
</Button>
</div>
</Form>
)
}}
@ -774,17 +778,20 @@ function UserDetails() {
return (
<Form>
<div className="w-1/2">
<FormContainer size="md">
<div className="grid grid-cols-1 lg:grid-cols-2 gap-2 w-full">
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-2 w-full">
<div>
<FormItem
label={translate('::Abp.Identity.User.UserInformation.IdentityNumber')}
label={translate(
'::Abp.Identity.User.UserInformation.IdentityNumber',
)}
>
<Field
type="text"
name="identityNumber"
placeholder={translate('::Abp.Identity.User.UserInformation.IdentityNumber')}
placeholder={translate(
'::Abp.Identity.User.UserInformation.IdentityNumber',
)}
component={Input}
/>
</FormItem>
@ -797,7 +804,9 @@ function UserDetails() {
<Field
type="text"
name="serialNo"
placeholder={translate('::Abp.Identity.User.UserInformation.SerialNo')}
placeholder={translate(
'::Abp.Identity.User.UserInformation.SerialNo',
)}
component={Input}
/>
</FormItem>
@ -810,7 +819,9 @@ function UserDetails() {
<Field
type="text"
name="province"
placeholder={translate('::Abp.Identity.User.UserInformation.Province')}
placeholder={translate(
'::Abp.Identity.User.UserInformation.Province',
)}
component={Input}
/>
</FormItem>
@ -823,7 +834,9 @@ function UserDetails() {
<Field
type="text"
name="district"
placeholder={translate('::Abp.Identity.User.UserInformation.District')}
placeholder={translate(
'::Abp.Identity.User.UserInformation.District',
)}
component={Input}
/>
</FormItem>
@ -836,7 +849,9 @@ function UserDetails() {
<Field
type="text"
name="village"
placeholder={translate('::Abp.Identity.User.UserInformation.Village')}
placeholder={translate(
'::Abp.Identity.User.UserInformation.Village',
)}
component={Input}
/>
</FormItem>
@ -849,7 +864,9 @@ function UserDetails() {
<Field
type="text"
name="volumeNo"
placeholder={translate('::Abp.Identity.User.UserInformation.VolumeNo')}
placeholder={translate(
'::Abp.Identity.User.UserInformation.VolumeNo',
)}
component={Input}
/>
</FormItem>
@ -857,12 +874,16 @@ function UserDetails() {
<div>
<FormItem
label={translate('::Abp.Identity.User.UserInformation.FamilySequenceNo')}
label={translate(
'::Abp.Identity.User.UserInformation.FamilySequenceNo',
)}
>
<Field
type="text"
name="familySequenceNo"
placeholder={translate('::Abp.Identity.User.UserInformation.FamilySequenceNo')}
placeholder={translate(
'::Abp.Identity.User.UserInformation.FamilySequenceNo',
)}
component={Input}
/>
</FormItem>
@ -875,7 +896,9 @@ function UserDetails() {
<Field
type="text"
name="sequenceNo"
placeholder={translate('::Abp.Identity.User.UserInformation.SequenceNo')}
placeholder={translate(
'::Abp.Identity.User.UserInformation.SequenceNo',
)}
component={Input}
/>
</FormItem>
@ -888,7 +911,9 @@ function UserDetails() {
<Field
type="text"
name="issuedPlace"
placeholder={translate('::Abp.Identity.User.UserInformation.IssuedPlace')}
placeholder={translate(
'::Abp.Identity.User.UserInformation.IssuedPlace',
)}
component={Input}
/>
</FormItem>
@ -904,7 +929,9 @@ function UserDetails() {
field={field}
form={form}
value={field.value ? dayjs(field.value).toDate() : null}
placeholder={translate('::Abp.Identity.User.UserInformation.IssuedDate')}
placeholder={translate(
'::Abp.Identity.User.UserInformation.IssuedDate',
)}
onChange={(date) => {
form.setFieldValue(
field.name,
@ -924,7 +951,9 @@ function UserDetails() {
<Field
type="text"
name="birthPlace"
placeholder={translate('::Abp.Identity.User.UserInformation.BirthPlace')}
placeholder={translate(
'::Abp.Identity.User.UserInformation.BirthPlace',
)}
component={Input}
/>
</FormItem>
@ -940,7 +969,9 @@ function UserDetails() {
field={field}
form={form}
value={field.value ? dayjs(field.value).toDate() : null}
placeholder={translate('::Abp.Identity.User.UserInformation.BirthDate')}
placeholder={translate(
'::Abp.Identity.User.UserInformation.BirthDate',
)}
onChange={(date) => {
form.setFieldValue(
field.name,
@ -960,7 +991,9 @@ function UserDetails() {
<Field
type="text"
name="fatherName"
placeholder={translate('::Abp.Identity.User.UserInformation.FatherName')}
placeholder={translate(
'::Abp.Identity.User.UserInformation.FatherName',
)}
component={Input}
/>
</FormItem>
@ -973,7 +1006,9 @@ function UserDetails() {
<Field
type="text"
name="motherName"
placeholder={translate('::Abp.Identity.User.UserInformation.MotherName')}
placeholder={translate(
'::Abp.Identity.User.UserInformation.MotherName',
)}
component={Input}
/>
</FormItem>
@ -1012,7 +1047,9 @@ function UserDetails() {
field={field}
form={form}
value={field.value ? dayjs(field.value).toDate() : null}
placeholder={translate('::Abp.Identity.User.UserInformation.MarriageDate')}
placeholder={translate(
'::Abp.Identity.User.UserInformation.MarriageDate',
)}
onChange={(date) => {
form.setFieldValue(
field.name,
@ -1026,13 +1063,10 @@ function UserDetails() {
</div>
</div>
</FormContainer>
</div>
<div className="w-1/2">
<Button variant="solid" block loading={isSubmitting} type="submit">
{isSubmitting ? translate('::SavingWithThreeDot') : translate('::Save')}
</Button>
</div>
</Form>
)
}}
@ -1073,9 +1107,8 @@ function UserDetails() {
return (
<Form>
<div className="w-1/2">
<FormContainer size="md">
<div className="grid grid-cols-1 lg:grid-cols-2 gap-2 w-full">
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-2 w-full">
{/* Account Status */}
<div>
<h6 className="mb-4">
@ -1172,6 +1205,106 @@ function UserDetails() {
'::Abp.Identity.User.LockoutManagement.LoginAndLockoutSettings',
)}
</h6>
<FormItem
layout="horizontal"
labelClass="!justify-start"
labelWidth="50%"
label={translate(
'::Abp.Identity.User.LockoutManagement.AccountLockoutEnabled',
)}
>
<Field
name="lockoutEnabled"
placeholder={translate(
'::Abp.Identity.User.LockoutManagement.AccountLockoutEnabled',
)}
component={Checkbox}
/>
</FormItem>
<FormItem
layout="horizontal"
labelClass="!justify-start"
labelWidth="50%"
label={translate(
'::Abp.Identity.User.LockoutManagement.AccountLocked',
)}
>
<Field
name="lockUser"
placeholder={translate(
'::Abp.Identity.User.LockoutManagement.AccountLocked',
)}
component={Checkbox}
disabled={values.lockoutEnabled === false}
/>
</FormItem>
<FormItem
layout="horizontal"
labelClass="!justify-start"
labelWidth="50%"
label={translate(
'::Abp.Identity.User.LockoutManagement.AccountEndDate',
)}
>
<Field name="lockoutEnd">
{({ field, form }: FieldProps) => (
<DatePicker
field={field}
form={form}
value={field.value ? dayjs(field.value).toDate() : null}
placeholder={translate(
'::Abp.Identity.User.LockoutManagement.AccountEndDate',
)}
onChange={(date) => {
form.setFieldValue(
field.name,
date ? dayjs(date).format('YYYY-MM-DDTHH:mm:ss') : null,
)
}}
disabled={values.lockoutEnabled === false}
/>
)}
</Field>
</FormItem>
<FormItem
layout="horizontal"
labelClass="!justify-start"
labelWidth="50%"
label={translate(
'::Abp.Identity.User.LockoutManagement.ShouldChangePwOnNextLogin',
)}
>
<Field
name="shouldChangePasswordOnNextLogin"
placeholder={translate(
'::Abp.Identity.User.LockoutManagement.ShouldChangePwOnNextLogin',
)}
component={Checkbox}
/>
</FormItem>
<FormItem
layout="horizontal"
labelClass="!justify-start"
labelWidth="50%"
label={translate(
'::Abp.Identity.User.LockoutManagement.AccessFailedCount',
)}
>
<Field type="number" name="accessFailedCount" component={Input} />
</FormItem>
</div>
{/* Login & Lockout Settings */}
<div>
<h6 className="mb-4">
{translate('::Abp.Identity.User.LockoutManagement.ConnectionsTimes')}
</h6>
<FormItem
layout="horizontal"
labelClass="!justify-start"
@ -1223,106 +1356,13 @@ function UserDetails() {
)}
</Field>
</FormItem>
<FormItem
layout="horizontal"
labelClass="!justify-start"
labelWidth="50%"
label={translate(
'::Abp.Identity.User.LockoutManagement.AccountLockoutEnabled',
)}
>
<Field
name="lockoutEnabled"
placeholder={translate(
'::Abp.Identity.User.LockoutManagement.AccountLockoutEnabled',
)}
component={Checkbox}
/>
</FormItem>
<FormItem
layout="horizontal"
labelClass="!justify-start"
labelWidth="50%"
label={translate(
'::Abp.Identity.User.LockoutManagement.AccountLocked',
)}
>
<Field
name="lockUser"
placeholder={translate(
'::Abp.Identity.User.LockoutManagement.AccountLocked',
)}
component={Checkbox}
/>
</FormItem>
<FormItem
layout="horizontal"
labelClass="!justify-start"
labelWidth="50%"
label={translate(
'::Abp.Identity.User.LockoutManagement.AccountEndDate',
)}
>
<Field name="lockoutEnd">
{({ field, form }: FieldProps) => (
<DatePicker
field={field}
form={form}
value={field.value ? dayjs(field.value).toDate() : null}
placeholder={translate(
'::Abp.Identity.User.LockoutManagement.AccountEndDate',
)}
onChange={(date) => {
form.setFieldValue(
field.name,
date ? dayjs(date).format('YYYY-MM-DDTHH:mm:ss') : null,
)
}}
/>
)}
</Field>
</FormItem>
<FormItem
layout="horizontal"
labelClass="!justify-start"
labelWidth="50%"
label={translate(
'::Abp.Identity.User.LockoutManagement.ShouldChangePwOnNextLogin',
)}
>
<Field
name="shouldChangePasswordOnNextLogin"
placeholder={translate(
'::Abp.Identity.User.LockoutManagement.ShouldChangePwOnNextLogin',
)}
component={Checkbox}
/>
</FormItem>
<FormItem
layout="horizontal"
labelClass="!justify-start"
labelWidth="50%"
label={translate(
'::Abp.Identity.User.LockoutManagement.AccessFailedCount',
)}
>
<Field type="number" name="accessFailedCount" component={Input} />
</FormItem>
</div>
</div>
</FormContainer>
</div>
<div className="w-1/2">
<Button variant="solid" block loading={isSubmitting} type="submit">
{isSubmitting ? translate('::SavingWithThreeDot') : translate('::Save')}
</Button>
</div>
</Form>
)
}}
@ -1331,7 +1371,7 @@ function UserDetails() {
</TabContent>
<TabContent value="claimTypes">
<div className="mt-5 w-1/2">
<div className="mt-5">
<Table compact>
<THead>
<Tr>