|
|
@ -1,4 +1,4 @@ |
|
|
|
import React, { useEffect, useState } from 'react'; |
|
|
|
import React, { useEffect, useState, useRef } from 'react'; |
|
|
|
import { useDispatch, useSelector } from 'react-redux'; |
|
|
|
import { useDispatch, useSelector } from 'react-redux'; |
|
|
|
import { Button, Card } from '@component/ui'; |
|
|
|
import { Button, Card } from '@component/ui'; |
|
|
|
import { openModal } from '@src/redux/features/comn/message/messageSlice'; |
|
|
|
import { openModal } from '@src/redux/features/comn/message/messageSlice'; |
|
|
@ -52,7 +52,6 @@ export default function OperationApprovalsTable(props) { |
|
|
|
// 유효성 기체 데이터
|
|
|
|
// 유효성 기체 데이터
|
|
|
|
const [validData, setValidData] = useState(); |
|
|
|
const [validData, setValidData] = useState(); |
|
|
|
|
|
|
|
|
|
|
|
console.log('>>', laancAprvList); |
|
|
|
|
|
|
|
useEffect(() => { |
|
|
|
useEffect(() => { |
|
|
|
let approvalCdValue = { S: 0, F: 0, C: 0, U: 0 }; |
|
|
|
let approvalCdValue = { S: 0, F: 0, C: 0, U: 0 }; |
|
|
|
|
|
|
|
|
|
|
@ -271,7 +270,6 @@ export default function OperationApprovalsTable(props) { |
|
|
|
dataIndex: 'allowRadius', |
|
|
|
dataIndex: 'allowRadius', |
|
|
|
align: 'center', |
|
|
|
align: 'center', |
|
|
|
width: '80px', |
|
|
|
width: '80px', |
|
|
|
editable: true, |
|
|
|
|
|
|
|
render: (text, record) => { |
|
|
|
render: (text, record) => { |
|
|
|
return text ? text : '-'; |
|
|
|
return text ? text : '-'; |
|
|
|
} |
|
|
|
} |
|
|
@ -620,7 +618,6 @@ export default function OperationApprovalsTable(props) { |
|
|
|
{ |
|
|
|
{ |
|
|
|
dataIndex: 'allowRadius', |
|
|
|
dataIndex: 'allowRadius', |
|
|
|
align: 'center', |
|
|
|
align: 'center', |
|
|
|
editable: true, |
|
|
|
|
|
|
|
width: '80px', |
|
|
|
width: '80px', |
|
|
|
render: text => { |
|
|
|
render: text => { |
|
|
|
return text ? text : <>-</>; |
|
|
|
return text ? text : <>-</>; |
|
|
@ -874,7 +871,7 @@ export default function OperationApprovalsTable(props) { |
|
|
|
const edit = record => { |
|
|
|
const edit = record => { |
|
|
|
form.setFieldsValue({ |
|
|
|
form.setFieldsValue({ |
|
|
|
planAreaSno: record.planAreaSno, |
|
|
|
planAreaSno: record.planAreaSno, |
|
|
|
bufferZone: record.bufferZone, |
|
|
|
reqRadius: record.reqRadius, |
|
|
|
fltElev: record.fltElev, |
|
|
|
fltElev: record.fltElev, |
|
|
|
dtl: record.dtl, |
|
|
|
dtl: record.dtl, |
|
|
|
era: record.era, |
|
|
|
era: record.era, |
|
|
@ -899,8 +896,8 @@ export default function OperationApprovalsTable(props) { |
|
|
|
updateLaancAprv([ |
|
|
|
updateLaancAprv([ |
|
|
|
{ |
|
|
|
{ |
|
|
|
planAreaSno: selectedRowKey, |
|
|
|
planAreaSno: selectedRowKey, |
|
|
|
bufferZone: row.bufferZone, |
|
|
|
reqRadius: row.reqRadius || '', |
|
|
|
fltElev: row.fltElev, |
|
|
|
fltElev: row.fltElev || '', |
|
|
|
dtl: row.dtl || '', |
|
|
|
dtl: row.dtl || '', |
|
|
|
era: row.era || '', |
|
|
|
era: row.era || '', |
|
|
|
rm: row.rm || '' |
|
|
|
rm: row.rm || '' |
|
|
@ -1099,82 +1096,87 @@ export default function OperationApprovalsTable(props) { |
|
|
|
vertical={true} |
|
|
|
vertical={true} |
|
|
|
horizontal={true} |
|
|
|
horizontal={true} |
|
|
|
activationDistance={10} |
|
|
|
activationDistance={10} |
|
|
|
|
|
|
|
ignoreElements='.editable-input' // 이 클래스의 요소는 드래그 이벤트에서 제외
|
|
|
|
> |
|
|
|
> |
|
|
|
<div style={{ width: '2000px' }}> |
|
|
|
<div style={{ width: '2000px' }}> |
|
|
|
<Table |
|
|
|
<Form form={form} component={false}> |
|
|
|
components={{ |
|
|
|
<Table |
|
|
|
body: { |
|
|
|
components={{ |
|
|
|
cell: EditableCell |
|
|
|
body: { |
|
|
|
} |
|
|
|
cell: EditableCell |
|
|
|
}} |
|
|
|
} |
|
|
|
dataSource={laancAprvList.map((item, index) => ({ |
|
|
|
}} |
|
|
|
...item, |
|
|
|
dataSource={laancAprvList.map((item, index) => ({ |
|
|
|
key: |
|
|
|
...item, |
|
|
|
item.areaList.length >= 1 |
|
|
|
key: |
|
|
|
? `${item.planAreaSno}-${index}` |
|
|
|
item.areaList.length >= 1 |
|
|
|
: `${item.planAreaSno}` |
|
|
|
? `${item.planAreaSno}-${index}` |
|
|
|
}))} |
|
|
|
: `${item.planAreaSno}` |
|
|
|
columns={mergedColumns} |
|
|
|
}))} |
|
|
|
rowClassName={record => { |
|
|
|
columns={mergedColumns} |
|
|
|
let className = ''; |
|
|
|
rowClassName={record => { |
|
|
|
if (record.areaList.length <= 1) { |
|
|
|
let className = ''; |
|
|
|
if (record?.areaList[0]?.approvalCd === 'S') { |
|
|
|
if (record.areaList.length <= 1) { |
|
|
|
className += 'flight-approval-row editable-row'; |
|
|
|
if (record?.areaList[0]?.approvalCd === 'S') { |
|
|
|
} else if (record.areaList[0].approvalCd === 'F') { |
|
|
|
className += 'flight-approval-row editable-row'; |
|
|
|
className += 'flight-not-approval-row editable-row'; |
|
|
|
} else if (record.areaList[0].approvalCd === 'F') { |
|
|
|
} else if (record.areaList[0].approvalCd === 'C') { |
|
|
|
className += |
|
|
|
className += |
|
|
|
'flight-not-approval-row editable-row'; |
|
|
|
'flight-condition-approval-row editable-row'; |
|
|
|
} else if (record.areaList[0].approvalCd === 'C') { |
|
|
|
} else className += 'editable-row'; |
|
|
|
className += |
|
|
|
} |
|
|
|
'flight-condition-approval-row editable-row'; |
|
|
|
|
|
|
|
} else className += 'editable-row'; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (props.selected?.length > 0) { |
|
|
|
if (props.selected?.length > 0) { |
|
|
|
if ( |
|
|
|
if ( |
|
|
|
record.areaList.length <= 1 && |
|
|
|
record.areaList.length <= 1 && |
|
|
|
record.areaList[0].planAreaSno === props.selected[0] |
|
|
|
record.areaList[0].planAreaSno === |
|
|
|
) { |
|
|
|
props.selected[0] |
|
|
|
className += ' flight-approval-row-click'; |
|
|
|
) { |
|
|
|
|
|
|
|
className += ' flight-approval-row-click'; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (expandedRowKeys.includes(record.key)) { |
|
|
|
if (expandedRowKeys.includes(record.key)) { |
|
|
|
className += ' expanded-row'; |
|
|
|
className += ' expanded-row'; |
|
|
|
} |
|
|
|
} |
|
|
|
if (record.areaList.length > 1) { |
|
|
|
if (record.areaList.length > 1) { |
|
|
|
className += 'expanded-tr'; |
|
|
|
className += 'expanded-tr'; |
|
|
|
} |
|
|
|
|
|
|
|
return className; |
|
|
|
|
|
|
|
}} |
|
|
|
|
|
|
|
onRow={record => ({ |
|
|
|
|
|
|
|
onClick: event => { |
|
|
|
|
|
|
|
if (editingKey !== '') { |
|
|
|
|
|
|
|
return; // edit 상태면 이벤트 실행 안 함
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
setSelectedRowKey(record.planAreaSno); |
|
|
|
return className; |
|
|
|
// 이벤트 버블링을 막기 위해 클릭된 요소가 'Edit' 버튼인지 확인
|
|
|
|
}} |
|
|
|
if ( |
|
|
|
onRow={record => ({ |
|
|
|
event.target.tagName !== 'BUTTON' && |
|
|
|
onClick: event => { |
|
|
|
event.target.tagName !== 'A' && |
|
|
|
if (editingKey !== '') { |
|
|
|
!event.target.closest('.ant-input') && // input 요소를 감지
|
|
|
|
return; // edit 상태면 이벤트 실행 안 함
|
|
|
|
!event.target.closest('.ant-input-number') // inputNumber 요소를 감지
|
|
|
|
} |
|
|
|
) { |
|
|
|
setSelectedRowKey(record.planAreaSno); |
|
|
|
handleRowClick(record); |
|
|
|
// 이벤트 버블링을 막기 위해 클릭된 요소가 'Edit' 버튼인지 확인
|
|
|
|
|
|
|
|
if ( |
|
|
|
|
|
|
|
event.target.tagName !== 'BUTTON' && |
|
|
|
|
|
|
|
event.target.tagName !== 'A' && |
|
|
|
|
|
|
|
!event.target.closest('.ant-input') && // input 요소를 감지
|
|
|
|
|
|
|
|
!event.target.closest('.ant-input-number') // inputNumber 요소를 감지
|
|
|
|
|
|
|
|
) { |
|
|
|
|
|
|
|
handleRowClick(record); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
})} |
|
|
|
})} |
|
|
|
loading={laancAprvLoading} |
|
|
|
loading={laancAprvLoading} |
|
|
|
expandable={{ |
|
|
|
expandable={{ |
|
|
|
expandedRowRender, |
|
|
|
expandedRowRender, |
|
|
|
expandedRowKeys: expandedRowKeys, |
|
|
|
expandedRowKeys: expandedRowKeys, |
|
|
|
onExpand: (expanded, record) => handleExpand(record), |
|
|
|
onExpand: (expanded, record) => handleExpand(record), |
|
|
|
rowExpandable: record => record?.areaList?.length > 1 |
|
|
|
rowExpandable: record => record?.areaList?.length > 1 |
|
|
|
}} |
|
|
|
}} |
|
|
|
scroll={{ |
|
|
|
scroll={{ |
|
|
|
x: 1700 |
|
|
|
x: 1700 |
|
|
|
}} |
|
|
|
}} |
|
|
|
rowHoverable={false} |
|
|
|
rowHoverable={false} |
|
|
|
expandIconColumnIndex={-1} |
|
|
|
expandIconColumnIndex={-1} |
|
|
|
/> |
|
|
|
/> |
|
|
|
</Form> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</ScrollContainer> |
|
|
|
</ScrollContainer> |
|
|
|
</Form> |
|
|
|
</Form> |
|
|
@ -1207,18 +1209,7 @@ const EditableCell = ({ |
|
|
|
return ( |
|
|
|
return ( |
|
|
|
<td {...restProps}> |
|
|
|
<td {...restProps}> |
|
|
|
{editing ? ( |
|
|
|
{editing ? ( |
|
|
|
<Form.Item |
|
|
|
<Form.Item name={dataIndex} className='editable-input'> |
|
|
|
name={dataIndex} |
|
|
|
|
|
|
|
style={{ |
|
|
|
|
|
|
|
margin: 0 |
|
|
|
|
|
|
|
}} |
|
|
|
|
|
|
|
// rules={[
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
// required: true,
|
|
|
|
|
|
|
|
// message: `값을 입력해 주세요`
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// ]}
|
|
|
|
|
|
|
|
> |
|
|
|
|
|
|
|
{inputNode} |
|
|
|
{inputNode} |
|
|
|
</Form.Item> |
|
|
|
</Form.Item> |
|
|
|
) : ( |
|
|
|
) : ( |
|
|
|