index.tsx 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import { ContractType } from '@/store/mobx/contract'
  2. import { iContractState } from '@/types/contract'
  3. import { contractConsts } from '@/utils/common/constStatus'
  4. import { dayjsFormat, formatMoney } from '@/utils/util'
  5. import { Tooltip } from 'antd'
  6. import React, { useMemo } from 'react'
  7. import styles from './index.module.scss'
  8. import { BigNumber } from "bignumber.js"
  9. interface DetailProps {
  10. contract: iContractState
  11. type: "income" | "expenditure"
  12. }
  13. const Detail:React.FC<DetailProps> = (props) => {
  14. const { contract, type } = props
  15. const type_name = type === ContractType.INCOME ? '回款' : '支付'
  16. const progress = useMemo(() => {
  17. const i = new BigNumber(type === ContractType.INCOME ? contract.returned : contract.paid).dividedBy(contract.price).toFixed(2)
  18. const j = new BigNumber(1).minus(i)
  19. const k = new BigNumber(contract.price).minus(type === ContractType.INCOME ? contract.returned : contract.paid)
  20. return { returned: new BigNumber(i).multipliedBy(100) + '%', unReturned: new BigNumber(j).multipliedBy(100) + '%', unReturnedMoney: k }
  21. }, [ contract ])
  22. return contract.id ? (
  23. <div className={styles.detailTab}>
  24. <table className={styles.detailTable}>
  25. <tbody>
  26. <tr><th style={{ width: '10%' }}>项目内容</th><td style={{ width: '40%' }}>{contract.content}</td><th style={{ width: '10%' }}>合同名称</th><td style={{ width: '40%' }}>{contract.name}</td></tr>
  27. <tr><th>合同编号</th><td>{contract.code}</td><th>状态</th><td><span className={contractConsts[contract.status].className}>{contractConsts[contract.status].text}</span></td></tr>
  28. <tr><th>合同金额</th><td>{formatMoney(contract.price)}</td><th>创建时间</th><td>{contract.createTime}</td></tr>
  29. <tr><th>{type_name}金额</th><td>{formatMoney(type === ContractType.INCOME ? contract.returned : contract.paid)}</td><th>未{type_name}金额</th><td>{formatMoney(progress.unReturnedMoney)}</td></tr>
  30. <tr><th>{type_name}进度</th><td className={styles.progressContainer} colSpan={3}><div className={styles.progressContent}>
  31. <Tooltip title={`已${type_name}:¥ ${formatMoney(type === ContractType.INCOME ? contract.returned : contract.paid)}`}>
  32. <div className={[ styles.progressBar, 'pi-bg-success' ].join(' ')} style={{ width: progress.returned }}>{progress.returned}</div>
  33. </Tooltip>
  34. <Tooltip title={`未${type_name}:¥ ${formatMoney(progress.unReturnedMoney)}`}>
  35. <div className={[ styles.progressBar, 'pi-bg-gray' ].join(' ')} style={{ width: progress.unReturned }}>{progress.unReturned}</div>
  36. </Tooltip>
  37. </div></td></tr>
  38. <tr><th>甲方</th><td>{contract.partyA}</td><th>甲方签约人</th><td>{contract.partyASigner}</td></tr>
  39. <tr><th>乙方</th><td>{contract.partyB}</td><th>乙方签约人</th><td>{contract.partyBSigner}</td></tr>
  40. <tr><th>签约日期</th><td colSpan={3}>{dayjsFormat(contract.signerTime, 'YYYY-MM-DD')}</td></tr>
  41. <tr><th>备注</th><td colSpan={3}>{contract.remarks}</td></tr>
  42. </tbody>
  43. </table>
  44. </div>
  45. ) : null
  46. }
  47. export default Detail