C1SetServe.tsx 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. import { DeleteOutlined } from '@ant-design/icons'
  2. import { Form, Input, Modal, Button } from 'antd'
  3. import styles from './index.module.scss'
  4. import MyPopconfirm from '@/components/MyPopconfirm'
  5. import { B_APIgetServe, B_APIsetServe, B_APIdelServe } from '@/store/action/Breserve'
  6. import { useEffect, useCallback, useState } from 'react'
  7. import { MessageFu } from '@/utils/message'
  8. type C1setServeProps = {
  9. setIsShowServe: (v: boolean) => void
  10. isShowServe: boolean
  11. }
  12. const C1setServe = ({ setIsShowServe, isShowServe }: C1setServeProps) => {
  13. const [form] = Form.useForm()
  14. const [deleteIds, setDeleteIds] = useState<number[]>([])
  15. const getServe = useCallback(async () => {
  16. const res = await B_APIgetServe()
  17. if (res.code === 0) {
  18. form.setFieldsValue({
  19. dynamicItems: [
  20. ...res.data.map((item: any) => ({
  21. serverName: item.context,
  22. price: item.remark,
  23. id: item.id
  24. }))
  25. ]
  26. })
  27. }
  28. }, [form])
  29. useEffect(() => {
  30. getServe()
  31. }, [getServe])
  32. const submitForm = useCallback(async () => {
  33. // 校验是否为空
  34. try {
  35. await form.validateFields()
  36. } catch (error) {
  37. return
  38. }
  39. // 同时处理删除和修改,一个操作失败全失败
  40. const deleteRes = await Promise.all(deleteIds.map(id => B_APIdelServe(id)))
  41. if (deleteRes.some(item => item.code !== 0)) {
  42. MessageFu.error('删除讲解服务失败!')
  43. return
  44. }
  45. const setRes = await B_APIsetServe(
  46. form.getFieldValue('dynamicItems').map((item: any) => ({
  47. context: item.serverName,
  48. remark: item.price,
  49. id: item.id
  50. }))
  51. )
  52. if (setRes.code !== 0) {
  53. MessageFu.error('设置讲解服务失败!')
  54. return
  55. }
  56. MessageFu.success('设置讲解服务成功!')
  57. setIsShowServe(false)
  58. }, [deleteIds, form, setIsShowServe])
  59. const MyDynamicForm = () => {
  60. return (
  61. <Form form={form}>
  62. <Form.List name='dynamicItems'>
  63. {(fields, { add, remove }) => (
  64. <>
  65. <Button className='addServe' type='primary' onClick={add}>
  66. 新增
  67. </Button>
  68. {fields.map(({ key, name, fieldKey, ...restField }) => (
  69. <div key={key} style={{ display: 'flex', gap: 8, marginBottom: 8 }}>
  70. <Form.Item
  71. {...restField}
  72. name={[name, 'serverName']}
  73. rules={[{ required: true, message: '请输入讲解服务' }]}
  74. >
  75. <Input style={{ width: 500 }} placeholder='请输入讲解服务' />
  76. </Form.Item>
  77. <Form.Item
  78. {...restField}
  79. name={[name, 'price']}
  80. rules={[{ required: true, message: '请输入价格' }]}
  81. >
  82. <Input placeholder='请输入价格' />
  83. </Form.Item>
  84. <Form.Item {...restField} name={[name, 'id']}>
  85. <Input hidden />
  86. </Form.Item>
  87. <Button
  88. type='text'
  89. danger
  90. onClick={() => {
  91. // 获取当前行数据
  92. const currentId = form.getFieldValue('dynamicItems')[name].id
  93. // 记录删除的id
  94. if (currentId) {
  95. setDeleteIds([...deleteIds, currentId])
  96. }
  97. remove(name)
  98. }}
  99. icon={<DeleteOutlined />}
  100. title='删除'
  101. />
  102. </div>
  103. ))}
  104. </>
  105. )}
  106. </Form.List>
  107. </Form>
  108. )
  109. }
  110. return (
  111. <Modal
  112. wrapClassName={styles.C1SetServe}
  113. width={800}
  114. title='设置讲解服务'
  115. open={isShowServe}
  116. onOk={() => {
  117. console.log('ok')
  118. }}
  119. onCancel={() => setIsShowServe(false)}
  120. footer={
  121. [] // 设置footer为空,去掉 取消 确定默认按钮
  122. }
  123. >
  124. <MyDynamicForm />
  125. <div className='C1Nbtn'>
  126. <MyPopconfirm txtK='取消' onConfirm={() => setIsShowServe(false)} />
  127. &emsp;
  128. <Button type='primary' onClick={submitForm}>
  129. 提交
  130. </Button>
  131. </div>
  132. </Modal>
  133. )
  134. }
  135. export default C1setServe