1
0
forked from baron/baron-sso

userfront: 회원가입 단계에서 소속 유형 선택/입력 레거시 UI를 완전히 제거하고 100% 개인가입 단일화 및 기업 문의 배너 적용 (#1183)

This commit is contained in:
2026-06-16 17:03:20 +09:00
parent b1c853b3c3
commit 40eaadd88d

View File

@@ -1740,165 +1740,74 @@ Matters not expressly provided in this Policy are governed by the Company's inte
), ),
), ),
), ),
const SizedBox(height: 18), const SizedBox(height: 24),
_buildProfileFieldGroup( Container(
title: tr('ui.userfront.signup.profile.affiliation_type'), padding: const EdgeInsets.all(16),
description: '개인 가입 혹은 기업 연동을 선택합니다.', decoration: BoxDecoration(
isDesktop: isDesktop, color: _signupSurface,
trailing: null, borderRadius: BorderRadius.circular(12),
border: Border.all(
color: _signupBorder,
),
),
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch, crossAxisAlignment: CrossAxisAlignment.stretch,
children: [ children: [
DropdownButtonFormField<String>( Row(
key: ValueKey(_affiliationType), children: [
initialValue: _affiliationType, Icon(
decoration: InputDecoration( Icons.business,
labelText: tr( color: Theme.of(context).colorScheme.primary,
'ui.userfront.signup.profile.affiliation_type', size: 20,
), ),
border: const OutlineInputBorder(), const SizedBox(width: 8),
), Expanded(
items: [ child: Text(
DropdownMenuItem( '기업/가족사 소속이신가요?',
value: 'GENERAL', style: TextStyle(
child: Text(tr('domain.affiliation.general')), fontWeight: FontWeight.bold,
), fontSize: 14,
DropdownMenuItem( color: _signupInk,
value: 'AFFILIATE', ),
child: Text(tr('domain.affiliation.affiliate')), ),
), ),
], ],
onChanged: _isAffiliateLocked
? null
: (val) {
if (val == null) {
return;
}
setState(() {
_affiliationType = val;
if (_affiliationType == 'GENERAL') {
_companyCode = null;
}
});
},
), ),
AnimatedSize( const SizedBox(height: 8),
duration: const Duration(milliseconds: 180), Text(
curve: Curves.easeOut, '기업 및 가족사 임직원은 온라인 즉시 가입 대신 별도 연동 문의를 통해 워크스페이스 계정이 발급됩니다.\n\n아래 버튼을 눌러 담당자에게 문의 메일을 발송해 주시기 바랍니다.',
child: Column( style: TextStyle(
crossAxisAlignment: CrossAxisAlignment.stretch, fontSize: 12,
children: [ height: 1.45,
if (_affiliationType == 'AFFILIATE') ...[ color: _signupInk.withValues(alpha: 0.7),
const SizedBox(height: 16), ),
Container( ),
padding: const EdgeInsets.all(16), const SizedBox(height: 12),
decoration: BoxDecoration( OutlinedButton.icon(
color: Theme.of(context) onPressed: () async {
.colorScheme final Uri emailUri = Uri(
.primaryContainer scheme: 'mailto',
.withValues(alpha: 0.15), path: 'baroncs@baroncs.co.kr',
borderRadius: BorderRadius.circular(12), query: Uri.encodeFull(
border: Border.all( 'subject=[Baron SSO] 기업 소속 가입 및 연동 문의',
color: Theme.of(context) ),
.colorScheme );
.primary if (await canLaunchUrl(emailUri)) {
.withValues(alpha: 0.25), await launchUrl(emailUri);
), }
), },
child: Column( icon: const Icon(Icons.mail_outline, size: 16),
crossAxisAlignment: label: const Text('기업 소속 문의하기'),
CrossAxisAlignment.stretch, style: OutlinedButton.styleFrom(
children: [ shape: RoundedRectangleBorder(
Row( borderRadius: BorderRadius.circular(8),
children: [ ),
Icon( padding: const EdgeInsets.symmetric(vertical: 10),
Icons.business,
color: Theme.of(context)
.colorScheme
.primary,
size: 24,
),
const SizedBox(width: 10),
Expanded(
child: Text(
'기업 소속 가입 안내',
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 15,
color: Theme.of(context)
.colorScheme
.primary,
),
),
),
],
),
const SizedBox(height: 12),
Text(
'기업/가족사 소속 회원은 바로 가입하는 대신 별도 문의를 통해 가입 및 워크스페이스 연동이 진행됩니다.\n\n아래 버튼을 눌러 담당자에게 가입 문의 이메일을 보내거나 baroncs@baroncs.co.kr로 직접 문의해 주시기 바랍니다.',
style: TextStyle(
fontSize: 13,
height: 1.5,
color: _signupInk
.withValues(alpha: 0.8),
),
),
const SizedBox(height: 16),
FilledButton.icon(
onPressed: () async {
final Uri emailUri = Uri(
scheme: 'mailto',
path: 'baroncs@baroncs.co.kr',
query: Uri.encodeFull(
'subject=[Baron SSO] 기업 소속 가입 및 연동 문의',
),
);
if (await canLaunchUrl(emailUri)) {
await launchUrl(emailUri);
}
},
icon: const Icon(Icons.mail_outline,
size: 18),
label: const Text('기업 소속 문의하기'),
style: FilledButton.styleFrom(
shape: RoundedRectangleBorder(
borderRadius:
BorderRadius.circular(8),
),
padding: const EdgeInsets.symmetric(
vertical: 12),
),
),
],
),
),
],
],
), ),
), ),
], ],
), ),
), ),
if (_affiliationType == 'GENERAL') ...[
const SizedBox(height: 18),
_buildProfileFieldGroup(
title: tr(
'ui.userfront.signup.profile.department_optional',
),
description: '선택 입력 항목입니다.',
isDesktop: isDesktop,
child: TextFormField(
controller: _deptController,
onChanged: (_) => setState(() {}),
decoration: InputDecoration(
labelText: tr(
'ui.userfront.signup.profile.department_optional',
),
border: const OutlineInputBorder(),
),
),
),
],
], ],
), ),
), ),
@@ -2374,13 +2283,7 @@ Matters not expressly provided in this Policy are governed by the Company's inte
canGoNext = true; canGoNext = true;
} }
if (_currentStep == 3) { if (_currentStep == 3) {
final nameOk = _nameController.text.trim().isNotEmpty; canGoNext = _nameController.text.trim().isNotEmpty;
if (_affiliationType == 'GENERAL') {
canGoNext = nameOk;
} else {
// 기업 소속(AFFILIATE)인 경우 직접 가입 대신 문의로 안내하므로 다음 단계 진행을 차단합니다.
canGoNext = false;
}
} }
return Scaffold( return Scaffold(