index.tsx 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. import { PageContainer } from '@ant-design/pro-layout';
  2. import type { ProColumns, ActionType } from '@jetlinks/pro-table';
  3. import type { TenantDetail } from '@/pages/system/Tenant/typings';
  4. import type { TenantItem } from '@/pages/system/Tenant/typings';
  5. import BaseCrud from '@/components/BaseCrud';
  6. import { useRef } from 'react';
  7. import { Avatar, Menu, message, Popconfirm, Tooltip } from 'antd';
  8. import Service from '@/pages/system/Tenant/service';
  9. import { CurdModel } from '@/components/BaseCrud/model';
  10. import {
  11. CloseCircleOutlined,
  12. EditOutlined,
  13. KeyOutlined,
  14. PlayCircleOutlined,
  15. } from '@ant-design/icons';
  16. import { useIntl } from '@@/plugin-locale/localeExports';
  17. const menu = (
  18. <Menu>
  19. <Menu.Item key="1">1st item</Menu.Item>
  20. <Menu.Item key="2">2nd item</Menu.Item>
  21. <Menu.Item key="3">3rd item</Menu.Item>
  22. </Menu>
  23. );
  24. const service = new Service('tenant');
  25. const Tenant = () => {
  26. const intl = useIntl();
  27. const actionRef = useRef<ActionType>();
  28. const columns: ProColumns<TenantItem>[] = [
  29. {
  30. dataIndex: 'index',
  31. valueType: 'indexBorder',
  32. width: 48,
  33. },
  34. {
  35. dataIndex: 'tenant',
  36. title: intl.formatMessage({
  37. id: 'pages.system.tenant.avatar',
  38. defaultMessage: '头像',
  39. }),
  40. align: 'center',
  41. search: false,
  42. renderText: (text: TenantDetail) => <Avatar src={text.photo} />,
  43. },
  44. {
  45. dataIndex: 'tenant',
  46. title: intl.formatMessage({
  47. id: 'pages.table.name',
  48. defaultMessage: '名称',
  49. }),
  50. align: 'center',
  51. renderText: (text: TenantDetail) => text.name,
  52. },
  53. {
  54. dataIndex: 'members',
  55. title: intl.formatMessage({
  56. id: 'pages.system.tenant.members',
  57. defaultMessage: '成员数',
  58. }),
  59. align: 'center',
  60. },
  61. {
  62. dataIndex: 'tenant',
  63. title: intl.formatMessage({
  64. id: 'pages.searchTable.titleStatus',
  65. defaultMessage: '状态',
  66. }),
  67. align: 'center',
  68. renderText: (text: TenantDetail) => text.state.text,
  69. valueType: 'select',
  70. hideInForm: true,
  71. onFilter: true,
  72. valueEnum: [
  73. {
  74. text: intl.formatMessage({
  75. id: 'pages.searchTable.titleStatus.all',
  76. defaultMessage: '全部',
  77. }),
  78. status: 'Default',
  79. },
  80. {
  81. text: intl.formatMessage({
  82. id: 'pages.searchTable.titleStatus.normal',
  83. defaultMessage: '正常',
  84. }),
  85. status: '1',
  86. },
  87. {
  88. text: intl.formatMessage({
  89. id: 'pages.searchTable.titleStatus.disable',
  90. defaultMessage: '禁用',
  91. }),
  92. status: '0',
  93. },
  94. ],
  95. },
  96. {
  97. title: intl.formatMessage({
  98. id: 'pages.data.option',
  99. defaultMessage: '操作',
  100. }),
  101. valueType: 'option',
  102. align: 'center',
  103. width: 200,
  104. render: (text, record) => [
  105. <a key="editable" onClick={() => CurdModel.update(record)}>
  106. <Tooltip
  107. title={intl.formatMessage({
  108. id: 'pages.data.option.edit',
  109. defaultMessage: '编辑',
  110. })}
  111. >
  112. <EditOutlined />
  113. </Tooltip>
  114. </a>,
  115. <a onClick={() => console.log('授权')}>
  116. <Tooltip
  117. title={intl.formatMessage({
  118. id: 'pages.data.option.authorize',
  119. defaultMessage: '授权',
  120. })}
  121. >
  122. <KeyOutlined />
  123. </Tooltip>
  124. </a>,
  125. <a href={record.tenant.id} target="_blank" rel="noopener noreferrer" key="view">
  126. <Popconfirm
  127. title={intl.formatMessage({
  128. id: 'pages.data.option.disable.tips',
  129. defaultMessage: '确认禁用?',
  130. })}
  131. onConfirm={async () => {
  132. await service.update({
  133. tenant: {
  134. id: record.tenant.id,
  135. state: record.tenant?.state.value ? 0 : 1,
  136. },
  137. });
  138. message.success(
  139. intl.formatMessage({
  140. id: 'pages.data.option.success',
  141. defaultMessage: '操作成功!',
  142. }),
  143. );
  144. actionRef.current?.reload();
  145. }}
  146. >
  147. <Tooltip
  148. title={intl.formatMessage({
  149. id: `pages.data.option.${record.tenant?.state.value ? 'disable' : 'enable'}`,
  150. defaultMessage: record.tenant?.state?.value ? '禁用' : '启用',
  151. })}
  152. >
  153. {record.tenant?.state.value ? <CloseCircleOutlined /> : <PlayCircleOutlined />}
  154. </Tooltip>
  155. </Popconfirm>
  156. </a>,
  157. ],
  158. },
  159. ];
  160. return (
  161. <PageContainer>
  162. <BaseCrud<TenantItem>
  163. request={(params = {}) => service.queryDetail(params)}
  164. columns={columns}
  165. service={service}
  166. title={intl.formatMessage({
  167. id: 'pages.system.tenant.list',
  168. defaultMessage: '租户列表',
  169. })}
  170. schema={{}}
  171. menu={menu}
  172. actionRef={actionRef}
  173. />
  174. </PageContainer>
  175. );
  176. };
  177. export default Tenant;