From 538b6cb8187bf656ace4289a66f461b767d99d77 Mon Sep 17 00:00:00 2001 From: yueli Date: Tue, 14 Jul 2026 16:29:19 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=87=87=E8=B4=AD=E5=8D=95=E5=AF=BC?= =?UTF-8?q?=E5=85=A5=E8=87=AA=E5=8A=A8=E5=A1=AB=E5=85=85=E9=87=87=E8=B4=AD?= =?UTF-8?q?=E4=BA=BA/=E9=82=AE=E7=AE=B1/=E8=AF=A6=E6=83=85=E9=93=BE?= =?UTF-8?q?=E6=8E=A5=20+=20=E5=AE=9E=E6=97=B6=E6=90=9C=E7=B4=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - PurchaseRequest.to_dict() 新增 requester_email - 导入时自动填入: 采购人(requester_name) + 邮箱(requester_email) + 详情链接(supplier_link) - 移除原始链接/详情链接的历史 autocomplete, 改为纯输入框+权限守卫 - 采购单导入搜索改为实时输入搜索(300ms防抖), 保留搜索按钮 --- inventory-backend/app/models/purchase.py | 11 +++ inventory-web/src/api/purchase.ts | 1 + inventory-web/src/views/stock/inbound/buy.vue | 67 +++++++------------ 3 files changed, 37 insertions(+), 42 deletions(-) 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. 关联采购单号