Merge branch 'dev' of https://git.jetbrains.space/nalpari/q-cast-iii/qcast-front into dev
This commit is contained in:
commit
f7d0971792
@ -28,6 +28,7 @@
|
|||||||
"react-draggable": "^4.4.6",
|
"react-draggable": "^4.4.6",
|
||||||
"react-hook-form": "^7.53.0",
|
"react-hook-form": "^7.53.0",
|
||||||
"react-icons": "^5.3.0",
|
"react-icons": "^5.3.0",
|
||||||
|
"react-loading-skeleton": "^3.5.0",
|
||||||
"react-responsive-modal": "^6.4.2",
|
"react-responsive-modal": "^6.4.2",
|
||||||
"recoil": "^0.7.7",
|
"recoil": "^0.7.7",
|
||||||
"sweetalert2": "^11.14.1",
|
"sweetalert2": "^11.14.1",
|
||||||
|
|||||||
@ -132,39 +132,41 @@ export default function Join() {
|
|||||||
const formData = new FormData(e.target)
|
const formData = new FormData(e.target)
|
||||||
|
|
||||||
if (joinValidation(formData)) {
|
if (joinValidation(formData)) {
|
||||||
const param = {
|
if (confirm(getMessage('join.complete.save.confirm'))) {
|
||||||
storeQcastNm: formData.get('storeQcastNm'),
|
const param = {
|
||||||
storeQcastNmKana: formData.get('storeQcastNmKana'),
|
storeQcastNm: formData.get('storeQcastNm'),
|
||||||
postCd: formData.get('postCd'),
|
storeQcastNmKana: formData.get('storeQcastNmKana'),
|
||||||
addr: formData.get('addr'),
|
postCd: formData.get('postCd'),
|
||||||
telNo: formData.get('telNo'),
|
addr: formData.get('addr'),
|
||||||
fax: formData.get('fax'),
|
telNo: formData.get('telNo'),
|
||||||
bizNo: formData.get('bizNo'),
|
fax: formData.get('fax'),
|
||||||
userInfo: {
|
bizNo: formData.get('bizNo'),
|
||||||
userId: formData.get('userId'),
|
userInfo: {
|
||||||
userNm: formData.get('userNm'),
|
userId: formData.get('userId'),
|
||||||
userNmKana: formData.get('userNmKana'),
|
userNm: formData.get('userNm'),
|
||||||
telNo: formData.get('userTelNo'),
|
userNmKana: formData.get('userNmKana'),
|
||||||
fax: formData.get('userFax'),
|
telNo: formData.get('userTelNo'),
|
||||||
email: formData.get('email'),
|
fax: formData.get('userFax'),
|
||||||
category: formData.get('category'),
|
email: formData.get('email'),
|
||||||
},
|
category: formData.get('category'),
|
||||||
}
|
},
|
||||||
|
}
|
||||||
|
|
||||||
await promisePost({ url: '/api/login/v1.0/user/join', data: param })
|
await promisePost({ url: '/api/login/v1.0/user/join', data: param })
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
if (res) {
|
if (res) {
|
||||||
if (res.data.result.resultCode == 'S') {
|
if (res.data.result.resultCode == 'S') {
|
||||||
Cookies.set('joinEmail', formData.get('email'), { expires: 1 })
|
Cookies.set('joinEmail', formData.get('email'), { expires: 1 })
|
||||||
router.push('/join/complete')
|
router.push('/join/complete')
|
||||||
} else {
|
} else {
|
||||||
alert(res.data.result.resultMsg)
|
alert(res.data.result.resultMsg)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
})
|
||||||
})
|
.catch((error) => {
|
||||||
.catch((error) => {
|
alert(error.response.data.message)
|
||||||
alert(error.response.data.message)
|
})
|
||||||
})
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -9,6 +9,7 @@ import { useRouter } from 'next/navigation'
|
|||||||
import { globalLocaleStore } from '@/store/localeAtom'
|
import { globalLocaleStore } from '@/store/localeAtom'
|
||||||
import { queryStringFormatter } from '@/util/common-utils'
|
import { queryStringFormatter } from '@/util/common-utils'
|
||||||
import { sessionStore } from '@/store/commonAtom'
|
import { sessionStore } from '@/store/commonAtom'
|
||||||
|
import MainSkeleton from '../ui/MainSkeleton'
|
||||||
|
|
||||||
export default function MainContents() {
|
export default function MainContents() {
|
||||||
const { getMessage } = useMessage()
|
const { getMessage } = useMessage()
|
||||||
@ -109,30 +110,34 @@ export default function MainContents() {
|
|||||||
<div className="main-product-list-wrap">
|
<div className="main-product-list-wrap">
|
||||||
<div className="main-product-list">
|
<div className="main-product-list">
|
||||||
<ProductItem num={1} name={getMessage('main.content.objectList')}>
|
<ProductItem num={1} name={getMessage('main.content.objectList')}>
|
||||||
<ul className="recently-list">
|
{objectList.length > 0 ? (
|
||||||
{objectList.map((row) => {
|
<ul className="recently-list">
|
||||||
return (
|
{objectList.map((row) => {
|
||||||
<li
|
return (
|
||||||
key={row.objectNo}
|
<li
|
||||||
className="recently-item"
|
key={row.objectNo}
|
||||||
onClick={() => {
|
className="recently-item"
|
||||||
if (row.objectNo.substring(0, 1) === 'R') {
|
onClick={() => {
|
||||||
router.push(`/management/stuff/detail?objectNo=${row.objectNo.toString()}`)
|
if (row.objectNo.substring(0, 1) === 'R') {
|
||||||
} else {
|
router.push(`/management/stuff/detail?objectNo=${row.objectNo.toString()}`)
|
||||||
router.push(`/management/stuff/tempdetail?objectNo=${row.objectNo.toString()}`)
|
} else {
|
||||||
}
|
router.push(`/management/stuff/tempdetail?objectNo=${row.objectNo.toString()}`)
|
||||||
}}
|
}
|
||||||
>
|
}}
|
||||||
<div className="item-inner">
|
>
|
||||||
<span className="time">{dayjs(row.lastEditDatetime).format('YYYY.MM.DD HH:mm:ss')}</span>
|
<div className="item-inner">
|
||||||
<span>{row.objectNo}</span>
|
<span className="time">{dayjs(row.lastEditDatetime).format('YYYY.MM.DD HH:mm:ss')}</span>
|
||||||
<span>{row.objectName}</span>
|
<span>{row.objectNo}</span>
|
||||||
<span>{row.saleStoreName}</span>
|
<span>{row.objectName}</span>
|
||||||
</div>
|
<span>{row.saleStoreName}</span>
|
||||||
</li>
|
</div>
|
||||||
)
|
</li>
|
||||||
})}
|
)
|
||||||
</ul>
|
})}
|
||||||
|
</ul>
|
||||||
|
) : (
|
||||||
|
<MainSkeleton />
|
||||||
|
)}
|
||||||
</ProductItem>
|
</ProductItem>
|
||||||
<ProductItem num={2} name={getMessage('main.content.notice')}>
|
<ProductItem num={2} name={getMessage('main.content.notice')}>
|
||||||
<div className="notice-box">
|
<div className="notice-box">
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
import React, { useState, useEffect, useRef } from 'react'
|
import React, { useState, useEffect, useRef } from 'react'
|
||||||
import { useRouter, useSearchParams, usePathname } from 'next/navigation'
|
import { useRouter, useSearchParams, usePathname } from 'next/navigation'
|
||||||
import { Button } from '@nextui-org/react'
|
import { Button } from '@nextui-org/react'
|
||||||
import Select from 'react-select'
|
import Select, { components } from 'react-select'
|
||||||
import Link from 'next/link'
|
import Link from 'next/link'
|
||||||
import { useAxios } from '@/hooks/useAxios'
|
import { useAxios } from '@/hooks/useAxios'
|
||||||
import { globalLocaleStore } from '@/store/localeAtom'
|
import { globalLocaleStore } from '@/store/localeAtom'
|
||||||
@ -19,6 +19,13 @@ import { useCommonCode } from '@/hooks/common/useCommonCode'
|
|||||||
import StuffPlanQGrid from './StuffPlanQGrid'
|
import StuffPlanQGrid from './StuffPlanQGrid'
|
||||||
|
|
||||||
export default function StuffDetail() {
|
export default function StuffDetail() {
|
||||||
|
const inputReceiveUserEl = useRef(null) //담당자ref
|
||||||
|
const inputObjectNameEl = useRef(null) //물건명ref
|
||||||
|
const inputZipNoEl = useRef(null) //우편번호ref
|
||||||
|
const inputAddressEl = useRef(null) //주소ref
|
||||||
|
const inputVerticalSnowCoverEl = useRef(null) //수직적설량ref
|
||||||
|
const inputInstallHeightEl = useRef(null) //설치높이ref
|
||||||
|
|
||||||
//공통코드
|
//공통코드
|
||||||
const { commonCode, findCommonCode } = useCommonCode()
|
const { commonCode, findCommonCode } = useCommonCode()
|
||||||
const [selOptions, setSelOptions] = useState('') //선택한 1차점
|
const [selOptions, setSelOptions] = useState('') //선택한 1차점
|
||||||
@ -54,7 +61,7 @@ export default function StuffDetail() {
|
|||||||
address: '', //주소
|
address: '', //주소
|
||||||
areaId: '', //발전량시뮬레이션지역id
|
areaId: '', //발전량시뮬레이션지역id
|
||||||
standardWindSpeedId: '', //기준풍속
|
standardWindSpeedId: '', //기준풍속
|
||||||
verticalSnowCover: '', //수직적설량NEW
|
verticalSnowCover: '', //수직적설량
|
||||||
coldRegionFlg: false, //한랭지대책시행(true : 1 / false : 0)
|
coldRegionFlg: false, //한랭지대책시행(true : 1 / false : 0)
|
||||||
surfaceType: 'III・IV', //면조도구분(III・IV / Ⅱ)
|
surfaceType: 'III・IV', //면조도구분(III・IV / Ⅱ)
|
||||||
saltAreaFlg: false, //염해지역용아이템사용 (true : 1 / false : 0)
|
saltAreaFlg: false, //염해지역용아이템사용 (true : 1 / false : 0)
|
||||||
@ -890,6 +897,7 @@ export default function StuffDetail() {
|
|||||||
form.setValue('areaName', e.prefName)
|
form.setValue('areaName', e.prefName)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 저장
|
||||||
const onValid = async () => {
|
const onValid = async () => {
|
||||||
const formData = form.getValues()
|
const formData = form.getValues()
|
||||||
|
|
||||||
@ -899,11 +907,13 @@ export default function StuffDetail() {
|
|||||||
if (!formData.receiveUser || formData.receiveUser.trim().length === 0) {
|
if (!formData.receiveUser || formData.receiveUser.trim().length === 0) {
|
||||||
fieldNm = getMessage('stuff.detail.receiveUser')
|
fieldNm = getMessage('stuff.detail.receiveUser')
|
||||||
errors = fieldNm
|
errors = fieldNm
|
||||||
|
inputReceiveUserEl.current.focus()
|
||||||
}
|
}
|
||||||
//물건명
|
//물건명
|
||||||
if (!formData.objectName || formData.objectName.trim().length === 0) {
|
if (!formData.objectName || formData.objectName.trim().length === 0) {
|
||||||
fieldNm = getMessage('stuff.detail.objectStatusId')
|
fieldNm = getMessage('stuff.detail.objectStatusId')
|
||||||
errors = fieldNm
|
errors = fieldNm
|
||||||
|
inputObjectNameEl.current.focus()
|
||||||
}
|
}
|
||||||
//경칭
|
//경칭
|
||||||
if (!formData.objectNameOmit) {
|
if (!formData.objectNameOmit) {
|
||||||
@ -919,11 +929,13 @@ export default function StuffDetail() {
|
|||||||
if (!formData.zipNo) {
|
if (!formData.zipNo) {
|
||||||
fieldNm = getMessage('stuff.detail.zipNo')
|
fieldNm = getMessage('stuff.detail.zipNo')
|
||||||
errors = fieldNm
|
errors = fieldNm
|
||||||
|
inputZipNoEl.current.focus()
|
||||||
}
|
}
|
||||||
//주소
|
//주소
|
||||||
if (!formData.address) {
|
if (!formData.address) {
|
||||||
fieldNm = getMessage('stuff.detail.address')
|
fieldNm = getMessage('stuff.detail.address')
|
||||||
errors = fieldNm
|
errors = fieldNm
|
||||||
|
inputAddressEl.current.focus()
|
||||||
}
|
}
|
||||||
//도도부현
|
//도도부현
|
||||||
if (!formData.prefId || formData.prefId === '0') {
|
if (!formData.prefId || formData.prefId === '0') {
|
||||||
@ -944,6 +956,7 @@ export default function StuffDetail() {
|
|||||||
if (!formData.verticalSnowCover) {
|
if (!formData.verticalSnowCover) {
|
||||||
fieldNm = getMessage('stuff.detail.verticalSnowCover')
|
fieldNm = getMessage('stuff.detail.verticalSnowCover')
|
||||||
errors = fieldNm
|
errors = fieldNm
|
||||||
|
inputVerticalSnowCoverEl.current.focus()
|
||||||
}
|
}
|
||||||
|
|
||||||
//면조도구분
|
//면조도구분
|
||||||
@ -955,10 +968,9 @@ export default function StuffDetail() {
|
|||||||
if (!formData.installHeight) {
|
if (!formData.installHeight) {
|
||||||
fieldNm = getMessage('stuff.detail.installHeight')
|
fieldNm = getMessage('stuff.detail.installHeight')
|
||||||
errors = fieldNm
|
errors = fieldNm
|
||||||
|
inputInstallHeightEl.current.focus()
|
||||||
}
|
}
|
||||||
|
|
||||||
//계약조건
|
|
||||||
|
|
||||||
if (Object.keys(errors).length > 0) {
|
if (Object.keys(errors).length > 0) {
|
||||||
return alert(getMessage('stuff.detail.save.valierror3', [errors]))
|
return alert(getMessage('stuff.detail.save.valierror3', [errors]))
|
||||||
}
|
}
|
||||||
@ -1110,6 +1122,7 @@ export default function StuffDetail() {
|
|||||||
workName: null,
|
workName: null,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return
|
||||||
//1차점 or 2차점 안고르고 임시저장하면
|
//1차점 or 2차점 안고르고 임시저장하면
|
||||||
if (params.saleStoreId == '') {
|
if (params.saleStoreId == '') {
|
||||||
params.saleStoreId = sessionState.storeId
|
params.saleStoreId = sessionState.storeId
|
||||||
@ -1125,6 +1138,7 @@ export default function StuffDetail() {
|
|||||||
if (height === '0') {
|
if (height === '0') {
|
||||||
return alert(getMessage('stuff.detail.save.valierror2'))
|
return alert(getMessage('stuff.detail.save.valierror2'))
|
||||||
}
|
}
|
||||||
|
|
||||||
await promisePost({ url: '/api/object/save-object', data: params }).then((res) => {
|
await promisePost({ url: '/api/object/save-object', data: params }).then((res) => {
|
||||||
if (res.status === 201) {
|
if (res.status === 201) {
|
||||||
alert(getMessage('stuff.detail.tempSave.message1'))
|
alert(getMessage('stuff.detail.tempSave.message1'))
|
||||||
@ -1153,6 +1167,17 @@ export default function StuffDetail() {
|
|||||||
input.value = input.value.replace(/[^0-9]/g, '')
|
input.value = input.value.replace(/[^0-9]/g, '')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//자동완성 옵션 없을때 메세지 컴포넌트..
|
||||||
|
const NoOptionsMessage = (props) => {
|
||||||
|
return (
|
||||||
|
<components.NoOptionsMessage {...props}>
|
||||||
|
<span style={{ background: 'red' }} className="custom-css-class">
|
||||||
|
TEXTTTTTTT
|
||||||
|
</span>
|
||||||
|
</components.NoOptionsMessage>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
{(editMode === 'NEW' && (
|
{(editMode === 'NEW' && (
|
||||||
@ -1186,7 +1211,7 @@ export default function StuffDetail() {
|
|||||||
)) ||
|
)) ||
|
||||||
null}
|
null}
|
||||||
</div>
|
</div>
|
||||||
<Button className="btn-origin grey" onClick={onSearchDesignRequestPopOpen}>
|
<Button className="btn-origin grey" onPress={onSearchDesignRequestPopOpen}>
|
||||||
{getMessage('stuff.planReqPopup.title')}
|
{getMessage('stuff.planReqPopup.title')}
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
@ -1198,7 +1223,7 @@ export default function StuffDetail() {
|
|||||||
</th>
|
</th>
|
||||||
<td>
|
<td>
|
||||||
<div className="input-wrap" style={{ width: '500px' }}>
|
<div className="input-wrap" style={{ width: '500px' }}>
|
||||||
<input type="text" className="input-light" {...form.register('receiveUser')} />
|
<input type="text" className="input-light" {...form.register('receiveUser')} ref={inputReceiveUserEl} />
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@ -1227,7 +1252,7 @@ export default function StuffDetail() {
|
|||||||
})}
|
})}
|
||||||
{/* 라디오끝 */}
|
{/* 라디오끝 */}
|
||||||
<div className="input-wrap mr5" style={{ width: '545px' }}>
|
<div className="input-wrap mr5" style={{ width: '545px' }}>
|
||||||
<input type="text" className="input-light" {...form.register('objectName')} />
|
<input type="text" className="input-light" {...form.register('objectName')} ref={inputObjectNameEl} />
|
||||||
</div>
|
</div>
|
||||||
<div className="select-wrap" style={{ width: '120px' }}>
|
<div className="select-wrap" style={{ width: '120px' }}>
|
||||||
<Select
|
<Select
|
||||||
@ -1317,6 +1342,7 @@ export default function StuffDetail() {
|
|||||||
<div className="select-wrap mr5" style={{ width: '567px' }}>
|
<div className="select-wrap mr5" style={{ width: '567px' }}>
|
||||||
<Select
|
<Select
|
||||||
id="long-value-select2"
|
id="long-value-select2"
|
||||||
|
// components={{ NoOptionsMessage }}
|
||||||
instanceId="long-value-select2"
|
instanceId="long-value-select2"
|
||||||
className="react-select-custom"
|
className="react-select-custom"
|
||||||
classNamePrefix="custom"
|
classNamePrefix="custom"
|
||||||
@ -1352,9 +1378,9 @@ export default function StuffDetail() {
|
|||||||
<td>
|
<td>
|
||||||
<div className="flx-box">
|
<div className="flx-box">
|
||||||
<div className="input-wrap mr5" style={{ width: '200px' }}>
|
<div className="input-wrap mr5" style={{ width: '200px' }}>
|
||||||
<input type="text" className="input-light" disabled value={form.watch('zipNo') || ''} />
|
<input type="text" className="input-light" disabled value={form.watch('zipNo') || ''} ref={inputZipNoEl} />
|
||||||
</div>
|
</div>
|
||||||
<Button className="btn-origin grey" onClick={onSearchPostNumberPopOpen}>
|
<Button className="btn-origin grey" onPress={onSearchPostNumberPopOpen}>
|
||||||
{getMessage('stuff.detail.btn.addressPop')}
|
{getMessage('stuff.detail.btn.addressPop')}
|
||||||
</Button>
|
</Button>
|
||||||
<div className="guide">{getMessage('stuff.detail.btn.addressPop.guide')}</div>
|
<div className="guide">{getMessage('stuff.detail.btn.addressPop.guide')}</div>
|
||||||
@ -1368,7 +1394,7 @@ export default function StuffDetail() {
|
|||||||
</th>
|
</th>
|
||||||
<td>
|
<td>
|
||||||
<div className="flx-box">
|
<div className="flx-box">
|
||||||
<div className="select-wrap" style={{ width: '200px' }}>
|
<div className="select-wrap mr5" style={{ width: '200px' }}>
|
||||||
{prefCodeList?.length > 0 && (
|
{prefCodeList?.length > 0 && (
|
||||||
<Select
|
<Select
|
||||||
id="long-value-select3"
|
id="long-value-select3"
|
||||||
@ -1388,7 +1414,13 @@ export default function StuffDetail() {
|
|||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
<div className="input-wrap mr5" style={{ width: '580px' }}>
|
<div className="input-wrap mr5" style={{ width: '580px' }}>
|
||||||
<input type="text" className="input-light" value={form.watch('address') || ''} {...form.register('address')} />
|
<input
|
||||||
|
type="text"
|
||||||
|
className="input-light"
|
||||||
|
value={form.watch('address') || ''}
|
||||||
|
{...form.register('address')}
|
||||||
|
ref={inputAddressEl}
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
@ -1444,7 +1476,7 @@ export default function StuffDetail() {
|
|||||||
></Select>
|
></Select>
|
||||||
</div>
|
</div>
|
||||||
<span className="mr10">{getMessage('stuff.detail.standardWindSpeedIdSpan')}</span>
|
<span className="mr10">{getMessage('stuff.detail.standardWindSpeedIdSpan')}</span>
|
||||||
<Button type="button" className="btn-origin grey" onClick={onSearchWindSpeedPopOpen}>
|
<Button type="button" className="btn-origin grey" onPress={onSearchWindSpeedPopOpen}>
|
||||||
{getMessage('stuff.detail.btn.windSpeedPop')}
|
{getMessage('stuff.detail.btn.windSpeedPop')}
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
@ -1463,6 +1495,7 @@ export default function StuffDetail() {
|
|||||||
onKeyUp={handleKeyUp}
|
onKeyUp={handleKeyUp}
|
||||||
value={form.watch('verticalSnowCover') || ''}
|
value={form.watch('verticalSnowCover') || ''}
|
||||||
{...register('verticalSnowCover')}
|
{...register('verticalSnowCover')}
|
||||||
|
ref={inputVerticalSnowCoverEl}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<span className="mr10">cm</span>
|
<span className="mr10">cm</span>
|
||||||
@ -1510,6 +1543,7 @@ export default function StuffDetail() {
|
|||||||
onKeyUp={handleKeyUp}
|
onKeyUp={handleKeyUp}
|
||||||
value={form.watch('installHeight') || ''}
|
value={form.watch('installHeight') || ''}
|
||||||
{...register('installHeight')}
|
{...register('installHeight')}
|
||||||
|
ref={inputInstallHeightEl}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<span>m</span>
|
<span>m</span>
|
||||||
@ -1544,7 +1578,7 @@ export default function StuffDetail() {
|
|||||||
</div>
|
</div>
|
||||||
<div className="sub-right-footer">
|
<div className="sub-right-footer">
|
||||||
{!isFormValid ? (
|
{!isFormValid ? (
|
||||||
<Button className="btn-origin grey mr5" onClick={onTempSave}>
|
<Button className="btn-origin grey mr5" onPress={onTempSave}>
|
||||||
{getMessage('stuff.detail.btn.tempSave')}
|
{getMessage('stuff.detail.btn.tempSave')}
|
||||||
</Button>
|
</Button>
|
||||||
) : (
|
) : (
|
||||||
@ -1595,7 +1629,7 @@ export default function StuffDetail() {
|
|||||||
{/* {detailData?.tempFlg === '1' ? ( */}
|
{/* {detailData?.tempFlg === '1' ? ( */}
|
||||||
{objectNo.substring(0, 1) === 'T' ? (
|
{objectNo.substring(0, 1) === 'T' ? (
|
||||||
<>
|
<>
|
||||||
<Button className="btn-origin grey" onClick={onSearchDesignRequestPopOpen}>
|
<Button className="btn-origin grey" onPress={onSearchDesignRequestPopOpen}>
|
||||||
{getMessage('stuff.planReqPopup.title')}
|
{getMessage('stuff.planReqPopup.title')}
|
||||||
</Button>
|
</Button>
|
||||||
</>
|
</>
|
||||||
@ -1609,7 +1643,13 @@ export default function StuffDetail() {
|
|||||||
</th>
|
</th>
|
||||||
<td>
|
<td>
|
||||||
<div className="input-wrap" style={{ width: '500px' }}>
|
<div className="input-wrap" style={{ width: '500px' }}>
|
||||||
<input type="text" className="input-light" {...form.register('receiveUser')} value={form.watch('receiveUser') || ''} />
|
<input
|
||||||
|
type="text"
|
||||||
|
className="input-light"
|
||||||
|
{...form.register('receiveUser')}
|
||||||
|
value={form.watch('receiveUser') || ''}
|
||||||
|
ref={inputReceiveUserEl}
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@ -1638,7 +1678,7 @@ export default function StuffDetail() {
|
|||||||
})}
|
})}
|
||||||
{/* 상세라디오끝 */}
|
{/* 상세라디오끝 */}
|
||||||
<div className="input-wrap mr5" style={{ width: '545px' }}>
|
<div className="input-wrap mr5" style={{ width: '545px' }}>
|
||||||
<input type="text" className="input-light" {...form.register('objectName')} />
|
<input type="text" className="input-light" {...form.register('objectName')} ref={inputObjectNameEl} />
|
||||||
</div>
|
</div>
|
||||||
<div className="select-wrap" style={{ width: '120px' }}>
|
<div className="select-wrap" style={{ width: '120px' }}>
|
||||||
<Select
|
<Select
|
||||||
@ -1763,9 +1803,9 @@ export default function StuffDetail() {
|
|||||||
<td>
|
<td>
|
||||||
<div className="flx-box">
|
<div className="flx-box">
|
||||||
<div className="input-wrap mr5" style={{ width: '200px' }}>
|
<div className="input-wrap mr5" style={{ width: '200px' }}>
|
||||||
<input type="text" className="input-light" disabled value={form.watch('zipNo') || ''} />
|
<input type="text" className="input-light" disabled value={form.watch('zipNo') || ''} ref={inputZipNoEl} />
|
||||||
</div>
|
</div>
|
||||||
<Button className="btn-origin grey" onClick={onSearchPostNumberPopOpen}>
|
<Button className="btn-origin grey" onPress={onSearchPostNumberPopOpen}>
|
||||||
{getMessage('stuff.detail.btn.addressPop')}
|
{getMessage('stuff.detail.btn.addressPop')}
|
||||||
</Button>
|
</Button>
|
||||||
<div className="guide">{getMessage('stuff.detail.btn.addressPop.guide')}</div>
|
<div className="guide">{getMessage('stuff.detail.btn.addressPop.guide')}</div>
|
||||||
@ -1780,7 +1820,7 @@ export default function StuffDetail() {
|
|||||||
</th>
|
</th>
|
||||||
<td>
|
<td>
|
||||||
<div className="flx-box">
|
<div className="flx-box">
|
||||||
<div className="select-wrap" style={{ width: '200px' }}>
|
<div className="select-wrap mr5" style={{ width: '200px' }}>
|
||||||
{prefCodeList?.length > 0 && (
|
{prefCodeList?.length > 0 && (
|
||||||
<Select
|
<Select
|
||||||
id="long-value-select3"
|
id="long-value-select3"
|
||||||
@ -1800,7 +1840,13 @@ export default function StuffDetail() {
|
|||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
<div className="input-wrap mr5" style={{ width: '580px' }}>
|
<div className="input-wrap mr5" style={{ width: '580px' }}>
|
||||||
<input type="text" className="input-light" value={form.watch('address') || ''} {...form.register('address')} />
|
<input
|
||||||
|
type="text"
|
||||||
|
className="input-light"
|
||||||
|
value={form.watch('address') || ''}
|
||||||
|
{...form.register('address')}
|
||||||
|
ref={inputAddressEl}
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
@ -1860,7 +1906,7 @@ export default function StuffDetail() {
|
|||||||
></Select>
|
></Select>
|
||||||
</div>
|
</div>
|
||||||
<span className="mr10">{getMessage('stuff.detail.standardWindSpeedIdSpan')}</span>
|
<span className="mr10">{getMessage('stuff.detail.standardWindSpeedIdSpan')}</span>
|
||||||
<Button type="button" className="btn-origin grey" onClick={onSearchWindSpeedPopOpen}>
|
<Button type="button" className="btn-origin grey" onPress={onSearchWindSpeedPopOpen}>
|
||||||
{getMessage('stuff.detail.btn.windSpeedPop')}
|
{getMessage('stuff.detail.btn.windSpeedPop')}
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
@ -1881,6 +1927,7 @@ export default function StuffDetail() {
|
|||||||
onKeyUp={handleKeyUp}
|
onKeyUp={handleKeyUp}
|
||||||
value={form.watch('verticalSnowCover') || ''}
|
value={form.watch('verticalSnowCover') || ''}
|
||||||
{...register('verticalSnowCover')}
|
{...register('verticalSnowCover')}
|
||||||
|
ref={inputVerticalSnowCoverEl}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<span className="mr10">cm</span>
|
<span className="mr10">cm</span>
|
||||||
@ -1932,6 +1979,7 @@ export default function StuffDetail() {
|
|||||||
onKeyUp={handleKeyUp}
|
onKeyUp={handleKeyUp}
|
||||||
value={form.watch('installHeight') || ''}
|
value={form.watch('installHeight') || ''}
|
||||||
{...register('installHeight')}
|
{...register('installHeight')}
|
||||||
|
ref={inputInstallHeightEl}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<span>m</span>
|
<span>m</span>
|
||||||
@ -2005,13 +2053,13 @@ export default function StuffDetail() {
|
|||||||
<div className="sub-right-footer">
|
<div className="sub-right-footer">
|
||||||
<Link href="/management/stuff" scroll={false}>
|
<Link href="/management/stuff" scroll={false}>
|
||||||
<button type="button" className="btn-origin grey mr5">
|
<button type="button" className="btn-origin grey mr5">
|
||||||
R상세: {getMessage('stuff.detail.btn.moveList')}
|
{getMessage('stuff.detail.btn.moveList')}
|
||||||
</button>
|
</button>
|
||||||
</Link>
|
</Link>
|
||||||
<Button type="submit" className="btn-origin navy mr5">
|
<Button type="submit" className="btn-origin navy mr5">
|
||||||
R상세:{getMessage('stuff.detail.btn.save')}
|
{getMessage('stuff.detail.btn.save')}
|
||||||
</Button>
|
</Button>
|
||||||
<Button type="button" className="btn-origin grey" onClick={onDelete}>
|
<Button type="button" className="btn-origin grey" onPress={onDelete}>
|
||||||
{getMessage('stuff.detail.btn.delete')}
|
{getMessage('stuff.detail.btn.delete')}
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
@ -2020,17 +2068,17 @@ export default function StuffDetail() {
|
|||||||
<>
|
<>
|
||||||
<div className="sub-right-footer">
|
<div className="sub-right-footer">
|
||||||
{!isFormValid ? (
|
{!isFormValid ? (
|
||||||
<Button className="btn-origin grey mr5" onClick={onTempSave}>
|
<Button className="btn-origin grey mr5" onPress={onTempSave}>
|
||||||
TEMP상세:{getMessage('stuff.detail.btn.tempSave')}
|
{getMessage('stuff.detail.btn.tempSave')}
|
||||||
</Button>
|
</Button>
|
||||||
) : (
|
) : (
|
||||||
<Button type="submit" className="btn-origin navy mr5">
|
<Button type="submit" className="btn-origin navy mr5">
|
||||||
TEMP상세:{getMessage('stuff.detail.btn.save')}
|
{getMessage('stuff.detail.btn.save')}
|
||||||
</Button>
|
</Button>
|
||||||
)}
|
)}
|
||||||
<Link href="/management/stuff" scroll={false}>
|
<Link href="/management/stuff" scroll={false}>
|
||||||
<button type="button" className="btn-origin grey">
|
<button type="button" className="btn-origin grey">
|
||||||
TEMP상세:{getMessage('stuff.detail.btn.moveList')}
|
{getMessage('stuff.detail.btn.moveList')}
|
||||||
</button>
|
</button>
|
||||||
</Link>
|
</Link>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -1,5 +0,0 @@
|
|||||||
import style from '@/components/ui/Loading.module.css'
|
|
||||||
|
|
||||||
export default function Loading() {
|
|
||||||
return <span className={style.loader}></span>
|
|
||||||
}
|
|
||||||
@ -1,35 +0,0 @@
|
|||||||
.loader {
|
|
||||||
position: relative;
|
|
||||||
font-size: 48px;
|
|
||||||
letter-spacing: 6px;
|
|
||||||
}
|
|
||||||
.loader:before {
|
|
||||||
content: 'Loading';
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.loader:after {
|
|
||||||
content: '';
|
|
||||||
width: 20px;
|
|
||||||
height: 20px;
|
|
||||||
background-color: #ff3d00;
|
|
||||||
background-image: radial-gradient(circle 2px, #fff4 100%, transparent 0), radial-gradient(circle 1px, #fff3 100%, transparent 0);
|
|
||||||
background-position:
|
|
||||||
14px -4px,
|
|
||||||
12px -1px;
|
|
||||||
border-radius: 50%;
|
|
||||||
position: absolute;
|
|
||||||
margin: auto;
|
|
||||||
top: -5px;
|
|
||||||
right: 66px;
|
|
||||||
transform-origin: center bottom;
|
|
||||||
animation: fillBaloon 1s ease-in-out infinite alternate;
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes fillBaloon {
|
|
||||||
0% {
|
|
||||||
transform: scale(1);
|
|
||||||
}
|
|
||||||
100% {
|
|
||||||
transform: scale(3);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
13
src/components/ui/MainSkeleton.jsx
Normal file
13
src/components/ui/MainSkeleton.jsx
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
import Skeleton from 'react-loading-skeleton'
|
||||||
|
import 'react-loading-skeleton/dist/skeleton.css'
|
||||||
|
|
||||||
|
export default function MainSkeleton() {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<div className="mb-6">
|
||||||
|
<Skeleton height={`50px`} />
|
||||||
|
</div>
|
||||||
|
<Skeleton count={5} />
|
||||||
|
</>
|
||||||
|
)
|
||||||
|
}
|
||||||
@ -446,6 +446,7 @@
|
|||||||
"join.complete.contents": "※ 申請したIDが承認されると、担当者情報に入力されたメールアドレスにログイン案内メールが送信されます。",
|
"join.complete.contents": "※ 申請したIDが承認されると、担当者情報に入力されたメールアドレスにログイン案内メールが送信されます。",
|
||||||
"join.complete.email_comment": "担当者メールアドレス",
|
"join.complete.email_comment": "担当者メールアドレス",
|
||||||
"join.validation.check1": "{0} の形式を確認してください。",
|
"join.validation.check1": "{0} の形式を確認してください。",
|
||||||
|
"join.complete.save.confirm": "Hanwha Japan担当者にID承認を要請されると、これ以上情報を修正できません。 本当にリクエストしますか?",
|
||||||
"stuff.gridHeader.lastEditDatetime": "更新日時",
|
"stuff.gridHeader.lastEditDatetime": "更新日時",
|
||||||
"stuff.gridHeader.objectNo": "品番",
|
"stuff.gridHeader.objectNo": "品番",
|
||||||
"stuff.gridHeader.planTotCnt": "プラン数",
|
"stuff.gridHeader.planTotCnt": "プラン数",
|
||||||
|
|||||||
@ -451,6 +451,7 @@
|
|||||||
"join.complete.contents": "※ 신청한 ID가 승인되면, 담당자 정보에 입력한 이메일 주소로 로그인 관련 안내 메일이 전송됩니다.",
|
"join.complete.contents": "※ 신청한 ID가 승인되면, 담당자 정보에 입력한 이메일 주소로 로그인 관련 안내 메일이 전송됩니다.",
|
||||||
"join.complete.email_comment": "담당자 이메일 주소",
|
"join.complete.email_comment": "담당자 이메일 주소",
|
||||||
"join.validation.check1": "{0} 형식을 확인해주세요.",
|
"join.validation.check1": "{0} 형식을 확인해주세요.",
|
||||||
|
"join.complete.save.confirm": "Hanwha Japan 담당자에게 ID승인이 요청되면 더 이상 정보를 수정할 수 없습니다. 정말로 요청하시겠습니까?",
|
||||||
"stuff.gridHeader.lastEditDatetime": "갱신일시",
|
"stuff.gridHeader.lastEditDatetime": "갱신일시",
|
||||||
"stuff.gridHeader.objectNo": "물건번호",
|
"stuff.gridHeader.objectNo": "물건번호",
|
||||||
"stuff.gridHeader.planTotCnt": "플랜 수",
|
"stuff.gridHeader.planTotCnt": "플랜 수",
|
||||||
|
|||||||
@ -5884,6 +5884,11 @@ react-is@^16.13.1, react-is@^16.7.0:
|
|||||||
resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz"
|
resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz"
|
||||||
integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
|
integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
|
||||||
|
|
||||||
|
react-loading-skeleton@^3.5.0:
|
||||||
|
version "3.5.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/react-loading-skeleton/-/react-loading-skeleton-3.5.0.tgz#da2090355b4dedcad5c53cb3f0ed364e3a76d6ca"
|
||||||
|
integrity sha512-gxxSyLbrEAdXTKgfbpBEFZCO/P153DnqSCQau2+o6lNy1jgMRr2MmRmOzMmyrwSaSYLRB8g7b0waYPmUjz7IhQ==
|
||||||
|
|
||||||
react-onclickoutside@^6.13.0:
|
react-onclickoutside@^6.13.0:
|
||||||
version "6.13.1"
|
version "6.13.1"
|
||||||
resolved "https://registry.npmjs.org/react-onclickoutside/-/react-onclickoutside-6.13.1.tgz"
|
resolved "https://registry.npmjs.org/react-onclickoutside/-/react-onclickoutside-6.13.1.tgz"
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user