diff --git a/src/hooks/team/useTeams.js b/src/hooks/team/useTeams.js
index cbd2482..88c253d 100644
--- a/src/hooks/team/useTeams.js
+++ b/src/hooks/team/useTeams.js
@@ -42,12 +42,35 @@ export const useTeams = () => {
}
};
+ // 创建团队前检查类型是否已存在
+ const checkTeamTypeExists = async (type) => {
+ try {
+ const {data} = await supabaseService.select('teams', {
+ filter: {
+ deleted_at: { is: null },
+ 'attributes->>type': { eq: type }
+ }
+ });
+ return data.length > 0;
+ } catch (error) {
+ console.error('检查团队类型失败:', error);
+ throw error;
+ }
+ };
+
// 创建团队
const createTeam = async (values) => {
try {
+ if (values.type) {
+ const result = await checkTeamTypeExists(values.type);
+ if (result) {
+ throw new Error(`团队类型 "${values.type}" 已存在,请使用其他类型名称`);
+ }
+ }
const newTeam = await supabaseService.insert('teams', {
name: values.name,
- description: values.description
+ description: values.description,
+ attributes: { type: values.type }
});
// 创建团队成员关系
diff --git a/src/pages/resource/team/components/CreateTeamModal/TeamForm.jsx b/src/pages/resource/team/components/CreateTeamModal/TeamForm.jsx
index 4c450b8..99f04bb 100644
--- a/src/pages/resource/team/components/CreateTeamModal/TeamForm.jsx
+++ b/src/pages/resource/team/components/CreateTeamModal/TeamForm.jsx
@@ -41,7 +41,12 @@ export const TeamForm = ({ form }) => {
>
-
+
+
+
{
@@ -69,17 +70,26 @@ export const ExpandedMemberships = ({ teamId }) => {
}
};
- const handleAdd = () => {
+ const handleAdd = (value) => {
+ handleModalOk(value)
setIsModalVisible(true);
form.resetFields();
};
- const handleModalOk = async () => {
+ const handleModalOk = async (values) => {
try {
- const values = await form.validateFields();
+ const { data: users, error: userError } = await supabase
+ .from('users')
+ .select('id, email')
+ .eq('email', values.email)
+ .single();
+ if (userError || users.length===0) {
+ throw new Error('未找到该用户');
+ }
await supabaseService.insert('team_membership', {
+ id:uuidv4(),
team_id: teamId,
- user_id: values.user_id,
+ user_id: users.id,
role: values.role,
is_creator: false
});
@@ -88,7 +98,7 @@ export const ExpandedMemberships = ({ teamId }) => {
message.success('成员已添加');
await loadMemberships();
} catch (error) {
- message.error('添加成员失败');
+ message.error(error.message || '添加成员失败');
console.error('Add failed:', error);
}
};
diff --git a/src/pages/resource/team/components/MembershipTable.jsx b/src/pages/resource/team/components/MembershipTable.jsx
index dfddfd8..edba38c 100644
--- a/src/pages/resource/team/components/MembershipTable.jsx
+++ b/src/pages/resource/team/components/MembershipTable.jsx
@@ -1,12 +1,14 @@
import React, { useState } from 'react';
-import { Table, Button, Space, Popconfirm, Tag, Form } from 'antd';
+import { Table, Button, Space, Popconfirm, Tag, Form, Modal, Input, Select } from 'antd';
import { EditOutlined, DeleteOutlined, SaveOutlined, CloseOutlined, PlusOutlined } from '@ant-design/icons';
import { EditableMembershipCell } from './EditableMembershipCell';
import { roleColors } from '../constants/teamConstants';
+import { message } from 'antd';
export const MembershipTable = ({ memberships, onUpdate, onDelete, onAdd }) => {
const [form] = Form.useForm();
const [editingKey, setEditingKey] = useState('');
+ const [addModalVisible, setAddModalVisible] = useState(false);
const isEditing = (record) => record.id === editingKey;
@@ -38,7 +40,6 @@ export const MembershipTable = ({ memberships, onUpdate, onDelete, onAdd }) => {
render: (user) => (
{user?.email}
- {user?.email}
),
},
@@ -137,16 +138,71 @@ export const MembershipTable = ({ memberships, onUpdate, onDelete, onAdd }) => {
};
});
+ const AddMemberModal = ({ visible, onCancel, onAdd }) => {
+ const [loading, setLoading] = useState(false);
+
+ const handleSubmit = async () => {
+ try {
+ setLoading(true);
+ const values = await form.validateFields();
+ await onAdd(values);
+ form.resetFields();
+ onCancel();
+ } catch (error) {
+ message.error('添加失败: ' + error.message);
+ } finally {
+ setLoading(false);
+ }
+ };
+
+ return (
+
+
+
+
+
+
+
+
+
+ );
+ };
+
return (
- {/*
}
- onClick={onAdd}
+ onClick={() => setAddModalVisible(true)}
className="mb-4"
>
添加成员
- */}
+