BasicInfo.jsx 7.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. import React, { useState, useRef, useEffect, useMemo } from 'react';
  2. import { history } from 'umi';
  3. import { Form, Input, Popconfirm, Select, Button, Modal, InputNumber, message, Col, Row, DatePicker } from 'antd';
  4. import { PlusOutlined } from '@ant-design/icons';
  5. import moment from 'moment';
  6. import locale from 'antd/es/date-picker/locale/zh_CN';
  7. import PageTable from '@/components/PageTable';
  8. import { saveInvoiceFill, updateInvoiceFill, getInvoiceFillDetail } from '@/services/invoiceFill'
  9. import { saveInvoiceItemTpl, getInvoiceItemTplList, deleteInvoiceItemTpl } from '@/services/invoiceItemTpl'
  10. import QRCode from './QRCode'
  11. const FormItem = Form.Item;
  12. const { Option } = Select;
  13. const formItemLayout = { labelCol: { span: 6 }, wrapperCol: { span: 14 } };
  14. const goBack = () => {
  15. history.goBack();
  16. };
  17. export default (props) => {
  18. const { invoiceId } = props
  19. const [form] = Form.useForm();
  20. const dateFormat = "YYYY-MM-DD HH:mm";
  21. const [loading, setLoading] = useState(false);
  22. const [formModel] = Form.useForm();
  23. const [formData, setFormData] = useState()
  24. const [editModal, setEditModal] = useState(false);
  25. const [modelLoading, setModelLoading] = useState(false);
  26. const actionRef = useRef();
  27. const qrcodeText = useMemo(() =>
  28. 'http://h5.njyunzhi.com/state-grid/invoice-filling-h5/index.html?invoiceId=' +
  29. invoiceId,
  30. [invoiceId]
  31. )
  32. //保存班次
  33. const onSubmit = (data) => {
  34. var newData = { ...data, endDate: moment(data.endDate) };
  35. setLoading(true);
  36. if (invoiceId) {
  37. updateInvoiceFill(invoiceId, newData)
  38. .then(() => {
  39. setLoading(false);
  40. message.success('数据更新成功');
  41. goBack();
  42. })
  43. .catch((err) => {
  44. setLoading(false);
  45. message.error(err.message || err);
  46. });
  47. } else {
  48. saveInvoiceFill(newData)
  49. .then((res) => {
  50. setLoading(false);
  51. message.success('数据保存成功');
  52. history.replace(`./edit.jsx?id=${res.invoiceId}`);
  53. })
  54. .catch((err) => {
  55. setLoading(false);
  56. message.error(err.message || err);
  57. });
  58. }
  59. };
  60. //开票项目弹窗保存
  61. const Submit = (val) => {
  62. setModelLoading(true);
  63. saveInvoiceItemTpl(val, invoiceId).then(res => {
  64. message.success('添加成功')
  65. setModelLoading(false)
  66. actionRef.current.reload()
  67. onCancel();
  68. }).catch((err) => {
  69. setModelLoading(false);
  70. message.error(err.message || err);
  71. });
  72. }
  73. // 弹窗关闭
  74. const onCancel = () => {
  75. setEditModal(false);
  76. formModel.resetFields()
  77. }
  78. //弹起弹窗
  79. const showModel = () => {
  80. setEditModal(true);
  81. }
  82. //删除开票项目
  83. const handleDelete = (invoiceItemTplId) => {
  84. deleteInvoiceItemTpl(invoiceItemTplId).then(res => {
  85. message.success('删除成功')
  86. actionRef.current.reload()
  87. }).catch((err) => {
  88. message.error(err.message || err);
  89. });
  90. }
  91. const actions = () => [
  92. <Button key="add" type="primary" icon={<PlusOutlined />} onClick={showModel}>
  93. 新增开票项目
  94. </Button>,
  95. ];
  96. useEffect(() => {
  97. if (invoiceId) {
  98. getInvoiceFillDetail(invoiceId).then((res) => {
  99. form.setFieldsValue({ ...res, endDate: moment(res.endDate) })
  100. setFormData({ ...res, endDate: moment(res.endDate) })
  101. }).catch((err) => {
  102. message.error(err.message || err);
  103. });
  104. }
  105. }, [invoiceId])
  106. const columns = [
  107. {
  108. title: '开票项目名称',
  109. dataIndex: 'name',
  110. key: 'name',
  111. },
  112. {
  113. title: '开票金额',
  114. dataIndex: 'charge',
  115. key: 'charge',
  116. },
  117. {
  118. title: '操作',
  119. valueType: 'option',
  120. render: (_, record) => [
  121. <Popconfirm
  122. key={2}
  123. title="您是否确认删除 ?"
  124. onConfirm={() => handleDelete(record.invoiceItemTplId)}
  125. okText="确定"
  126. cancelText="取消"
  127. >
  128. <Button style={{ padding: 0 }} type="link">
  129. 删除
  130. </Button>
  131. </Popconfirm>,
  132. ],
  133. },
  134. ];
  135. return (
  136. <>
  137. <Row>
  138. <Col span={12}>
  139. <Form {...formItemLayout} onFinish={onSubmit} form={form}>
  140. <FormItem label="班次名称" name="name" rules={[{ required: true, message: '请输入班次名称' }]}>
  141. <Input placeholder="请输入班次名称" style={{ width: '350px' }} />
  142. </FormItem>
  143. <FormItem label="截止时间" name="endDate" rules={[{ required: true, message: '请选择班次截止时间' }]}>
  144. <DatePicker locale={locale} showTime style={{ width: '350px' }} format={dateFormat} />
  145. </FormItem>
  146. <FormItem label="状态" name="status" rules={[{ required: true, message: '请选择' }]}>
  147. <Select placeholder="请选择发布状态" style={{ width: '350px' }}>
  148. <Option value={1}>进行中</Option>
  149. <Option value={0}>未发布</Option>
  150. <Option value={2}>已截止</Option>
  151. </Select>
  152. </FormItem>
  153. {
  154. invoiceId &&
  155. <FormItem label='申报二维码' >
  156. <QRCode text={qrcodeText} title={formData?.name} />
  157. </FormItem>
  158. }
  159. <FormItem label=" " colon={false}>
  160. <Button type="default" onClick={goBack}>
  161. 返回
  162. </Button>
  163. <Button type="primary" loading={loading} htmlType="submit" style={{ marginLeft: '4em' }}>
  164. 保存
  165. </Button>
  166. </FormItem>
  167. </Form>
  168. </Col>
  169. {
  170. invoiceId &&
  171. <Col span={12}>
  172. 开票项目
  173. <PageTable
  174. request={getInvoiceItemTplList}
  175. toolBarRender={actions}
  176. actionRef={actionRef}
  177. columns={columns}
  178. rowKey="invoiceItemTplId"
  179. options={false}
  180. search={false}
  181. params={{ invoiceId }}
  182. />
  183. </Col>
  184. }
  185. </Row>
  186. <Modal
  187. forceRender
  188. title='开票项目新增'
  189. visible={editModal}
  190. onCancel={onCancel}
  191. keyboard={false}
  192. maskClosable={false}
  193. destroyOnClose={true}
  194. footer={null}
  195. >
  196. <Form {...formItemLayout} onFinish={Submit} form={formModel}>
  197. <FormItem label="开票项目名称" name="name" rules={[{ required: true, message: '请输入' }]}>
  198. <Input placeholder="请输入" />
  199. </FormItem>
  200. <FormItem label="开票金额" name="charge" rules={[{ required: true, message: '请输入' }]}>
  201. <InputNumber min={0} placeholder="请输入" style={{ width: '100%' }} />
  202. </FormItem>
  203. <FormItem label=" " colon={false}>
  204. <Button type="default" onClick={onCancel}>
  205. 取消
  206. </Button>
  207. <Button
  208. type="primary"
  209. loading={modelLoading}
  210. htmlType="Submit"
  211. style={{ marginLeft: '4em' }}
  212. >
  213. 确认
  214. </Button>
  215. </FormItem>
  216. </Form>
  217. </Modal>
  218. </>
  219. )
  220. }