فهرست منبع

feat: 对接收入合同接口

lanjianrong 4 سال پیش
والد
کامیت
efe0eebe71

+ 35 - 0
src/pages/Contract/Content/Income/api.ts

@@ -62,3 +62,38 @@ export async function apiUpdateName(id: string, bidsectionId: string, name: stri
   const { data } = await request.post('/api/contract/section/save', { id, bidsectionId, name })
   return data
 }
+
+/**
+ * 合同增删改
+ * @param type - 操作类型
+ * @param payload - 载荷
+ */
+export async function apiResfulContract(type: string, payload: object) {
+  let url: string = '', method: string = ''
+  switch (type) {
+    case 'create':
+      url = '/api/contract/income/create'
+      method = 'post'
+      break
+    case 'update':
+      url = '/api/contract/income/update'
+      method = 'post'
+      break
+    case 'close':
+      url = '/api/contract/close'
+      method = 'post'
+      break
+    case 'del':
+      url = '/api/contract'
+      method = 'del'
+      break
+    case 'unlock':
+      url = '/api/contract/unlock'
+      method = 'post'
+      break
+    default:
+      break
+  }
+  const { data } = await request[method](url, payload)
+  return data
+}

+ 93 - 43
src/pages/Contract/Content/Income/components/Modal/index.tsx

@@ -1,22 +1,23 @@
 import DatePicker from '@/components/DatePicker'
 import { apiAutoCode } from '@/pages/Safe/Content/List/api'
-import { tenderStore } from '@/store/mobx'
+import { contractStore, tenderStore } from '@/store/mobx'
 import { iModalCommonProps } from '@/types/contract'
 import consts from '@/utils/consts'
-import { Button, Form, Input, message, Modal, Select, TreeSelect } from 'antd'
+import { dayjsFomrat } from '@/utils/util'
+import { Button, Form, Input, Modal, Select } from 'antd'
 import locale from 'antd/es/date-picker/locale/zh_CN'
 import React, { useEffect } from 'react'
 import styles from './index.module.scss'
-const ContractModal: React.FC<iModalCommonProps> = ({ modalObj: { type, visible, confirmLoading }, onConfirm, onCancel, row }) => {
+const ContractModal: React.FC<iModalCommonProps> = ({ modalObj: { type, visible, confirmLoading }, onConfirm, onCancel, reload, row }) => {
   const { Option } = Select
   const [ form ] = Form.useForm()
   const modalObj = {
-    add: {
+    create: {
       title: '新建合同',
       cancelText: '取消',
       okText: '确认添加'
     },
-    edit: {
+    update: {
       title: '编辑合同',
       cancelText: '取消',
       okText: '确认'
@@ -26,15 +27,28 @@ const ContractModal: React.FC<iModalCommonProps> = ({ modalObj: { type, visible,
       cancelText: '取消',
       okText: '确认关闭'
     },
-    setting: {
-      title: '合同设置',
-      cancelText: '关闭',
-      okText: '确认'
+    del: {
+      title: '删除合同',
+      cancelText: '取消',
+      okText: '确认删除'
+    },
+    unlock: {
+      title: '解锁合同',
+      cancelText: '取消',
+      okText: '确认解锁'
     }
   }
 
   useEffect(() => {
-    visible && (form.setFieldsValue({ treeId: row.id, bidsectionId: row.bidsectionId }))
+    if (visible) {
+      form.setFieldsValue({ treeId: row.id, bidsectionId: row.bidsectionId })
+      if (type === "update") {
+        const { content="", name="", price="", partyA="", partyB="", partyASigner="",partyBSigner="" } = contractStore.contract
+        form.setFieldsValue({ content, name, price, partyA, partyB, partyASigner, partyBSigner })
+      } else {
+        form.setFieldsValue({ id: contractStore.contract.id })
+      }
+    }
   }, [ visible ])
   const autoCodeHandler = async () => {
     const { code = -1, data = "" } = await apiAutoCode(tenderStore.tender.bidsectionId, 'contractRule')
@@ -60,33 +74,45 @@ const ContractModal: React.FC<iModalCommonProps> = ({ modalObj: { type, visible,
       visible={visible}
       title={modalObj[type]?.title}
       onCancel={onCancel}
-      footer={[
-        type === 'edit' ? <Button type="primary" key="delete" size="small" danger >删除合同</Button> : '',
-        <Button type="primary" size="small" key="cancel" className="pi-btn-secondary" onClick={onCancel}>{modalObj[type]?.cancelText}</Button>,
-        <Button type="primary" size="small" key="ok" loading={confirmLoading} onClick={() => {
-          form.validateFields().then(values => {
-            form.resetFields()
-            onConfirm(values, type)
-          }).catch(info => {
-            message.error('Validate Failed:', info)
-          })
-        }}>{modalObj[type]?.okText}</Button>
-    ]}
+      footer={<div className="pi-justify-end">
+        {type === 'update' ? <Button type="primary" key="delete" size="small" danger onClick={() => reload('del')}>删除合同</Button> : ''}
+        <Button type="default" size="small" key="cancel" className="pi-btn-secondary" onClick={onCancel}>{modalObj[type]?.cancelText}</Button>
+        <Button
+          type="primary"
+          size="small"
+          key="ok"
+          loading={confirmLoading}
+          danger={type === 'del'}
+          onClick={() => {
+            form.validateFields().then(values => {
+              form.resetFields()
+              if (type === 'update') {
+                values.signerTime = dayjsFomrat(values.signerTime, 'YYYY-MM-DD HH:mm:ss')
+              }
+              if (type === 'del') {
+                delete values.warningText
+              }
+              onConfirm(values, type)
+            }).catch(info => {
+              console.error('Validate Failed:', info)
+            })
+          }}>{modalObj[type]?.okText}</Button>
+      </div>}
     >
       <Form
         form={form}
         layout='vertical'
-        style={type === 'edit' ? { maxHeight: '482px', overflowY: 'scroll' } : { overflow: 'hidden' }}
+        style={type === 'update' ? { maxHeight: '482px', overflowY: 'scroll', paddingRight: 5 } : { overflow: 'hidden' }}
         >
         <Form.Item name="bidsectionId" hidden>
           <Input></Input>
         </Form.Item>
+        <Form.Item name="treeId" label="合同劳务" hidden>
+          <Input></Input>
+        </Form.Item>
         {
-          type === 'add' ? (
+          type === 'create' ? (
           <>
-            <Form.Item name="treeId" label="合同劳务" hidden>
-              <Input></Input>
-            </Form.Item>
             <Form.Item name="code" label="合同编号" rules={[ { required: true, message: '请输入合同编号' } ]} className={styles.contractFormItem}>
               <Input addonAfter={<span className="pi-pd-lr-11" onClick={() => autoCodeHandler()}>自动编号</span>}></Input>
             </Form.Item>
@@ -95,8 +121,8 @@ const ContractModal: React.FC<iModalCommonProps> = ({ modalObj: { type, visible,
             </Form.Item>
             <Form.Item name="contractsType" label="合同类型" rules={[ { required: true, message: '请选择合同类型' } ]}>
               <Select showSearch>
-                <Option value="1">支出合同</Option>
-                <Option value="2">收入合同</Option>
+                <Option value={1}>支出合同</Option>
+                <Option value={2}>收入合同</Option>
               </Select>
             </Form.Item>
             <Form.Item name="price" label="合同金额" rules={[ { required: true, message: '请输入合同金额' } ]}>
@@ -106,36 +132,33 @@ const ContractModal: React.FC<iModalCommonProps> = ({ modalObj: { type, visible,
           ) : ''
         }
         {
-          type === 'edit' ? (
+          type === 'update' ? (
             <>
-              <Form.Item name="id1" label="合同项目">
-                <TreeSelect></TreeSelect>
-              </Form.Item>
-              <Form.Item name="id2" label="序号" rules={[ { required: true, message: '请输入序号' } ]}>
+              <Form.Item name="content" label="项目内容" rules={[ { required: true, message: '请输入项目内容' } ]}>
                 <Input></Input>
               </Form.Item>
-              <Form.Item name="id3" label="项目内容" rules={[ { required: true, message: '请输入项目内容' } ]}>
+              <Form.Item name="name" label="合同名称" rules={[ { required: true, message: '请输入项目内容' } ]}>
                 <Input></Input>
               </Form.Item>
-              <Form.Item name="id4" label="项目金额" rules={[ { required: true, message: '请输入项目金额' } ]}>
+              <Form.Item name="price" label="合同金额" rules={[ { required: true, message: '请输入项目金额' } ]}>
                 <Input></Input>
               </Form.Item>
-              <Form.Item name="id5" label="甲方" rules={[ { required: true, message: '请输入甲方' } ]}>
+              <Form.Item name="partyA" label="甲方" rules={[ { required: true, message: '请输入甲方' } ]}>
                 <Input></Input>
               </Form.Item>
-              <Form.Item name="id6" label="甲方签约人" rules={[ { required: true, message: '请输入甲方签约人' } ]}>
+              <Form.Item name="partyASigner" label="甲方签约人" rules={[ { required: true, message: '请输入甲方签约人' } ]}>
                 <Input></Input>
               </Form.Item>
-              <Form.Item name="id7" label="乙方" rules={[ { required: true, message: '请输入乙方' } ]}>
+              <Form.Item name="partyB" label="乙方" rules={[ { required: true, message: '请输入乙方' } ]}>
                 <Input></Input>
               </Form.Item>
-              <Form.Item name="id8" label="乙方签约人" rules={[ { required: true, message: '请输入乙方签约人' } ]}>
+              <Form.Item name="partyBSigner" label="乙方签约人" rules={[ { required: true, message: '请输入乙方签约人' } ]}>
                 <Input></Input>
               </Form.Item>
-              <Form.Item name="id9" label="合同签约日期" rules={[ { required: true, message: '请选择签约日期' } ]}>
-                <DatePicker allowClear locale={locale}></DatePicker>
+              <Form.Item name="signerTime" label="合同签约日期" rules={[ { required: true, message: '请选择签约日期' } ]}>
+                <DatePicker allowClear locale={locale} className="pi-width-100P"></DatePicker>
               </Form.Item>
-              <Form.Item name="id10" label="备注">
+              <Form.Item name="remarks" label="备注">
                 <Input.TextArea maxLength={100}></Input.TextArea >
               </Form.Item>
             </>
@@ -149,6 +172,33 @@ const ContractModal: React.FC<iModalCommonProps> = ({ modalObj: { type, visible,
             </>
           ) : ''
         }
+        {
+          type === 'unlock' ? (
+            <>
+              <Form.Item name="id" hidden><Input></Input></Form.Item>
+              <span>解锁后,合同将锁定,无法进行编辑、上传文件等操作。</span>
+            </>
+          ) : ''
+        }
+        {
+          type === "del" ? (
+            <>
+              <Form.Item name="id" hidden><Input></Input></Form.Item>
+              <p className="mb-2">删除后,数据无法恢复,请谨慎操作。</p>
+              <p className="mb-2">请在下方文本框输入文本「<span className="pi-red">确认删除本合同</span>」,以此确认删除操作。</p>
+              <Form.Item name="warningText"rules={[ () => ({
+                validator(rule, value) {
+                  if (!value || value !== "确认删除本合同") {
+                    return Promise.reject("请按照提示信息进行删除操作!")
+                  }
+                  return Promise.resolve()
+                }
+              }) ]}>
+                <Input placeholder="输入文本, 确认删除"></Input>
+              </Form.Item>
+            </>
+          ) : ''
+        }
       </Form>
     </Modal>
   )

+ 30 - 29
src/pages/Contract/Content/Income/components/TableContent/index.tsx

@@ -1,5 +1,6 @@
+import { ZhSubmitButton } from '@/components/Button'
 import { contractStore, tenderStore } from '@/store/mobx'
-import { iContractState, iIncomeTree } from '@/types/contract'
+import { iIncomeTree } from '@/types/contract'
 import { contractConsts } from '@/utils/common/constStatus'
 import consts from '@/utils/consts'
 import { Button, Input, message, Radio, Table, Tabs } from 'antd'
@@ -66,28 +67,6 @@ const GCsheet: React.FC<iTableContentPorps> = ({ modalHandler, row, setRow }) =>
       serial: ''
     }
   })
-  const [ contract, setContract ] = useState<iContractState>({
-    bidsectionId: "",
-    code: "",
-    content: "",
-    contractsType: 0,
-    createTime: "",
-    id: "",
-    name: "",
-    paid: "",
-    partyA: "",
-    partyASigner: "",
-    partyB: "",
-    partyBSigner: "",
-    price: "",
-    projectId: "",
-    remarks: "",
-    returned: "",
-    signerTime: "",
-    status: 0,
-    treeId: "",
-    updateTime: ""
-  })
   const { TabPane } = Tabs
 
   useEffect(() => {
@@ -268,7 +247,7 @@ const GCsheet: React.FC<iTableContentPorps> = ({ modalHandler, row, setRow }) =>
   const onClickRow  = (record: iIncomeTree) => {
     return {
       onClick() {
-        rowClickHandler(record.id, record.bidsectionId, record.isEdit)
+        rowClickHandler(record.id, record.bidsectionId, record.isEdit, record.isNew)
       },
       onDoubleClick() {
         contractStore.rowChange(row.id)
@@ -277,12 +256,12 @@ const GCsheet: React.FC<iTableContentPorps> = ({ modalHandler, row, setRow }) =>
   }
 
   // 行点击回调
-  const rowClickHandler = async (id: string, bid: string, isEdit?: boolean) => {
-    if (!isEdit) {
+  const rowClickHandler = async (id: string, bid: string, isEdit?: boolean, isNew?: boolean) => {
+    if (!isEdit && !isNew) {
       const { code = -1, section = {}, contract: newContract = {} } = await apiGetIncome(id, bid)
       if (code === consts.RET_CODE.SUCCESS) {
         setRow(section)
-        setContract({ ...contract, ...newContract })
+        contractStore.updateContract(newContract)
       }
     }
   }
@@ -372,9 +351,31 @@ const GCsheet: React.FC<iTableContentPorps> = ({ modalHandler, row, setRow }) =>
         type="card"
         size="small"
         defaultActiveKey="1"
-        tabBarExtraContent={{ right: <div className="pi-mg-right-5"><Button type="primary" size="small" danger className="pi-mg-right-3" onClick={() => modalHandler('close')}>关闭合同</Button><Button type="primary" size="small" onClick={() => modalHandler('edit')}>编辑合同</Button></div> }}>
+        tabBarExtraContent={{ right:
+          <div className="pi-mg-right-5 pi-flex-row">
+            {
+              contractStore.contract.id && contractStore.contract.status === contractConsts.status.checking ?
+              <>
+                <Button type="primary" size="small" onClick={() => modalHandler('update')} className="pi-mg-right-5">编辑合同</Button>
+                <Button type="primary" size="small" className="pi-mg-right-5">添加回款</Button>
+                <Button type="primary" size="small">上传文件</Button>
+              </>
+              : ''
+            }
+            {
+              contractStore.contract.id && contractStore.contract.status === contractConsts.status.willClose ?
+              <Button type="primary" size="small" danger className="pi-mg-right-3" onClick={() => modalHandler('close')}>关闭合同</Button>
+              : ''
+            }
+            {
+              contractStore.contract.id && contractStore.contract.status === contractConsts.status.closed ?
+              <ZhSubmitButton type="primary" size="small" danger className="pi-mg-right-3" onClick={() => modalHandler('unlock')}>解锁合同</ZhSubmitButton>
+              : ''
+            }
+          </div>
+        }}>
         <TabPane key="1" tab="合同详情">
-          <Detail {...contract}></Detail>
+          <Detail {...contractStore.contract}></Detail>
         </TabPane>
         <TabPane key="2" tab="合同回款">
           <Receivable></Receivable>

+ 9 - 8
src/pages/Contract/Content/Income/components/Tabs/Detail/index.tsx

@@ -1,5 +1,6 @@
 import { iContractState } from '@/types/contract'
 import { contractConsts } from '@/utils/common/constStatus'
+import { dayjsFomrat } from '@/utils/util'
 import React from 'react'
 import styles from './index.module.scss'
 export default function Detail(props: iContractState) {
@@ -7,18 +8,18 @@ export default function Detail(props: iContractState) {
     <div className={styles.detailTab}>
       <table className={styles.detailTable}>
         <tbody>
-  <tr><th style={{ width: '10%' }}>项目内容</th><td style={{ width: '40%' }}>{props.content}</td><th style={{ width: '10%' }}>合同名称</th><td style={{ width: '40%' }}>{props.name}</td></tr>
-  <tr><th>合同编号</th><td>{props.code}</td><th>状态</th><td><i className={contractConsts[props.status].class}></i>{contractConsts[props.status].text}</td></tr>
-  <tr><th>合同金额</th><td>{props.price}</td><th>创建时间</th><td>{props.createTime}</td></tr>
-          <tr><th>回款金额</th><td>3,787,300.07</td><th>未回款金额</th><td>2,769,700.00</td></tr>
+        <tr><th style={{ width: '10%' }}>项目内容</th><td style={{ width: '40%' }}>{props.content}</td><th style={{ width: '10%' }}>合同名称</th><td style={{ width: '40%' }}>{props.name}</td></tr>
+        <tr><th>合同编号</th><td>{props.code}</td><th>状态</th><td><i className={contractConsts[props.status].class}></i>{contractConsts[props.status].text}</td></tr>
+        <tr><th>合同金额</th><td>{props.price}</td><th>创建时间</th><td>{props.createTime}</td></tr>
+        <tr><th>回款金额</th><td>{props.paid}</td><th>未回款金额</th><td>2,769,700.00</td></tr>
           <tr><th>回款进度</th><td className={styles.progressContainer} colSpan={3}><div className={styles.progressContent}>
             <div className={[ styles.progressBar, 'pi-bg-success' ].join(' ')} style={{ width: '57.7%' }} >57.7%</div>
             <div className={[ styles.progressBar, 'pi-bg-gray' ].join(' ')} style={{ width: '42.3%' }}>42.3%</div>
           </div></td></tr>
-          <tr><th>甲方</th><td></td><th>甲方签约人</th><td></td></tr>
-          <tr><th>乙方</th><td></td><th>乙方签约人</th><td></td></tr>
-          <tr><th>签约日期</th><td></td><th></th><td></td></tr>
-          <tr><th>备注</th><td colSpan={3}></td></tr>
+        <tr><th>甲方</th><td>{props.partyA}</td><th>甲方签约人</th><td>{props.partyASigner}</td></tr>
+        <tr><th>乙方</th><td>{props.partyB}</td><th>乙方签约人</th><td>{props.partyBSigner}</td></tr>
+        <tr><th>签约日期</th><td colSpan={3}>{props.signerTime && dayjsFomrat(props.signerTime, 'YYYY-MM-DD')}</td></tr>
+        <tr><th>备注</th><td colSpan={3}>{props.remarks}</td></tr>
         </tbody>
       </table>
     </div>

+ 20 - 16
src/pages/Contract/Content/Income/index.tsx

@@ -10,7 +10,7 @@ import consts from '@/utils/consts'
 import { SettingOutlined } from '@ant-design/icons'
 import { Button, message, Tooltip } from 'antd'
 import React, { useState } from 'react'
-import { apiResfulContractTree } from './api'
+import { apiResfulContract, apiResfulContractTree } from './api'
 import ContractModal from './components/Modal'
 import TableContent from './components/TableContent'
 
@@ -54,15 +54,17 @@ export default function Income() {
     visible: false,
     loading: false
   })
-  const onCreate = async (value: any, type: any) => {
+  const onCreate = async (values: any, type: any) => {
     setModalObj({
       ...modalObj,
       confirmLoading: true
     })
-    // const { code = -1 } = await apiContractIncome()
-    // if (code === consts.RET_CODE.SUCCESS) {
-      //
-    // }
+    console.log(values, type)
+
+    const { code = -1 } = await apiResfulContract(type, values)
+    if (code === consts.RET_CODE.SUCCESS) {
+      contractStore.resetTree(tenderStore.bid)
+    }
     setModalObj({
       ...modalObj,
       type: '',
@@ -88,13 +90,6 @@ export default function Income() {
         setRow({ ...row, ...section })
       }
     }
-    // if (type !== 'add' && type !== 'del') {
-    //   const { code = -1, section = {} } = await apiGetIncome(row.id, row.bidsectionId)
-    //   if (code === consts.RET_CODE.SUCCESS) {
-    //     setRow({ ...row, ...section })
-    //   }
-
-    // }
   }
 
   const onRuleCreate = async (ruleValue: any) => {
@@ -106,6 +101,13 @@ export default function Income() {
     setRuleModal({ ...ruleModal, loading: false, visible: false })
   }
 
+  // 切换到删除合同弹窗
+  const reloadHandler = (type: string) => {
+    setModalObj({ ...modalObj, visible: false })
+    setTimeout(() => {
+      setModalObj({ ...modalObj, visible: true, type })
+    }, 300)
+  }
   return (
     <div className="wrap-contaniner">
       <Header title="维护项目节:">
@@ -116,7 +118,6 @@ export default function Income() {
               <>
                 <Tooltip title="添加子项">
                   <Button type="text" icon={<SvgIcon type="xxh-plus" style={{ color: '#007bff', fontSize: 12 }}></SvgIcon>} onClick={() => treeResfulApiHandler('add', { id: row.id, bidsectionId: row.bidsectionId })}></Button>
-                  {/* <Button type="text" icon={<PlusOutlined style={{ color: '#007bff' }}/>} onClick={() => treeResfulApiHandler('add', { id: row.id, bidsectionId: row.bidsectionId })}></Button> */}
                 </Tooltip>
                 {
                   !row.children?.length ?
@@ -164,7 +165,10 @@ export default function Income() {
         </Slot>
         <Slot position="right">
           <Button type="ghost" size="small" icon={<SettingOutlined />} className="pi-mg-right-3" style={{ color: '#007bff' }} onClick={() => setRuleModal({ ...ruleModal, visible: true })}>设置</Button>
-          <Button type="primary" size="small" onClick={() => setModalObj({ ...modalObj, type: 'add', visible: true })}>新建收入合同</Button>
+          {
+            !row.children && !row.contractCode ? <Button type="primary" size="small" onClick={() => setModalObj({ ...modalObj, type: 'create', visible: true })}>新建收入合同</Button>
+            : ""
+          }
         </Slot>
       </Header>
       <TableContent modalHandler={modalHandler} row={row} setRow={(record: iIncomeTree) => setRow({ ...row, ...record })}></TableContent>
@@ -176,7 +180,7 @@ export default function Income() {
         loading={ruleModal.loading}
         onCancel={() => setRuleModal({ ...ruleModal, visible: false })}
       ></RuleModal>
-      <ContractModal row={row} modalObj={modalObj} onConfirm={onCreate} onCancel={ () => setModalObj({ ...modalObj, visible: false })}></ContractModal>
+      <ContractModal row={row} modalObj={modalObj} onConfirm={onCreate} onCancel={ () => setModalObj({ ...modalObj, visible: false })} reload={(type) => reloadHandler(type)}></ContractModal>
     </div>
   )
 }

+ 1 - 1
src/pages/Safe/Content/List/modal.tsx

@@ -83,7 +83,7 @@ const SafeCreateForm: React.FC<iSafeCreateFormProps> = ({
           <Input placeholder="请填写巡检项"/>
         </Form.Item>
         <Form.Item name="createTime" label="日期" rules={[ { required: true, message: '请选择日期' } ]}>
-          <DatePicker locale={locale} allowClear style={{ width: '100%' }}></DatePicker>
+          <DatePicker locale={locale} allowClear className="pi-width-100P"></DatePicker>
         </Form.Item>
         <div className={styles.warningFooter}>添加后再补充完善其余信息</div>
       </Form>

+ 27 - 1
src/store/mobx/contract/index.ts

@@ -1,5 +1,5 @@
 import { apiContractIncome } from "@/pages/Contract/Content/Income/components/Modal/api"
-import { iIncomeTree } from "@/types/contract"
+import { iContractState, iIncomeTree } from "@/types/contract"
 import consts from "@/utils/consts"
 import { action, computed, observable } from "mobx"
 const initData = [ {
@@ -30,6 +30,28 @@ const initData = [ {
 class Contract {
 
   @observable tree: iIncomeTree[] = []
+  @observable contract: iContractState = {
+    bidsectionId: "",
+    code: "",
+    content: "",
+    contractsType: 0,
+    createTime: "",
+    id: "",
+    name: "",
+    paid: "0.00",
+    partyA: "",
+    partyASigner: "",
+    partyB: "",
+    partyBSigner: "",
+    price: "0.00",
+    projectId: "",
+    remarks: "",
+    returned: "0.00",
+    signerTime: "",
+    status: 0,
+    treeId: "",
+    updateTime: ""
+  }
 
   @action updateTree(tree: iIncomeTree[]) {
     this.tree = tree
@@ -43,6 +65,10 @@ class Contract {
     })
   }
 
+  @action updateContract(data: iContractState) {
+    this.contract = data
+  }
+
   // 增加行
   @action addRowTree(id: string) {
     const newTree = lookupNode(id, this.tree)

+ 1 - 0
src/types/contract.d.ts

@@ -57,6 +57,7 @@ export interface iModalCommonProps {
   onConfirm: (values: any, type: string) => void
   onCancel: () => void
   row: iIncomeTree
+  reload: (type: string) => void
 }
 
 export interface iContractState {

+ 5 - 0
src/utils/common/constStatus.ts

@@ -10,6 +10,11 @@ const contractConsts = {
   2: {
     className: 'pi-circle-green',
     text: '正常关闭'
+  },
+  status: {
+    checking: 0, // 履行中
+    willClose: 1, // 待关闭
+    closed: 2 // 正常关闭
   }
 }