index.tsx 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  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) =>
  103. item.time ? item.time.replaceAll(',', ' , ') : ' - '
  104. },
  105. {
  106. title: '操作',
  107. width: 200,
  108. render: (item: A2NolistType) => (
  109. <span className='A2tabCli' onClick={() => setNoTxt(item.time || '空')}>
  110. 设置
  111. </span>
  112. )
  113. }
  114. ]
  115. }, [])
  116. const [noTxt, setNoTxt] = useState('')
  117. // 点击提交或者取消
  118. const A2NoBtn = useCallback(
  119. async (val: string[] | null) => {
  120. let str = ''
  121. if (val) {
  122. const arr = val.map(v => v.replace('-', '年').replace('-', '月') + '日')
  123. str = arr.join(',')
  124. }
  125. const res = await A2_APIsetConfig('cms/book/config/edit', { id: 10, rtf: str })
  126. if (res.code === 0) {
  127. MessageFu.success('设置不可预约日期成功!')
  128. getNoListFu()
  129. setNoTxt('')
  130. }
  131. },
  132. [getNoListFu]
  133. )
  134. // 222222222-------------第二个表格---------结束
  135. // 3333333333------------- 邮箱地址---------开始E-Mail
  136. const [emShow, setEmShow] = useState(false)
  137. // 3333333333------------- 邮箱地址---------结束E-Mail
  138. // 444444444------------- 预约须知---------开始
  139. const [xuZhi, setXuZhi] = useState(false)
  140. // 444444444------------- 预约须知---------结束
  141. // 555555555------------- 预约单模板设置---------开始
  142. const [template, setTemplate] = useState(false)
  143. // 555555555------------- 预约单模板设置---------结束
  144. return (
  145. <div className={styles.A2orderSet}>
  146. <div className='pageTitle'>课程预约设置</div>
  147. <div className='A2top'>
  148. <Button type='primary' onClick={() => setEmShow(true)} hidden>
  149. 邮箱设置
  150. </Button>
  151. &emsp;
  152. <Button type='primary' onClick={() => setXuZhi(true)}>
  153. 预约须知设置
  154. </Button>
  155. &emsp;
  156. <Button type='primary' onClick={() => setTemplate(true)}>
  157. 预约单模板设置
  158. </Button>
  159. </div>
  160. <div className='A2main'>
  161. <Table dataSource={list} columns={columns} rowKey='id' pagination={false} />
  162. <div className='A2split'></div>
  163. <Table dataSource={noList} columns={noColumns} rowKey='id' pagination={false} />
  164. </div>
  165. {/* 可预约-不可预约设置 */}
  166. {keTime.time ? (
  167. <A2timeFlag info={keTime} closeFu={val => changeTimeFlagFu(val)} />
  168. ) : null}
  169. {/* 不可预约日期设置 */}
  170. {noTxt ? (
  171. <A2NoTime
  172. num={50}
  173. baseTime={noTxt}
  174. editFu={val => A2NoBtn(val)}
  175. closeFu={() => setNoTxt('')}
  176. />
  177. ) : null}
  178. {/* 邮箱设置 */}
  179. {emShow ? <A2EMail closeFu={() => setEmShow(false)} /> : null}
  180. {/*预约须知 */}
  181. {xuZhi ? (
  182. <A2xuZhi
  183. setSrc='cms/book/config/edit'
  184. getSrc='cms/book/config/get'
  185. sId={11}
  186. closeFu={() => setXuZhi(false)}
  187. />
  188. ) : null}
  189. {/*预约单模板设置 */}
  190. {template ? (
  191. <A2template closeFu={() => setTemplate(false)} type='课程预约' />
  192. ) : null}
  193. </div>
  194. )
  195. }
  196. const MemoA2orderSet = React.memo(A2orderSet)
  197. export default MemoA2orderSet