import { View, Text, ScrollView, Input, Button } from '@tarojs/components'; import { useState, useEffect, useCallback } from 'react'; import { useDidShow } from '@tarojs/taro'; import Taro from '@tarojs/taro'; import NavBar from '@/components/NavBar'; import LoadMore from '@/components/common/LoadMore'; import EmptyState from '@/components/common/EmptyState'; import { listShopInvoiceTitle, addShopInvoiceTitle, updateShopInvoiceTitle, removeShopInvoiceTitle, setDefaultInvoiceTitle } from '@/api/shop/shopInvoiceTitle'; import type { ShopInvoiceTitle, ShopInvoiceTitleParam } from '@/api/shop/shopInvoiceTitle/model'; export default function InvoiceTitlePage() { const [titleList, setTitleList] = useState([]); const [loading, setLoading] = useState(true); const [showAddModal, setShowAddModal] = useState(false); const [editItem, setEditItem] = useState(null); const [formData, setFormData] = useState({ type: 'personal' as 'personal' | 'company', name: '', taxNumber: '', email: '', }); // 加载数据 const loadData = useCallback(async () => { setLoading(true); try { const params: ShopInvoiceTitleParam = {}; const result = await listShopInvoiceTitle(params); setTitleList(result || []); } catch (e: any) { console.error('获取发票抬头失败:', e); Taro.showToast({ title: e.message || '获取数据失败', icon: 'none' }); } finally { setLoading(false); } }, []); useEffect(() => { loadData(); }, [loadData]); // 删除 const handleDelete = async (id: number) => { Taro.showModal({ title: '确认删除', content: '确定要删除该发票抬头吗?', success: async (res) => { if (res.confirm) { try { await removeShopInvoiceTitle(id); Taro.showToast({ title: '删除成功', icon: 'success' }); loadData(); } catch (e: any) { Taro.showToast({ title: e.message || '删除失败', icon: 'none' }); } } } }); }; // 设置默认 const handleSetDefault = async (id: number) => { try { await setDefaultInvoiceTitle(id); Taro.showToast({ title: '设置成功', icon: 'success' }); loadData(); } catch (e: any) { Taro.showToast({ title: e.message || '设置失败', icon: 'none' }); } }; // 编辑 const handleEdit = (item: ShopInvoiceTitle) => { setEditItem(item); setFormData({ type: (item.type as 'personal' | 'company') || 'personal', name: item.name || '', taxNumber: item.taxNumber || '', email: item.email || '', }); setShowAddModal(true); }; // 添加/编辑提交 const handleSubmit = async () => { if (!formData.name.trim()) { Taro.showToast({ title: '请输入抬头名称', icon: 'none' }); return; } if (formData.type === 'company' && !formData.taxNumber.trim()) { Taro.showToast({ title: '请输入税号', icon: 'none' }); return; } try { if (editItem) { await updateShopInvoiceTitle({ id: editItem.id, ...formData, }); Taro.showToast({ title: '修改成功', icon: 'success' }); } else { await addShopInvoiceTitle(formData); Taro.showToast({ title: '添加成功', icon: 'success' }); } setShowAddModal(false); setEditItem(null); setFormData({ type: 'personal', name: '', taxNumber: '', email: '' }); loadData(); } catch (e: any) { Taro.showToast({ title: e.message || '操作失败', icon: 'none' }); } }; // 取消编辑 const handleCancel = () => { setShowAddModal(false); setEditItem(null); setFormData({ type: 'personal', name: '', taxNumber: '', email: '' }); }; return ( {loading ? ( ) : titleList.length === 0 ? ( ) : ( {titleList.map(item => ( {item.type === 'personal' ? '个人' : '企业'} {item.isDefault === 1 && ( 默认 )} {item.name} {item.type === 'company' && item.taxNumber && ( 税号:{item.taxNumber} )} {item.email && ( 邮箱:{item.email} )} handleSetDefault(item.id!)} > {item.isDefault === 1 && } 设为默认 handleEdit(item)} > 编辑 handleDelete(item.id!)} > 删除 ))} )} {/* 添加/编辑弹窗 */} {showAddModal && ( {editItem ? '编辑发票抬头' : '添加发票抬头'} {/* 抬头类型 */} 抬头类型 setFormData(prev => ({ ...prev, type: 'personal' }))} > 个人 setFormData(prev => ({ ...prev, type: 'company' }))} > 企业 {/* 抬头名称 */} 抬头名称 setFormData(prev => ({ ...prev, name: e.detail.value }))} /> {/* 税号 */} {formData.type === 'company' && ( 税号 setFormData(prev => ({ ...prev, taxNumber: e.detail.value }))} /> )} {/* 邮箱 */} 接收邮箱(选填) setFormData(prev => ({ ...prev, email: e.detail.value }))} /> {/* 按钮 */} )} {/* 底部添加按钮 */} ); }