Qcast-100 물건현황

This commit is contained in:
basssy 2024-09-11 12:15:45 +09:00
parent 11e40caaa7
commit bc080a0855
4 changed files with 129 additions and 28 deletions

View File

@ -2,6 +2,7 @@ NEXT_PUBLIC_TEST="테스트변수입니다. development"
NEXT_PUBLIC_API_SERVER_PATH="http://1.248.227.176:38080" NEXT_PUBLIC_API_SERVER_PATH="http://1.248.227.176:38080"
# NEXT_PUBLIC_API_SERVER_PATH="http://localhost:8080" # NEXT_PUBLIC_API_SERVER_PATH="http://localhost:8080"
# NEXT_PUBLIC_API_SERVER_PATH="http://172.30.1.60:8080"
DATABASE_URL="sqlserver://mssql.devgrr.kr:1433;database=qcast;user=qcast;password=Qwertqaz12345;trustServerCertificate=true" DATABASE_URL="sqlserver://mssql.devgrr.kr:1433;database=qcast;user=qcast;password=Qwertqaz12345;trustServerCertificate=true"

View File

@ -8,7 +8,7 @@ import { useMessage } from '@/hooks/useMessage'
import StuffQGrid from './StuffQGrid' import StuffQGrid from './StuffQGrid'
import { useRecoilValue } from 'recoil' import { useRecoilValue } from 'recoil'
import { stuffSearchState } from '@/store/stuffAtom' import { stuffSearchState } from '@/store/stuffAtom'
import { queryStringFormatter } from '@/util/common-utils' import { queryStringFormatter, isEmptyArray } from '@/util/common-utils'
import dayjs from 'dayjs' import dayjs from 'dayjs'
import isLeapYear from 'dayjs/plugin/isLeapYear' // import isLeapYear from 'dayjs/plugin/isLeapYear' //
dayjs.extend(isLeapYear) dayjs.extend(isLeapYear)
@ -288,13 +288,13 @@ export default function Stuff() {
// let size // let size
// let pageCount // let pageCount
const apiUrl = `/api/object/v1.0/object?saleStoreId=201TES01&${queryStringFormatter(params)}` const apiUrl = `/api/object/list?saleStoreId=201TES01&${queryStringFormatter(params)}`
await get({ await get({
url: apiUrl, url: apiUrl,
}).then((res) => { }).then((res) => {
if (res.length > 0) { if (!isEmptyArray(res)) {
console.log('API결과:::::::', res) console.log('화면진입API결과::', res)
setGridProps({ ...gridProps, gridData: res, count: res.length }) setGridProps({ ...gridProps, gridData: res, count: res.length })
setGridCount(res.length) setGridCount(res.length)
} }
@ -308,11 +308,13 @@ export default function Stuff() {
if (stuffSearchParams?.code === 'E') { if (stuffSearchParams?.code === 'E') {
console.log('조회 눌럿을때 ::::::::::::::', stuffSearchParams) console.log('조회 눌럿을때 ::::::::::::::', stuffSearchParams)
async function fetchData() { async function fetchData() {
const apiUrl = `/api/object/v1.0/object?saleStoreId=201TES01&${queryStringFormatter(stuffSearchParams)}` const apiUrl = `/api/object/list?saleStoreId=201TES01&${queryStringFormatter(stuffSearchParams)}`
await get({ url: apiUrl }).then((res) => { await get({ url: apiUrl }).then((res) => {
console.log('API결과:::::::', res) console.log('API결과:::::::', res)
setGridProps({ ...gridProps, gridData: res, count: res.length }) if (!isEmptyArray(res)) {
setGridCount(res.length) setGridProps({ ...gridProps, gridData: res, count: res.length })
setGridCount(res.length)
}
}) })
} }
fetchData() fetchData()

View File

@ -5,7 +5,7 @@ import { useRouter, useSearchParams } from 'next/navigation'
import { Input, RadioGroup, Radio, Button, Autocomplete, AutocompleteItem, Select, SelectItem, Checkbox, Textarea, button } from '@nextui-org/react' import { Input, RadioGroup, Radio, Button, Autocomplete, AutocompleteItem, Select, SelectItem, Checkbox, Textarea, button } from '@nextui-org/react'
import Link from 'next/link' import Link from 'next/link'
import { get } from '@/lib/Axios' import { get } from '@/lib/Axios'
import { queryStringFormatter } from '@/util/common-utils' import { queryStringFormatter, isEmptyArray } from '@/util/common-utils'
import dayjs from 'dayjs' import dayjs from 'dayjs'
import { useForm } from 'react-hook-form' import { useForm } from 'react-hook-form'
export default function StuffDetail() { export default function StuffDetail() {
@ -29,10 +29,10 @@ export default function StuffDetail() {
windSpeed: '', // windSpeed: '', //
snowCover: '', // snowCover: '', //
coldAreaChk: false, // coldAreaChk: false, //
surfaceType: '', //( / ) surfaceType: 'Ⅲ・Ⅳ', //( / )
saltAreaChk: false, // saltAreaChk: false, //
installHeight: '', // installHeight: '', //
powerConTerms: '', // powerConTerms: '0', //( / )
remark: '', // remark: '', //
tempFlag: 'T', //(1) (0) tempFlag: 'T', //(1) (0)
} }
@ -42,6 +42,9 @@ export default function StuffDetail() {
const form = { register, setValue, getValues, handleSubmit, resetField, control, watch } const form = { register, setValue, getValues, handleSubmit, resetField, control, watch }
const [prefCodeList, setPrefCodeList] = useState([]) //
const [prefValue, setPrefValue] = useState('')
const [receiveUser, setReceiveUser] = useState('') // const [receiveUser, setReceiveUser] = useState('') //
const [name2, setName2] = useState('') // const [name2, setName2] = useState('') //
const [name3, setName3] = useState('') // const [name3, setName3] = useState('') //
@ -74,18 +77,21 @@ export default function StuffDetail() {
const [detailData, setDetailData] = useState({}) const [detailData, setDetailData] = useState({})
useEffect(() => { useEffect(() => {
get({ url: '/api/object/prefecture/list' }).then((res) => {
if (!isEmptyArray(res)) {
console.log('도도부현API 결과:::', res)
setPrefCodeList(res)
}
})
// console.log(':::::::::', searchParams.get('objectNo')) // console.log(':::::::::', searchParams.get('objectNo'))
console.log('물건번호::::', objectNo) // console.log('::::', objectNo)
if (objectNo) { if (objectNo) {
// console.log('::', objectNo)
setEditMode('EDIT') setEditMode('EDIT')
if (objectNo.substring(0, 1) === 'R') { if (objectNo.substring(0, 1) === 'R') {
setIsFormValid(true) setIsFormValid(true)
} }
// 1 get({ url: `/api/object/${objectNo}/detail` }).then((res) => {
//API
get({ url: `/api/object/v1.0/object/${objectNo}/1` }).then((res) => {
if (res != null) { if (res != null) {
// console.log('res:::::::', res) // console.log('res:::::::', res)
setDetailData(res) setDetailData(res)
@ -101,9 +107,7 @@ export default function StuffDetail() {
// //
const _zipNo = watch('zipNo') const _zipNo = watch('zipNo')
useEffect(() => { useEffect(() => {
console.log('실시간이니:::::', _zipNo)
if (_zipNo !== '' && _zipNo.length === 7 && !_zipNo.match(/\D/g)) { if (_zipNo !== '' && _zipNo.length === 7 && !_zipNo.match(/\D/g)) {
console.log('벨리통과했군')
setButtonValid(true) setButtonValid(true)
} else { } else {
setButtonValid(false) setButtonValid(false)
@ -167,26 +171,29 @@ export default function StuffDetail() {
setIsFormValid(Object.keys(errors).length === 0) setIsFormValid(Object.keys(errors).length === 0)
} }
// API // API
const onSearchPostNumber = () => { const onSearchPostNumber = () => {
const params = { const params = {
zipcode: _zipNo, zipcode: _zipNo,
} }
get({ url: `https://zipcloud.ibsnet.co.jp/api/search?${queryStringFormatter(params)}` }).then((res) => { get({ url: `https://zipcloud.ibsnet.co.jp/api/search?${queryStringFormatter(params)}` }).then((res) => {
console.log('우편API RES::::::::', res)
//7830060 //7830060
if (res.status === 200) { if (res.status === 200) {
if (res.results?.length > 0) { console.log('res.results::', res.results)
// setAddress1(res.results[0].address1) if (res.results != null) {
// setAddress2(res.results[0].address2) console.log('res.results::', res.results)
// setAddress3(res.results[0].address3) // prefId: '', //
// setPrefCode(res.results[0].prefcode)
// prefId: '', //
// address: '', // // address: '', //
console.log('prefcode::', res.results[0].prefcode)
console.log('address::', res.results[0].address2 + res.results[0].address3)
setPrefValue(res.results[0].prefcode)
form.setValue('prefId', res.results[0].prefcode) form.setValue('prefId', res.results[0].prefcode)
form.setValue('address', res.results[0].address2 + res.results[0].address3) form.setValue('address', res.results[0].address2 + res.results[0].address3)
} else { } else {
alert('등록된 우편번호에서 주소를 찾을 수 없습니다. 다시 입력해주세요.') alert('등록된 우편번호에서 주소를 찾을 수 없습니다. 다시 입력해주세요.')
form.setValue('prefId', '')
form.setValue('address', '')
setPrefValue('')
} }
} else { } else {
alert(res.message) alert(res.message)
@ -218,11 +225,18 @@ export default function StuffDetail() {
const _dispCompanyName = watch('dispCompanyName') const _dispCompanyName = watch('dispCompanyName')
const _objectStatusId = watch('objectStatusId') const _objectStatusId = watch('objectStatusId')
const _objectNameOmit = watch('objectNameOmit') const _objectNameOmit = watch('objectNameOmit')
const _zipno = watch('zipno') const _zipNo = watch('zipNo')
const _prefId = watch('prefId')
const _address = watch('address')
const _coldAreaChk = watch('coldAreaChk')
console.log(_dispCompanyName) console.log(_dispCompanyName)
console.log(_objectStatusId) console.log(_objectStatusId)
console.log(_objectNameOmit) console.log(_objectNameOmit)
console.log(_zipno) console.log(_zipNo)
console.log(_prefId)
console.log('prefValue::', prefValue)
console.log(_address)
console.log('_coldAreaChk::', _coldAreaChk)
} }
// //
@ -285,11 +299,87 @@ export default function StuffDetail() {
</div> </div>
<div className="form-input"> <div className="form-input">
<label>도도부현 / 주소</label> <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', { required: true })}>
{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')} /> <input type="text" className="input-origin" value={form.watch('address')} {...form.register('address')} />
</div> </div>
<div className="form-input">
<label>발전량시뮬레이션지역</label>
</div>
<div className="form-input">
<label>기준풍속</label>
</div>
<div className="form-input">
<label>수직적설량</label>
<input
type="text"
className="input-origin"
maxLength={3}
{...form.register('snowCover', {
required: true,
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>설치높이 installHeight</label>
</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('remark')}
onValueChange={(e) => {
// console.log('e::::', e)
form.setValue('remark', e)
}}
/>
</div>
</div> </div>
<button type="submit">저장!!!!!!!!!</button> <button type="submit">신규화면임시저장!!!!!!!!!</button>
</form> </form>
)) || <div>상세:::::::::::</div>} )) || <div>상세:::::::::::</div>}

View File

@ -10,6 +10,14 @@ export const isObjectNotEmpty = (obj) => {
return Object.keys(obj).length > 0 return Object.keys(obj).length > 0
} }
export const isNotEmptyArray = (array) => {
return Array.isArray(array) && array.length
}
export const isEmptyArray = (array) => {
return !isNotEmptyArray(array)
}
/** /**
* ex) const params = {page:10, searchDvsnCd: 20} * ex) const params = {page:10, searchDvsnCd: 20}
* @param {*} params * @param {*} params