EditRedemption.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  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, isAdmin, showError, showSuccess, quotatamp2string } 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 } = 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. };
  60. return (
  61. <>
  62. <Segment loading={loading}>
  63. <Header as='h3'>{isEdit ? '更新兑换码信息' : '创建新的兑换码'}</Header>
  64. <Form autoComplete='off'>
  65. <Form.Field>
  66. <Form.Input
  67. label='名称'
  68. name='name'
  69. placeholder={'请输入名称'}
  70. onChange={handleInputChange}
  71. value={name}
  72. autoComplete='off'
  73. required={!isEdit}
  74. />
  75. </Form.Field>
  76. <Form.Field>
  77. <Form.Input
  78. label='额度'
  79. name='quota'
  80. placeholder={'请输入单个兑换码中包含的额度'}
  81. onChange={handleInputChange}
  82. value={quota}
  83. autoComplete='off'
  84. type='number'
  85. />
  86. </Form.Field>
  87. {
  88. !isEdit && <>
  89. <Form.Field>
  90. <Form.Input
  91. label='生成数量'
  92. name='count'
  93. placeholder={'请输入生成数量'}
  94. onChange={handleInputChange}
  95. value={count}
  96. autoComplete='off'
  97. type='number'
  98. />
  99. </Form.Field>
  100. </>
  101. }
  102. <Button onClick={submit}>提交</Button>
  103. </Form>
  104. </Segment>
  105. </>
  106. );
  107. };
  108. export default EditRedemption;