platform/lms-adm-fe release promotion snapshot
This commit is contained in:
@@ -12,7 +12,7 @@ const REMEMBERED_EMAIL_STORAGE_KEY = 'atnmy.lms.admin.login.rememberedEmail';
|
|||||||
const DEFAULT_EMAIL = '';
|
const DEFAULT_EMAIL = '';
|
||||||
const DEFAULT_PASSWORD = '';
|
const DEFAULT_PASSWORD = '';
|
||||||
const AUTH_BASE_URL = (import.meta.env.VITE_ATNMY_AUTH_URL ?? import.meta.env.VITE_ADS_IDE_AUTH_URL ?? 'https://auth.autonomystudio.net').replace(/\/+$/, '');
|
const AUTH_BASE_URL = (import.meta.env.VITE_ATNMY_AUTH_URL ?? import.meta.env.VITE_ADS_IDE_AUTH_URL ?? 'https://auth.autonomystudio.net').replace(/\/+$/, '');
|
||||||
const LAUNCHER_API_BASE_URL = (import.meta.env.VITE_ATNMY_STDO_API_BASE_URL ?? 'http://localhost:4200').replace(/\/+$/, '');
|
const LAUNCHER_API_BASE_URL = (import.meta.env.VITE_LAUNCHER_API_BASE_URL ?? 'https://portal-api.autonomystudio.net/api').replace(/\/+$/, '');
|
||||||
const EMAIL_PATTERN = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
const EMAIL_PATTERN = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
||||||
|
|
||||||
export function LoginPage({ onLogin }: LoginPageProps) {
|
export function LoginPage({ onLogin }: LoginPageProps) {
|
||||||
@@ -275,7 +275,7 @@ function InstructorSignupForm({ onCancel, onComplete }: InstructorSignupFormProp
|
|||||||
const title = key === 'terms' ? '이용약관' : '개인정보 처리방침';
|
const title = key === 'terms' ? '이용약관' : '개인정보 처리방침';
|
||||||
setTermModal({ title, body: '', loading: true });
|
setTermModal({ title, body: '', loading: true });
|
||||||
try {
|
try {
|
||||||
const response = await fetch(`${LAUNCHER_API_BASE_URL}/api/terms/${key}`);
|
const response = await fetch(`${LAUNCHER_API_BASE_URL}/terms/${key}`);
|
||||||
if (!response.ok) throw new Error('약관을 불러오지 못했습니다.');
|
if (!response.ok) throw new Error('약관을 불러오지 못했습니다.');
|
||||||
const payload = await response.json() as { term?: { body?: string } };
|
const payload = await response.json() as { term?: { body?: string } };
|
||||||
setTermModal({ title, body: payload.term?.body || '등록된 약관 내용이 없습니다.', loading: false });
|
setTermModal({ title, body: payload.term?.body || '등록된 약관 내용이 없습니다.', loading: false });
|
||||||
@@ -296,7 +296,7 @@ function InstructorSignupForm({ onCancel, onComplete }: InstructorSignupFormProp
|
|||||||
<span className="h-3 w-px bg-[#d8dde8]" />
|
<span className="h-3 w-px bg-[#d8dde8]" />
|
||||||
<h2 className="text-[26px] font-black tracking-[0] text-[#4f46e5]">강사 회원가입</h2>
|
<h2 className="text-[26px] font-black tracking-[0] text-[#4f46e5]">강사 회원가입</h2>
|
||||||
</div>
|
</div>
|
||||||
<p className="mt-2.5 text-[13px] font-bold text-[#6b7280]">조직에서 받은 강사 가입 코드를 입력해주세요.</p>
|
<p className="mt-2.5 text-[13px] font-bold text-[#6b7280]">강사 가입 코드를 입력해주세요.</p>
|
||||||
</div>
|
</div>
|
||||||
<form className="grid gap-3" onSubmit={handleSubmit}>
|
<form className="grid gap-3" onSubmit={handleSubmit}>
|
||||||
<SignupInput label="이름" value={name} onChange={setName} placeholder="이름을 입력하세요" />
|
<SignupInput label="이름" value={name} onChange={setName} placeholder="이름을 입력하세요" />
|
||||||
|
|||||||
@@ -803,7 +803,7 @@ export function PlatformsPage({ session }: { session: AuthSession }) {
|
|||||||
<div className="flex items-start justify-between gap-4 border-b border-[#c7d2e0] bg-[#f8fbff] px-5 py-4">
|
<div className="flex items-start justify-between gap-4 border-b border-[#c7d2e0] bg-[#f8fbff] px-5 py-4">
|
||||||
<div>
|
<div>
|
||||||
<h3 className="text-[16px] font-black text-[#111827]">{settingsTarget.name}</h3>
|
<h3 className="text-[16px] font-black text-[#111827]">{settingsTarget.name}</h3>
|
||||||
<p className="mt-1 text-[13px] font-semibold text-[#64748b]">센서 드라이버 및 위치 설정</p>
|
<p className="mt-1 text-[13px] font-semibold text-[#64748b]">차량 제원 및 제어 시간 설정</p>
|
||||||
</div>
|
</div>
|
||||||
<button className="grid h-8 w-8 place-items-center rounded-md text-[#64748b] hover:bg-[#f1f5f9] hover:text-[#111827]" type="button" onClick={() => setSettingsTarget(null)} aria-label="닫기" title="닫기">
|
<button className="grid h-8 w-8 place-items-center rounded-md text-[#64748b] hover:bg-[#f1f5f9] hover:text-[#111827]" type="button" onClick={() => setSettingsTarget(null)} aria-label="닫기" title="닫기">
|
||||||
<X size={17} aria-hidden="true" />
|
<X size={17} aria-hidden="true" />
|
||||||
@@ -835,6 +835,7 @@ export function PlatformsPage({ session }: { session: AuthSession }) {
|
|||||||
</div>
|
</div>
|
||||||
</SettingsSection>
|
</SettingsSection>
|
||||||
|
|
||||||
|
<div hidden>
|
||||||
<SettingsSection title="부착 센서">
|
<SettingsSection title="부착 센서">
|
||||||
{settingsSensors.map((sensor, index) => (
|
{settingsSensors.map((sensor, index) => (
|
||||||
<SensorSettingRow
|
<SensorSettingRow
|
||||||
@@ -866,6 +867,8 @@ export function PlatformsPage({ session }: { session: AuthSession }) {
|
|||||||
</div>
|
</div>
|
||||||
</SettingsSection>
|
</SettingsSection>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
<SettingsSection title="제어 시간 설정">
|
<SettingsSection title="제어 시간 설정">
|
||||||
<div className="grid gap-3 md:grid-cols-2">
|
<div className="grid gap-3 md:grid-cols-2">
|
||||||
<SettingsField label="1회 제어 시간 (분)">
|
<SettingsField label="1회 제어 시간 (분)">
|
||||||
|
|||||||
Reference in New Issue
Block a user