index.tsx 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. import { createForm } from '@formily/core';
  2. import { createSchemaField } from '@formily/react';
  3. import { Form, FormItem, Select } from '@formily/antd';
  4. import { message, Modal } from 'antd';
  5. import { service, state } from '..';
  6. import { useEffect, useState } from 'react';
  7. interface Props {
  8. close: () => void;
  9. data: any;
  10. id: string;
  11. reload: () => void;
  12. }
  13. const BindUser = (props: Props) => {
  14. const form = createForm({
  15. validateFirst: true,
  16. initialValues: { user: props.data?.userId || '' },
  17. });
  18. const [list, setList] = useState<any[]>([]);
  19. const getUsers = async (id: string) => {
  20. const resp = await service.syncUser.noBindUser({
  21. pagign: false,
  22. terms: [
  23. {
  24. column: `id$user-third${state.current?.type}_${state.current?.provider}$not`,
  25. value: id,
  26. },
  27. ],
  28. });
  29. const data = resp.result?.map((item: Record<string, unknown>) => ({
  30. label: item.name,
  31. value: item.id,
  32. }));
  33. setList(data);
  34. };
  35. useEffect(() => {
  36. if (props.data?.thirdPartyUserId) {
  37. getUsers(props.data.id);
  38. }
  39. }, [props.data]);
  40. const SchemaField = createSchemaField({
  41. components: {
  42. FormItem,
  43. Select,
  44. },
  45. });
  46. const schema = {
  47. type: 'object',
  48. properties: {
  49. user: {
  50. type: 'string',
  51. title: '用户',
  52. 'x-decorator': 'FormItem',
  53. 'x-component': 'Select',
  54. 'x-component-props': {
  55. placeholder: '请选择用户',
  56. filterOption: (input: string, option: any) =>
  57. option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0,
  58. },
  59. enum: [...list],
  60. 'x-validator': [
  61. {
  62. required: true,
  63. message: '请选择用户',
  64. },
  65. ],
  66. },
  67. },
  68. };
  69. return (
  70. <Modal
  71. title="绑定用户 "
  72. onCancel={() => {
  73. props.close();
  74. }}
  75. visible
  76. width={500}
  77. onOk={async () => {
  78. const values: any = (await form.submit()) as any;
  79. const resp = await service.syncUser.bindUser(
  80. props.id,
  81. state.current?.provider || '',
  82. state.current?.id || '',
  83. [
  84. {
  85. userId: values.user,
  86. providerName: props.data?.name,
  87. thirdPartyUserId: props.data?.id,
  88. },
  89. ],
  90. );
  91. if (resp.status === 200) {
  92. message.success('操作成功!');
  93. props.reload();
  94. }
  95. }}
  96. >
  97. <Form form={form} layout="vertical">
  98. <SchemaField schema={schema} />
  99. </Form>
  100. </Modal>
  101. );
  102. };
  103. export default BindUser;