StopStartButton.tsx 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. import {useEffect, useState} from "react";
  2. import {Button, Modal, Tag} from "antd";
  3. import {isNull, Message} from "auto-antd";
  4. import {NginxApis} from "../../../api/nginx.ts";
  5. import {useAppSelector} from "../../../store";
  6. /**
  7. *
  8. * @constructor
  9. */
  10. export const StopStartButton = () => {
  11. const [isRun,setIsRun] = useState<boolean>()
  12. const [loading,setLoading] = useState(false)
  13. const [modal,contextHolder] = Modal.useModal()
  14. const nginx = useAppSelector(state => state.nginx.current)
  15. const fetchStatus = () => {
  16. if (!nginx){
  17. return
  18. }
  19. setLoading(true)
  20. NginxApis.status(nginx.id)
  21. .then(({data})=>{
  22. setIsRun(data.data)
  23. console.log('status', data)
  24. if (!data.msg){
  25. return
  26. }
  27. if (data.data){
  28. Message.success(data.msg)
  29. }else {
  30. Message.warning(data.msg)
  31. }
  32. })
  33. .finally(()=>{
  34. setLoading(false)
  35. })
  36. }
  37. const postStartOrStopApi = ()=>{
  38. if (!nginx){
  39. return
  40. }
  41. setLoading(true)
  42. const request = isRun ? NginxApis.stopNginx(nginx.id) : NginxApis.startNginx(nginx.id);
  43. request.then(({data})=>{
  44. console.log('data', data);
  45. setIsRun(data.data);
  46. if (data.msg){
  47. Message.warning(data.msg)
  48. }
  49. }).finally(()=>{
  50. setLoading(false)
  51. })
  52. }
  53. const onStartOrStop = () => {
  54. if (isNull(isRun)){
  55. fetchStatus()
  56. return
  57. }
  58. modal.confirm({
  59. type: 'warning',
  60. title: `您确定要${isRun ? '停止' : '启动'}nginx服务吗?`,
  61. okType: 'danger',
  62. okText: '确定',
  63. cancelText: '取消',
  64. onOk: ()=>{
  65. postStartOrStopApi()
  66. }
  67. })
  68. }
  69. useEffect(()=>{
  70. fetchStatus()
  71. },[])
  72. if (!nginx){
  73. return null
  74. }
  75. return (<>
  76. <span>Nginx:</span>
  77. <Tag color={isNull(isRun) ? 'grey': isRun ? 'green': 'red'}>{isNull(isRun) ? '未知': isRun ? '运行中':'已停止'}</Tag>
  78. <Button type={ isRun?'default' : 'primary'}
  79. onClick={onStartOrStop}
  80. hidden={isNull(isRun)}
  81. size="small"
  82. danger={isRun}
  83. loading={loading}>
  84. { isRun ? '停止':'启动'}
  85. </Button>
  86. {contextHolder}
  87. </>)
  88. }