EditRedemption.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. import React, { useEffect, useState } from 'react';
  2. import { Button, Form, Header, Segment } from 'semantic-ui-react';
  3. import { useParams } from 'react-router-dom';
  4. import { API, downloadTextAsFile, showError, showSuccess } from '../../helpers';
  5. const EditRedemption = () => {
  6. const params = useParams();
  7. const redemptionId = params.id;
  8. const isEdit = redemptionId !== undefined;
  9. const [loading, setLoading] = useState(isEdit);
  10. const originInputs = {
  11. name: '',
  12. quota: 100,
  13. count: 1
  14. };
  15. const [inputs, setInputs] = useState(originInputs);
  16. const { name, quota, count } = inputs;
  17. const handleInputChange = (e, { name, value }) => {
  18. setInputs((inputs) => ({ ...inputs, [name]: value }));
  19. };
  20. const loadRedemption = async () => {
  21. let res = await API.get(`/api/redemption/${redemptionId}`);
  22. const { success, message, data } = res.data;
  23. if (success) {
  24. setInputs(data);
  25. } else {
  26. showError(message);
  27. }
  28. setLoading(false);
  29. };
  30. useEffect(() => {
  31. if (isEdit) {
  32. loadRedemption().then();
  33. }
  34. }, []);
  35. const submit = async () => {
  36. if (!isEdit && inputs.name === '') return;
  37. let localInputs = inputs;
  38. localInputs.count = parseInt(localInputs.count);
  39. localInputs.quota = parseInt(localInputs.quota);
  40. let res;
  41. if (isEdit) {
  42. res = await API.put(`/api/redemption/`, { ...localInputs, id: parseInt(redemptionId) });
  43. } else {
  44. res = await API.post(`/api/redemption/`, {
  45. ...localInputs
  46. });
  47. }
  48. const { success, message, data } = res.data;
  49. if (success) {
  50. if (isEdit) {
  51. showSuccess('兑换码更新成功!');
  52. } else {
  53. showSuccess('兑换码创建成功!');
  54. setInputs(originInputs);
  55. }
  56. } else {
  57. showError(message);
  58. }
  59. if (!isEdit && data) {
  60. let text = "";
  61. for (let i = 0; i < data.length; i++) {
  62. text += data[i] + "\n";
  63. }
  64. downloadTextAsFile(text, `${inputs.name}.txt`);
  65. }
  66. };
  67. return (
  68. <>
  69. <Segment loading={loading}>
  70. <Header as='h3'>{isEdit ? '更新兑换码信息' : '创建新的兑换码'}</Header>
  71. <Form autoComplete='off'>
  72. <Form.Field>
  73. <Form.Input
  74. label='名称'
  75. name='name'
  76. placeholder={'请输入名称'}
  77. onChange={handleInputChange}
  78. value={name}
  79. autoComplete='off'
  80. required={!isEdit}
  81. />
  82. </Form.Field>
  83. <Form.Field>
  84. <Form.Input
  85. label='额度'
  86. name='quota'
  87. placeholder={'请输入单个兑换码中包含的额度'}
  88. onChange={handleInputChange}
  89. value={quota}
  90. autoComplete='off'
  91. type='number'
  92. />
  93. </Form.Field>
  94. {
  95. !isEdit && <>
  96. <Form.Field>
  97. <Form.Input
  98. label='生成数量'
  99. name='count'
  100. placeholder={'请输入生成数量'}
  101. onChange={handleInputChange}
  102. value={count}
  103. autoComplete='off'
  104. type='number'
  105. />
  106. </Form.Field>
  107. </>
  108. }
  109. <Button onClick={submit}>提交</Button>
  110. </Form>
  111. </Segment>
  112. </>
  113. );
  114. };
  115. export default EditRedemption;