From 1850ac640e34b37a273780ce8675928d0c998763 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=89=AB=E5=9C=B0=E5=83=A7?= <357099073@qq.com> Date: Mon, 19 Oct 2026 01:13:17 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 +- backend/src/api/erpDocument.js | 96 + backend/src/api/erpFinance.js | 103 + backend/src/api/erpProduct.js | 74 + backend/src/api/erpReport.js | 63 + backend/src/api/erpStock.js | 46 + backend/src/api/erpWarehouse.js | 50 + backend/src/views/apps/erp/basic/product.vue | 658 ++++ .../src/views/apps/erp/basic/warehouse.vue | 247 ++ .../apps/erp/customer/components/edit.vue | 39 + .../src/views/apps/erp/dashboard/index.vue | 146 +- .../apps/erp/document/DocDetailDrawer.vue | 185 ++ .../src/views/apps/erp/document/DocEditor.vue | 719 ++++ .../views/apps/erp/document/DocListPage.vue | 432 +++ .../views/apps/erp/document/ProductSelect.vue | 93 + backend/src/views/apps/erp/document/dict.js | 104 + .../erp/finance/components/BillListPage.vue | 413 +++ .../src/views/apps/erp/finance/payable.vue | 19 + .../src/views/apps/erp/finance/payment.vue | 644 ++++ .../src/views/apps/erp/finance/receivable.vue | 19 + .../src/views/apps/erp/purchase/inbound.vue | 7 + backend/src/views/apps/erp/purchase/order.vue | 7 + .../src/views/apps/erp/purchase/return.vue | 7 + .../views/apps/erp/report/SummaryTable.vue | 69 + backend/src/views/apps/erp/report/index.vue | 795 +++++ backend/src/views/apps/erp/sales/order.vue | 7 + backend/src/views/apps/erp/sales/outbound.vue | 7 + backend/src/views/apps/erp/sales/return.vue | 7 + backend/src/views/apps/erp/stock/inbound.vue | 7 + backend/src/views/apps/erp/stock/outbound.vue | 7 + backend/src/views/apps/erp/stock/query.vue | 484 +++ backend/src/views/apps/erp/stock/taking.vue | 7 + backend/src/views/apps/erp/stock/transfer.vue | 7 + backend/src/views/apps/erp/stock/warning.vue | 368 +++ .../apps/erp/supplier/components/edit.vue | 23 + backend/src/views/apps/erp/system/index.vue | 489 +++ .../components/ProgressTimeline.vue | 4 +- .../basicSettings/roles/components/detail.vue | 16 + .../src/views/basicSettings/roles/index.vue | 27 +- go/controllers/app_activity.go | 24 +- go/controllers/app_aggregate.go | 18 +- go/controllers/app_approval.go | 4 +- go/controllers/app_auth.go | 21 +- go/controllers/app_contact.go | 10 +- go/controllers/app_employee_file.go | 12 +- go/controllers/app_erp.go | 157 + go/controllers/app_erp_archive.go | 115 + go/controllers/app_erp_document.go | 183 ++ go/controllers/app_erp_finance.go | 230 ++ go/controllers/app_erp_report.go | 89 + go/controllers/app_erp_stock.go | 110 + go/controllers/app_notebook.go | 31 +- go/controllers/app_oa.go | 41 +- go/controllers/app_oa_expense.go | 46 +- go/controllers/app_oa_schedule.go | 25 +- go/controllers/app_reminder.go | 31 +- go/controllers/auth/oidc.go | 4 +- go/controllers/backend_admin_user.go | 120 +- go/controllers/backend_ai_chat.go | 30 +- go/controllers/backend_ai_chat_preset.go | 33 +- go/controllers/backend_ai_chat_session.go | 30 +- go/controllers/backend_ai_provider.go | 33 +- go/controllers/backend_ai_smart_generate.go | 21 +- go/controllers/backend_approval.go | 25 +- go/controllers/backend_approval_center.go | 13 +- go/controllers/backend_approval_runtime.go | 16 +- go/controllers/backend_article.go | 83 +- go/controllers/backend_auth.go | 870 +++-- go/controllers/backend_contact.go | 40 +- go/controllers/backend_crm_bidding_bid.go | 31 +- go/controllers/backend_crm_bidding_more.go | 91 +- .../backend_crm_bidding_reminder.go | 4 +- go/controllers/backend_crm_bidding_sub.go | 64 +- go/controllers/backend_crm_bidding_tender.go | 22 +- go/controllers/backend_crm_business.go | 22 +- go/controllers/backend_crm_clue.go | 22 +- go/controllers/backend_crm_contact.go | 30 +- go/controllers/backend_crm_contract.go | 22 +- go/controllers/backend_crm_dashboard.go | 4 +- go/controllers/backend_crm_payback.go | 34 +- go/controllers/backend_crm_pipeline_common.go | 20 +- go/controllers/backend_crm_pool.go | 30 +- go/controllers/backend_crm_product.go | 19 +- .../backend_crm_product_category.go | 16 +- go/controllers/backend_crm_project.go | 37 +- go/controllers/backend_crm_support.go | 37 +- go/controllers/backend_crm_unit.go | 22 +- go/controllers/backend_dict.go | 54 +- go/controllers/backend_domain.go | 1330 ++++---- go/controllers/backend_employee_file.go | 51 +- go/controllers/backend_erp_account_set.go | 36 +- go/controllers/backend_erp_base.go | 240 ++ go/controllers/backend_erp_company_contact.go | 30 +- go/controllers/backend_erp_customer.go | 45 +- go/controllers/backend_erp_document.go | 468 +++ go/controllers/backend_erp_finance.go | 265 ++ go/controllers/backend_erp_normal_setting.go | 119 +- go/controllers/backend_erp_product.go | 534 +++ go/controllers/backend_erp_report.go | 344 ++ go/controllers/backend_erp_stock.go | 377 +++ go/controllers/backend_erp_supplier.go | 42 +- go/controllers/backend_erp_warehouse.go | 234 ++ go/controllers/backend_file.go | 81 +- go/controllers/backend_frontend_content.go | 46 +- go/controllers/backend_login_log.go | 30 +- go/controllers/backend_login_verify.go | 440 ++- go/controllers/backend_mcp_server.go | 45 +- go/controllers/backend_mcp_tool.go | 33 +- go/controllers/backend_menu.go | 1236 +++---- go/controllers/backend_menu_front.go | 22 +- go/controllers/backend_modules.go | 294 +- go/controllers/backend_notebook.go | 33 +- go/controllers/backend_notify_config.go | 25 +- go/controllers/backend_oa_compensation.go | 12 +- go/controllers/backend_oa_document.go | 48 +- go/controllers/backend_oa_notice.go | 42 +- go/controllers/backend_oa_schedule.go | 51 +- go/controllers/backend_operation_log.go | 34 +- go/controllers/backend_organization.go | 10 +- go/controllers/backend_payment.go | 28 +- go/controllers/backend_product.go | 25 +- go/controllers/backend_product_purchase.go | 43 +- go/controllers/backend_reimburse.go | 11 +- go/controllers/backend_reminder.go | 42 +- go/controllers/backend_role.go | 63 +- go/controllers/backend_site_settings.go | 91 +- go/controllers/backend_sitereminder.go | 290 +- go/controllers/backend_solution.go | 25 +- go/controllers/backend_tenant_apply.go | 28 +- go/controllers/backend_tenant_quota.go | 7 +- go/controllers/backend_theme.go | 13 +- go/controllers/backend_wechat_mp.go | 34 +- go/controllers/erp_archive_core.go | 300 ++ go/controllers/erp_document_core.go | 652 ++++ go/controllers/erp_finance_core.go | 529 +++ go/controllers/erp_report_core.go | 568 ++++ go/controllers/erp_stock_core.go | 371 +++ go/controllers/password_store.go | 13 +- go/controllers/platform_account_pool.go | 2904 ++++++++--------- go/controllers/platform_agent_api.go | 42 +- go/controllers/platform_approval.go | 25 +- go/controllers/platform_auth.go | 838 +++-- go/controllers/platform_auth_client.go | 31 +- go/controllers/platform_auth_config.go | 30 +- go/controllers/platform_auth_idp.go | 29 +- go/controllers/platform_bark.go | 419 ++- go/controllers/platform_commission.go | 25 +- go/controllers/platform_complaint.go | 716 ++-- go/controllers/platform_complaint_category.go | 396 ++- .../platform_cursor_activation_code.go | 1494 +++++---- go/controllers/platform_cursor_equipment.go | 2182 +++++++------ go/controllers/platform_dict.go | 54 +- go/controllers/platform_domain.go | 1423 ++++---- go/controllers/platform_email.go | 585 ++-- go/controllers/platform_file.go | 63 +- go/controllers/platform_home.go | 7 +- go/controllers/platform_login_log.go | 31 +- go/controllers/platform_modules.go | 908 +++--- go/controllers/platform_notebook.go | 33 +- go/controllers/platform_operation_log.go | 33 +- go/controllers/platform_payment.go | 48 +- go/controllers/platform_payment_reconcile.go | 13 +- .../platform_reimburse_expense_type.go | 31 +- go/controllers/platform_reminder.go | 42 +- go/controllers/platform_role.go | 416 +-- go/controllers/platform_site_settings.go | 520 ++- go/controllers/platform_sitereminder.go | 729 ++--- go/controllers/platform_sms.go | 986 +++--- go/controllers/platform_software_upgrade.go | 34 +- go/controllers/platform_template.go | 28 +- go/controllers/platform_tenant.go | 1194 +++---- go/controllers/platform_tenant_apply.go | 39 +- go/controllers/platform_tenant_package.go | 80 +- go/controllers/platform_website_common.go | 4 +- go/controllers/platform_website_setting.go | 7 +- go/controllers/platform_wechat_mini.go | 34 +- go/controllers/platform_wechat_mp.go | 66 +- go/controllers/qiniu_upload.go | 27 +- go/controllers/reimburse_approval_core.go | 151 + go/controllers/tenant_site.go | 8 +- go/docs/sql/alter_admin_role_lock.sql | 32 + go/docs/sql/erp_inventory_schema.sql | 289 ++ go/docs/sql/erp_menus.sql | 54 +- go/middleware/operationLog.go | 12 +- go/models/admin_role.go | 44 +- go/models/erp_inventory.go | 365 +++ go/models/init.go | 11 + go/models/tenant_crm_customer.go | 2 + go/models/tenant_crm_supplier.go | 1 + go/pkg/identity/identity.go | 172 + go/pkg/identity/identity_test.go | 114 + go/routers/api/api.go | 2 + go/routers/api/erp.go | 69 + go/routers/backend/backend.go | 55 + go/services/approval/engine.go | 12 +- go/services/approval/instance_query.go | 121 + go/services/erp/document.go | 496 +++ go/services/erp/finance.go | 300 ++ go/services/erp/settings.go | 225 ++ go/services/erp/stock.go | 189 ++ go/services/permission.go | 76 +- go/services/permission_test.go | 49 + milktea-site/preview-server.mjs | 24 + .../src/views/basicSettings/roles/index.vue | 23 + uniapp/api/erp.js | 784 +++++ uniapp/components/erp/ErpPicker.vue | 234 ++ uniapp/pages.json | 144 + uniapp/pages/erp/basic/product-detail.vue | 391 +++ uniapp/pages/erp/basic/product.vue | 368 +++ uniapp/pages/erp/basic/warehouse.vue | 235 ++ uniapp/pages/erp/dashboard/index.vue | 496 +++ uniapp/pages/erp/document/detail.vue | 580 ++++ uniapp/pages/erp/document/edit.vue | 1303 ++++++++ uniapp/pages/erp/document/index.vue | 476 +++ uniapp/pages/erp/finance/bill-detail.vue | 454 +++ uniapp/pages/erp/finance/bill.vue | 524 +++ uniapp/pages/erp/finance/fund-edit.vue | 782 +++++ uniapp/pages/erp/finance/fund.vue | 520 +++ uniapp/pages/erp/partner/detail.vue | 408 +++ uniapp/pages/erp/partner/index.vue | 320 ++ uniapp/pages/erp/report/index.vue | 1112 +++++++ uniapp/pages/erp/stock/batch.vue | 447 +++ uniapp/pages/erp/stock/index.vue | 454 +++ uniapp/pages/erp/stock/ledger.vue | 595 ++++ uniapp/pages/erp/stock/warning.vue | 458 +++ uniapp/utils/nav.js | 22 + 226 files changed, 37772 insertions(+), 12071 deletions(-) create mode 100644 backend/src/api/erpDocument.js create mode 100644 backend/src/api/erpFinance.js create mode 100644 backend/src/api/erpProduct.js create mode 100644 backend/src/api/erpReport.js create mode 100644 backend/src/api/erpStock.js create mode 100644 backend/src/api/erpWarehouse.js create mode 100644 backend/src/views/apps/erp/basic/product.vue create mode 100644 backend/src/views/apps/erp/basic/warehouse.vue create mode 100644 backend/src/views/apps/erp/document/DocDetailDrawer.vue create mode 100644 backend/src/views/apps/erp/document/DocEditor.vue create mode 100644 backend/src/views/apps/erp/document/DocListPage.vue create mode 100644 backend/src/views/apps/erp/document/ProductSelect.vue create mode 100644 backend/src/views/apps/erp/document/dict.js create mode 100644 backend/src/views/apps/erp/finance/components/BillListPage.vue create mode 100644 backend/src/views/apps/erp/finance/payable.vue create mode 100644 backend/src/views/apps/erp/finance/payment.vue create mode 100644 backend/src/views/apps/erp/finance/receivable.vue create mode 100644 backend/src/views/apps/erp/purchase/inbound.vue create mode 100644 backend/src/views/apps/erp/purchase/order.vue create mode 100644 backend/src/views/apps/erp/purchase/return.vue create mode 100644 backend/src/views/apps/erp/report/SummaryTable.vue create mode 100644 backend/src/views/apps/erp/report/index.vue create mode 100644 backend/src/views/apps/erp/sales/order.vue create mode 100644 backend/src/views/apps/erp/sales/outbound.vue create mode 100644 backend/src/views/apps/erp/sales/return.vue create mode 100644 backend/src/views/apps/erp/stock/inbound.vue create mode 100644 backend/src/views/apps/erp/stock/outbound.vue create mode 100644 backend/src/views/apps/erp/stock/query.vue create mode 100644 backend/src/views/apps/erp/stock/taking.vue create mode 100644 backend/src/views/apps/erp/stock/transfer.vue create mode 100644 backend/src/views/apps/erp/stock/warning.vue create mode 100644 backend/src/views/apps/erp/system/index.vue create mode 100644 go/controllers/app_erp.go create mode 100644 go/controllers/app_erp_archive.go create mode 100644 go/controllers/app_erp_document.go create mode 100644 go/controllers/app_erp_finance.go create mode 100644 go/controllers/app_erp_report.go create mode 100644 go/controllers/app_erp_stock.go create mode 100644 go/controllers/backend_erp_base.go create mode 100644 go/controllers/backend_erp_document.go create mode 100644 go/controllers/backend_erp_finance.go create mode 100644 go/controllers/backend_erp_product.go create mode 100644 go/controllers/backend_erp_report.go create mode 100644 go/controllers/backend_erp_stock.go create mode 100644 go/controllers/backend_erp_warehouse.go create mode 100644 go/controllers/erp_archive_core.go create mode 100644 go/controllers/erp_document_core.go create mode 100644 go/controllers/erp_finance_core.go create mode 100644 go/controllers/erp_report_core.go create mode 100644 go/controllers/erp_stock_core.go create mode 100644 go/controllers/reimburse_approval_core.go create mode 100644 go/docs/sql/alter_admin_role_lock.sql create mode 100644 go/docs/sql/erp_inventory_schema.sql create mode 100644 go/models/erp_inventory.go create mode 100644 go/pkg/identity/identity.go create mode 100644 go/pkg/identity/identity_test.go create mode 100644 go/routers/api/erp.go create mode 100644 go/services/approval/instance_query.go create mode 100644 go/services/erp/document.go create mode 100644 go/services/erp/finance.go create mode 100644 go/services/erp/settings.go create mode 100644 go/services/erp/stock.go create mode 100644 go/services/permission_test.go create mode 100644 milktea-site/preview-server.mjs create mode 100644 uniapp/api/erp.js create mode 100644 uniapp/components/erp/ErpPicker.vue create mode 100644 uniapp/pages/erp/basic/product-detail.vue create mode 100644 uniapp/pages/erp/basic/product.vue create mode 100644 uniapp/pages/erp/basic/warehouse.vue create mode 100644 uniapp/pages/erp/dashboard/index.vue create mode 100644 uniapp/pages/erp/document/detail.vue create mode 100644 uniapp/pages/erp/document/edit.vue create mode 100644 uniapp/pages/erp/document/index.vue create mode 100644 uniapp/pages/erp/finance/bill-detail.vue create mode 100644 uniapp/pages/erp/finance/bill.vue create mode 100644 uniapp/pages/erp/finance/fund-edit.vue create mode 100644 uniapp/pages/erp/finance/fund.vue create mode 100644 uniapp/pages/erp/partner/detail.vue create mode 100644 uniapp/pages/erp/partner/index.vue create mode 100644 uniapp/pages/erp/report/index.vue create mode 100644 uniapp/pages/erp/stock/batch.vue create mode 100644 uniapp/pages/erp/stock/index.vue create mode 100644 uniapp/pages/erp/stock/ledger.vue create mode 100644 uniapp/pages/erp/stock/warning.vue diff --git a/.gitignore b/.gitignore index 33eb9d1..1884a20 100644 --- a/.gitignore +++ b/.gitignore @@ -58,7 +58,8 @@ website/dist.zip # go go/go-platform.zip -go/server.exe +# Go 构建产物(go build 默认输出 main.exe / server.exe 等),不入库 +go/*.exe go/conf # codegraph diff --git a/backend/src/api/erpDocument.js b/backend/src/api/erpDocument.js new file mode 100644 index 0000000..87605c6 --- /dev/null +++ b/backend/src/api/erpDocument.js @@ -0,0 +1,96 @@ +import request from '@/utils/request' + +/** + * 进销存单据中心接口(/backend/erp/document*) + * 采购/销售/库存十类单据共用同一套接口,用 doc_type 区分。 + */ + +export function getDocumentList(params) { + return request({ + url: '/backend/erp/document/list', + method: 'get', + params + }) +} + +export function getDocumentDetail(id) { + return request({ + url: `/backend/erp/document/${id}`, + method: 'get' + }) +} + +/** 新建或覆盖保存草稿:payload 带 id 即为编辑 */ +export function saveDocument(data) { + return request({ + url: '/backend/erp/document', + method: 'post', + data + }) +} + +export function deleteDocument(id) { + return request({ + url: `/backend/erp/document/${id}`, + method: 'delete' + }) +} + +/** 提交审批:flow_id 走查询参数(后端从 query 取),不传则由后端按单据类型挑选审批流 */ +export function submitDocument(id, params) { + return request({ + url: `/backend/erp/document/${id}/submit`, + method: 'post', + params: params || {} + }) +} + +export function approveDocument(id) { + return request({ + url: `/backend/erp/document/${id}/approve`, + method: 'post', + data: {} + }) +} + +export function cancelDocument(id) { + return request({ + url: `/backend/erp/document/${id}/cancel`, + method: 'post', + data: {} + }) +} + +/** 该单据类型当前可用的审批流,为空时前端只显示「直接审核」 */ +export function getDocumentFlows(docType) { + return request({ + url: '/backend/erp/document/flows', + method: 'get', + params: { doc_type: docType } + }) +} + +/** 来源订单/原单中尚可执行的明细行(含 remain_qty),用于按行带出 */ +export function getExecutableItems(id) { + return request({ + url: `/backend/erp/document/${id}/executable`, + method: 'get' + }) +} + +/** 盘点表:带出仓库当前账面数量与加权成本 */ +export function getTakeSheet(warehouseId) { + return request({ + url: '/backend/erp/document/takeSheet', + method: 'get', + params: { warehouse_id: warehouseId } + }) +} + +/** 开单页所需字典与默认值(单据类型、状态、默认仓、售价口径、负库存开关) */ +export function getDocumentMeta() { + return request({ + url: '/backend/erp/document/meta', + method: 'get' + }) +} diff --git a/backend/src/api/erpFinance.js b/backend/src/api/erpFinance.js new file mode 100644 index 0000000..0763d42 --- /dev/null +++ b/backend/src/api/erpFinance.js @@ -0,0 +1,103 @@ +import request from '@/utils/request' + +/** + * 进销存财务接口(/backend/erp/finance*) + * 往来账(应收/应付)由已生效单据自动生成,收付款单确认时按单核销或 FIFO 核销。 + */ + +export function getBillList(params) { + return request({ + url: '/backend/erp/finance/bill/list', + method: 'get', + params + }) +} + +export function getBillDetail(id) { + return request({ + url: `/backend/erp/finance/bill/${id}`, + method: 'get' + }) +} + +export function getAging(params) { + return request({ + url: '/backend/erp/finance/aging', + method: 'get', + params + }) +} + +export function getCashFlow(params) { + return request({ + url: '/backend/erp/finance/cashflow', + method: 'get', + params + }) +} + +/** 往来单位对账汇总(应收/应付累计与未结) */ +export function getPartnerSummary(params) { + return request({ + url: '/backend/erp/finance/partner', + method: 'get', + params + }) +} + +export function getFundList(params) { + return request({ + url: '/backend/erp/finance/fund/list', + method: 'get', + params + }) +} + +export function getFundDetail(id) { + return request({ + url: `/backend/erp/finance/fund/${id}`, + method: 'get' + }) +} + +/** 新建/修改收付款草稿,返回 {id, fund_no} */ +export function saveFund(data) { + return request({ + url: '/backend/erp/finance/fund', + method: 'post', + data + }) +} + +/** 确认收付款:body 传 {settles:[{partner_bill_id,amount}]},不传则按账期 FIFO 自动核销 */ +export function confirmFund(id, data) { + return request({ + url: `/backend/erp/finance/fund/${id}/confirm`, + method: 'post', + data: data || {} + }) +} + +export function voidFund(id) { + return request({ + url: `/backend/erp/finance/fund/${id}/void`, + method: 'post', + data: {} + }) +} + +export function deleteFund(id) { + return request({ + url: `/backend/erp/finance/fund/${id}`, + method: 'delete' + }) +} + +/** 某往来单位当前未结的往来账,供核销勾选 */ +export function getFundOpenBills(params) { + return request({ + url: '/backend/erp/finance/fund/openBills', + method: 'get', + params + }) +} diff --git a/backend/src/api/erpProduct.js b/backend/src/api/erpProduct.js new file mode 100644 index 0000000..01fe54f --- /dev/null +++ b/backend/src/api/erpProduct.js @@ -0,0 +1,74 @@ +import request from '@/utils/request' + +/** + * 进销存商品档案接口(/backend/erp/product*) + * 商品支持基础单位+辅助单位换算、五级价格、安全/最高库存与保质期批次开关。 + */ + +export function getProductList(params) { + return request({ + url: '/backend/erp/product/list', + method: 'get', + params + }) +} + +export function getProductDetail(id) { + return request({ + url: `/backend/erp/product/${id}`, + method: 'get' + }) +} + +export function createProduct(data) { + return request({ + url: '/backend/erp/product', + method: 'post', + data + }) +} + +export function updateProduct(id, data) { + return request({ + url: `/backend/erp/product/${id}`, + method: 'put', + data + }) +} + +export function deleteProduct(id) { + return request({ + url: `/backend/erp/product/${id}`, + method: 'delete' + }) +} + +export function toggleProductStatus(id, status) { + return request({ + url: `/backend/erp/product/${id}/status`, + method: 'post', + data: { status } + }) +} + +export function getCategoryList() { + return request({ + url: '/backend/erp/product/category/list', + method: 'get' + }) +} + +export function saveCategory(data) { + return request({ + url: '/backend/erp/product/category', + method: 'post', + data + }) +} + +export function deleteCategory(id) { + return request({ + url: `/backend/erp/product/category/${id}`, + method: 'delete' + }) +} diff --git a/backend/src/api/erpReport.js b/backend/src/api/erpReport.js new file mode 100644 index 0000000..87be346 --- /dev/null +++ b/backend/src/api/erpReport.js @@ -0,0 +1,63 @@ +import request from '@/utils/request' + +/** + * 进销存报表接口(/backend/erp/report*) + * 统计口径只含「已生效」单据与库存流水,因此报表数字与往来账、库存结存永远一致。 + * 公共参数:date_from、date_to(YYYY-MM-DD,缺省为当月)。 + */ + +export function getPurchaseSummary(params) { + return request({ + url: '/backend/erp/report/purchase', + method: 'get', + params + }) +} + +export function getSalesSummary(params) { + return request({ + url: '/backend/erp/report/sales', + method: 'get', + params + }) +} + +export function getSalesRank(params) { + return request({ + url: '/backend/erp/report/rank', + method: 'get', + params + }) +} + +export function getStockMoveReport(params) { + return request({ + url: '/backend/erp/report/stockmove', + method: 'get', + params + }) +} + +export function getProfitReport(params) { + return request({ + url: '/backend/erp/report/profit', + method: 'get', + params + }) +} + +export function getRfmReport(params) { + return request({ + url: '/backend/erp/report/rfm', + method: 'get', + params + }) +} + +export function getErpDashboard(params) { + return request({ + url: '/backend/erp/report/dashboard', + method: 'get', + params + }) +} diff --git a/backend/src/api/erpStock.js b/backend/src/api/erpStock.js new file mode 100644 index 0000000..7dd7be2 --- /dev/null +++ b/backend/src/api/erpStock.js @@ -0,0 +1,46 @@ +import request from '@/utils/request' + +/** + * 进销存库存查询接口(/backend/erp/stock*) + * 结存全部由流水驱动,这里只有读接口 + 补货建议。 + */ + +export function getStockList(params) { + return request({ + url: '/backend/erp/stock/list', + method: 'get', + params + }) +} + +export function getStockLedger(params) { + return request({ + url: '/backend/erp/stock/ledger', + method: 'get', + params + }) +} + +export function getStockWarning(params) { + return request({ + url: '/backend/erp/stock/warning', + method: 'get', + params + }) +} + +export function getReplenishList(params) { + return request({ + url: '/backend/erp/stock/replenish', + method: 'get', + params + }) +} + +export function getBatchList(params) { + return request({ + url: '/backend/erp/stock/batch', + method: 'get', + params + }) +} diff --git a/backend/src/api/erpWarehouse.js b/backend/src/api/erpWarehouse.js new file mode 100644 index 0000000..a45f005 --- /dev/null +++ b/backend/src/api/erpWarehouse.js @@ -0,0 +1,50 @@ +import request from '@/utils/request' + +/** 进销存仓库档案接口(/backend/erp/warehouse*),列表带库存品种数与货值 */ + +export async function getWarehouseList(params) { + const res = await request({ + url: '/backend/erp/warehouse/list', + method: 'get', + params + }) + // 后端按 {warehouse, stock_kinds, stock_value} 嵌套返回,拍平后下拉与表格可共用同一行结构 + if (res && res.code === 200 && Array.isArray(res.data?.list)) { + res.data.list = res.data.list.map((row) => ({ + ...(row.warehouse || {}), + stock_kinds: row.stock_kinds, + stock_value: row.stock_value + })) + } + return res +} + +export function getWarehouseDetail(id) { + return request({ + url: `/backend/erp/warehouse/${id}`, + method: 'get' + }) +} + +export function createWarehouse(data) { + return request({ + url: '/backend/erp/warehouse', + method: 'post', + data + }) +} + +export function updateWarehouse(id, data) { + return request({ + url: `/backend/erp/warehouse/${id}`, + method: 'put', + data + }) +} + +export function deleteWarehouse(id) { + return request({ + url: `/backend/erp/warehouse/${id}`, + method: 'delete' + }) +} diff --git a/backend/src/views/apps/erp/basic/product.vue b/backend/src/views/apps/erp/basic/product.vue new file mode 100644 index 0000000..4c347e2 --- /dev/null +++ b/backend/src/views/apps/erp/basic/product.vue @@ -0,0 +1,658 @@ + + + + + diff --git a/backend/src/views/apps/erp/basic/warehouse.vue b/backend/src/views/apps/erp/basic/warehouse.vue new file mode 100644 index 0000000..3a1bd32 --- /dev/null +++ b/backend/src/views/apps/erp/basic/warehouse.vue @@ -0,0 +1,247 @@ + + + + + diff --git a/backend/src/views/apps/erp/customer/components/edit.vue b/backend/src/views/apps/erp/customer/components/edit.vue index 64d637d..3b923cf 100644 --- a/backend/src/views/apps/erp/customer/components/edit.vue +++ b/backend/src/views/apps/erp/customer/components/edit.vue @@ -148,6 +148,37 @@ + + + + + + + + + + + +
+ 信用额度用于销售出库审核时的超限拦截,账期决定应收单的到期日与逾期起算。 +
+
({ address: "", status: "1", is_draft: 0, + credit_limit: 0, + payment_days: 0, remark: "", invoice_title: "", tax_number: "", @@ -499,6 +532,12 @@ function handleSaveDraft() { padding: 0 20px; } +.credit-tip { + margin: -8px 0 12px; + font-size: 12px; + color: var(--el-text-color-secondary); +} + .dialog-footer { display: flex; justify-content: space-between; diff --git a/backend/src/views/apps/erp/dashboard/index.vue b/backend/src/views/apps/erp/dashboard/index.vue index 42eeb48..8143520 100644 --- a/backend/src/views/apps/erp/dashboard/index.vue +++ b/backend/src/views/apps/erp/dashboard/index.vue @@ -1,5 +1,5 @@