UpgradeModal.jsx 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. import React, { useEffect, useState } from 'react'
  2. import { Modal, Form, Switch, DatePicker } from 'antd'
  3. // import dayjs from 'dayjs'
  4. import { dayjsFormat } from '@/utils/utils'
  5. import { useDispatch } from 'umi'
  6. import dayjs from 'dayjs'
  7. export const upgradeTypeEnum = {
  8. UPGRADE: 1, // 升级
  9. DEMOTION: 2, // 降级
  10. DEADLINE: 3 // 限期
  11. }
  12. export const lockTypeEnum = {
  13. LEND: 1, // 借出
  14. SALE: 2, // 销售
  15. GIVE: 3, // 赠送
  16. DEADLINE: 0 // 限期
  17. }
  18. export const titleType = {
  19. LEND: 1, // 借出
  20. SALE: 2, // 销售
  21. GIVE: 3, // 赠送
  22. DEMOTION: 4, // 降级
  23. DEADLINE: 5 // 限期
  24. }
  25. export const modalTitleEnum = {
  26. 1: '借出',
  27. 2: '销售',
  28. 3: '赠送',
  29. 4: '降级',
  30. 5: '限期'
  31. }
  32. const UpgradeModal = props => {
  33. const {
  34. visible,
  35. onCancel,
  36. loading,
  37. onConfirm,
  38. type,
  39. projectType,
  40. ssoId,
  41. compilationId,
  42. compilationName,
  43. compilationListName,
  44. lock,
  45. upgradeType,
  46. cloudUser,
  47. deadline,
  48. actionPayload
  49. } = props
  50. const [form] = Form.useForm()
  51. const dispatch = useDispatch()
  52. const [showDeadline, setShowDeadline] = useState(false)
  53. const layout = {
  54. layout: 'vertical'
  55. }
  56. useEffect(() => {
  57. if (upgradeType === upgradeTypeEnum.DEADLINE) {
  58. form?.setFieldsValue({ deadline: dayjs(deadline) })
  59. setShowDeadline(true)
  60. }
  61. }, [upgradeType])
  62. const onChange = value => {
  63. setShowDeadline(value)
  64. }
  65. const handleonOk = () => {
  66. form.validateFields().then(values => {
  67. const newVal = { ...values }
  68. if (values.deadline) {
  69. newVal.deadline = dayjsFormat(values.deadline, 'YYYY-MM-DD')
  70. }
  71. onConfirm({
  72. ...newVal,
  73. projectType,
  74. ssoId,
  75. compilationId,
  76. compilationName,
  77. compilationListName,
  78. lock,
  79. upgradeType
  80. })
  81. form.resetFields()
  82. dispatch({
  83. type: 'refresh/commitAction',
  84. payload: actionPayload
  85. })
  86. })
  87. }
  88. return (
  89. <Modal
  90. getContainer={() => document.getElementById('root')}
  91. width={800}
  92. title={`确认${modalTitleEnum[type]}`}
  93. visible={visible}
  94. confirmLoading={loading}
  95. onCancel={() => {
  96. setShowDeadline(false)
  97. onCancel()
  98. form?.resetFields()
  99. }}
  100. onOk={handleonOk}>
  101. {type === lockTypeEnum.GIVE || type === lockTypeEnum.LEND || type === lockTypeEnum.SALE ? (
  102. <div className="mb-6">
  103. <p className="pb-3">
  104. 为用户<b>{cloudUser.mobile}</b>,<b>{cloudUser.username}</b> {modalTitleEnum[type]} <b>{compilationName}</b>
  105. </p>
  106. <div className="pb-5">
  107. <Switch onChange={onChange} checked={showDeadline} />
  108. <span className="ml-2">限期</span>
  109. </div>
  110. </div>
  111. ) : null}
  112. {type === titleType.DEMOTION ? (
  113. <div className="mb-6">
  114. 未用户<b>{cloudUser.mobile}</b>,<b>{cloudUser.username}</b> 降级 <b>{cloudUser.name}</b>{' '}
  115. <b>{compilationListName}</b>
  116. </div>
  117. ) : null}
  118. {type === titleType.DEADLINE ? (
  119. <div className="mb-6">
  120. 未用户<b>{cloudUser.mobile}</b>,<b>{cloudUser.username}</b> <b>{cloudUser.name}</b>{' '}
  121. <b>{compilationListName}</b> 设置延期
  122. <div className="pt-5 pb-5">
  123. 当前限期为 <b>{deadline}</b>
  124. </div>
  125. </div>
  126. ) : null}
  127. {type !== titleType.DEMOTION ? (
  128. <Form {...layout} form={form}>
  129. <Form.Item name="deadline" label="到期时间">
  130. <DatePicker style={{ width: '100%' }} disabled={!showDeadline} />
  131. </Form.Item>
  132. </Form>
  133. ) : null}
  134. </Modal>
  135. )
  136. }
  137. export default UpgradeModal