메시지 관련 수정 및 가입 페이지 헤더 비노출 처리

This commit is contained in:
Kang Jung Kyo 2024-09-10 17:56:20 +09:00
parent 3b2a756389
commit 8c31a6e3fa
6 changed files with 161 additions and 53 deletions

View File

@ -1,17 +1,17 @@
'use client'
import { useI18n } from '@/locales/client'
import { useMessage } from '@/hooks/useMessage'
export default function CompletePage() {
const t = useI18n()
const { getMessage } = useMessage()
return (
<>
<div className="flex min-h-full flex-1 flex-col justify-center px-6 py-12 lg:px-8">
<h1 className="text-center text-4xl font-bold mb-10">{t('join.complete.title')}</h1>
<div className="mt-10 mb-10 w-full text-center text-2xl">{t('join.complete.contents')}</div>
<h1 className="text-center text-4xl font-bold mb-10">{getMessage('join.complete.title')}</h1>
<div className="mt-10 mb-10 w-full text-center text-2xl">{getMessage('join.complete.contents')}</div>
<div className="mt-10 w-full text-center">
{t('join.complete.email_comment')} :&nbsp;{t('join.complete.email')}
{getMessage('join.complete.email_comment')} :&nbsp;{getMessage('join.complete.email')}
</div>
</div>
</>

View File

@ -2,10 +2,10 @@
import { post } from '@/lib/Axios'
import { redirect } from 'next/navigation'
import { useI18n } from '@/locales/client'
import { useMessage } from '@/hooks/useMessage'
export default function Join() {
const t = useI18n()
const { getMessage } = useMessage()
const joinProcess = async (formData) => {
const param = {
@ -48,11 +48,11 @@ export default function Join() {
return (
<div className="flex min-h-full flex-1 flex-col justify-center px-6 py-12 lg:px-8">
<h1 className="text-center text-4xl font-bold">{t('join.title')}</h1>
<h1 className="text-center text-4xl font-bold">{getMessage('join.title')}</h1>
<form action={joinProcess}>
<div className="mt-10">
<div>
{t('join.sub1.title')} (*{t('common.require')}) <span>{t('join.sub1.comment')}</span>
{getMessage('join.sub1.title')} (*{getMessage('common.require')}) <span>{getMessage('join.sub1.comment')}</span>
</div>
<table className="w-full">
<colgroup>
@ -61,21 +61,21 @@ export default function Join() {
</colgroup>
<tbody>
<tr>
<th style={{ border: '1px solid gray', padding: '5px' }}>{t('join.sub1.storeQcastNm')} *</th>
<th style={{ border: '1px solid gray', padding: '5px' }}>{getMessage('join.sub1.storeQcastNm')} *</th>
<td style={{ border: '1px solid gray', padding: '5px' }}>
<input
type="text"
id="storeQcastNm"
name="storeQcastNm"
required
alt={t('join.sub1.storeQcastNm')}
alt={getMessage('join.sub1.storeQcastNm')}
className="block w-full border-0 py-1.5 ring-1 ring-inset ring-gray-300"
placeholder={t('join.sub1.storeQcastNm_placeholder')}
placeholder={getMessage('join.sub1.storeQcastNm_placeholder')}
></input>
</td>
</tr>
<tr>
<th style={{ border: '1px solid gray', padding: '5px' }}>{t('join.sub1.storeQcastNmKana')} *</th>
<th style={{ border: '1px solid gray', padding: '5px' }}>{getMessage('join.sub1.storeQcastNmKana')} *</th>
<td style={{ border: '1px solid gray', padding: '5px' }}>
<input
type="text"
@ -83,13 +83,13 @@ export default function Join() {
name="storeQcastNmKana"
required
className="block w-full border-0 py-1.5 ring-1 ring-inset ring-gray-300"
placeholder={t('join.sub1.storeQcastNmKana_placeholder')}
placeholder={getMessage('join.sub1.storeQcastNmKana_placeholder')}
></input>
</td>
</tr>
<tr>
<th style={{ border: '1px solid gray', padding: '5px' }}>
{t('join.sub1.postCd')}/{t('join.sub1.addr')} *
{getMessage('join.sub1.postCd')}/{getMessage('join.sub1.addr')} *
</th>
<td style={{ border: '1px solid gray', padding: '5px' }}>
<input
@ -98,7 +98,7 @@ export default function Join() {
name="postCd"
required
className="block border-0 py-1.5 ring-1 ring-inset ring-gray-300"
placeholder={t('join.sub1.postCd_placeholder')}
placeholder={getMessage('join.sub1.postCd_placeholder')}
></input>
<input
type="text"
@ -106,12 +106,12 @@ export default function Join() {
name="addr"
required
className="block w-full border-0 py-1.5 ring-1 ring-inset ring-gray-300"
placeholder={t('join.sub1.addr_placeholder')}
placeholder={getMessage('join.sub1.addr_placeholder')}
></input>
</td>
</tr>
<tr>
<th style={{ border: '1px solid gray', padding: '5px' }}>{t('join.sub1.telNo')} *</th>
<th style={{ border: '1px solid gray', padding: '5px' }}>{getMessage('join.sub1.telNo')} *</th>
<td style={{ border: '1px solid gray', padding: '5px' }}>
<input
type="text"
@ -119,12 +119,12 @@ export default function Join() {
name="telNo"
required
className="block w-full border-0 py-1.5 ring-1 ring-inset ring-gray-300"
placeholder={t('join.sub1.telNo_placeholder')}
placeholder={getMessage('join.sub1.telNo_placeholder')}
></input>
</td>
</tr>
<tr>
<th style={{ border: '1px solid gray', padding: '5px' }}>{t('join.sub1.fax')} *</th>
<th style={{ border: '1px solid gray', padding: '5px' }}>{getMessage('join.sub1.fax')} *</th>
<td style={{ border: '1px solid gray', padding: '5px' }}>
<input
type="text"
@ -132,7 +132,7 @@ export default function Join() {
name="fax"
required
className="block w-full border-0 py-1.5 ring-1 ring-inset ring-gray-300"
placeholder={t('join.sub1.fax_placeholder')}
placeholder={getMessage('join.sub1.fax_placeholder')}
></input>
</td>
</tr>
@ -140,7 +140,7 @@ export default function Join() {
</table>
<div className="mt-5">
{t('join.sub2.title')} (*{t('common.require')})
{getMessage('join.sub2.title')} (*{getMessage('common.require')})
</div>
<table className="w-full">
<colgroup>
@ -149,7 +149,7 @@ export default function Join() {
</colgroup>
<tbody>
<tr>
<th style={{ border: '1px solid gray', padding: '5px' }}>{t('join.sub2.userNm')} *</th>
<th style={{ border: '1px solid gray', padding: '5px' }}>{getMessage('join.sub2.userNm')} *</th>
<td style={{ border: '1px solid gray', padding: '5px' }}>
<input
type="text"
@ -161,7 +161,7 @@ export default function Join() {
</td>
</tr>
<tr>
<th style={{ border: '1px solid gray', padding: '5px' }}>{t('join.sub2.userNmKana')} *</th>
<th style={{ border: '1px solid gray', padding: '5px' }}>{getMessage('join.sub2.userNmKana')} *</th>
<td style={{ border: '1px solid gray', padding: '5px' }}>
<input
type="text"
@ -173,7 +173,7 @@ export default function Join() {
</td>
</tr>
<tr>
<th style={{ border: '1px solid gray', padding: '5px' }}>{t('join.sub2.userId')} *</th>
<th style={{ border: '1px solid gray', padding: '5px' }}>{getMessage('join.sub2.userId')} *</th>
<td style={{ border: '1px solid gray', padding: '5px' }}>
<input
type="text"
@ -185,7 +185,7 @@ export default function Join() {
</td>
</tr>
<tr>
<th style={{ border: '1px solid gray', padding: '5px' }}>{t('join.sub2.email')} *</th>
<th style={{ border: '1px solid gray', padding: '5px' }}>{getMessage('join.sub2.email')} *</th>
<td style={{ border: '1px solid gray', padding: '5px' }}>
<input
type="email"
@ -198,7 +198,7 @@ export default function Join() {
</td>
</tr>
<tr>
<th style={{ border: '1px solid gray', padding: '5px' }}>{t('join.sub2.telNo')} *</th>
<th style={{ border: '1px solid gray', padding: '5px' }}>{getMessage('join.sub2.telNo')} *</th>
<td style={{ border: '1px solid gray', padding: '5px' }}>
<input
type="text"
@ -206,12 +206,12 @@ export default function Join() {
name="userTelNo"
required
className="block w-full border-0 py-1.5 ring-1 ring-inset ring-gray-300"
placeholder={t('join.sub2.telNo_placeholder')}
placeholder={getMessage('join.sub2.telNo_placeholder')}
></input>
</td>
</tr>
<tr>
<th style={{ border: '1px solid gray', padding: '5px' }}>{t('join.sub2.fax')} *</th>
<th style={{ border: '1px solid gray', padding: '5px' }}>{getMessage('join.sub2.fax')} *</th>
<td style={{ border: '1px solid gray', padding: '5px' }}>
<input
type="text"
@ -219,12 +219,12 @@ export default function Join() {
name="userFax"
required
className="block w-full border-0 py-1.5 ring-1 ring-inset ring-gray-300"
placeholder={t('join.sub1.fax_placeholder')}
placeholder={getMessage('join.sub1.fax_placeholder')}
></input>
</td>
</tr>
<tr>
<th style={{ border: '1px solid gray', padding: '5px' }}>{t('join.sub2.category')}</th>
<th style={{ border: '1px solid gray', padding: '5px' }}>{getMessage('join.sub2.category')}</th>
<td style={{ border: '1px solid gray', padding: '5px' }}>
<input id="category" name="category" className="block w-full border-0 py-1.5 ring-1 ring-inset ring-gray-300"></input>
</td>
@ -233,7 +233,7 @@ export default function Join() {
</table>
<div className="mt-5">
{t('join.sub3.title')} (*{t('common.require')})
{getMessage('join.sub3.title')} (*{getMessage('common.require')})
</div>
<table className="w-full">
<colgroup>
@ -242,14 +242,14 @@ export default function Join() {
</colgroup>
<tbody>
<tr>
<th style={{ border: '1px solid gray', padding: '5px' }}>{t('join.sub3.qtCompNm')}</th>
<th style={{ border: '1px solid gray', padding: '5px' }}>{getMessage('join.sub3.qtCompNm')}</th>
<td style={{ border: '1px solid gray', padding: '5px' }}>
<input type="text" id="qtCompNm" name="qtCompNm" className="block w-full border-0 py-1.5 ring-1 ring-inset ring-gray-300"></input>
</td>
</tr>
<tr>
<th style={{ border: '1px solid gray', padding: '5px' }}>
{t('join.sub3.qtPostCd')}/{t('join.sub3.qtAddr')}
{getMessage('join.sub3.qtPostCd')}/{getMessage('join.sub3.qtAddr')}
</th>
<td style={{ border: '1px solid gray', padding: '5px' }}>
<input
@ -257,19 +257,19 @@ export default function Join() {
id="qtPostCd"
name="qtPostCd"
className="block border-0 py-1.5 ring-1 ring-inset ring-gray-300"
placeholder={t('join.sub3.qtPostCd_placeholder')}
placeholder={getMessage('join.sub3.qtPostCd_placeholder')}
></input>
<input
type="text"
id="qtAddr"
name="qtAddr"
className="block w-full border-0 py-1.5 ring-1 ring-inset ring-gray-300"
placeholder={t('join.sub3.qtAddr_placeholder')}
placeholder={getMessage('join.sub3.qtAddr_placeholder')}
></input>
</td>
</tr>
<tr>
<th style={{ border: '1px solid gray', padding: '5px' }}>{t('join.sub3.qtEmail')}</th>
<th style={{ border: '1px solid gray', padding: '5px' }}>{getMessage('join.sub3.qtEmail')}</th>
<td style={{ border: '1px solid gray', padding: '5px' }}>
<input
type="email"
@ -281,26 +281,26 @@ export default function Join() {
</td>
</tr>
<tr>
<th style={{ border: '1px solid gray', padding: '5px' }}>{t('join.sub3.qtTelNo')}</th>
<th style={{ border: '1px solid gray', padding: '5px' }}>{getMessage('join.sub3.qtTelNo')}</th>
<td style={{ border: '1px solid gray', padding: '5px' }}>
<input
type="text"
id="qtTelNo"
name="qtTelNo"
className="block w-full border-0 py-1.5 ring-1 ring-inset ring-gray-300"
placeholder={t('join.sub3.qtTelNo_placeholder')}
placeholder={getMessage('join.sub3.qtTelNo_placeholder')}
></input>
</td>
</tr>
<tr>
<th style={{ border: '1px solid gray', padding: '5px' }}>{t('join.sub3.qtFax')}</th>
<th style={{ border: '1px solid gray', padding: '5px' }}>{getMessage('join.sub3.qtFax')}</th>
<td style={{ border: '1px solid gray', padding: '5px' }}>
<input
type="text"
id="qtFax"
name="qtFax"
className="block w-full border-0 py-1.5 ring-1 ring-inset ring-gray-300"
placeholder={t('join.sub3.qtFax_placeholder')}
placeholder={getMessage('join.sub3.qtFax_placeholder')}
></input>
</td>
</tr>
@ -312,7 +312,7 @@ export default function Join() {
type="submit"
className="w-full justify-center rounded-md bg-indigo-600 px-3 py-1.5 text-sm font-semibold leading-6 text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600"
>
{t('join.btn.approval_request')}
{getMessage('join.btn.approval_request')}
</button>
</div>
</form>

View File

@ -3,7 +3,7 @@
import { post, patch } from '@/lib/Axios'
import { setSession } from '@/lib/authActions'
import { redirect } from 'next/navigation'
import { useI18n } from '@/locales/client'
import { useMessage } from '@/hooks/useMessage'
import { Button } from '@nextui-org/react'
import { useRecoilState } from 'recoil'
@ -11,7 +11,7 @@ import { modalContent, modalState } from '@/store/modalAtom'
export default function Login(props) {
const { currentLocale } = props
const t = useI18n()
const { getMessage } = useMessage()
// login process
const loginProcess = async (formData) => {
@ -55,7 +55,7 @@ export default function Login(props) {
await patch({ url: '/api/login/v1.0/user/init-password', data: param }).then((res) => {
if (res) {
if (res.result.resultCode == 'S') {
alert(t('login.init_password.complete_message'))
alert(getMessage('login.init_password.complete_message'))
redirect('/login')
} else {
alert(res.result.resultMsg)
@ -67,8 +67,8 @@ export default function Login(props) {
const initPasswordContent = (
<div className="flex min-h-full flex-1 flex-col justify-center px-6 py-12 lg:px-8">
<form action={initPasswordProcess} className="space-y-6">
<h2 className="text-center text-2xl font-bold leading-9 tracking-tight text-gray-900">{t('login.init_password.title')}</h2>
<h2 className="text-center text-1xl font-bold leading-9 tracking-tight text-gray-900">{t('login.init_password.sub_title')}</h2>
<h2 className="text-center text-2xl font-bold leading-9 tracking-tight text-gray-900">{getMessage('login.init_password.title')}</h2>
<h2 className="text-center text-1xl font-bold leading-9 tracking-tight text-gray-900">{getMessage('login.init_password.sub_title')}</h2>
<div>
<label htmlFor="checkId" className="block text-sm font-medium leading-6 text-gray-900">
ID
@ -102,7 +102,7 @@ export default function Login(props) {
</div>
<p className="mt-5 text-center text-sm text-gray-500">
<Button type="submit" className="font-semibold leading-6 text-indigo-600 hover:text-indigo-500">
{t('login.init_password.btn')}
{getMessage('login.init_password.btn')}
</Button>
</p>
</form>
@ -113,8 +113,8 @@ export default function Login(props) {
<div className="flex flex-col align-center">
<div className="flex min-h-full flex-1 flex-col justify-center px-6 py-12 lg:px-8">
<div className="mt-10 sm:mx-auto sm:w-full sm:max-w-sm">
<h1 className="text-center text-4xl font-bold leading-9 tracking-tight text-gray-900">{t('site.name')}</h1>
<h2 className="mt-5 text-center text-2xl font-bold leading-9 tracking-tight text-gray-900">{t('site.sub_name')}</h2>
<h1 className="text-center text-4xl font-bold leading-9 tracking-tight text-gray-900">{getMessage('site.name')}</h1>
<h2 className="mt-5 text-center text-2xl font-bold leading-9 tracking-tight text-gray-900">{getMessage('site.sub_name')}</h2>
</div>
<div className="mt-5 sm:mx-auto sm:w-full sm:max-w-sm">
@ -158,7 +158,7 @@ export default function Login(props) {
type="submit"
className="mt-10 flex w-full justify-center rounded-md bg-indigo-600 px-3 py-1.5 text-sm font-semibold leading-6 text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600"
>
{t('login.login')}
{getMessage('login')}
</button>
</div>
</form>
@ -171,7 +171,7 @@ export default function Login(props) {
}}
className="font-semibold leading-6 text-indigo-600 hover:text-indigo-500"
>
{t('login.init_password.btn')}
{getMessage('login.init_password.btn')}
</Button>
</p>
</div>

View File

@ -20,7 +20,7 @@ export const ToggleonMouse = (e, act, target) => {
export default function Header() {
const pathName = usePathname()
if (pathName.includes('login')) {
if (pathName.includes('login') || pathName.includes('join')) {
return null
}
const SelectOption = [{ name: 'オンライン保証シ' }, { name: 'ステム' }]

View File

@ -87,6 +87,60 @@
"common.message.writeToConfirm": "作成解除を実行しますか?",
"common.message.password.init.success": "パスワード [{0}] に初期化されました。",
"common.message.no.edit.save": "この文書は変更できません。",
"common.require": "필수",
"site.name": "Q.CAST III",
"site.sub_name": "태양광 발전 시스템 도면관리 사이트",
"login": "로그인",
"login.init_password.btn": "비밀번호 초기화",
"login.init_password.title": "비밀번호 초기화",
"login.init_password.sub_title": "비밀번호를 초기화할 아이디와 이메일 주소를 입력해 주세요.",
"login.init_password.complete_message": "비밀번호가 초기화 되었습니다. 초기화된 비밀번호는 아이디와 같습니다.",
"join.title": "Q.CAST3 로그인ID 발행 신청",
"join.sub1.title": "판매대리점 정보",
"join.sub1.comment": "※ 등록되는 리셀러의 회사 이름을 입력하십시오. (2차점은 「○○판매주식회사(2차점××설비주식회사)」로 기입해 주세요.)",
"join.sub1.storeQcastNm": "판매대리점명",
"join.sub1.storeQcastNm_placeholder": "株式会社エネルギア・ソリューション・アンド・サービス2次店山口住機販売有限会社",
"join.sub1.storeQcastNmKana": "판매대리점명 후리가나",
"join.sub1.storeQcastNmKana_placeholder": "カブシキガイシャエネルギア・ソリューション・アン",
"join.sub1.postCd": "우편번호",
"join.sub1.postCd_placeholder": "숫자 7자리",
"join.sub1.addr": "주소",
"join.sub1.addr_placeholder": "전각50자이내",
"join.sub1.telNo": "전화번호",
"join.sub1.telNo_placeholder": "00-0000-0000",
"join.sub1.fax": "FAX 번호",
"join.sub1.fax_placeholder": "00-0000-0000",
"join.sub2.title": "담당자 정보",
"join.sub2.userNm": "담당자명",
"join.sub2.userNmKana": "담당자명 후리가나",
"join.sub2.userId": "신청 ID",
"join.sub2.email": "이메일 주소",
"join.sub2.telNo": "전화번호",
"join.sub2.telNo_placeholder": "00-0000-0000",
"join.sub2.fax": "FAX 번호",
"join.sub2.fax_placeholder": "00-0000-0000",
"join.sub2.category": "부서명",
"join.sub3.title": "견적서 제출용 회사정보",
"join.sub3.qtCompNm": "회사명",
"join.sub3.qtPostCd": "우편번호",
"join.sub3.qtPostCd_placeholder": "숫자 7자리",
"join.sub3.qtAddr": "주소",
"join.sub3.qtAddr_placeholder": "전각50자이내",
"join.sub3.qtEmail": "이메일 주소",
"join.sub3.qtTelNo": "전화번호",
"join.sub3.qtTelNo_placeholder": "00-0000-0000",
"join.sub3.qtFax": "FAX 번호",
"join.sub3.qtFax_placeholder": "00-0000-0000",
"join.btn.approval_request": "ID 승인요청",
"join.complete.title": "Q.CAST3 로그인ID 발행신청 완료",
"join.complete.contents": "※ 신청한 ID가 승인되면, 담당자 정보에 입력한 이메일 주소로 로그인 관련 안내 메일이 전송됩니다.",
"join.complete.email_comment": "담당자 이메일 주소",
"join.complete.email": "test@naver.com",
"stuff.gridHeader.lastEditDatetime": "갱신일시",
"stuff.gridHeader.objectNo": "물건번호",
"stuff.gridHeader.planTotCnt": "플랜 수",

View File

@ -87,6 +87,60 @@
"common.message.writeToConfirm": "작성 해제를 실행하시겠습니까?",
"common.message.password.init.success": "비밀번호 [{0}]로 초기화 되었습니다.",
"common.message.no.edit.save": "This document cannot be changed.",
"common.require": "필수",
"site.name": "Q.CAST III",
"site.sub_name": "태양광 발전 시스템 도면관리 사이트",
"login": "로그인",
"login.init_password.btn": "비밀번호 초기화",
"login.init_password.title": "비밀번호 초기화",
"login.init_password.sub_title": "비밀번호를 초기화할 아이디와 이메일 주소를 입력해 주세요.",
"login.init_password.complete_message": "비밀번호가 초기화 되었습니다. 초기화된 비밀번호는 아이디와 같습니다.",
"join.title": "Q.CAST3 로그인ID 발행 신청",
"join.sub1.title": "판매대리점 정보",
"join.sub1.comment": "※ 등록되는 리셀러의 회사 이름을 입력하십시오. (2차점은 「○○판매주식회사(2차점××설비주식회사)」로 기입해 주세요.)",
"join.sub1.storeQcastNm": "판매대리점명",
"join.sub1.storeQcastNm_placeholder": "주식회사 에너지 기어 솔루션 앤 서비스 (2차점: 야마구치 주기 판매 유한회사)",
"join.sub1.storeQcastNmKana": "판매대리점명 후리가나",
"join.sub1.storeQcastNmKana_placeholder": "주식회사 에너지 기어 솔루션",
"join.sub1.postCd": "우편번호",
"join.sub1.postCd_placeholder": "숫자 7자리",
"join.sub1.addr": "주소",
"join.sub1.addr_placeholder": "전각50자이내",
"join.sub1.telNo": "전화번호",
"join.sub1.telNo_placeholder": "00-0000-0000",
"join.sub1.fax": "FAX 번호",
"join.sub1.fax_placeholder": "00-0000-0000",
"join.sub2.title": "담당자 정보",
"join.sub2.userNm": "담당자명",
"join.sub2.userNmKana": "담당자명 후리가나",
"join.sub2.userId": "신청 ID",
"join.sub2.email": "이메일 주소",
"join.sub2.telNo": "전화번호",
"join.sub2.telNo_placeholder": "00-0000-0000",
"join.sub2.fax": "FAX 번호",
"join.sub2.fax_placeholder": "00-0000-0000",
"join.sub2.category": "부서명",
"join.sub3.title": "견적서 제출용 회사정보",
"join.sub3.qtCompNm": "회사명",
"join.sub3.qtPostCd": "우편번호",
"join.sub3.qtPostCd_placeholder": "숫자 7자리",
"join.sub3.qtAddr": "주소",
"join.sub3.qtAddr_placeholder": "전각50자이내",
"join.sub3.qtEmail": "이메일 주소",
"join.sub3.qtTelNo": "전화번호",
"join.sub3.qtTelNo_placeholder": "00-0000-0000",
"join.sub3.qtFax": "FAX 번호",
"join.sub3.qtFax_placeholder": "00-0000-0000",
"join.btn.approval_request": "ID 승인요청",
"join.complete.title": "Q.CAST3 로그인ID 발행신청 완료",
"join.complete.contents": "※ 신청한 ID가 승인되면, 담당자 정보에 입력한 이메일 주소로 로그인 관련 안내 메일이 전송됩니다.",
"join.complete.email_comment": "담당자 이메일 주소",
"join.complete.email": "test@naver.com",
"stuff.gridHeader.lastEditDatetime": "갱신일시",
"stuff.gridHeader.objectNo": "물건번호",
"stuff.gridHeader.planTotCnt": "플랜 수",