From c6adab544321c9bdcdc02d5acfb1e0343e6dff25 Mon Sep 17 00:00:00 2001 From: zxy Date: Fri, 15 May 2026 17:57:42 +0800 Subject: [PATCH] =?UTF-8?q?feat(biz):=20=E6=B7=BB=E5=8A=A0=E7=94=9F?= =?UTF-8?q?=E4=BA=A7=E8=AE=A2=E5=8D=95=E7=AE=A1=E7=90=86=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mes-ui/mes-ui-admin-vue3/.gitignore | 1 + .../src/api/biz/stockout/index.ts | 72 ------- .../src/types/auto-components.d.ts | 204 ++++++++++++++++++ .../src/types/auto-imports.d.ts | 81 +++++++ .../biz/saledelivery/SaleDeliveryForm.vue | 74 ++++--- .../src/views/biz/saledelivery/index.vue | 14 +- 6 files changed, 332 insertions(+), 114 deletions(-) delete mode 100644 mes-ui/mes-ui-admin-vue3/src/api/biz/stockout/index.ts create mode 100644 mes-ui/mes-ui-admin-vue3/src/types/auto-components.d.ts create mode 100644 mes-ui/mes-ui-admin-vue3/src/types/auto-imports.d.ts diff --git a/mes-ui/mes-ui-admin-vue3/.gitignore b/mes-ui/mes-ui-admin-vue3/.gitignore index 0643472..c077ea0 100644 --- a/mes-ui/mes-ui-admin-vue3/.gitignore +++ b/mes-ui/mes-ui-admin-vue3/.gitignore @@ -59,3 +59,4 @@ env/ .venv/ /pytest.ini /pnpm-lock.yaml +/requirements-test.txt diff --git a/mes-ui/mes-ui-admin-vue3/src/api/biz/stockout/index.ts b/mes-ui/mes-ui-admin-vue3/src/api/biz/stockout/index.ts deleted file mode 100644 index 9a67671..0000000 --- a/mes-ui/mes-ui-admin-vue3/src/api/biz/stockout/index.ts +++ /dev/null @@ -1,72 +0,0 @@ -import request from '@/config/axios' - -export interface StockOutVO { - id: number - stockOutNo: string - stockOutDate: string - warehouseId: number - warehouseName: string - storeAreaId: number - storeAreaName: string - customerId: number - customerName: string - contact: string - contactPhone: string - deliveryAddress: string - deliveryMethod: string - transportNo: string - carrier: string - stockOutType: string - stockOutStatus: number - billStatus: number - totalQty: number - totalAmount: number - remark: string - items?: StockOutItemVO[] -} - -export interface StockOutItemVO { - id?: number - materialId?: number - materialCode?: string - materialName?: string - spec?: string - unit?: string - stockQty?: number - outQty?: number - price?: number - amount?: number - remark?: string -} - -export const getStockOutPage = async (params) => { - return await request.get({ url: `/biz/stock-out/page`, params }) -} - -export const getStockOut = async (id: number) => { - return await request.get({ url: `/biz/stock-out/get?id=` + id }) -} - -export const createStockOut = async (data: StockOutVO) => { - return await request.post({ url: `/biz/stock-out/create`, data }) -} - -export const updateStockOut = async (data: StockOutVO) => { - return await request.put({ url: `/biz/stock-out/update`, data }) -} - -export const deleteStockOut = async (id: number) => { - return await request.delete({ url: `/biz/stock-out/delete?id=` + id }) -} - -export const exportStockOut = async (params) => { - return await request.download({ url: `/biz/stock-out/export-excel`, params }) -} - -export const submitStockOut = async (id: number) => { - return await request.put({ url: `/biz/stock-out/submit?id=` + id }) -} - -export const auditStockOut = async (id: number) => { - return await request.put({ url: `/biz/stock-out/audit?id=` + id }) -} \ No newline at end of file diff --git a/mes-ui/mes-ui-admin-vue3/src/types/auto-components.d.ts b/mes-ui/mes-ui-admin-vue3/src/types/auto-components.d.ts new file mode 100644 index 0000000..7d94898 --- /dev/null +++ b/mes-ui/mes-ui-admin-vue3/src/types/auto-components.d.ts @@ -0,0 +1,204 @@ +/* eslint-disable */ +/* prettier-ignore */ +// @ts-nocheck +// Generated by unplugin-vue-components +// Read more: https://github.com/vuejs/core/pull/3399 +export {} + +declare module 'vue' { + export interface GlobalComponents { + __init__: typeof import('./../../tests/pages/__init__.py')['default'] + '__init__.cpython314': typeof import('./../../tests/pages/__pycache__/__init__.cpython-314.pyc')['default'] + '.gitignore': typeof import('./../../.pytest_cache/.gitignore')['default'] + AddForm: typeof import('./../../screenshots/add-form.png')['default'] + AddFormFilled: typeof import('./../../screenshots/add-form-filled.png')['default'] + AfterSave: typeof import('./../../screenshots/after-save.png')['default'] + AppLinkInput: typeof import('./../components/AppLinkInput/index.vue')['default'] + AppLinkSelectDialog: typeof import('./../components/AppLinkInput/AppLinkSelectDialog.vue')['default'] + Backtop: typeof import('./../components/Backtop/src/Backtop.vue')['default'] + Base: typeof import('./../../tests/pages/base.py')['default'] + 'Base.cpython314': typeof import('./../../tests/pages/__pycache__/base.cpython-314.pyc')['default'] + CACHEDIR: typeof import('./../../.pytest_cache/CACHEDIR.TAG')['default'] + CardTitle: typeof import('./../components/Card/src/CardTitle.vue')['default'] + ColorInput: typeof import('./../components/ColorInput/index.vue')['default'] + ComponentContainer: typeof import('./../components/DiyEditor/components/ComponentContainer.vue')['default'] + ComponentContainerProperty: typeof import('./../components/DiyEditor/components/ComponentContainerProperty.vue')['default'] + ComponentLibrary: typeof import('./../components/DiyEditor/components/ComponentLibrary.vue')['default'] + Config: typeof import('./../../tests/config.json')['default'] + ConfigGlobal: typeof import('./../components/ConfigGlobal/src/ConfigGlobal.vue')['default'] + Conftest: typeof import('./../../tests/conftest.py')['default'] + 'Conftest.cpython314Pytest9.0.3': typeof import('./../../tests/__pycache__/conftest.cpython-314-pytest-9.0.3.pyc')['default'] + 'Conftest.cpython314Pytest9.0.3.pyc': typeof import('./../../tests/__pycache__/conftest.cpython-314-pytest-9.0.3.pyc.38960')['default'] + ContentDetailWrap: typeof import('./../components/ContentDetailWrap/src/ContentDetailWrap.vue')['default'] + ContentWrap: typeof import('./../components/ContentWrap/src/ContentWrap.vue')['default'] + CopperModal: typeof import('./../components/Cropper/src/CopperModal.vue')['default'] + CountTo: typeof import('./../components/CountTo/src/CountTo.vue')['default'] + Crontab: typeof import('./../components/Crontab/src/Crontab.vue')['default'] + Cropper: typeof import('./../components/Cropper/src/Cropper.vue')['default'] + CropperAvatar: typeof import('./../components/Cropper/src/CropperAvatar.vue')['default'] + Descriptions: typeof import('./../components/Descriptions/src/Descriptions.vue')['default'] + DescriptionsItemLabel: typeof import('./../components/Descriptions/src/DescriptionsItemLabel.vue')['default'] + Dialog: typeof import('./../components/Dialog/src/Dialog.vue')['default'] + DictTag: typeof import('./../components/DictTag/src/DictTag.vue')['default'] + DiyEditor: typeof import('./../components/DiyEditor/index.vue')['default'] + DocAlert: typeof import('./../components/DocAlert/index.vue')['default'] + Echart: typeof import('./../components/Echart/src/Echart.vue')['default'] + Editor: typeof import('./../components/Editor/src/Editor.vue')['default'] + ElAlert: typeof import('element-plus/es')['ElAlert'] + ElAvatar: typeof import('element-plus/es')['ElAvatar'] + ElButton: typeof import('element-plus/es')['ElButton'] + ElCard: typeof import('element-plus/es')['ElCard'] + ElCheckbox: typeof import('element-plus/es')['ElCheckbox'] + ElCheckboxGroup: typeof import('element-plus/es')['ElCheckboxGroup'] + ElCol: typeof import('element-plus/es')['ElCol'] + ElDatePicker: typeof import('element-plus/es')['ElDatePicker'] + ElDialog: typeof import('element-plus/es')['ElDialog'] + ElDivider: typeof import('element-plus/es')['ElDivider'] + ElDrawer: typeof import('element-plus/es')['ElDrawer'] + ElDropdown: typeof import('element-plus/es')['ElDropdown'] + ElDropdownItem: typeof import('element-plus/es')['ElDropdownItem'] + ElDropdownMenu: typeof import('element-plus/es')['ElDropdownMenu'] + ElementBaseInfo: typeof import('./../components/bpmnProcessDesigner/package/penal/base/ElementBaseInfo.vue')['default'] + ElementForm: typeof import('./../components/bpmnProcessDesigner/package/penal/form/ElementForm.vue')['default'] + ElementListeners: typeof import('./../components/bpmnProcessDesigner/package/penal/listeners/ElementListeners.vue')['default'] + ElementMultiInstance: typeof import('./../components/bpmnProcessDesigner/package/penal/multi-instance/ElementMultiInstance.vue')['default'] + ElementOtherConfig: typeof import('./../components/bpmnProcessDesigner/package/penal/other/ElementOtherConfig.vue')['default'] + ElementProperties: typeof import('./../components/bpmnProcessDesigner/package/penal/properties/ElementProperties.vue')['default'] + ElementTask: typeof import('./../components/bpmnProcessDesigner/package/penal/task/ElementTask.vue')['default'] + ElForm: typeof import('element-plus/es')['ElForm'] + ElFormItem: typeof import('element-plus/es')['ElFormItem'] + ElIcon: typeof import('element-plus/es')['ElIcon'] + ElImageViewer: typeof import('element-plus/es')['ElImageViewer'] + ElInput: typeof import('element-plus/es')['ElInput'] + ElInputNumber: typeof import('element-plus/es')['ElInputNumber'] + ElLink: typeof import('element-plus/es')['ElLink'] + ElOption: typeof import('element-plus/es')['ElOption'] + ElPagination: typeof import('element-plus/es')['ElPagination'] + ElPopover: typeof import('element-plus/es')['ElPopover'] + ElRadio: typeof import('element-plus/es')['ElRadio'] + ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup'] + ElRow: typeof import('element-plus/es')['ElRow'] + ElScrollbar: typeof import('element-plus/es')['ElScrollbar'] + ElSelect: typeof import('element-plus/es')['ElSelect'] + ElSkeleton: typeof import('element-plus/es')['ElSkeleton'] + ElSwitch: typeof import('element-plus/es')['ElSwitch'] + ElTable: typeof import('element-plus/es')['ElTable'] + ElTableColumn: typeof import('element-plus/es')['ElTableColumn'] + ElTabPane: typeof import('element-plus/es')['ElTabPane'] + ElTabs: typeof import('element-plus/es')['ElTabs'] + ElTag: typeof import('element-plus/es')['ElTag'] + ElTooltip: typeof import('element-plus/es')['ElTooltip'] + ElTreeSelect: typeof import('element-plus/es')['ElTreeSelect'] + ElUpload: typeof import('element-plus/es')['ElUpload'] + Error: typeof import('./../components/Error/src/Error.vue')['default'] + ErrorScreenshot: typeof import('./../../error-screenshot.png')['default'] + FlowCondition: typeof import('./../components/bpmnProcessDesigner/package/penal/flow-condition/FlowCondition.vue')['default'] + Form: typeof import('./../components/Form/src/Form.vue')['default'] + Form_components: typeof import('./../../tests/components/form_components.py')['default'] + 'Form_components.cpython314': typeof import('./../../tests/components/__pycache__/form_components.cpython-314.pyc')['default'] + Highlight: typeof import('./../components/Highlight/src/Highlight.vue')['default'] + Icon: typeof import('./../components/Icon/src/Icon.vue')['default'] + IconSelect: typeof import('./../components/Icon/src/IconSelect.vue')['default'] + IFrame: typeof import('./../components/IFrame/src/IFrame.vue')['default'] + ImageViewer: typeof import('./../components/ImageViewer/src/ImageViewer.vue')['default'] + Infotip: typeof import('./../components/Infotip/src/Infotip.vue')['default'] + InputPassword: typeof import('./../components/InputPassword/src/InputPassword.vue')['default'] + InputWithColor: typeof import('./../components/InputWithColor/index.vue')['default'] + Lastfailed: typeof import('./../../.pytest_cache/v/cache/lastfailed')['default'] + Login_page: typeof import('./../../tests/pages/login_page.py')['default'] + 'Login_page.cpython314': typeof import('./../../tests/pages/__pycache__/login_page.cpython-314.pyc')['default'] + 'Login_page.cpython314.pyc': typeof import('./../../tests/pages/__pycache__/login_page.cpython-314.pyc.2012673802768')['default'] + LoginPage: typeof import('./../../login-page.png')['default'] + MagicCubeEditor: typeof import('./../components/MagicCubeEditor/index.vue')['default'] + MoneyInput: typeof import('./../views/biz/components/MoneyInput.vue')['default'] + Nodeids: typeof import('./../../.pytest_cache/v/cache/nodeids')['default'] + Order_test_data: typeof import('./../../tests/data/order_test_data.json')['default'] + Pagination: typeof import('./../components/Pagination/index.vue')['default'] + PlaywrightTest: typeof import('./../../tests/playwright-test.py')['default'] + ProcessDesigner: typeof import('./../components/bpmnProcessDesigner/package/designer/ProcessDesigner.vue')['default'] + ProcessPalette: typeof import('./../components/bpmnProcessDesigner/package/palette/ProcessPalette.vue')['default'] + ProcessViewer: typeof import('./../components/bpmnProcessDesigner/package/designer/ProcessViewer.vue')['default'] + PropertiesPanel: typeof import('./../components/bpmnProcessDesigner/package/penal/PropertiesPanel.vue')['default'] + Prostorage: typeof import('./../api/biz/prostorage/index.ts')['default'] + ProStorageInventorySelectDialog: typeof import('./../views/biz/prostorageinventory/ProStorageInventorySelectDialog.vue')['default'] + Prostoragelog: typeof import('./../api/biz/prostoragelog/index.ts')['default'] + Prostoragemat: typeof import('./../api/biz/prostoragemat/index.ts')['default'] + Pytest: typeof import('./../../pytest.ini')['default'] + Qrcode: typeof import('./../components/Qrcode/src/Qrcode.vue')['default'] + README: typeof import('./../../.pytest_cache/README.md')['default'] + ReceiveTask: typeof import('./../components/bpmnProcessDesigner/package/penal/task/task-components/ReceiveTask.vue')['default'] + RequirementsTest: typeof import('./../../requirements-test.txt')['default'] + RouterLink: typeof import('vue-router')['RouterLink'] + RouterSearch: typeof import('./../components/RouterSearch/index.vue')['default'] + RouterView: typeof import('vue-router')['RouterView'] + Sale_order_page: typeof import('./../../tests/pages/sale_order_page.py')['default'] + 'Sale_order_page.cpython314': typeof import('./../../tests/pages/__pycache__/sale_order_page.cpython-314.pyc')['default'] + 'Sale_order_page.cpython314.pyc': typeof import('./../../tests/pages/__pycache__/sale_order_page.cpython-314.pyc.1680447423472')['default'] + ScriptTask: typeof import('./../components/bpmnProcessDesigner/package/penal/task/task-components/ScriptTask.vue')['default'] + Search: typeof import('./../components/Search/src/Search.vue')['default'] + ShortcutDateRangePicker: typeof import('./../components/ShortcutDateRangePicker/index.vue')['default'] + SignalAndMessage: typeof import('./../components/bpmnProcessDesigner/package/penal/signal-message/SignalAndMessage.vue')['default'] + Sticky: typeof import('./../components/Sticky/src/Sticky.vue')['default'] + SummaryCard: typeof import('./../components/SummaryCard/index.vue')['default'] + Table: typeof import('./../components/Table/src/Table.vue')['default'] + Test_sale_order: typeof import('./../../tests/test_sale_order.py')['default'] + 'Test_sale_order.cpython314Pytest9.0.3': typeof import('./../../tests/__pycache__/test_sale_order.cpython-314-pytest-9.0.3.pyc')['default'] + 'Test_sale_order.cpython314Pytest9.0.3.pyc': typeof import('./../../tests/__pycache__/test_sale_order.cpython-314-pytest-9.0.3.pyc.16136')['default'] + TestAfterLogin: typeof import('./../../test-after-login.png')['default'] + 'Tests_test_sale_order.py_TestSaleOrderCRUD_test_add_order_basic_150308': typeof import('./../../tests/screenshots/tests_test_sale_order.py_TestSaleOrderCRUD_test_add_order_basic_150308.png')['default'] + 'Tests_test_sale_order.py_TestSaleOrderCRUD_test_add_order_basic_150541': typeof import('./../../tests/screenshots/tests_test_sale_order.py_TestSaleOrderCRUD_test_add_order_basic_150541.png')['default'] + 'Tests_test_sale_order.py_TestSaleOrderCRUD_test_add_order_cancel_150346': typeof import('./../../tests/screenshots/tests_test_sale_order.py_TestSaleOrderCRUD_test_add_order_cancel_150346.png')['default'] + 'Tests_test_sale_order.py_TestSaleOrderCRUD_test_add_order_cancel_150618': typeof import('./../../tests/screenshots/tests_test_sale_order.py_TestSaleOrderCRUD_test_add_order_cancel_150618.png')['default'] + 'Tests_test_sale_order.py_TestSaleOrderCRUD_test_add_order_cancel_151150': typeof import('./../../tests/screenshots/tests_test_sale_order.py_TestSaleOrderCRUD_test_add_order_cancel_151150.png')['default'] + 'Tests_test_sale_order.py_TestSaleOrderCRUD_test_add_order_cancel_151240': typeof import('./../../tests/screenshots/tests_test_sale_order.py_TestSaleOrderCRUD_test_add_order_cancel_151240.png')['default'] + 'Tests_test_sale_order.py_TestSaleOrderCRUD_test_add_order_dialog_opens_151141': typeof import('./../../tests/screenshots/tests_test_sale_order.py_TestSaleOrderCRUD_test_add_order_dialog_opens_151141.png')['default'] + 'Tests_test_sale_order.py_TestSaleOrderCRUD_test_add_order_dialog_opens_151231': typeof import('./../../tests/screenshots/tests_test_sale_order.py_TestSaleOrderCRUD_test_add_order_dialog_opens_151231.png')['default'] + 'Tests_test_sale_order.py_TestSaleOrderCRUD_test_add_order_partial_fill_154225': typeof import('./../../tests/screenshots/tests_test_sale_order.py_TestSaleOrderCRUD_test_add_order_partial_fill_154225.png')['default'] + 'Tests_test_sale_order.py_TestSaleOrderCRUD_test_add_order_partial_fill_154326': typeof import('./../../tests/screenshots/tests_test_sale_order.py_TestSaleOrderCRUD_test_add_order_partial_fill_154326.png')['default'] + 'Tests_test_sale_order.py_TestSaleOrderCRUD_test_add_order_success_151545': typeof import('./../../tests/screenshots/tests_test_sale_order.py_TestSaleOrderCRUD_test_add_order_success_151545.png')['default'] + 'Tests_test_sale_order.py_TestSaleOrderCRUD_test_add_order_success_152057': typeof import('./../../tests/screenshots/tests_test_sale_order.py_TestSaleOrderCRUD_test_add_order_success_152057.png')['default'] + 'Tests_test_sale_order.py_TestSaleOrderCRUD_test_add_order_success_152324': typeof import('./../../tests/screenshots/tests_test_sale_order.py_TestSaleOrderCRUD_test_add_order_success_152324.png')['default'] + 'Tests_test_sale_order.py_TestSaleOrderCRUD_test_add_order_success_152412': typeof import('./../../tests/screenshots/tests_test_sale_order.py_TestSaleOrderCRUD_test_add_order_success_152412.png')['default'] + 'Tests_test_sale_order.py_TestSaleOrderCRUD_test_add_order_success_153127': typeof import('./../../tests/screenshots/tests_test_sale_order.py_TestSaleOrderCRUD_test_add_order_success_153127.png')['default'] + 'Tests_test_sale_order.py_TestSaleOrderCRUD_test_add_order_success_153158': typeof import('./../../tests/screenshots/tests_test_sale_order.py_TestSaleOrderCRUD_test_add_order_success_153158.png')['default'] + 'Tests_test_sale_order.py_TestSaleOrderCRUD_test_add_order_success_153341': typeof import('./../../tests/screenshots/tests_test_sale_order.py_TestSaleOrderCRUD_test_add_order_success_153341.png')['default'] + 'Tests_test_sale_order.py_TestSaleOrderCRUD_test_add_order_success_153433': typeof import('./../../tests/screenshots/tests_test_sale_order.py_TestSaleOrderCRUD_test_add_order_success_153433.png')['default'] + 'Tests_test_sale_order.py_TestSaleOrderCRUD_test_add_order_success_153706': typeof import('./../../tests/screenshots/tests_test_sale_order.py_TestSaleOrderCRUD_test_add_order_success_153706.png')['default'] + 'Tests_test_sale_order.py_TestSaleOrderCRUD_test_add_order_success_153802': typeof import('./../../tests/screenshots/tests_test_sale_order.py_TestSaleOrderCRUD_test_add_order_success_153802.png')['default'] + 'Tests_test_sale_order.py_TestSaleOrderCRUD_test_add_order_validation_154052': typeof import('./../../tests/screenshots/tests_test_sale_order.py_TestSaleOrderCRUD_test_add_order_validation_154052.png')['default'] + 'Tests_test_sale_order.py_TestSaleOrderCRUD_test_add_order_validation_154215': typeof import('./../../tests/screenshots/tests_test_sale_order.py_TestSaleOrderCRUD_test_add_order_validation_154215.png')['default'] + 'Tests_test_sale_order.py_TestSaleOrderCRUD_test_add_order_validation_154314': typeof import('./../../tests/screenshots/tests_test_sale_order.py_TestSaleOrderCRUD_test_add_order_validation_154314.png')['default'] + 'Tests_test_sale_order.py_TestSaleOrderCRUD_test_add_order_with_all_fields_150342': typeof import('./../../tests/screenshots/tests_test_sale_order.py_TestSaleOrderCRUD_test_add_order_with_all_fields_150342.png')['default'] + 'Tests_test_sale_order.py_TestSaleOrderCRUD_test_add_order_with_all_fields_150615': typeof import('./../../tests/screenshots/tests_test_sale_order.py_TestSaleOrderCRUD_test_add_order_with_all_fields_150615.png')['default'] + 'Tests_test_sale_order.py_TestSaleOrderDataDriven_test_add_order_parametrized[test_case0]_150350': typeof import('./../../tests/screenshots/tests_test_sale_order.py_TestSaleOrderDataDriven_test_add_order_parametrized[test_case0]_150350.png')['default'] + 'Tests_test_sale_order.py_TestSaleOrderDataDriven_test_add_order_parametrized[test_case0]_150622': typeof import('./../../tests/screenshots/tests_test_sale_order.py_TestSaleOrderDataDriven_test_add_order_parametrized[test_case0]_150622.png')['default'] + 'Tests_test_sale_order.py_TestSaleOrderDataDriven_test_add_order_parametrized[test_case1]_150353': typeof import('./../../tests/screenshots/tests_test_sale_order.py_TestSaleOrderDataDriven_test_add_order_parametrized[test_case1]_150353.png')['default'] + 'Tests_test_sale_order.py_TestSaleOrderDataDriven_test_add_order_parametrized[test_case1]_150625': typeof import('./../../tests/screenshots/tests_test_sale_order.py_TestSaleOrderDataDriven_test_add_order_parametrized[test_case1]_150625.png')['default'] + 'Tests_test_sale_order.py_TestSaleOrderLogin_test_login_success_145839': typeof import('./../../tests/screenshots/tests_test_sale_order.py_TestSaleOrderLogin_test_login_success_145839.png')['default'] + 'Tests_test_sale_order.py_TestSaleOrderLogin_test_login_success_145911': typeof import('./../../tests/screenshots/tests_test_sale_order.py_TestSaleOrderLogin_test_login_success_145911.png')['default'] + 'Tests_test_sale_order.py_TestSaleOrderSearch_test_reset_search_150305': typeof import('./../../tests/screenshots/tests_test_sale_order.py_TestSaleOrderSearch_test_reset_search_150305.png')['default'] + 'Tests_test_sale_order.py_TestSaleOrderSearch_test_reset_search_150538': typeof import('./../../tests/screenshots/tests_test_sale_order.py_TestSaleOrderSearch_test_reset_search_150538.png')['default'] + 'Tests_test_sale_order.py_TestSaleOrderSearch_test_search_by_date_range_150232': typeof import('./../../tests/screenshots/tests_test_sale_order.py_TestSaleOrderSearch_test_search_by_date_range_150232.png')['default'] + 'Tests_test_sale_order.py_TestSaleOrderSearch_test_search_by_date_range_150505': typeof import('./../../tests/screenshots/tests_test_sale_order.py_TestSaleOrderSearch_test_search_by_date_range_150505.png')['default'] + 'Tests_test_sale_order.py_TestSaleOrderSearch_test_search_by_order_no_150159': typeof import('./../../tests/screenshots/tests_test_sale_order.py_TestSaleOrderSearch_test_search_by_order_no_150159.png')['default'] + 'Tests_test_sale_order.py_TestSaleOrderSearch_test_search_by_order_no_150432': typeof import('./../../tests/screenshots/tests_test_sale_order.py_TestSaleOrderSearch_test_search_by_order_no_150432.png')['default'] + TestScreenshot: typeof import('./../../test-screenshot.png')['default'] + Tooltip: typeof import('./../components/Tooltip/src/Tooltip.vue')['default'] + UploadFile: typeof import('./../components/UploadFile/src/UploadFile.vue')['default'] + UploadFileBatch: typeof import('./../components/UploadFile/src/UploadFileBatch.vue')['default'] + UploadImg: typeof import('./../components/UploadFile/src/UploadImg.vue')['default'] + UploadImgs: typeof import('./../components/UploadFile/src/UploadImgs.vue')['default'] + UserTask: typeof import('./../components/bpmnProcessDesigner/package/penal/task/task-components/UserTask.vue')['default'] + UserTaskListeners: typeof import('./../components/bpmnProcessDesigner/package/penal/listeners/UserTaskListeners.vue')['default'] + Verify: typeof import('./../components/Verifition/src/Verify.vue')['default'] + VerifyPoints: typeof import('./../components/Verifition/src/Verify/VerifyPoints.vue')['default'] + VerifySlide: typeof import('./../components/Verifition/src/Verify/VerifySlide.vue')['default'] + VerticalButtonGroup: typeof import('./../components/VerticalButtonGroup/index.vue')['default'] + 'Workspace.xml': typeof import('./../../.idea/workspace.xml.tmp')['default'] + XButton: typeof import('./../components/XButton/src/XButton.vue')['default'] + XTextButton: typeof import('./../components/XButton/src/XTextButton.vue')['default'] + } + export interface ComponentCustomProperties { + vLoading: typeof import('element-plus/es')['ElLoadingDirective'] + } +} diff --git a/mes-ui/mes-ui-admin-vue3/src/types/auto-imports.d.ts b/mes-ui/mes-ui-admin-vue3/src/types/auto-imports.d.ts new file mode 100644 index 0000000..f525c74 --- /dev/null +++ b/mes-ui/mes-ui-admin-vue3/src/types/auto-imports.d.ts @@ -0,0 +1,81 @@ +/* eslint-disable */ +/* prettier-ignore */ +// @ts-nocheck +// noinspection JSUnusedGlobalSymbols +// Generated by unplugin-auto-import +export {} +declare global { + const DICT_TYPE: typeof import('@/utils/dict')['DICT_TYPE'] + const EffectScope: typeof import('vue')['EffectScope'] + const computed: typeof import('vue')['computed'] + const createApp: typeof import('vue')['createApp'] + const customRef: typeof import('vue')['customRef'] + const defineAsyncComponent: typeof import('vue')['defineAsyncComponent'] + const defineComponent: typeof import('vue')['defineComponent'] + const effectScope: typeof import('vue')['effectScope'] + const getCurrentInstance: typeof import('vue')['getCurrentInstance'] + const getCurrentScope: typeof import('vue')['getCurrentScope'] + const h: typeof import('vue')['h'] + const inject: typeof import('vue')['inject'] + const isProxy: typeof import('vue')['isProxy'] + const isReactive: typeof import('vue')['isReactive'] + const isReadonly: typeof import('vue')['isReadonly'] + const isRef: typeof import('vue')['isRef'] + const markRaw: typeof import('vue')['markRaw'] + const nextTick: typeof import('vue')['nextTick'] + const onActivated: typeof import('vue')['onActivated'] + const onBeforeMount: typeof import('vue')['onBeforeMount'] + const onBeforeRouteLeave: typeof import('vue-router')['onBeforeRouteLeave'] + const onBeforeRouteUpdate: typeof import('vue-router')['onBeforeRouteUpdate'] + const onBeforeUnmount: typeof import('vue')['onBeforeUnmount'] + const onBeforeUpdate: typeof import('vue')['onBeforeUpdate'] + const onDeactivated: typeof import('vue')['onDeactivated'] + const onErrorCaptured: typeof import('vue')['onErrorCaptured'] + const onMounted: typeof import('vue')['onMounted'] + const onRenderTracked: typeof import('vue')['onRenderTracked'] + const onRenderTriggered: typeof import('vue')['onRenderTriggered'] + const onScopeDispose: typeof import('vue')['onScopeDispose'] + const onServerPrefetch: typeof import('vue')['onServerPrefetch'] + const onUnmounted: typeof import('vue')['onUnmounted'] + const onUpdated: typeof import('vue')['onUpdated'] + const onWatcherCleanup: typeof import('vue')['onWatcherCleanup'] + const provide: typeof import('vue')['provide'] + const reactive: typeof import('vue')['reactive'] + const readonly: typeof import('vue')['readonly'] + const ref: typeof import('vue')['ref'] + const required: typeof import('@/utils/formRules')['required'] + const resolveComponent: typeof import('vue')['resolveComponent'] + const shallowReactive: typeof import('vue')['shallowReactive'] + const shallowReadonly: typeof import('vue')['shallowReadonly'] + const shallowRef: typeof import('vue')['shallowRef'] + const toRaw: typeof import('vue')['toRaw'] + const toRef: typeof import('vue')['toRef'] + const toRefs: typeof import('vue')['toRefs'] + const toValue: typeof import('vue')['toValue'] + const triggerRef: typeof import('vue')['triggerRef'] + const unref: typeof import('vue')['unref'] + const useAttrs: typeof import('vue')['useAttrs'] + const useCrudSchemas: typeof import('@/hooks/web/useCrudSchemas')['useCrudSchemas'] + const useCssModule: typeof import('vue')['useCssModule'] + const useCssVars: typeof import('vue')['useCssVars'] + const useI18n: typeof import('@/hooks/web/useI18n')['useI18n'] + const useId: typeof import('vue')['useId'] + const useLink: typeof import('vue-router')['useLink'] + const useMessage: typeof import('@/hooks/web/useMessage')['useMessage'] + const useModel: typeof import('vue')['useModel'] + const useRoute: typeof import('vue-router')['useRoute'] + const useRouter: typeof import('vue-router')['useRouter'] + const useSlots: typeof import('vue')['useSlots'] + const useTable: typeof import('@/hooks/web/useTable')['useTable'] + const useTemplateRef: typeof import('vue')['useTemplateRef'] + const watch: typeof import('vue')['watch'] + const watchEffect: typeof import('vue')['watchEffect'] + const watchPostEffect: typeof import('vue')['watchPostEffect'] + const watchSyncEffect: typeof import('vue')['watchSyncEffect'] +} +// for type re-export +declare global { + // @ts-ignore + export type { Component, ComponentPublicInstance, ComputedRef, DirectiveBinding, ExtractDefaultPropTypes, ExtractPropTypes, ExtractPublicPropTypes, InjectionKey, PropType, Ref, MaybeRef, MaybeRefOrGetter, VNode, WritableComputedRef } from 'vue' + import('vue') +} diff --git a/mes-ui/mes-ui-admin-vue3/src/views/biz/saledelivery/SaleDeliveryForm.vue b/mes-ui/mes-ui-admin-vue3/src/views/biz/saledelivery/SaleDeliveryForm.vue index 23ddbac..9a7acc6 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/biz/saledelivery/SaleDeliveryForm.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/biz/saledelivery/SaleDeliveryForm.vue @@ -23,9 +23,9 @@ - + - @@ -254,7 +254,6 @@ const formData = reactive({ deliveryDate: getToday(), deliveryStatus: '1', deliveryType: undefined, - ordDate: undefined, custId: undefined, custName: undefined, contact: undefined, @@ -291,7 +290,7 @@ const totalQty = computed(() => { const getSummary = (param: any) => { const { columns, data } = param const sums: any[] = [] - + // 确保数据数组有效 if (!Array.isArray(data) || data.length === 0) { columns.forEach((column: any, index: number) => { @@ -299,13 +298,13 @@ const getSummary = (param: any) => { }) return sums } - + // 计算发货袋数合计 const totalDeliveriedBag = data.reduce((sum: number, item: any) => sum + (parseInt(item.deliveriedBag) || 0), 0) - + // 计算发货数量合计 const totalDeliveriedQty = data.reduce((sum: number, item: any) => sum + (parseInt(item.deliveriedQty) || 0), 0) - + // 使用列索引来匹配(更可靠) // 列顺序:0-序号, 1-仓库, 2-库区, 3-批次号, 4-库存数量, 5-库存袋数, 6-单袋规格, 7-发货袋数, 8-发货数量, 9-备注, 10-操作 columns.forEach((column: any, index: number) => { @@ -345,15 +344,15 @@ const formRules = reactive({ deliveryStatus: [{ required: true, message: '单据状态不能为空', trigger: 'change' }], deliveriedQty: [ { required: true, message: '发货数量不能为空', trigger: 'change' }, - { + { validator: (rule, value, callback) => { if (value && formData.remaimQty !== undefined && Number(value) > Number(formData.remaimQty)) { callback(new Error(`发货数量不能大于剩余数量(${formData.remaimQty})`)) } else { callback() } - }, - trigger: ['change', 'blur'] + }, + trigger: ['change', 'blur'] } ], custName: [{ required: true, message: '客户名称不能为空', trigger: 'change' }], @@ -374,22 +373,28 @@ const open = async (type: string, id?: number) => { formType.value = type resetForm() - // 加载销售订单选项 - await loadSaleOrderOptions() - // 修改时,设置数据 if (id) { formLoading.value = true try { const data = await SaleDeliveryApi.getSaleDelivery(id) Object.assign(formData, data) - // 加载产品列表 - if (data.items) { + // 加载产品列表 - 支持多种字段名 + if (data.items && data.items.length > 0) { productList.value = data.items + } else if (data.detailList && data.detailList.length > 0) { + productList.value = data.detailList + } else if (data.products && data.products.length > 0) { + productList.value = data.products + } else { + productList.value = [] } } finally { formLoading.value = false } + } else { + // 新增时才加载销售订单选项 + await loadSaleOrderOptions() } } defineExpose({ open }) @@ -456,18 +461,18 @@ const handleOrderSelect = async (data: any) => { formData.remaimQty = data.remaimQty formData.deliveriedQty = data.remaimQty formData.unit = data.unit - + // 将订单日期带入到单据日期 if (data.ordDate) { // 确保日期格式为 YYYY-MM-DD 字符串类型 const ordDateStr = String(data.ordDate).trim() if (/^\d{4}-\d{2}-\d{2}$/.test(ordDateStr)) { - formData.ordDate = ordDateStr + formData.deliveryDate = ordDateStr } else { try { const date = new Date(data.ordDate) if (!isNaN(date.getTime())) { - formData.ordDate = date.toISOString().split('T')[0] + formData.deliveryDate = date.toISOString().split('T')[0] } } catch (e) { console.warn('日期转换失败:', e) @@ -475,7 +480,7 @@ const handleOrderSelect = async (data: any) => { } } else { // 如果没有订单日期,清空单据日期 - formData.ordDate = null + formData.deliveryDate = null } console.log('formData after set:', formData) @@ -493,8 +498,8 @@ const handleOrderSelect = async (data: any) => { }) } - // 如果有客户ID,查询客户联系人信息 - if (data.custId) { + // 只有在新增模式下才查询客户联系人信息(编辑模式下已有数据) + if (data.custId && formType.value === 'create') { await loadCustomerContact(data.custId) } } @@ -520,10 +525,10 @@ const addProductItem = () => { const selectedIds = productList.value .filter(item => item.inventoryId) .map(item => item.inventoryId) - + // 设置已选择的ID,以便弹窗打开时自动选中 inventorySelectRef.value.setSelectedIds(selectedIds) - + // 打开弹窗 inventorySelectRef.value.open() } @@ -532,11 +537,11 @@ const addProductItem = () => { const handleInventorySelect = (data: any[]) => { // data 是选中的库存记录数组 if (!data || data.length === 0) return - + // 遍历选中的库存记录,根据 id 判断是否已存在 data.forEach(inventory => { const exists = productList.value.find(item => item.inventoryId === inventory.id) - + if (!exists) { // 不存在则新增 productList.value.push({ @@ -572,7 +577,7 @@ const emit = defineEmits(['success', 'close']) const validateDeliveryQty = () => { const remaimQty = parseInt(formData.remaimQty) || 0 const totalDeliveriedQty = totalQty.value - + if (totalDeliveriedQty > remaimQty) { message.warning(`发货总数量(${totalDeliveriedQty})不能超过剩余数量(${remaimQty})`) return false @@ -585,7 +590,7 @@ const submitForm = async () => { if (!validateDeliveryQty()) { return } - + // 校验表单 await formRef.value.validate() @@ -608,7 +613,7 @@ const submitForm = async () => { deliveriedQty: item.deliveriedQty, remark: item.remark, })) - + const data = { ...formData, detailList, @@ -634,7 +639,7 @@ const submitAudit = async () => { if (!validateDeliveryQty()) { return } - + // 校验表单 await formRef.value.validate() @@ -657,7 +662,7 @@ const submitAudit = async () => { deliveriedQty: item.deliveriedQty, remark: item.remark, })) - + const data = { ...formData, deliveryStatus: '2', // 已确认 @@ -704,7 +709,6 @@ const resetForm = () => { ordQty: undefined, remaimQty: undefined, deliveriedQty: undefined, - ordDate: null, }) productList.value = [] diff --git a/mes-ui/mes-ui-admin-vue3/src/views/biz/saledelivery/index.vue b/mes-ui/mes-ui-admin-vue3/src/views/biz/saledelivery/index.vue index 01cd9d9..ec170d4 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/biz/saledelivery/index.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/biz/saledelivery/index.vue @@ -143,15 +143,15 @@ -
+
出库单明细
- + - - + + - - + + @@ -161,7 +161,7 @@ - +