forked from baron/baron-sso
userfront: 회원가입 시 기본 개인(Personal) 테넌트 가입, 기업 소속은 별도 문의 이메일 안내 카드로 개편 (#1183)
This commit is contained in:
@@ -3,6 +3,7 @@ import 'dart:async';
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'package:go_router/go_router.dart';
|
import 'package:go_router/go_router.dart';
|
||||||
|
import 'package:url_launcher/url_launcher.dart';
|
||||||
import 'package:userfront/i18n.dart';
|
import 'package:userfront/i18n.dart';
|
||||||
import '../../../core/i18n/locale_utils.dart';
|
import '../../../core/i18n/locale_utils.dart';
|
||||||
import '../../../core/services/auth_proxy_service.dart';
|
import '../../../core/services/auth_proxy_service.dart';
|
||||||
@@ -1788,24 +1789,88 @@ Matters not expressly provided in this Policy are governed by the Company's inte
|
|||||||
crossAxisAlignment: CrossAxisAlignment.stretch,
|
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||||
children: [
|
children: [
|
||||||
if (_affiliationType == 'AFFILIATE') ...[
|
if (_affiliationType == 'AFFILIATE') ...[
|
||||||
const SizedBox(height: 14),
|
const SizedBox(height: 16),
|
||||||
DropdownButtonFormField<String>(
|
Container(
|
||||||
key: ValueKey(_companyCode ?? 'none'),
|
padding: const EdgeInsets.all(16),
|
||||||
initialValue: _companyCode,
|
decoration: BoxDecoration(
|
||||||
decoration: InputDecoration(
|
color: Theme.of(context)
|
||||||
labelText: tr(
|
.colorScheme
|
||||||
'ui.userfront.signup.profile.company',
|
.primaryContainer
|
||||||
|
.withValues(alpha: 0.15),
|
||||||
|
borderRadius: BorderRadius.circular(12),
|
||||||
|
border: Border.all(
|
||||||
|
color: Theme.of(context)
|
||||||
|
.colorScheme
|
||||||
|
.primary
|
||||||
|
.withValues(alpha: 0.25),
|
||||||
),
|
),
|
||||||
border: const OutlineInputBorder(),
|
|
||||||
),
|
),
|
||||||
items: _tenants.map((t) {
|
child: Column(
|
||||||
return DropdownMenuItem<String>(
|
crossAxisAlignment:
|
||||||
value: t['slug'],
|
CrossAxisAlignment.stretch,
|
||||||
child: Text(t['name'] ?? t['slug']),
|
children: [
|
||||||
);
|
Row(
|
||||||
}).toList(),
|
children: [
|
||||||
onChanged: (val) =>
|
Icon(
|
||||||
setState(() => _companyCode = val),
|
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),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
@@ -1814,30 +1879,26 @@ Matters not expressly provided in this Policy are governed by the Company's inte
|
|||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
const SizedBox(height: 18),
|
if (_affiliationType == 'GENERAL') ...[
|
||||||
_buildProfileFieldGroup(
|
const SizedBox(height: 18),
|
||||||
title: _affiliationType == 'AFFILIATE'
|
_buildProfileFieldGroup(
|
||||||
? tr('ui.userfront.signup.profile.department')
|
title: tr(
|
||||||
: 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',
|
'ui.userfront.signup.profile.department_optional',
|
||||||
),
|
),
|
||||||
description: _affiliationType == 'AFFILIATE'
|
border: const OutlineInputBorder(),
|
||||||
? '가족사 사용자는 부서명을 입력해주세요.'
|
),
|
||||||
: '선택 입력 항목입니다.',
|
|
||||||
isDesktop: isDesktop,
|
|
||||||
child: TextFormField(
|
|
||||||
controller: _deptController,
|
|
||||||
onChanged: (_) => setState(() {}),
|
|
||||||
decoration: InputDecoration(
|
|
||||||
labelText: _affiliationType == 'AFFILIATE'
|
|
||||||
? tr('ui.userfront.signup.profile.department')
|
|
||||||
: tr(
|
|
||||||
'ui.userfront.signup.profile.department_optional',
|
|
||||||
),
|
|
||||||
border: const OutlineInputBorder(),
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
],
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@@ -2317,10 +2378,8 @@ Matters not expressly provided in this Policy are governed by the Company's inte
|
|||||||
if (_affiliationType == 'GENERAL') {
|
if (_affiliationType == 'GENERAL') {
|
||||||
canGoNext = nameOk;
|
canGoNext = nameOk;
|
||||||
} else {
|
} else {
|
||||||
// AFFILIATE 필수: 이름 + 가족사 선택 + 부서명
|
// 기업 소속(AFFILIATE)인 경우 직접 가입 대신 문의로 안내하므로 다음 단계 진행을 차단합니다.
|
||||||
final companyOk = _companyCode != null;
|
canGoNext = false;
|
||||||
final deptOk = _deptController.text.trim().isNotEmpty;
|
|
||||||
canGoNext = nameOk && companyOk && deptOk;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user