InvoiceDetail.jsx 4.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. import React, { useState, useRef, useImperativeHandle, forwardRef } from 'react';
  2. import { Form, Input, Button, Modal, message, Popconfirm, Radio } from 'antd';
  3. import { getInvoiceDetailList, updateInvoiceDetail, deleteInvoiceDetail } from '@/services/invoiceDetail'
  4. import { getExport } from '@/services/invoiceFill'
  5. import PageTable from '@/components/PageTable';
  6. const FormItem = Form.Item;
  7. const formItemLayout = { labelCol: { span: 6 }, wrapperCol: { span: 14 } };
  8. export default forwardRef((props, ref) => {
  9. const { invoiceId } = props
  10. const [form] = Form.useForm();
  11. const [editModal, setEditModal] = useState(false);
  12. const [modelLoading, setModelLoading] = useState(false);
  13. const [invoiceDetail, setInvoiceDetail] = useState()
  14. const actionRef = useRef();
  15. //弹窗保存
  16. const Submit = (val) => {
  17. updateInvoiceDetail(invoiceId, { ...invoiceDetail, ...val }).then((res) => {
  18. message.success('修改成功')
  19. setModelLoading(false)
  20. refrash()
  21. onCancel()
  22. }).catch((err) => {
  23. setModelLoading(false);
  24. message.error(err.message || err);
  25. });
  26. }
  27. // 弹窗关闭
  28. const onCancel = () => {
  29. setEditModal(false);
  30. setInvoiceDetail()
  31. form.resetFields()
  32. }
  33. const showModel = (value) => {
  34. form.setFieldsValue({ ...value, name: value.itemName, mergeRemark: value.mergeRemark || 0 })
  35. setInvoiceDetail({ ...value, name: value.itemName, mergeRemark: value.mergeRemark || 0 })
  36. setEditModal(true);
  37. }
  38. const refrash = () => {
  39. actionRef.current.reload()
  40. }
  41. useImperativeHandle(ref, () => ({
  42. refrash
  43. }))
  44. const handleDelete = (val) => {
  45. deleteInvoiceDetail(val.invoiceId,val.invoiceItemId).then(res => {
  46. message.success('删除成功')
  47. refrash()
  48. }).catch((err) => {
  49. message.error(err.message || err);
  50. });
  51. }
  52. const columns = [
  53. {
  54. title: '姓名',
  55. dataIndex: 'personName',
  56. key: 'personName',
  57. },
  58. {
  59. title: '项目',
  60. dataIndex: 'itemName',
  61. key: 'itemName',
  62. },
  63. {
  64. title: '开票金额',
  65. dataIndex: 'charge',
  66. key: 'charge',
  67. search: false
  68. },
  69. {
  70. title: '操作',
  71. valueType: 'option',
  72. render: (_, record) => [
  73. <Button
  74. style={{ padding: 0 }}
  75. type="link"
  76. key={1}
  77. onClick={() => showModel(record)}
  78. >
  79. 编辑
  80. </Button>,
  81. <Popconfirm
  82. key={2}
  83. title="您是否确认删除 ?"
  84. onConfirm={() => handleDelete(record)}
  85. okText="确定"
  86. cancelText="取消"
  87. >
  88. <Button style={{ padding: 0 }} type="link">
  89. 删除
  90. </Button>
  91. </Popconfirm>,
  92. ],
  93. },
  94. ];
  95. return (
  96. <>
  97. <PageTable
  98. request={getInvoiceDetailList}
  99. actionRef={actionRef}
  100. columns={columns}
  101. rowKey={(record, index) => (record, index)}
  102. expfunc={getExport}
  103. invoiceId={invoiceId}
  104. options={false}
  105. search={false}
  106. params={{ invoiceId }}
  107. />
  108. <Modal
  109. forceRender
  110. title={'报销单编辑'}
  111. visible={editModal}
  112. onCancel={onCancel}
  113. keyboard={false}
  114. maskClosable={false}
  115. destroyOnClose={true}
  116. footer={null}
  117. >
  118. <Form {...formItemLayout} onFinish={Submit} form={form}>
  119. <FormItem label="姓名">
  120. {invoiceDetail?.personName}
  121. </FormItem>
  122. <FormItem label="项目" name="name">
  123. {invoiceDetail?.name}
  124. </FormItem>
  125. <FormItem label="开票金额" name="charge" rules={[{ required: true, message: '请输入' }]}>
  126. <Input placeholder="请输入" />
  127. </FormItem>
  128. <FormItem label=" " colon={false}>
  129. <Button type="default" onClick={onCancel}>
  130. 取消
  131. </Button>
  132. <Button
  133. type="primary"
  134. loading={modelLoading}
  135. htmlType="Submit"
  136. style={{ marginLeft: '4em' }}
  137. >
  138. 确认
  139. </Button>
  140. </FormItem>
  141. </Form>
  142. </Modal>
  143. </>
  144. )
  145. })