index.jsx 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. import { PlusOutlined} from '@ant-design/icons';
  2. import {ProTable} from '@ant-design/pro-components';
  3. import {Button, Drawer, message} from 'antd';
  4. import {useCallback, useEffect, useRef, useState} from 'react';
  5. import {columnsFactory} from '../../../utils/columnsFactory.jsx';
  6. import {BizConditionForm} from './BizConditionForm';
  7. import {ProTableDefault, STATUS_TYPE} from '../../constants.js';
  8. import {useAppDispatch, useAppSelector} from "../../../redux/configureStore";
  9. import {createCondition, deleteCondition, getConditions, getDomains} from "../MainPage/slice/thunks";
  10. import {selectConditions} from "../MainPage/slice/selectors";
  11. import {bizConditionToSQL} from "../../../utils/listTools";
  12. import useI18NPrefix from "../../hooks/useI18NPrefix";
  13. export const ConditionManage = () => {
  14. const t = useI18NPrefix('global');
  15. const baseColumns = [
  16. {
  17. title: t("columns.bizRuleName"),
  18. dataIndex: 'name',
  19. },
  20. {
  21. title: t("columns.bizRuleCode"),
  22. dataIndex: 'defaultConfig',
  23. },
  24. {
  25. title: t("columns.bizRuleDesc"),
  26. dataIndex: 'description',
  27. },
  28. {
  29. title: t("columns.english"),
  30. dataIndex: 'english',
  31. },
  32. {
  33. title: t("columns.index_s"),
  34. dataIndex: 'index_s',
  35. },
  36. {
  37. title: t("columns.status"),
  38. dataIndex: 'status',
  39. valueType: 'select',
  40. valueEnum: STATUS_TYPE,
  41. },
  42. ]
  43. const dispatch = useAppDispatch();
  44. const formRef = useRef();
  45. const actionRef = useRef();
  46. const ref1 = useRef(null);
  47. const conditions = useAppSelector(selectConditions);
  48. const [columns, setColumns] = useState([]);
  49. const [record,setRecord]=useState({});
  50. /** 表单对话框 */
  51. const [open, setOpen] = useState(false);
  52. const handleCancel = () => {
  53. setOpen(false);
  54. };
  55. /** 初始渲染的钩子 */
  56. useEffect(() => {
  57. dispatch(getDomains())
  58. getColumns()
  59. }, []);
  60. /** 格式化表头 */
  61. const getColumns = () => {
  62. const columnInfo = columnsFactory({
  63. dataSource: baseColumns,
  64. onEdit:handleEdit,
  65. onDelete:handleDelete
  66. })
  67. setColumns(columnInfo)
  68. };
  69. /** 打开 新增、编辑 对话框 */
  70. const handleEdit=(row)=>{
  71. setRecord(row)
  72. setOpen(true)
  73. };
  74. /** 打开 新增、编辑 对话框 */
  75. const handleDelete=(row,reload)=>{
  76. dispatch(deleteCondition({
  77. id:row?.id,
  78. resolve(){
  79. message.success(t("validation.success"))
  80. reload()
  81. }
  82. }))
  83. };
  84. /** 提交表单 */
  85. const onSubmit = useCallback(
  86. (values)=> {
  87. console.log(values)
  88. const defaultConfig = values?.type==="logic" ? bizConditionToSQL(values?.filters) :values?.defaultConfig
  89. const params = {
  90. ...values,
  91. status:1,
  92. defaultConfig,
  93. }
  94. dispatch(createCondition({
  95. params,
  96. resolve(){
  97. message.success(t("validation.success"))
  98. actionRef.current?.reload()
  99. }
  100. }))
  101. },[]
  102. );
  103. return (
  104. <>
  105. <ProTable
  106. {...ProTableDefault}
  107. headerTitle={t("title.bizList")}
  108. actionRef={actionRef}
  109. columns={columns}
  110. dataSource={conditions}
  111. request={async (params) => {
  112. await dispatch(getConditions({params}))
  113. }}
  114. pagination={{
  115. pageSize: 20,
  116. onChange: (page) => console.log(page),
  117. }}
  118. toolBarRender={() => [
  119. <Button
  120. ref={ref1}
  121. key="button"
  122. icon={<PlusOutlined/>}
  123. onClick={() => handleEdit()}
  124. type="primary"
  125. >
  126. {t("button.create")}
  127. </Button>
  128. ]}
  129. />
  130. <Drawer
  131. title={t("title.bizCreate")}
  132. width={1230}
  133. styles={{body:{padding:'0'}}}
  134. open={open}
  135. maskClosable={false}
  136. destroyOnClose
  137. onClose={handleCancel}
  138. footer={[
  139. <Button key="previewer" style={{marginLeft:'45%'}} onClick={handleCancel}>
  140. {t("button.cancel")}
  141. </Button>,
  142. <Button key="submit" style={{marginLeft:15}} type="primary" onClick={()=>formRef?.current?.submit()}>
  143. {t("button.submit")}
  144. </Button>
  145. ]}
  146. >
  147. <BizConditionForm ref={formRef} data={record} onSubmit={onSubmit} />
  148. </Drawer>
  149. </>
  150. );
  151. }