|
@@ -3,23 +3,30 @@ import FileModal from '@/components/FileModal'
|
|
import { contractStore } from '@/store/mobx'
|
|
import { contractStore } from '@/store/mobx'
|
|
import { iFileModal } from '@/types/file'
|
|
import { iFileModal } from '@/types/file'
|
|
import consts from '@/utils/consts'
|
|
import consts from '@/utils/consts'
|
|
-import { dayjsFomrat } from '@/utils/util'
|
|
|
|
|
|
+import { dayjsFormat } from '@/utils/util'
|
|
import { DisconnectOutlined } from '@ant-design/icons'
|
|
import { DisconnectOutlined } from '@ant-design/icons'
|
|
import { Form, Input, Popconfirm, Table } from 'antd'
|
|
import { Form, Input, Popconfirm, Table } from 'antd'
|
|
import locale from 'antd/es/date-picker/locale/zh_CN'
|
|
import locale from 'antd/es/date-picker/locale/zh_CN'
|
|
|
|
+import dayjs from 'dayjs'
|
|
import { observer } from 'mobx-react'
|
|
import { observer } from 'mobx-react'
|
|
-import React, { useEffect, useState } from 'react'
|
|
|
|
-import { apiGetReturns } from './api'
|
|
|
|
|
|
+import React, { useEffect, useMemo, useState } from 'react'
|
|
|
|
+import { apiDelReturn, apiGetReturns, apiUpdateReturn } from './api'
|
|
|
|
|
|
interface iReceivableState {
|
|
interface iReceivableState {
|
|
- id: string
|
|
|
|
- receDate: Date
|
|
|
|
- receAmount: number
|
|
|
|
- receWay: string
|
|
|
|
- receDesigner: string
|
|
|
|
- createTime: Date
|
|
|
|
- remark: string
|
|
|
|
- attacment: number
|
|
|
|
|
|
+ accountId: string;
|
|
|
|
+ annexes: number;
|
|
|
|
+ bidsectionId: string;
|
|
|
|
+ contractsId: string;
|
|
|
|
+ createTime: string;
|
|
|
|
+ createUser: string;
|
|
|
|
+ fileCounts: number;
|
|
|
|
+ id: string;
|
|
|
|
+ page: number;
|
|
|
|
+ price: string;
|
|
|
|
+ projectId: string;
|
|
|
|
+ remarks: string;
|
|
|
|
+ time: string;
|
|
|
|
+ way: string;
|
|
}
|
|
}
|
|
interface EditableCellProps extends React.HTMLAttributes<HTMLElement> {
|
|
interface EditableCellProps extends React.HTMLAttributes<HTMLElement> {
|
|
editing: boolean;
|
|
editing: boolean;
|
|
@@ -43,12 +50,15 @@ const EditableCell: React.FC<EditableCellProps> = ({
|
|
}) => {
|
|
}) => {
|
|
// console.log(dataIndex, record)
|
|
// console.log(dataIndex, record)
|
|
|
|
|
|
- const cellNode = cellType === 'text' ? <Input value={dataIndex && record[dataIndex]} size="small" allowClear/> : <DatePicker value={dataIndex && record[dataIndex]} size="small" allowClear locale={locale} />
|
|
|
|
|
|
+ const cellNode = cellType === 'text' ? <Input size="small" allowClear/> : <DatePicker size="small" allowClear locale={locale} />
|
|
|
|
|
|
|
|
+ const isDate = useMemo(() => {
|
|
|
|
+ return dataIndex === 'createTime' || dataIndex === 'time'
|
|
|
|
+ }, [ dataIndex ])
|
|
return (
|
|
return (
|
|
<td {...restProps}>
|
|
<td {...restProps}>
|
|
{editing ? (
|
|
{editing ? (
|
|
- <Form.Item name={dataIndex} style={{ margin: 0 }} rules={[ { required: true, message: `请输入${title}!` } ]}>
|
|
|
|
|
|
+ <Form.Item name={dataIndex} initialValue={isDate ? dayjs(record[dataIndex]) : record[dataIndex]} style={{ margin: 0 }} rules={[ dataIndex === 'remarks' ? {} : { required: true, message: `请输入${title}!` } ]}>
|
|
{cellNode}
|
|
{cellNode}
|
|
</Form.Item>
|
|
</Form.Item>
|
|
) : (
|
|
) : (
|
|
@@ -70,8 +80,12 @@ const Receivable:React.FC<{}> = () => {
|
|
})
|
|
})
|
|
const [ editingKey, setEditingKey ] = useState<string>('')
|
|
const [ editingKey, setEditingKey ] = useState<string>('')
|
|
|
|
|
|
- const delConfirm = (key: string) => {
|
|
|
|
- console.log(key)
|
|
|
|
|
|
+ const delConfirm = async (id: string, contractsId: string, bidsectionId: string) => {
|
|
|
|
+ const { code = -1 } = await apiDelReturn(id, contractsId, bidsectionId)
|
|
|
|
+ if (code === consts.RET_CODE.SUCCESS) {
|
|
|
|
+ const newData = data.filter(item => item.id !== id)
|
|
|
|
+ setData(newData)
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
useEffect(() => {
|
|
useEffect(() => {
|
|
@@ -81,9 +95,8 @@ const Receivable:React.FC<{}> = () => {
|
|
initData()
|
|
initData()
|
|
} else if (contractStore.shouldUpdate && contractStore.shouldUpdate === '2') {
|
|
} else if (contractStore.shouldUpdate && contractStore.shouldUpdate === '2') {
|
|
initData()
|
|
initData()
|
|
- contractStore.shouldUpdate && contractStore.changeUpdate('')
|
|
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+ contractStore.shouldUpdate && (contractStore.changeUpdate(''))
|
|
}
|
|
}
|
|
}, [ contractStore.contract.id, contractStore.shouldUpdate ])
|
|
}, [ contractStore.contract.id, contractStore.shouldUpdate ])
|
|
const initData = async() => {
|
|
const initData = async() => {
|
|
@@ -100,17 +113,24 @@ const Receivable:React.FC<{}> = () => {
|
|
const index = newData.findIndex(item => key === item.id)
|
|
const index = newData.findIndex(item => key === item.id)
|
|
if (index > -1) {
|
|
if (index > -1) {
|
|
const item = newData[index]
|
|
const item = newData[index]
|
|
- newData.splice(index, 1, {
|
|
|
|
- ...item,
|
|
|
|
- ...row
|
|
|
|
- })
|
|
|
|
- setData(newData)
|
|
|
|
- setEditingKey('')
|
|
|
|
- } else {
|
|
|
|
- newData.push(row)
|
|
|
|
- setData(newData)
|
|
|
|
- setEditingKey('')
|
|
|
|
|
|
+ console.log(row)
|
|
|
|
+ console.log(item)
|
|
|
|
+ const payload = { ...row, time: dayjsFormat(row.time, 'YYYY-MM-DD'), createTime: dayjsFormat(row.createTime, 'YYYY-MM-DD'), id: item.id, bidsectionId: item.bidsectionId, contractsId: item.contractsId }
|
|
|
|
+ const { code = -1 } = await apiUpdateReturn(payload)
|
|
|
|
+ if (code === consts.RET_CODE.SUCCESS) {
|
|
|
|
+ newData.splice(index, 1, {
|
|
|
|
+ ...item,
|
|
|
|
+ ...row
|
|
|
|
+ })
|
|
|
|
+ setData(newData)
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
+ setEditingKey('')
|
|
|
|
+ // else {
|
|
|
|
+ // newData.push(row)
|
|
|
|
+ // setData(newData)
|
|
|
|
+ // setEditingKey('')
|
|
|
|
+ // }
|
|
} catch (errInfo) {
|
|
} catch (errInfo) {
|
|
console.log('Validate Failed:', errInfo)
|
|
console.log('Validate Failed:', errInfo)
|
|
}
|
|
}
|
|
@@ -132,7 +152,7 @@ const Receivable:React.FC<{}> = () => {
|
|
editable: true,
|
|
editable: true,
|
|
width: '12%',
|
|
width: '12%',
|
|
// eslint-disable-next-line react/display-name
|
|
// eslint-disable-next-line react/display-name
|
|
- render: (text: string) => <span>{dayjsFomrat(text, 'YYYY-MM-DD')}</span>
|
|
|
|
|
|
+ render: (text: string) => <span>{dayjsFormat(text, 'YYYY-MM-DD')}</span>
|
|
},
|
|
},
|
|
{
|
|
{
|
|
title: '回款金额',
|
|
title: '回款金额',
|
|
@@ -160,7 +180,7 @@ const Receivable:React.FC<{}> = () => {
|
|
editable: true,
|
|
editable: true,
|
|
width: '12%',
|
|
width: '12%',
|
|
// eslint-disable-next-line react/display-name
|
|
// eslint-disable-next-line react/display-name
|
|
- render: (text: any) => <span>{dayjsFomrat(text, 'YYYY-MM-DD')}</span>
|
|
|
|
|
|
+ render: (text: any) => <span>{dayjsFormat(text, 'YYYY-MM-DD')}</span>
|
|
},
|
|
},
|
|
{
|
|
{
|
|
title: '备注',
|
|
title: '备注',
|
|
@@ -189,7 +209,7 @@ const Receivable:React.FC<{}> = () => {
|
|
:
|
|
:
|
|
<span className="pi-link-blue" onClick={() => setEditingKey(record.id)}>编辑</span>
|
|
<span className="pi-link-blue" onClick={() => setEditingKey(record.id)}>编辑</span>
|
|
}
|
|
}
|
|
- <Popconfirm title="确认删除?" cancelText="取消" okText="确认" onConfirm={() => delConfirm(record.id)}>
|
|
|
|
|
|
+ <Popconfirm title="确认删除?" cancelText="取消" okText="确认" onConfirm={() => delConfirm(record.id, record.contractsId, record.bidsectionId)}>
|
|
<span className="pi-link-red pi-mg-left-5">删除</span>
|
|
<span className="pi-link-red pi-mg-left-5">删除</span>
|
|
</Popconfirm>
|
|
</Popconfirm>
|
|
</div>
|
|
</div>
|
|
@@ -211,7 +231,7 @@ const Receivable:React.FC<{}> = () => {
|
|
...col,
|
|
...col,
|
|
onCell: (record: iReceivableState) => ({
|
|
onCell: (record: iReceivableState) => ({
|
|
record,
|
|
record,
|
|
- cellType: col.dataIndex === 'createTime' || col.dataIndex === 'receDate' ? 'DatePicker' : 'text',
|
|
|
|
|
|
+ cellType: col.dataIndex === 'createTime' || col.dataIndex === 'time' ? 'DatePicker' : 'text',
|
|
dataIndex: col.dataIndex,
|
|
dataIndex: col.dataIndex,
|
|
title: col.title,
|
|
title: col.title,
|
|
editing: isEditing(record)
|
|
editing: isEditing(record)
|