index.tsx 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'
  2. import styles from './index.module.scss'
  3. import { Button, Table } from 'antd'
  4. import {
  5. A2_APIedit,
  6. A2_APIgeiList,
  7. A2_APIgetConfig,
  8. A2_APIsetConfig
  9. } from '@/store/action/A2orderSet'
  10. import { A2listType, A2NolistType } from './type'
  11. import { A2tyleDataRes } from './data'
  12. import A2timeFlag, { A2TcanType } from './A2timeFlag'
  13. import { MessageFu } from '@/utils/message'
  14. import A2NoTime from './A2NoTime'
  15. import A2EMail from './A2EMail'
  16. import A2xuZhi from './A2xuZhi'
  17. import A2template from './A2template'
  18. function A2orderSet() {
  19. // 1111111-------------第一个表格相关--------开始
  20. const [list, setList] = useState<A2listType[]>([
  21. { id: 1, time: 'am' } as A2listType,
  22. { id: 2 } as A2listType
  23. ])
  24. const getList = useCallback(async () => {
  25. const res = await A2_APIgeiList()
  26. if (res.code === 0) setList(res.data)
  27. }, [])
  28. useEffect(() => {
  29. getList()
  30. }, [getList])
  31. const columns = useMemo(() => {
  32. let arr: any = [
  33. {
  34. title: '时段',
  35. render: (item: A2listType) => (item.time === 'am' ? '上午' : '下午')
  36. }
  37. ]
  38. A2tyleDataRes.forEach(v => {
  39. arr.push({
  40. title: v.name,
  41. width: 200,
  42. render: (item: A2listType) => (
  43. <span
  44. onClick={() => {
  45. keTimeRef.current = { ...item, myKey: v.key }
  46. setKeTime({
  47. time: `${v.name} - ${item.time === 'am' ? '上午' : '下午'}`,
  48. num: item[v.key as 'monday']
  49. })
  50. }}
  51. className='A2tabCli'
  52. >
  53. {item[v.key as 'monday'] === 1
  54. ? '可预约'
  55. : item[v.key as 'monday'] === 0
  56. ? '不可预约'
  57. : ''}
  58. </span>
  59. )
  60. })
  61. })
  62. return arr
  63. }, [])
  64. const [keTime, setKeTime] = useState<A2TcanType>({
  65. time: '',
  66. num: null
  67. })
  68. const keTimeRef = useRef({} as A2listType)
  69. // 可预约-不可预约设置
  70. const changeTimeFlagFu = useCallback(
  71. async (val: 0 | 1 | null) => {
  72. if (val !== null) {
  73. const res = await A2_APIedit({
  74. ...keTimeRef.current,
  75. [keTimeRef.current.myKey]: val
  76. })
  77. if (res.code === 0) {
  78. MessageFu.success('修改成功!')
  79. getList()
  80. }
  81. }
  82. setKeTime({ time: '', num: null })
  83. },
  84. [getList]
  85. )
  86. // 11111111-1------------第一个表格相关----结束
  87. // 222222222-------------第二个表格---------开始
  88. const [noList, setNoList] = useState<A2NolistType[]>([{ id: '1', time: '' }])
  89. const getNoListFu = useCallback(async () => {
  90. const res = await A2_APIgetConfig('cms/book/config/get', 10)
  91. if (res.code === 0) {
  92. setNoList([{ id: '不可预约id', time: res.data.rtf }])
  93. }
  94. }, [])
  95. useEffect(() => {
  96. getNoListFu()
  97. }, [getNoListFu])
  98. const noColumns = useMemo(() => {
  99. return [
  100. {
  101. title: '不可预约日期',
  102. render: (item: A2NolistType) => item.time || ' - '
  103. },
  104. {
  105. title: '操作',
  106. width: 200,
  107. render: (item: A2NolistType) => (
  108. <span className='A2tabCli' onClick={() => setNoTxt(item.time || '空')}>
  109. 设置
  110. </span>
  111. )
  112. }
  113. ]
  114. }, [])
  115. const [noTxt, setNoTxt] = useState('')
  116. // 点击提交或者取消
  117. const A2NoBtn = useCallback(
  118. async (val: string[] | null) => {
  119. let str = ''
  120. if (val) {
  121. const arr = val.map(v => v.replaceAll('-', '月') + '日')
  122. str = arr.join(',')
  123. }
  124. const res = await A2_APIsetConfig('cms/book/config/edit', { id: 10, rtf: str })
  125. if (res.code === 0) {
  126. MessageFu.success('设置不可预约日期成功!')
  127. getNoListFu()
  128. setNoTxt('')
  129. }
  130. },
  131. [getNoListFu]
  132. )
  133. // 222222222-------------第二个表格---------结束
  134. // 3333333333------------- 邮箱地址---------开始E-Mail
  135. const [emShow, setEmShow] = useState(false)
  136. // 3333333333------------- 邮箱地址---------结束E-Mail
  137. // 444444444------------- 预约须知---------开始
  138. const [xuZhi, setXuZhi] = useState(false)
  139. // 444444444------------- 预约须知---------结束
  140. // 555555555------------- 预约单模板设置---------开始
  141. const [template, setTemplate] = useState(false)
  142. // 555555555------------- 预约单模板设置---------结束
  143. return (
  144. <div className={styles.A2orderSet}>
  145. <div className='pageTitle'>课程预约设置</div>
  146. <div className='A2top'>
  147. <Button type='primary' onClick={() => setEmShow(true)}>
  148. 邮箱设置
  149. </Button>
  150. &emsp;
  151. <Button type='primary' onClick={() => setXuZhi(true)}>
  152. 预约须知设置
  153. </Button>
  154. &emsp;
  155. <Button type='primary' onClick={() => setTemplate(true)}>
  156. 预约单模板设置
  157. </Button>
  158. </div>
  159. <div className='A2main'>
  160. <Table dataSource={list} columns={columns} rowKey='id' pagination={false} />
  161. <div className='A2split'></div>
  162. <Table dataSource={noList} columns={noColumns} rowKey='id' pagination={false} />
  163. </div>
  164. {/* 可预约-不可预约设置 */}
  165. {keTime.time ? (
  166. <A2timeFlag info={keTime} closeFu={val => changeTimeFlagFu(val)} />
  167. ) : null}
  168. {/* 不可预约日期设置 */}
  169. {noTxt ? (
  170. <A2NoTime
  171. num={50}
  172. baseTime={noTxt}
  173. editFu={val => A2NoBtn(val)}
  174. closeFu={() => setNoTxt('')}
  175. />
  176. ) : null}
  177. {/* 邮箱设置 */}
  178. {emShow ? <A2EMail closeFu={() => setEmShow(false)} /> : null}
  179. {/*预约须知 */}
  180. {xuZhi ? (
  181. <A2xuZhi
  182. setSrc='cms/book/config/edit'
  183. getSrc='cms/book/config/get'
  184. sId={11}
  185. closeFu={() => setXuZhi(false)}
  186. />
  187. ) : null}
  188. {/*预约单模板设置 */}
  189. {template ? <A2template closeFu={() => setTemplate(false)} /> : null}
  190. </div>
  191. )
  192. }
  193. const MemoA2orderSet = React.memo(A2orderSet)
  194. export default MemoA2orderSet