From a1217e36b54f84fd533b3439149ae83608471434 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A6=82=E5=88=9D?= <3236758982@qq.com> Date: Mon, 25 May 2026 09:27:16 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=9D=8E=E7=BA=A2=E6=94=80=EF=BC=9AV2.0?= =?UTF-8?q?.061=E9=87=87=E8=B4=AD=E5=85=A5=E5=BA=93=E3=80=81=E9=94=80?= =?UTF-8?q?=E5=94=AE=E5=87=BA=E5=BA=93=E6=B7=BB=E5=8A=A0=E6=89=AB=E7=A0=81?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .husky/pre-commit | 1 - src/api/erp/location/index.ts | 14 + src/api/erp/purchase-in-scan-record/index.ts | 42 + src/api/erp/sale-out-scan-record/index.ts | 42 + src/api/erp/sale-out/index.ts | 91 ++ src/api/erp/warehouse/index.ts | 3 + src/pages-erp/purchase-in/form/index.vue | 2 +- src/pages-erp/purchase-in/index.vue | 13 + .../scan-in/components/recent-scan-list.vue | 131 +++ .../scan-in/components/scan-context-bar.vue | 69 ++ .../scan-in/components/scan-feedback-bar.vue | 43 + src/pages-erp/purchase-in/scan-in/index.vue | 929 ++++++++++++++++++ src/pages-erp/sale-out/detail/index.vue | 57 ++ src/pages-erp/sale-out/form/index.vue | 26 + src/pages-erp/sale-out/index.vue | 408 ++++++++ .../scan-out/components/recent-scan-list.vue | 136 +++ .../scan-out/components/scan-context-bar.vue | 69 ++ .../scan-out/components/scan-feedback-bar.vue | 43 + src/pages-erp/sale-out/scan-out/index.vue | 928 +++++++++++++++++ src/pages/index/index.ts | 30 + 20 files changed, 3075 insertions(+), 2 deletions(-) delete mode 100644 .husky/pre-commit create mode 100644 src/api/erp/location/index.ts create mode 100644 src/api/erp/purchase-in-scan-record/index.ts create mode 100644 src/api/erp/sale-out-scan-record/index.ts create mode 100644 src/api/erp/sale-out/index.ts create mode 100644 src/pages-erp/purchase-in/scan-in/components/recent-scan-list.vue create mode 100644 src/pages-erp/purchase-in/scan-in/components/scan-context-bar.vue create mode 100644 src/pages-erp/purchase-in/scan-in/components/scan-feedback-bar.vue create mode 100644 src/pages-erp/purchase-in/scan-in/index.vue create mode 100644 src/pages-erp/sale-out/detail/index.vue create mode 100644 src/pages-erp/sale-out/form/index.vue create mode 100644 src/pages-erp/sale-out/index.vue create mode 100644 src/pages-erp/sale-out/scan-out/components/recent-scan-list.vue create mode 100644 src/pages-erp/sale-out/scan-out/components/scan-context-bar.vue create mode 100644 src/pages-erp/sale-out/scan-out/components/scan-feedback-bar.vue create mode 100644 src/pages-erp/sale-out/scan-out/index.vue diff --git a/.husky/pre-commit b/.husky/pre-commit deleted file mode 100644 index c3ec64b..0000000 --- a/.husky/pre-commit +++ /dev/null @@ -1 +0,0 @@ -npx lint-staged --allow-empty \ No newline at end of file diff --git a/src/api/erp/location/index.ts b/src/api/erp/location/index.ts new file mode 100644 index 0000000..0bbca14 --- /dev/null +++ b/src/api/erp/location/index.ts @@ -0,0 +1,14 @@ +import { http } from '@/http/http' + +/** 按库位码查询的结果 */ +export interface LocationByCodeVO { + warehouseId: number + warehouseName: string + locationCode: string + enableLocation?: boolean +} + +/** 按库位码查询库位信息 */ +export function getLocationByCode(locationCode: string) { + return http.get('/erp/location/get-by-code', { locationCode }) +} diff --git a/src/api/erp/purchase-in-scan-record/index.ts b/src/api/erp/purchase-in-scan-record/index.ts new file mode 100644 index 0000000..3cb64a8 --- /dev/null +++ b/src/api/erp/purchase-in-scan-record/index.ts @@ -0,0 +1,42 @@ +import { http } from '@/http/http' + +/** 采购入库扫码记录 */ +export interface PurchaseInScanRecord { + id?: number + purchaseInId: number + productId?: number + productName?: string + productSpec?: string + productBarCode?: string + productUnit?: string + warehouseId?: number + warehouseName?: string + locationCode?: string + batchNo?: string + scanCount?: number + scanTime?: string + operatorId?: number + operatorName?: string + remark?: string + createTime?: string +} + +/** 创建扫码记录 */ +export function createPurchaseInScanRecord(data: PurchaseInScanRecord) { + return http.post('/erp/purchase-in-scan-record/create', data) +} + +/** 批量创建扫码记录 */ +export function createPurchaseInScanRecordBatch(data: PurchaseInScanRecord[]) { + return http.post('/erp/purchase-in-scan-record/create-batch', data) +} + +/** 删除扫码记录 */ +export function deletePurchaseInScanRecord(id: number) { + return http.delete(`/erp/purchase-in-scan-record/delete?id=${id}`) +} + +/** 获取入库单的所有扫码记录 */ +export function getPurchaseInScanRecordList(purchaseInId: number) { + return http.get(`/erp/purchase-in-scan-record/list?purchaseInId=${purchaseInId}`) +} diff --git a/src/api/erp/sale-out-scan-record/index.ts b/src/api/erp/sale-out-scan-record/index.ts new file mode 100644 index 0000000..ffb61eb --- /dev/null +++ b/src/api/erp/sale-out-scan-record/index.ts @@ -0,0 +1,42 @@ +import { http } from '@/http/http' + +/** 销售出库扫码记录 */ +export interface SaleOutScanRecord { + id?: number + saleOutId: number + productId?: number + productName?: string + productSpec?: string + productBarCode?: string + productUnit?: string + warehouseId?: number + warehouseName?: string + locationCode?: string + batchNo?: string + scanCount?: number + scanTime?: string + operatorId?: number + operatorName?: string + remark?: string + createTime?: string +} + +/** 创建扫码记录 */ +export function createSaleOutScanRecord(data: SaleOutScanRecord) { + return http.post('/erp/sale-out-scan-record/create', data) +} + +/** 批量创建扫码记录 */ +export function createSaleOutScanRecordBatch(data: SaleOutScanRecord[]) { + return http.post('/erp/sale-out-scan-record/create-batch', data) +} + +/** 删除扫码记录 */ +export function deleteSaleOutScanRecord(id: number) { + return http.delete(`/erp/sale-out-scan-record/delete?id=${id}`) +} + +/** 获取出库单的所有扫码记录 */ +export function getSaleOutScanRecordList(saleOutId: number) { + return http.get(`/erp/sale-out-scan-record/list?saleOutId=${saleOutId}`) +} diff --git a/src/api/erp/sale-out/index.ts b/src/api/erp/sale-out/index.ts new file mode 100644 index 0000000..8f10487 --- /dev/null +++ b/src/api/erp/sale-out/index.ts @@ -0,0 +1,91 @@ +import type { PageParam, PageResult } from '@/http/types' +import { http } from '@/http/http' + +/** 销售出库项 */ +export interface SaleOutItem { + id?: number + outId?: number + orderItemId?: number + productId?: number + productName?: string + productBarCode?: string + productSpec?: string + productUnitName?: string + warehouseId?: number + warehouseName?: string + locationCode?: string + batchNo?: string + count?: number + productPrice?: number + taxPercent?: number + taxPrice?: number + totalPrice?: number + remark?: string + productUnitId?: number + stockUnitPrice?: number + stockValue?: number + grossProfit?: number +} + +/** 销售出库信息 */ +export interface SaleOut { + id?: number + no?: string + status?: number + customerId?: number + customerName?: string + accountId?: number + accountName?: string + saleUserId?: number + saleUserName?: string + outTime?: string + orderId?: number + orderNo?: string + deliveryNoticeId?: number + deliveryNoticeNo?: string + totalCount?: number + totalPrice?: number + receiptPrice?: number + totalProductPrice?: number + totalTaxPrice?: number + discountPercent?: number + discountPrice?: number + otherPrice?: number + fileUrl?: string + remark?: string + creator?: string + creatorName?: string + createTime?: string + items?: SaleOutItem[] + productNames?: string +} + +/** 获取销售出库分页列表 */ +export function getSaleOutPage(params: PageParam) { + return http.get>('/erp/sale-out/page', params) +} + +/** 获取销售出库详情 */ +export function getSaleOut(id: number) { + return http.get(`/erp/sale-out/get?id=${id}`) +} + +/** 创建销售出库 */ +export function createSaleOut(data: SaleOut) { + return http.post('/erp/sale-out/create', data) +} + +/** 更新销售出库 */ +export function updateSaleOut(data: SaleOut) { + return http.put('/erp/sale-out/update', data) +} + +/** 更新销售出库状态 */ +export function updateSaleOutStatus(id: number, status: number) { + return http.put(`/erp/sale-out/update-status?id=${id}&status=${status}`) +} + +/** 删除销售出库 */ +export function deleteSaleOut(ids: number[]) { + return http.delete(`/erp/sale-out/delete?ids=${ids.join(',')}`) +} diff --git a/src/api/erp/warehouse/index.ts b/src/api/erp/warehouse/index.ts index ef59467..038653a 100644 --- a/src/api/erp/warehouse/index.ts +++ b/src/api/erp/warehouse/index.ts @@ -13,6 +13,9 @@ export interface Warehouse { truckagePrice?: number status?: number defaultStatus?: boolean + enableLocation?: boolean + roomNoMax?: number + locationCapacity?: number createTime?: number } diff --git a/src/pages-erp/purchase-in/form/index.vue b/src/pages-erp/purchase-in/form/index.vue index e3af801..6bba854 100644 --- a/src/pages-erp/purchase-in/form/index.vue +++ b/src/pages-erp/purchase-in/form/index.vue @@ -376,7 +376,7 @@ const formData = ref({ no: undefined, supplierId: undefined, accountId: undefined, - inTime: undefined, + inTime: new Date().getTime(), orderId: undefined, orderNo: undefined, discountPercent: 0, diff --git a/src/pages-erp/purchase-in/index.vue b/src/pages-erp/purchase-in/index.vue index 391b003..792dd89 100644 --- a/src/pages-erp/purchase-in/index.vue +++ b/src/pages-erp/purchase-in/index.vue @@ -126,6 +126,12 @@ > 修改 + + 扫码入库 + + + + 暂无扫码记录,开始扫码入库 + + + + + {{ record.productName || '-' }} + 删除 + + + + 条码:{{ record.productBarCode || '-' }} + 规格:{{ record.productSpec || '-' }} + + + 仓库:{{ record.warehouseName || '-' }} + 单位:{{ record.productUnit || '-' }} + + + 库位:{{ record.locationCode || '-' }} + 批次:{{ record.batchNo || '-' }} + + + {{ formatTime(record.scanTime) }} + {{ record.scanCount }} + + + + + + + + diff --git a/src/pages-erp/purchase-in/scan-in/components/scan-context-bar.vue b/src/pages-erp/purchase-in/scan-in/components/scan-context-bar.vue new file mode 100644 index 0000000..ea6d1b4 --- /dev/null +++ b/src/pages-erp/purchase-in/scan-in/components/scan-context-bar.vue @@ -0,0 +1,69 @@ + + + + + diff --git a/src/pages-erp/purchase-in/scan-in/components/scan-feedback-bar.vue b/src/pages-erp/purchase-in/scan-in/components/scan-feedback-bar.vue new file mode 100644 index 0000000..ff15817 --- /dev/null +++ b/src/pages-erp/purchase-in/scan-in/components/scan-feedback-bar.vue @@ -0,0 +1,43 @@ + + + + + diff --git a/src/pages-erp/purchase-in/scan-in/index.vue b/src/pages-erp/purchase-in/scan-in/index.vue new file mode 100644 index 0000000..459a7c8 --- /dev/null +++ b/src/pages-erp/purchase-in/scan-in/index.vue @@ -0,0 +1,929 @@ + + + + + diff --git a/src/pages-erp/sale-out/detail/index.vue b/src/pages-erp/sale-out/detail/index.vue new file mode 100644 index 0000000..3999026 --- /dev/null +++ b/src/pages-erp/sale-out/detail/index.vue @@ -0,0 +1,57 @@ + + + + + diff --git a/src/pages-erp/sale-out/form/index.vue b/src/pages-erp/sale-out/form/index.vue new file mode 100644 index 0000000..f89a604 --- /dev/null +++ b/src/pages-erp/sale-out/form/index.vue @@ -0,0 +1,26 @@ + + + + + diff --git a/src/pages-erp/sale-out/index.vue b/src/pages-erp/sale-out/index.vue new file mode 100644 index 0000000..0224d8e --- /dev/null +++ b/src/pages-erp/sale-out/index.vue @@ -0,0 +1,408 @@ + + + + + diff --git a/src/pages-erp/sale-out/scan-out/components/recent-scan-list.vue b/src/pages-erp/sale-out/scan-out/components/recent-scan-list.vue new file mode 100644 index 0000000..20b1c9b --- /dev/null +++ b/src/pages-erp/sale-out/scan-out/components/recent-scan-list.vue @@ -0,0 +1,136 @@ + + + + + diff --git a/src/pages-erp/sale-out/scan-out/components/scan-context-bar.vue b/src/pages-erp/sale-out/scan-out/components/scan-context-bar.vue new file mode 100644 index 0000000..c3120cf --- /dev/null +++ b/src/pages-erp/sale-out/scan-out/components/scan-context-bar.vue @@ -0,0 +1,69 @@ + + + + + diff --git a/src/pages-erp/sale-out/scan-out/components/scan-feedback-bar.vue b/src/pages-erp/sale-out/scan-out/components/scan-feedback-bar.vue new file mode 100644 index 0000000..ff15817 --- /dev/null +++ b/src/pages-erp/sale-out/scan-out/components/scan-feedback-bar.vue @@ -0,0 +1,43 @@ + + + + + diff --git a/src/pages-erp/sale-out/scan-out/index.vue b/src/pages-erp/sale-out/scan-out/index.vue new file mode 100644 index 0000000..a478890 --- /dev/null +++ b/src/pages-erp/sale-out/scan-out/index.vue @@ -0,0 +1,928 @@ + + + + + diff --git a/src/pages/index/index.ts b/src/pages/index/index.ts index 6c53822..e446daf 100644 --- a/src/pages/index/index.ts +++ b/src/pages/index/index.ts @@ -54,6 +54,14 @@ const menuGroupsData: MenuGroup[] = [ iconColor: '#52c41a', permission: 'erp:purchase-in:query', }, + { + key: 'purchaseInScan', + name: '扫码入库', + icon: 'scan', + url: '/pages-erp/purchase-in/scan-in/index', + iconColor: '#13c2c2', + permission: 'erp:purchase-in:query', + }, { key: 'purchaseReturn', name: '采购退货', @@ -110,6 +118,28 @@ const menuGroupsData: MenuGroup[] = [ // }, // ], // }, + { + key: 'sale', + name: '销售管理', + menus: [ + { + key: 'saleOut', + name: '销售出库', + icon: 'arrow-right', + url: '/pages-erp/sale-out/index', + iconColor: '#f5222d', + permission: 'erp:sale-out:query', + }, + { + key: 'saleOutScan', + name: '扫码出库', + icon: 'scan', + url: '/pages-erp/sale-out/scan-out/index', + iconColor: '#cf1322', + permission: 'erp:sale-out:query', + }, + ], + }, { key: 'stock', name: '库存管理',