/* eslint-disable */ // ───────────────────────────────────────────────────────────── // searchgg · 클랜 모집 광장 (모집 공고 게시판) // window.ClanPlaza · 의존: Nav, Panel, Icon, Emblem, ClanRecruits, ClanDB // ───────────────────────────────────────────────────────────── const PZPT = '#48515f'; const PZCH = "'Chakra Petch',sans-serif"; function pzAgeLabel(cd) { if (cd.ageMin && cd.ageMax) return `${cd.ageMin}~${cd.ageMax}세`; if (cd.ageMin) return `${cd.ageMin}세 이상`; if (cd.ageMax) return `${cd.ageMax}세 이하`; return '전연령'; } function ContactGlyph({ type }) { if (type === '디스코드') { return ( ); } return ( ); } function RecruitCard({ rc, onOpen, onDetail }) { const fill = Math.round((rc.cur / rc.max) * 100); const isMine = rc.name === (window.SA.me.clan || ''); return (
onDetail(rc)} style={{ background: '#fff', border: `1px solid ${isMine ? PZPT : 'var(--line)'}`, borderRadius: 8, overflow: 'hidden', display: 'flex', cursor: 'pointer', boxShadow: '0 1px 2px rgba(0,0,0,.04)', transition: 'box-shadow .15s' }} onMouseEnter={(e) => e.currentTarget.style.boxShadow = '0 4px 14px rgba(0,0,0,.1)'} onMouseLeave={(e) => e.currentTarget.style.boxShadow = '0 1px 2px rgba(0,0,0,.04)'}> {/* 홍보 포스터 (3:4, 유저 업로드) */}
{rc.name} {isMine && 내 모집글}
{rc.recruitTypes.map((t) => ( {t} ))} {(() => { const cd = rc.conditions; const age = pzAgeLabel(cd); return [age !== '전연령' ? age : null, cd.voice ? '보이스 채팅 필수' : null].filter(Boolean).map((b) => ( {b} )); })()}

{rc.intro}

{rc.rank}위 · 승률 {rc.weeklyWr}% · {rc.record.matches}전 {rc.record.w}승 {rc.record.l}패
클랜원 {rc.cur}/{rc.max} · {rc.openings}자리
); } // ── 상세 모집글 ── function RecruitDetail({ rc, onClose, onOpenClan }) { return (
e.stopPropagation()} style={{ width: 860, maxWidth: '100%', margin: 'auto', background: '#fff', borderRadius: 14, overflow: 'hidden', boxShadow: '0 24px 70px rgba(0,0,0,.34)', fontFamily: "'Pretendard',sans-serif" }}>
{rc.name} 모집글 · {rc.createdAgo}분 전
{/* 3:4 포스터 */}
{[['랭킹', `${rc.rank}위`, PZPT], ['승률', `${rc.weeklyWr}%`, 'var(--ink)'], ['전적', `${rc.record.matches}전 ${rc.record.w}승 ${rc.record.l}패`, 'var(--ink)']].map(([l, v, c], i) => (
{l}
{v}
))}
모집 안내

{rc.intro}

{rc.recruitTypes.map((t) => ( {t} ))}
가입 조건
{(() => { const cd = rc.conditions; return [ ['연령', pzAgeLabel(cd)], ['보이스 채팅', cd.voice ? '필수' : '자율'], ['닉네임 변경', cd.nickChange ? '필요' : '불필요'], ['이중클랜·부계정', cd.noDualClan ? '금지' : '허용'], ['지인 동반 가입', cd.friendJoin ? '가능' : '불가'], ].map(([l, v]) => (
{l} {v}
)); })()}
{rc.contacts.map((ct) => { const isDc = ct.type === '디스코드'; return ( ); })}
); } // ── 모집글 등록 모달 ── function RecruitCreate({ onClose }) { const SA = window.SA; const myClanName = SA.me.clan || '불곰부대'; const clan = (window.ClanDB && window.ClanDB(myClanName)) || {}; const [types, setTypes] = React.useState([]); const [ageMin, setAgeMin] = React.useState(''); const [ageMax, setAgeMax] = React.useState(''); const [conds, setConds] = React.useState(['보이스 채팅 필수']); const [intro, setIntro] = React.useState(''); const [dc, setDc] = React.useState(false); const [dcLink, setDcLink] = React.useState(''); const [kakao, setKakao] = React.useState(false); const [kakaoLink, setKakaoLink] = React.useState(''); const toggleType = (v) => setTypes((t) => t.includes(v) ? t.filter((x) => x !== v) : [...t, v]); const toggleCond = (v) => setConds((t) => t.includes(v) ? t.filter((x) => x !== v) : [...t, v]); const label = { fontSize: 12, fontWeight: 700, color: 'var(--t2)', marginBottom: 7 }; const chip = (on) => ({ padding: '6px 12px', borderRadius: 5, border: `1px solid ${on ? 'var(--ink)' : 'var(--line2)'}`, cursor: 'pointer', fontFamily: "'Pretendard',sans-serif", fontWeight: 700, fontSize: 12, background: on ? 'var(--ink)' : '#fff', color: on ? '#fff' : 'var(--t2)' }); const valid = intro.trim().length > 0 && types.length > 0; return (
e.stopPropagation()} style={{ width: 760, maxWidth: '100%', margin: 'auto', background: '#fff', borderRadius: 14, overflow: 'hidden', boxShadow: '0 24px 70px rgba(0,0,0,.34)', fontFamily: "'Pretendard',sans-serif" }}> {/* 헤더 */}
모집글 등록
랭킹 · 승률 · 전적은 클랜 데이터에서 자동으로 표시됩니다.
{/* 포스터 업로드 */}
권장 비율 3:4 · 클랜을 가장 잘 보여줄 포스터를 올려보세요.
{/* 폼 */}
{/* 클랜 (자동) */}
클랜
{myClanName} {clan.rank}위
{/* 모집 유형 */}
모집 유형 (어떤 유저를 찾나요?)
{(window.RECRUIT_TYPES || []).map((v) => { const on = types.includes(v); return ( ); })}
{/* 연령 조건 */}
연령 조건 (비워두면 전연령)
setAgeMin(e.target.value)} placeholder="제한 없음" style={{ width: 90, padding: '9px 11px', border: '1px solid var(--line2)', borderRadius: 7, fontSize: 13, fontFamily: "'Pretendard',sans-serif", fontWeight: 600, color: 'var(--ink)', outline: 'none', boxSizing: 'border-box' }} /> 세 이상 ~ setAgeMax(e.target.value)} placeholder="제한 없음" style={{ width: 90, padding: '9px 11px', border: '1px solid var(--line2)', borderRadius: 7, fontSize: 13, fontFamily: "'Pretendard',sans-serif", fontWeight: 600, color: 'var(--ink)', outline: 'none', boxSizing: 'border-box' }} /> 세 이하
{/* 가입 조건 */}
가입 조건 (해당하는 항목 선택)
{['보이스 채팅 필수', '닉네임 변경 필요', '이중클랜·부계 금지', '지인 동반 가입 가능'].map((v) => ( ))}
{/* 모집 안내 */}
모집 안내