diff --git a/inventory-backend/app/models/purchase.py b/inventory-backend/app/models/purchase.py index b4dff12..f689543 100644 --- a/inventory-backend/app/models/purchase.py +++ b/inventory-backend/app/models/purchase.py @@ -64,6 +64,16 @@ class PurchaseRequest(db.Model): except Exception: return f"用户({user_id})" + def _get_user_email(self, user_id): + if not user_id: + return "" + from app.models.system import SysUser + try: + user = db.session.get(SysUser, user_id) + return user.email or "" if user else "" + except Exception: + return "" + def to_dict(self): return { 'id': self.id, @@ -82,6 +92,7 @@ class PurchaseRequest(db.Model): 'status_text': ['待审批', '已通过', '已驳回', '已完成'][self.status] if self.status in [0, 1, 2, 3] else '未知', 'requester_id': self.requester_id, 'requester_name': self._get_user_name(self.requester_id), + 'requester_email': self._get_user_email(self.requester_id), 'approver_id': self.approver_id, 'approver_name': self._get_user_name(self.approver_id) if self.approver_id else None, 'approved_at': self.approved_at.strftime('%Y-%m-%d %H:%M:%S') if self.approved_at else None, diff --git a/inventory-web/src/api/purchase.ts b/inventory-web/src/api/purchase.ts index dedcc09..a908720 100644 --- a/inventory-web/src/api/purchase.ts +++ b/inventory-web/src/api/purchase.ts @@ -17,6 +17,7 @@ export interface PurchaseItem { status_text?: string requester_id?: number requester_name?: string + requester_email?: string approver_id?: number approver_name?: string approved_at?: string diff --git a/inventory-web/src/views/stock/inbound/buy.vue b/inventory-web/src/views/stock/inbound/buy.vue index 0481f4e..3242b1d 100644 --- a/inventory-web/src/views/stock/inbound/buy.vue +++ b/inventory-web/src/views/stock/inbound/buy.vue @@ -621,31 +621,13 @@ - - - - + + - - - - + + @@ -678,18 +660,18 @@ destroy-on-close :close-on-click-modal="false" > -
+
- 搜索 + 搜索
{ const querySearchPurchaser = (qs: string, cb: any) => fetchUserSuggestions(qs, cb) const handlePurchaserSelect = (item: any) => { form.purchaser = item.value; if (item.email) form.purchaser_email = item.email } -const fetchLinkSuggestions = async (query: string, cb: any, type: 'original' | 'detail') => { - if (!form.base_id) { cb([]); return } - try { - const res: any = await getLinkSuggestions({ base_id: form.base_id, type }) - if (res.code === 200) { - const links = res.data.map((link: string) => ({ value: link })) - const filtered = query ? links.filter((item:any) => item.value.toLowerCase().includes(query.toLowerCase())) : links - cb(filtered) - } else { cb([]) } - } catch(e) { cb([]) } -} -const querySearchLinks = (qs: string, cb: any, type: 'original' | 'detail') => fetchLinkSuggestions(qs, cb, type) - const fetchLocationSuggestions = async (query: string, cb: any) => { if (!form.base_id) { cb([]); return } try { @@ -1805,6 +1773,13 @@ const fetchPurchaseImportList = async () => { } } +// 防抖实时搜索(输入即搜,无需点按钮) +const debouncedPurchaseImportSearch = debounce(() => { + purchaseImportPage.value = 1 + purchaseImportSelected.value = null + fetchPurchaseImportList() +}, 300) + // 表格选中行变化(点击已选中行可取消) const onPurchaseImportSelect = (row: any) => { if (purchaseImportSelected.value?.id === row.id) { @@ -1882,7 +1857,15 @@ const confirmPurchaseImport = () => { } } if (po.supplier_link) { - form.source_link = po.supplier_link + form.detail_link = po.supplier_link + } + + // 从采购申请人自动填充采购人信息 + if (po.requester_name) { + form.purchaser = po.requester_name + } + if (po.requester_email) { + form.purchaser_email = po.requester_email } // 3. 关联采购单号