지대한
2 years ago
11 changed files with 935 additions and 620 deletions
@ -1,66 +1,71 @@
|
||||
import React from 'react'; |
||||
import { |
||||
Row, |
||||
Col, |
||||
Table, |
||||
Badge, |
||||
UncontrolledDropdown, |
||||
DropdownMenu, |
||||
DropdownItem, |
||||
DropdownToggle, |
||||
Card, |
||||
CardHeader, |
||||
CardBody, |
||||
CardTitle, |
||||
CardSubtitle, |
||||
ButtonGroup, |
||||
Button, |
||||
Input, |
||||
CustomInput, |
||||
FormGroup |
||||
} from 'reactstrap'; |
||||
import { GridDatabase } from '../../../crud/grid/GridDatatable'; |
||||
import {Button, Card, Col, Row} from 'reactstrap'; |
||||
import {GridDatabase} from '../../../crud/grid/GridDatatable'; |
||||
import {Redirect} from 'react-router-dom'; |
||||
|
||||
const FlightPlanGrid = (props) => { |
||||
return ( |
||||
<div className='pal-card-box'> |
||||
<Row> |
||||
<Col> |
||||
<div className='cont-ti d-flex justify-content-between align-items-sm-center align-items-start flex-sm-row'> |
||||
<div> |
||||
{/* <h4>{"비행 계획"} 목록</h4> */} |
||||
<h4>{"비행계획서 신청"} 목록</h4> |
||||
<span className='search-case'>검색결과 총 0건</span> |
||||
</div> |
||||
<div className='d-flex align-items-center'> |
||||
<Button.Ripple |
||||
color='primary' |
||||
size='sm' |
||||
onClick={props.moveFlightPlan} |
||||
> |
||||
{/* 계획서 생성 */} |
||||
비행계획서 신청 |
||||
</Button.Ripple> |
||||
</div> |
||||
</div> |
||||
<div className='invoice-list-wrapper'> |
||||
<Card> |
||||
<div className='invoice-list-dataTable'> |
||||
<GridDatabase |
||||
title={'비행이력'} |
||||
// data={props.data}
|
||||
count={0} |
||||
// columns={props.columns}
|
||||
// pagination={props.pagination}
|
||||
/> |
||||
{/* 검색된 데이터가 없습니다. */} |
||||
</div> |
||||
</Card> |
||||
</div> |
||||
</Col> |
||||
</Row> |
||||
</div> |
||||
) |
||||
|
||||
const FlightPlanGrid = ({movePage, planListData, handleMoveDetail}) => { |
||||
|
||||
const columns = [ |
||||
{id: 'planSno', name: '번호', cell: row => (<div>{row.planSno}</div>)}, |
||||
{id: 'fltPurpose', name: '비행목적', cell: row => (<div>{row.fltPurpose}</div>)}, |
||||
{ |
||||
id: 'fltMethod', name: '비행방식', cell: row => { |
||||
const displayName = row.areaList && row.areaList.length > 0 && row.areaList[0].fltMethod || '-'; |
||||
return <div>{displayName}</div> |
||||
} |
||||
}, |
||||
{id: 'schFltStDt', name: '출발일', cell: row => (<div>{row.schFltStDt}</div>)}, |
||||
{id: 'aprvlYn', name: '승인여부', cell: row => (<div>{row.aprvlYn}</div>)}, |
||||
{ |
||||
id: 'moveDetail', name: '상세보기', cell: row => { |
||||
return <Button.Ripple color='primary' size='sm' onClick={() => { |
||||
handleMoveDetail(row.planSno)} |
||||
}>상세</Button.Ripple>; |
||||
} |
||||
} |
||||
]; |
||||
console.log(planListData, columns) |
||||
return ( |
||||
<div className='pal-card-box'> |
||||
<Row> |
||||
<Col> |
||||
<div |
||||
className='cont-ti d-flex justify-content-between align-items-sm-center align-items-start flex-sm-row'> |
||||
<div> |
||||
{/* <h4>{"비행 계획"} 목록</h4> */} |
||||
<h4>{"비행계획서 신청"} 목록</h4> |
||||
<span className='search-case'>검색결과 총 0건</span> |
||||
</div> |
||||
<div className='d-flex align-items-center'> |
||||
<Button.Ripple |
||||
color='primary' |
||||
size='sm' |
||||
onClick={movePage} |
||||
> |
||||
{/* 계획서 생성 */} |
||||
비행계획서 신청 |
||||
</Button.Ripple> |
||||
</div> |
||||
</div> |
||||
<div className='invoice-list-wrapper'> |
||||
<Card> |
||||
<div className='invoice-list-dataTable'> |
||||
<GridDatabase |
||||
title={'비행이력'} |
||||
data={planListData} |
||||
// count={0}
|
||||
columns={columns} |
||||
// pagination={props.pagination}
|
||||
/> |
||||
{/* 검색된 데이터가 없습니다. */} |
||||
</div> |
||||
</Card> |
||||
</div> |
||||
</Col> |
||||
</Row> |
||||
</div> |
||||
) |
||||
} |
||||
|
||||
export default FlightPlanGrid; |
||||
export default FlightPlanGrid; |
||||
|
@ -1,174 +1,173 @@
|
||||
import React, { useEffect, useState } from 'react'; |
||||
import { |
||||
Row, |
||||
Col, |
||||
Table, |
||||
Badge, |
||||
UncontrolledDropdown, |
||||
DropdownMenu, |
||||
DropdownItem, |
||||
DropdownToggle, |
||||
Card, |
||||
CardHeader, |
||||
CardBody, |
||||
CardTitle, |
||||
CardSubtitle, |
||||
ButtonGroup, |
||||
Button, |
||||
Input, |
||||
CustomInput, |
||||
FormGroup |
||||
} from 'reactstrap'; |
||||
import { Calendar, Search } from 'react-feather'; |
||||
import React, {useState} from 'react'; |
||||
import {Button, Card, CardBody, Col, CustomInput, Row} from 'reactstrap'; |
||||
import {Search} from 'react-feather'; |
||||
import Flatpickr from 'react-flatpickr'; |
||||
import moment from 'moment'; |
||||
|
||||
|
||||
const FlightPlanSearch = (props) => { |
||||
const FlightPlanSearch = ({searchData, onChangeSearchData}) => { |
||||
|
||||
const [isCheck, setIsCheck] = useState({ |
||||
all: true, |
||||
yes: false, |
||||
no: false |
||||
}); |
||||
|
||||
useEffect(() => { |
||||
let aprvYn = ''; |
||||
|
||||
if (!isCheck.all) { |
||||
if (isCheck.yes) { |
||||
aprvYn = 'Y'; |
||||
} else if (isCheck.no) { |
||||
aprvYn = 'N'; |
||||
} else { |
||||
aprvYn = '-'; |
||||
} |
||||
const {schFltStDt, schFltEndDt, aprvlYn} = searchData; |
||||
const initCheckState = { |
||||
'all': aprvlYn == 'A', |
||||
'yes': (aprvlYn == 'Y' || aprvlYn == 'A'), |
||||
'no': (aprvlYn == 'N' || aprvlYn == 'A'), |
||||
} |
||||
|
||||
// props.setParams({
|
||||
// ...props.params,
|
||||
// aprvYn: aprvYn
|
||||
// });
|
||||
}, [isCheck]); |
||||
|
||||
return ( |
||||
<div className='pal-card-box'> |
||||
<Row> |
||||
<Col> |
||||
<div className='cont-ti d-flex justify-content-between align-items-sm-center align-items-start flex-sm-row'> |
||||
<div> |
||||
<h4>검색조건</h4> |
||||
</div> |
||||
<div className='d-flex align-items-center'> |
||||
<Button.Ripple |
||||
color='primary' |
||||
size='sm' |
||||
onClick={e => props.handlerSearch()} |
||||
> |
||||
<Search size={16} /> |
||||
검색 |
||||
</Button.Ripple> |
||||
</div> |
||||
</div> |
||||
<Card> |
||||
<CardBody className='pal-card-body'> |
||||
<div className='search-cont'> |
||||
<dl> |
||||
<dt> |
||||
<div className='search-box'> |
||||
<div className='search-list-ti'>신청일</div> |
||||
<div className='search-list'> |
||||
<div className='search-list-cont'> |
||||
<Row> |
||||
<Col className='list-input' xl='4' md='6' sm='12'> |
||||
<div className='d-flex align-items-center calendar-flat'> |
||||
<Flatpickr |
||||
id='searchDate' |
||||
value={[ |
||||
props.params.stDate, |
||||
props.params.endDate |
||||
]} |
||||
options={{ |
||||
mode: 'range', |
||||
defaultDate: [ |
||||
props.params.stDate, |
||||
props.params.endDate |
||||
] |
||||
}} |
||||
onChange={val => |
||||
props.handlerInput('searchDate', val) |
||||
} |
||||
onKeyPress={props.onKeyPress} |
||||
className='form-control flat-picker bg-transparent border-0 shadow-none' |
||||
/> |
||||
</div> |
||||
</Col> |
||||
</Row> |
||||
const [checkState, setCheckState] = useState(initCheckState); |
||||
const handleChangeInput = (dates, value, config) => { |
||||
if (dates.length === 2) { |
||||
const schFltStDt = moment(dates[0]).format('YYYY-MM-DD HH:mm:ss'); |
||||
const schFltEndDt = moment(dates[1]).set({'h': 23, 'm': 59, 's': 59}).format('YYYY-MM-DD HH:mm:ss'); |
||||
onChangeSearchData({schFltStDt, schFltEndDt}) |
||||
} |
||||
} |
||||
const handleChangeCheckbox = (e) => { |
||||
const {name, value, checked} = e.target; |
||||
let val; |
||||
switch (value) { |
||||
case 'A': |
||||
val = checked ? 'A' : ''; |
||||
onChangeSearchData({[name]: val}) |
||||
setCheckState({ |
||||
'all': checked, |
||||
'yes': checked, |
||||
'no': checked |
||||
}) |
||||
break; |
||||
case 'Y': |
||||
if (checked && checkState.no) val = 'A' |
||||
else if (checked && !checkState.no) val = 'Y' |
||||
else if (!checked && checkState.no) val = 'N' |
||||
else if (!checked && !checkState.no) val = '' |
||||
onChangeSearchData({[name]: val}) |
||||
setCheckState(prevState => ({ |
||||
'all': prevState.no && checked, |
||||
'yes': checked, |
||||
'no': prevState.no |
||||
})) |
||||
break; |
||||
case 'N': |
||||
if (checked && checkState.yes) val = 'A' |
||||
else if (checked && !checkState.yes) val = 'N' |
||||
else if (!checked && checkState.yes) val = 'Y' |
||||
else if (!checked && !checkState.yes) val = '' |
||||
onChangeSearchData({[name]: val}) |
||||
setCheckState(prevState => ({ |
||||
'all': prevState.yes && checked, |
||||
'yes': prevState.yes, |
||||
'no': checked |
||||
})) |
||||
break; |
||||
default: |
||||
break; |
||||
} |
||||
} |
||||
return ( |
||||
<div className='pal-card-box'> |
||||
<Row> |
||||
<Col> |
||||
<div |
||||
className='cont-ti d-flex justify-content-between align-items-sm-center align-items-start flex-sm-row'> |
||||
<div> |
||||
<h4>검색조건</h4> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</dt> |
||||
|
||||
<dt> |
||||
<div className='search-box'> |
||||
<div className='search-list-ti'>승인여부</div> |
||||
<div className='search-list'> |
||||
{/* <div className="search-list-cont"> |
||||
<Input size='sm'/> |
||||
</div> */} |
||||
<div className='search-list-cont'> |
||||
<CustomInput |
||||
inline |
||||
type='checkbox' |
||||
id='exampleCustomCheckbox' |
||||
label='전체' |
||||
checked={isCheck.all} |
||||
onClick={() => |
||||
setIsCheckBox({ |
||||
all: !isCheck.all, |
||||
yes: !isCheck.all, |
||||
no: !isCheck.all |
||||
}) |
||||
} |
||||
/> |
||||
<CustomInput |
||||
inline |
||||
type='checkbox' |
||||
id='exampleCustomCheckbox2' |
||||
label='승인' |
||||
checked={isCheck.yes || isCheck.all} |
||||
onClick={() => |
||||
setIsCheckBox({ |
||||
all: false, |
||||
yes: !isCheck.yes |
||||
}) |
||||
} |
||||
/> |
||||
<CustomInput |
||||
inline |
||||
type='checkbox' |
||||
id='exampleCustomCheckbox3' |
||||
label='미승인' |
||||
checked={isCheck.no || isCheck.all} |
||||
onClick={() => |
||||
setIsCheckBox({ |
||||
all: false, |
||||
no: !isCheck.no |
||||
}) |
||||
} |
||||
/> |
||||
<div className='d-flex align-items-center'> |
||||
<Button.Ripple |
||||
color='primary' |
||||
size='sm' |
||||
onClick={e => { |
||||
}} |
||||
> |
||||
<Search size={16}/> |
||||
검색 |
||||
</Button.Ripple> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</dt> |
||||
</dl> |
||||
</div> |
||||
</CardBody> |
||||
</Card> |
||||
|
||||
</Col> |
||||
</Row> |
||||
</div> |
||||
) |
||||
<Card> |
||||
<CardBody className='pal-card-body'> |
||||
<div className='search-cont'> |
||||
<dl> |
||||
<dt> |
||||
<div className='search-box'> |
||||
<div className='search-list-ti'>신청일</div> |
||||
<div className='search-list'> |
||||
<div className='search-list-cont'> |
||||
<Row> |
||||
<Col className='list-input' xl='4' md='6' sm='12'> |
||||
<div className='d-flex align-items-center calendar-flat'> |
||||
<Flatpickr |
||||
id='searchDate' |
||||
value={[ |
||||
schFltStDt, |
||||
schFltEndDt |
||||
]} |
||||
options={{ |
||||
mode: 'range', |
||||
// defaultDate: [
|
||||
// props.params.stDate,
|
||||
// props.params.endDate
|
||||
// ]
|
||||
}} |
||||
onChange={handleChangeInput} |
||||
className='form-control flat-picker bg-transparent border-0 shadow-none' |
||||
/> |
||||
</div> |
||||
</Col> |
||||
</Row> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</dt> |
||||
|
||||
<dt> |
||||
<div className='search-box'> |
||||
<div className='search-list-ti'>승인여부</div> |
||||
<div className='search-list'> |
||||
<div className='search-list-cont'> |
||||
<CustomInput |
||||
inline |
||||
type='checkbox' |
||||
id='exampleCustomCheckbox' |
||||
label='전체' |
||||
name="aprvlYn" |
||||
value="A" |
||||
// checked={true}
|
||||
checked={checkState.all} |
||||
onChange={handleChangeCheckbox} |
||||
/> |
||||
<CustomInput |
||||
inline |
||||
type='checkbox' |
||||
id='exampleCustomCheckbox2' |
||||
label='승인' |
||||
name="aprvlYn" |
||||
value="Y" |
||||
checked={checkState.yes} |
||||
onChange={handleChangeCheckbox} |
||||
/> |
||||
<CustomInput |
||||
inline |
||||
type='checkbox' |
||||
id='exampleCustomCheckbox3' |
||||
label='미승인' |
||||
name="aprvlYn" |
||||
value="N" |
||||
checked={checkState.no} |
||||
onChange={handleChangeCheckbox} |
||||
/> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</dt> |
||||
</dl> |
||||
</div> |
||||
</CardBody> |
||||
</Card> |
||||
|
||||
</Col> |
||||
</Row> |
||||
</div> |
||||
) |
||||
} |
||||
|
||||
export default FlightPlanSearch; |
||||
export default FlightPlanSearch; |
||||
|
@ -1,38 +1,66 @@
|
||||
import React, { useState } from 'react'; |
||||
import React, {useEffect, useState} from 'react'; |
||||
import moment from 'moment'; |
||||
import { Link, useHistory } from 'react-router-dom'; |
||||
import {Link, Redirect, useHistory} from 'react-router-dom'; |
||||
import FlightPlanGrid from '../../../../components/basis/flight/plan/FlightPlanGrid'; |
||||
import { CustomMainLayout } from '../../../../components/layout/CustomMainLayout'; |
||||
import {CustomMainLayout} from '../../../../components/layout/CustomMainLayout'; |
||||
import FlightPlanSearch from '../../../../components/basis/flight/plan/FlightPlanSearch'; |
||||
import {useDispatch, useSelector} from 'react-redux'; |
||||
import * as FlightAction from '../../../../modules/basis/flight/actions/basisFlightAction'; |
||||
import {FlightPlanListRqData} from '../../../../modules/basis/flight/models/basisFlightModel'; |
||||
|
||||
const FlightPlanContainer = () => { |
||||
|
||||
const initSearchData = { |
||||
schFltStDt: moment().set({'h': 0, 'm': 0, 's': 0}).format('YYYY-MM-DD HH:mm:ss'), |
||||
schFltEndDt: moment().set({'h': 23, 'm': 59, 's': 59}).format('YYYY-MM-DD HH:mm:ss'), |
||||
aprvlYn: 'N', |
||||
} |
||||
const columns = [{}] |
||||
const FlightPlanContainer = () => { |
||||
const dispatch = useDispatch(); |
||||
const history = useHistory(); |
||||
const [searchData, setSerchData] = useState(initSearchData); |
||||
const planListData = useSelector(state => state.flightState.list); |
||||
|
||||
const moveFlightPlan = () => { |
||||
const moveFlightPlanDetailPage = () => { |
||||
history.push('/basis/flight/plan/create'); |
||||
}; |
||||
|
||||
const [times, setTimes] = useState({ |
||||
stDate: moment().subtract(1, 'day').format('YYYY-MM-DD'), |
||||
endDate: moment().subtract(-1, 'day').format('YYYY-MM-DD'), |
||||
search1: '' |
||||
}) |
||||
useEffect(() => { |
||||
dispatch(FlightAction.FLIGHT_PLAN_LIST.request(searchData)) |
||||
}, []) |
||||
|
||||
// console.log(history, 'history')
|
||||
console.log(searchData) |
||||
const handleChangeSearchData = (values) => { |
||||
setSerchData(prevState => ({ |
||||
...prevState, |
||||
...values |
||||
})) |
||||
} |
||||
|
||||
// 비행계획서 저장
|
||||
const handleClickCreate = () => { |
||||
|
||||
}; |
||||
const handleMoveDetail = (id) => { |
||||
history.push(`/basis/flight/plan/detail/${id}`) |
||||
} |
||||
|
||||
return ( |
||||
// <CustomMainLayout title={"비행 계획 관리"}>
|
||||
<CustomMainLayout title={"비행계획서 신청"}> |
||||
<FlightPlanSearch
|
||||
params={times} |
||||
/> |
||||
<FlightPlanGrid
|
||||
moveFlightPlan={moveFlightPlan} |
||||
/> |
||||
<FlightPlanSearch |
||||
searchData={searchData} |
||||
onChangeSearchData={handleChangeSearchData} |
||||
/> |
||||
<FlightPlanGrid |
||||
movePage={moveFlightPlanDetailPage} |
||||
planListData={planListData} |
||||
columns={columns} |
||||
handleMoveDetail={handleMoveDetail} |
||||
/> |
||||
</CustomMainLayout> |
||||
) |
||||
} |
||||
|
||||
export default FlightPlanContainer; |
||||
export default FlightPlanContainer; |
||||
|
@ -1,18 +1,57 @@
|
||||
import axios from '../../../utils/customAxiosUtil'; |
||||
import qs from 'qs'; |
||||
import { FlightPlanData } from '../models/basisFlightModel'; |
||||
import { FlightPlanData, FlightPlanListRqData } from '../models/basisFlightModel'; |
||||
|
||||
|
||||
export const flightPlanAPI = { |
||||
area: async () => { |
||||
return await axios.get(`api/bas/flight/area`); |
||||
}, |
||||
Create: async (data: FlightPlanData) => { |
||||
console.log(data); |
||||
|
||||
const res = await axios.post('api/bas/flight/create', data); |
||||
console.log('res>>>>', res); |
||||
|
||||
return res; |
||||
} |
||||
} |
||||
area: async () => { |
||||
const res = await axios.get(`api/bas/flight/area`); |
||||
return res; |
||||
}, |
||||
list: async (data: FlightPlanListRqData) => { |
||||
const queryString = qs.stringify(data, { |
||||
addQueryPrefix: true, |
||||
arrayFormat: 'repeat' |
||||
}); |
||||
console.log('>>> rq : ', queryString) |
||||
const res = await axios.get(`api/bas/flight/plan/list${queryString}`); |
||||
console.log('>>> rs : ', res); |
||||
return res; |
||||
}, |
||||
detail: async (planSno: number) => { |
||||
console.log('>>> rq : ', planSno) |
||||
const res = await axios.get(`api/bas/flight/plan/detail/${planSno}`); |
||||
console.log('>>> rs : ', res); |
||||
return res; |
||||
}, |
||||
create: async (data: FlightPlanData) => { |
||||
console.log('>>> rq : ', data) |
||||
const res = await axios.post(`api/bas/flight/paln/create`, data); |
||||
console.log('>>> rs : ', res); |
||||
return res; |
||||
}, |
||||
update: async (data: FlightPlanData) => { |
||||
console.log('>>> rq : ', data) |
||||
const res = await axios.put(`api/bas/flight/plan/update`, data); |
||||
console.log('>>> rs : ', res); |
||||
return res; |
||||
}, |
||||
delete: async (planSno: number) => { |
||||
console.log('>>> rq : ', planSno) |
||||
const res = await axios.get(`api/bas/flight/plan/delete/${planSno}`); |
||||
console.log('>>> rs : ', res); |
||||
return res; |
||||
}, |
||||
listPilot: async (groupId: number) => { |
||||
console.log('>>> rq : ', groupId) |
||||
const res = await axios.get(`api/bas/flight/plan/pilot/${groupId}`); |
||||
console.log('>>> rs : ', res); |
||||
return res; |
||||
}, |
||||
listArcrft: async (groupId: number) => { |
||||
console.log('>>> rq : ', groupId) |
||||
const res = await axios.get(`api/bas/flight/plan/arcrft/${groupId}`); |
||||
console.log('>>> rs : ', res); |
||||
return res; |
||||
} |
||||
} |
||||
|
@ -1,49 +1,116 @@
|
||||
import { date } from "yup"; |
||||
|
||||
export interface FlightState { |
||||
areaList: FlightAreaData | undefined
|
||||
flightPlanArea: FlightPlanArea | undefined |
||||
flightPlanData: FlightPlanData | undefined |
||||
areaList: FlightAreaData | undefined |
||||
flightPlanArea: FlightPlanArea | undefined |
||||
list: [FlightPlanData] | undefined |
||||
detail: FlightPlanData | undefined |
||||
pilotList: FlightPlanPilotDataList | undefined |
||||
arcrftList: FlightPlanArcrftDataList | undefined |
||||
} |
||||
|
||||
export interface FlightAreaData { |
||||
areaList: [] |
||||
areaList: [] |
||||
} |
||||
|
||||
export interface FlightPlanArea { |
||||
address : '', |
||||
coordinates : '', |
||||
redius : '', |
||||
altitude_m : '', |
||||
altitude_ft : '', |
||||
address: '', |
||||
coordinates: '', |
||||
redius: '', |
||||
altitude_m: '', |
||||
altitude_ft: '', |
||||
} |
||||
|
||||
export interface FlightPlanData { |
||||
id:string; |
||||
memberName:string; |
||||
clncd:string; |
||||
hpno:string; |
||||
email:string; |
||||
lonlat:string; |
||||
lonlat2:string; |
||||
lonlat3:string; |
||||
fltElev:string; |
||||
fltHight:string; |
||||
fltMethod:string; |
||||
groupNm:string; |
||||
pilotName:string; |
||||
pilotHpno:string; |
||||
pilotEmail:string; |
||||
aGroupNm:string; |
||||
arcrftModelNm:string; |
||||
arcrftTypeCd:string; |
||||
ownerNm:string; |
||||
createUserId:string; |
||||
updateUserId:string; |
||||
schFltStDt:Date; |
||||
schFltEndDt:Date; |
||||
planArcrftSno: number, |
||||
planSno: number, |
||||
arcrftSno: number, |
||||
idntfNum: string, |
||||
groupNm: string, |
||||
prdctNum: string, |
||||
arcrftTypeCd: string, |
||||
arcrftModelNm: string, |
||||
prdctCmpnNm: string, |
||||
prdctDate: Date; |
||||
arcrftLngth: number, |
||||
arcrftWdth: number, |
||||
arcrftHght: number, |
||||
arcrftWght: number, |
||||
wghtTypeCd: string, |
||||
imageUrl: string, |
||||
takeoffWght: number; |
||||
useYn: string, |
||||
cameraYn: string, |
||||
insrncYn: string, |
||||
ownerNm: string, |
||||
createUserId: string, |
||||
createDt: Date, |
||||
updateUserId: string, |
||||
updateDt: Date, |
||||
areaList: FlightPlanAreaDataList, |
||||
pilotList: FlightPlanPilotDataList, |
||||
arcrftList: FlightPlanArcrftDataList, |
||||
docState: string, |
||||
} |
||||
|
||||
export interface FlightPlanAreaData { |
||||
planAreaSno: number, |
||||
planSno: number, |
||||
areaType: string, |
||||
fltMethod: string, |
||||
bufferZone: number, |
||||
fltElev: string, |
||||
createUserId: string, |
||||
createDt: Date, |
||||
updateUserId: string, |
||||
updateDt: Date, |
||||
coordList: FlightPlanAreaCoordData |
||||
docState: string, |
||||
} |
||||
|
||||
export interface FlightPlanAreaDataList extends Array<FlightPlanAreaData> {}; |
||||
|
||||
export interface FlightPlanAreaCoordData { |
||||
planAreaCoordSno: number, |
||||
planAreaSno: number, |
||||
lat: number, |
||||
lon: number, |
||||
createUserId: string, |
||||
createDt: Date, |
||||
docState: string |
||||
} |
||||
|
||||
export interface FlightPlanAreaCoordData extends Array<FlightPlanAreaCoordData> {}; |
||||
|
||||
export interface FlightPlanPilotData { |
||||
|
||||
} |
||||
|
||||
export interface FlightPlanPilotDataList extends Array<FlightPlanPilotData> {}; |
||||
|
||||
export interface FlightPlanArcrftData { |
||||
|
||||
} |
||||
|
||||
export interface FlightPlanArcrftDataList extends Array<FlightPlanArcrftData> {}; |
||||
|
||||
// rq
|
||||
export interface FlightPlanListRqData { |
||||
schFltStDt: Date, |
||||
schFltEndDt: Date, |
||||
aprvlYn: string |
||||
} |
||||
export interface FlightPlanAprovRqData { |
||||
planSnoList: [number], |
||||
aprvlYn: string |
||||
} |
||||
|
||||
|
||||
export const initFlight = { |
||||
areaList: undefined, |
||||
flightPlanArea: undefined, |
||||
flightPlanData: undefined
|
||||
}; |
||||
areaList: undefined, |
||||
flightPlanArea: undefined, |
||||
list: undefined, |
||||
detail: undefined, |
||||
pilotList: undefined, |
||||
arcrftList: undefined |
||||
}; |
||||
|
Loading…
Reference in new issue