index.tsx 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. // 部门-用户管理
  2. import type { ActionType, ProColumns } from '@jetlinks/pro-table';
  3. import ProTable from '@jetlinks/pro-table';
  4. import { useIntl } from '@@/plugin-locale/localeExports';
  5. import { Badge, Button, message, Popconfirm, Tooltip } from 'antd';
  6. import { useRef, useState } from 'react';
  7. import { useParams } from 'umi';
  8. import { observer } from '@formily/react';
  9. import MemberModel from '@/pages/system/Department/Member/model';
  10. import type { MemberItem } from '@/pages/system/Department/typings';
  11. import Service from '@/pages/system/Department/Member/service';
  12. import { DisconnectOutlined, PlusOutlined } from '@ant-design/icons';
  13. import Bind from './bind';
  14. import SearchComponent from '@/components/SearchComponent';
  15. import { getButtonPermission } from '@/utils/menu';
  16. export const service = new Service('tenant');
  17. const Member = observer(() => {
  18. const intl = useIntl();
  19. const actionRef = useRef<ActionType>();
  20. const param = useParams<{ id: string }>();
  21. const [searchParam, setSearchParam] = useState({});
  22. const handleUnBind = () => {
  23. if (MemberModel.unBindUsers.length) {
  24. service.handleUser(param.id, MemberModel.unBindUsers, 'unbind').subscribe({
  25. next: () => message.success('操作成功'),
  26. error: () => message.error('操作失败'),
  27. complete: () => {
  28. MemberModel.unBindUsers = [];
  29. actionRef.current?.reload();
  30. },
  31. });
  32. } else {
  33. message.warning('请勾选需要解绑的数据');
  34. }
  35. };
  36. const singleUnBind = (key: string) => {
  37. MemberModel.unBindUsers = [key];
  38. handleUnBind();
  39. };
  40. const columns: ProColumns<MemberItem>[] = [
  41. {
  42. dataIndex: 'name',
  43. title: intl.formatMessage({
  44. id: 'pages.system.name',
  45. defaultMessage: '姓名',
  46. }),
  47. search: {
  48. transform: (value) => ({ name$LIKE: value }),
  49. },
  50. },
  51. {
  52. dataIndex: 'username',
  53. title: intl.formatMessage({
  54. id: 'pages.system.username',
  55. defaultMessage: '用户名',
  56. }),
  57. search: {
  58. transform: (value) => ({ username$LIKE: value }),
  59. },
  60. },
  61. {
  62. title: intl.formatMessage({
  63. id: 'pages.searchTable.titleStatus',
  64. defaultMessage: '状态',
  65. }),
  66. dataIndex: 'status',
  67. filters: true,
  68. onFilter: true,
  69. valueType: 'select',
  70. valueEnum: {
  71. all: {
  72. text: intl.formatMessage({
  73. id: 'pages.searchTable.titleStatus.all',
  74. defaultMessage: '全部',
  75. }),
  76. status: 'Default',
  77. },
  78. 1: {
  79. text: intl.formatMessage({
  80. id: 'pages.searchTable.titleStatus.normal',
  81. defaultMessage: '正常',
  82. }),
  83. status: 1,
  84. },
  85. 0: {
  86. text: intl.formatMessage({
  87. id: 'pages.searchTable.titleStatus.disable',
  88. defaultMessage: '禁用',
  89. }),
  90. status: 0,
  91. },
  92. },
  93. render: (_, data) => (
  94. <Badge
  95. status={data.status === 1 ? 'success' : 'error'}
  96. text={
  97. data.status === 1
  98. ? intl.formatMessage({
  99. id: 'pages.searchTable.titleStatus.normal',
  100. defaultMessage: '正常',
  101. })
  102. : intl.formatMessage({
  103. id: 'pages.searchTable.titleStatus.disable',
  104. defaultMessage: '禁用',
  105. })
  106. }
  107. />
  108. ),
  109. },
  110. {
  111. title: intl.formatMessage({
  112. id: 'pages.data.option',
  113. defaultMessage: '操作',
  114. }),
  115. valueType: 'option',
  116. width: 200,
  117. render: (text, record) => [
  118. <Popconfirm
  119. title={intl.formatMessage({
  120. id: 'pages.system.role.option.unBindUser',
  121. defaultMessage: '是否解除绑定',
  122. })}
  123. key="unBindUser"
  124. onConfirm={() => {
  125. singleUnBind(record.id);
  126. }}
  127. disabled={getButtonPermission('system/Department', ['add', 'update'])}
  128. >
  129. <Button
  130. type={'link'}
  131. style={{ padding: 0 }}
  132. disabled={getButtonPermission('system/Department', ['add', 'update'])}
  133. >
  134. <Tooltip
  135. title={intl.formatMessage({
  136. id: 'pages.system.role.option.unBindUser',
  137. defaultMessage: '解除绑定',
  138. })}
  139. >
  140. <DisconnectOutlined />
  141. </Tooltip>
  142. </Button>
  143. </Popconfirm>,
  144. ],
  145. },
  146. ];
  147. const closeModal = () => {
  148. MemberModel.bind = false;
  149. };
  150. return (
  151. <>
  152. <Bind
  153. visible={MemberModel.bind}
  154. onCancel={closeModal}
  155. reload={() => actionRef.current?.reload()}
  156. />
  157. <SearchComponent<MemberItem>
  158. // pattern={'simple'}
  159. field={columns}
  160. defaultParam={[{ column: 'id$in-dimension$org', value: param.id }]}
  161. onSearch={async (data) => {
  162. actionRef.current?.reset?.();
  163. setSearchParam(data);
  164. }}
  165. // onReset={() => {
  166. // // 重置分页及搜索参数
  167. // actionRef.current?.reset?.();
  168. // setSearchParam({});
  169. // }}
  170. target="department-user"
  171. />
  172. <ProTable<MemberItem>
  173. actionRef={actionRef}
  174. columns={columns}
  175. search={false}
  176. rowKey="id"
  177. request={(params) => service.queryUser(params)}
  178. rowSelection={{
  179. selectedRowKeys: MemberModel.unBindUsers,
  180. onChange: (selectedRowKeys, selectedRows) => {
  181. MemberModel.unBindUsers = selectedRows.map((item) => item.id);
  182. },
  183. }}
  184. params={searchParam}
  185. toolBarRender={() => [
  186. <Button
  187. onClick={() => {
  188. MemberModel.bind = true;
  189. }}
  190. icon={<PlusOutlined />}
  191. type="primary"
  192. key="bind"
  193. disabled={getButtonPermission('system/Department', ['add', 'update'])}
  194. >
  195. {intl.formatMessage({
  196. id: 'pages.system.role.option.bindUser',
  197. defaultMessage: '绑定用户',
  198. })}
  199. </Button>,
  200. <Popconfirm
  201. title={intl.formatMessage({
  202. id: 'pages.system.role.option.unBinds',
  203. defaultMessage: '是否批量解除绑定',
  204. })}
  205. key="unBind"
  206. onConfirm={handleUnBind}
  207. disabled={getButtonPermission('system/Department', ['add', 'update'])}
  208. >
  209. <Button
  210. icon={<DisconnectOutlined />}
  211. disabled={getButtonPermission('system/Department', ['add', 'update'])}
  212. >
  213. {intl.formatMessage({
  214. id: 'pages.system.role.option.unBindUser',
  215. defaultMessage: '批量解绑',
  216. })}
  217. </Button>
  218. </Popconfirm>,
  219. ]}
  220. />
  221. </>
  222. );
  223. });
  224. export default Member;