From 253cbdb5fb446c0648f84c8793253b526ec550ea Mon Sep 17 00:00:00 2001 From: chenhao Date: Tue, 18 Nov 2025 11:42:47 +0800 Subject: [PATCH] =?UTF-8?q?feat(inventory):=20=E6=96=B0=E5=A2=9E=E5=8F=91?= =?UTF-8?q?=E8=B4=A7=E8=AE=B0=E5=BD=95=E5=92=8C=E4=BA=A7=E5=93=81=E5=BA=93?= =?UTF-8?q?=E5=AD=98=E7=AE=A1=E7=90=86=E5=8A=9F=E8=83=BD-=20=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E5=8F=91=E8=B4=A7=E8=AE=B0=E5=BD=95=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=EF=BC=8C=E6=94=AF=E6=8C=81=E6=9F=A5=E8=AF=A2=E3=80=81=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E3=80=81=E4=BF=AE=E6=94=B9=E3=80=81=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E3=80=81=E6=92=A4=E5=9B=9E=E5=8F=8A=E5=AF=BC=E5=87=BA=E5=8A=9F?= =?UTF-8?q?=E8=83=BD-=20=E6=96=B0=E5=A2=9E=E4=BA=A7=E5=93=81=E5=BA=93?= =?UTF-8?q?=E5=AD=98=E7=AE=A1=E7=90=86=E9=A1=B5=E9=9D=A2=EF=BC=8C=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E5=BA=93=E5=AD=98=E6=9F=A5=E8=AF=A2=E3=80=81=E5=85=A5?= =?UTF-8?q?=E5=BA=93=E5=87=BA=E5=BA=93=E8=AE=B0=E5=BD=95=E6=9F=A5=E7=9C=8B?= =?UTF-8?q?-=20=E6=96=B0=E5=A2=9E=E5=8F=91=E8=B4=A7=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E8=AF=A6=E6=83=85=E6=8A=BD=E5=B1=89=E7=BB=84=E4=BB=B6=EF=BC=8C?= =?UTF-8?q?=E5=B1=95=E7=A4=BA=E5=8F=91=E8=B4=A7=E5=8D=95=E8=AF=A6=E6=83=85?= =?UTF-8?q?=E5=8F=8A=E5=85=B3=E8=81=94SN=E7=A0=81=E5=88=97=E8=A1=A8=20-=20?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=AE=A2=E5=8D=95=E6=89=A7=E8=A1=8C=E8=B7=9F?= =?UTF-8?q?=E8=B8=AA=E8=B7=AF=E7=94=B1=E5=8F=8A=E6=9D=83=E9=99=90=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=20-=20=E4=BC=98=E5=8C=96=20GenerateDeliveryForm=20?= =?UTF-8?q?=E7=BB=84=E4=BB=B6=E5=AF=BC=E5=85=A5=E9=80=BB=E8=BE=91=E5=8F=8A?= =?UTF-8?q?=E9=80=89=E6=8B=A9=E6=8E=A7=E5=88=B6=20-=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E4=BA=A7=E5=93=81=E5=BA=93=E5=AD=98=E5=88=97=E8=A1=A8=E5=AE=9E?= =?UTF-8?q?=E6=97=B6=E5=BA=93=E5=AD=98=E9=A2=9C=E8=89=B2=E6=A0=87=E8=AF=86?= =?UTF-8?q?=E5=8F=8A=E6=8E=92=E5=BA=8F=E5=8A=9F=E8=83=BD-=20=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E5=85=A5=E5=BA=93=E8=AE=B0=E5=BD=95=E5=92=8C=E5=87=BA?= =?UTF-8?q?=E5=BA=93=E8=AE=B0=E5=BD=95=E5=BC=B9=E7=AA=97=E5=B1=95=E7=A4=BA?= =?UTF-8?q?=E5=8A=9F=E8=83=BD-=20=E5=AE=8C=E5=96=84=E5=BA=93=E5=AD=98?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E7=9B=B8=E5=85=B3API=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E5=B0=81=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- oms_web/oms_vue/src/api/base/warehouse.js | 9 + oms_web/oms_vue/src/api/inventory/delivery.js | 95 ++++ .../oms_vue/src/api/inventory/execution.js | 107 ++++ oms_web/oms_vue/src/api/inventory/info.js | 87 ++++ oms_web/oms_vue/src/api/inventory/inner.js | 74 +++ oms_web/oms_vue/src/api/inventory/outer.js | 85 ++++ oms_web/oms_vue/src/router/index.js | 14 + .../src/views/inventory/delivery/Detail.vue | 212 ++++++++ .../src/views/inventory/delivery/index.vue | 288 +++++++++++ .../src/views/inventory/info/index.vue | 459 ++++++++++++++++++ .../src/views/inventory/info/innerLog.vue | 83 ++++ .../src/views/inventory/info/outerLog.vue | 92 ++++ .../outer/components/GenerateDeliveryForm.vue | 12 +- .../inventory/outer/components/OuterForm.vue | 26 +- .../src/views/inventory/outer/index.vue | 2 +- .../controller/vue/VueDeliveryController.java | 148 ++++++ .../vue/VueInventoryInfoController.java | 196 ++++++++ .../vue/VueInventoryOuterController.java | 33 +- 18 files changed, 2004 insertions(+), 18 deletions(-) create mode 100644 oms_web/oms_vue/src/api/base/warehouse.js create mode 100644 oms_web/oms_vue/src/api/inventory/delivery.js create mode 100644 oms_web/oms_vue/src/api/inventory/execution.js create mode 100644 oms_web/oms_vue/src/api/inventory/info.js create mode 100644 oms_web/oms_vue/src/api/inventory/inner.js create mode 100644 oms_web/oms_vue/src/api/inventory/outer.js create mode 100644 oms_web/oms_vue/src/views/inventory/delivery/Detail.vue create mode 100644 oms_web/oms_vue/src/views/inventory/delivery/index.vue create mode 100644 oms_web/oms_vue/src/views/inventory/info/index.vue create mode 100644 oms_web/oms_vue/src/views/inventory/info/innerLog.vue create mode 100644 oms_web/oms_vue/src/views/inventory/info/outerLog.vue create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/controller/vue/VueDeliveryController.java create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/controller/vue/VueInventoryInfoController.java diff --git a/oms_web/oms_vue/src/api/base/warehouse.js b/oms_web/oms_vue/src/api/base/warehouse.js new file mode 100644 index 00000000..e2348023 --- /dev/null +++ b/oms_web/oms_vue/src/api/base/warehouse.js @@ -0,0 +1,9 @@ +import request from '@/utils/request' + +// 获取所有仓库列表 +export function listAllWarehouse() { + return request({ + url: '/warehouse/info/vue/listAll', + method: 'get' + }) +} diff --git a/oms_web/oms_vue/src/api/inventory/delivery.js b/oms_web/oms_vue/src/api/inventory/delivery.js new file mode 100644 index 00000000..b43ced26 --- /dev/null +++ b/oms_web/oms_vue/src/api/inventory/delivery.js @@ -0,0 +1,95 @@ +import request from '@/utils/request' + +// 查询发货记录列表 +export function listDelivery(query) { + return request({ + url: '/inventory/delivery/vue/list', + method: 'get', + params: query + }) +} + +// 查询发货记录详细 +export function getDelivery(id) { + return request({ + url: '/inventory/delivery/vue/' + id, + method: 'get' + }) +} + +// 新增发货记录 +export function addDelivery(data) { + return request({ + url: '/inventory/delivery/vue', + method: 'post', + data: data + }) +} + +// 修改发货记录 +export function updateDelivery(data) { + return request({ + url: '/inventory/delivery/vue', + method: 'put', + data: data + }) +} + +// 删除发货记录 +export function delDelivery(id) { + return request({ + url: '/inventory/delivery/vue/' + id, + method: 'delete' + }) +} + +// 撤回发货记录 +export function recallDelivery(id) { + return request({ + url: '/inventory/delivery/vue/recall', + method: 'post', + data: {id} + }) +} + +// 导出采购合同 +export function exportDelivery(query) { + return request({ + url: '/inventory/delivery/vue/export', + method: 'post', + data: query + }) +} + +// 导出采购合同详情 +export function exportDeliveryDetail(id) { + return request({ + url: '/inventory/delivery/vue/detail/export', + method: 'post', + data: {id} + }) +} + +// 查询关联的SN码列表 +export function listProductSn(query) { + return request({ + url: '/inventory/info/vue/list', + method: 'get', + params: query + }) +} + +export function removeDelivery(id) { + return request({ + url: '/inventory/delivery/vue/' + id, + method: 'delete' + }) +} + +export function updateDeliveryStatus(data) { + return request({ + url: '/inventory/delivery/vue/status' , + method: 'put', + data: data + }) +} diff --git a/oms_web/oms_vue/src/api/inventory/execution.js b/oms_web/oms_vue/src/api/inventory/execution.js new file mode 100644 index 00000000..632dc1a5 --- /dev/null +++ b/oms_web/oms_vue/src/api/inventory/execution.js @@ -0,0 +1,107 @@ +import request from '@/utils/request' + +// 查询订单执行列表 +export function listExecution(query) { + return request({ + url: '/inventory/execution/vue/list', + method: 'get', + params: query + }) +} + +// 查询订单执行详细 +export function getExecution(id) { + return request({ + url: '/inventory/execution/vue/' + id, + method: 'get' + }) +} + +// 新增订单执行 +export function addExecution(data) { + return request({ + url: '/inventory/execution/vue', + method: 'post', + data: data + }) +} + +// 修改订单执行 +export function updateExecution(data) { + return request({ + url: '/inventory/execution/vue', + method: 'put', + data: data + }) +} + +// 删除订单执行 +export function delExecution(id) { + return request({ + url: '/inventory/execution/vue/' + id, + method: 'delete' + }) +} + +// 订单执行签收 +export function signExecution(data) { + return request({ + url: '/inventory/execution/vue/sign', + method: 'post', + data: data + }) +} + +// 下载签收文件 +export function downloadSignFile(orderId, versionCode) { + return request({ + url: `/inventory/execution/vue/sign/download`, + method: 'get', + params: { orderId, versionCode }, + responseType: 'blob' + }) +} + +// 撤单 +export function recallExecution(id) { + return request({ + url: `/inventory/execution/vue/recall`, + method: 'post', + data: { id } + }) +} + +// 查询出库预览信息 +export function getCheckOutPreview(data) { + return request({ + url: '/inventory/execution/vue/checkOut/preview', + method: 'post', + data: data + }) +} + +// 新增出库单 +export function addOuter(data) { + return request({ + url: '/inventory/outer/vue', + method: 'post', + data: data + }) +} + +// 撤销出库单 +export function removeOuter(id) { + return request({ + url: '/inventory/outer/vue/' + id, + method: 'delete' + }) +} + +// 确认出库 +export function confirmOuterStatus(id, orderCode) { + return request({ + url: '/inventory/outer/vue/status', + method: 'post', + data: { id, outerStatus: '2', orderCode } + }) +} diff --git a/oms_web/oms_vue/src/api/inventory/info.js b/oms_web/oms_vue/src/api/inventory/info.js new file mode 100644 index 00000000..e60d5cf5 --- /dev/null +++ b/oms_web/oms_vue/src/api/inventory/info.js @@ -0,0 +1,87 @@ +import request from '@/utils/request' + +// 查询产品库存列表 +export function listInfo(query) { + return request({ + url: '/inventory/info/vue/group/list', + method: 'get', + params: query + }) +} + +// 查询产品库存详细 +export function getInfo(id) { + return request({ + url: '/inventory/info/vue/' + id, + method: 'get' + }) +} + +// 新增产品库存 +export function addInfo(data) { + return request({ + url: '/inventory/info/vue', + method: 'post', + data: data + }) +} + +// 修改产品库存 +export function updateInfo(data) { + return request({ + url: '/inventory/info/vue', + method: 'put', + data: data + }) +} + +// 删除产品库存 +export function delInfo(id) { + return request({ + url: '/inventory/info/vue/' + id, + method: 'delete' + }) +} + +// 导出产品库存 +export function exportInfo(query) { + return request({ + url: '/inventory/info/vue/export', + method: 'post', + data: query + }) +} + +// 获取所有制造商列表 +export function listAllVendors() { + return request({ + url: '/inventory/info/vue/listAllVendors', + method: 'get' + }) +} + +// 获取所有正常状态的仓库列表 +export function listAllWarehouses() { + return request({ + url: '/inventory/info/vue/listAllWarehouses', + method: 'get' + }) +} + +// 查询入库日志 +export function getInnerLog(query) { + return request({ + url: '/inventory/info/vue/inner-log', + method: 'get', + params: query + }) +} + +// 查询出库日志 +export function getOuterLog(query) { + return request({ + url: '/inventory/info/vue/outer-log', + method: 'get', + params: query + }) +} diff --git a/oms_web/oms_vue/src/api/inventory/inner.js b/oms_web/oms_vue/src/api/inventory/inner.js new file mode 100644 index 00000000..bb60542b --- /dev/null +++ b/oms_web/oms_vue/src/api/inventory/inner.js @@ -0,0 +1,74 @@ +import request from '@/utils/request' + +const VUE_APP_API_URL = '/inventory/inner/vue'; + +// 查询入库单信息列表 +export function listInner(query) { + return request({ + url: `${VUE_APP_API_URL}/list`, + method: 'get', + params: query + }) +} + +// 查询入库单信息详细 +export function getInner(id) { + return request({ + url: `${VUE_APP_API_URL}/${id}`, + method: 'get' + }) +} + +// 新增入库单信息 +export function addInner(data) { + return request({ + url: VUE_APP_API_URL, + method: 'post', + data: data + }) +} + +// 修改入库单信息 +export function updateInner(data) { + return request({ + url: VUE_APP_API_URL, + method: 'put', + data: data + }) +} + +// 删除入库单信息 +export function delInner(id) { + return request({ + url: `${VUE_APP_API_URL}/${id}`, + method: 'delete' + }) +} + +// 导出入库单信息 +export function exportInner(query) { + return request({ + url: `${VUE_APP_API_URL}/export`, + method: 'post', + data: query + }) +} + +// 导入产品数据 +export function importProductData(data) { + return request({ + url: `${VUE_APP_API_URL}/importData`, + method: 'post', + data: data + // Content-Type 会被自动设置为 multipart/form-data + }) +} + +// 下载导入模板 +export function downloadTemplate() { + return request({ + url: `${VUE_APP_API_URL}/export/template`, + method: 'post', + responseType: 'blob' + }) +} diff --git a/oms_web/oms_vue/src/api/inventory/outer.js b/oms_web/oms_vue/src/api/inventory/outer.js new file mode 100644 index 00000000..e3101715 --- /dev/null +++ b/oms_web/oms_vue/src/api/inventory/outer.js @@ -0,0 +1,85 @@ +import request from '@/utils/request' + +// 查询出库单列表 +export function listOuter(query) { + return request({ + url: '/inventory/outer/vue', + method: 'get', + params: query + }) +} + +// 查询出库单详细 +export function getOuter(id) { + return request({ + url: '/inventory/outer/vue/' + id, + method: 'get' + }) +} + +// 新增出库单 +export function addOuter(data) { + return request({ + url: '/inventory/outer/vue', + method: 'post', + data: data + }) +} + +// 修改出库单 +export function updateOuter(data) { + return request({ + url: '/inventory/outer/vue', + method: 'put', + data: data + }) +} + +// 删除出库单 +export function delOuter(id) { + return request({ + url: '/inventory/outer/vue/' + id, + method: 'delete' + }) +} + +// 导出出库单 +export function exportOuter(query) { + return request({ + url: '/inventory/outer/vue/export', + method: 'post', + params: query + }) +} + +// 修改出库单状态 +export function changeOuterStatus(id, outerStatus, orderCode) { + const data = { + id, + outerStatus, + orderCode + } + return request({ + url: '/inventory/outer/vue/status', + method: 'post', + data: data + }) +} + +// 查询出库单详细(用于刷新产品和发货列表) +export function queryInfo(id) { + return request({ + url: '/inventory/outer/vue/' + id, + method: 'get' + }) +} +export function importSnData(formData) { + return request({ + url: '/inventory/outer/vue/importData', + method: 'post', + headers: { + 'Content-Type': 'multipart/form-data' + }, + data: formData + }) +} diff --git a/oms_web/oms_vue/src/router/index.js b/oms_web/oms_vue/src/router/index.js index caa0acd2..c9027ea5 100644 --- a/oms_web/oms_vue/src/router/index.js +++ b/oms_web/oms_vue/src/router/index.js @@ -121,6 +121,20 @@ export const dynamicRoutes = [ name: 'Execution', meta: { title: '订单执行跟踪', icon: 'execution' }, permissions: ['inventory:execution:list'] + }, + { + path: 'info', + component: () => import('@/views/inventory/info/index'), + name: 'InventoryInfo', + meta: { title: '产品库存', icon: 'product' }, + permissions: ['inventory:info:list'] + }, + { + path: 'delivery', + component: () => import('@/views/inventory/delivery/index'), + name: 'Delivery', + meta: { title: '发货记录', icon: 'logistics' }, + permissions: ['inventory:delivery:list'] } ] }, diff --git a/oms_web/oms_vue/src/views/inventory/delivery/Detail.vue b/oms_web/oms_vue/src/views/inventory/delivery/Detail.vue new file mode 100644 index 00000000..475334b8 --- /dev/null +++ b/oms_web/oms_vue/src/views/inventory/delivery/Detail.vue @@ -0,0 +1,212 @@ + + + diff --git a/oms_web/oms_vue/src/views/inventory/delivery/index.vue b/oms_web/oms_vue/src/views/inventory/delivery/index.vue new file mode 100644 index 00000000..6043e942 --- /dev/null +++ b/oms_web/oms_vue/src/views/inventory/delivery/index.vue @@ -0,0 +1,288 @@ + + + diff --git a/oms_web/oms_vue/src/views/inventory/info/index.vue b/oms_web/oms_vue/src/views/inventory/info/index.vue new file mode 100644 index 00000000..5f0044e0 --- /dev/null +++ b/oms_web/oms_vue/src/views/inventory/info/index.vue @@ -0,0 +1,459 @@ + + + + + diff --git a/oms_web/oms_vue/src/views/inventory/info/innerLog.vue b/oms_web/oms_vue/src/views/inventory/info/innerLog.vue new file mode 100644 index 00000000..f8ce76a0 --- /dev/null +++ b/oms_web/oms_vue/src/views/inventory/info/innerLog.vue @@ -0,0 +1,83 @@ + + + diff --git a/oms_web/oms_vue/src/views/inventory/info/outerLog.vue b/oms_web/oms_vue/src/views/inventory/info/outerLog.vue new file mode 100644 index 00000000..19b96a5e --- /dev/null +++ b/oms_web/oms_vue/src/views/inventory/info/outerLog.vue @@ -0,0 +1,92 @@ + + + diff --git a/oms_web/oms_vue/src/views/inventory/outer/components/GenerateDeliveryForm.vue b/oms_web/oms_vue/src/views/inventory/outer/components/GenerateDeliveryForm.vue index 697f1cc1..b04e7b73 100644 --- a/oms_web/oms_vue/src/views/inventory/outer/components/GenerateDeliveryForm.vue +++ b/oms_web/oms_vue/src/views/inventory/outer/components/GenerateDeliveryForm.vue @@ -79,8 +79,8 @@