From 8a7762142c84948b6a0bd23fcf6d8376ed651739 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=98Liammcl=E2=80=99?= Date: Sun, 29 Dec 2024 09:55:17 +0800 Subject: [PATCH] feat:1 --- src/pages/company/quotation/index.jsx | 94 +++++++++++-------- .../detail/components/TaskTemplate.jsx | 2 +- src/pages/company/task/index.jsx | 66 ++++++++++++- src/pages/resource/bucket/index.jsx | 4 +- .../team/components/MembershipTable.jsx | 13 ++- src/pages/resource/team/index.jsx | 1 - src/services/supabase/resource.js | 11 ++- 7 files changed, 144 insertions(+), 47 deletions(-) diff --git a/src/pages/company/quotation/index.jsx b/src/pages/company/quotation/index.jsx index 2a00e55..664ff7d 100644 --- a/src/pages/company/quotation/index.jsx +++ b/src/pages/company/quotation/index.jsx @@ -44,9 +44,9 @@ const QuotationPage = () => { const [selectedTemplateId, setSelectedTemplateId] = useState(null); const [templates, setTemplates] = useState([]); const [loading, setLoading] = useState(false); - const [selectedCategory, setSelectedCategory] = useState("all"); - const [categories, setCategories] = useState([]); - + const [customers,setCustomers]=useState([]) + const [loadingCustomers, setLoadingCustomers] = useState(false); + const [selectedCustomer, setSelectedCustomer] = useState(null); const { resources: quotations, loading: loadingQuotations, @@ -56,9 +56,18 @@ const QuotationPage = () => { } = useResources(pagination, sorter, "quota"); useEffect(() => { - fetchQuotations(); - }, []); - + fetchQuotations({ + current: pagination.current, + pageSize: pagination.pageSize, + field: sorter.field, + order: sorter.order, + search: selectedCustomer ? JSON.stringify({ customerId: selectedCustomer }) : "" // 添加搜索参数 + }); + + }, [selectedCustomer, pagination.current, pagination.pageSize, sorter]); // 添加更多依赖项 +useEffect(()=>{ + fetchCustomers(); +},[]) const handleTableChange = (pagination, filters, sorter) => { setPagination(pagination); setSorter(sorter); @@ -106,11 +115,7 @@ const QuotationPage = () => { } }, [isModalVisible]); - useEffect(() => { - if (templates.length > 0) { - setCategories(getAllCategories(templates)); - } - }, [templates]); + const handleTemplateSelect = (templateId) => { setSelectedTemplateId(templateId); @@ -126,23 +131,6 @@ const QuotationPage = () => { setSelectedTemplateId(null); }; - const getAllCategories = (templates) => { - const categorySet = new Set(); - templates.forEach((template) => { - template.attributes.category?.forEach((cat) => { - categorySet.add(JSON.stringify(cat)); - }); - }); - return Array.from(categorySet).map((cat) => JSON.parse(cat)); - }; - - const getFilteredTemplates = () => { - if (selectedCategory === "all") return templates; - return templates.filter((template) => - template.attributes.category?.some((cat) => cat.id === selectedCategory) - ); - }; - const columns = [ { title: "报价单名称", @@ -333,6 +321,24 @@ const QuotationPage = () => { setLoading(false); } }; + const fetchCustomers = async () => { + setLoadingCustomers(true); + try { + const { data, error } = await supabase + .from('resources') + .select('*') + .eq('type', 'customer') + .order('created_at', { ascending: false }); + + if (error) throw error; + setCustomers(data || []); + } catch (error) { + console.error('获取客户列表失败:', error); + message.error('获取客户列表失败'); + } finally { + setLoadingCustomers(false); + } + }; return ( <> { } className="h-full w-full overflow-auto" extra={ -
- -
+ + ({ + label: c.attributes.name, + value: c.id + }))} + onChange={(value) => { + setSelectedCustomer(value); + setPagination({ current: 1, pageSize: pagination.pageSize }); + fetchTasks({ + current: 1, + pageSize: pagination.pageSize, + field: sorter.field, + order: sorter.order, + search: value ? JSON.stringify({ customerId: value }) : undefined + }); + }} + /> + } > {
- setSearchText(e.target.value)} - className="w-full" size="large" />
diff --git a/src/pages/resource/team/components/MembershipTable.jsx b/src/pages/resource/team/components/MembershipTable.jsx index edba38c..18fcb2d 100644 --- a/src/pages/resource/team/components/MembershipTable.jsx +++ b/src/pages/resource/team/components/MembershipTable.jsx @@ -25,6 +25,8 @@ export const MembershipTable = ({ memberships, onUpdate, onDelete, onAdd }) => { try { const row = await form.validateFields(); setEditingKey(''); + console.log(row,'row'); + onUpdate(key, row); } catch (error) { console.error('Save failed:', error); @@ -93,16 +95,20 @@ export const MembershipTable = ({ memberships, onUpdate, onDelete, onAdd }) => { ) : ( - - {!record.isCreator && ( onDelete(record.id)} @@ -116,6 +122,7 @@ export const MembershipTable = ({ memberships, onUpdate, onDelete, onAdd }) => { 删除 + )} ); diff --git a/src/pages/resource/team/index.jsx b/src/pages/resource/team/index.jsx index a7120c3..3de7279 100644 --- a/src/pages/resource/team/index.jsx +++ b/src/pages/resource/team/index.jsx @@ -162,7 +162,6 @@ const TeamManagement = () => { try { await updateTeam(id, values); await loadTeams(); - message.success('更新团队成功'); } catch (error) { message.error('更新团队失败'); } diff --git a/src/services/supabase/resource.js b/src/services/supabase/resource.js index 4236a08..fc2ead6 100644 --- a/src/services/supabase/resource.js +++ b/src/services/supabase/resource.js @@ -9,13 +9,19 @@ export const resourceService = { .eq('type', type) if (searchQuery) { - query = query.or(`external_id.ilike.%${searchQuery}%`); + const searchParams = JSON.parse(searchQuery); + if (searchParams.customerId) { + query = query.filter('attributes->customers', 'cs', + JSON.stringify([{id: searchParams.customerId}]) + ); + } } if (orderBy) { query = query.order(orderBy, { ascending }); } const from = (page - 1) * pageSize; - query = query.range(from, from + pageSize - 1); + const to = from + pageSize - 1; + query = query.range(from, to); const { data, count, error } = await query; if (error) throw error; @@ -25,6 +31,7 @@ export const resourceService = { total: count || 0, }; } catch (error) { + console.error("获取资源列表失败:", error); throw error; } },