diff --git a/userfront/lib/features/auth/presentation/signup_screen.dart b/userfront/lib/features/auth/presentation/signup_screen.dart index 846087b8..70c926be 100644 --- a/userfront/lib/features/auth/presentation/signup_screen.dart +++ b/userfront/lib/features/auth/presentation/signup_screen.dart @@ -1712,104 +1712,126 @@ Matters not expressly provided in this Policy are governed by the Company's inte horizontal: isDesktop ? 32 : 20, vertical: isDesktop ? 32 : 24, ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.stretch, - children: [ - Text( - tr('msg.userfront.signup.profile.title'), - style: TextStyle( - fontSize: isDesktop ? 28 : 20, - fontWeight: FontWeight.w700, - height: 1.25, - color: _signupInk, - ), - ), - const SizedBox(height: 12), - _buildProfileInfoNoticeCard(isDesktop: isDesktop), - SizedBox(height: isDesktop ? 28 : 24), - _buildProfileFieldGroup( - title: tr('ui.userfront.signup.profile.name'), - description: '기본 정보', - isDesktop: isDesktop, - child: TextFormField( - controller: _nameController, - onChanged: (_) => setState(() {}), - decoration: InputDecoration( - labelText: tr('ui.userfront.signup.profile.name'), - border: const OutlineInputBorder(), - ), - ), - ), - const SizedBox(height: 24), - Container( - padding: const EdgeInsets.all(16), - decoration: BoxDecoration( - color: _signupSurface, - borderRadius: BorderRadius.circular(12), - border: Border.all( - color: _signupBorder, - ), - ), - child: Column( + child: _affiliationType == 'AFFILIATE' + ? Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ - Row( - children: [ - Icon( - Icons.business, - color: Theme.of(context).colorScheme.primary, - size: 20, + Text( + '가족사 임직원 가입 안내', + style: TextStyle( + fontSize: isDesktop ? 28 : 20, + fontWeight: FontWeight.w700, + height: 1.25, + color: _signupInk, + ), + ), + const SizedBox(height: 16), + Container( + padding: const EdgeInsets.all(20), + decoration: BoxDecoration( + color: Theme.of(context) + .colorScheme + .primaryContainer + .withValues(alpha: 0.12), + borderRadius: BorderRadius.circular(16), + border: Border.all( + color: Theme.of(context) + .colorScheme + .primary + .withValues(alpha: 0.25), ), - const SizedBox(width: 8), - Expanded( - child: Text( - '기업/가족사 소속이신가요?', + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + Row( + children: [ + Icon( + Icons.business, + color: Theme.of(context).colorScheme.primary, + size: 24, + ), + const SizedBox(width: 10), + Expanded( + child: Text( + '기업 및 가족사 임직원 대상자입니다.', + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 16, + color: Theme.of(context).colorScheme.primary, + ), + ), + ), + ], + ), + const SizedBox(height: 14), + Text( + '귀하의 이메일 도메인은 기업/가족사 임직원 대상자입니다. 온라인 직접 가입 대신 별도의 조인 문의를 통해 가입 및 워크스페이스 연동이 진행됩니다.\n\n아래 버튼을 눌러 담당자에게 가입 연동 문의 메일을 발송하시거나 사내 시스템 관리자에게 문의해 주시기 바랍니다.', style: TextStyle( - fontWeight: FontWeight.bold, - fontSize: 14, - color: _signupInk, + fontSize: 13, + height: 1.55, + color: _signupInk.withValues(alpha: 0.8), ), ), - ), - ], + const SizedBox(height: 20), + 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: 14), + ), + ), + ], + ), ), - const SizedBox(height: 8), + ], + ) + : Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ Text( - '기업 및 가족사 임직원은 온라인 즉시 가입 대신 별도 연동 문의를 통해 워크스페이스 계정이 발급됩니다.\n\n아래 버튼을 눌러 담당자에게 문의 메일을 발송해 주시기 바랍니다.', + tr('msg.userfront.signup.profile.title'), style: TextStyle( - fontSize: 12, - height: 1.45, - color: _signupInk.withValues(alpha: 0.7), + fontSize: isDesktop ? 28 : 20, + fontWeight: FontWeight.w700, + height: 1.25, + color: _signupInk, ), ), const SizedBox(height: 12), - OutlinedButton.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: 16), - label: const Text('기업 소속 문의하기'), - style: OutlinedButton.styleFrom( - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(8), + _buildProfileInfoNoticeCard(isDesktop: isDesktop), + SizedBox(height: isDesktop ? 28 : 24), + _buildProfileFieldGroup( + title: tr('ui.userfront.signup.profile.name'), + description: '기본 정보', + isDesktop: isDesktop, + child: TextFormField( + controller: _nameController, + onChanged: (_) => setState(() {}), + decoration: InputDecoration( + labelText: tr('ui.userfront.signup.profile.name'), + border: const OutlineInputBorder(), ), - padding: const EdgeInsets.symmetric(vertical: 10), ), ), ], ), - ), - ], - ), ), ), ), @@ -2283,7 +2305,7 @@ Matters not expressly provided in this Policy are governed by the Company's inte canGoNext = true; } if (_currentStep == 3) { - canGoNext = _nameController.text.trim().isNotEmpty; + canGoNext = _affiliationType == 'GENERAL' && _nameController.text.trim().isNotEmpty; } return Scaffold(