물건현황

This commit is contained in:
basssy 2024-10-08 09:50:55 +09:00
parent f3460c5423
commit cdf7d41033
4 changed files with 140 additions and 332 deletions

View File

@ -10,8 +10,7 @@ import { useRecoilValue, useRecoilState } from 'recoil'
import { stuffSearchState } from '@/store/stuffAtom'
import { queryStringFormatter, isEmptyArray } from '@/util/common-utils'
import dayjs from 'dayjs'
import isLeapYear from 'dayjs/plugin/isLeapYear' //
dayjs.extend(isLeapYear)
import { isObjectNotEmpty } from '@/util/common-utils'
import { convertNumberToPriceDecimal } from '@/util/common-utils'
import { appMessageStore, globalLocaleStore } from '@/store/localeAtom'
import KO from '@/locales/ko.json'
@ -242,66 +241,68 @@ export default function Stuff() {
//
useEffect(() => {
if (stuffSearchParams?.code === 'S') {
const params = {
schObjectNo: '',
schSaleStoreId: '',
schAddress: '',
schObjectName: '',
schSaleStoreName: '',
schReceiveUser: '',
schDispCompanyName: '',
schDateType: 'U',
schFromDt: dayjs(new Date()).add(-1, 'year').format('YYYY-MM-DD'),
schToDt: dayjs(new Date()).format('YYYY-MM-DD'),
startRow: (curPage - 1) * defaultSize + 1,
endRow: curPage * defaultSize,
schSelSaleStoreId: '',
schSortType: 'R',
if (isObjectNotEmpty(sessionState)) {
if (stuffSearchParams?.code === 'S') {
const params = {
schObjectNo: '',
schAddress: '',
schObjectName: '',
schSaleStoreName: '',
schReceiveUser: '',
schDispCompanyName: '',
schDateType: 'U',
schFromDt: dayjs(new Date()).add(-1, 'year').format('YYYY-MM-DD'),
schToDt: dayjs(new Date()).format('YYYY-MM-DD'),
startRow: (curPage - 1) * defaultSize + 1,
endRow: curPage * defaultSize,
schSelSaleStoreId: '',
schSortType: 'R',
}
async function fetchData() {
//api startRow, endRow
// let startRow
// let endRow
// startRow = (curPage - 1) * size + 1
// endRow = curPage * size
// console.log('startrow::', startRow)
// console.log('endRow::', endRow)
// let curPage
// let totalpage
// let totalCount
// let size
// let pageCount
// console.log(' ::::::::::', sessionState)
// const apiUrl = `/api/object/list?saleStoreId=201TES01&${queryStringFormatter(params)}`
// const apiUrl = `/api/object/list?saleStoreId=X167&${queryStringFormatter(params)}`
const apiUrl = `/api/object/list?saleStoreId=${sessionState?.storeId}&${queryStringFormatter(params)}`
await get({
url: apiUrl,
}).then((res) => {
if (!isEmptyArray(res)) {
setGridProps({ ...gridProps, gridData: res, count: res[0].totCnt })
setGridCount(res[0].totCnt)
}
})
}
fetchData()
}
async function fetchData() {
// console.log(':::::::::::::', params)
//api startRow, endRow
// let startRow
// let endRow
// startRow = (curPage - 1) * size + 1
// endRow = curPage * size
// console.log('startrow::', startRow)
// console.log('endRow::', endRow)
// let curPage
// let totalpage
// let totalCount
// let size
// let pageCount
// console.log('::::::::::', sessionState)
// const apiUrl = `/api/object/list?saleStoreId=201TES01&${queryStringFormatter(params)}`
const apiUrl = `/api/object/list?saleStoreId=X167&${queryStringFormatter(params)}`
await get({
url: apiUrl,
}).then((res) => {
if (!isEmptyArray(res)) {
setGridProps({ ...gridProps, gridData: res, count: res[0].totCnt })
setGridCount(res[0].totCnt)
}
})
}
fetchData()
}
}, [])
}, [sessionState])
useEffect(() => {
if (stuffSearchParams?.code === 'E') {
stuffSearchParams.startRow = (curPage - 1) * defaultSize + 1
stuffSearchParams.endRow = curPage * defaultSize
stuffSearchParams.schSortType = defaultSortType
console.log('조회누름::::::::', stuffSearchParams)
// console.log('::::::::', stuffSearchParams)
async function fetchData() {
// console.log(':::::::::::::', sessionState)
// console.log(' :::::::::::::', sessionState)
// const apiUrl = `/api/object/list?saleStoreId=201TES01&${queryStringFormatter(stuffSearchParams)}`
const apiUrl = `/api/object/list?saleStoreId=X167&${queryStringFormatter(stuffSearchParams)}`
// const apiUrl = `/api/object/list?saleStoreId=X167&${queryStringFormatter(stuffSearchParams)}`
const apiUrl = `/api/object/list?saleStoreId=${sessionState?.storeId}&${queryStringFormatter(stuffSearchParams)}`
await get({ url: apiUrl }).then((res) => {
// console.log(' API:::::::', res)
if (!isEmptyArray(res)) {
@ -329,10 +330,11 @@ export default function Stuff() {
startRow: startRow,
endRow: curPage * e.target.value,
})
console.log('페이지 갯수 변경 때 셋팅된 검색조건:::', stuffSearchParams)
// console.log(':::', sessionState)
// console.log(' :::', stuffSearchParams)
// console.log(' sessionState:::', sessionState)
// const apiUrl = `/api/object/list?saleStoreId=201TES01&${queryStringFormatter(stuffSearchParams)}`
const apiUrl = `/api/object/list?saleStoreId=X167&${queryStringFormatter(stuffSearchParams)}`
// const apiUrl = `/api/object/list?saleStoreId=X167&${queryStringFormatter(stuffSearchParams)}`
const apiUrl = `/api/object/list?saleStoreId=${sessionState?.storeId}&${queryStringFormatter(stuffSearchParams)}`
get({ url: apiUrl }).then((res) => {
if (!isEmptyArray(res)) {
setGridProps({ ...gridProps, gridData: res, count: res[0].totCnt })
@ -354,9 +356,10 @@ export default function Stuff() {
code: 'S',
schSortType: e.target.value,
})
// console.log('::::::::::::', sessionState)
// console.log(' ::::::::::::', sessionState)
// const apiUrl = `/api/object/list?saleStoreId=201TES01&${queryStringFormatter(stuffSearchParams)}`
const apiUrl = `/api/object/list?saleStoreId=X167&${queryStringFormatter(stuffSearchParams)}`
// const apiUrl = `/api/object/list?saleStoreId=X167&${queryStringFormatter(stuffSearchParams)}`
const apiUrl = `/api/object/list?saleStoreId=${sessionState?.storeId}&${queryStringFormatter(stuffSearchParams)}`
get({ url: apiUrl }).then((res) => {
if (!isEmptyArray(res)) {
setGridProps({ ...gridProps, gridData: res, count: res[0].totCnt })

View File

@ -34,7 +34,8 @@ export default function StuffDetail() {
prefId: '', //
prefName: '',
address: '', //
areaId: '', //new
areaId: '', //id
// areaName: '', //
windSpeed: '', //
verticalSnowCover: '', //NEW
coldRegionFlg: false, //(true : 1 / false : 0)
@ -56,8 +57,9 @@ export default function StuffDetail() {
const [saleStoreList, setSaleStoreList] = useState([]) //
const [otherSaleStoreList, setOtherSaleStoreList] = useState([])
const [areaIdList, setAreaIdList] = useState([]) // NEW
const [areaIdList, setAreaIdList] = useState([]) //
const [windSpeedList, setWindSpeedList] = useState([]) //
const [isFormValid, setIsFormValid] = useState(false) //,
const [buttonValid, setButtonValid] = useState(false) //
const objectNo = searchParams.get('objectNo') //url set
@ -83,7 +85,7 @@ export default function StuffDetail() {
// API
get({ url: '/api/object/prefecture/list' }).then((res) => {
if (!isEmptyArray(res)) {
console.log('도도부현API 결과:::', res)
// console.log('API :::', res)
setPrefCodeList(res)
}
})
@ -274,9 +276,11 @@ export default function StuffDetail() {
const params = {
zipcode: _zipNo,
}
get({ url: `https://zipcloud.ibsnet.co.jp/api/search?${queryStringFormatter(params)}` }).then((res) => {
//7830060
//9302226
//0790177 3
if (res.status === 200) {
if (res.results != null) {
console.log('주소검색::', res.results)
@ -295,6 +299,9 @@ export default function StuffDetail() {
setPrefValue('')
setAreaIdList([])
form.setValue('areaId', '')
// form.setValue('areaName', '')
setWindSpeedList([])
form.setValue('windSpeed', '')
}
} else {
alert(res.message)
@ -304,18 +311,39 @@ export default function StuffDetail() {
useEffect(() => {
if (prefValue !== '') {
// console.log(' ::::', prefValue)
//
// /api/object/prefecture//list
get({ url: `/api/object/prefecture/${prefValue}/list` }).then((res) => {
if (!isEmptyArray(res)) {
console.log('발전량 시뮬레이션::::::::', res)
// console.log(' ::::::::', res)
form.setValue('areaId', res[0].prefId)
form.setValue('areaName', res[0].prefName)
setAreaIdList(res)
}
})
}
}, [prefValue])
//
const handleAreaIdOnChange = (e) => {
form.setValue('areaId', e.target.value)
}
useEffect(() => {
if (!isEmptyArray(areaIdList)) {
// ->
console.log('prefName::', form.watch('prefName'))
let _prefName = form.watch('prefName')
//http://localhost:8080/api/object/windSpeed//list
get({ url: `/api/object/windSpeed/${_prefName}/list` }).then((res) => {
if (!isEmptyArray(res)) {
// console.log(':::::::::', res)
setWindSpeedList(res)
}
})
}
}, [areaIdList])
//
const onValid = (data) => {
// PUT
@ -382,14 +410,6 @@ export default function StuffDetail() {
})
}
//
const handleAreaIdOnChange = (e) => {
// console.log(' :::::::::', prefValue)
console.log('발전량시뮬레이션변경:::::::::', e.target.value)
form.setValue('areaId', e.target.value)
// set useEffect , api
}
//
const onDelete = () => {
//http://localhost:8080/api/object/R201TES01240910023
@ -588,17 +608,22 @@ export default function StuffDetail() {
</th>
<td>
<div className="select-wrap" style={{ width: '200px' }}>
{areaIdList?.length > 0 && (
<select className="select-light" name="areaId" onChange={handleAreaIdOnChange}>
{areaIdList.map((row) => {
return (
<option key={row.prefName} value={row.prefId}>
{row.prefName}
</option>
)
})}
</select>
)}
<select
className="select-light"
name="areaId"
onChange={(e) => {
form.setValue('areaId', e.target.value)
}}
disabled={areaIdList?.length > 0 ? false : true}
>
{areaIdList.map((row) => {
return (
<option key={row.prefName} value={row.prefId}>
{row.prefName}
</option>
)
})}
</select>
</div>
</td>
</tr>
@ -610,10 +635,13 @@ export default function StuffDetail() {
<div className="flx-box">
<div className="select-wrap mr10" style={{ width: '200px' }}>
<select className="select-light" name="windSpeed" {...register('windSpeed')}>
<option value="">기준풍속공통코드?</option>
<option value="30">30</option>
<option value="50">50</option>
<option value="60">60</option>
{windSpeedList.map((row) => {
return (
<option key={row.windSpeed} value={row.windSpeed}>
{row.windSpeed}
</option>
)
})}
</select>
</div>
<span>m/s이하</span>
@ -756,233 +784,6 @@ export default function StuffDetail() {
)}
</>
)}
{/* {(editMode === 'NEW' && (
<form onSubmit={handleSubmit(onValid)}>
<div>
<div>(*필수 입력항목)</div>
<div className="form-input">
<label>담당자*</label>
<input type="text" className="input-origin" {...form.register('dispCompanyName')} />
</div>
<div className="form-input">
<label>물건구분/물건명*</label>
<input type="radio" name="objectStatusId" value="0" id="objectStatus0" {...form.register('objectStatusId')} />
<label htmlFor="objectStatus0">신축</label>
<input type="radio" name="objectStatusId" value="1" id="objectStatus1" {...form.register('objectStatusId')} />
<label htmlFor="objectStatus0">기축</label>
<input type="text" className="input-origin" {...form.register('objectName')} />
<div className="flex w-full max-w-xs flex-col gap-2">
<select name="objectNameOmit" {...register('objectNameOmit')}>
<option value="">경칭선택</option>
<option value="11">111</option>
<option value="22">222</option>
<option value="33">333</option>
</select>
</div>
</div>
<div className="form-input">
<label>물건명 후리가나</label>
<input type="text" className="input-origin" {...form.register('objectNameKana')} />
</div>
<div className="form-input">
<label>1 판매점명 / ID</label>
<div className="flex w-full max-w-xs flex-col gap2">
{saleStoreList?.length > 0 && (
<Autocomplete
className="max-w-xs"
defaultItems={saleStoreList}
label="판매점ID자동완성"
selectedKey={form.watch('saleStoreId')}
{...form.register('saleStoreId')}
onSelectionChange={onSelectionChange}
>
{(option) => <AutocompleteItem key={option.saleStoreId}>{option.saleStoreName}</AutocompleteItem>}
</Autocomplete>
)}
<input type="text" className="input-origin" value={form.watch('saleStoreName')} {...form.register('saleStoreName')} disabled />
</div>
</div>
<div className="form-input">
<label>2 판매점명 / ID</label>
<div className="flex w-full max-w-xs flex-col gap2">
{otherSaleStoreList?.length > 0 && (
<Autocomplete
className="max-w-xs"
defaultItems={otherSaleStoreList}
label="2차판매점ID자동완성"
{...form.register('otherSaleStoreId')}
onSelectionChange={onSelectionChange2}
>
{(option) => <AutocompleteItem key={option.saleStoreId}>{option.saleStoreName}</AutocompleteItem>}
</Autocomplete>
)}
</div>
</div>
<div className="form-input">
<label>우편번호</label>
<input
type="text"
className="input-origin"
maxLength={7}
{...form.register('zipNo', {
minLength: { value: 7, message: '7자리만가능' },
pattern: { value: /^[0-9]*$/g, message: '숫자만 입력' },
})}
/>
<Button isDisabled={!buttonValid} onClick={onSearchPostNumber}>
주소검색
</Button>
*우편번호 7자리를 입력한 , 주소검색 버튼을 클릭해 주십시오
</div>
<div className="form-input">
<label>도도부현 / 주소</label>
<div className="flex w-full flex-wrap items-end md:flex-nowrap mb-6 md:mb-0 gap-4">
{prefCodeList?.length > 0 && (
<Select className="max-w-xs" selectedKeys={prefValue} isDisabled {...form.register('prefId')}>
{prefCodeList.map((row) => {
return <SelectItem key={row.prefId}>{row.prefName}</SelectItem>
})}
</Select>
)}
</div>
<input type="text" className="input-origin" value={form.watch('address')} {...form.register('address')} />
</div>
<div className="form-input">
<label>발전량시뮬레이션지역</label>
{powerSimAreaList?.length > 0 && (
<Select
className="max-w-xs"
selectedKeys={form.watch('powerSimArea')}
{...form.register('powerSimArea')}
onChange={handlePowerSimAreaOnChange}
>
{powerSimAreaList.map((row) => {
// console.log('row::', row)
return (
<SelectItem key={row.prefName} value={row.prefId}>
{row.prefName}
</SelectItem>
)
})}
</Select>
)}
</div>
<div className="form-input">
<label>기준풍속</label>
<div className="flex w-full max-w-xs flex-col gap-2">
<select name="windSpeed" {...register('windSpeed')}>
<option value="">기준풍속</option>
<option value="30">30</option>
<option value="50">50</option>
<option value="60">60</option>
</select>
</div>
</div>
<div className="form-input">
<label>수직적설량</label>
<input
type="text"
className="input-origin"
maxLength={3}
{...form.register('snowCover', {
pattern: { value: /^[0-9]*$/g, message: '정수만 입력' },
})}
/>{' '}
cm
<Checkbox
onValueChange={(e) => {
form.setValue('coldAreaChk', e)
}}
{...form.register('coldAreaChk')}
>
한랭지대책시행
</Checkbox>
</div>
<div className="form-input">
<label>면조도구분</label>
<input type="radio" name="surfaceType" value="Ⅲ・Ⅳ" id="surfaceType0" {...form.register('surfaceType')} />
<label htmlFor="surfaceType0"></label>
<input type="radio" name="surfaceType" value="Ⅱ" id="surfaceType1" {...form.register('surfaceType')} />
<label htmlFor="surfaceType1"></label>
<Checkbox
{...form.register('saltAreaChk')}
onValueChange={(e) => {
form.setValue('saltAreaChk', e)
}}
>
염해지역용아이템사용
</Checkbox>
</div>
<div className="form-input">
<label>설치높이</label>
<div className="flex w-full max-w-xs flex-col gap-2">
<select name="installHeight" {...register('installHeight')}>
<option value="">설치높이</option>
<option value="11">111</option>
<option value="22">222</option>
<option value="33">333</option>
</select>
</div>
</div>
<div className="form-input">
<label>계약조건</label>
<input type="radio" name="powerConTerms" value="0" id="powerConTerms0" {...form.register('powerConTerms')} />
<label htmlFor="powerConTerms0">잉여</label>
<input type="radio" name="powerConTerms" value="1" id="powerConTerms1" {...form.register('powerConTerms')} />
<label htmlFor="powerConTerms1">전량</label>
</div>
<div className="form-input">
<label>메모</label>
<Textarea
disableAutosize
classNames={{
base: 'max-w-xs',
input: 'resize-y min-h-[40px]',
}}
{...form.register('remarks')}
onValueChange={(e) => {
// console.log('e::::', e)
form.setValue('remarks', e)
}}
/>
</div>
</div>
{!isFormValid ? (
<>
<Button type="submit" onClick={onTempSave}>
NEW화면임시저장
</Button>
</>
) : (
<button type="submit">NEW화면 저장</button>
)}
<Link href="/management/stuff">
<button type="button">NEW화면 물건목록이동</button>
</Link>
</form>
)) || (
<>
{objectNo.substring(0, 1) === 'R' ? (
<>
<Link href="/management/stuff">
<button type="button">R상세:물건목록</button>
</Link>
<button type="submit">R상세:저장</button>
<button type="submit" onClick={onDelete}>
R상세:물건삭제
</button>
</>
) : (
<>
<Link href="/management/stuff">
<button type="button">T상세:물건목록</button>
</Link>
<button type="submit">T상세:저장</button>
</>
)}
</>
)} */}
</>
)
}

View File

@ -14,6 +14,7 @@ import Link from 'next/link'
import SingleDatePicker from '../common/datepicker/SingleDatePicker'
import { sessionStore } from '@/store/commonAtom'
import { useMessage } from '@/hooks/useMessage'
import { isObjectNotEmpty } from '@/util/common-utils'
export default function StuffSearchCondition() {
const sessionState = useRecoilValue(sessionStore)
@ -41,7 +42,7 @@ export default function StuffSearchCondition() {
const resetStuffRecoil = useResetRecoilState(stuffSearchState)
const [stuffSearch, setStuffSearch] = useRecoilState(stuffSearchState)
const [objectNo, setObjectNo] = useState('') //
const [saleStoreId, setSaleStoreId] = useState('') //ID
// const [saleStoreId, setSaleStoreId] = useState('') //ID
const [address, setAddress] = useState('') //
const [objectName, setobjectName] = useState('') //
const [saleStoreName, setSaleStoreName] = useState('') //
@ -60,7 +61,6 @@ export default function StuffSearchCondition() {
setStuffSearch({
schObjectNo: stuffSearch?.schObjectNo ? stuffSearch.schObjectNo : objectNo,
schSaleStoreId: stuffSearch?.schSaleStoreId ? stuffSearch.schSaleStoreId : saleStoreId,
schAddress: stuffSearch?.schAddress ? stuffSearch.schAddress : address,
schObjectName: stuffSearch?.schObjectName ? stuffSearch.schObjectName : objectName,
schSaleStoreName: stuffSearch?.schSaleStoreName ? stuffSearch.schSaleStoreName : saleStoreName,
@ -80,7 +80,7 @@ export default function StuffSearchCondition() {
//
const resetRecoil = () => {
setObjectNo('')
setSaleStoreId('')
//setSaleStoreId('') //
setAddress('')
setobjectName('')
setSaleStoreName('')
@ -95,14 +95,18 @@ export default function StuffSearchCondition() {
}
useEffect(() => {
// console.log('::::::::', sessionState)
get({ url: `/api/object/saleStore/201TES01/list` }).then((res) => {
if (!isEmptyArray(res)) {
// console.log(' :::::', res)
setSchSelSaleStoreList(res)
}
})
}, [])
if (isObjectNotEmpty(sessionState)) {
// console.log(' ::::::::', sessionState)
// storeId T01 1
// get({ url: `/api/object/saleStore/201TES01/list` }).then((res) => {
get({ url: `/api/object/saleStore/${sessionState?.storeId}/list` }).then((res) => {
if (!isEmptyArray(res)) {
// console.log(' :::::', res)
setSchSelSaleStoreList(res)
}
})
}
}, [sessionState])
// ..
const handleClear = () => {
@ -117,7 +121,7 @@ export default function StuffSearchCondition() {
const onSelectionChange = (key) => {
if (!isEmptyArray(key)) {
setSchSelSaleStoreId(key[0].saleStoreId)
setStuffSearch({ ...stuffSearch, schSelSaleStoreId: key[0].saleStoreId })
setStuffSearch({ ...stuffSearch, code: 'S', schSelSaleStoreId: key[0].saleStoreId })
} else {
setSchSelSaleStoreId('')
setStuffSearch({ ...stuffSearch, schSelSaleStoreId: '' })
@ -192,11 +196,12 @@ export default function StuffSearchCondition() {
<input
type="text"
className="input-light"
placeholder="판매대리점ID 입력"
value={stuffSearch?.schSaleStoreId ? stuffSearch.schSaleStoreId : saleStoreId}
placeholder="판매대리점 입력"
value={stuffSearch?.schSaleStoreName ? stuffSearch.schSaleStoreName : saleStoreName}
onChange={(e) => {
setSaleStoreId(e.target.value)
setStuffSearch({ ...stuffSearch, code: 'S', schSaleStoreId: e.target.value })
//setSaleStoreId(e.target.value)
setSaleStoreName(e.target.value)
setStuffSearch({ ...stuffSearch, code: 'S', schSaleStoreName: e.target.value })
}}
/>
</div>
@ -263,6 +268,7 @@ export default function StuffSearchCondition() {
clearable={true}
onClearAll={handleClear}
ref={ref}
disabled={sessionState?.storeLvl === '1' ? false : true}
></Select>
)}
</td>

View File

@ -1,12 +1,10 @@
import { atom } from 'recoil'
import dayjs from 'dayjs'
import isLeapYear from 'dayjs/plugin/isLeapYear' // 윤년 판단 플러그인
dayjs.extend(isLeapYear)
import { v1 } from 'uuid'
export const stuffSearchState = atom({
key: 'stuffSearchState',
key: `stuffSearchState/${v1()}`,
default: {
schObjectNo: '', //물건번호
schSaleStoreId: '', //판매대리점ID
schAddress: '', //물건주소
schObjectName: '', //물건명
schSaleStoreName: '', //판매대리점명