index.tsx 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. import { useCallback, useEffect, useMemo, useRef, useState } from 'react'
  2. import styles from './index.module.scss'
  3. import { Button, DatePicker, Input } from 'antd'
  4. import dayjs from 'dayjs'
  5. import Z3upFiles from '@/components/Z3upFiles'
  6. import ZRichTexts from '@/components/ZRichTexts'
  7. import { forwardRef, useImperativeHandle } from 'react'
  8. import { FourTableType, TypeB3PageSta } from '../../type'
  9. import X3auditInfo from '@/pages/X_stock/X3auditInfo'
  10. import { B3aForm1 } from '../data'
  11. import { useParams } from 'react-router-dom'
  12. import { statusObj } from '@/utils/tableData'
  13. type Props = {
  14. info: FourTableType
  15. pageSta: TypeB3PageSta
  16. ref: any //当前自己的ref,给父组件调用
  17. Dom?: React.ReactNode
  18. }
  19. function B3aTop({ info, pageSta, Dom }: Props, ref: any) {
  20. const { pageKey } = useParams<any>()
  21. const [formData, setFormData] = useState({} as FourTableType)
  22. useEffect(() => {
  23. if (info.id) {
  24. setFormData(info)
  25. // 设置富文本
  26. if (info.rtf) ZRichTextRef.current?.ritxtShowFu(JSON.parse(info.rtf))
  27. }
  28. }, [info])
  29. const timeChange = useCallback(
  30. (e: any) => {
  31. setFormData({ ...formData, date: dayjs(e).format('YYYY-MM-DD') })
  32. },
  33. [formData]
  34. )
  35. // 上传附件的ref
  36. const filesRef = useRef<any>(null)
  37. // 富文本的ref
  38. const ZRichTextRef = useRef<any>(null)
  39. // 审批意见的ref
  40. const ZAuditRef = useRef<any>(null)
  41. // 审批的sta
  42. const [auditSta, setAuDitSta] = useState('')
  43. // 可以让父组件调用子组件的方法
  44. const resData = useCallback(() => {
  45. const rtf1 = ZRichTextRef.current?.fatherBtnOkFu() || { flag: true }
  46. // console.log('申请信息富文本', JSON.stringify(rtf1.val || ''))
  47. const rtf2 = ZAuditRef.current?.resData()
  48. // console.log('审批信息富文本', rtf2)
  49. // 上传附件的
  50. const filesRes = filesRef.current.filesIdRes()
  51. return { formData, filesRes, rtf1: JSON.stringify(rtf1.val || ''), audit: { rtf2, auditSta } }
  52. }, [auditSta, formData])
  53. useImperativeHandle(ref, () => ({
  54. resData
  55. }))
  56. const fileUrl = useMemo(() => {
  57. return {
  58. 1: 'cms/orderHouse/upload',
  59. 2: 'cms/orderHide/upload',
  60. 3: 'cms/register/upload',
  61. 4: 'cms/orderDel/upload'
  62. }[pageKey as '1']
  63. }, [pageKey])
  64. return (
  65. <div className={styles.B3aTop} id='B3aTop'>
  66. {['审批'].includes(pageSta) ? (
  67. <X3auditInfo
  68. dirCode={`Four${pageKey}`}
  69. myUrl={fileUrl}
  70. auditSta={auditSta}
  71. auditStaFu={val => setAuDitSta(val)}
  72. ref={ZAuditRef}
  73. />
  74. ) : null}
  75. <div className='B3aTit'>
  76. 申请信息
  77. {pageSta !== '新增' ? (
  78. <Button type='dashed'>{Reflect.get(statusObj, info.status)}</Button>
  79. ) : null}
  80. </div>
  81. <div className='B3aRow'>
  82. <div className='B3aR1'>
  83. <div className='B3aRll'>
  84. <span> * </span>申请名称:
  85. </div>
  86. <div className='B3aRrr'>
  87. <Input
  88. value={formData.name}
  89. onChange={e => setFormData({ ...formData, name: e.target.value.trim() })}
  90. readOnly={['查看', '审批'].includes(pageSta)}
  91. placeholder='请输入内容'
  92. maxLength={30}
  93. showCount
  94. />
  95. </div>
  96. </div>
  97. <div className='B3aR1'>
  98. <div className='B3aRll'>
  99. <span> * </span>业务日期:
  100. </div>
  101. <div className='B3aRrr'>
  102. <DatePicker
  103. disabled={['查看', '审批'].includes(pageSta)}
  104. allowClear={false}
  105. value={dayjs(formData.date)}
  106. onChange={timeChange}
  107. />
  108. </div>
  109. </div>
  110. {B3aForm1.map(v => (
  111. <div className='B3aR1' key={v.name}>
  112. <div className='B3aRll'>{v.name}:</div>
  113. <div className='B3aRrr'>
  114. {formData[v.key as 'name']}
  115. {['查看', '审批'].includes(pageSta) && v.name === '发起人'
  116. ? ' - ' + formData.createTime || ''
  117. : ''}
  118. </div>
  119. </div>
  120. ))}
  121. <div className='B3aR1 B3aR2'>
  122. <div className='B3aRll'>附件:</div>
  123. <div className='B3aRrr'>
  124. <Z3upFiles
  125. max={10}
  126. isLook={['查看', '审批'].includes(pageSta)}
  127. ref={filesRef}
  128. fileCheck={false}
  129. dirCode={`Four${pageKey}`}
  130. myUrl={fileUrl}
  131. lookData={info.files || []}
  132. size={500}
  133. />
  134. </div>
  135. </div>
  136. <div className='B3aR1'>
  137. <div className='B3aRll'>原因事由:</div>
  138. <div className='B3aRrr'>
  139. <Input
  140. value={formData.reason}
  141. onChange={e => setFormData({ ...formData, reason: e.target.value })}
  142. readOnly={['查看', '审批'].includes(pageSta)}
  143. placeholder='请输入内容'
  144. maxLength={30}
  145. showCount
  146. />
  147. </div>
  148. </div>
  149. <div className='B3aR1 B3aFull'>
  150. <div className='B3aRll'>备注:</div>
  151. <div className='B3aRrr'>
  152. <ZRichTexts
  153. check={false}
  154. dirCode={`Four${pageKey}`}
  155. myUrl={fileUrl}
  156. isLook={['查看', '审批'].includes(pageSta)}
  157. ref={ZRichTextRef}
  158. isOne={true}
  159. upAudioBtnNone={true}
  160. />
  161. </div>
  162. </div>
  163. </div>
  164. {Dom ? Dom : null}
  165. </div>
  166. )
  167. }
  168. export default forwardRef(B3aTop)