index.tsx 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. /*
  2. * @Author: your name
  3. * @Date: 2021-09-15 18:38:41
  4. * @LastEditTime: 2021-09-30 11:08:21
  5. * @LastEditors: Please set LastEditors
  6. * @Description: In User Settings Edit
  7. * @FilePath: /MedicalWisdomCheckSys/src/components/MccsClickableTabs/index.tsx
  8. */
  9. // import { Button } from 'antd';
  10. import React,{useState,useEffect} from 'react'
  11. import './index.less';
  12. const MccsClickableTabs:React.FC<MccsClickableTabs.propsType> = (props)=>{
  13. const [list,setList] = useState<MccsClickableTabs.TabType[]>([]);
  14. const {tabClickHandle,clear,onChange,type='single'} = props;
  15. const [activedTab,setActivedTab] = useState<{label:string,value:any}>();
  16. const [disabled,setDisabled] = useState(false);
  17. const clickHandle = (item:MccsClickableTabs.TabType,supItem:{label:string,value:string|number})=>{
  18. if(!disabled){
  19. // console.log(item,type);
  20. if(type=='single'){
  21. tabClickHandle&&tabClickHandle(item);
  22. onChange?.({label:`${item.value}`,value:item.value}); //Form传递过来的onChange,设置表单值
  23. setActivedTab(supItem);
  24. }
  25. if(type=='multi'){
  26. tabClickHandle&&tabClickHandle(supItem?supItem:null);
  27. onChange?.({label:`${item.label}`,value:supItem}); //Form传递过来的onChange,设置表单值
  28. setActivedTab({label:item.label,value:supItem});
  29. }
  30. }
  31. }
  32. useEffect(()=>{
  33. // console.log('tabProps',props);
  34. const {data=[],value,clear,disabled} = props;
  35. setList(data);
  36. // console.log({props});
  37. disabled&&setDisabled(true);
  38. if(value){
  39. setActivedTab(value);
  40. }else{
  41. setActivedTab(type=='multi'?{label:'',value:{label:'',value:''}}:{label:'',value:''});
  42. }
  43. if(clear){
  44. setActivedTab(type=='multi'?{label:'',value:{label:'',value:''}}:{label:'',value:''});
  45. }
  46. },[props]);
  47. return (
  48. <div className={type=='multi'?'mutiwrap wrap':'wrap'}>
  49. {
  50. type=='single'&&(
  51. <>
  52. {
  53. list.map((item,index)=>{
  54. return (
  55. <div className={activedTab?.value==item.value?(disabled?'tab on disabled':'tab on'):disabled?'disabled tab':'tab'} key={index} onClick={()=>clickHandle(item,{label:'null',value:'null'})}>{item.label}</div>
  56. )
  57. })
  58. }
  59. </>
  60. )
  61. }
  62. {
  63. type=='multi'&&(
  64. <>
  65. {
  66. list.map((item,index)=>{
  67. return (
  68. <div className='muti' key={index}>
  69. <div className='label'>{item.label}</div>
  70. <div className='valueWrap'>
  71. {
  72. item.list&&item.list.map((val,i)=>{
  73. return (
  74. <div className={activedTab?.label==item.label&&activedTab.value.value==val.value?(disabled?'tab on disabled':'tab on'):disabled?'disabled tab':'tab'} key={i} onClick={()=>clickHandle(item,val)}>{val.label}</div>
  75. )
  76. })
  77. }
  78. </div>
  79. </div>
  80. )
  81. })
  82. }
  83. </>
  84. )
  85. }
  86. </div>
  87. )
  88. }
  89. export default MccsClickableTabs