useScripts.tsx 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. import consts from '@/utils/consts'
  2. import { useState } from 'react'
  3. import { useRequest } from 'ahooks'
  4. import { Form, Input, message } from 'antd'
  5. import ProForm, { ProFormRadio, ProFormSelect, ProFormText } from '@ant-design/pro-form'
  6. import type { ModalAction } from '@/components/Modal'
  7. import {
  8. addAccountBg,
  9. delAccountBg,
  10. fetchRoleBgList,
  11. fetchRoleBgStaffListByRoleId,
  12. updateAccountBg
  13. } from '@/services/api/permission'
  14. import { RoleType } from '@/pages/Permission/FrontRole/components/RoleLeftMenu'
  15. import { omit } from 'lodash'
  16. type iState = {
  17. items: API.AccountBgParams[]
  18. total: number
  19. }
  20. export default function useScripts(modal: ModalAction) {
  21. const [state, setState] = useState<iState>({
  22. items: [],
  23. total: 0
  24. })
  25. const { refresh, loading } = useRequest(() => fetchRoleBgStaffListByRoleId(), {
  26. onSuccess: result => {
  27. setState({
  28. ...state,
  29. items: result?.data.items
  30. })
  31. }
  32. })
  33. const addOrEdit = (mode: 'add' | 'edit', accountValues?: API.AccountBgParams) => {
  34. const text = mode === 'add' ? '添加人员' : '编辑人员'
  35. modal.open({
  36. title: text,
  37. okText: '确定',
  38. cancelText: '取消',
  39. type: 'form',
  40. initialValues: accountValues ?? { enable: true },
  41. children: (
  42. <ProForm submitter={false} layout="horizontal" labelCol={{ span: 5 }} isKeyPressSubmit>
  43. <ProFormText hidden name="ID" />
  44. <ProFormText
  45. name="account"
  46. disabled={mode === 'add' ? false : true}
  47. label="账号"
  48. rules={[{ required: true, message: '请输入' }]}
  49. />
  50. <ProFormText name="name" label="名称" rules={[{ required: true, message: '请输入' }]} />
  51. <Form.Item
  52. label="密码"
  53. hidden={mode === 'add' ? false : true}
  54. name="password"
  55. rules={[{ required: mode === 'add' ? true : false, message: '请输入' }]}>
  56. <Input.Password placeholder="请输入" />
  57. </Form.Item>
  58. <ProFormSelect
  59. label="角色"
  60. name="roleIDs"
  61. className="w-full"
  62. rules={[{ required: true, message: '请输入' }]}
  63. request={async () => {
  64. const params = await fetchRoleBgList()
  65. return params.data
  66. ?.filter(item => !RoleType.SYSTEM.includes(item.roleType))
  67. .map(item => ({ value: item.ID, label: item.name }))
  68. }}
  69. />
  70. <ProFormRadio.Group
  71. options={[
  72. { label: '启用', value: true },
  73. { label: '停用', value: false }
  74. ]}
  75. name="enable"
  76. label="状态"
  77. rules={[{ required: true, message: '请选择' }]}
  78. />
  79. </ProForm>
  80. ),
  81. onOk: async (values: API.AccountBgParams) => {
  82. let requestFn: Nullable<() => Promise<viod>> = null
  83. if (mode === 'add') {
  84. requestFn = addAccountBg
  85. } else {
  86. requestFn = updateAccountBg
  87. }
  88. try {
  89. if (mode === 'add') {
  90. await requestFn?.(values)
  91. } else {
  92. await requestFn?.(omit(values, ['account', 'password']))
  93. }
  94. refresh()
  95. modal.close()
  96. message.success(text + '成功')
  97. } catch (error) {}
  98. }
  99. })
  100. }
  101. const del = (ID: string) => {
  102. modal.open({
  103. title: '删除人员',
  104. okText: '确定',
  105. cancelText: '取消',
  106. children: <div>确认删除该行数据?</div>,
  107. onOk: async () => {
  108. try {
  109. const { code = -1 } = await delAccountBg({ ID })
  110. if (code === consts.RET_CODE.SUCCESS) {
  111. refresh()
  112. modal.close()
  113. message.success('删除成功')
  114. }
  115. } catch (error) {}
  116. }
  117. })
  118. }
  119. return { items: state.items, loading, addOrEdit, del }
  120. }