From 0bf6f46d487f2a9bbd977cc52c47051b8ae19159 Mon Sep 17 00:00:00 2001 From: lidm0086 Date: Thu, 31 Oct 2024 10:06:52 +0800 Subject: [PATCH] 11 --- .editorconfig | 19 + .env | 17 + .env.prod | 54 + .env.test | 50 + .env.test-scp | 50 + .env.wyf | 64 + .eslintignore | 8 + .eslintrc-auto-import.json | 259 ++ .eslintrc.js | 75 + .gitignore | 15 + .prettierignore | 11 + .stylelintignore | 6 + Dockerfile | 7 + Dockerfile_prod | 7 + Dockerfile_scp | 7 + LICENSE | 21 + build/vite/index.ts | 107 + build/vite/optimize.ts | 112 + index.html | 147 + nginx.conf | 53 + nginx_prod.conf | 101 + nginx_scp.conf | 53 + package.json | 140 + postcss.config.js | 5 + prettier.config.js | 22 + public/favicon.ico | Bin 0 -> 4286 bytes public/home.png | Bin 0 -> 74352 bytes public/logo.gif | Bin 0 -> 6334 bytes public/systemConfig.js | 20 + qodana.yaml | 29 + src/App.vue | 75 + src/api/bpm/activity/index.ts | 8 + src/api/bpm/definition/index.ts | 21 + src/api/bpm/form/index.ts | 56 + src/api/bpm/leave/index.ts | 27 + src/api/bpm/model/index.ts | 59 + src/api/bpm/processInstance/index.ts | 41 + src/api/bpm/task/index.ts | 53 + src/api/bpm/taskAssignRule/index.ts | 29 + src/api/bpm/userGroup/index.ts | 47 + src/api/eam/adjustRecordDetail/index.ts | 46 + src/api/eam/adjustRecordMain/index.ts | 46 + src/api/eam/applicationRecordDetail/index.ts | 57 + src/api/eam/applicationRecordMain/index.ts | 67 + src/api/eam/attachmentFileUpload/index.ts | 20 + src/api/eam/basicEamProductionline/index.ts | 73 + src/api/eam/basicEamWorkshop/index.ts | 75 + src/api/eam/basicFaultCause/index.ts | 68 + src/api/eam/basicFaultType/index.ts | 67 + src/api/eam/basicInspectionOption/index.ts | 64 + src/api/eam/basicMaintenanceOption/index.ts | 64 + src/api/eam/basicSpotCheckOption/index.ts | 63 + src/api/eam/classTypeRole/index.ts | 70 + src/api/eam/countJobDetail/index.ts | 51 + src/api/eam/countJobMain/index.ts | 56 + src/api/eam/countRecordDetail/index.ts | 51 + src/api/eam/countRecordMain/index.ts | 61 + src/api/eam/countadjustPlan/index.ts | 51 + src/api/eam/documentType/index.ts | 67 + src/api/eam/documentTypeSelectSet/index.ts | 60 + src/api/eam/equipmentAccounts/index.ts | 90 + .../eam/equipmentInspectionDetail/index.ts | 60 + src/api/eam/equipmentInspectionMain/index.ts | 104 + .../equipmentInspectionRecordDetail/index.ts | 60 + .../equipmentInspectionRecordMain/index.ts | 79 + src/api/eam/equipmentMainPart/index.ts | 72 + .../eam/equipmentMaintenanceDetail/index.ts | 69 + src/api/eam/equipmentMaintenanceMain/index.ts | 111 + .../equipmentMaintenanceRecordDetail/index.ts | 65 + .../equipmentMaintenanceRecordMain/index.ts | 74 + src/api/eam/equipmentManufacturer/index.ts | 73 + src/api/eam/equipmentRepairJobDetail/index.ts | 59 + src/api/eam/equipmentRepairJobMain/index.ts | 122 + .../eam/equipmentRepairRecordDetail/index.ts | 59 + .../eam/equipmentRepairRecordMain/index.ts | 85 + .../eam/equipmentReportRepairRequest/index.ts | 93 + src/api/eam/equipmentShutdown/index.ts | 61 + src/api/eam/equipmentSigning/index.ts | 76 + src/api/eam/equipmentSpotCheckDetail/index.ts | 62 + src/api/eam/equipmentSpotCheckMain/index.ts | 103 + .../equipmentSpotCheckRecordDetail/index.ts | 62 + .../eam/equipmentSpotCheckRecordMain/index.ts | 79 + src/api/eam/equipmentSupplier/index.ts | 73 + src/api/eam/equipmentToolSparePart/index.ts | 68 + src/api/eam/equipmentTransferRecord/index.ts | 65 + src/api/eam/inspectionItem/index.ts | 68 + src/api/eam/inspectionItemSelectSet/index.ts | 70 + src/api/eam/item/index.ts | 80 + src/api/eam/itemAccounts/index.ts | 63 + src/api/eam/itemApplyDetail/index.ts | 57 + src/api/eam/itemApplyMain/index.ts | 63 + src/api/eam/itemDelete/index.ts | 65 + src/api/eam/itemInLocation/index.ts | 50 + src/api/eam/itemLocationReplace/index.ts | 49 + src/api/eam/itemMaintenance/index.ts | 52 + src/api/eam/itemOrderDetail/index.ts | 65 + src/api/eam/itemOrderMain/index.ts | 71 + src/api/eam/itemOutLocation/index.ts | 50 + src/api/eam/location/index.ts | 55 + src/api/eam/locationArea/index.ts | 48 + src/api/eam/maintainExperience/index.ts | 51 + src/api/eam/maintenance/index.ts | 88 + src/api/eam/maintenanceItem/index.ts | 61 + src/api/eam/maintenanceItemSelectSet/index.ts | 70 + src/api/eam/planInspection/index.ts | 91 + src/api/eam/planSpotCheck/index.ts | 91 + src/api/eam/recordDeviceChanged/index.ts | 59 + .../eam/relationInspectionPlanItem/index.ts | 57 + src/api/eam/relationMainPart/index.ts | 67 + .../eam/relationMaintenancePlanItem/index.ts | 57 + .../eam/relationSpotCheckPlanItem/index.ts | 57 + src/api/eam/repairExperience/index.ts | 49 + src/api/eam/repairSparePartsRecord/index.ts | 67 + src/api/eam/repairSparePartsRequest/index.ts | 68 + src/api/eam/sparePart/index.ts | 76 + src/api/eam/sparePartsApplyDetail/index.ts | 63 + src/api/eam/sparePartsApplyMain/index.ts | 87 + .../eam/sparePartsInLocationDetail/index.ts | 58 + src/api/eam/sparePartsInLocationMain/index.ts | 91 + .../sparePartsInLocationRecordDetail/index.ts | 58 + .../sparePartsInLocationRecordMain/index.ts | 72 + .../eam/sparePartsOutLocationDetail/index.ts | 61 + .../eam/sparePartsOutLocationMain/index.ts | 81 + .../index.ts | 76 + .../sparePartsOutLocationDetailRecord.js | 54 + .../sparePartsOutLocationRecordMain/index.ts | 71 + src/api/eam/spotCheckItem/index.ts | 62 + src/api/eam/spotCheckSelectSet/index.ts | 72 + .../eam/tableDataExtendedAttribute/index.ts | 65 + src/api/eam/toolAccounts/index.ts | 84 + src/api/eam/toolChangedRecord/index.ts | 59 + src/api/eam/toolEquipmentIn/index.ts | 64 + src/api/eam/toolEquipmentOut/index.ts | 64 + src/api/eam/toolMod/index.ts | 61 + src/api/eam/toolSigning/index.ts | 79 + src/api/eam/transaction/index.ts | 53 + src/api/home/index.ts | 59 + src/api/infra/apiAccessLog/index.ts | 30 + src/api/infra/apiErrorLog/index.ts | 48 + src/api/infra/codegen/index.ts | 123 + src/api/infra/config/index.ts | 57 + src/api/infra/dataSourceConfig/index.ts | 35 + src/api/infra/dbDoc/index.ts | 16 + src/api/infra/file/index.ts | 17 + src/api/infra/fileConfig/index.ts | 61 + src/api/infra/job/index.ts | 63 + src/api/infra/jobLog/index.ts | 33 + src/api/infra/redis/index.ts | 8 + src/api/infra/redis/types.ts | 176 ++ src/api/login/index.ts | 83 + src/api/login/oauth2/index.ts | 41 + src/api/login/types.ts | 28 + src/api/mes/abilityInfo/index.ts | 56 + src/api/mes/dismantlingDetail/index.ts | 56 + src/api/mes/dismantlingMain/index.ts | 55 + src/api/mes/holiday/index.ts | 53 + src/api/mes/holidayCalendar/index.ts | 59 + src/api/mes/hrPersonAbility/index.ts | 58 + src/api/mes/item/index.ts | 61 + src/api/mes/itemRequestDetail/index.ts | 56 + src/api/mes/itemRequestMain/index.ts | 60 + src/api/mes/opersteps/index.ts | 55 + src/api/mes/operstepsType/index.ts | 57 + src/api/mes/orderDay/index.ts | 108 + src/api/mes/orderDayConfig/index.ts | 57 + src/api/mes/ordermonthplan/index.ts | 118 + src/api/mes/pattern/index.ts | 66 + src/api/mes/patternType/index.ts | 54 + src/api/mes/process/index.ts | 158 ++ src/api/mes/processroute/index.ts | 97 + src/api/mes/productBackline/index.ts | 59 + src/api/mes/productOffline/index.ts | 71 + src/api/mes/productionPlan/index.ts | 61 + src/api/mes/qualityclass/index.ts | 55 + src/api/mes/qualityform/index.ts | 50 + src/api/mes/qualityformdetail/index.ts | 56 + src/api/mes/qualityformlog/index.ts | 53 + src/api/mes/qualitygroup/index.ts | 55 + src/api/mes/reportpStore/index.ts | 56 + src/api/mes/reworkBatch/index.ts | 76 + src/api/mes/reworkSingle/index.ts | 76 + src/api/mes/teamSetting/index.ts | 61 + src/api/mes/workScheduling/index.ts | 80 + src/api/mes/workSchedulingDetail/index.ts | 69 + src/api/mes/workSchedulingQaform/index.ts | 63 + src/api/mes/workcalendar/index.ts | 81 + src/api/mes/workstation/index.ts | 160 ++ src/api/opc/automaticShellInsertion/index.ts | 59 + src/api/opc/coverCode/index.ts | 56 + src/api/opc/hexinPatch/index.ts | 60 + src/api/opc/hotPress/index.ts | 70 + src/api/opc/laserWelding/index.ts | 74 + src/api/opc/oneHelium/index.ts | 68 + src/api/opc/packageMylar/index.ts | 67 + src/api/opc/sealingNailWelding/index.ts | 76 + src/api/opc/secondaryInspection/index.ts | 64 + src/api/opc/stackedCoreAdhesive/index.ts | 60 + src/api/opc/topWelded/index.ts | 132 + src/api/opc/ultrasonicFinalWelding/index.ts | 70 + src/api/opc/ultrasonicPreWelding/index.ts | 68 + src/api/opc/weldAdhesiveBond/index.ts | 59 + src/api/qms/aql/index.ts | 120 + src/api/qms/counter/index.ts | 71 + src/api/qms/dynamicRule/index.ts | 67 + .../InspectionJobPackage.ts | 13 + .../inspectionJobDetail/index.ts | 52 + .../inspectionJob/inspectionJobMain/index.ts | 71 + src/api/qms/inspectionMethod/index.ts | 66 + src/api/qms/inspectionQ1/index.ts | 77 + src/api/qms/inspectionQ2/index.ts | 87 + .../inspectionQ3/inspectionQ3Detail/index.ts | 64 + .../inspectionQ3/inspectionQ3Main/index.ts | 65 + .../InspectionRecordPackage.ts | 13 + .../inspectionRecordDetail/index.ts | 47 + .../inspectionRecordMain/index.ts | 100 + .../InspectionRequestPackage.ts | 27 + src/api/qms/inspectionRequest/index.ts | 93 + src/api/qms/inspectionScheme/index.ts | 47 + src/api/qms/inspectionStage/index.ts | 69 + src/api/qms/inspectionTemplate/index.ts | 52 + src/api/qms/qualityNotice/index.ts | 31 + src/api/qms/sampleCode/index.ts | 76 + src/api/qms/samplingProcess/index.ts | 76 + src/api/qms/samplingScheme/index.ts | 64 + src/api/qms/selectedProject/index.ts | 63 + src/api/qms/selectedSet/index.ts | 69 + src/api/redis/index.ts | 21 + src/api/scp/index.ts | 0 src/api/system/area/index.ts | 19 + src/api/system/dept/index.ts | 43 + src/api/system/dict/dict.data.ts | 54 + src/api/system/dict/dict.type.ts | 54 + src/api/system/errorCode/index.ts | 40 + src/api/system/loginLog/index.ts | 24 + src/api/system/mail/account/index.ts | 41 + src/api/system/mail/log/index.ts | 30 + src/api/system/mail/template/index.ts | 55 + src/api/system/menu/index.ts | 49 + src/api/system/messageSet/index.ts | 60 + src/api/system/notice/index.ts | 37 + src/api/system/notify/message/index.ts | 48 + src/api/system/notify/template/index.ts | 59 + src/api/system/oauth2/client.ts | 47 + src/api/system/oauth2/token.ts | 22 + src/api/system/operatelog/index.ts | 33 + src/api/system/password/index.ts | 30 + src/api/system/permission/index.ts | 42 + src/api/system/post/index.ts | 46 + src/api/system/role/index.ts | 66 + src/api/system/sensitiveWord/index.ts | 58 + src/api/system/serialNumber/index.ts | 42 + src/api/system/sms/smsChannel/index.ts | 43 + src/api/system/sms/smsLog/index.ts | 39 + src/api/system/sms/smsTemplate/index.ts | 69 + src/api/system/tableActionRel/index.ts | 64 + src/api/system/tenant/index.ts | 70 + src/api/system/tenantPackage/index.ts | 42 + src/api/system/user/index.ts | 120 + src/api/system/user/profile.ts | 77 + src/api/system/user/socialUser.ts | 31 + src/api/wms/accountcalendar/index.ts | 60 + src/api/wms/agvLocationrelation/index.ts | 59 + src/api/wms/areabasic/index.ts | 77 + src/api/wms/backflushDetailbQad/index.ts | 50 + src/api/wms/backflushRecordDetailb/index.ts | 66 + src/api/wms/backflushRequestDetailb/index.ts | 60 + src/api/wms/balance/index.ts | 248 ++ src/api/wms/barbasic/index.ts | 62 + src/api/wms/barcode/index.ts | 65 + src/api/wms/bom/index.ts | 61 + src/api/wms/bomDismantle/index.ts | 52 + src/api/wms/business/inputBlur.ts | 600 ++++ src/api/wms/businesstype/index.ts | 70 + src/api/wms/callmaterials/index.ts | 59 + src/api/wms/carrier/index.ts | 68 + src/api/wms/condition/index.ts | 56 + src/api/wms/configuration/index.ts | 56 + src/api/wms/configurationsetting/index.ts | 58 + src/api/wms/consumeRecordDetailb/index.ts | 63 + src/api/wms/consumereRequestDetailb/index.ts | 61 + .../wms/containerBindRecordDetail/index.ts | 57 + src/api/wms/containerBindRecordMain/index.ts | 69 + src/api/wms/containerDetail/index.ts | 52 + src/api/wms/containerDetailRequest/index.ts | 60 + .../wms/containerInitRecordDetail/index.ts | 55 + src/api/wms/containerInitRecordMain/index.ts | 68 + src/api/wms/containerMain/index.ts | 61 + src/api/wms/containerMainRequest/index.ts | 149 + src/api/wms/containerRecordDetail/index.ts | 58 + src/api/wms/containerRecordMain/index.ts | 74 + .../wms/containerRepairRecordDetail/index.ts | 53 + .../wms/containerRepairRecordMain/index.ts | 69 + .../wms/containerUnbindRecordDetail/index.ts | 57 + .../wms/containerUnbindRecordMain/index.ts | 69 + src/api/wms/countJobDetail/index.ts | 62 + src/api/wms/countJobMain/index.ts | 115 + src/api/wms/countPlanDetail/index.ts | 52 + src/api/wms/countPlanMain/index.ts | 111 + src/api/wms/countRecordDetail/index.ts | 72 + src/api/wms/countRecordMain/index.ts | 76 + src/api/wms/countRequestDetail/index.ts | 67 + src/api/wms/countRequestMain/index.ts | 118 + src/api/wms/countadjustRecordDetail/index.ts | 69 + src/api/wms/countadjustRecordMain/index.ts | 69 + src/api/wms/countadjustRequestDetail/index.ts | 68 + src/api/wms/countadjustRequestMain/index.ts | 99 + src/api/wms/currencyexchange/index.ts | 57 + src/api/wms/customer/index.ts | 75 + src/api/wms/customerDeliveryForecast/index.ts | 63 + src/api/wms/customerdock/index.ts | 90 + src/api/wms/customeritem/index.ts | 80 + .../wms/customerreceiptRecordDetail/index.ts | 78 + .../wms/customerreceiptRecordMain/index.ts | 79 + .../wms/customerreceiptRequestDetail/index.ts | 68 + .../wms/customerreceiptRequestMain/index.ts | 103 + src/api/wms/customerreturnJobDetail/index.ts | 65 + src/api/wms/customerreturnJobMain/index.ts | 115 + .../wms/customerreturnRecordDetail/index.ts | 78 + src/api/wms/customerreturnRecordMain/index.ts | 91 + .../wms/customerreturnRequestDetail/index.ts | 67 + .../wms/customerreturnRequestMain/index.ts | 125 + .../wms/customersettleRecordDetail/index.ts | 71 + src/api/wms/customersettleRecordMain/index.ts | 73 + .../wms/customersettleRequestDetail/index.ts | 65 + .../wms/customersettleRequestMain/index.ts | 102 + src/api/wms/deliverJobDetail/index.ts | 65 + src/api/wms/deliverJobMain/index.ts | 115 + src/api/wms/deliverPlanDetail/index.ts | 64 + src/api/wms/deliverPlanMain/index.ts | 124 + src/api/wms/deliverRecordDetail/index.ts | 90 + src/api/wms/deliverRecordMain/index.ts | 82 + src/api/wms/deliverRequestDetail/index.ts | 67 + src/api/wms/deliverRequestMain/index.ts | 122 + src/api/wms/demandforecastingDetail/index.ts | 127 + src/api/wms/demandforecastingMain/index.ts | 159 ++ src/api/wms/detail/index.ts | 35 + src/api/wms/dismantleRecordDetailb/index.ts | 66 + src/api/wms/dismantleRequestDetailb/index.ts | 61 + src/api/wms/dock/index.ts | 67 + src/api/wms/documentsetting/index.ts | 60 + src/api/wms/enterprise/index.ts | 64 + src/api/wms/expectin/index.ts | 65 + src/api/wms/expectout/index.ts | 66 + src/api/wms/file/index.ts | 12 + src/api/wms/index.ts | 0 src/api/wms/inspectJobDetail/index.ts | 60 + src/api/wms/inspectJobMain/index.ts | 101 + src/api/wms/inspectRecordDetail/index.ts | 76 + src/api/wms/inspectRecordMain/index.ts | 94 + src/api/wms/inspectRequestDetail/index.ts | 58 + src/api/wms/inspectRequestMain/index.ts | 111 + src/api/wms/interfaceInfo/index.ts | 57 + .../wms/inventorychangeRecordDetail/index.ts | 82 + .../wms/inventorychangeRecordMain/index.ts | 68 + .../wms/inventorychangeRequestDetail/index.ts | 81 + .../wms/inventorychangeRequestMain/index.ts | 97 + .../wms/inventoryinitRecordDetail/index.ts | 80 + src/api/wms/inventoryinitRecordMain/index.ts | 67 + .../wms/inventoryinitRequestDetail/index.ts | 72 + src/api/wms/inventoryinitRequestMain/index.ts | 94 + src/api/wms/inventorymoveJobDetail/index.ts | 66 + src/api/wms/inventorymoveJobMain/index.ts | 192 ++ .../wms/inventorymoveRecordDetail/index.ts | 77 + src/api/wms/inventorymoveRecordMain/index.ts | 173 ++ .../wms/inventorymoveRequestDetail/index.ts | 70 + src/api/wms/inventorymoveRequestMain/index.ts | 182 ++ src/api/wms/invoicingcalendar/index.ts | 54 + src/api/wms/issueJobDetail/index.ts | 71 + src/api/wms/issueJobMain/index.ts | 110 + src/api/wms/issueRecordDetail/index.ts | 77 + src/api/wms/issueRecordMain/index.ts | 75 + src/api/wms/issueRequestDetail/index.ts | 67 + src/api/wms/issueRequestMain/index.ts | 111 + src/api/wms/itemarea/index.ts | 69 + src/api/wms/itemareaDetail/index.ts | 50 + src/api/wms/itembasic/index.ts | 127 + src/api/wms/itempackage/index.ts | 122 + src/api/wms/itemwarehouse/index.ts | 59 + src/api/wms/jobsetting/index.ts | 62 + src/api/wms/labeltype/index.ts | 58 + src/api/wms/location/index.ts | 171 ++ src/api/wms/locationcapacity/index.ts | 57 + src/api/wms/locationgroup/index.ts | 72 + src/api/wms/mesBarCode/index.ts | 71 + .../mesRawMaterialConsumptionInfo/index.ts | 61 + src/api/wms/mstr/index.ts | 56 + .../offlinesettlementRecordDetail/index.ts | 64 + .../wms/offlinesettlementRecordMain/index.ts | 68 + .../offlinesettlementRequestDetail/index.ts | 63 + .../wms/offlinesettlementRequestMain/index.ts | 68 + .../wms/onlinesettlementRecordDetail/index.ts | 64 + .../wms/onlinesettlementRecordMain/index.ts | 68 + .../onlinesettlementRequestDetail/index.ts | 63 + .../wms/onlinesettlementRequestMain/index.ts | 68 + src/api/wms/owner/index.ts | 76 + src/api/wms/package/index.ts | 138 + src/api/wms/packagemergeDetail/index.ts | 67 + src/api/wms/packagemergeMain/index.ts | 68 + src/api/wms/packageoverJobDetail/index.ts | 71 + src/api/wms/packageoverJobMain/index.ts | 87 + src/api/wms/packageoverRecordDetail/index.ts | 67 + src/api/wms/packageoverRecordMain/index.ts | 66 + src/api/wms/packageoverRequestDetail/index.ts | 70 + src/api/wms/packageoverRequestMain/index.ts | 96 + src/api/wms/packageoverRetrospect/index.ts | 83 + src/api/wms/packagesplitDetail/index.ts | 67 + src/api/wms/packagesplitMain/index.ts | 63 + src/api/wms/packageunit/index.ts | 95 + src/api/wms/paramsetting/index.ts | 59 + src/api/wms/pickJobDetail/index.ts | 64 + src/api/wms/pickJobMain/index.ts | 87 + src/api/wms/pickRecordDetail/index.ts | 74 + src/api/wms/pickRecordMain/index.ts | 74 + src/api/wms/pickRequestDetail/index.ts | 62 + src/api/wms/pickRequestMain/index.ts | 72 + src/api/wms/plansetting/index.ts | 63 + src/api/wms/preparetoissueDetail/index.ts | 54 + src/api/wms/preparetoissueMain/index.ts | 115 + .../wms/printBusinesstypeTemplate/index.ts | 49 + src/api/wms/printClientPrinter/index.ts | 49 + src/api/wms/printLabelCorrelation/index.ts | 50 + src/api/wms/process/index.ts | 70 + .../processproductionRecordDetail/index.ts | 61 + .../wms/processproductionRecordMain/index.ts | 62 + .../processproductionRequestDetail/index.ts | 62 + .../wms/processproductionRequestMain/index.ts | 104 + .../wms/productdismantleJobDetail/index.ts | 70 + src/api/wms/productdismantleJobMain/index.ts | 88 + .../productdismantleRecordDetaila/index.ts | 72 + .../wms/productdismantleRecordMain/index.ts | 73 + .../productdismantleRequestDetaila/index.ts | 71 + .../wms/productdismantleRequestMain/index.ts | 101 + src/api/wms/productionDetail/index.ts | 53 + src/api/wms/productionMain/index.ts | 201 ++ .../productionitemcodeSpareitemcode/index.ts | 61 + src/api/wms/productionline/index.ts | 72 + src/api/wms/productionlineitem/index.ts | 90 + .../wms/productionreceiptJobDetail/index.ts | 67 + src/api/wms/productionreceiptJobMain/index.ts | 108 + .../productionreceiptRecordDetail/index.ts | 77 + .../wms/productionreceiptRecordMain/index.ts | 76 + .../wms/productionreturnJobDetail/index.ts | 87 + src/api/wms/productionreturnJobMain/index.ts | 128 + .../wms/productionreturnRecordDetail/index.ts | 96 + .../wms/productionreturnRecordMain/index.ts | 103 + .../productionreturnRequestDetail/index.ts | 73 + .../productionreturnRequestDetailNo/index.ts | 68 + .../wms/productionreturnRequestMain/index.ts | 104 + .../productionreturnRequestMainNo/index.ts | 104 + .../wms/productionscrapRecordDetail/index.ts | 77 + .../wms/productionscrapRecordMain/index.ts | 82 + .../wms/productionscrapRequestDetail/index.ts | 69 + .../wms/productionscrapRequestMain/index.ts | 102 + src/api/wms/productputawayJobDetail/index.ts | 79 + src/api/wms/productputawayJobMain/index.ts | 132 + .../wms/productputawayRecordDetail/index.ts | 100 + src/api/wms/productputawayRecordMain/index.ts | 108 + .../wms/productputawayRequestDetail/index.ts | 80 + .../wms/productputawayRequestMain/index.ts | 141 + src/api/wms/productreceiptDetailb/index.ts | 51 + src/api/wms/productreceiptJobDetail/index.ts | 97 + src/api/wms/productreceiptJobMain/index.ts | 165 ++ .../wms/productreceiptRecordDetail/index.ts | 101 + src/api/wms/productreceiptRecordMain/index.ts | 170 ++ .../wms/productreceiptRequestDetail/index.ts | 103 + .../wms/productreceiptRequestMain/index.ts | 146 + src/api/wms/productredressJobDetail/index.ts | 71 + src/api/wms/productredressJobMain/index.ts | 104 + .../wms/productredressRecordDetail/index.ts | 77 + src/api/wms/productredressRecordMain/index.ts | 75 + .../wms/productredressRequestDetail/index.ts | 73 + .../wms/productredressRequestMain/index.ts | 105 + .../wms/productrepairRecordDetail/index.ts | 72 + src/api/wms/productrepairRecordMain/index.ts | 73 + .../wms/productrepairRequestDetaila/index.ts | 67 + src/api/wms/productrepairRequestMain/index.ts | 107 + src/api/wms/productscrapJobDetail/index.ts | 63 + src/api/wms/productscrapJobMain/index.ts | 79 + src/api/wms/productscrapRecordDetail/index.ts | 70 + src/api/wms/productscrapRecordMain/index.ts | 77 + .../wms/productscrapRequestDetail/index.ts | 65 + src/api/wms/productscrapRequestMain/index.ts | 110 + src/api/wms/project/index.ts | 58 + src/api/wms/purchaseDetail/index.ts | 136 + src/api/wms/purchaseMain/index.ts | 86 + src/api/wms/purchaseMainWms/index.ts | 86 + src/api/wms/purchasePlanDetail/index.ts | 94 + src/api/wms/purchasePlanMain/index.ts | 114 + .../wms/purchaseclaimRecordDetail/index.ts | 66 + src/api/wms/purchaseclaimRecordMain/index.ts | 64 + .../wms/purchaseclaimRequestDetail/index.ts | 53 + src/api/wms/purchaseclaimRequestMain/index.ts | 92 + src/api/wms/purchaseprice/index.ts | 79 + src/api/wms/purchasereceiptJobDetail/index.ts | 109 + src/api/wms/purchasereceiptJobMain/index.ts | 141 + .../wms/purchasereceiptRecordDetail/index.ts | 194 ++ .../wms/purchasereceiptRecordMain/index.ts | 141 + .../wms/purchasereceiptRequestDetail/index.ts | 119 + .../wms/purchasereceiptRequestMain/index.ts | 160 ++ src/api/wms/purchasereturnJobDetail/index.ts | 68 + src/api/wms/purchasereturnJobMain/index.ts | 108 + .../wms/purchasereturnRecordDetail/index.ts | 112 + src/api/wms/purchasereturnRecordMain/index.ts | 112 + .../wms/purchasereturnRequestDetail/index.ts | 131 + .../wms/purchasereturnRequestMain/index.ts | 179 ++ src/api/wms/putawayJobDetail/index.ts | 71 + src/api/wms/putawayJobMain/index.ts | 103 + src/api/wms/putawayRecordDetail/index.ts | 81 + src/api/wms/putawayRecordMain/index.ts | 74 + src/api/wms/putawayRequestDetail/index.ts | 72 + src/api/wms/putawayRequestMain/index.ts | 102 + src/api/wms/qadCostcentre/index.ts | 65 + src/api/wms/qadProject/index.ts | 64 + src/api/wms/qadproductionplan/index.ts | 74 + .../wms/rawMaterialConsumptionInfo/index.ts | 61 + src/api/wms/recommendLocationHistory/index.ts | 57 + src/api/wms/recordsetting/index.ts | 52 + src/api/wms/relegateRecordDetail/index.ts | 74 + src/api/wms/relegateRecordMain/index.ts | 61 + src/api/wms/relegateRequestDetail/index.ts | 73 + src/api/wms/relegateRequestMain/index.ts | 103 + src/api/wms/remark/index.ts | 30 + src/api/wms/repleinshJobDetail/index.ts | 64 + src/api/wms/repleinshJobMain/index.ts | 106 + src/api/wms/repleinshRecordDetail/index.ts | 74 + src/api/wms/repleinshRecordMain/index.ts | 73 + src/api/wms/repleinshRequestDetail/index.ts | 62 + src/api/wms/repleinshRequestMain/index.ts | 102 + src/api/wms/requestsetting/index.ts | 56 + src/api/wms/rule/index.ts | 58 + src/api/wms/saleDetail/index.ts | 66 + src/api/wms/saleMain/index.ts | 69 + src/api/wms/saleShipmentDetail/index.ts | 65 + src/api/wms/saleShipmentDetailRecord/index.ts | 65 + src/api/wms/saleShipmentMain/index.ts | 100 + src/api/wms/saleShipmentMainRecord/index.ts | 66 + src/api/wms/saleprice/index.ts | 58 + src/api/wms/scrapJobDetail/index.ts | 63 + src/api/wms/scrapJobMain/index.ts | 97 + src/api/wms/scrapRecordDetail/index.ts | 70 + src/api/wms/scrapRecordMain/index.ts | 76 + src/api/wms/scrapRequestDetail/index.ts | 65 + src/api/wms/scrapRequestMain/index.ts | 98 + src/api/wms/shift/index.ts | 60 + src/api/wms/stdcostprice/index.ts | 64 + src/api/wms/stockupDetailJob/index.ts | 64 + src/api/wms/stockupDetailRecord/index.ts | 76 + src/api/wms/stockupDetailRequest/index.ts | 65 + src/api/wms/stockupMainJob/index.ts | 116 + src/api/wms/stockupMainRecord/index.ts | 78 + src/api/wms/stockupMainRequest/index.ts | 108 + src/api/wms/strategy/index.ts | 53 + src/api/wms/subjectAccount/index.ts | 66 + src/api/wms/supplier/index.ts | 101 + src/api/wms/supplierApbalanceDetail/index.ts | 70 + src/api/wms/supplierApbalanceMain/index.ts | 72 + src/api/wms/supplierCycle/index.ts | 65 + src/api/wms/supplierUser/index.ts | 59 + .../supplierdeliverInspectionDetail/index.ts | 63 + .../wms/supplierdeliverRecordDetail/index.ts | 98 + .../wms/supplierdeliverRecordMain/index.ts | 88 + .../wms/supplierdeliverRequestDetail/index.ts | 86 + .../wms/supplierdeliverRequestMain/index.ts | 132 + src/api/wms/supplierinvoiceInvoiced/index.ts | 93 + .../wms/supplierinvoiceRecordDeatil/index.ts | 73 + .../wms/supplierinvoiceRecordMain/index.ts | 89 + .../wms/supplierinvoiceRequestDetail/index.ts | 82 + .../wms/supplierinvoiceRequestMain/index.ts | 159 ++ src/api/wms/supplieritem/index.ts | 119 + src/api/wms/switch/index.ts | 56 + src/api/wms/systemInstallPackage/index.ts | 57 + src/api/wms/systemcalendar/index.ts | 57 + src/api/wms/team/index.ts | 74 + src/api/wms/transaction/index.ts | 77 + src/api/wms/transactiontype/index.ts | 67 + src/api/wms/transferissueJobDetail/index.ts | 64 + src/api/wms/transferissueJobMain/index.ts | 107 + .../wms/transferissueRecordDetail/index.ts | 74 + src/api/wms/transferissueRecordMain/index.ts | 78 + .../wms/transferissueRequestDetail/index.ts | 67 + src/api/wms/transferissueRequestMain/index.ts | 106 + src/api/wms/transferlog/index.ts | 86 + src/api/wms/transferreceiptJobDetail/index.ts | 64 + src/api/wms/transferreceiptJobMain/index.ts | 103 + .../wms/transferreceiptRecordDetail/index.ts | 74 + .../wms/transferreceiptRecordMain/index.ts | 79 + .../wms/transferreceiptRequestDetail/index.ts | 65 + .../wms/transferreceiptRequestMain/index.ts | 106 + src/api/wms/unplannedissueJobDetail/index.ts | 63 + src/api/wms/unplannedissueJobMain/index.ts | 97 + .../wms/unplannedissueRecordDetail/index.ts | 111 + src/api/wms/unplannedissueRecordMain/index.ts | 66 + .../wms/unplannedissueRequestDetail/index.ts | 106 + .../wms/unplannedissueRequestMain/index.ts | 149 + .../wms/unplannedreceiptJobDetail/index.ts | 67 + src/api/wms/unplannedreceiptJobMain/index.ts | 98 + .../wms/unplannedreceiptRecordDetail/index.ts | 116 + .../wms/unplannedreceiptRecordMain/index.ts | 76 + .../unplannedreceiptRequestDetail/index.ts | 120 + .../wms/unplannedreceiptRequestMain/index.ts | 102 + src/api/wms/warehouse/index.ts | 83 + src/api/wms/workDetail/index.ts | 47 + src/api/wms/workMain/index.ts | 59 + src/api/wms/workshop/index.ts | 63 + src/api/wms/workstation/index.ts | 84 + src/assets/imgs/Eyes-closed.png | Bin 0 -> 6454 bytes src/assets/imgs/avatar.gif | Bin 0 -> 6334 bytes src/assets/imgs/avatar.jpg | Bin 0 -> 6264 bytes src/assets/imgs/code.png | Bin 0 -> 4871 bytes src/assets/imgs/eye.png | Bin 0 -> 8173 bytes src/assets/imgs/icon1.png | Bin 0 -> 4141 bytes src/assets/imgs/icon2.png | Bin 0 -> 5136 bytes src/assets/imgs/icon3.png | Bin 0 -> 10459 bytes src/assets/imgs/icon4.png | Bin 0 -> 10750 bytes src/assets/imgs/icon5.png | Bin 0 -> 6387 bytes src/assets/imgs/icon6.png | Bin 0 -> 5382 bytes src/assets/imgs/login-bg.png | Bin 0 -> 621246 bytes src/assets/imgs/login-bg1.png | Bin 0 -> 149398 bytes src/assets/imgs/logo.png | Bin 0 -> 16773 bytes src/assets/imgs/logo1.png | Bin 0 -> 52732 bytes src/assets/imgs/logo_w.png | Bin 0 -> 17324 bytes src/assets/imgs/logo_white.png | Bin 0 -> 9975 bytes src/assets/imgs/logo_white.svg | 1 + src/assets/imgs/logo_white1.png | Bin 0 -> 102625 bytes src/assets/imgs/logo_white_blue.png | Bin 0 -> 62441 bytes src/assets/imgs/logo_white_btn.png | Bin 0 -> 20406 bytes src/assets/imgs/profile.jpg | Bin 0 -> 7885 bytes src/assets/imgs/wechat.png | Bin 0 -> 1881 bytes src/assets/svgs/403.svg | 1 + src/assets/svgs/404.svg | 1 + src/assets/svgs/500.svg | 1 + src/assets/svgs/icon.svg | 1 + src/assets/svgs/login-bg.svg | 1 + src/assets/svgs/login-box-bg.svg | 1 + src/assets/svgs/member_balance.svg | 1 + .../svgs/member_expenditure_balance.svg | 1 + src/assets/svgs/member_level.svg | 1 + src/assets/svgs/member_point.svg | 1 + src/assets/svgs/member_recharge_balance.svg | 1 + src/assets/svgs/message.svg | 1 + src/assets/svgs/money.svg | 1 + src/assets/svgs/pay/icon/alipay_app.svg | 1 + src/assets/svgs/pay/icon/alipay_bar.svg | 2 + src/assets/svgs/pay/icon/alipay_pc.svg | 1 + src/assets/svgs/pay/icon/alipay_qr.svg | 2 + src/assets/svgs/pay/icon/alipay_wap.svg | 1 + src/assets/svgs/pay/icon/mock.svg | 1 + src/assets/svgs/pay/icon/wx_app.svg | 2 + src/assets/svgs/pay/icon/wx_bar.svg | 1 + src/assets/svgs/pay/icon/wx_lite.svg | 1 + src/assets/svgs/pay/icon/wx_native.svg | 1 + src/assets/svgs/pay/icon/wx_pub.svg | 2 + src/assets/svgs/peoples.svg | 1 + src/assets/svgs/shopping.svg | 1 + src/components/Annex/index.ts | 3 + src/components/Annex/src/Annex.vue | 178 ++ src/components/Annex/src/AnnexLedger.vue | 176 ++ src/components/AutoIncrementField/index.ts | 3 + .../src/AutoIncrementField.vue | 106 + src/components/Backtop/index.ts | 3 + src/components/Backtop/src/Backtop.vue | 17 + src/components/BasicForm/index.ts | 3 + src/components/BasicForm/src/BasicForm.vue | 1191 ++++++++ .../BasicForm/src/BasicFormQmsNumber.vue | 696 +++++ .../BasicForm/src/BasicFormWmsCount.vue | 1112 ++++++++ src/components/Card/index.ts | 3 + src/components/Card/src/CardTitle.vue | 37 + src/components/ChangeRecord/index.ts | 3 + .../ChangeRecord/src/ChangeRecord.vue | 121 + src/components/CollectionTable/index.ts | 3 + .../CollectionTable/src/CollectionTable.vue | 229 ++ src/components/ConfigGlobal/index.ts | 3 + .../ConfigGlobal/src/ConfigGlobal.vue | 63 + src/components/ContentDetailWrap/index.ts | 3 + .../src/ContentDetailWrap.vue | 58 + src/components/ContentWrap/index.ts | 3 + .../ContentWrap/src/ContentWrap.vue | 34 + src/components/CountTo/index.ts | 3 + src/components/CountTo/src/CountTo.vue | 182 ++ src/components/Crontab/index.ts | 2 + src/components/Crontab/src/Crontab.vue | 1015 +++++++ src/components/Cropper/index.ts | 4 + src/components/Cropper/src/CopperModal.vue | 261 ++ src/components/Cropper/src/Cropper.vue | 183 ++ src/components/Cropper/src/CropperAvatar.vue | 142 + src/components/Cropper/src/types.ts | 8 + src/components/Descriptions/index.ts | 4 + .../Descriptions/src/Descriptions.vue | 207 ++ .../src/DescriptionsItemLabel.vue | 29 + src/components/Detail/index.ts | 3 + src/components/Detail/src/Detail.vue | 1179 ++++++++ src/components/Detail/src/DetailLedger.vue | 1256 ++++++++ src/components/DetailTable/index.ts | 3 + .../DetailTable/src/DetailTable.vue | 104 + src/components/Dialog/index.ts | 3 + src/components/Dialog/src/Dialog.vue | 172 ++ src/components/DictTag/index.ts | 3 + src/components/DictTag/src/DictTag.vue | 87 + src/components/Distinction/index.ts | 3 + .../Distinction/src/Distinction.vue | 81 + src/components/DocAlert/index.vue | 34 + src/components/Echart/index.ts | 3 + src/components/Echart/src/Echart.vue | 115 + src/components/Editor/index.ts | 8 + src/components/Editor/src/Editor.vue | 203 ++ src/components/Error/index.ts | 3 + src/components/Error/src/Error.vue | 58 + src/components/Form/index.ts | 15 + src/components/Form/src/Form.vue | 496 ++++ src/components/Form/src/componentMap.ts | 55 + .../Form/src/components/useRenderCheckbox.tsx | 26 + .../Form/src/components/useRenderRadio.tsx | 26 + .../Form/src/components/useRenderSelect.tsx | 60 + src/components/Form/src/helper.ts | 154 + src/components/Form/src/types.ts | 17 + src/components/Highlight/index.ts | 3 + src/components/Highlight/src/Highlight.vue | 65 + src/components/Icon/index.ts | 4 + src/components/Icon/src/Icon.vue | 85 + src/components/Icon/src/IconSelect.vue | 229 ++ src/components/Icon/src/data.ts | 1961 +++++++++++++ src/components/ImageViewer/index.ts | 33 + .../ImageViewer/src/ImageViewer.vue | 35 + src/components/ImageViewer/src/types.ts | 9 + src/components/ImportForm/index.ts | 3 + .../ImportForm/src/ImportDetailForm.vue | 346 +++ src/components/ImportForm/src/ImportForm.vue | 382 +++ src/components/Infotip/index.ts | 3 + src/components/Infotip/src/Infotip.vue | 54 + src/components/InputPassword/index.ts | 3 + .../InputPassword/src/InputPassword.vue | 152 + src/components/LabelForm/index.ts | 3 + src/components/LabelForm/src/LabelForm.vue | 622 ++++ src/components/ListTable/index.ts | 3 + src/components/ListTable/src/ListTable.vue | 202 ++ src/components/Pagination/index.vue | 87 + src/components/PreviewPDF/index.vue | 64 + src/components/Qrcode/index.ts | 3 + src/components/Qrcode/src/Qrcode.vue | 253 ++ src/components/Remarks/index.ts | 3 + src/components/Remarks/src/Remarks.vue | 120 + src/components/RouterSearch/index.vue | 176 ++ src/components/Search/index.ts | 3 + src/components/Search/src/Search.vue | 392 +++ src/components/SearchHigh/index.ts | 3 + src/components/SearchHigh/src/SearchHigh.vue | 435 +++ src/components/SearchTable/index.ts | 3 + .../SearchTable/src/SearchTable.vue | 312 ++ src/components/SearchTableCount/index.ts | 3 + .../SearchTableCount/src/SearchTableCount.vue | 222 ++ src/components/SearchTableV2/index.ts | 3 + .../SearchTableV2/src/SearchTableV2.vue | 187 ++ src/components/Sticky/index.ts | 3 + src/components/Sticky/src/Sticky.vue | 143 + src/components/Table/index.ts | 12 + src/components/Table/src/Table.vue | 467 +++ src/components/Table/src/helper.ts | 8 + src/components/Table/src/types.ts | 26 + src/components/TableDetail/index.ts | 3 + .../TableDetail/src/TableDetail.vue | 148 + src/components/TableForm/index.ts | 3 + src/components/TableForm/src/TableForm.vue | 819 ++++++ src/components/TableFormAdjustment/index.ts | 3 + .../src/AdjustmentDialog.vue | 68 + .../src/TableFormAdjustment.vue | 455 +++ src/components/TableFormCountPlan/index.ts | 3 + .../src/TableFormCountPlan.vue | 285 ++ src/components/TableHead/index.ts | 3 + src/components/TableHead/src/TableHead.vue | 166 ++ src/components/Tabs/index.ts | 3 + src/components/Tabs/src/Tabs.vue | 66 + src/components/Tooltip/index.ts | 3 + src/components/Tooltip/src/Tooltip.vue | 17 + src/components/UploadFile/index.ts | 5 + src/components/UploadFile/src/Preview.vue | 66 + src/components/UploadFile/src/UploadFile.vue | 186 ++ src/components/UploadFile/src/UploadImg.vue | 272 ++ src/components/UploadFile/src/UploadImgs.vue | 310 ++ src/components/Verifition/index.ts | 3 + src/components/Verifition/src/Verify.vue | 442 +++ .../Verifition/src/Verify/VerifyPoints.vue | 252 ++ .../Verifition/src/Verify/VerifySlide.vue | 414 +++ src/components/Verifition/src/Verify/index.ts | 4 + src/components/Verifition/src/utils/ase.ts | 14 + src/components/Verifition/src/utils/util.ts | 97 + src/components/XButton/index.ts | 6 + src/components/XButton/src/ButtonBase.vue | 121 + src/components/XButton/src/ButtonBaseMore.vue | 135 + src/components/XButton/src/XButton.vue | 50 + src/components/XButton/src/XTextButton.vue | 49 + .../package/designer/ProcessDesigner.vue | 704 +++++ .../package/designer/ProcessViewer.vue | 635 +++++ .../package/designer/index.ts | 8 + .../package/designer/index2.ts | 8 + .../plugins/content-pad/contentPadProvider.js | 423 +++ .../designer/plugins/content-pad/index.js | 6 + .../package/designer/plugins/defaultEmpty.js | 24 + .../descriptor/activitiDescriptor.json | 994 +++++++ .../plugins/descriptor/camundaDescriptor.json | 1010 +++++++ .../descriptor/flowableDescriptor.json | 1207 ++++++++ .../activiti/activitiExtension.js | 83 + .../extension-moddle/activiti/index.js | 11 + .../extension-moddle/camunda/extension.js | 151 + .../plugins/extension-moddle/camunda/index.js | 8 + .../flowable/flowableExtension.js | 83 + .../extension-moddle/flowable/index.js | 10 + .../designer/plugins/palette/CustomPalette.js | 221 ++ .../package/designer/plugins/palette/index.js | 22 + .../plugins/palette/paletteProvider.js | 213 ++ .../plugins/translate/customTranslate.js | 44 + .../package/designer/plugins/translate/zh.js | 240 ++ .../bpmnProcessDesigner/package/index.ts | 11 + .../package/palette/ProcessPalette.vue | 45 + .../package/penal/PropertiesPanel.vue | 211 ++ .../package/penal/base/ElementBaseInfo.vue | 211 ++ .../penal/flow-condition/FlowCondition.vue | 191 ++ .../package/penal/form/ElementForm.vue | 465 +++ .../package/penal/index.js | 7 + .../penal/listeners/ElementListeners.vue | 403 +++ .../penal/listeners/UserTaskListeners.vue | 451 +++ .../package/penal/listeners/template.js | 178 ++ .../package/penal/listeners/utilSelf.ts | 62 + .../multi-instance/ElementMultiInstance.vue | 254 ++ .../penal/other/ElementOtherConfig.vue | 55 + .../penal/properties/ElementProperties.vue | 169 ++ .../penal/signal-message/SignalAndMessage.vue | 113 + .../package/penal/task/ElementTask.vue | 86 + .../task/task-components/ReceiveTask.vue | 125 + .../penal/task/task-components/ScriptTask.vue | 99 + .../penal/task/task-components/UserTask.vue | 98 + .../package/theme/element-variables.scss | 70 + .../package/theme/index.scss | 2 + .../package/theme/process-designer.scss | 161 ++ .../package/theme/process-panel.scss | 107 + .../bpmnProcessDesigner/package/utils.ts | 77 + .../src/highlight/index.js | 5 + .../modules/custom-renderer/CustomRenderer.js | 14 + .../src/modules/custom-renderer/index.js | 6 + .../src/modules/rules/CustomRules.js | 16 + .../src/modules/rules/index.js | 6 + .../bpmnProcessDesigner/src/translations.ts | 25 + .../src/utils/directive/clickOutSide.js | 43 + .../bpmnProcessDesigner/src/utils/index.js | 10 + .../bpmnProcessDesigner/src/utils/xml2json.js | 50 + src/components/iFrame/index.ts | 3 + src/components/iFrame/src/IFrame.vue | 89 + src/components/index.ts | 6 + src/components/rowDrop/index.vue | 280 ++ src/components/workstationBind/index.ts | 3 + src/components/workstationBind/src/Detail.vue | 693 +++++ src/config/axios/config.ts | 30 + src/config/axios/errorCode.ts | 6 + src/config/axios/index.ts | 69 + src/config/axios/service.ts | 247 ++ src/directives/index.ts | 15 + src/directives/permission/clientTable.ts | 73 + src/directives/permission/hasPermi.ts | 27 + src/directives/permission/hasRole.ts | 30 + src/hooks/event/useScrollTo.ts | 60 + src/hooks/web/useCache.ts | 28 + src/hooks/web/useConfigGlobal.ts | 9 + src/hooks/web/useCrudSchemas.ts | 388 +++ src/hooks/web/useDesign.ts | 18 + src/hooks/web/useEmitt.ts | 22 + src/hooks/web/useForm.ts | 94 + src/hooks/web/useI18n.ts | 53 + src/hooks/web/useIcon.ts | 8 + src/hooks/web/useIntro.ts | 47 + src/hooks/web/useLocale.ts | 35 + src/hooks/web/useMessage.ts | 113 + src/hooks/web/useNProgress.ts | 33 + src/hooks/web/usePageLoading.ts | 18 + src/hooks/web/useTable.ts | 242 ++ src/hooks/web/useTimeAgo.ts | 49 + src/hooks/web/useTitle.ts | 25 + src/hooks/web/useValidator.ts | 62 + src/hooks/web/useWatermark.ts | 55 + src/layout/Layout.vue | 78 + src/layout/components/AppView.vue | 62 + src/layout/components/Breadcrumb/index.ts | 3 + .../components/Breadcrumb/src/Breadcrumb.vue | 128 + .../components/Breadcrumb/src/helper.ts | 31 + src/layout/components/CategoryHeader.vue | 168 ++ src/layout/components/Collapse/index.ts | 3 + .../components/Collapse/src/Collapse.vue | 36 + src/layout/components/ContextMenu/index.ts | 10 + .../ContextMenu/src/ContextMenu.vue | 76 + src/layout/components/Footer/index.ts | 3 + src/layout/components/Footer/src/Footer.vue | 25 + src/layout/components/LocaleDropdown/index.ts | 3 + .../LocaleDropdown/src/LocaleDropdown.vue | 52 + src/layout/components/Logo/index.ts | 3 + src/layout/components/Logo/src/Logo.vue | 103 + src/layout/components/Menu/index.ts | 3 + src/layout/components/Menu/src/Menu.vue | 325 +++ .../Menu/src/components/useRenderMenuItem.tsx | 59 + .../src/components/useRenderMenuTitle.tsx | 23 + src/layout/components/Menu/src/helper.ts | 54 + src/layout/components/Message/index.ts | 3 + src/layout/components/Message/src/Message.vue | 139 + src/layout/components/Screenfull/index.ts | 3 + .../components/Screenfull/src/Screenfull.vue | 32 + src/layout/components/Setting/index.ts | 3 + src/layout/components/Setting/src/Setting.vue | 299 ++ .../src/components/ColorRadioPicker.vue | 67 + .../src/components/InterfaceDisplay.vue | 224 ++ .../src/components/LayoutRadioPicker.vue | 172 ++ src/layout/components/SizeDropdown/index.ts | 3 + .../SizeDropdown/src/SizeDropdown.vue | 40 + src/layout/components/TabMenu/index.ts | 3 + src/layout/components/TabMenu/src/TabMenu.vue | 251 ++ src/layout/components/TabMenu/src/helper.ts | 51 + src/layout/components/TagsView/index.ts | 3 + .../components/TagsView/src/TagsView.vue | 585 ++++ src/layout/components/TagsView/src/helper.ts | 21 + src/layout/components/ThemeSwitch/index.ts | 3 + .../ThemeSwitch/src/ThemeSwitch.vue | 46 + src/layout/components/ToolHeader.vue | 102 + src/layout/components/UserInfo/index.ts | 3 + .../components/UserInfo/src/UserInfo.vue | 95 + src/layout/components/useRenderLayout.tsx | 333 +++ src/locales/en-US.ts | 1304 +++++++++ src/locales/zh-CN.ts | 1303 +++++++++ src/main.ts | 86 + src/permission.ts | 75 + src/plugins/animate.css/index.ts | 1 + src/plugins/echarts/index.ts | 45 + src/plugins/elementPlus/index.ts | 17 + src/plugins/formCreate/index.ts | 43 + src/plugins/svgIcon/index.ts | 3 + src/plugins/tongji/index.ts | 23 + src/plugins/unocss/index.ts | 1 + src/plugins/vueI18n/helper.ts | 3 + src/plugins/vueI18n/index.ts | 43 + src/router/index.ts | 28 + src/router/modules/remaining.ts | 420 +++ src/store/index.ts | 10 + src/store/modules/app.ts | 294 ++ src/store/modules/dict.ts | 108 + src/store/modules/locale.ts | 59 + src/store/modules/permission.ts | 76 + src/store/modules/tagsView.ts | 140 + src/store/modules/user.ts | 91 + src/styles/global.module.scss | 6 + src/styles/index.scss | 43 + src/styles/theme.scss | 6 + src/styles/var.css | 67 + src/styles/variables.scss | 4 + src/types/components.d.ts | 56 + src/types/configGlobal.d.ts | 4 + src/types/contextMenu.d.ts | 7 + src/types/descriptions.d.ts | 15 + src/types/elementPlus.d.ts | 3 + src/types/form.d.ts | 46 + src/types/icon.d.ts | 5 + src/types/infoTip.d.ts | 4 + src/types/layout.d.ts | 1 + src/types/localeDropdown.d.ts | 10 + src/types/qrcode.d.ts | 9 + src/types/table.d.ts | 44 + src/types/tableForm.d.ts | 44 + src/types/theme.d.ts | 16 + src/utils/Logger.ts | 100 + src/utils/auth.ts | 100 + src/utils/calculate.ts | 105 + src/utils/color.ts | 153 + src/utils/constants.ts | 360 +++ src/utils/dict.ts | 412 +++ src/utils/disposition/defaultButtons.ts | 1428 ++++++++++ src/utils/disposition/formFields.ts | 1954 +++++++++++++ src/utils/disposition/tableDetailsColumns.ts | 1431 ++++++++++ src/utils/disposition/tableSummaryColumns.ts | 100 + src/utils/disposition/tabsList.ts | 46 + src/utils/domUtils.ts | 289 ++ src/utils/download.ts | 38 + src/utils/filt.ts | 157 + src/utils/formCreate.ts | 54 + src/utils/formRules.ts | 7 + src/utils/formatTime.ts | 254 ++ src/utils/formatter.ts | 27 + src/utils/index.ts | 245 ++ src/utils/is.ts | 107 + src/utils/jsencrypt.ts | 31 + src/utils/permission.ts | 45 + src/utils/propTypes.ts | 28 + src/utils/routerHelper.ts | 238 ++ src/utils/systemParam.ts | 98 + src/utils/tree.ts | 441 +++ src/utils/tsxHelper.ts | 16 + src/utils/validator.ts | 852 ++++++ src/views/bpm/definition/index.vue | 174 ++ src/views/bpm/form/editor/index.vue | 119 + src/views/bpm/form/index.vue | 165 ++ src/views/bpm/group/UserGroupForm.vue | 132 + src/views/bpm/group/index.vue | 149 + src/views/bpm/model/ModelForm.vue | 230 ++ src/views/bpm/model/ModelImportForm.vue | 141 + src/views/bpm/model/editor/index.vue | 117 + src/views/bpm/model/index.vue | 314 ++ src/views/bpm/oa/leave/create.vue | 89 + src/views/bpm/oa/leave/detail.vue | 51 + src/views/bpm/oa/leave/index.vue | 175 ++ .../bpm/processInstance/create/index.vue | 133 + .../detail/ProcessInstanceBpmnViewer.vue | 57 + .../detail/ProcessInstanceTaskList.vue | 97 + .../detail/TaskReturnDialogForm.vue | 90 + .../detail/TaskUpdateAssigneeForm.vue | 83 + .../bpm/processInstance/detail/index.vue | 285 ++ src/views/bpm/processInstance/index.vue | 186 ++ src/views/bpm/task/done/TaskDetail.vue | 51 + src/views/bpm/task/done/index.vue | 125 + src/views/bpm/task/todo/index.vue | 112 + .../bpm/taskAssignRule/TaskAssignRuleForm.vue | 250 ++ src/views/bpm/taskAssignRule/index.vue | 136 + .../SparePartsOutLocationRecord.data.ts | 230 ++ .../eam/SparePartsOutLocationRecord/index.vue | 374 +++ .../eam/adjustRecord/adjustRecord.data.ts | 189 ++ src/views/eam/adjustRecord/index.vue | 323 +++ .../applicationRecordMain.data.ts | 329 +++ src/views/eam/applicationRecord/index.vue | 367 +++ .../basicEamProductionline.data.ts | 234 ++ .../eam/basicEamProductionline/index.vue | 309 ++ .../basicEamWorkshop/basicEamWorkshop.data.ts | 199 ++ src/views/eam/basicEamWorkshop/index.vue | 308 ++ .../basicFaultCause/basicFaultCause.data.ts | 159 ++ src/views/eam/basicFaultCause/index.vue | 291 ++ .../eam/basicFaultType/basicFaultType.data.ts | 146 + src/views/eam/basicFaultType/index.vue | 293 ++ .../basicInspectionOption.data.ts | 201 ++ src/views/eam/basicInspectionOption/index.vue | 311 ++ .../itemSelectSetForm.vue | 387 +++ .../basicMaintenanceOption.data.ts | 204 ++ .../eam/basicMaintenanceOption/index.vue | 311 ++ .../itemSelectSetForm.vue | 393 +++ .../basicSpotCheckOption.data.ts | 200 ++ src/views/eam/basicSpotCheckOption/index.vue | 300 ++ .../itemSelectSetForm.vue | 396 +++ .../eam/classTypeRole/classTypeRole.data.ts | 191 ++ src/views/eam/classTypeRole/index.vue | 313 ++ src/views/eam/countRecord/countRecord.data.ts | 242 ++ src/views/eam/countRecord/index.vue | 339 +++ .../countadjustPlan/countadjustPlan.data.ts | 77 + src/views/eam/countadjustPlan/index.vue | 244 ++ .../countadjustWork/countadjustWork.data.ts | 156 + src/views/eam/countadjustWork/index.vue | 361 +++ .../eam/documentType/documentType.data.ts | 159 ++ src/views/eam/documentType/index.vue | 291 ++ .../documentTypeSelectSet.data.ts | 152 + src/views/eam/documentTypeSelectSet/index.vue | 300 ++ .../itemSelectSetForm.vue | 301 ++ src/views/eam/equipmentAccounts/ablesForm.vue | 121 + .../equipmentAccounts.data.ts | 704 +++++ src/views/eam/equipmentAccounts/index.vue | 549 ++++ .../equipmentInspectionDetail.data.ts | 235 ++ .../eam/equipmentInspectionDetail/index.vue | 246 ++ .../InspectionOrderDetail.vue | 1055 +++++++ .../equipmentInspectionMain.data.ts | 699 +++++ .../equipmentInspectionMain/finishForm1.vue | 133 + .../equipmentInspectionMain/finishForm2.vue | 150 + .../eam/equipmentInspectionMain/index.vue | 550 ++++ .../equipmentInspectionRecordDetail.data.ts | 118 + .../equipmentInspectionRecordDetail/index.vue | 245 ++ .../equipmentInspectionRecordMain.data.ts | 376 +++ .../equipmentInspectionRecordMain/index.vue | 255 ++ .../equipmentMainPart.data.ts | 154 + src/views/eam/equipmentMainPart/index.vue | 294 ++ .../MaintenanceOrderDetail.vue | 1086 +++++++ .../equipmentMaintenanceMain.data.ts | 825 ++++++ .../equipmentMaintenanceMain/finishForm1.vue | 120 + .../equipmentMaintenanceMain/finishForm2.vue | 216 ++ .../eam/equipmentMaintenanceMain/index.vue | 576 ++++ .../equipmentMaintenanceRecordDetail.data.ts | 161 ++ .../index.vue | 245 ++ .../equipmentMaintenanceRecordMain.data.ts | 425 +++ .../equipmentMaintenanceRecordMain/index.vue | 300 ++ .../equipmentManufacturer.data.ts | 153 + src/views/eam/equipmentManufacturer/index.vue | 270 ++ .../equipmentRepairJobDetail.data.ts | 145 + .../eam/equipmentRepairJobDetail/index.vue | 246 ++ .../EquipmentRepairJobDetail.vue | 1086 +++++++ .../equipmentRepairJobMain.data.ts | 822 ++++++ .../equipmentRepairJobMain/finishForm1.vue | 148 + .../equipmentRepairJobMain/finishForm2.vue | 188 ++ .../equipmentRepairJobMain/finishForm3.vue | 143 + .../eam/equipmentRepairJobMain/index.vue | 627 ++++ .../equipmentRepairJobMain/transferForm.vue | 344 +++ .../equipmentRepairRecordDetail.data.ts | 82 + .../eam/equipmentRepairRecordDetail/index.vue | 244 ++ .../equipmentRepairRecordMain.data.ts | 419 +++ .../eam/equipmentRepairRecordMain/index.vue | 327 +++ .../equipmentReportRepairRequest/audiForm.vue | 144 + .../equipmentReportRepairRequest.data.ts | 268 ++ .../equipmentReportRepairRequest/index.vue | 438 +++ .../equipmentShutdown.data.ts | 267 ++ src/views/eam/equipmentShutdown/index.vue | 246 ++ .../equipmentSigning/equipmentSigning.data.ts | 469 +++ src/views/eam/equipmentSigning/index.vue | 288 ++ .../equipmentSpotCheckDetail.data.ts | 257 ++ .../eam/equipmentSpotCheckDetail/index.vue | 245 ++ .../SpotCheckOrderDetail.vue | 1055 +++++++ .../equipmentSpotCheckMain.data.ts | 703 +++++ .../equipmentSpotCheckMain/finishForm1.vue | 121 + .../equipmentSpotCheckMain/finishForm2.vue | 151 + .../eam/equipmentSpotCheckMain/index.vue | 562 ++++ .../equipmentSpotCheckRecordDetail.data.ts | 127 + .../equipmentSpotCheckRecordDetail/index.vue | 246 ++ .../equipmentSpotCheckRecordMain.data.ts | 362 +++ .../equipmentSpotCheckRecordMain/index.vue | 258 ++ .../equipmentSupplier.data.ts | 158 ++ src/views/eam/equipmentSupplier/index.vue | 270 ++ .../equipmentToolSparePart.data.ts | 135 + .../eam/equipmentToolSparePart/index.vue | 244 ++ .../equipmentTransferRecord.data.ts | 368 +++ .../eam/equipmentTransferRecord/index.vue | 267 ++ src/views/eam/inspectionItem/index.vue | 280 ++ .../eam/inspectionItem/inspectionItem.data.ts | 130 + .../eam/inspectionItemSelectSet/index.vue | 287 ++ .../inspectionItemSelectSet.data.ts | 141 + .../itemSelectSetForm.vue | 280 ++ src/views/eam/item/index.vue | 345 +++ src/views/eam/item/item.data.ts | 336 +++ src/views/eam/itemAccounts/index.vue | 411 +++ .../eam/itemAccounts/itemAccounts.data.ts | 356 +++ src/views/eam/itemApplyMain/index.vue | 363 +++ .../eam/itemApplyMain/itemApplyMain.data.ts | 337 +++ src/views/eam/itemDelete/index.vue | 401 +++ src/views/eam/itemDelete/itemAccounts.data.ts | 352 +++ src/views/eam/itemInLocation/index.vue | 225 ++ .../eam/itemInLocation/itemInLocation.data.ts | 53 + src/views/eam/itemLocationReplace/index.vue | 244 ++ .../itemLocationReplace.data.ts | 55 + src/views/eam/itemMaintenance/index.vue | 243 ++ .../itemMaintenance/itemMaintenance.data.ts | 110 + src/views/eam/itemOrderMain/index.vue | 304 ++ .../eam/itemOrderMain/itemOrderMain.data.ts | 310 ++ src/views/eam/itemOutLocation/index.vue | 243 ++ .../itemOutLocation/itemOutLocation.data.ts | 53 + src/views/eam/location/index.vue | 269 ++ src/views/eam/location/location.data.ts | 152 + src/views/eam/locationArea/index.vue | 220 ++ .../eam/locationArea/locationArea.data.ts | 77 + src/views/eam/maintainExperience/index.vue | 256 ++ .../maintainExperience.data.ts | 91 + src/views/eam/maintenance/audiForm.vue | 127 + src/views/eam/maintenance/index.vue | 420 +++ src/views/eam/maintenance/maintenance.data.ts | 533 ++++ src/views/eam/maintenanceItem/index.vue | 268 ++ .../maintenanceItem/maintenanceItem.data.ts | 124 + .../eam/maintenanceItemSelectSet/index.vue | 289 ++ .../itemSelectSetForm.vue | 280 ++ .../maintenanceItemSelectSet.data.ts | 141 + src/views/eam/planInspection/audiForm.vue | 126 + src/views/eam/planInspection/index.vue | 419 +++ .../eam/planInspection/planInspection.data.ts | 404 +++ src/views/eam/planSpotCheck/audiForm.vue | 125 + src/views/eam/planSpotCheck/index.vue | 423 +++ .../eam/planSpotCheck/planSpotCheck.data.ts | 397 +++ src/views/eam/recordDeviceChanged/index.vue | 245 ++ .../recordDeviceChanged.data.ts | 181 ++ src/views/eam/relationMainPart/index.vue | 245 ++ .../relationMainPart/relationMainPart.data.ts | 122 + src/views/eam/repairExperience/index.vue | 259 ++ .../repairExperience/repairExperience.data.ts | 112 + .../eam/repairSparePartsRecord/index.vue | 244 ++ .../repairSparePartsRecord.data.ts | 238 ++ .../eam/repairSparePartsRequest/index.vue | 245 ++ .../repairSparePartsRequest.data.ts | 251 ++ src/views/eam/sparePart/index.vue | 244 ++ src/views/eam/sparePart/sparePart.data.ts | 290 ++ .../SparePartsApply.data.ts | 364 +++ src/views/eam/sparePartsApplyMain/index.vue | 511 ++++ .../eam/sparePartsInLocationRecord/index.vue | 136 + .../sparePartsInLocationRecordMain.data.ts | 230 ++ src/views/eam/sparepartsinlocation/index.vue | 467 +++ .../sparePartsInLocationMain.data.ts | 298 ++ .../SparePartsOutLocation.data.ts | 344 +++ src/views/eam/sparepartsoutlocation/index.vue | 399 +++ src/views/eam/spotCheckItem/index.vue | 269 ++ .../eam/spotCheckItem/spotCheckItem.data.ts | 123 + src/views/eam/spotCheckSelectSet/index.vue | 287 ++ .../spotCheckSelectSet/itemSelectSetForm.vue | 287 ++ .../spotCheckSelectSet.data.ts | 147 + .../eam/tableDataExtendedAttribute/index.vue | 244 ++ .../tableDataExtendedAttribute.data.ts | 106 + src/views/eam/toolAccounts/index.vue | 557 ++++ .../eam/toolAccounts/toolAccounts.data.ts | 724 +++++ src/views/eam/toolChangedRecord/index.vue | 244 ++ .../toolChangedRecord.data.ts | 110 + src/views/eam/toolEquipmentIn/index.vue | 291 ++ .../toolEquipmentIn/toolEquipmentIn.data.ts | 350 +++ src/views/eam/toolEquipmentOut/index.vue | 254 ++ .../toolEquipmentOut/toolEquipmentOut.data.ts | 230 ++ src/views/eam/toolMod/index.vue | 286 ++ src/views/eam/toolMod/operateForm.vue | 318 +++ src/views/eam/toolMod/toolMod.data.ts | 156 + src/views/eam/toolSigning/index.vue | 280 ++ src/views/eam/toolSigning/toolSigning.data.ts | 487 ++++ src/views/eam/transaction/index.vue | 252 ++ src/views/eam/transaction/transaction.data.ts | 96 + src/views/error/403.vue | 8 + src/views/error/404.vue | 7 + src/views/error/500.vue | 7 + src/views/home/Index copy.vue | 381 +++ src/views/home/Index2.vue | 319 +++ src/views/home/components/material.vue | 428 +++ src/views/home/components/produce.vue | 373 +++ src/views/home/components/product.vue | 319 +++ src/views/home/components/supplierIndex.vue | 331 +++ ...空白页,暂时去掉部分模块.vue | 510 ++++ src/views/home/echarts-data.ts | 286 ++ src/views/home/index.vue | 19 + src/views/home/types.ts | 55 + .../infra/apiAccessLog/ApiAccessLogDetail.vue | 67 + src/views/infra/apiAccessLog/index.vue | 168 ++ .../infra/apiErrorLog/ApiErrorLogDetail.vue | 81 + src/views/infra/apiErrorLog/index.vue | 250 ++ src/views/infra/build/index.vue | 143 + src/views/infra/codegen/PreviewCode.vue | 222 ++ .../codegen/components/BasicInfoForm.vue | 87 + .../codegen/components/ColumInfoForm.vue | 153 + .../codegen/components/GenerateInfoForm.vue | 391 +++ src/views/infra/codegen/components/index.ts | 4 + src/views/infra/codegen/editTable.vue | 83 + src/views/infra/codegen/importTable.vue | 151 + src/views/infra/codegen/index.vue | 258 ++ src/views/infra/config/ConfigForm.vue | 159 ++ src/views/infra/config/index.vue | 186 ++ src/views/infra/customInterface/index.vue | 22 + .../dataSourceConfig/DataSourceConfigForm.vue | 111 + src/views/infra/dataSourceConfig/index.vue | 87 + src/views/infra/dbDoc/index.vue | 57 + src/views/infra/druid/index.vue | 26 + src/views/infra/file/FileForm.vue | 106 + src/views/infra/file/index.vue | 164 ++ src/views/infra/fileConfig/FileConfigForm.vue | 195 ++ src/views/infra/fileConfig/index.vue | 168 ++ src/views/infra/job/JobDetail.vue | 73 + src/views/infra/job/JobForm.vue | 131 + src/views/infra/job/index.vue | 256 ++ src/views/infra/job/logger/JobLogDetail.vue | 59 + src/views/infra/job/logger/index.vue | 197 ++ src/views/infra/redis/index.vue | 266 ++ src/views/infra/server/index.vue | 29 + src/views/infra/skywalking/index.vue | 25 + src/views/infra/swagger/index.vue | 27 + src/views/infra/testDemo/index.vue | 4 + src/views/infra/webSocket/index.vue | 118 + src/views/login/components/LoginForm.vue | 403 +++ src/views/login/components/LoginFormTitle.vue | 26 + src/views/login/components/MobileForm.vue | 252 ++ src/views/login/components/QRCodePDA.vue | 33 + src/views/login/components/QrCodeForm.vue | 30 + src/views/login/components/RegisterForm.vue | 142 + src/views/login/components/SSOLogin.vue | 199 ++ src/views/login/components/index.ts | 9 + src/views/login/components/useLogin.ts | 42 + src/views/login/forgetPassword.vue | 104 + src/views/login/login.vue | 110 + src/views/login/updatePassword.vue | 108 + src/views/login/updatePasswordNewTips.vue | 128 + src/views/mes/abilityInfo/abilityInfo.data.ts | 172 ++ src/views/mes/abilityInfo/index.vue | 254 ++ src/views/mes/components/Detail.vue | 992 +++++++ .../dismantlingMain/dismantlingMain.data.ts | 364 +++ src/views/mes/dismantlingMain/index.vue | 290 ++ src/views/mes/holiday/holiday.data.ts | 121 + src/views/mes/holiday/index.vue | 226 ++ .../hrPersonAbility/hrPersonAbility.data.ts | 227 ++ src/views/mes/hrPersonAbility/index.vue | 266 ++ src/views/mes/item/index.vue | 352 +++ src/views/mes/item/item.data.ts | 219 ++ src/views/mes/itemRequestMain/index.vue | 261 ++ .../itemRequestMain/itemRequestMain.data.ts | 313 ++ src/views/mes/opersteps/index.vue | 253 ++ src/views/mes/opersteps/opersteps.data.ts | 168 ++ src/views/mes/operstepsType/index.vue | 253 ++ .../mes/operstepsType/operstepsType.data.ts | 167 ++ .../mes/orderDay/components/BasicFormV2.vue | 466 +++ .../mes/orderDay/components/orderDetail.vue | 213 ++ .../mes/orderDay/components/schedule.vue | 761 +++++ .../orderDay/components/scheduleDetail.vue | 318 +++ src/views/mes/orderDay/index.vue | 375 +++ src/views/mes/orderDay/orderDay.data.ts | 432 +++ src/views/mes/ordermonthplan/index.vue | 341 +++ .../ordermonthplan/mesOrderMonthMain.data.ts | 121 + .../ordermonthplan/mesOrderMonthSub.data.ts | 285 ++ src/views/mes/pattern/index.vue | 253 ++ src/views/mes/pattern/pattern.data.ts | 312 ++ src/views/mes/patternType/index.vue | 253 ++ src/views/mes/patternType/patternType.data.ts | 145 + src/views/mes/process/components/Detail.vue | 820 ++++++ src/views/mes/process/index.vue | 367 +++ src/views/mes/process/process.data.ts | 513 ++++ .../processroute/components/configDialog.vue | 567 ++++ .../processroute/components/graphbase.data.ts | 294 ++ src/views/mes/processroute/index.vue | 290 ++ .../mes/processroute/processroute.data.ts | 160 ++ src/views/mes/productBackline/index.vue | 260 ++ .../productBackline/productBackline.data.ts | 178 ++ src/views/mes/productOffline/index.vue | 260 ++ .../mes/productOffline/productOffline.data.ts | 194 ++ src/views/mes/productionPlan/index.vue | 244 ++ .../mes/productionPlan/productionPlan.data.ts | 282 ++ .../mes/publicUtil/processSearch.data.ts | 28 + src/views/mes/qualityclass/index.vue | 253 ++ .../mes/qualityclass/qualityclass.data.ts | 171 ++ src/views/mes/qualityform/index.vue | 290 ++ src/views/mes/qualityform/qualityform.data.ts | 316 +++ src/views/mes/qualityformlog/index.vue | 243 ++ .../mes/qualityformlog/qualityformlog.data.ts | 207 ++ src/views/mes/qualitygroup/index.vue | 253 ++ .../mes/qualitygroup/qualitygroup.data.ts | 150 + src/views/mes/reportpStore/index.vue | 244 ++ .../mes/reportpStore/reportpStore.data.ts | 111 + src/views/mes/reworkBatch/index.vue | 319 +++ src/views/mes/reworkBatch/reworkBatch.data.ts | 235 ++ src/views/mes/reworkSingle/index.vue | 319 +++ .../mes/reworkSingle/reworkSingle.data.ts | 220 ++ src/views/mes/teamSetting/index.vue | 244 ++ src/views/mes/teamSetting/teamSetting.data.ts | 178 ++ .../mes/workScheduling/components/Detail.vue | 1000 +++++++ .../mes/workScheduling/components/finish.vue | 127 + .../components/qualifiedCheck.vue | 139 + .../mes/workScheduling/components/report.vue | 172 ++ .../workScheduling/components/reportAll.vue | 185 ++ src/views/mes/workScheduling/index.vue | 340 +++ .../mes/workScheduling/workScheduling.data.ts | 399 +++ src/views/mes/workSchedulingQaform/index.vue | 244 ++ .../workSchedulingQaform.data.ts | 211 ++ src/views/mes/workcalendar/index.vue | 903 ++++++ .../mes/workstation/components/Detail.vue | 797 ++++++ src/views/mes/workstation/index.vue | 278 ++ src/views/mes/workstation/workstation.data.ts | 354 +++ .../automaticShellInsertion.data.ts | 172 ++ .../opc/automaticShellInsertion/index.vue | 244 ++ src/views/opc/coverCode/coverCode.data.ts | 158 ++ src/views/opc/coverCode/index.vue | 244 ++ src/views/opc/hexinPatch/hexinPatch.data.ts | 178 ++ src/views/opc/hexinPatch/index.vue | 244 ++ src/views/opc/hotPress/hotPress.data.ts | 222 ++ src/views/opc/hotPress/index.vue | 244 ++ src/views/opc/laserWelding/index.vue | 244 ++ .../opc/laserWelding/laserWelding.data.ts | 262 ++ src/views/opc/oneHelium/index.vue | 244 ++ src/views/opc/oneHelium/oneHelium.data.ts | 226 ++ src/views/opc/packageMylar/index.vue | 244 ++ .../opc/packageMylar/packageMylar.data.ts | 285 ++ src/views/opc/sealingNailWelding/index.vue | 244 ++ .../sealingNailWelding.data.ts | 274 ++ src/views/opc/secondaryInspection/index.vue | 244 ++ .../secondaryInspection.data.ts | 201 ++ src/views/opc/stackedCoreAdhesive/index.vue | 244 ++ .../stackedCoreAdhesive.data.ts | 182 ++ src/views/opc/topWelded/index.vue | 244 ++ src/views/opc/topWelded/topWelded.data.ts | 610 ++++ .../opc/ultrasonicFinalWelding/index.vue | 244 ++ .../ultrasonicFinalWelding.data.ts | 242 ++ src/views/opc/ultrasonicPreWelding/index.vue | 244 ++ .../ultrasonicPreWelding.data.ts | 230 ++ src/views/opc/weldAdhesiveBond/index.vue | 244 ++ .../weldAdhesiveBond/weldAdhesiveBond.data.ts | 175 ++ src/views/profile/components/BasicInfo.vue | 92 + src/views/profile/components/ProfileUser.vue | 99 + src/views/profile/components/ResetPwd.vue | 73 + src/views/profile/components/UserAvatar.vue | 39 + src/views/profile/components/UserSocial.vue | 94 + src/views/profile/components/index.ts | 7 + src/views/profile/index.vue | 64 + src/views/qms/aql/aql.data.ts | 646 +++++ src/views/qms/aql/index.vue | 352 +++ src/views/qms/counter/counter.data.ts | 275 ++ src/views/qms/counter/index.vue | 280 ++ src/views/qms/dynamicRule/dynamicRule.data.ts | 144 + src/views/qms/dynamicRule/index.vue | 472 +++ src/views/qms/inspectionJob/addForm.vue | 1558 ++++++++++ src/views/qms/inspectionJob/detail.vue | 202 ++ src/views/qms/inspectionJob/index.vue | 552 ++++ src/views/qms/inspectionJob/inspectionJob.vue | 14 + .../inspectionJob/inspectionJobMain.data.ts | 885 ++++++ .../inspectionJob/inspectionJobProduction.vue | 14 + .../inspectionJob/inspectionJobPurchase.vue | 15 + src/views/qms/inspectionMethod/index.vue | 345 +++ .../inspectionMethod/inspectionMethod.data.ts | 161 ++ src/views/qms/inspectionQ1/index.vue | 413 +++ .../qms/inspectionQ1/inspectionQ1.data.ts | 495 ++++ src/views/qms/inspectionQ2/index.vue | 870 ++++++ .../qms/inspectionQ2/inspectionQ2.data.ts | 878 ++++++ src/views/qms/inspectionQ3/index.vue | 489 ++++ .../qms/inspectionQ3/inspectionQ3.data.ts | 549 ++++ src/views/qms/inspectionRecord/addForm.vue | 1571 ++++++++++ src/views/qms/inspectionRecord/detail.vue | 477 ++++ src/views/qms/inspectionRecord/index.vue | 547 ++++ .../qms/inspectionRecord/inspectionRecord.vue | 14 + .../inspectionRecordMain.data.ts | 964 +++++++ .../inspectionRecordProduction.vue | 14 + .../inspectionRecordPurchase.vue | 14 + src/views/qms/inspectionRecord/useAddForm.vue | 312 ++ .../qms/inspectionRecordFirst/addForm.vue | 1680 +++++++++++ .../qms/inspectionRecordFirst/detail.vue | 477 ++++ src/views/qms/inspectionRecordFirst/index.vue | 357 +++ .../inspectionRecordFirstMain.data.ts | 493 ++++ .../qms/inspectionRecordFirst/useAddForm.vue | 312 ++ src/views/qms/inspectionRequest/index.vue | 530 ++++ .../inspectionRequestMain.data.ts | 658 +++++ src/views/qms/inspectionScheme/addForm.vue | 1631 +++++++++++ src/views/qms/inspectionScheme/detail.vue | 432 +++ src/views/qms/inspectionScheme/index.vue | 337 +++ .../inspectionScheme/inspectionScheme.data.ts | 269 ++ src/views/qms/inspectionStage/index.vue | 267 ++ .../inspectionStage/inspectionStage.data.ts | 159 ++ src/views/qms/inspectionTemplate/addForm.vue | 1300 +++++++++ src/views/qms/inspectionTemplate/detail.vue | 423 +++ src/views/qms/inspectionTemplate/index.vue | 307 ++ .../inspectionTemplate.data.ts | 351 +++ src/views/qms/qualityNotice/addForm.vue | 438 +++ .../qualityNotice/components/notaicType.vue | 214 ++ .../qualityNotice/components/qualityBatch.vue | 673 +++++ .../components/qualityNotice.vue | 196 ++ src/views/qms/qualityNotice/index.vue | 239 ++ .../qualityNotice/qualityNoticeMain.data.ts | 422 +++ src/views/qms/sampleCode/index.vue | 332 +++ src/views/qms/sampleCode/sampleCode.data.ts | 207 ++ src/views/qms/samplingProcess/index.vue | 396 +++ .../samplingProcess/samplingProcess.data.ts | 190 ++ src/views/qms/samplingScheme/index.vue | 313 ++ .../qms/samplingScheme/samplingScheme.data.ts | 134 + src/views/qms/selectedProject/index.vue | 266 ++ .../selectedProject/selectedProject.data.ts | 81 + src/views/qms/selectedSet/index.vue | 489 ++++ src/views/qms/selectedSet/selectedSet.data.ts | 136 + src/views/redirect/redirect.vue | 28 + src/views/report/goview/index.vue | 10 + src/views/report/jmreport/index.vue | 11 + .../printBusinesstypeTemplate/index.vue | 244 ++ .../printBusinesstypeTemplate.data.ts | 77 + src/views/report/printClientPrinter/index.vue | 246 ++ .../printClientPrinter.data.ts | 70 + src/views/system/area/AreaForm.vue | 72 + src/views/system/area/index.vue | 73 + src/views/system/dept/DeptForm.vue | 173 ++ src/views/system/dept/index.vue | 150 + src/views/system/dict/DictTypeForm.vue | 140 + src/views/system/dict/data/DictDataForm.vue | 183 ++ src/views/system/dict/data/index.vue | 211 ++ src/views/system/dict/index.vue | 187 ++ src/views/system/errorCode/ErrorCodeForm.vue | 112 + src/views/system/errorCode/index.vue | 172 ++ src/views/system/loginlog/LoginLogDetail.vue | 51 + src/views/system/loginlog/index.vue | 141 + .../system/mail/account/MailAccountDetail.vue | 28 + .../system/mail/account/MailAccountForm.vue | 68 + src/views/system/mail/account/account.data.ts | 76 + src/views/system/mail/account/index.vue | 80 + src/views/system/mail/log/MailLogDetail.vue | 33 + src/views/system/mail/log/index.vue | 62 + src/views/system/mail/log/log.data.ts | 133 + .../system/mail/template/MailTemplateForm.vue | 158 ++ .../mail/template/MailTemplateSendForm.vue | 115 + src/views/system/mail/template/index.vue | 84 + .../system/mail/template/template.data.ts | 233 ++ src/views/system/menu/MenuForm.vue | 256 ++ src/views/system/menu/index.vue | 276 ++ src/views/system/messageSet/index.vue | 363 +++ .../system/messageSet/messageSet.data.ts | 364 +++ src/views/system/notice/NoticeForm.vue | 132 + src/views/system/notice/index.vue | 136 + .../notify/message/NotifyMessageDetail.vue | 66 + src/views/system/notify/message/index.vue | 142 + .../notify/my/MyNotifyMessageDetail.vue | 48 + src/views/system/notify/my/index.vue | 216 ++ .../notify/template/NotifyTemplateForm.vue | 276 ++ .../template/NotifyTemplateSendForm.vue | 129 + src/views/system/notify/template/index.vue | 164 ++ src/views/system/oauth2/client/ClientForm.vue | 266 ++ src/views/system/oauth2/client/index.vue | 150 + src/views/system/oauth2/token/index.vue | 122 + .../system/operatelog/OperateLogDetail.vue | 82 + src/views/system/operatelog/index.vue | 160 ++ src/views/system/passwordRule/index.vue | 177 ++ src/views/system/post/PostForm.vue | 125 + src/views/system/post/index.vue | 158 ++ src/views/system/role/RoleAssignMenuForm.vue | 160 ++ .../system/role/RoleDataPermissionForm.vue | 167 ++ src/views/system/role/RoleForm.vue | 126 + src/views/system/role/index.vue | 265 ++ src/views/system/role/role.data.ts | 85 + .../sensitiveWord/SensitiveWordForm.vue | 131 + .../sensitiveWord/SensitiveWordTestForm.vue | 91 + src/views/system/sensitiveWord/index.vue | 192 ++ .../system/serialNumber/SerialNumberForm.vue | 124 + src/views/system/serialNumber/index.vue | 187 ++ .../system/sms/channel/SmsChannelForm.vue | 144 + src/views/system/sms/channel/index.vue | 144 + src/views/system/sms/log/SmsLogDetail.vue | 89 + src/views/system/sms/log/index.vue | 194 ++ .../system/sms/template/SmsTemplateForm.vue | 289 ++ .../sms/template/SmsTemplateSendForm.vue | 120 + src/views/system/sms/template/index.vue | 214 ++ .../system/systemInstallPackage/index.vue | 212 ++ .../systemInstallPackage.data.ts | 133 + src/views/system/tableActionRel/index.vue | 276 ++ .../tableActionRel/tableActionRel.data.ts | 144 + src/views/system/tenant/TenantForm.vue | 188 ++ src/views/system/tenant/index.vue | 197 ++ .../tenantPackage/TenantPackageForm.vue | 194 ++ src/views/system/tenantPackage/index.vue | 138 + src/views/system/user/DeptTree.vue | 63 + src/views/system/user/UserAssignRoleForm.vue | 99 + src/views/system/user/UserForm.vue | 223 ++ src/views/system/user/UserImportForm.vue | 135 + src/views/system/user/index.vue | 309 ++ .../agvLocationrelation.data.ts | 223 ++ .../agvManage/agvLocationrelation/index.vue | 285 ++ .../backflushDetailbQad.data.ts | 118 + .../agvManage/backflushDetailbQad/index.vue | 276 ++ .../wms/agvManage/interfaceInfo/index.vue | 294 ++ .../interfaceInfo/interfaceInfo.data.ts | 152 + .../recommendLocationHistory/index.vue | 244 ++ .../recommendLocationHistory.data.ts | 93 + .../customerManage/customer/customer.data.ts | 334 +++ .../customerManage/customer/index.vue | 274 ++ .../customerDeliveryForecast.data.ts | 155 + .../customerDeliveryForecast/index.vue | 264 ++ .../customerdock/customerdock.data.ts | 383 +++ .../customerManage/customerdock/index.vue | 288 ++ .../customeritem/customeritem.data.ts | 370 +++ .../customerManage/customeritem/index.vue | 312 ++ .../customerManage/project/index.vue | 282 ++ .../customerManage/project/project.data.ts | 225 ++ .../customerManage/saleprice/index.vue | 286 ++ .../saleprice/saleprice.data.ts | 285 ++ .../businesstype/businesstype.data.ts | 488 ++++ .../documentSetting/businesstype/index.vue | 407 +++ .../documentsetting/documentsetting.data.ts | 305 ++ .../documentSetting/documentsetting/index.vue | 254 ++ .../documentSetting/jobsetting/index.vue | 254 ++ .../jobsetting/jobsetting.data.ts | 439 +++ .../documentSetting/plansetting/index.vue | 255 ++ .../plansetting/plansetting.data.ts | 291 ++ .../documentSetting/recordsetting/index.vue | 255 ++ .../recordsetting/recordsetting.data.ts | 189 ++ .../documentSetting/requestsetting/index.vue | 255 ++ .../requestsetting/requestsetting.data.ts | 291 ++ .../documentSetting/switch/index.vue | 246 ++ .../documentSetting/switch/switch.data.ts | 154 + .../documentSetting/transactiontype/index.vue | 256 ++ .../transactiontype/transactiontype.data.ts | 237 ++ .../areabasic/areabasic.data.ts | 286 ++ .../factoryModeling/areabasic/index.vue | 292 ++ .../factoryModeling/dock/dock.data.ts | 333 +++ .../factoryModeling/dock/index.vue | 302 ++ .../enterprise/enterprise.data.ts | 156 + .../factoryModeling/enterprise/index.vue | 266 ++ .../factoryModeling/location/index.vue | 307 ++ .../factoryModeling/location/location.data.ts | 478 ++++ .../factoryModeling/locationgroup/index.vue | 287 ++ .../locationgroup/locationgroup.data.ts | 279 ++ .../factoryModeling/process/index.vue | 294 ++ .../factoryModeling/process/process.data.ts | 290 ++ .../factoryModeling/productionline/index.vue | 287 ++ .../productionline/productionline.data.ts | 297 ++ .../factoryModeling/warehouse/index.vue | 268 ++ .../warehouse/warehouse.data.ts | 218 ++ .../factoryModeling/workshop/index.vue | 269 ++ .../factoryModeling/workshop/workshop.data.ts | 189 ++ .../factoryModeling/workstation/index.vue | 296 ++ .../workstation/workstation.data.ts | 382 +++ .../itemManage/bom/bom.data.ts | 331 +++ .../basicDataManage/itemManage/bom/index.vue | 306 ++ .../itemManage/itemarea/index.vue | 425 +++ .../itemManage/itemarea/itemarea.data.ts | 839 ++++++ .../itemManage/itembasic/index.vue | 360 +++ .../itemManage/itembasic/itembasic.data.ts | 538 ++++ .../itemManage/itempackage/index.vue | 367 +++ .../itempackage/itempackage.data.ts | 316 +++ .../itemManage/itemwarehouse/index.vue | 271 ++ .../itemwarehouse/itemwarehouse.data.ts | 287 ++ .../itemManage/packageunit/index.vue | 313 ++ .../packageunit/packageunit.data.ts | 982 +++++++ .../productionitemcodeSpareitemcode/index.vue | 282 ++ .../productionitemcodeSpareitemcode.data.ts | 175 ++ .../itemManage/productionlineitem/index.vue | 287 ++ .../productionlineitem.data.ts | 306 ++ .../relegate/relegateRecord/index.vue | 261 ++ .../relegateRecord/relegateRecordMain.data.ts | 332 +++ .../relegate/relegateRequest/index.vue | 786 +++++ .../relegateRequestMain.data.ts | 842 ++++++ .../itemManage/stdcostprice/index.vue | 279 ++ .../stdcostprice/stdcostprice.data.ts | 266 ++ .../labelManage/barbasic/barbasic.data.ts | 101 + .../labelManage/barbasic/index.vue | 239 ++ .../labelManage/barcode/barcode.data.ts | 221 ++ .../labelManage/barcode/index.vue | 260 ++ .../callmaterials/callmaterials.data.ts | 515 ++++ .../labelManage/callmaterials/index.vue | 398 +++ .../labelManage/labeltype/index.vue | 253 ++ .../labelManage/labeltype/labeltype.data.ts | 255 ++ .../labelManage/locationLabel/index.vue | 251 ++ .../locationLabel/locationLabel.data.ts | 167 ++ .../labelManage/manufacturePackage/index.vue | 346 +++ .../manufacturePackage.data.ts | 608 ++++ .../labelManage/purchasePackage/index.vue | 342 +++ .../purchasePackage/purchasePackage.data.ts | 806 ++++++ .../labelManage/utensilPackage/index.vue | 279 ++ .../utensilPackage/utensilPackage.data.ts | 179 ++ .../orderManage/carrier/carrier.data.ts | 332 +++ .../orderManage/carrier/index.vue | 274 ++ .../orderManage/owner/index.vue | 275 ++ .../orderManage/owner/owner.data.ts | 332 +++ .../orderManage/shift/index.vue | 281 ++ .../orderManage/shift/shift.data.ts | 273 ++ .../orderManage/team/index.vue | 269 ++ .../orderManage/team/team.data.ts | 258 ++ .../orderManage/team/teamForm.vue | 586 ++++ .../condition/condition.data.ts | 91 + .../strategySetting/condition/index.vue | 219 ++ .../configuration/configuration.data.ts | 84 + .../strategySetting/configuration/index.vue | 219 ++ .../configurationsetting.data.ts | 104 + .../configurationsetting/index.vue | 254 ++ .../strategySetting/paramsetting/index.vue | 225 ++ .../paramsetting/paramsetting.data.ts | 137 + .../strategySetting/rule/index.vue | 253 ++ .../strategySetting/rule/rule.data.ts | 141 + .../arrivalInspectionStrategy/AddForm.vue | 453 +++ .../arrivalInspectionStrategy/index.vue | 166 ++ .../strategy/batchStrategy/AddForm.vue | 649 +++++ .../strategy/batchStrategy/index.vue | 166 ++ .../strategy/downShelfStrategy/AddForm.vue | 1381 +++++++++ .../strategy/downShelfStrategy/index.vue | 170 ++ .../strategy/inspectStrategy/AddForm.vue | 639 +++++ .../strategy/inspectStrategy/index.vue | 164 ++ .../manageAccuracyStrategy/AddForm.vue | 685 +++++ .../strategy/manageAccuracyStrategy/index.vue | 172 ++ .../purchaseReceiptStrategy/AddForm.vue | 495 ++++ .../purchaseReceiptStrategy/index.vue | 167 ++ .../repairMaterialStrategy/AddForm.vue | 644 +++++ .../strategy/repairMaterialStrategy/index.vue | 172 ++ .../storageCapacityStrategy/AddForm.vue | 645 +++++ .../storageCapacityStrategy/index.vue | 166 ++ .../supplieDeliveryStrategy/AddForm.vue | 623 ++++ .../supplieDeliveryStrategy/index.vue | 189 ++ .../strategy/upShelfStrategy/AddForm.vue | 1443 ++++++++++ .../strategy/upShelfStrategy/index.vue | 223 ++ .../utensilCapacityStrategy/AddForm.vue | 500 ++++ .../utensilCapacityStrategy/index.vue | 166 ++ .../warehouseStorageStrategy/AddForm.vue | 614 ++++ .../warehouseStorageStrategy/index.vue | 167 ++ .../basicDataManage/subject/mstr/index.vue | 254 ++ .../basicDataManage/subject/mstr/mstr.data.ts | 153 + .../subject/qadCostcentre/index.vue | 263 ++ .../qadCostcentre/qadCostcentre.data.ts | 210 ++ .../subject/qadProject/index.vue | 263 ++ .../subject/qadProject/qadProject.data.ts | 231 ++ .../subject/subjectAccount/index.vue | 286 ++ .../subjectAccount/subjectAccount.data.ts | 377 +++ .../supplierManage/purchaseprice/index.vue | 292 ++ .../purchaseprice/purchaseprice.data.ts | 285 ++ .../supplierManage/supplier/index.vue | 273 ++ .../supplierManage/supplier/supplier.data.ts | 347 +++ .../supplierManage/supplierCycle/index.vue | 290 ++ .../supplierCycle/supplierCycle.data.ts | 209 ++ .../supplierManage/supplieritem/index.vue | 315 ++ .../supplieritem/supplieritem.data.ts | 431 +++ .../accountcalendar/accountcalendar.data.ts | 323 +++ .../systemSetting/accountcalendar/index.vue | 255 ++ .../currencyexchange/currencyexchange.data.ts | 233 ++ .../systemSetting/currencyexchange/index.vue | 259 ++ .../systemSetting/supplierUser/index.vue | 277 ++ .../supplierUser/supplierUser.data.ts | 248 ++ .../systemSetting/systemcalendar/index.vue | 255 ++ .../systemcalendar/systemcalendar.data.ts | 242 ++ .../wms/buttMesManage/mesBarCode/index.vue | 265 ++ .../mesBarCode/mesBarCode.data.ts | 304 ++ .../count/countJobMain/countJobMain.data.ts | 864 ++++++ .../countManage/count/countJobMain/index.vue | 414 +++ .../count/countPlanMain/countPlanMain.data.ts | 917 ++++++ .../countManage/count/countPlanMain/index.vue | 1365 +++++++++ .../countRecordMain/countRecordMain.data.ts | 670 +++++ .../count/countRecordMain/index.vue | 192 ++ .../countRequestMain/countRequestMain.data.ts | 681 +++++ .../count/countRequestMain/index.vue | 591 ++++ .../countadjustRecordMain.data.ts | 578 ++++ .../countadjustRecordMain/index.vue | 178 ++ .../countadjustRequestMain.data.ts | 681 +++++ .../countadjustRequestMain/index.vue | 410 +++ .../customerreceiptRecordMain.data.ts | 845 ++++++ .../customerreceiptRecordMain/index.vue | 182 ++ .../customerreceiptRequestMain.data.ts | 797 ++++++ .../customerreceiptRequestMain/index.vue | 404 +++ .../customerreturnJobMain.data.ts | 1008 +++++++ .../customerreturnJobMain/index.vue | 391 +++ .../customerreturnRecordMain.data.ts | 975 +++++++ .../customerreturnRecordMain/index.vue | 269 ++ .../customerreturnRequestMain.data.ts | 2204 ++++++++++++++ .../customerreturnRequestMain/index.vue | 835 ++++++ .../customersettleRecordMain.data.ts | 624 ++++ .../customersettleRecordMain/index.vue | 182 ++ .../customersettleRequestMain.data.ts | 755 +++++ .../customersettleRequestMain/index.vue | 426 +++ .../deliverJobMain/deliverJobMain.data.ts | 956 +++++++ .../deliver/deliverJobMain/index.vue | 394 +++ .../deliverRecordMain.data.ts | 858 ++++++ .../deliver/deliverRecordMain/index.vue | 235 ++ .../deliverRequestMain.data.ts | 1155 ++++++++ .../deliver/deliverRequestMain/index.vue | 709 +++++ .../deliverPlanMain/deliverPlanMain.data.ts | 1002 +++++++ .../deliverplan/deliverPlanMain/index.vue | 574 ++++ .../deliverplan/saleMain/index.vue | 342 +++ .../deliverplan/saleMain/saleMain.data.ts | 944 ++++++ .../saleShipmentMainRecord/index.vue | 253 ++ .../saleShipmentMainRecord.data.ts | 358 +++ .../saleShipmentMainRequest/index.vue | 505 ++++ .../saleShipmentMain.data.ts | 590 ++++ .../stockup/stockupMainJob/index.vue | 265 ++ .../stockupMainJob/stockupMainJob.data.ts | 644 +++++ .../stockup/stockupMainRecord/index.vue | 182 ++ .../stockupMainRecord.data.ts | 637 +++++ .../stockup/stockupMainRequest/index.vue | 556 ++++ .../stockupMainRequest.data.ts | 881 ++++++ .../inventoryManage/balance/balance.data.ts | 687 +++++ .../wms/inventoryManage/balance/index.vue | 373 +++ .../balanceSummary/balanceSummary.data.ts | 101 + .../inventoryManage/balanceSummary/index.vue | 221 ++ .../container/containerMain.data.ts | 147 + .../wms/inventoryManage/container/index.vue | 171 ++ .../containerBindRecordMain.data.ts | 180 ++ .../containerBindRecord/index.vue | 307 ++ .../containerRepairRecordMain.data.ts | 146 + .../containerinit/containerRepair/index.vue | 306 ++ .../containerUnbindRecordMain.data.ts | 179 ++ .../containerUnbindRecord/index.vue | 306 ++ .../containerinitadd/containerMain.data.ts | 271 ++ .../containerinit/containerinitadd/index.vue | 330 +++ .../containerInitRecordMain.data.ts | 149 + .../containerinitrecord/index.vue | 299 ++ .../inventoryManage/expectin/expectin.data.ts | 208 ++ .../wms/inventoryManage/expectin/index.vue | 267 ++ .../expectout/expectout.data.ts | 219 ++ .../wms/inventoryManage/expectout/index.vue | 266 ++ .../locationcapacity/index.vue | 221 ++ .../locationcapacity/locationcapacity.data.ts | 95 + .../wms/inventoryManage/package/index.vue | 436 +++ .../inventoryManage/package/package.data.ts | 740 +++++ .../wms/inventoryManage/transaction/index.vue | 222 ++ .../transaction/transaction.data.ts | 458 +++ .../wms/inventoryManage/transferlog/index.vue | 221 ++ .../transferlog/transferlog.data.ts | 453 +++ .../containerMainRequest.data.ts | 605 ++++ .../containerMainRequest/index.vue | 593 ++++ .../containerRecordMain.data.ts | 357 +++ .../containerRecordMain/index.vue | 299 ++ .../initialContainerMainRequest/index.vue | 536 ++++ .../initialContainerMainRequest.data.ts | 575 ++++ .../scrapContainerMainRequest/index.vue | 562 ++++ .../scrapContainerMainRequest.data.ts | 584 ++++ .../inventoryinitRecordMain/index.vue | 240 ++ .../inventoryinitRecordMain.data.ts | 693 +++++ .../inventoryinitRequestMain/index.vue | 517 ++++ .../inventoryinitRequestMain.data.ts | 1230 ++++++++ .../packageManage/packagemergeMain/index.vue | 165 ++ .../packagemergeMain/packagemergeMain.data.ts | 434 +++ .../packageoverJobMain/index.vue | 285 ++ .../packageoverJobMain.data.ts | 847 ++++++ .../packageoverRecordMain/index.vue | 213 ++ .../packageoverRecordMain.data.ts | 555 ++++ .../packageoverRequestMain/index.vue | 486 ++++ .../packageoverRequestMain.data.ts | 974 +++++++ .../packageoverRetrospect/index.vue | 184 ++ .../packageoverRetrospect.data.ts | 439 +++ .../packageManage/packagesplitMain/index.vue | 165 ++ .../packagesplitMain/packagesplitMain.data.ts | 437 +++ .../scrap/scrapJobMain/index.vue | 255 ++ .../scrap/scrapJobMain/scrapJobMain.data.ts | 1036 +++++++ .../scrap/scrapRecordMain/index.vue | 196 ++ .../scrapRecordMain/scrapRecordMain.data.ts | 888 ++++++ .../scrap/scrapRequestMain/index.vue | 769 +++++ .../scrapRequestMain/scrapRequestMain.data.ts | 1337 +++++++++ .../sparepartReturnRecordMain/index.vue | 183 ++ .../sparepartReturnRecordMain.data.ts | 879 ++++++ .../sparepartReturnRequestMain/index.vue | 699 +++++ .../sparepartReturnRequestMain.data.ts | 1788 ++++++++++++ .../sparepartsrequisitionJobMain/index.vue | 255 ++ .../sparepartsrequisitionJobMain.data.ts | 914 ++++++ .../sparepartsrequisitionRecordMain/index.vue | 183 ++ .../sparepartsrequisitionRecordMain.data.ts | 800 ++++++ .../index.vue | 537 ++++ .../sparepartsrequisitionRequestMain.data.ts | 953 +++++++ .../transferissueJobMain/index.vue | 294 ++ .../transferissueJobMain.data.ts | 873 ++++++ .../transferissueRecordMain/index.vue | 182 ++ .../transferissueRecordMain.data.ts | 742 +++++ .../transferissueRequestMain/index.vue | 514 ++++ .../transferissueRequestMain.data.ts | 1035 +++++++ .../transferreceiptJobMain/index.vue | 255 ++ .../transferreceiptJobMain.data.ts | 874 ++++++ .../transferreceiptRecordMain/index.vue | 182 ++ .../transferreceiptRecordMain.data.ts | 743 +++++ .../transferreceiptRequestMain/index.vue | 447 +++ .../transferreceiptRequestMain.data.ts | 718 +++++ .../unplannedissueJobMain/index.vue | 255 ++ .../unplannedissueJobMain.data.ts | 981 +++++++ .../unplannedissueRecordMain/index.vue | 199 ++ .../unplannedissueRecordMain.data.ts | 874 ++++++ .../unplannedissueRequestMain/index.vue | 620 ++++ .../unplannedissueRequestMain.data.ts | 1179 ++++++++ .../unplannedreceiptJobMain/index.vue | 255 ++ .../unplannedreceiptJobMain.data.ts | 1101 +++++++ .../unplannedreceiptRecordMain/index.vue | 199 ++ .../unplannedreceiptRecordMain.data.ts | 926 ++++++ .../unplannedreceiptRequestMain/index.vue | 924 ++++++ .../unplannedreceiptRequestMain.data.ts | 1681 +++++++++++ .../issueManage/issue/issueJobMain/index.vue | 326 +++ .../issue/issueJobMain/issueJobMain.data.ts | 1019 +++++++ .../issue/issueRecordMain/index.vue | 182 ++ .../issueRecordMain/issueRecordMain.data.ts | 885 ++++++ .../issue/issueRequestMain/index.vue | 611 ++++ .../issueRequestMain/issueRequestMain.data.ts | 1322 +++++++++ .../onlinesettlementRecordMain/index.vue | 177 ++ .../onlinesettlementRecordMain.data.ts | 472 +++ .../onlinesettlementRequestMain/index.vue | 352 +++ .../onlinesettlementRequestMain.data.ts | 609 ++++ .../issueManage/pick/pickJobMain/index.vue | 238 ++ .../pick/pickJobMain/pickJobMain.data.ts | 785 +++++ .../issueManage/pick/pickRecordMain/index.vue | 171 ++ .../pickRecordMain/pickRecordMain.data.ts | 641 +++++ .../pick/pickRequestMain/index.vue | 355 +++ .../pickRequestMain/pickRequestMain.data.ts | 598 ++++ .../preparetoissueMain/index.vue | 604 ++++ .../preparetoissueMain.data.ts | 923 ++++++ .../productionreceiptJobMain/index.vue | 326 +++ .../productionreceiptJobMain.data.ts | 896 ++++++ .../productionreceiptRecordMain/index.vue | 182 ++ .../productionreceiptRecordMain.data.ts | 863 ++++++ .../productionreturnJobMain/index.vue | 311 ++ .../productionreturnJobMain.data.ts | 856 ++++++ .../productionreturnRecordMain/index.vue | 191 ++ .../productionreturnRecordMain.data.ts | 757 +++++ .../productionreturnRecordMainHold/index.vue | 266 ++ .../productionreturnRecordMainHold.data.ts | 792 ++++++ .../productionreturnRequestMain/index.vue | 892 ++++++ .../productionreturnRequestMain.data.ts | 1705 +++++++++++ .../productionreturnRequestMainNo/index.vue | 891 ++++++ .../productionreturnRequestMain.data.ts | 1527 ++++++++++ .../productionreturnRequestMainNo.data.ts | 1052 +++++++ .../productionscrapRecordMain/index.vue | 205 ++ .../productionscrapRecordMain.data.ts | 953 +++++++ .../productionscrapRequestMain/index.vue | 891 ++++++ .../productionscrapRequestMain.data.ts | 2524 +++++++++++++++++ .../repleinsh/repleinshJobMain/index.vue | 353 +++ .../repleinshJobMain/repleinshJobMain.data.ts | 964 +++++++ .../repleinsh/repleinshRecordMain/index.vue | 178 ++ .../repleinshRecordMain.data.ts | 809 ++++++ .../repleinsh/repleinshRequestMain/index.vue | 450 +++ .../repleinshRequestMain.data.ts | 943 ++++++ .../inventorychangeRecordMain/index.vue | 186 ++ .../inventorychangeRecordMain.data.ts | 775 +++++ .../inventorychangeRequestMain/index.vue | 555 ++++ .../inventorychangeRequestMain.data.ts | 1037 +++++++ .../inventorymoveJobMain/index.vue | 381 +++ .../inventorymoveJobMain.data.ts | 904 ++++++ .../inventorymoveRecordMain/index.vue | 340 +++ .../inventorymoveRecordMain.data.ts | 747 +++++ .../inventorymoveRecordMainNew/index.vue | 469 +++ .../inventorymoveRecordMainNew.data.ts | 775 +++++ .../inventorymoveRecordRequestMain.data.ts | 988 +++++++ .../inventorymoveRecordMainOKHOLD/index.vue | 307 ++ .../inventorymoveRecordMainOKHOLD.data.ts | 788 +++++ .../inventorymoveRequestMain/index.vue | 827 ++++++ .../inventorymoveRequestMain.data.ts | 951 +++++++ .../inventorymoveRequestMainHOLDWIP/index.vue | 711 +++++ .../inventorymoveRequestMain.data.ts | 950 +++++++ .../inventorymoveRequestMainMOVE/index.vue | 730 +++++ .../inventorymoveRequestMain.data.ts | 951 +++++++ .../inventorymoveRequestMainOKHOLD/index.vue | 768 +++++ .../inventorymoveRequestMain.data.ts | 1567 ++++++++++ src/views/wms/moveManage/itemChange/index.vue | 232 ++ .../moveManage/itemChange/itemChange.data.ts | 499 ++++ .../offlinesettlementRecordMain/index.vue | 182 ++ .../offlinesettlementRecordMain.data.ts | 506 ++++ .../offlinesettlementRequestMain/index.vue | 368 +++ .../offlinesettlementRequestMain.data.ts | 584 ++++ .../processproductionRecord/index.vue | 289 ++ .../processproductionRecordMain.data.ts | 447 +++ .../processproductionRequest/index.vue | 504 ++++ .../processproductionRequestMain.data.ts | 1077 +++++++ .../productdismantleJobMain/index.vue | 249 ++ .../productdismantleJobMain.data.ts | 890 ++++++ .../productdismantleRecordMain/index.vue | 252 ++ .../productdismantleRecordMain.data.ts | 1050 +++++++ .../productdismantleRequestMain/index.vue | 670 +++++ .../productdismantleRequestMain.data.ts | 1505 ++++++++++ .../productionplan/productionMain/index.vue | 684 +++++ .../productionMain/productionMain.data.ts | 1092 +++++++ .../productionMainAssemble/index.vue | 684 +++++ .../productionMainAssemble.data.ts | 1088 +++++++ .../productionMainAssembleSparePart/index.vue | 673 +++++ .../productionMainAssembleSparePart.data.ts | 1049 +++++++ .../productionMainPredictSparePart/index.vue | 676 +++++ .../productionMainPredictSparePart.data.ts | 1035 +++++++ .../qadproductionplan/index.vue | 257 ++ .../qadProductionPlanMain.data.ts | 159 ++ .../productionplan/workMain/index.vue | 324 +++ .../productionplan/workMain/workMain.data.ts | 510 ++++ .../productputawayJobMain/index.vue | 282 ++ .../productputawayJobMain.data.ts | 905 ++++++ .../productputawayRecordMain/index.vue | 192 ++ .../productputawayRecordMain.data.ts | 796 ++++++ .../productputawayRequestMain/index.vue | 452 +++ .../productputawayRequestMain.data.ts | 835 ++++++ .../productputawayAssembleJobMain/index.vue | 276 ++ .../productputawayAssembleJobMain.data.ts | 870 ++++++ .../index.vue | 183 ++ .../productputawayAssembleRecordMain.data.ts | 812 ++++++ .../index.vue | 444 +++ .../productputawayAssembleRequestMain.data.ts | 822 ++++++ .../productreceiptJobMain/index.vue | 385 +++ .../productreceiptJobMain.data.ts | 1027 +++++++ .../productreceiptRecordMain/index.vue | 396 +++ .../productreceiptRecordMain.data.ts | 1092 +++++++ .../productreceiptRequestMain/index.vue | 971 +++++++ .../productreceiptRequestMain.data.ts | 2100 ++++++++++++++ .../mesRawMaterialConsumptionInfo/index.vue | 129 + .../mesRawMaterialConsumptionInfo.data.ts | 188 ++ .../productreceiptAssembleJobMain/index.vue | 315 ++ .../productreceiptAssembleJobMain.data.ts | 1018 +++++++ .../index.vue | 436 +++ .../productreceiptAssembleRecordMain.data.ts | 1211 ++++++++ .../index.vue | 855 ++++++ .../productreceiptAssembleRequestMain.data.ts | 2103 ++++++++++++++ .../rawMaterialConsumptionInfo/index.vue | 152 + .../rawMaterialConsumptionInfo.data.ts | 260 ++ .../productreceiptscrapJobMain/index.vue | 322 +++ .../productreceiptscrapJobMain.data.ts | 967 +++++++ .../productreceiptscrapRecordMain/index.vue | 335 +++ .../productreceiptscrapRecordMain.data.ts | 1041 +++++++ .../productreceiptscrapRequestMain/index.vue | 875 ++++++ .../productreceiptscrapRequestMain.data.ts | 2134 ++++++++++++++ .../productredressJobMain/index.vue | 221 ++ .../productredressJobMain.data.ts | 767 +++++ .../productredressRecordMain/index.vue | 165 ++ .../productredressRecordMain.data.ts | 672 +++++ .../productredressRequestMain/index.vue | 576 ++++ .../productredressRequestMain.data.ts | 955 +++++++ .../productrepairRecordMain/index.vue | 291 ++ .../productrepairRecordMain.data.ts | 952 +++++++ .../productrepairRequestMain/index.vue | 751 +++++ .../productrepairRequestMain.data.ts | 1511 ++++++++++ .../productscrapJobMain/index.vue | 249 ++ .../productscrapJobMain.data.ts | 806 ++++++ .../productscrapRecordMain/index.vue | 308 ++ .../productscrapRecordMain.data.ts | 1049 +++++++ .../productscrapRequestMain/index.vue | 1025 +++++++ .../productscrapRequestMain.data.ts | 1656 +++++++++++ .../inspect/inspectJobMain/index.vue | 259 ++ .../inspectJobMain/inspectJobMain.data.ts | 844 ++++++ .../inspect/inspectRecordMain/index.vue | 209 ++ .../inspectRecordMain.data.ts | 854 ++++++ .../inspect/inspectRequestMain/index.vue | 412 +++ .../inspectRequestMain.data.ts | 703 +++++ .../purchasereceiptJobMain/index.vue | 389 +++ .../purchasereceiptJobMain.data.ts | 1590 +++++++++++ .../purchasereceiptRecordMTypeMain/index.vue | 395 +++ .../purchasereceiptRecordMain.data.ts | 2028 +++++++++++++ .../purchasereceiptRecordMain/index.vue | 410 +++ .../purchasereceiptRecordMain.data.ts | 2028 +++++++++++++ .../purchasereceiptRecordRefuseMain/index.vue | 335 +++ .../purchasereceiptRecordMain.data.ts | 1989 +++++++++++++ .../purchasereceiptReport/index.vue | 157 + .../purchasereceiptRequestMain/index.vue | 1094 +++++++ .../purchasereceiptRequestMain.data.ts | 2519 ++++++++++++++++ .../index.vue | 827 ++++++ .../purchasereceiptRequestMain.data.ts | 2524 +++++++++++++++++ .../purchasereturnJobMain/index.vue | 263 ++ .../purchasereturnJobMain.data.ts | 1089 +++++++ .../index.vue | 203 ++ ...purchasereturnRecordMOrderTypeMain.data.ts | 994 +++++++ .../purchasereturnRecordMain/index.vue | 203 ++ .../purchasereturnRecordMain.data.ts | 984 +++++++ .../index.vue | 1140 ++++++++ ...urchasereturnRequestMOrderTypeMain.data.ts | 1711 +++++++++++ .../purchasereturnRequestMain.data.ts | 1891 ++++++++++++ .../purchasereturnRequestMainNew.data.ts | 597 ++++ .../purchasereturnRequestMain/index.vue | 1093 +++++++ .../purchasereturnRequestMain.data.ts | 1861 ++++++++++++ .../purchasereturnRequestMainNew/index.vue | 1161 ++++++++ .../purchasereturnRequestMain.data.ts | 1886 ++++++++++++ .../purchasereturnRequestMainNew.data.ts | 597 ++++ .../purchasereturnRecordSpareMain/index.vue | 201 ++ .../purchasereturnRecordSpareMain.data.ts | 905 ++++++ .../purchasereturnRequestSpareMain/index.vue | 1034 +++++++ .../purchasereturnRequestSpareMain.data.ts | 1661 +++++++++++ .../purchasereturnRequestSpareMainNew.data.ts | 767 +++++ .../putaway/putawayJobMain/index.vue | 374 +++ .../putawayJobMain/putawayJobMain.data.ts | 1311 +++++++++ .../putaway/putawayRecordMain/index.vue | 237 ++ .../putawayRecordMain.data.ts | 1306 +++++++++ .../putaway/putawayRequestMain/index.vue | 502 ++++ .../putawayRequestMain.data.ts | 1326 +++++++++ .../sparereceiptJobMain/index.vue | 285 ++ .../sparereceiptJobMain.data.ts | 1176 ++++++++ .../sparereceiptRecordMain/index.vue | 197 ++ .../sparereceiptRecordMain.data.ts | 1156 ++++++++ .../sparereceiptRequestMain/index.vue | 682 +++++ .../sparereceiptRequestMain.data.ts | 1956 +++++++++++++ .../demandforecastingMain.data.ts | 503 ++++ .../demandforecastingMain/index.vue | 232 ++ .../demandforecastingMain.data.ts | 399 +++ .../demandforecastingSupplierMain/index.vue | 293 ++ .../supplierdeliver/purchaseMain/index.vue | 611 ++++ .../purchaseMain/purchaseMain.data.ts | 969 +++++++ .../supplierdeliver/purchaseMainWms/index.vue | 615 ++++ .../purchaseMainWms/purchaseMain.data.ts | 974 +++++++ .../purchasePlanMain/index.vue | 946 ++++++ .../purchasePlanMain/purchasePlanMain.data.ts | 929 ++++++ .../supplierdeliver/supplierPackage/index.vue | 279 ++ .../supplierPackage/supplierPackage.data.ts | 424 +++ .../supplierdeliver/supplierResume/index.vue | 42 + .../supplierdeliverInspectionDetail/index.vue | 244 ++ .../supplierdeliverInspectionDetail.data.ts | 190 ++ .../supplierdeliverRecordMain/index.vue | 312 ++ .../supplierdeliverRecordMain.data.ts | 1379 +++++++++ .../supplierdeliverRequestMain/index.vue | 1336 +++++++++ .../supplierdeliverRequestMain/labelForm.vue | 621 ++++ .../supplierdeliverBasicForm.vue | 471 +++ .../supplierdeliverRequestMain.data.ts | 1825 ++++++++++++ src/views/wms/reportList/index.vue | 17 + .../invoicingcalendar/index.vue | 254 ++ .../invoicingcalendar.data.ts | 117 + .../purchaseDiscreteOrderMain/index.vue | 464 +++ .../purchaseDiscreteOrderMain.data.ts | 1863 ++++++++++++ .../purchaseclaimRecordMain/index.vue | 182 ++ .../purchaseclaimRecordMain.data.ts | 382 +++ .../purchaseclaimRequestMain/index.vue | 518 ++++ .../purchaseclaimRequestMain.data.ts | 597 ++++ .../supplierApbalanceDetail/index.vue | 244 ++ .../supplierApbalanceDetail.data.ts | 298 ++ .../supplierApbalanceMain/index.vue | 305 ++ .../supplierApbalanceMain.data.ts | 273 ++ .../supplierinvoiceRecordMain/index.vue | 450 +++ .../supplierinvoiceRecordMain.data.ts | 1879 ++++++++++++ .../supplierinvoiceRequestMain/index.vue | 1591 +++++++++++ .../supplierinvoiceRequestMain.data.ts | 2242 +++++++++++++++ .../index.vue | 504 ++++ ...pplierinvoiceRequestMainDifference.data.ts | 2167 ++++++++++++++ .../supplierinvoiceInvoicedDiscrete/index.vue | 314 ++ .../supplierinvoiceInvoiced.data.ts | 284 ++ .../supplierinvoiceInvoicedSchedule/index.vue | 314 ++ .../supplierinvoiceInvoiced.data.ts | 284 ++ stylelint.config.js | 233 ++ tsconfig.json | 45 + types/components.d.ts | 8 + types/custom-types.d.ts | 27 + types/env.d.ts | 32 + types/global.d.ts | 50 + types/router.d.ts | 81 + uno.config.ts | 105 + vite.config.ts | 81 + 2058 files changed, 544838 insertions(+) create mode 100644 .editorconfig create mode 100644 .env create mode 100644 .env.prod create mode 100644 .env.test create mode 100644 .env.test-scp create mode 100644 .env.wyf create mode 100644 .eslintignore create mode 100644 .eslintrc-auto-import.json create mode 100644 .eslintrc.js create mode 100644 .gitignore create mode 100644 .prettierignore create mode 100644 .stylelintignore create mode 100644 Dockerfile create mode 100644 Dockerfile_prod create mode 100644 Dockerfile_scp create mode 100644 LICENSE create mode 100644 build/vite/index.ts create mode 100644 build/vite/optimize.ts create mode 100644 index.html create mode 100644 nginx.conf create mode 100644 nginx_prod.conf create mode 100644 nginx_scp.conf create mode 100644 package.json create mode 100644 postcss.config.js create mode 100644 prettier.config.js create mode 100644 public/favicon.ico create mode 100644 public/home.png create mode 100644 public/logo.gif create mode 100644 public/systemConfig.js create mode 100644 qodana.yaml create mode 100644 src/App.vue create mode 100644 src/api/bpm/activity/index.ts create mode 100644 src/api/bpm/definition/index.ts create mode 100644 src/api/bpm/form/index.ts create mode 100644 src/api/bpm/leave/index.ts create mode 100644 src/api/bpm/model/index.ts create mode 100644 src/api/bpm/processInstance/index.ts create mode 100644 src/api/bpm/task/index.ts create mode 100644 src/api/bpm/taskAssignRule/index.ts create mode 100644 src/api/bpm/userGroup/index.ts create mode 100644 src/api/eam/adjustRecordDetail/index.ts create mode 100644 src/api/eam/adjustRecordMain/index.ts create mode 100644 src/api/eam/applicationRecordDetail/index.ts create mode 100644 src/api/eam/applicationRecordMain/index.ts create mode 100644 src/api/eam/attachmentFileUpload/index.ts create mode 100644 src/api/eam/basicEamProductionline/index.ts create mode 100644 src/api/eam/basicEamWorkshop/index.ts create mode 100644 src/api/eam/basicFaultCause/index.ts create mode 100644 src/api/eam/basicFaultType/index.ts create mode 100644 src/api/eam/basicInspectionOption/index.ts create mode 100644 src/api/eam/basicMaintenanceOption/index.ts create mode 100644 src/api/eam/basicSpotCheckOption/index.ts create mode 100644 src/api/eam/classTypeRole/index.ts create mode 100644 src/api/eam/countJobDetail/index.ts create mode 100644 src/api/eam/countJobMain/index.ts create mode 100644 src/api/eam/countRecordDetail/index.ts create mode 100644 src/api/eam/countRecordMain/index.ts create mode 100644 src/api/eam/countadjustPlan/index.ts create mode 100644 src/api/eam/documentType/index.ts create mode 100644 src/api/eam/documentTypeSelectSet/index.ts create mode 100644 src/api/eam/equipmentAccounts/index.ts create mode 100644 src/api/eam/equipmentInspectionDetail/index.ts create mode 100644 src/api/eam/equipmentInspectionMain/index.ts create mode 100644 src/api/eam/equipmentInspectionRecordDetail/index.ts create mode 100644 src/api/eam/equipmentInspectionRecordMain/index.ts create mode 100644 src/api/eam/equipmentMainPart/index.ts create mode 100644 src/api/eam/equipmentMaintenanceDetail/index.ts create mode 100644 src/api/eam/equipmentMaintenanceMain/index.ts create mode 100644 src/api/eam/equipmentMaintenanceRecordDetail/index.ts create mode 100644 src/api/eam/equipmentMaintenanceRecordMain/index.ts create mode 100644 src/api/eam/equipmentManufacturer/index.ts create mode 100644 src/api/eam/equipmentRepairJobDetail/index.ts create mode 100644 src/api/eam/equipmentRepairJobMain/index.ts create mode 100644 src/api/eam/equipmentRepairRecordDetail/index.ts create mode 100644 src/api/eam/equipmentRepairRecordMain/index.ts create mode 100644 src/api/eam/equipmentReportRepairRequest/index.ts create mode 100644 src/api/eam/equipmentShutdown/index.ts create mode 100644 src/api/eam/equipmentSigning/index.ts create mode 100644 src/api/eam/equipmentSpotCheckDetail/index.ts create mode 100644 src/api/eam/equipmentSpotCheckMain/index.ts create mode 100644 src/api/eam/equipmentSpotCheckRecordDetail/index.ts create mode 100644 src/api/eam/equipmentSpotCheckRecordMain/index.ts create mode 100644 src/api/eam/equipmentSupplier/index.ts create mode 100644 src/api/eam/equipmentToolSparePart/index.ts create mode 100644 src/api/eam/equipmentTransferRecord/index.ts create mode 100644 src/api/eam/inspectionItem/index.ts create mode 100644 src/api/eam/inspectionItemSelectSet/index.ts create mode 100644 src/api/eam/item/index.ts create mode 100644 src/api/eam/itemAccounts/index.ts create mode 100644 src/api/eam/itemApplyDetail/index.ts create mode 100644 src/api/eam/itemApplyMain/index.ts create mode 100644 src/api/eam/itemDelete/index.ts create mode 100644 src/api/eam/itemInLocation/index.ts create mode 100644 src/api/eam/itemLocationReplace/index.ts create mode 100644 src/api/eam/itemMaintenance/index.ts create mode 100644 src/api/eam/itemOrderDetail/index.ts create mode 100644 src/api/eam/itemOrderMain/index.ts create mode 100644 src/api/eam/itemOutLocation/index.ts create mode 100644 src/api/eam/location/index.ts create mode 100644 src/api/eam/locationArea/index.ts create mode 100644 src/api/eam/maintainExperience/index.ts create mode 100644 src/api/eam/maintenance/index.ts create mode 100644 src/api/eam/maintenanceItem/index.ts create mode 100644 src/api/eam/maintenanceItemSelectSet/index.ts create mode 100644 src/api/eam/planInspection/index.ts create mode 100644 src/api/eam/planSpotCheck/index.ts create mode 100644 src/api/eam/recordDeviceChanged/index.ts create mode 100644 src/api/eam/relationInspectionPlanItem/index.ts create mode 100644 src/api/eam/relationMainPart/index.ts create mode 100644 src/api/eam/relationMaintenancePlanItem/index.ts create mode 100644 src/api/eam/relationSpotCheckPlanItem/index.ts create mode 100644 src/api/eam/repairExperience/index.ts create mode 100644 src/api/eam/repairSparePartsRecord/index.ts create mode 100644 src/api/eam/repairSparePartsRequest/index.ts create mode 100644 src/api/eam/sparePart/index.ts create mode 100644 src/api/eam/sparePartsApplyDetail/index.ts create mode 100644 src/api/eam/sparePartsApplyMain/index.ts create mode 100644 src/api/eam/sparePartsInLocationDetail/index.ts create mode 100644 src/api/eam/sparePartsInLocationMain/index.ts create mode 100644 src/api/eam/sparePartsInLocationRecordDetail/index.ts create mode 100644 src/api/eam/sparePartsInLocationRecordMain/index.ts create mode 100644 src/api/eam/sparePartsOutLocationDetail/index.ts create mode 100644 src/api/eam/sparePartsOutLocationMain/index.ts create mode 100644 src/api/eam/sparePartsOutLocationRecordDetail/index.ts create mode 100644 src/api/eam/sparePartsOutLocationRecordDetail/sparePartsOutLocationDetailRecord.js create mode 100644 src/api/eam/sparePartsOutLocationRecordMain/index.ts create mode 100644 src/api/eam/spotCheckItem/index.ts create mode 100644 src/api/eam/spotCheckSelectSet/index.ts create mode 100644 src/api/eam/tableDataExtendedAttribute/index.ts create mode 100644 src/api/eam/toolAccounts/index.ts create mode 100644 src/api/eam/toolChangedRecord/index.ts create mode 100644 src/api/eam/toolEquipmentIn/index.ts create mode 100644 src/api/eam/toolEquipmentOut/index.ts create mode 100644 src/api/eam/toolMod/index.ts create mode 100644 src/api/eam/toolSigning/index.ts create mode 100644 src/api/eam/transaction/index.ts create mode 100644 src/api/home/index.ts create mode 100644 src/api/infra/apiAccessLog/index.ts create mode 100644 src/api/infra/apiErrorLog/index.ts create mode 100644 src/api/infra/codegen/index.ts create mode 100644 src/api/infra/config/index.ts create mode 100644 src/api/infra/dataSourceConfig/index.ts create mode 100644 src/api/infra/dbDoc/index.ts create mode 100644 src/api/infra/file/index.ts create mode 100644 src/api/infra/fileConfig/index.ts create mode 100644 src/api/infra/job/index.ts create mode 100644 src/api/infra/jobLog/index.ts create mode 100644 src/api/infra/redis/index.ts create mode 100644 src/api/infra/redis/types.ts create mode 100644 src/api/login/index.ts create mode 100644 src/api/login/oauth2/index.ts create mode 100644 src/api/login/types.ts create mode 100644 src/api/mes/abilityInfo/index.ts create mode 100644 src/api/mes/dismantlingDetail/index.ts create mode 100644 src/api/mes/dismantlingMain/index.ts create mode 100644 src/api/mes/holiday/index.ts create mode 100644 src/api/mes/holidayCalendar/index.ts create mode 100644 src/api/mes/hrPersonAbility/index.ts create mode 100644 src/api/mes/item/index.ts create mode 100644 src/api/mes/itemRequestDetail/index.ts create mode 100644 src/api/mes/itemRequestMain/index.ts create mode 100644 src/api/mes/opersteps/index.ts create mode 100644 src/api/mes/operstepsType/index.ts create mode 100644 src/api/mes/orderDay/index.ts create mode 100644 src/api/mes/orderDayConfig/index.ts create mode 100644 src/api/mes/ordermonthplan/index.ts create mode 100644 src/api/mes/pattern/index.ts create mode 100644 src/api/mes/patternType/index.ts create mode 100644 src/api/mes/process/index.ts create mode 100644 src/api/mes/processroute/index.ts create mode 100644 src/api/mes/productBackline/index.ts create mode 100644 src/api/mes/productOffline/index.ts create mode 100644 src/api/mes/productionPlan/index.ts create mode 100644 src/api/mes/qualityclass/index.ts create mode 100644 src/api/mes/qualityform/index.ts create mode 100644 src/api/mes/qualityformdetail/index.ts create mode 100644 src/api/mes/qualityformlog/index.ts create mode 100644 src/api/mes/qualitygroup/index.ts create mode 100644 src/api/mes/reportpStore/index.ts create mode 100644 src/api/mes/reworkBatch/index.ts create mode 100644 src/api/mes/reworkSingle/index.ts create mode 100644 src/api/mes/teamSetting/index.ts create mode 100644 src/api/mes/workScheduling/index.ts create mode 100644 src/api/mes/workSchedulingDetail/index.ts create mode 100644 src/api/mes/workSchedulingQaform/index.ts create mode 100644 src/api/mes/workcalendar/index.ts create mode 100644 src/api/mes/workstation/index.ts create mode 100644 src/api/opc/automaticShellInsertion/index.ts create mode 100644 src/api/opc/coverCode/index.ts create mode 100644 src/api/opc/hexinPatch/index.ts create mode 100644 src/api/opc/hotPress/index.ts create mode 100644 src/api/opc/laserWelding/index.ts create mode 100644 src/api/opc/oneHelium/index.ts create mode 100644 src/api/opc/packageMylar/index.ts create mode 100644 src/api/opc/sealingNailWelding/index.ts create mode 100644 src/api/opc/secondaryInspection/index.ts create mode 100644 src/api/opc/stackedCoreAdhesive/index.ts create mode 100644 src/api/opc/topWelded/index.ts create mode 100644 src/api/opc/ultrasonicFinalWelding/index.ts create mode 100644 src/api/opc/ultrasonicPreWelding/index.ts create mode 100644 src/api/opc/weldAdhesiveBond/index.ts create mode 100644 src/api/qms/aql/index.ts create mode 100644 src/api/qms/counter/index.ts create mode 100644 src/api/qms/dynamicRule/index.ts create mode 100644 src/api/qms/inspectionJob/InspectionJobPackage/InspectionJobPackage.ts create mode 100644 src/api/qms/inspectionJob/inspectionJobDetail/index.ts create mode 100644 src/api/qms/inspectionJob/inspectionJobMain/index.ts create mode 100644 src/api/qms/inspectionMethod/index.ts create mode 100644 src/api/qms/inspectionQ1/index.ts create mode 100644 src/api/qms/inspectionQ2/index.ts create mode 100644 src/api/qms/inspectionQ3/inspectionQ3Detail/index.ts create mode 100644 src/api/qms/inspectionQ3/inspectionQ3Main/index.ts create mode 100644 src/api/qms/inspectionRecord/InspectionRecordPackage/InspectionRecordPackage.ts create mode 100644 src/api/qms/inspectionRecord/inspectionRecordDetail/index.ts create mode 100644 src/api/qms/inspectionRecord/inspectionRecordMain/index.ts create mode 100644 src/api/qms/inspectionRequest/InspectionRequestPackage.ts create mode 100644 src/api/qms/inspectionRequest/index.ts create mode 100644 src/api/qms/inspectionScheme/index.ts create mode 100644 src/api/qms/inspectionStage/index.ts create mode 100644 src/api/qms/inspectionTemplate/index.ts create mode 100644 src/api/qms/qualityNotice/index.ts create mode 100644 src/api/qms/sampleCode/index.ts create mode 100644 src/api/qms/samplingProcess/index.ts create mode 100644 src/api/qms/samplingScheme/index.ts create mode 100644 src/api/qms/selectedProject/index.ts create mode 100644 src/api/qms/selectedSet/index.ts create mode 100644 src/api/redis/index.ts create mode 100644 src/api/scp/index.ts create mode 100644 src/api/system/area/index.ts create mode 100644 src/api/system/dept/index.ts create mode 100644 src/api/system/dict/dict.data.ts create mode 100644 src/api/system/dict/dict.type.ts create mode 100644 src/api/system/errorCode/index.ts create mode 100644 src/api/system/loginLog/index.ts create mode 100644 src/api/system/mail/account/index.ts create mode 100644 src/api/system/mail/log/index.ts create mode 100644 src/api/system/mail/template/index.ts create mode 100644 src/api/system/menu/index.ts create mode 100644 src/api/system/messageSet/index.ts create mode 100644 src/api/system/notice/index.ts create mode 100644 src/api/system/notify/message/index.ts create mode 100644 src/api/system/notify/template/index.ts create mode 100644 src/api/system/oauth2/client.ts create mode 100644 src/api/system/oauth2/token.ts create mode 100644 src/api/system/operatelog/index.ts create mode 100644 src/api/system/password/index.ts create mode 100644 src/api/system/permission/index.ts create mode 100644 src/api/system/post/index.ts create mode 100644 src/api/system/role/index.ts create mode 100644 src/api/system/sensitiveWord/index.ts create mode 100644 src/api/system/serialNumber/index.ts create mode 100644 src/api/system/sms/smsChannel/index.ts create mode 100644 src/api/system/sms/smsLog/index.ts create mode 100644 src/api/system/sms/smsTemplate/index.ts create mode 100644 src/api/system/tableActionRel/index.ts create mode 100644 src/api/system/tenant/index.ts create mode 100644 src/api/system/tenantPackage/index.ts create mode 100644 src/api/system/user/index.ts create mode 100644 src/api/system/user/profile.ts create mode 100644 src/api/system/user/socialUser.ts create mode 100644 src/api/wms/accountcalendar/index.ts create mode 100644 src/api/wms/agvLocationrelation/index.ts create mode 100644 src/api/wms/areabasic/index.ts create mode 100644 src/api/wms/backflushDetailbQad/index.ts create mode 100644 src/api/wms/backflushRecordDetailb/index.ts create mode 100644 src/api/wms/backflushRequestDetailb/index.ts create mode 100644 src/api/wms/balance/index.ts create mode 100644 src/api/wms/barbasic/index.ts create mode 100644 src/api/wms/barcode/index.ts create mode 100644 src/api/wms/bom/index.ts create mode 100644 src/api/wms/bomDismantle/index.ts create mode 100644 src/api/wms/business/inputBlur.ts create mode 100644 src/api/wms/businesstype/index.ts create mode 100644 src/api/wms/callmaterials/index.ts create mode 100644 src/api/wms/carrier/index.ts create mode 100644 src/api/wms/condition/index.ts create mode 100644 src/api/wms/configuration/index.ts create mode 100644 src/api/wms/configurationsetting/index.ts create mode 100644 src/api/wms/consumeRecordDetailb/index.ts create mode 100644 src/api/wms/consumereRequestDetailb/index.ts create mode 100644 src/api/wms/containerBindRecordDetail/index.ts create mode 100644 src/api/wms/containerBindRecordMain/index.ts create mode 100644 src/api/wms/containerDetail/index.ts create mode 100644 src/api/wms/containerDetailRequest/index.ts create mode 100644 src/api/wms/containerInitRecordDetail/index.ts create mode 100644 src/api/wms/containerInitRecordMain/index.ts create mode 100644 src/api/wms/containerMain/index.ts create mode 100644 src/api/wms/containerMainRequest/index.ts create mode 100644 src/api/wms/containerRecordDetail/index.ts create mode 100644 src/api/wms/containerRecordMain/index.ts create mode 100644 src/api/wms/containerRepairRecordDetail/index.ts create mode 100644 src/api/wms/containerRepairRecordMain/index.ts create mode 100644 src/api/wms/containerUnbindRecordDetail/index.ts create mode 100644 src/api/wms/containerUnbindRecordMain/index.ts create mode 100644 src/api/wms/countJobDetail/index.ts create mode 100644 src/api/wms/countJobMain/index.ts create mode 100644 src/api/wms/countPlanDetail/index.ts create mode 100644 src/api/wms/countPlanMain/index.ts create mode 100644 src/api/wms/countRecordDetail/index.ts create mode 100644 src/api/wms/countRecordMain/index.ts create mode 100644 src/api/wms/countRequestDetail/index.ts create mode 100644 src/api/wms/countRequestMain/index.ts create mode 100644 src/api/wms/countadjustRecordDetail/index.ts create mode 100644 src/api/wms/countadjustRecordMain/index.ts create mode 100644 src/api/wms/countadjustRequestDetail/index.ts create mode 100644 src/api/wms/countadjustRequestMain/index.ts create mode 100644 src/api/wms/currencyexchange/index.ts create mode 100644 src/api/wms/customer/index.ts create mode 100644 src/api/wms/customerDeliveryForecast/index.ts create mode 100644 src/api/wms/customerdock/index.ts create mode 100644 src/api/wms/customeritem/index.ts create mode 100644 src/api/wms/customerreceiptRecordDetail/index.ts create mode 100644 src/api/wms/customerreceiptRecordMain/index.ts create mode 100644 src/api/wms/customerreceiptRequestDetail/index.ts create mode 100644 src/api/wms/customerreceiptRequestMain/index.ts create mode 100644 src/api/wms/customerreturnJobDetail/index.ts create mode 100644 src/api/wms/customerreturnJobMain/index.ts create mode 100644 src/api/wms/customerreturnRecordDetail/index.ts create mode 100644 src/api/wms/customerreturnRecordMain/index.ts create mode 100644 src/api/wms/customerreturnRequestDetail/index.ts create mode 100644 src/api/wms/customerreturnRequestMain/index.ts create mode 100644 src/api/wms/customersettleRecordDetail/index.ts create mode 100644 src/api/wms/customersettleRecordMain/index.ts create mode 100644 src/api/wms/customersettleRequestDetail/index.ts create mode 100644 src/api/wms/customersettleRequestMain/index.ts create mode 100644 src/api/wms/deliverJobDetail/index.ts create mode 100644 src/api/wms/deliverJobMain/index.ts create mode 100644 src/api/wms/deliverPlanDetail/index.ts create mode 100644 src/api/wms/deliverPlanMain/index.ts create mode 100644 src/api/wms/deliverRecordDetail/index.ts create mode 100644 src/api/wms/deliverRecordMain/index.ts create mode 100644 src/api/wms/deliverRequestDetail/index.ts create mode 100644 src/api/wms/deliverRequestMain/index.ts create mode 100644 src/api/wms/demandforecastingDetail/index.ts create mode 100644 src/api/wms/demandforecastingMain/index.ts create mode 100644 src/api/wms/detail/index.ts create mode 100644 src/api/wms/dismantleRecordDetailb/index.ts create mode 100644 src/api/wms/dismantleRequestDetailb/index.ts create mode 100644 src/api/wms/dock/index.ts create mode 100644 src/api/wms/documentsetting/index.ts create mode 100644 src/api/wms/enterprise/index.ts create mode 100644 src/api/wms/expectin/index.ts create mode 100644 src/api/wms/expectout/index.ts create mode 100644 src/api/wms/file/index.ts create mode 100644 src/api/wms/index.ts create mode 100644 src/api/wms/inspectJobDetail/index.ts create mode 100644 src/api/wms/inspectJobMain/index.ts create mode 100644 src/api/wms/inspectRecordDetail/index.ts create mode 100644 src/api/wms/inspectRecordMain/index.ts create mode 100644 src/api/wms/inspectRequestDetail/index.ts create mode 100644 src/api/wms/inspectRequestMain/index.ts create mode 100644 src/api/wms/interfaceInfo/index.ts create mode 100644 src/api/wms/inventorychangeRecordDetail/index.ts create mode 100644 src/api/wms/inventorychangeRecordMain/index.ts create mode 100644 src/api/wms/inventorychangeRequestDetail/index.ts create mode 100644 src/api/wms/inventorychangeRequestMain/index.ts create mode 100644 src/api/wms/inventoryinitRecordDetail/index.ts create mode 100644 src/api/wms/inventoryinitRecordMain/index.ts create mode 100644 src/api/wms/inventoryinitRequestDetail/index.ts create mode 100644 src/api/wms/inventoryinitRequestMain/index.ts create mode 100644 src/api/wms/inventorymoveJobDetail/index.ts create mode 100644 src/api/wms/inventorymoveJobMain/index.ts create mode 100644 src/api/wms/inventorymoveRecordDetail/index.ts create mode 100644 src/api/wms/inventorymoveRecordMain/index.ts create mode 100644 src/api/wms/inventorymoveRequestDetail/index.ts create mode 100644 src/api/wms/inventorymoveRequestMain/index.ts create mode 100644 src/api/wms/invoicingcalendar/index.ts create mode 100644 src/api/wms/issueJobDetail/index.ts create mode 100644 src/api/wms/issueJobMain/index.ts create mode 100644 src/api/wms/issueRecordDetail/index.ts create mode 100644 src/api/wms/issueRecordMain/index.ts create mode 100644 src/api/wms/issueRequestDetail/index.ts create mode 100644 src/api/wms/issueRequestMain/index.ts create mode 100644 src/api/wms/itemarea/index.ts create mode 100644 src/api/wms/itemareaDetail/index.ts create mode 100644 src/api/wms/itembasic/index.ts create mode 100644 src/api/wms/itempackage/index.ts create mode 100644 src/api/wms/itemwarehouse/index.ts create mode 100644 src/api/wms/jobsetting/index.ts create mode 100644 src/api/wms/labeltype/index.ts create mode 100644 src/api/wms/location/index.ts create mode 100644 src/api/wms/locationcapacity/index.ts create mode 100644 src/api/wms/locationgroup/index.ts create mode 100644 src/api/wms/mesBarCode/index.ts create mode 100644 src/api/wms/mesRawMaterialConsumptionInfo/index.ts create mode 100644 src/api/wms/mstr/index.ts create mode 100644 src/api/wms/offlinesettlementRecordDetail/index.ts create mode 100644 src/api/wms/offlinesettlementRecordMain/index.ts create mode 100644 src/api/wms/offlinesettlementRequestDetail/index.ts create mode 100644 src/api/wms/offlinesettlementRequestMain/index.ts create mode 100644 src/api/wms/onlinesettlementRecordDetail/index.ts create mode 100644 src/api/wms/onlinesettlementRecordMain/index.ts create mode 100644 src/api/wms/onlinesettlementRequestDetail/index.ts create mode 100644 src/api/wms/onlinesettlementRequestMain/index.ts create mode 100644 src/api/wms/owner/index.ts create mode 100644 src/api/wms/package/index.ts create mode 100644 src/api/wms/packagemergeDetail/index.ts create mode 100644 src/api/wms/packagemergeMain/index.ts create mode 100644 src/api/wms/packageoverJobDetail/index.ts create mode 100644 src/api/wms/packageoverJobMain/index.ts create mode 100644 src/api/wms/packageoverRecordDetail/index.ts create mode 100644 src/api/wms/packageoverRecordMain/index.ts create mode 100644 src/api/wms/packageoverRequestDetail/index.ts create mode 100644 src/api/wms/packageoverRequestMain/index.ts create mode 100644 src/api/wms/packageoverRetrospect/index.ts create mode 100644 src/api/wms/packagesplitDetail/index.ts create mode 100644 src/api/wms/packagesplitMain/index.ts create mode 100644 src/api/wms/packageunit/index.ts create mode 100644 src/api/wms/paramsetting/index.ts create mode 100644 src/api/wms/pickJobDetail/index.ts create mode 100644 src/api/wms/pickJobMain/index.ts create mode 100644 src/api/wms/pickRecordDetail/index.ts create mode 100644 src/api/wms/pickRecordMain/index.ts create mode 100644 src/api/wms/pickRequestDetail/index.ts create mode 100644 src/api/wms/pickRequestMain/index.ts create mode 100644 src/api/wms/plansetting/index.ts create mode 100644 src/api/wms/preparetoissueDetail/index.ts create mode 100644 src/api/wms/preparetoissueMain/index.ts create mode 100644 src/api/wms/printBusinesstypeTemplate/index.ts create mode 100644 src/api/wms/printClientPrinter/index.ts create mode 100644 src/api/wms/printLabelCorrelation/index.ts create mode 100644 src/api/wms/process/index.ts create mode 100644 src/api/wms/processproductionRecordDetail/index.ts create mode 100644 src/api/wms/processproductionRecordMain/index.ts create mode 100644 src/api/wms/processproductionRequestDetail/index.ts create mode 100644 src/api/wms/processproductionRequestMain/index.ts create mode 100644 src/api/wms/productdismantleJobDetail/index.ts create mode 100644 src/api/wms/productdismantleJobMain/index.ts create mode 100644 src/api/wms/productdismantleRecordDetaila/index.ts create mode 100644 src/api/wms/productdismantleRecordMain/index.ts create mode 100644 src/api/wms/productdismantleRequestDetaila/index.ts create mode 100644 src/api/wms/productdismantleRequestMain/index.ts create mode 100644 src/api/wms/productionDetail/index.ts create mode 100644 src/api/wms/productionMain/index.ts create mode 100644 src/api/wms/productionitemcodeSpareitemcode/index.ts create mode 100644 src/api/wms/productionline/index.ts create mode 100644 src/api/wms/productionlineitem/index.ts create mode 100644 src/api/wms/productionreceiptJobDetail/index.ts create mode 100644 src/api/wms/productionreceiptJobMain/index.ts create mode 100644 src/api/wms/productionreceiptRecordDetail/index.ts create mode 100644 src/api/wms/productionreceiptRecordMain/index.ts create mode 100644 src/api/wms/productionreturnJobDetail/index.ts create mode 100644 src/api/wms/productionreturnJobMain/index.ts create mode 100644 src/api/wms/productionreturnRecordDetail/index.ts create mode 100644 src/api/wms/productionreturnRecordMain/index.ts create mode 100644 src/api/wms/productionreturnRequestDetail/index.ts create mode 100644 src/api/wms/productionreturnRequestDetailNo/index.ts create mode 100644 src/api/wms/productionreturnRequestMain/index.ts create mode 100644 src/api/wms/productionreturnRequestMainNo/index.ts create mode 100644 src/api/wms/productionscrapRecordDetail/index.ts create mode 100644 src/api/wms/productionscrapRecordMain/index.ts create mode 100644 src/api/wms/productionscrapRequestDetail/index.ts create mode 100644 src/api/wms/productionscrapRequestMain/index.ts create mode 100644 src/api/wms/productputawayJobDetail/index.ts create mode 100644 src/api/wms/productputawayJobMain/index.ts create mode 100644 src/api/wms/productputawayRecordDetail/index.ts create mode 100644 src/api/wms/productputawayRecordMain/index.ts create mode 100644 src/api/wms/productputawayRequestDetail/index.ts create mode 100644 src/api/wms/productputawayRequestMain/index.ts create mode 100644 src/api/wms/productreceiptDetailb/index.ts create mode 100644 src/api/wms/productreceiptJobDetail/index.ts create mode 100644 src/api/wms/productreceiptJobMain/index.ts create mode 100644 src/api/wms/productreceiptRecordDetail/index.ts create mode 100644 src/api/wms/productreceiptRecordMain/index.ts create mode 100644 src/api/wms/productreceiptRequestDetail/index.ts create mode 100644 src/api/wms/productreceiptRequestMain/index.ts create mode 100644 src/api/wms/productredressJobDetail/index.ts create mode 100644 src/api/wms/productredressJobMain/index.ts create mode 100644 src/api/wms/productredressRecordDetail/index.ts create mode 100644 src/api/wms/productredressRecordMain/index.ts create mode 100644 src/api/wms/productredressRequestDetail/index.ts create mode 100644 src/api/wms/productredressRequestMain/index.ts create mode 100644 src/api/wms/productrepairRecordDetail/index.ts create mode 100644 src/api/wms/productrepairRecordMain/index.ts create mode 100644 src/api/wms/productrepairRequestDetaila/index.ts create mode 100644 src/api/wms/productrepairRequestMain/index.ts create mode 100644 src/api/wms/productscrapJobDetail/index.ts create mode 100644 src/api/wms/productscrapJobMain/index.ts create mode 100644 src/api/wms/productscrapRecordDetail/index.ts create mode 100644 src/api/wms/productscrapRecordMain/index.ts create mode 100644 src/api/wms/productscrapRequestDetail/index.ts create mode 100644 src/api/wms/productscrapRequestMain/index.ts create mode 100644 src/api/wms/project/index.ts create mode 100644 src/api/wms/purchaseDetail/index.ts create mode 100644 src/api/wms/purchaseMain/index.ts create mode 100644 src/api/wms/purchaseMainWms/index.ts create mode 100644 src/api/wms/purchasePlanDetail/index.ts create mode 100644 src/api/wms/purchasePlanMain/index.ts create mode 100644 src/api/wms/purchaseclaimRecordDetail/index.ts create mode 100644 src/api/wms/purchaseclaimRecordMain/index.ts create mode 100644 src/api/wms/purchaseclaimRequestDetail/index.ts create mode 100644 src/api/wms/purchaseclaimRequestMain/index.ts create mode 100644 src/api/wms/purchaseprice/index.ts create mode 100644 src/api/wms/purchasereceiptJobDetail/index.ts create mode 100644 src/api/wms/purchasereceiptJobMain/index.ts create mode 100644 src/api/wms/purchasereceiptRecordDetail/index.ts create mode 100644 src/api/wms/purchasereceiptRecordMain/index.ts create mode 100644 src/api/wms/purchasereceiptRequestDetail/index.ts create mode 100644 src/api/wms/purchasereceiptRequestMain/index.ts create mode 100644 src/api/wms/purchasereturnJobDetail/index.ts create mode 100644 src/api/wms/purchasereturnJobMain/index.ts create mode 100644 src/api/wms/purchasereturnRecordDetail/index.ts create mode 100644 src/api/wms/purchasereturnRecordMain/index.ts create mode 100644 src/api/wms/purchasereturnRequestDetail/index.ts create mode 100644 src/api/wms/purchasereturnRequestMain/index.ts create mode 100644 src/api/wms/putawayJobDetail/index.ts create mode 100644 src/api/wms/putawayJobMain/index.ts create mode 100644 src/api/wms/putawayRecordDetail/index.ts create mode 100644 src/api/wms/putawayRecordMain/index.ts create mode 100644 src/api/wms/putawayRequestDetail/index.ts create mode 100644 src/api/wms/putawayRequestMain/index.ts create mode 100644 src/api/wms/qadCostcentre/index.ts create mode 100644 src/api/wms/qadProject/index.ts create mode 100644 src/api/wms/qadproductionplan/index.ts create mode 100644 src/api/wms/rawMaterialConsumptionInfo/index.ts create mode 100644 src/api/wms/recommendLocationHistory/index.ts create mode 100644 src/api/wms/recordsetting/index.ts create mode 100644 src/api/wms/relegateRecordDetail/index.ts create mode 100644 src/api/wms/relegateRecordMain/index.ts create mode 100644 src/api/wms/relegateRequestDetail/index.ts create mode 100644 src/api/wms/relegateRequestMain/index.ts create mode 100644 src/api/wms/remark/index.ts create mode 100644 src/api/wms/repleinshJobDetail/index.ts create mode 100644 src/api/wms/repleinshJobMain/index.ts create mode 100644 src/api/wms/repleinshRecordDetail/index.ts create mode 100644 src/api/wms/repleinshRecordMain/index.ts create mode 100644 src/api/wms/repleinshRequestDetail/index.ts create mode 100644 src/api/wms/repleinshRequestMain/index.ts create mode 100644 src/api/wms/requestsetting/index.ts create mode 100644 src/api/wms/rule/index.ts create mode 100644 src/api/wms/saleDetail/index.ts create mode 100644 src/api/wms/saleMain/index.ts create mode 100644 src/api/wms/saleShipmentDetail/index.ts create mode 100644 src/api/wms/saleShipmentDetailRecord/index.ts create mode 100644 src/api/wms/saleShipmentMain/index.ts create mode 100644 src/api/wms/saleShipmentMainRecord/index.ts create mode 100644 src/api/wms/saleprice/index.ts create mode 100644 src/api/wms/scrapJobDetail/index.ts create mode 100644 src/api/wms/scrapJobMain/index.ts create mode 100644 src/api/wms/scrapRecordDetail/index.ts create mode 100644 src/api/wms/scrapRecordMain/index.ts create mode 100644 src/api/wms/scrapRequestDetail/index.ts create mode 100644 src/api/wms/scrapRequestMain/index.ts create mode 100644 src/api/wms/shift/index.ts create mode 100644 src/api/wms/stdcostprice/index.ts create mode 100644 src/api/wms/stockupDetailJob/index.ts create mode 100644 src/api/wms/stockupDetailRecord/index.ts create mode 100644 src/api/wms/stockupDetailRequest/index.ts create mode 100644 src/api/wms/stockupMainJob/index.ts create mode 100644 src/api/wms/stockupMainRecord/index.ts create mode 100644 src/api/wms/stockupMainRequest/index.ts create mode 100644 src/api/wms/strategy/index.ts create mode 100644 src/api/wms/subjectAccount/index.ts create mode 100644 src/api/wms/supplier/index.ts create mode 100644 src/api/wms/supplierApbalanceDetail/index.ts create mode 100644 src/api/wms/supplierApbalanceMain/index.ts create mode 100644 src/api/wms/supplierCycle/index.ts create mode 100644 src/api/wms/supplierUser/index.ts create mode 100644 src/api/wms/supplierdeliverInspectionDetail/index.ts create mode 100644 src/api/wms/supplierdeliverRecordDetail/index.ts create mode 100644 src/api/wms/supplierdeliverRecordMain/index.ts create mode 100644 src/api/wms/supplierdeliverRequestDetail/index.ts create mode 100644 src/api/wms/supplierdeliverRequestMain/index.ts create mode 100644 src/api/wms/supplierinvoiceInvoiced/index.ts create mode 100644 src/api/wms/supplierinvoiceRecordDeatil/index.ts create mode 100644 src/api/wms/supplierinvoiceRecordMain/index.ts create mode 100644 src/api/wms/supplierinvoiceRequestDetail/index.ts create mode 100644 src/api/wms/supplierinvoiceRequestMain/index.ts create mode 100644 src/api/wms/supplieritem/index.ts create mode 100644 src/api/wms/switch/index.ts create mode 100644 src/api/wms/systemInstallPackage/index.ts create mode 100644 src/api/wms/systemcalendar/index.ts create mode 100644 src/api/wms/team/index.ts create mode 100644 src/api/wms/transaction/index.ts create mode 100644 src/api/wms/transactiontype/index.ts create mode 100644 src/api/wms/transferissueJobDetail/index.ts create mode 100644 src/api/wms/transferissueJobMain/index.ts create mode 100644 src/api/wms/transferissueRecordDetail/index.ts create mode 100644 src/api/wms/transferissueRecordMain/index.ts create mode 100644 src/api/wms/transferissueRequestDetail/index.ts create mode 100644 src/api/wms/transferissueRequestMain/index.ts create mode 100644 src/api/wms/transferlog/index.ts create mode 100644 src/api/wms/transferreceiptJobDetail/index.ts create mode 100644 src/api/wms/transferreceiptJobMain/index.ts create mode 100644 src/api/wms/transferreceiptRecordDetail/index.ts create mode 100644 src/api/wms/transferreceiptRecordMain/index.ts create mode 100644 src/api/wms/transferreceiptRequestDetail/index.ts create mode 100644 src/api/wms/transferreceiptRequestMain/index.ts create mode 100644 src/api/wms/unplannedissueJobDetail/index.ts create mode 100644 src/api/wms/unplannedissueJobMain/index.ts create mode 100644 src/api/wms/unplannedissueRecordDetail/index.ts create mode 100644 src/api/wms/unplannedissueRecordMain/index.ts create mode 100644 src/api/wms/unplannedissueRequestDetail/index.ts create mode 100644 src/api/wms/unplannedissueRequestMain/index.ts create mode 100644 src/api/wms/unplannedreceiptJobDetail/index.ts create mode 100644 src/api/wms/unplannedreceiptJobMain/index.ts create mode 100644 src/api/wms/unplannedreceiptRecordDetail/index.ts create mode 100644 src/api/wms/unplannedreceiptRecordMain/index.ts create mode 100644 src/api/wms/unplannedreceiptRequestDetail/index.ts create mode 100644 src/api/wms/unplannedreceiptRequestMain/index.ts create mode 100644 src/api/wms/warehouse/index.ts create mode 100644 src/api/wms/workDetail/index.ts create mode 100644 src/api/wms/workMain/index.ts create mode 100644 src/api/wms/workshop/index.ts create mode 100644 src/api/wms/workstation/index.ts create mode 100644 src/assets/imgs/Eyes-closed.png create mode 100644 src/assets/imgs/avatar.gif create mode 100644 src/assets/imgs/avatar.jpg create mode 100644 src/assets/imgs/code.png create mode 100644 src/assets/imgs/eye.png create mode 100644 src/assets/imgs/icon1.png create mode 100644 src/assets/imgs/icon2.png create mode 100644 src/assets/imgs/icon3.png create mode 100644 src/assets/imgs/icon4.png create mode 100644 src/assets/imgs/icon5.png create mode 100644 src/assets/imgs/icon6.png create mode 100644 src/assets/imgs/login-bg.png create mode 100644 src/assets/imgs/login-bg1.png create mode 100644 src/assets/imgs/logo.png create mode 100644 src/assets/imgs/logo1.png create mode 100644 src/assets/imgs/logo_w.png create mode 100644 src/assets/imgs/logo_white.png create mode 100644 src/assets/imgs/logo_white.svg create mode 100644 src/assets/imgs/logo_white1.png create mode 100644 src/assets/imgs/logo_white_blue.png create mode 100644 src/assets/imgs/logo_white_btn.png create mode 100644 src/assets/imgs/profile.jpg create mode 100644 src/assets/imgs/wechat.png create mode 100644 src/assets/svgs/403.svg create mode 100644 src/assets/svgs/404.svg create mode 100644 src/assets/svgs/500.svg create mode 100644 src/assets/svgs/icon.svg create mode 100644 src/assets/svgs/login-bg.svg create mode 100644 src/assets/svgs/login-box-bg.svg create mode 100644 src/assets/svgs/member_balance.svg create mode 100644 src/assets/svgs/member_expenditure_balance.svg create mode 100644 src/assets/svgs/member_level.svg create mode 100644 src/assets/svgs/member_point.svg create mode 100644 src/assets/svgs/member_recharge_balance.svg create mode 100644 src/assets/svgs/message.svg create mode 100644 src/assets/svgs/money.svg create mode 100644 src/assets/svgs/pay/icon/alipay_app.svg create mode 100644 src/assets/svgs/pay/icon/alipay_bar.svg create mode 100644 src/assets/svgs/pay/icon/alipay_pc.svg create mode 100644 src/assets/svgs/pay/icon/alipay_qr.svg create mode 100644 src/assets/svgs/pay/icon/alipay_wap.svg create mode 100644 src/assets/svgs/pay/icon/mock.svg create mode 100644 src/assets/svgs/pay/icon/wx_app.svg create mode 100644 src/assets/svgs/pay/icon/wx_bar.svg create mode 100644 src/assets/svgs/pay/icon/wx_lite.svg create mode 100644 src/assets/svgs/pay/icon/wx_native.svg create mode 100644 src/assets/svgs/pay/icon/wx_pub.svg create mode 100644 src/assets/svgs/peoples.svg create mode 100644 src/assets/svgs/shopping.svg create mode 100644 src/components/Annex/index.ts create mode 100644 src/components/Annex/src/Annex.vue create mode 100644 src/components/Annex/src/AnnexLedger.vue create mode 100644 src/components/AutoIncrementField/index.ts create mode 100644 src/components/AutoIncrementField/src/AutoIncrementField.vue create mode 100644 src/components/Backtop/index.ts create mode 100644 src/components/Backtop/src/Backtop.vue create mode 100644 src/components/BasicForm/index.ts create mode 100644 src/components/BasicForm/src/BasicForm.vue create mode 100644 src/components/BasicForm/src/BasicFormQmsNumber.vue create mode 100644 src/components/BasicForm/src/BasicFormWmsCount.vue create mode 100644 src/components/Card/index.ts create mode 100644 src/components/Card/src/CardTitle.vue create mode 100644 src/components/ChangeRecord/index.ts create mode 100644 src/components/ChangeRecord/src/ChangeRecord.vue create mode 100644 src/components/CollectionTable/index.ts create mode 100644 src/components/CollectionTable/src/CollectionTable.vue create mode 100644 src/components/ConfigGlobal/index.ts create mode 100644 src/components/ConfigGlobal/src/ConfigGlobal.vue create mode 100644 src/components/ContentDetailWrap/index.ts create mode 100644 src/components/ContentDetailWrap/src/ContentDetailWrap.vue create mode 100644 src/components/ContentWrap/index.ts create mode 100644 src/components/ContentWrap/src/ContentWrap.vue create mode 100644 src/components/CountTo/index.ts create mode 100644 src/components/CountTo/src/CountTo.vue create mode 100644 src/components/Crontab/index.ts create mode 100644 src/components/Crontab/src/Crontab.vue create mode 100644 src/components/Cropper/index.ts create mode 100644 src/components/Cropper/src/CopperModal.vue create mode 100644 src/components/Cropper/src/Cropper.vue create mode 100644 src/components/Cropper/src/CropperAvatar.vue create mode 100644 src/components/Cropper/src/types.ts create mode 100644 src/components/Descriptions/index.ts create mode 100644 src/components/Descriptions/src/Descriptions.vue create mode 100644 src/components/Descriptions/src/DescriptionsItemLabel.vue create mode 100644 src/components/Detail/index.ts create mode 100644 src/components/Detail/src/Detail.vue create mode 100644 src/components/Detail/src/DetailLedger.vue create mode 100644 src/components/DetailTable/index.ts create mode 100644 src/components/DetailTable/src/DetailTable.vue create mode 100644 src/components/Dialog/index.ts create mode 100644 src/components/Dialog/src/Dialog.vue create mode 100644 src/components/DictTag/index.ts create mode 100644 src/components/DictTag/src/DictTag.vue create mode 100644 src/components/Distinction/index.ts create mode 100644 src/components/Distinction/src/Distinction.vue create mode 100644 src/components/DocAlert/index.vue create mode 100644 src/components/Echart/index.ts create mode 100644 src/components/Echart/src/Echart.vue create mode 100644 src/components/Editor/index.ts create mode 100644 src/components/Editor/src/Editor.vue create mode 100644 src/components/Error/index.ts create mode 100644 src/components/Error/src/Error.vue create mode 100644 src/components/Form/index.ts create mode 100644 src/components/Form/src/Form.vue create mode 100644 src/components/Form/src/componentMap.ts create mode 100644 src/components/Form/src/components/useRenderCheckbox.tsx create mode 100644 src/components/Form/src/components/useRenderRadio.tsx create mode 100644 src/components/Form/src/components/useRenderSelect.tsx create mode 100644 src/components/Form/src/helper.ts create mode 100644 src/components/Form/src/types.ts create mode 100644 src/components/Highlight/index.ts create mode 100644 src/components/Highlight/src/Highlight.vue create mode 100644 src/components/Icon/index.ts create mode 100644 src/components/Icon/src/Icon.vue create mode 100644 src/components/Icon/src/IconSelect.vue create mode 100644 src/components/Icon/src/data.ts create mode 100644 src/components/ImageViewer/index.ts create mode 100644 src/components/ImageViewer/src/ImageViewer.vue create mode 100644 src/components/ImageViewer/src/types.ts create mode 100644 src/components/ImportForm/index.ts create mode 100644 src/components/ImportForm/src/ImportDetailForm.vue create mode 100644 src/components/ImportForm/src/ImportForm.vue create mode 100644 src/components/Infotip/index.ts create mode 100644 src/components/Infotip/src/Infotip.vue create mode 100644 src/components/InputPassword/index.ts create mode 100644 src/components/InputPassword/src/InputPassword.vue create mode 100644 src/components/LabelForm/index.ts create mode 100644 src/components/LabelForm/src/LabelForm.vue create mode 100644 src/components/ListTable/index.ts create mode 100644 src/components/ListTable/src/ListTable.vue create mode 100644 src/components/Pagination/index.vue create mode 100644 src/components/PreviewPDF/index.vue create mode 100644 src/components/Qrcode/index.ts create mode 100644 src/components/Qrcode/src/Qrcode.vue create mode 100644 src/components/Remarks/index.ts create mode 100644 src/components/Remarks/src/Remarks.vue create mode 100644 src/components/RouterSearch/index.vue create mode 100644 src/components/Search/index.ts create mode 100644 src/components/Search/src/Search.vue create mode 100644 src/components/SearchHigh/index.ts create mode 100644 src/components/SearchHigh/src/SearchHigh.vue create mode 100644 src/components/SearchTable/index.ts create mode 100644 src/components/SearchTable/src/SearchTable.vue create mode 100644 src/components/SearchTableCount/index.ts create mode 100644 src/components/SearchTableCount/src/SearchTableCount.vue create mode 100644 src/components/SearchTableV2/index.ts create mode 100644 src/components/SearchTableV2/src/SearchTableV2.vue create mode 100644 src/components/Sticky/index.ts create mode 100644 src/components/Sticky/src/Sticky.vue create mode 100644 src/components/Table/index.ts create mode 100644 src/components/Table/src/Table.vue create mode 100644 src/components/Table/src/helper.ts create mode 100644 src/components/Table/src/types.ts create mode 100644 src/components/TableDetail/index.ts create mode 100644 src/components/TableDetail/src/TableDetail.vue create mode 100644 src/components/TableForm/index.ts create mode 100644 src/components/TableForm/src/TableForm.vue create mode 100644 src/components/TableFormAdjustment/index.ts create mode 100644 src/components/TableFormAdjustment/src/AdjustmentDialog.vue create mode 100644 src/components/TableFormAdjustment/src/TableFormAdjustment.vue create mode 100644 src/components/TableFormCountPlan/index.ts create mode 100644 src/components/TableFormCountPlan/src/TableFormCountPlan.vue create mode 100644 src/components/TableHead/index.ts create mode 100644 src/components/TableHead/src/TableHead.vue create mode 100644 src/components/Tabs/index.ts create mode 100644 src/components/Tabs/src/Tabs.vue create mode 100644 src/components/Tooltip/index.ts create mode 100644 src/components/Tooltip/src/Tooltip.vue create mode 100644 src/components/UploadFile/index.ts create mode 100644 src/components/UploadFile/src/Preview.vue create mode 100644 src/components/UploadFile/src/UploadFile.vue create mode 100644 src/components/UploadFile/src/UploadImg.vue create mode 100644 src/components/UploadFile/src/UploadImgs.vue create mode 100644 src/components/Verifition/index.ts create mode 100644 src/components/Verifition/src/Verify.vue create mode 100644 src/components/Verifition/src/Verify/VerifyPoints.vue create mode 100644 src/components/Verifition/src/Verify/VerifySlide.vue create mode 100644 src/components/Verifition/src/Verify/index.ts create mode 100644 src/components/Verifition/src/utils/ase.ts create mode 100644 src/components/Verifition/src/utils/util.ts create mode 100644 src/components/XButton/index.ts create mode 100644 src/components/XButton/src/ButtonBase.vue create mode 100644 src/components/XButton/src/ButtonBaseMore.vue create mode 100644 src/components/XButton/src/XButton.vue create mode 100644 src/components/XButton/src/XTextButton.vue create mode 100644 src/components/bpmnProcessDesigner/package/designer/ProcessDesigner.vue create mode 100644 src/components/bpmnProcessDesigner/package/designer/ProcessViewer.vue create mode 100644 src/components/bpmnProcessDesigner/package/designer/index.ts create mode 100644 src/components/bpmnProcessDesigner/package/designer/index2.ts create mode 100644 src/components/bpmnProcessDesigner/package/designer/plugins/content-pad/contentPadProvider.js create mode 100644 src/components/bpmnProcessDesigner/package/designer/plugins/content-pad/index.js create mode 100644 src/components/bpmnProcessDesigner/package/designer/plugins/defaultEmpty.js create mode 100644 src/components/bpmnProcessDesigner/package/designer/plugins/descriptor/activitiDescriptor.json create mode 100644 src/components/bpmnProcessDesigner/package/designer/plugins/descriptor/camundaDescriptor.json create mode 100644 src/components/bpmnProcessDesigner/package/designer/plugins/descriptor/flowableDescriptor.json create mode 100644 src/components/bpmnProcessDesigner/package/designer/plugins/extension-moddle/activiti/activitiExtension.js create mode 100644 src/components/bpmnProcessDesigner/package/designer/plugins/extension-moddle/activiti/index.js create mode 100644 src/components/bpmnProcessDesigner/package/designer/plugins/extension-moddle/camunda/extension.js create mode 100644 src/components/bpmnProcessDesigner/package/designer/plugins/extension-moddle/camunda/index.js create mode 100644 src/components/bpmnProcessDesigner/package/designer/plugins/extension-moddle/flowable/flowableExtension.js create mode 100644 src/components/bpmnProcessDesigner/package/designer/plugins/extension-moddle/flowable/index.js create mode 100644 src/components/bpmnProcessDesigner/package/designer/plugins/palette/CustomPalette.js create mode 100644 src/components/bpmnProcessDesigner/package/designer/plugins/palette/index.js create mode 100644 src/components/bpmnProcessDesigner/package/designer/plugins/palette/paletteProvider.js create mode 100644 src/components/bpmnProcessDesigner/package/designer/plugins/translate/customTranslate.js create mode 100644 src/components/bpmnProcessDesigner/package/designer/plugins/translate/zh.js create mode 100644 src/components/bpmnProcessDesigner/package/index.ts create mode 100644 src/components/bpmnProcessDesigner/package/palette/ProcessPalette.vue create mode 100644 src/components/bpmnProcessDesigner/package/penal/PropertiesPanel.vue create mode 100644 src/components/bpmnProcessDesigner/package/penal/base/ElementBaseInfo.vue create mode 100644 src/components/bpmnProcessDesigner/package/penal/flow-condition/FlowCondition.vue create mode 100644 src/components/bpmnProcessDesigner/package/penal/form/ElementForm.vue create mode 100644 src/components/bpmnProcessDesigner/package/penal/index.js create mode 100644 src/components/bpmnProcessDesigner/package/penal/listeners/ElementListeners.vue create mode 100644 src/components/bpmnProcessDesigner/package/penal/listeners/UserTaskListeners.vue create mode 100644 src/components/bpmnProcessDesigner/package/penal/listeners/template.js create mode 100644 src/components/bpmnProcessDesigner/package/penal/listeners/utilSelf.ts create mode 100644 src/components/bpmnProcessDesigner/package/penal/multi-instance/ElementMultiInstance.vue create mode 100644 src/components/bpmnProcessDesigner/package/penal/other/ElementOtherConfig.vue create mode 100644 src/components/bpmnProcessDesigner/package/penal/properties/ElementProperties.vue create mode 100644 src/components/bpmnProcessDesigner/package/penal/signal-message/SignalAndMessage.vue create mode 100644 src/components/bpmnProcessDesigner/package/penal/task/ElementTask.vue create mode 100644 src/components/bpmnProcessDesigner/package/penal/task/task-components/ReceiveTask.vue create mode 100644 src/components/bpmnProcessDesigner/package/penal/task/task-components/ScriptTask.vue create mode 100644 src/components/bpmnProcessDesigner/package/penal/task/task-components/UserTask.vue create mode 100644 src/components/bpmnProcessDesigner/package/theme/element-variables.scss create mode 100644 src/components/bpmnProcessDesigner/package/theme/index.scss create mode 100644 src/components/bpmnProcessDesigner/package/theme/process-designer.scss create mode 100644 src/components/bpmnProcessDesigner/package/theme/process-panel.scss create mode 100644 src/components/bpmnProcessDesigner/package/utils.ts create mode 100644 src/components/bpmnProcessDesigner/src/highlight/index.js create mode 100644 src/components/bpmnProcessDesigner/src/modules/custom-renderer/CustomRenderer.js create mode 100644 src/components/bpmnProcessDesigner/src/modules/custom-renderer/index.js create mode 100644 src/components/bpmnProcessDesigner/src/modules/rules/CustomRules.js create mode 100644 src/components/bpmnProcessDesigner/src/modules/rules/index.js create mode 100644 src/components/bpmnProcessDesigner/src/translations.ts create mode 100644 src/components/bpmnProcessDesigner/src/utils/directive/clickOutSide.js create mode 100644 src/components/bpmnProcessDesigner/src/utils/index.js create mode 100644 src/components/bpmnProcessDesigner/src/utils/xml2json.js create mode 100644 src/components/iFrame/index.ts create mode 100644 src/components/iFrame/src/IFrame.vue create mode 100644 src/components/index.ts create mode 100644 src/components/rowDrop/index.vue create mode 100644 src/components/workstationBind/index.ts create mode 100644 src/components/workstationBind/src/Detail.vue create mode 100644 src/config/axios/config.ts create mode 100644 src/config/axios/errorCode.ts create mode 100644 src/config/axios/index.ts create mode 100644 src/config/axios/service.ts create mode 100644 src/directives/index.ts create mode 100644 src/directives/permission/clientTable.ts create mode 100644 src/directives/permission/hasPermi.ts create mode 100644 src/directives/permission/hasRole.ts create mode 100644 src/hooks/event/useScrollTo.ts create mode 100644 src/hooks/web/useCache.ts create mode 100644 src/hooks/web/useConfigGlobal.ts create mode 100644 src/hooks/web/useCrudSchemas.ts create mode 100644 src/hooks/web/useDesign.ts create mode 100644 src/hooks/web/useEmitt.ts create mode 100644 src/hooks/web/useForm.ts create mode 100644 src/hooks/web/useI18n.ts create mode 100644 src/hooks/web/useIcon.ts create mode 100644 src/hooks/web/useIntro.ts create mode 100644 src/hooks/web/useLocale.ts create mode 100644 src/hooks/web/useMessage.ts create mode 100644 src/hooks/web/useNProgress.ts create mode 100644 src/hooks/web/usePageLoading.ts create mode 100644 src/hooks/web/useTable.ts create mode 100644 src/hooks/web/useTimeAgo.ts create mode 100644 src/hooks/web/useTitle.ts create mode 100644 src/hooks/web/useValidator.ts create mode 100644 src/hooks/web/useWatermark.ts create mode 100644 src/layout/Layout.vue create mode 100644 src/layout/components/AppView.vue create mode 100644 src/layout/components/Breadcrumb/index.ts create mode 100644 src/layout/components/Breadcrumb/src/Breadcrumb.vue create mode 100644 src/layout/components/Breadcrumb/src/helper.ts create mode 100644 src/layout/components/CategoryHeader.vue create mode 100644 src/layout/components/Collapse/index.ts create mode 100644 src/layout/components/Collapse/src/Collapse.vue create mode 100644 src/layout/components/ContextMenu/index.ts create mode 100644 src/layout/components/ContextMenu/src/ContextMenu.vue create mode 100644 src/layout/components/Footer/index.ts create mode 100644 src/layout/components/Footer/src/Footer.vue create mode 100644 src/layout/components/LocaleDropdown/index.ts create mode 100644 src/layout/components/LocaleDropdown/src/LocaleDropdown.vue create mode 100644 src/layout/components/Logo/index.ts create mode 100644 src/layout/components/Logo/src/Logo.vue create mode 100644 src/layout/components/Menu/index.ts create mode 100644 src/layout/components/Menu/src/Menu.vue create mode 100644 src/layout/components/Menu/src/components/useRenderMenuItem.tsx create mode 100644 src/layout/components/Menu/src/components/useRenderMenuTitle.tsx create mode 100644 src/layout/components/Menu/src/helper.ts create mode 100644 src/layout/components/Message/index.ts create mode 100644 src/layout/components/Message/src/Message.vue create mode 100644 src/layout/components/Screenfull/index.ts create mode 100644 src/layout/components/Screenfull/src/Screenfull.vue create mode 100644 src/layout/components/Setting/index.ts create mode 100644 src/layout/components/Setting/src/Setting.vue create mode 100644 src/layout/components/Setting/src/components/ColorRadioPicker.vue create mode 100644 src/layout/components/Setting/src/components/InterfaceDisplay.vue create mode 100644 src/layout/components/Setting/src/components/LayoutRadioPicker.vue create mode 100644 src/layout/components/SizeDropdown/index.ts create mode 100644 src/layout/components/SizeDropdown/src/SizeDropdown.vue create mode 100644 src/layout/components/TabMenu/index.ts create mode 100644 src/layout/components/TabMenu/src/TabMenu.vue create mode 100644 src/layout/components/TabMenu/src/helper.ts create mode 100644 src/layout/components/TagsView/index.ts create mode 100644 src/layout/components/TagsView/src/TagsView.vue create mode 100644 src/layout/components/TagsView/src/helper.ts create mode 100644 src/layout/components/ThemeSwitch/index.ts create mode 100644 src/layout/components/ThemeSwitch/src/ThemeSwitch.vue create mode 100644 src/layout/components/ToolHeader.vue create mode 100644 src/layout/components/UserInfo/index.ts create mode 100644 src/layout/components/UserInfo/src/UserInfo.vue create mode 100644 src/layout/components/useRenderLayout.tsx create mode 100644 src/locales/en-US.ts create mode 100644 src/locales/zh-CN.ts create mode 100644 src/main.ts create mode 100644 src/permission.ts create mode 100644 src/plugins/animate.css/index.ts create mode 100644 src/plugins/echarts/index.ts create mode 100644 src/plugins/elementPlus/index.ts create mode 100644 src/plugins/formCreate/index.ts create mode 100644 src/plugins/svgIcon/index.ts create mode 100644 src/plugins/tongji/index.ts create mode 100644 src/plugins/unocss/index.ts create mode 100644 src/plugins/vueI18n/helper.ts create mode 100644 src/plugins/vueI18n/index.ts create mode 100644 src/router/index.ts create mode 100644 src/router/modules/remaining.ts create mode 100644 src/store/index.ts create mode 100644 src/store/modules/app.ts create mode 100644 src/store/modules/dict.ts create mode 100644 src/store/modules/locale.ts create mode 100644 src/store/modules/permission.ts create mode 100644 src/store/modules/tagsView.ts create mode 100644 src/store/modules/user.ts create mode 100644 src/styles/global.module.scss create mode 100644 src/styles/index.scss create mode 100644 src/styles/theme.scss create mode 100644 src/styles/var.css create mode 100644 src/styles/variables.scss create mode 100644 src/types/components.d.ts create mode 100644 src/types/configGlobal.d.ts create mode 100644 src/types/contextMenu.d.ts create mode 100644 src/types/descriptions.d.ts create mode 100644 src/types/elementPlus.d.ts create mode 100644 src/types/form.d.ts create mode 100644 src/types/icon.d.ts create mode 100644 src/types/infoTip.d.ts create mode 100644 src/types/layout.d.ts create mode 100644 src/types/localeDropdown.d.ts create mode 100644 src/types/qrcode.d.ts create mode 100644 src/types/table.d.ts create mode 100644 src/types/tableForm.d.ts create mode 100644 src/types/theme.d.ts create mode 100644 src/utils/Logger.ts create mode 100644 src/utils/auth.ts create mode 100644 src/utils/calculate.ts create mode 100644 src/utils/color.ts create mode 100644 src/utils/constants.ts create mode 100644 src/utils/dict.ts create mode 100644 src/utils/disposition/defaultButtons.ts create mode 100644 src/utils/disposition/formFields.ts create mode 100644 src/utils/disposition/tableDetailsColumns.ts create mode 100644 src/utils/disposition/tableSummaryColumns.ts create mode 100644 src/utils/disposition/tabsList.ts create mode 100644 src/utils/domUtils.ts create mode 100644 src/utils/download.ts create mode 100644 src/utils/filt.ts create mode 100644 src/utils/formCreate.ts create mode 100644 src/utils/formRules.ts create mode 100644 src/utils/formatTime.ts create mode 100644 src/utils/formatter.ts create mode 100644 src/utils/index.ts create mode 100644 src/utils/is.ts create mode 100644 src/utils/jsencrypt.ts create mode 100644 src/utils/permission.ts create mode 100644 src/utils/propTypes.ts create mode 100644 src/utils/routerHelper.ts create mode 100644 src/utils/systemParam.ts create mode 100644 src/utils/tree.ts create mode 100644 src/utils/tsxHelper.ts create mode 100644 src/utils/validator.ts create mode 100644 src/views/bpm/definition/index.vue create mode 100644 src/views/bpm/form/editor/index.vue create mode 100644 src/views/bpm/form/index.vue create mode 100644 src/views/bpm/group/UserGroupForm.vue create mode 100644 src/views/bpm/group/index.vue create mode 100644 src/views/bpm/model/ModelForm.vue create mode 100644 src/views/bpm/model/ModelImportForm.vue create mode 100644 src/views/bpm/model/editor/index.vue create mode 100644 src/views/bpm/model/index.vue create mode 100644 src/views/bpm/oa/leave/create.vue create mode 100644 src/views/bpm/oa/leave/detail.vue create mode 100644 src/views/bpm/oa/leave/index.vue create mode 100644 src/views/bpm/processInstance/create/index.vue create mode 100644 src/views/bpm/processInstance/detail/ProcessInstanceBpmnViewer.vue create mode 100644 src/views/bpm/processInstance/detail/ProcessInstanceTaskList.vue create mode 100644 src/views/bpm/processInstance/detail/TaskReturnDialogForm.vue create mode 100644 src/views/bpm/processInstance/detail/TaskUpdateAssigneeForm.vue create mode 100644 src/views/bpm/processInstance/detail/index.vue create mode 100644 src/views/bpm/processInstance/index.vue create mode 100644 src/views/bpm/task/done/TaskDetail.vue create mode 100644 src/views/bpm/task/done/index.vue create mode 100644 src/views/bpm/task/todo/index.vue create mode 100644 src/views/bpm/taskAssignRule/TaskAssignRuleForm.vue create mode 100644 src/views/bpm/taskAssignRule/index.vue create mode 100644 src/views/eam/SparePartsOutLocationRecord/SparePartsOutLocationRecord.data.ts create mode 100644 src/views/eam/SparePartsOutLocationRecord/index.vue create mode 100644 src/views/eam/adjustRecord/adjustRecord.data.ts create mode 100644 src/views/eam/adjustRecord/index.vue create mode 100644 src/views/eam/applicationRecord/applicationRecordMain.data.ts create mode 100644 src/views/eam/applicationRecord/index.vue create mode 100644 src/views/eam/basicEamProductionline/basicEamProductionline.data.ts create mode 100644 src/views/eam/basicEamProductionline/index.vue create mode 100644 src/views/eam/basicEamWorkshop/basicEamWorkshop.data.ts create mode 100644 src/views/eam/basicEamWorkshop/index.vue create mode 100644 src/views/eam/basicFaultCause/basicFaultCause.data.ts create mode 100644 src/views/eam/basicFaultCause/index.vue create mode 100644 src/views/eam/basicFaultType/basicFaultType.data.ts create mode 100644 src/views/eam/basicFaultType/index.vue create mode 100644 src/views/eam/basicInspectionOption/basicInspectionOption.data.ts create mode 100644 src/views/eam/basicInspectionOption/index.vue create mode 100644 src/views/eam/basicInspectionOption/itemSelectSetForm.vue create mode 100644 src/views/eam/basicMaintenanceOption/basicMaintenanceOption.data.ts create mode 100644 src/views/eam/basicMaintenanceOption/index.vue create mode 100644 src/views/eam/basicMaintenanceOption/itemSelectSetForm.vue create mode 100644 src/views/eam/basicSpotCheckOption/basicSpotCheckOption.data.ts create mode 100644 src/views/eam/basicSpotCheckOption/index.vue create mode 100644 src/views/eam/basicSpotCheckOption/itemSelectSetForm.vue create mode 100644 src/views/eam/classTypeRole/classTypeRole.data.ts create mode 100644 src/views/eam/classTypeRole/index.vue create mode 100644 src/views/eam/countRecord/countRecord.data.ts create mode 100644 src/views/eam/countRecord/index.vue create mode 100644 src/views/eam/countadjustPlan/countadjustPlan.data.ts create mode 100644 src/views/eam/countadjustPlan/index.vue create mode 100644 src/views/eam/countadjustWork/countadjustWork.data.ts create mode 100644 src/views/eam/countadjustWork/index.vue create mode 100644 src/views/eam/documentType/documentType.data.ts create mode 100644 src/views/eam/documentType/index.vue create mode 100644 src/views/eam/documentTypeSelectSet/documentTypeSelectSet.data.ts create mode 100644 src/views/eam/documentTypeSelectSet/index.vue create mode 100644 src/views/eam/documentTypeSelectSet/itemSelectSetForm.vue create mode 100644 src/views/eam/equipmentAccounts/ablesForm.vue create mode 100644 src/views/eam/equipmentAccounts/equipmentAccounts.data.ts create mode 100644 src/views/eam/equipmentAccounts/index.vue create mode 100644 src/views/eam/equipmentInspectionDetail/equipmentInspectionDetail.data.ts create mode 100644 src/views/eam/equipmentInspectionDetail/index.vue create mode 100644 src/views/eam/equipmentInspectionMain/InspectionOrderDetail.vue create mode 100644 src/views/eam/equipmentInspectionMain/equipmentInspectionMain.data.ts create mode 100644 src/views/eam/equipmentInspectionMain/finishForm1.vue create mode 100644 src/views/eam/equipmentInspectionMain/finishForm2.vue create mode 100644 src/views/eam/equipmentInspectionMain/index.vue create mode 100644 src/views/eam/equipmentInspectionRecordDetail/equipmentInspectionRecordDetail.data.ts create mode 100644 src/views/eam/equipmentInspectionRecordDetail/index.vue create mode 100644 src/views/eam/equipmentInspectionRecordMain/equipmentInspectionRecordMain.data.ts create mode 100644 src/views/eam/equipmentInspectionRecordMain/index.vue create mode 100644 src/views/eam/equipmentMainPart/equipmentMainPart.data.ts create mode 100644 src/views/eam/equipmentMainPart/index.vue create mode 100644 src/views/eam/equipmentMaintenanceMain/MaintenanceOrderDetail.vue create mode 100644 src/views/eam/equipmentMaintenanceMain/equipmentMaintenanceMain.data.ts create mode 100644 src/views/eam/equipmentMaintenanceMain/finishForm1.vue create mode 100644 src/views/eam/equipmentMaintenanceMain/finishForm2.vue create mode 100644 src/views/eam/equipmentMaintenanceMain/index.vue create mode 100644 src/views/eam/equipmentMaintenanceRecordDetail/equipmentMaintenanceRecordDetail.data.ts create mode 100644 src/views/eam/equipmentMaintenanceRecordDetail/index.vue create mode 100644 src/views/eam/equipmentMaintenanceRecordMain/equipmentMaintenanceRecordMain.data.ts create mode 100644 src/views/eam/equipmentMaintenanceRecordMain/index.vue create mode 100644 src/views/eam/equipmentManufacturer/equipmentManufacturer.data.ts create mode 100644 src/views/eam/equipmentManufacturer/index.vue create mode 100644 src/views/eam/equipmentRepairJobDetail/equipmentRepairJobDetail.data.ts create mode 100644 src/views/eam/equipmentRepairJobDetail/index.vue create mode 100644 src/views/eam/equipmentRepairJobMain/EquipmentRepairJobDetail.vue create mode 100644 src/views/eam/equipmentRepairJobMain/equipmentRepairJobMain.data.ts create mode 100644 src/views/eam/equipmentRepairJobMain/finishForm1.vue create mode 100644 src/views/eam/equipmentRepairJobMain/finishForm2.vue create mode 100644 src/views/eam/equipmentRepairJobMain/finishForm3.vue create mode 100644 src/views/eam/equipmentRepairJobMain/index.vue create mode 100644 src/views/eam/equipmentRepairJobMain/transferForm.vue create mode 100644 src/views/eam/equipmentRepairRecordDetail/equipmentRepairRecordDetail.data.ts create mode 100644 src/views/eam/equipmentRepairRecordDetail/index.vue create mode 100644 src/views/eam/equipmentRepairRecordMain/equipmentRepairRecordMain.data.ts create mode 100644 src/views/eam/equipmentRepairRecordMain/index.vue create mode 100644 src/views/eam/equipmentReportRepairRequest/audiForm.vue create mode 100644 src/views/eam/equipmentReportRepairRequest/equipmentReportRepairRequest.data.ts create mode 100644 src/views/eam/equipmentReportRepairRequest/index.vue create mode 100644 src/views/eam/equipmentShutdown/equipmentShutdown.data.ts create mode 100644 src/views/eam/equipmentShutdown/index.vue create mode 100644 src/views/eam/equipmentSigning/equipmentSigning.data.ts create mode 100644 src/views/eam/equipmentSigning/index.vue create mode 100644 src/views/eam/equipmentSpotCheckDetail/equipmentSpotCheckDetail.data.ts create mode 100644 src/views/eam/equipmentSpotCheckDetail/index.vue create mode 100644 src/views/eam/equipmentSpotCheckMain/SpotCheckOrderDetail.vue create mode 100644 src/views/eam/equipmentSpotCheckMain/equipmentSpotCheckMain.data.ts create mode 100644 src/views/eam/equipmentSpotCheckMain/finishForm1.vue create mode 100644 src/views/eam/equipmentSpotCheckMain/finishForm2.vue create mode 100644 src/views/eam/equipmentSpotCheckMain/index.vue create mode 100644 src/views/eam/equipmentSpotCheckRecordDetail/equipmentSpotCheckRecordDetail.data.ts create mode 100644 src/views/eam/equipmentSpotCheckRecordDetail/index.vue create mode 100644 src/views/eam/equipmentSpotCheckRecordMain/equipmentSpotCheckRecordMain.data.ts create mode 100644 src/views/eam/equipmentSpotCheckRecordMain/index.vue create mode 100644 src/views/eam/equipmentSupplier/equipmentSupplier.data.ts create mode 100644 src/views/eam/equipmentSupplier/index.vue create mode 100644 src/views/eam/equipmentToolSparePart/equipmentToolSparePart.data.ts create mode 100644 src/views/eam/equipmentToolSparePart/index.vue create mode 100644 src/views/eam/equipmentTransferRecord/equipmentTransferRecord.data.ts create mode 100644 src/views/eam/equipmentTransferRecord/index.vue create mode 100644 src/views/eam/inspectionItem/index.vue create mode 100644 src/views/eam/inspectionItem/inspectionItem.data.ts create mode 100644 src/views/eam/inspectionItemSelectSet/index.vue create mode 100644 src/views/eam/inspectionItemSelectSet/inspectionItemSelectSet.data.ts create mode 100644 src/views/eam/inspectionItemSelectSet/itemSelectSetForm.vue create mode 100644 src/views/eam/item/index.vue create mode 100644 src/views/eam/item/item.data.ts create mode 100644 src/views/eam/itemAccounts/index.vue create mode 100644 src/views/eam/itemAccounts/itemAccounts.data.ts create mode 100644 src/views/eam/itemApplyMain/index.vue create mode 100644 src/views/eam/itemApplyMain/itemApplyMain.data.ts create mode 100644 src/views/eam/itemDelete/index.vue create mode 100644 src/views/eam/itemDelete/itemAccounts.data.ts create mode 100644 src/views/eam/itemInLocation/index.vue create mode 100644 src/views/eam/itemInLocation/itemInLocation.data.ts create mode 100644 src/views/eam/itemLocationReplace/index.vue create mode 100644 src/views/eam/itemLocationReplace/itemLocationReplace.data.ts create mode 100644 src/views/eam/itemMaintenance/index.vue create mode 100644 src/views/eam/itemMaintenance/itemMaintenance.data.ts create mode 100644 src/views/eam/itemOrderMain/index.vue create mode 100644 src/views/eam/itemOrderMain/itemOrderMain.data.ts create mode 100644 src/views/eam/itemOutLocation/index.vue create mode 100644 src/views/eam/itemOutLocation/itemOutLocation.data.ts create mode 100644 src/views/eam/location/index.vue create mode 100644 src/views/eam/location/location.data.ts create mode 100644 src/views/eam/locationArea/index.vue create mode 100644 src/views/eam/locationArea/locationArea.data.ts create mode 100644 src/views/eam/maintainExperience/index.vue create mode 100644 src/views/eam/maintainExperience/maintainExperience.data.ts create mode 100644 src/views/eam/maintenance/audiForm.vue create mode 100644 src/views/eam/maintenance/index.vue create mode 100644 src/views/eam/maintenance/maintenance.data.ts create mode 100644 src/views/eam/maintenanceItem/index.vue create mode 100644 src/views/eam/maintenanceItem/maintenanceItem.data.ts create mode 100644 src/views/eam/maintenanceItemSelectSet/index.vue create mode 100644 src/views/eam/maintenanceItemSelectSet/itemSelectSetForm.vue create mode 100644 src/views/eam/maintenanceItemSelectSet/maintenanceItemSelectSet.data.ts create mode 100644 src/views/eam/planInspection/audiForm.vue create mode 100644 src/views/eam/planInspection/index.vue create mode 100644 src/views/eam/planInspection/planInspection.data.ts create mode 100644 src/views/eam/planSpotCheck/audiForm.vue create mode 100644 src/views/eam/planSpotCheck/index.vue create mode 100644 src/views/eam/planSpotCheck/planSpotCheck.data.ts create mode 100644 src/views/eam/recordDeviceChanged/index.vue create mode 100644 src/views/eam/recordDeviceChanged/recordDeviceChanged.data.ts create mode 100644 src/views/eam/relationMainPart/index.vue create mode 100644 src/views/eam/relationMainPart/relationMainPart.data.ts create mode 100644 src/views/eam/repairExperience/index.vue create mode 100644 src/views/eam/repairExperience/repairExperience.data.ts create mode 100644 src/views/eam/repairSparePartsRecord/index.vue create mode 100644 src/views/eam/repairSparePartsRecord/repairSparePartsRecord.data.ts create mode 100644 src/views/eam/repairSparePartsRequest/index.vue create mode 100644 src/views/eam/repairSparePartsRequest/repairSparePartsRequest.data.ts create mode 100644 src/views/eam/sparePart/index.vue create mode 100644 src/views/eam/sparePart/sparePart.data.ts create mode 100644 src/views/eam/sparePartsApplyMain/SparePartsApply.data.ts create mode 100644 src/views/eam/sparePartsApplyMain/index.vue create mode 100644 src/views/eam/sparePartsInLocationRecord/index.vue create mode 100644 src/views/eam/sparePartsInLocationRecord/sparePartsInLocationRecordMain.data.ts create mode 100644 src/views/eam/sparepartsinlocation/index.vue create mode 100644 src/views/eam/sparepartsinlocation/sparePartsInLocationMain.data.ts create mode 100644 src/views/eam/sparepartsoutlocation/SparePartsOutLocation.data.ts create mode 100644 src/views/eam/sparepartsoutlocation/index.vue create mode 100644 src/views/eam/spotCheckItem/index.vue create mode 100644 src/views/eam/spotCheckItem/spotCheckItem.data.ts create mode 100644 src/views/eam/spotCheckSelectSet/index.vue create mode 100644 src/views/eam/spotCheckSelectSet/itemSelectSetForm.vue create mode 100644 src/views/eam/spotCheckSelectSet/spotCheckSelectSet.data.ts create mode 100644 src/views/eam/tableDataExtendedAttribute/index.vue create mode 100644 src/views/eam/tableDataExtendedAttribute/tableDataExtendedAttribute.data.ts create mode 100644 src/views/eam/toolAccounts/index.vue create mode 100644 src/views/eam/toolAccounts/toolAccounts.data.ts create mode 100644 src/views/eam/toolChangedRecord/index.vue create mode 100644 src/views/eam/toolChangedRecord/toolChangedRecord.data.ts create mode 100644 src/views/eam/toolEquipmentIn/index.vue create mode 100644 src/views/eam/toolEquipmentIn/toolEquipmentIn.data.ts create mode 100644 src/views/eam/toolEquipmentOut/index.vue create mode 100644 src/views/eam/toolEquipmentOut/toolEquipmentOut.data.ts create mode 100644 src/views/eam/toolMod/index.vue create mode 100644 src/views/eam/toolMod/operateForm.vue create mode 100644 src/views/eam/toolMod/toolMod.data.ts create mode 100644 src/views/eam/toolSigning/index.vue create mode 100644 src/views/eam/toolSigning/toolSigning.data.ts create mode 100644 src/views/eam/transaction/index.vue create mode 100644 src/views/eam/transaction/transaction.data.ts create mode 100644 src/views/error/403.vue create mode 100644 src/views/error/404.vue create mode 100644 src/views/error/500.vue create mode 100644 src/views/home/Index copy.vue create mode 100644 src/views/home/Index2.vue create mode 100644 src/views/home/components/material.vue create mode 100644 src/views/home/components/produce.vue create mode 100644 src/views/home/components/product.vue create mode 100644 src/views/home/components/supplierIndex.vue create mode 100644 src/views/home/components/supplierIndex供应商发票空白页,暂时去掉部分模块.vue create mode 100644 src/views/home/echarts-data.ts create mode 100644 src/views/home/index.vue create mode 100644 src/views/home/types.ts create mode 100644 src/views/infra/apiAccessLog/ApiAccessLogDetail.vue create mode 100644 src/views/infra/apiAccessLog/index.vue create mode 100644 src/views/infra/apiErrorLog/ApiErrorLogDetail.vue create mode 100644 src/views/infra/apiErrorLog/index.vue create mode 100644 src/views/infra/build/index.vue create mode 100644 src/views/infra/codegen/PreviewCode.vue create mode 100644 src/views/infra/codegen/components/BasicInfoForm.vue create mode 100644 src/views/infra/codegen/components/ColumInfoForm.vue create mode 100644 src/views/infra/codegen/components/GenerateInfoForm.vue create mode 100644 src/views/infra/codegen/components/index.ts create mode 100644 src/views/infra/codegen/editTable.vue create mode 100644 src/views/infra/codegen/importTable.vue create mode 100644 src/views/infra/codegen/index.vue create mode 100644 src/views/infra/config/ConfigForm.vue create mode 100644 src/views/infra/config/index.vue create mode 100644 src/views/infra/customInterface/index.vue create mode 100644 src/views/infra/dataSourceConfig/DataSourceConfigForm.vue create mode 100644 src/views/infra/dataSourceConfig/index.vue create mode 100644 src/views/infra/dbDoc/index.vue create mode 100644 src/views/infra/druid/index.vue create mode 100644 src/views/infra/file/FileForm.vue create mode 100644 src/views/infra/file/index.vue create mode 100644 src/views/infra/fileConfig/FileConfigForm.vue create mode 100644 src/views/infra/fileConfig/index.vue create mode 100644 src/views/infra/job/JobDetail.vue create mode 100644 src/views/infra/job/JobForm.vue create mode 100644 src/views/infra/job/index.vue create mode 100644 src/views/infra/job/logger/JobLogDetail.vue create mode 100644 src/views/infra/job/logger/index.vue create mode 100644 src/views/infra/redis/index.vue create mode 100644 src/views/infra/server/index.vue create mode 100644 src/views/infra/skywalking/index.vue create mode 100644 src/views/infra/swagger/index.vue create mode 100644 src/views/infra/testDemo/index.vue create mode 100644 src/views/infra/webSocket/index.vue create mode 100644 src/views/login/components/LoginForm.vue create mode 100644 src/views/login/components/LoginFormTitle.vue create mode 100644 src/views/login/components/MobileForm.vue create mode 100644 src/views/login/components/QRCodePDA.vue create mode 100644 src/views/login/components/QrCodeForm.vue create mode 100644 src/views/login/components/RegisterForm.vue create mode 100644 src/views/login/components/SSOLogin.vue create mode 100644 src/views/login/components/index.ts create mode 100644 src/views/login/components/useLogin.ts create mode 100644 src/views/login/forgetPassword.vue create mode 100644 src/views/login/login.vue create mode 100644 src/views/login/updatePassword.vue create mode 100644 src/views/login/updatePasswordNewTips.vue create mode 100644 src/views/mes/abilityInfo/abilityInfo.data.ts create mode 100644 src/views/mes/abilityInfo/index.vue create mode 100644 src/views/mes/components/Detail.vue create mode 100644 src/views/mes/dismantlingMain/dismantlingMain.data.ts create mode 100644 src/views/mes/dismantlingMain/index.vue create mode 100644 src/views/mes/holiday/holiday.data.ts create mode 100644 src/views/mes/holiday/index.vue create mode 100644 src/views/mes/hrPersonAbility/hrPersonAbility.data.ts create mode 100644 src/views/mes/hrPersonAbility/index.vue create mode 100644 src/views/mes/item/index.vue create mode 100644 src/views/mes/item/item.data.ts create mode 100644 src/views/mes/itemRequestMain/index.vue create mode 100644 src/views/mes/itemRequestMain/itemRequestMain.data.ts create mode 100644 src/views/mes/opersteps/index.vue create mode 100644 src/views/mes/opersteps/opersteps.data.ts create mode 100644 src/views/mes/operstepsType/index.vue create mode 100644 src/views/mes/operstepsType/operstepsType.data.ts create mode 100644 src/views/mes/orderDay/components/BasicFormV2.vue create mode 100644 src/views/mes/orderDay/components/orderDetail.vue create mode 100644 src/views/mes/orderDay/components/schedule.vue create mode 100644 src/views/mes/orderDay/components/scheduleDetail.vue create mode 100644 src/views/mes/orderDay/index.vue create mode 100644 src/views/mes/orderDay/orderDay.data.ts create mode 100644 src/views/mes/ordermonthplan/index.vue create mode 100644 src/views/mes/ordermonthplan/mesOrderMonthMain.data.ts create mode 100644 src/views/mes/ordermonthplan/mesOrderMonthSub.data.ts create mode 100644 src/views/mes/pattern/index.vue create mode 100644 src/views/mes/pattern/pattern.data.ts create mode 100644 src/views/mes/patternType/index.vue create mode 100644 src/views/mes/patternType/patternType.data.ts create mode 100644 src/views/mes/process/components/Detail.vue create mode 100644 src/views/mes/process/index.vue create mode 100644 src/views/mes/process/process.data.ts create mode 100644 src/views/mes/processroute/components/configDialog.vue create mode 100644 src/views/mes/processroute/components/graphbase.data.ts create mode 100644 src/views/mes/processroute/index.vue create mode 100644 src/views/mes/processroute/processroute.data.ts create mode 100644 src/views/mes/productBackline/index.vue create mode 100644 src/views/mes/productBackline/productBackline.data.ts create mode 100644 src/views/mes/productOffline/index.vue create mode 100644 src/views/mes/productOffline/productOffline.data.ts create mode 100644 src/views/mes/productionPlan/index.vue create mode 100644 src/views/mes/productionPlan/productionPlan.data.ts create mode 100644 src/views/mes/publicUtil/processSearch.data.ts create mode 100644 src/views/mes/qualityclass/index.vue create mode 100644 src/views/mes/qualityclass/qualityclass.data.ts create mode 100644 src/views/mes/qualityform/index.vue create mode 100644 src/views/mes/qualityform/qualityform.data.ts create mode 100644 src/views/mes/qualityformlog/index.vue create mode 100644 src/views/mes/qualityformlog/qualityformlog.data.ts create mode 100644 src/views/mes/qualitygroup/index.vue create mode 100644 src/views/mes/qualitygroup/qualitygroup.data.ts create mode 100644 src/views/mes/reportpStore/index.vue create mode 100644 src/views/mes/reportpStore/reportpStore.data.ts create mode 100644 src/views/mes/reworkBatch/index.vue create mode 100644 src/views/mes/reworkBatch/reworkBatch.data.ts create mode 100644 src/views/mes/reworkSingle/index.vue create mode 100644 src/views/mes/reworkSingle/reworkSingle.data.ts create mode 100644 src/views/mes/teamSetting/index.vue create mode 100644 src/views/mes/teamSetting/teamSetting.data.ts create mode 100644 src/views/mes/workScheduling/components/Detail.vue create mode 100644 src/views/mes/workScheduling/components/finish.vue create mode 100644 src/views/mes/workScheduling/components/qualifiedCheck.vue create mode 100644 src/views/mes/workScheduling/components/report.vue create mode 100644 src/views/mes/workScheduling/components/reportAll.vue create mode 100644 src/views/mes/workScheduling/index.vue create mode 100644 src/views/mes/workScheduling/workScheduling.data.ts create mode 100644 src/views/mes/workSchedulingQaform/index.vue create mode 100644 src/views/mes/workSchedulingQaform/workSchedulingQaform.data.ts create mode 100644 src/views/mes/workcalendar/index.vue create mode 100644 src/views/mes/workstation/components/Detail.vue create mode 100644 src/views/mes/workstation/index.vue create mode 100644 src/views/mes/workstation/workstation.data.ts create mode 100644 src/views/opc/automaticShellInsertion/automaticShellInsertion.data.ts create mode 100644 src/views/opc/automaticShellInsertion/index.vue create mode 100644 src/views/opc/coverCode/coverCode.data.ts create mode 100644 src/views/opc/coverCode/index.vue create mode 100644 src/views/opc/hexinPatch/hexinPatch.data.ts create mode 100644 src/views/opc/hexinPatch/index.vue create mode 100644 src/views/opc/hotPress/hotPress.data.ts create mode 100644 src/views/opc/hotPress/index.vue create mode 100644 src/views/opc/laserWelding/index.vue create mode 100644 src/views/opc/laserWelding/laserWelding.data.ts create mode 100644 src/views/opc/oneHelium/index.vue create mode 100644 src/views/opc/oneHelium/oneHelium.data.ts create mode 100644 src/views/opc/packageMylar/index.vue create mode 100644 src/views/opc/packageMylar/packageMylar.data.ts create mode 100644 src/views/opc/sealingNailWelding/index.vue create mode 100644 src/views/opc/sealingNailWelding/sealingNailWelding.data.ts create mode 100644 src/views/opc/secondaryInspection/index.vue create mode 100644 src/views/opc/secondaryInspection/secondaryInspection.data.ts create mode 100644 src/views/opc/stackedCoreAdhesive/index.vue create mode 100644 src/views/opc/stackedCoreAdhesive/stackedCoreAdhesive.data.ts create mode 100644 src/views/opc/topWelded/index.vue create mode 100644 src/views/opc/topWelded/topWelded.data.ts create mode 100644 src/views/opc/ultrasonicFinalWelding/index.vue create mode 100644 src/views/opc/ultrasonicFinalWelding/ultrasonicFinalWelding.data.ts create mode 100644 src/views/opc/ultrasonicPreWelding/index.vue create mode 100644 src/views/opc/ultrasonicPreWelding/ultrasonicPreWelding.data.ts create mode 100644 src/views/opc/weldAdhesiveBond/index.vue create mode 100644 src/views/opc/weldAdhesiveBond/weldAdhesiveBond.data.ts create mode 100644 src/views/profile/components/BasicInfo.vue create mode 100644 src/views/profile/components/ProfileUser.vue create mode 100644 src/views/profile/components/ResetPwd.vue create mode 100644 src/views/profile/components/UserAvatar.vue create mode 100644 src/views/profile/components/UserSocial.vue create mode 100644 src/views/profile/components/index.ts create mode 100644 src/views/profile/index.vue create mode 100644 src/views/qms/aql/aql.data.ts create mode 100644 src/views/qms/aql/index.vue create mode 100644 src/views/qms/counter/counter.data.ts create mode 100644 src/views/qms/counter/index.vue create mode 100644 src/views/qms/dynamicRule/dynamicRule.data.ts create mode 100644 src/views/qms/dynamicRule/index.vue create mode 100644 src/views/qms/inspectionJob/addForm.vue create mode 100644 src/views/qms/inspectionJob/detail.vue create mode 100644 src/views/qms/inspectionJob/index.vue create mode 100644 src/views/qms/inspectionJob/inspectionJob.vue create mode 100644 src/views/qms/inspectionJob/inspectionJobMain.data.ts create mode 100644 src/views/qms/inspectionJob/inspectionJobProduction.vue create mode 100644 src/views/qms/inspectionJob/inspectionJobPurchase.vue create mode 100644 src/views/qms/inspectionMethod/index.vue create mode 100644 src/views/qms/inspectionMethod/inspectionMethod.data.ts create mode 100644 src/views/qms/inspectionQ1/index.vue create mode 100644 src/views/qms/inspectionQ1/inspectionQ1.data.ts create mode 100644 src/views/qms/inspectionQ2/index.vue create mode 100644 src/views/qms/inspectionQ2/inspectionQ2.data.ts create mode 100644 src/views/qms/inspectionQ3/index.vue create mode 100644 src/views/qms/inspectionQ3/inspectionQ3.data.ts create mode 100644 src/views/qms/inspectionRecord/addForm.vue create mode 100644 src/views/qms/inspectionRecord/detail.vue create mode 100644 src/views/qms/inspectionRecord/index.vue create mode 100644 src/views/qms/inspectionRecord/inspectionRecord.vue create mode 100644 src/views/qms/inspectionRecord/inspectionRecordMain.data.ts create mode 100644 src/views/qms/inspectionRecord/inspectionRecordProduction.vue create mode 100644 src/views/qms/inspectionRecord/inspectionRecordPurchase.vue create mode 100644 src/views/qms/inspectionRecord/useAddForm.vue create mode 100644 src/views/qms/inspectionRecordFirst/addForm.vue create mode 100644 src/views/qms/inspectionRecordFirst/detail.vue create mode 100644 src/views/qms/inspectionRecordFirst/index.vue create mode 100644 src/views/qms/inspectionRecordFirst/inspectionRecordFirstMain.data.ts create mode 100644 src/views/qms/inspectionRecordFirst/useAddForm.vue create mode 100644 src/views/qms/inspectionRequest/index.vue create mode 100644 src/views/qms/inspectionRequest/inspectionRequestMain.data.ts create mode 100644 src/views/qms/inspectionScheme/addForm.vue create mode 100644 src/views/qms/inspectionScheme/detail.vue create mode 100644 src/views/qms/inspectionScheme/index.vue create mode 100644 src/views/qms/inspectionScheme/inspectionScheme.data.ts create mode 100644 src/views/qms/inspectionStage/index.vue create mode 100644 src/views/qms/inspectionStage/inspectionStage.data.ts create mode 100644 src/views/qms/inspectionTemplate/addForm.vue create mode 100644 src/views/qms/inspectionTemplate/detail.vue create mode 100644 src/views/qms/inspectionTemplate/index.vue create mode 100644 src/views/qms/inspectionTemplate/inspectionTemplate.data.ts create mode 100644 src/views/qms/qualityNotice/addForm.vue create mode 100644 src/views/qms/qualityNotice/components/notaicType.vue create mode 100644 src/views/qms/qualityNotice/components/qualityBatch.vue create mode 100644 src/views/qms/qualityNotice/components/qualityNotice.vue create mode 100644 src/views/qms/qualityNotice/index.vue create mode 100644 src/views/qms/qualityNotice/qualityNoticeMain.data.ts create mode 100644 src/views/qms/sampleCode/index.vue create mode 100644 src/views/qms/sampleCode/sampleCode.data.ts create mode 100644 src/views/qms/samplingProcess/index.vue create mode 100644 src/views/qms/samplingProcess/samplingProcess.data.ts create mode 100644 src/views/qms/samplingScheme/index.vue create mode 100644 src/views/qms/samplingScheme/samplingScheme.data.ts create mode 100644 src/views/qms/selectedProject/index.vue create mode 100644 src/views/qms/selectedProject/selectedProject.data.ts create mode 100644 src/views/qms/selectedSet/index.vue create mode 100644 src/views/qms/selectedSet/selectedSet.data.ts create mode 100644 src/views/redirect/redirect.vue create mode 100644 src/views/report/goview/index.vue create mode 100644 src/views/report/jmreport/index.vue create mode 100644 src/views/report/printBusinesstypeTemplate/index.vue create mode 100644 src/views/report/printBusinesstypeTemplate/printBusinesstypeTemplate.data.ts create mode 100644 src/views/report/printClientPrinter/index.vue create mode 100644 src/views/report/printClientPrinter/printClientPrinter.data.ts create mode 100644 src/views/system/area/AreaForm.vue create mode 100644 src/views/system/area/index.vue create mode 100644 src/views/system/dept/DeptForm.vue create mode 100644 src/views/system/dept/index.vue create mode 100644 src/views/system/dict/DictTypeForm.vue create mode 100644 src/views/system/dict/data/DictDataForm.vue create mode 100644 src/views/system/dict/data/index.vue create mode 100644 src/views/system/dict/index.vue create mode 100644 src/views/system/errorCode/ErrorCodeForm.vue create mode 100644 src/views/system/errorCode/index.vue create mode 100644 src/views/system/loginlog/LoginLogDetail.vue create mode 100644 src/views/system/loginlog/index.vue create mode 100644 src/views/system/mail/account/MailAccountDetail.vue create mode 100644 src/views/system/mail/account/MailAccountForm.vue create mode 100644 src/views/system/mail/account/account.data.ts create mode 100644 src/views/system/mail/account/index.vue create mode 100644 src/views/system/mail/log/MailLogDetail.vue create mode 100644 src/views/system/mail/log/index.vue create mode 100644 src/views/system/mail/log/log.data.ts create mode 100644 src/views/system/mail/template/MailTemplateForm.vue create mode 100644 src/views/system/mail/template/MailTemplateSendForm.vue create mode 100644 src/views/system/mail/template/index.vue create mode 100644 src/views/system/mail/template/template.data.ts create mode 100644 src/views/system/menu/MenuForm.vue create mode 100644 src/views/system/menu/index.vue create mode 100644 src/views/system/messageSet/index.vue create mode 100644 src/views/system/messageSet/messageSet.data.ts create mode 100644 src/views/system/notice/NoticeForm.vue create mode 100644 src/views/system/notice/index.vue create mode 100644 src/views/system/notify/message/NotifyMessageDetail.vue create mode 100644 src/views/system/notify/message/index.vue create mode 100644 src/views/system/notify/my/MyNotifyMessageDetail.vue create mode 100644 src/views/system/notify/my/index.vue create mode 100644 src/views/system/notify/template/NotifyTemplateForm.vue create mode 100644 src/views/system/notify/template/NotifyTemplateSendForm.vue create mode 100644 src/views/system/notify/template/index.vue create mode 100644 src/views/system/oauth2/client/ClientForm.vue create mode 100644 src/views/system/oauth2/client/index.vue create mode 100644 src/views/system/oauth2/token/index.vue create mode 100644 src/views/system/operatelog/OperateLogDetail.vue create mode 100644 src/views/system/operatelog/index.vue create mode 100644 src/views/system/passwordRule/index.vue create mode 100644 src/views/system/post/PostForm.vue create mode 100644 src/views/system/post/index.vue create mode 100644 src/views/system/role/RoleAssignMenuForm.vue create mode 100644 src/views/system/role/RoleDataPermissionForm.vue create mode 100644 src/views/system/role/RoleForm.vue create mode 100644 src/views/system/role/index.vue create mode 100644 src/views/system/role/role.data.ts create mode 100644 src/views/system/sensitiveWord/SensitiveWordForm.vue create mode 100644 src/views/system/sensitiveWord/SensitiveWordTestForm.vue create mode 100644 src/views/system/sensitiveWord/index.vue create mode 100644 src/views/system/serialNumber/SerialNumberForm.vue create mode 100644 src/views/system/serialNumber/index.vue create mode 100644 src/views/system/sms/channel/SmsChannelForm.vue create mode 100644 src/views/system/sms/channel/index.vue create mode 100644 src/views/system/sms/log/SmsLogDetail.vue create mode 100644 src/views/system/sms/log/index.vue create mode 100644 src/views/system/sms/template/SmsTemplateForm.vue create mode 100644 src/views/system/sms/template/SmsTemplateSendForm.vue create mode 100644 src/views/system/sms/template/index.vue create mode 100644 src/views/system/systemInstallPackage/index.vue create mode 100644 src/views/system/systemInstallPackage/systemInstallPackage.data.ts create mode 100644 src/views/system/tableActionRel/index.vue create mode 100644 src/views/system/tableActionRel/tableActionRel.data.ts create mode 100644 src/views/system/tenant/TenantForm.vue create mode 100644 src/views/system/tenant/index.vue create mode 100644 src/views/system/tenantPackage/TenantPackageForm.vue create mode 100644 src/views/system/tenantPackage/index.vue create mode 100644 src/views/system/user/DeptTree.vue create mode 100644 src/views/system/user/UserAssignRoleForm.vue create mode 100644 src/views/system/user/UserForm.vue create mode 100644 src/views/system/user/UserImportForm.vue create mode 100644 src/views/system/user/index.vue create mode 100644 src/views/wms/agvManage/agvLocationrelation/agvLocationrelation.data.ts create mode 100644 src/views/wms/agvManage/agvLocationrelation/index.vue create mode 100644 src/views/wms/agvManage/backflushDetailbQad/backflushDetailbQad.data.ts create mode 100644 src/views/wms/agvManage/backflushDetailbQad/index.vue create mode 100644 src/views/wms/agvManage/interfaceInfo/index.vue create mode 100644 src/views/wms/agvManage/interfaceInfo/interfaceInfo.data.ts create mode 100644 src/views/wms/agvManage/recommendLocationHistory/index.vue create mode 100644 src/views/wms/agvManage/recommendLocationHistory/recommendLocationHistory.data.ts create mode 100644 src/views/wms/basicDataManage/customerManage/customer/customer.data.ts create mode 100644 src/views/wms/basicDataManage/customerManage/customer/index.vue create mode 100644 src/views/wms/basicDataManage/customerManage/customerDeliveryForecast/customerDeliveryForecast.data.ts create mode 100644 src/views/wms/basicDataManage/customerManage/customerDeliveryForecast/index.vue create mode 100644 src/views/wms/basicDataManage/customerManage/customerdock/customerdock.data.ts create mode 100644 src/views/wms/basicDataManage/customerManage/customerdock/index.vue create mode 100644 src/views/wms/basicDataManage/customerManage/customeritem/customeritem.data.ts create mode 100644 src/views/wms/basicDataManage/customerManage/customeritem/index.vue create mode 100644 src/views/wms/basicDataManage/customerManage/project/index.vue create mode 100644 src/views/wms/basicDataManage/customerManage/project/project.data.ts create mode 100644 src/views/wms/basicDataManage/customerManage/saleprice/index.vue create mode 100644 src/views/wms/basicDataManage/customerManage/saleprice/saleprice.data.ts create mode 100644 src/views/wms/basicDataManage/documentSetting/businesstype/businesstype.data.ts create mode 100644 src/views/wms/basicDataManage/documentSetting/businesstype/index.vue create mode 100644 src/views/wms/basicDataManage/documentSetting/documentsetting/documentsetting.data.ts create mode 100644 src/views/wms/basicDataManage/documentSetting/documentsetting/index.vue create mode 100644 src/views/wms/basicDataManage/documentSetting/jobsetting/index.vue create mode 100644 src/views/wms/basicDataManage/documentSetting/jobsetting/jobsetting.data.ts create mode 100644 src/views/wms/basicDataManage/documentSetting/plansetting/index.vue create mode 100644 src/views/wms/basicDataManage/documentSetting/plansetting/plansetting.data.ts create mode 100644 src/views/wms/basicDataManage/documentSetting/recordsetting/index.vue create mode 100644 src/views/wms/basicDataManage/documentSetting/recordsetting/recordsetting.data.ts create mode 100644 src/views/wms/basicDataManage/documentSetting/requestsetting/index.vue create mode 100644 src/views/wms/basicDataManage/documentSetting/requestsetting/requestsetting.data.ts create mode 100644 src/views/wms/basicDataManage/documentSetting/switch/index.vue create mode 100644 src/views/wms/basicDataManage/documentSetting/switch/switch.data.ts create mode 100644 src/views/wms/basicDataManage/documentSetting/transactiontype/index.vue create mode 100644 src/views/wms/basicDataManage/documentSetting/transactiontype/transactiontype.data.ts create mode 100644 src/views/wms/basicDataManage/factoryModeling/areabasic/areabasic.data.ts create mode 100644 src/views/wms/basicDataManage/factoryModeling/areabasic/index.vue create mode 100644 src/views/wms/basicDataManage/factoryModeling/dock/dock.data.ts create mode 100644 src/views/wms/basicDataManage/factoryModeling/dock/index.vue create mode 100644 src/views/wms/basicDataManage/factoryModeling/enterprise/enterprise.data.ts create mode 100644 src/views/wms/basicDataManage/factoryModeling/enterprise/index.vue create mode 100644 src/views/wms/basicDataManage/factoryModeling/location/index.vue create mode 100644 src/views/wms/basicDataManage/factoryModeling/location/location.data.ts create mode 100644 src/views/wms/basicDataManage/factoryModeling/locationgroup/index.vue create mode 100644 src/views/wms/basicDataManage/factoryModeling/locationgroup/locationgroup.data.ts create mode 100644 src/views/wms/basicDataManage/factoryModeling/process/index.vue create mode 100644 src/views/wms/basicDataManage/factoryModeling/process/process.data.ts create mode 100644 src/views/wms/basicDataManage/factoryModeling/productionline/index.vue create mode 100644 src/views/wms/basicDataManage/factoryModeling/productionline/productionline.data.ts create mode 100644 src/views/wms/basicDataManage/factoryModeling/warehouse/index.vue create mode 100644 src/views/wms/basicDataManage/factoryModeling/warehouse/warehouse.data.ts create mode 100644 src/views/wms/basicDataManage/factoryModeling/workshop/index.vue create mode 100644 src/views/wms/basicDataManage/factoryModeling/workshop/workshop.data.ts create mode 100644 src/views/wms/basicDataManage/factoryModeling/workstation/index.vue create mode 100644 src/views/wms/basicDataManage/factoryModeling/workstation/workstation.data.ts create mode 100644 src/views/wms/basicDataManage/itemManage/bom/bom.data.ts create mode 100644 src/views/wms/basicDataManage/itemManage/bom/index.vue create mode 100644 src/views/wms/basicDataManage/itemManage/itemarea/index.vue create mode 100644 src/views/wms/basicDataManage/itemManage/itemarea/itemarea.data.ts create mode 100644 src/views/wms/basicDataManage/itemManage/itembasic/index.vue create mode 100644 src/views/wms/basicDataManage/itemManage/itembasic/itembasic.data.ts create mode 100644 src/views/wms/basicDataManage/itemManage/itempackage/index.vue create mode 100644 src/views/wms/basicDataManage/itemManage/itempackage/itempackage.data.ts create mode 100644 src/views/wms/basicDataManage/itemManage/itemwarehouse/index.vue create mode 100644 src/views/wms/basicDataManage/itemManage/itemwarehouse/itemwarehouse.data.ts create mode 100644 src/views/wms/basicDataManage/itemManage/packageunit/index.vue create mode 100644 src/views/wms/basicDataManage/itemManage/packageunit/packageunit.data.ts create mode 100644 src/views/wms/basicDataManage/itemManage/productionitemcodeSpareitemcode/index.vue create mode 100644 src/views/wms/basicDataManage/itemManage/productionitemcodeSpareitemcode/productionitemcodeSpareitemcode.data.ts create mode 100644 src/views/wms/basicDataManage/itemManage/productionlineitem/index.vue create mode 100644 src/views/wms/basicDataManage/itemManage/productionlineitem/productionlineitem.data.ts create mode 100644 src/views/wms/basicDataManage/itemManage/relegate/relegateRecord/index.vue create mode 100644 src/views/wms/basicDataManage/itemManage/relegate/relegateRecord/relegateRecordMain.data.ts create mode 100644 src/views/wms/basicDataManage/itemManage/relegate/relegateRequest/index.vue create mode 100644 src/views/wms/basicDataManage/itemManage/relegate/relegateRequest/relegateRequestMain.data.ts create mode 100644 src/views/wms/basicDataManage/itemManage/stdcostprice/index.vue create mode 100644 src/views/wms/basicDataManage/itemManage/stdcostprice/stdcostprice.data.ts create mode 100644 src/views/wms/basicDataManage/labelManage/barbasic/barbasic.data.ts create mode 100644 src/views/wms/basicDataManage/labelManage/barbasic/index.vue create mode 100644 src/views/wms/basicDataManage/labelManage/barcode/barcode.data.ts create mode 100644 src/views/wms/basicDataManage/labelManage/barcode/index.vue create mode 100644 src/views/wms/basicDataManage/labelManage/callmaterials/callmaterials.data.ts create mode 100644 src/views/wms/basicDataManage/labelManage/callmaterials/index.vue create mode 100644 src/views/wms/basicDataManage/labelManage/labeltype/index.vue create mode 100644 src/views/wms/basicDataManage/labelManage/labeltype/labeltype.data.ts create mode 100644 src/views/wms/basicDataManage/labelManage/locationLabel/index.vue create mode 100644 src/views/wms/basicDataManage/labelManage/locationLabel/locationLabel.data.ts create mode 100644 src/views/wms/basicDataManage/labelManage/manufacturePackage/index.vue create mode 100644 src/views/wms/basicDataManage/labelManage/manufacturePackage/manufacturePackage.data.ts create mode 100644 src/views/wms/basicDataManage/labelManage/purchasePackage/index.vue create mode 100644 src/views/wms/basicDataManage/labelManage/purchasePackage/purchasePackage.data.ts create mode 100644 src/views/wms/basicDataManage/labelManage/utensilPackage/index.vue create mode 100644 src/views/wms/basicDataManage/labelManage/utensilPackage/utensilPackage.data.ts create mode 100644 src/views/wms/basicDataManage/orderManage/carrier/carrier.data.ts create mode 100644 src/views/wms/basicDataManage/orderManage/carrier/index.vue create mode 100644 src/views/wms/basicDataManage/orderManage/owner/index.vue create mode 100644 src/views/wms/basicDataManage/orderManage/owner/owner.data.ts create mode 100644 src/views/wms/basicDataManage/orderManage/shift/index.vue create mode 100644 src/views/wms/basicDataManage/orderManage/shift/shift.data.ts create mode 100644 src/views/wms/basicDataManage/orderManage/team/index.vue create mode 100644 src/views/wms/basicDataManage/orderManage/team/team.data.ts create mode 100644 src/views/wms/basicDataManage/orderManage/team/teamForm.vue create mode 100644 src/views/wms/basicDataManage/strategySetting/condition/condition.data.ts create mode 100644 src/views/wms/basicDataManage/strategySetting/condition/index.vue create mode 100644 src/views/wms/basicDataManage/strategySetting/configuration/configuration.data.ts create mode 100644 src/views/wms/basicDataManage/strategySetting/configuration/index.vue create mode 100644 src/views/wms/basicDataManage/strategySetting/configurationsetting/configurationsetting.data.ts create mode 100644 src/views/wms/basicDataManage/strategySetting/configurationsetting/index.vue create mode 100644 src/views/wms/basicDataManage/strategySetting/paramsetting/index.vue create mode 100644 src/views/wms/basicDataManage/strategySetting/paramsetting/paramsetting.data.ts create mode 100644 src/views/wms/basicDataManage/strategySetting/rule/index.vue create mode 100644 src/views/wms/basicDataManage/strategySetting/rule/rule.data.ts create mode 100644 src/views/wms/basicDataManage/strategySetting/strategy/arrivalInspectionStrategy/AddForm.vue create mode 100644 src/views/wms/basicDataManage/strategySetting/strategy/arrivalInspectionStrategy/index.vue create mode 100644 src/views/wms/basicDataManage/strategySetting/strategy/batchStrategy/AddForm.vue create mode 100644 src/views/wms/basicDataManage/strategySetting/strategy/batchStrategy/index.vue create mode 100644 src/views/wms/basicDataManage/strategySetting/strategy/downShelfStrategy/AddForm.vue create mode 100644 src/views/wms/basicDataManage/strategySetting/strategy/downShelfStrategy/index.vue create mode 100644 src/views/wms/basicDataManage/strategySetting/strategy/inspectStrategy/AddForm.vue create mode 100644 src/views/wms/basicDataManage/strategySetting/strategy/inspectStrategy/index.vue create mode 100644 src/views/wms/basicDataManage/strategySetting/strategy/manageAccuracyStrategy/AddForm.vue create mode 100644 src/views/wms/basicDataManage/strategySetting/strategy/manageAccuracyStrategy/index.vue create mode 100644 src/views/wms/basicDataManage/strategySetting/strategy/purchaseReceiptStrategy/AddForm.vue create mode 100644 src/views/wms/basicDataManage/strategySetting/strategy/purchaseReceiptStrategy/index.vue create mode 100644 src/views/wms/basicDataManage/strategySetting/strategy/repairMaterialStrategy/AddForm.vue create mode 100644 src/views/wms/basicDataManage/strategySetting/strategy/repairMaterialStrategy/index.vue create mode 100644 src/views/wms/basicDataManage/strategySetting/strategy/storageCapacityStrategy/AddForm.vue create mode 100644 src/views/wms/basicDataManage/strategySetting/strategy/storageCapacityStrategy/index.vue create mode 100644 src/views/wms/basicDataManage/strategySetting/strategy/supplieDeliveryStrategy/AddForm.vue create mode 100644 src/views/wms/basicDataManage/strategySetting/strategy/supplieDeliveryStrategy/index.vue create mode 100644 src/views/wms/basicDataManage/strategySetting/strategy/upShelfStrategy/AddForm.vue create mode 100644 src/views/wms/basicDataManage/strategySetting/strategy/upShelfStrategy/index.vue create mode 100644 src/views/wms/basicDataManage/strategySetting/strategy/utensilCapacityStrategy/AddForm.vue create mode 100644 src/views/wms/basicDataManage/strategySetting/strategy/utensilCapacityStrategy/index.vue create mode 100644 src/views/wms/basicDataManage/strategySetting/strategy/warehouseStorageStrategy/AddForm.vue create mode 100644 src/views/wms/basicDataManage/strategySetting/strategy/warehouseStorageStrategy/index.vue create mode 100644 src/views/wms/basicDataManage/subject/mstr/index.vue create mode 100644 src/views/wms/basicDataManage/subject/mstr/mstr.data.ts create mode 100644 src/views/wms/basicDataManage/subject/qadCostcentre/index.vue create mode 100644 src/views/wms/basicDataManage/subject/qadCostcentre/qadCostcentre.data.ts create mode 100644 src/views/wms/basicDataManage/subject/qadProject/index.vue create mode 100644 src/views/wms/basicDataManage/subject/qadProject/qadProject.data.ts create mode 100644 src/views/wms/basicDataManage/subject/subjectAccount/index.vue create mode 100644 src/views/wms/basicDataManage/subject/subjectAccount/subjectAccount.data.ts create mode 100644 src/views/wms/basicDataManage/supplierManage/purchaseprice/index.vue create mode 100644 src/views/wms/basicDataManage/supplierManage/purchaseprice/purchaseprice.data.ts create mode 100644 src/views/wms/basicDataManage/supplierManage/supplier/index.vue create mode 100644 src/views/wms/basicDataManage/supplierManage/supplier/supplier.data.ts create mode 100644 src/views/wms/basicDataManage/supplierManage/supplierCycle/index.vue create mode 100644 src/views/wms/basicDataManage/supplierManage/supplierCycle/supplierCycle.data.ts create mode 100644 src/views/wms/basicDataManage/supplierManage/supplieritem/index.vue create mode 100644 src/views/wms/basicDataManage/supplierManage/supplieritem/supplieritem.data.ts create mode 100644 src/views/wms/basicDataManage/systemSetting/accountcalendar/accountcalendar.data.ts create mode 100644 src/views/wms/basicDataManage/systemSetting/accountcalendar/index.vue create mode 100644 src/views/wms/basicDataManage/systemSetting/currencyexchange/currencyexchange.data.ts create mode 100644 src/views/wms/basicDataManage/systemSetting/currencyexchange/index.vue create mode 100644 src/views/wms/basicDataManage/systemSetting/supplierUser/index.vue create mode 100644 src/views/wms/basicDataManage/systemSetting/supplierUser/supplierUser.data.ts create mode 100644 src/views/wms/basicDataManage/systemSetting/systemcalendar/index.vue create mode 100644 src/views/wms/basicDataManage/systemSetting/systemcalendar/systemcalendar.data.ts create mode 100644 src/views/wms/buttMesManage/mesBarCode/index.vue create mode 100644 src/views/wms/buttMesManage/mesBarCode/mesBarCode.data.ts create mode 100644 src/views/wms/countManage/count/countJobMain/countJobMain.data.ts create mode 100644 src/views/wms/countManage/count/countJobMain/index.vue create mode 100644 src/views/wms/countManage/count/countPlanMain/countPlanMain.data.ts create mode 100644 src/views/wms/countManage/count/countPlanMain/index.vue create mode 100644 src/views/wms/countManage/count/countRecordMain/countRecordMain.data.ts create mode 100644 src/views/wms/countManage/count/countRecordMain/index.vue create mode 100644 src/views/wms/countManage/count/countRequestMain/countRequestMain.data.ts create mode 100644 src/views/wms/countManage/count/countRequestMain/index.vue create mode 100644 src/views/wms/countManage/countadjust/countadjustRecordMain/countadjustRecordMain.data.ts create mode 100644 src/views/wms/countManage/countadjust/countadjustRecordMain/index.vue create mode 100644 src/views/wms/countManage/countadjust/countadjustRequestMain/countadjustRequestMain.data.ts create mode 100644 src/views/wms/countManage/countadjust/countadjustRequestMain/index.vue create mode 100644 src/views/wms/deliversettlementManage/customerreceipt/customerreceiptRecordMain/customerreceiptRecordMain.data.ts create mode 100644 src/views/wms/deliversettlementManage/customerreceipt/customerreceiptRecordMain/index.vue create mode 100644 src/views/wms/deliversettlementManage/customerreceipt/customerreceiptRequestMain/customerreceiptRequestMain.data.ts create mode 100644 src/views/wms/deliversettlementManage/customerreceipt/customerreceiptRequestMain/index.vue create mode 100644 src/views/wms/deliversettlementManage/customerreturn/customerreturnJobMain/customerreturnJobMain.data.ts create mode 100644 src/views/wms/deliversettlementManage/customerreturn/customerreturnJobMain/index.vue create mode 100644 src/views/wms/deliversettlementManage/customerreturn/customerreturnRecordMain/customerreturnRecordMain.data.ts create mode 100644 src/views/wms/deliversettlementManage/customerreturn/customerreturnRecordMain/index.vue create mode 100644 src/views/wms/deliversettlementManage/customerreturn/customerreturnRequestMain/customerreturnRequestMain.data.ts create mode 100644 src/views/wms/deliversettlementManage/customerreturn/customerreturnRequestMain/index.vue create mode 100644 src/views/wms/deliversettlementManage/customersettle/customersettleRecordMain/customersettleRecordMain.data.ts create mode 100644 src/views/wms/deliversettlementManage/customersettle/customersettleRecordMain/index.vue create mode 100644 src/views/wms/deliversettlementManage/customersettle/customersettleRequestMain/customersettleRequestMain.data.ts create mode 100644 src/views/wms/deliversettlementManage/customersettle/customersettleRequestMain/index.vue create mode 100644 src/views/wms/deliversettlementManage/deliver/deliverJobMain/deliverJobMain.data.ts create mode 100644 src/views/wms/deliversettlementManage/deliver/deliverJobMain/index.vue create mode 100644 src/views/wms/deliversettlementManage/deliver/deliverRecordMain/deliverRecordMain.data.ts create mode 100644 src/views/wms/deliversettlementManage/deliver/deliverRecordMain/index.vue create mode 100644 src/views/wms/deliversettlementManage/deliver/deliverRequestMain/deliverRequestMain.data.ts create mode 100644 src/views/wms/deliversettlementManage/deliver/deliverRequestMain/index.vue create mode 100644 src/views/wms/deliversettlementManage/deliverplan/deliverPlanMain/deliverPlanMain.data.ts create mode 100644 src/views/wms/deliversettlementManage/deliverplan/deliverPlanMain/index.vue create mode 100644 src/views/wms/deliversettlementManage/deliverplan/saleMain/index.vue create mode 100644 src/views/wms/deliversettlementManage/deliverplan/saleMain/saleMain.data.ts create mode 100644 src/views/wms/deliversettlementManage/saleShipmentMainRecord/index.vue create mode 100644 src/views/wms/deliversettlementManage/saleShipmentMainRecord/saleShipmentMainRecord.data.ts create mode 100644 src/views/wms/deliversettlementManage/saleShipmentMainRequest/index.vue create mode 100644 src/views/wms/deliversettlementManage/saleShipmentMainRequest/saleShipmentMain.data.ts create mode 100644 src/views/wms/deliversettlementManage/stockup/stockupMainJob/index.vue create mode 100644 src/views/wms/deliversettlementManage/stockup/stockupMainJob/stockupMainJob.data.ts create mode 100644 src/views/wms/deliversettlementManage/stockup/stockupMainRecord/index.vue create mode 100644 src/views/wms/deliversettlementManage/stockup/stockupMainRecord/stockupMainRecord.data.ts create mode 100644 src/views/wms/deliversettlementManage/stockup/stockupMainRequest/index.vue create mode 100644 src/views/wms/deliversettlementManage/stockup/stockupMainRequest/stockupMainRequest.data.ts create mode 100644 src/views/wms/inventoryManage/balance/balance.data.ts create mode 100644 src/views/wms/inventoryManage/balance/index.vue create mode 100644 src/views/wms/inventoryManage/balanceSummary/balanceSummary.data.ts create mode 100644 src/views/wms/inventoryManage/balanceSummary/index.vue create mode 100644 src/views/wms/inventoryManage/container/containerMain.data.ts create mode 100644 src/views/wms/inventoryManage/container/index.vue create mode 100644 src/views/wms/inventoryManage/containerinit/containerBindRecord/containerBindRecordMain.data.ts create mode 100644 src/views/wms/inventoryManage/containerinit/containerBindRecord/index.vue create mode 100644 src/views/wms/inventoryManage/containerinit/containerRepair/containerRepairRecordMain.data.ts create mode 100644 src/views/wms/inventoryManage/containerinit/containerRepair/index.vue create mode 100644 src/views/wms/inventoryManage/containerinit/containerUnbindRecord/containerUnbindRecordMain.data.ts create mode 100644 src/views/wms/inventoryManage/containerinit/containerUnbindRecord/index.vue create mode 100644 src/views/wms/inventoryManage/containerinit/containerinitadd/containerMain.data.ts create mode 100644 src/views/wms/inventoryManage/containerinit/containerinitadd/index.vue create mode 100644 src/views/wms/inventoryManage/containerinit/containerinitrecord/containerInitRecordMain.data.ts create mode 100644 src/views/wms/inventoryManage/containerinit/containerinitrecord/index.vue create mode 100644 src/views/wms/inventoryManage/expectin/expectin.data.ts create mode 100644 src/views/wms/inventoryManage/expectin/index.vue create mode 100644 src/views/wms/inventoryManage/expectout/expectout.data.ts create mode 100644 src/views/wms/inventoryManage/expectout/index.vue create mode 100644 src/views/wms/inventoryManage/locationcapacity/index.vue create mode 100644 src/views/wms/inventoryManage/locationcapacity/locationcapacity.data.ts create mode 100644 src/views/wms/inventoryManage/package/index.vue create mode 100644 src/views/wms/inventoryManage/package/package.data.ts create mode 100644 src/views/wms/inventoryManage/transaction/index.vue create mode 100644 src/views/wms/inventoryManage/transaction/transaction.data.ts create mode 100644 src/views/wms/inventoryManage/transferlog/index.vue create mode 100644 src/views/wms/inventoryManage/transferlog/transferlog.data.ts create mode 100644 src/views/wms/inventoryjobManage/containermanage/containerMainRequest/containerMainRequest.data.ts create mode 100644 src/views/wms/inventoryjobManage/containermanage/containerMainRequest/index.vue create mode 100644 src/views/wms/inventoryjobManage/containermanage/containerRecordMain/containerRecordMain.data.ts create mode 100644 src/views/wms/inventoryjobManage/containermanage/containerRecordMain/index.vue create mode 100644 src/views/wms/inventoryjobManage/containermanage/initialContainerMainRequest/index.vue create mode 100644 src/views/wms/inventoryjobManage/containermanage/initialContainerMainRequest/initialContainerMainRequest.data.ts create mode 100644 src/views/wms/inventoryjobManage/containermanage/scrapContainerMainRequest/index.vue create mode 100644 src/views/wms/inventoryjobManage/containermanage/scrapContainerMainRequest/scrapContainerMainRequest.data.ts create mode 100644 src/views/wms/inventoryjobManage/inventoryinitial/inventoryinitRecordMain/index.vue create mode 100644 src/views/wms/inventoryjobManage/inventoryinitial/inventoryinitRecordMain/inventoryinitRecordMain.data.ts create mode 100644 src/views/wms/inventoryjobManage/inventoryinitial/inventoryinitRequestMain/index.vue create mode 100644 src/views/wms/inventoryjobManage/inventoryinitial/inventoryinitRequestMain/inventoryinitRequestMain.data.ts create mode 100644 src/views/wms/inventoryjobManage/packageManage/packagemergeMain/index.vue create mode 100644 src/views/wms/inventoryjobManage/packageManage/packagemergeMain/packagemergeMain.data.ts create mode 100644 src/views/wms/inventoryjobManage/packageManage/packageoverMain/packageoverJobMain/index.vue create mode 100644 src/views/wms/inventoryjobManage/packageManage/packageoverMain/packageoverJobMain/packageoverJobMain.data.ts create mode 100644 src/views/wms/inventoryjobManage/packageManage/packageoverMain/packageoverRecordMain/index.vue create mode 100644 src/views/wms/inventoryjobManage/packageManage/packageoverMain/packageoverRecordMain/packageoverRecordMain.data.ts create mode 100644 src/views/wms/inventoryjobManage/packageManage/packageoverMain/packageoverRequestMain/index.vue create mode 100644 src/views/wms/inventoryjobManage/packageManage/packageoverMain/packageoverRequestMain/packageoverRequestMain.data.ts create mode 100644 src/views/wms/inventoryjobManage/packageManage/packageoverMain/packageoverRetrospect/index.vue create mode 100644 src/views/wms/inventoryjobManage/packageManage/packageoverMain/packageoverRetrospect/packageoverRetrospect.data.ts create mode 100644 src/views/wms/inventoryjobManage/packageManage/packagesplitMain/index.vue create mode 100644 src/views/wms/inventoryjobManage/packageManage/packagesplitMain/packagesplitMain.data.ts create mode 100644 src/views/wms/inventoryjobManage/scrap/scrapJobMain/index.vue create mode 100644 src/views/wms/inventoryjobManage/scrap/scrapJobMain/scrapJobMain.data.ts create mode 100644 src/views/wms/inventoryjobManage/scrap/scrapRecordMain/index.vue create mode 100644 src/views/wms/inventoryjobManage/scrap/scrapRecordMain/scrapRecordMain.data.ts create mode 100644 src/views/wms/inventoryjobManage/scrap/scrapRequestMain/index.vue create mode 100644 src/views/wms/inventoryjobManage/scrap/scrapRequestMain/scrapRequestMain.data.ts create mode 100644 src/views/wms/inventoryjobManage/sparepartReturn/sparepartReturnRecordMain/index.vue create mode 100644 src/views/wms/inventoryjobManage/sparepartReturn/sparepartReturnRecordMain/sparepartReturnRecordMain.data.ts create mode 100644 src/views/wms/inventoryjobManage/sparepartReturn/sparepartReturnRequestMain/index.vue create mode 100644 src/views/wms/inventoryjobManage/sparepartReturn/sparepartReturnRequestMain/sparepartReturnRequestMain.data.ts create mode 100644 src/views/wms/inventoryjobManage/sparepartsrequisition/sparepartsrequisitionJobMain/index.vue create mode 100644 src/views/wms/inventoryjobManage/sparepartsrequisition/sparepartsrequisitionJobMain/sparepartsrequisitionJobMain.data.ts create mode 100644 src/views/wms/inventoryjobManage/sparepartsrequisition/sparepartsrequisitionRecordMain/index.vue create mode 100644 src/views/wms/inventoryjobManage/sparepartsrequisition/sparepartsrequisitionRecordMain/sparepartsrequisitionRecordMain.data.ts create mode 100644 src/views/wms/inventoryjobManage/sparepartsrequisition/sparepartsrequisitionRequestMain/index.vue create mode 100644 src/views/wms/inventoryjobManage/sparepartsrequisition/sparepartsrequisitionRequestMain/sparepartsrequisitionRequestMain.data.ts create mode 100644 src/views/wms/inventoryjobManage/transferissue/transferissueJobMain/index.vue create mode 100644 src/views/wms/inventoryjobManage/transferissue/transferissueJobMain/transferissueJobMain.data.ts create mode 100644 src/views/wms/inventoryjobManage/transferissue/transferissueRecordMain/index.vue create mode 100644 src/views/wms/inventoryjobManage/transferissue/transferissueRecordMain/transferissueRecordMain.data.ts create mode 100644 src/views/wms/inventoryjobManage/transferissue/transferissueRequestMain/index.vue create mode 100644 src/views/wms/inventoryjobManage/transferissue/transferissueRequestMain/transferissueRequestMain.data.ts create mode 100644 src/views/wms/inventoryjobManage/transferreceipt/transferreceiptJobMain/index.vue create mode 100644 src/views/wms/inventoryjobManage/transferreceipt/transferreceiptJobMain/transferreceiptJobMain.data.ts create mode 100644 src/views/wms/inventoryjobManage/transferreceipt/transferreceiptRecordMain/index.vue create mode 100644 src/views/wms/inventoryjobManage/transferreceipt/transferreceiptRecordMain/transferreceiptRecordMain.data.ts create mode 100644 src/views/wms/inventoryjobManage/transferreceipt/transferreceiptRequestMain/index.vue create mode 100644 src/views/wms/inventoryjobManage/transferreceipt/transferreceiptRequestMain/transferreceiptRequestMain.data.ts create mode 100644 src/views/wms/inventoryjobManage/unplannedissue/unplannedissueJobMain/index.vue create mode 100644 src/views/wms/inventoryjobManage/unplannedissue/unplannedissueJobMain/unplannedissueJobMain.data.ts create mode 100644 src/views/wms/inventoryjobManage/unplannedissue/unplannedissueRecordMain/index.vue create mode 100644 src/views/wms/inventoryjobManage/unplannedissue/unplannedissueRecordMain/unplannedissueRecordMain.data.ts create mode 100644 src/views/wms/inventoryjobManage/unplannedissue/unplannedissueRequestMain/index.vue create mode 100644 src/views/wms/inventoryjobManage/unplannedissue/unplannedissueRequestMain/unplannedissueRequestMain.data.ts create mode 100644 src/views/wms/inventoryjobManage/unplannedreceipt/unplannedreceiptJobMain/index.vue create mode 100644 src/views/wms/inventoryjobManage/unplannedreceipt/unplannedreceiptJobMain/unplannedreceiptJobMain.data.ts create mode 100644 src/views/wms/inventoryjobManage/unplannedreceipt/unplannedreceiptRecordMain/index.vue create mode 100644 src/views/wms/inventoryjobManage/unplannedreceipt/unplannedreceiptRecordMain/unplannedreceiptRecordMain.data.ts create mode 100644 src/views/wms/inventoryjobManage/unplannedreceipt/unplannedreceiptRequestMain/index.vue create mode 100644 src/views/wms/inventoryjobManage/unplannedreceipt/unplannedreceiptRequestMain/unplannedreceiptRequestMain.data.ts create mode 100644 src/views/wms/issueManage/issue/issueJobMain/index.vue create mode 100644 src/views/wms/issueManage/issue/issueJobMain/issueJobMain.data.ts create mode 100644 src/views/wms/issueManage/issue/issueRecordMain/index.vue create mode 100644 src/views/wms/issueManage/issue/issueRecordMain/issueRecordMain.data.ts create mode 100644 src/views/wms/issueManage/issue/issueRequestMain/index.vue create mode 100644 src/views/wms/issueManage/issue/issueRequestMain/issueRequestMain.data.ts create mode 100644 src/views/wms/issueManage/onlinesettlement/onlinesettlementRecordMain/index.vue create mode 100644 src/views/wms/issueManage/onlinesettlement/onlinesettlementRecordMain/onlinesettlementRecordMain.data.ts create mode 100644 src/views/wms/issueManage/onlinesettlement/onlinesettlementRequestMain/index.vue create mode 100644 src/views/wms/issueManage/onlinesettlement/onlinesettlementRequestMain/onlinesettlementRequestMain.data.ts create mode 100644 src/views/wms/issueManage/pick/pickJobMain/index.vue create mode 100644 src/views/wms/issueManage/pick/pickJobMain/pickJobMain.data.ts create mode 100644 src/views/wms/issueManage/pick/pickRecordMain/index.vue create mode 100644 src/views/wms/issueManage/pick/pickRecordMain/pickRecordMain.data.ts create mode 100644 src/views/wms/issueManage/pick/pickRequestMain/index.vue create mode 100644 src/views/wms/issueManage/pick/pickRequestMain/pickRequestMain.data.ts create mode 100644 src/views/wms/issueManage/preparetoissueplan/preparetoissueMain/index.vue create mode 100644 src/views/wms/issueManage/preparetoissueplan/preparetoissueMain/preparetoissueMain.data.ts create mode 100644 src/views/wms/issueManage/productionreceipt/productionreceiptJobMain/index.vue create mode 100644 src/views/wms/issueManage/productionreceipt/productionreceiptJobMain/productionreceiptJobMain.data.ts create mode 100644 src/views/wms/issueManage/productionreceipt/productionreceiptRecordMain/index.vue create mode 100644 src/views/wms/issueManage/productionreceipt/productionreceiptRecordMain/productionreceiptRecordMain.data.ts create mode 100644 src/views/wms/issueManage/productionreturn/productionreturnJobMain/index.vue create mode 100644 src/views/wms/issueManage/productionreturn/productionreturnJobMain/productionreturnJobMain.data.ts create mode 100644 src/views/wms/issueManage/productionreturn/productionreturnRecordMain/index.vue create mode 100644 src/views/wms/issueManage/productionreturn/productionreturnRecordMain/productionreturnRecordMain.data.ts create mode 100644 src/views/wms/issueManage/productionreturn/productionreturnRecordMainHold/index.vue create mode 100644 src/views/wms/issueManage/productionreturn/productionreturnRecordMainHold/productionreturnRecordMainHold.data.ts create mode 100644 src/views/wms/issueManage/productionreturn/productionreturnRequestMain/index.vue create mode 100644 src/views/wms/issueManage/productionreturn/productionreturnRequestMain/productionreturnRequestMain.data.ts create mode 100644 src/views/wms/issueManage/productionreturn/productionreturnRequestMainNo/index.vue create mode 100644 src/views/wms/issueManage/productionreturn/productionreturnRequestMainNo/productionreturnRequestMain.data.ts create mode 100644 src/views/wms/issueManage/productionreturn/productionreturnRequestMainNo/productionreturnRequestMainNo.data.ts create mode 100644 src/views/wms/issueManage/productionscrap/productionscrapRecordMain/index.vue create mode 100644 src/views/wms/issueManage/productionscrap/productionscrapRecordMain/productionscrapRecordMain.data.ts create mode 100644 src/views/wms/issueManage/productionscrap/productionscrapRequestMain/index.vue create mode 100644 src/views/wms/issueManage/productionscrap/productionscrapRequestMain/productionscrapRequestMain.data.ts create mode 100644 src/views/wms/issueManage/repleinsh/repleinshJobMain/index.vue create mode 100644 src/views/wms/issueManage/repleinsh/repleinshJobMain/repleinshJobMain.data.ts create mode 100644 src/views/wms/issueManage/repleinsh/repleinshRecordMain/index.vue create mode 100644 src/views/wms/issueManage/repleinsh/repleinshRecordMain/repleinshRecordMain.data.ts create mode 100644 src/views/wms/issueManage/repleinsh/repleinshRequestMain/index.vue create mode 100644 src/views/wms/issueManage/repleinsh/repleinshRequestMain/repleinshRequestMain.data.ts create mode 100644 src/views/wms/moveManage/inventorychange/inventorychangeRecordMain/index.vue create mode 100644 src/views/wms/moveManage/inventorychange/inventorychangeRecordMain/inventorychangeRecordMain.data.ts create mode 100644 src/views/wms/moveManage/inventorychange/inventorychangeRequestMain/index.vue create mode 100644 src/views/wms/moveManage/inventorychange/inventorychangeRequestMain/inventorychangeRequestMain.data.ts create mode 100644 src/views/wms/moveManage/inventorymove/inventorymoveJobMain/index.vue create mode 100644 src/views/wms/moveManage/inventorymove/inventorymoveJobMain/inventorymoveJobMain.data.ts create mode 100644 src/views/wms/moveManage/inventorymove/inventorymoveRecordMain/index.vue create mode 100644 src/views/wms/moveManage/inventorymove/inventorymoveRecordMain/inventorymoveRecordMain.data.ts create mode 100644 src/views/wms/moveManage/inventorymove/inventorymoveRecordMainNew/index.vue create mode 100644 src/views/wms/moveManage/inventorymove/inventorymoveRecordMainNew/inventorymoveRecordMainNew.data.ts create mode 100644 src/views/wms/moveManage/inventorymove/inventorymoveRecordMainNew/inventorymoveRecordRequestMain.data.ts create mode 100644 src/views/wms/moveManage/inventorymove/inventorymoveRecordMainOKHOLD/index.vue create mode 100644 src/views/wms/moveManage/inventorymove/inventorymoveRecordMainOKHOLD/inventorymoveRecordMainOKHOLD.data.ts create mode 100644 src/views/wms/moveManage/inventorymove/inventorymoveRequestMain/index.vue create mode 100644 src/views/wms/moveManage/inventorymove/inventorymoveRequestMain/inventorymoveRequestMain.data.ts create mode 100644 src/views/wms/moveManage/inventorymove/inventorymoveRequestMainHOLDWIP/index.vue create mode 100644 src/views/wms/moveManage/inventorymove/inventorymoveRequestMainHOLDWIP/inventorymoveRequestMain.data.ts create mode 100644 src/views/wms/moveManage/inventorymove/inventorymoveRequestMainMOVE/index.vue create mode 100644 src/views/wms/moveManage/inventorymove/inventorymoveRequestMainMOVE/inventorymoveRequestMain.data.ts create mode 100644 src/views/wms/moveManage/inventorymove/inventorymoveRequestMainOKHOLD/index.vue create mode 100644 src/views/wms/moveManage/inventorymove/inventorymoveRequestMainOKHOLD/inventorymoveRequestMain.data.ts create mode 100644 src/views/wms/moveManage/itemChange/index.vue create mode 100644 src/views/wms/moveManage/itemChange/itemChange.data.ts create mode 100644 src/views/wms/productionManage/offlinesettlement/offlinesettlementRecordMain/index.vue create mode 100644 src/views/wms/productionManage/offlinesettlement/offlinesettlementRecordMain/offlinesettlementRecordMain.data.ts create mode 100644 src/views/wms/productionManage/offlinesettlement/offlinesettlementRequestMain/index.vue create mode 100644 src/views/wms/productionManage/offlinesettlement/offlinesettlementRequestMain/offlinesettlementRequestMain.data.ts create mode 100644 src/views/wms/productionManage/processproduction/processproductionRecord/index.vue create mode 100644 src/views/wms/productionManage/processproduction/processproductionRecord/processproductionRecordMain.data.ts create mode 100644 src/views/wms/productionManage/processproduction/processproductionRequest/index.vue create mode 100644 src/views/wms/productionManage/processproduction/processproductionRequest/processproductionRequestMain.data.ts create mode 100644 src/views/wms/productionManage/productdismantle/productdismantleJobMain/index.vue create mode 100644 src/views/wms/productionManage/productdismantle/productdismantleJobMain/productdismantleJobMain.data.ts create mode 100644 src/views/wms/productionManage/productdismantle/productdismantleRecordMain/index.vue create mode 100644 src/views/wms/productionManage/productdismantle/productdismantleRecordMain/productdismantleRecordMain.data.ts create mode 100644 src/views/wms/productionManage/productdismantle/productdismantleRequestMain/index.vue create mode 100644 src/views/wms/productionManage/productdismantle/productdismantleRequestMain/productdismantleRequestMain.data.ts create mode 100644 src/views/wms/productionManage/productionplan/productionMain/index.vue create mode 100644 src/views/wms/productionManage/productionplan/productionMain/productionMain.data.ts create mode 100644 src/views/wms/productionManage/productionplan/productionMainAssemble/index.vue create mode 100644 src/views/wms/productionManage/productionplan/productionMainAssemble/productionMainAssemble.data.ts create mode 100644 src/views/wms/productionManage/productionplan/productionMainAssembleSparePart/index.vue create mode 100644 src/views/wms/productionManage/productionplan/productionMainAssembleSparePart/productionMainAssembleSparePart.data.ts create mode 100644 src/views/wms/productionManage/productionplan/productionMainPredictSparePart/index.vue create mode 100644 src/views/wms/productionManage/productionplan/productionMainPredictSparePart/productionMainPredictSparePart.data.ts create mode 100644 src/views/wms/productionManage/productionplan/qadproductionplan/index.vue create mode 100644 src/views/wms/productionManage/productionplan/qadproductionplan/qadProductionPlanMain.data.ts create mode 100644 src/views/wms/productionManage/productionplan/workMain/index.vue create mode 100644 src/views/wms/productionManage/productionplan/workMain/workMain.data.ts create mode 100644 src/views/wms/productionManage/productputaway/productputawayJobMain/index.vue create mode 100644 src/views/wms/productionManage/productputaway/productputawayJobMain/productputawayJobMain.data.ts create mode 100644 src/views/wms/productionManage/productputaway/productputawayRecordMain/index.vue create mode 100644 src/views/wms/productionManage/productputaway/productputawayRecordMain/productputawayRecordMain.data.ts create mode 100644 src/views/wms/productionManage/productputaway/productputawayRequestMain/index.vue create mode 100644 src/views/wms/productionManage/productputaway/productputawayRequestMain/productputawayRequestMain.data.ts create mode 100644 src/views/wms/productionManage/productputawayAssemble/productputawayAssembleJobMain/index.vue create mode 100644 src/views/wms/productionManage/productputawayAssemble/productputawayAssembleJobMain/productputawayAssembleJobMain.data.ts create mode 100644 src/views/wms/productionManage/productputawayAssemble/productputawayAssembleRecordMain/index.vue create mode 100644 src/views/wms/productionManage/productputawayAssemble/productputawayAssembleRecordMain/productputawayAssembleRecordMain.data.ts create mode 100644 src/views/wms/productionManage/productputawayAssemble/productputawayAssembleRequestMain/index.vue create mode 100644 src/views/wms/productionManage/productputawayAssemble/productputawayAssembleRequestMain/productputawayAssembleRequestMain.data.ts create mode 100644 src/views/wms/productionManage/productreceipt/productreceiptJobMain/index.vue create mode 100644 src/views/wms/productionManage/productreceipt/productreceiptJobMain/productreceiptJobMain.data.ts create mode 100644 src/views/wms/productionManage/productreceipt/productreceiptRecordMain/index.vue create mode 100644 src/views/wms/productionManage/productreceipt/productreceiptRecordMain/productreceiptRecordMain.data.ts create mode 100644 src/views/wms/productionManage/productreceipt/productreceiptRequestMain/index.vue create mode 100644 src/views/wms/productionManage/productreceipt/productreceiptRequestMain/productreceiptRequestMain.data.ts create mode 100644 src/views/wms/productionManage/productreceiptAssemble/mesRawMaterialConsumptionInfo/index.vue create mode 100644 src/views/wms/productionManage/productreceiptAssemble/mesRawMaterialConsumptionInfo/mesRawMaterialConsumptionInfo.data.ts create mode 100644 src/views/wms/productionManage/productreceiptAssemble/productreceiptAssembleJobMain/index.vue create mode 100644 src/views/wms/productionManage/productreceiptAssemble/productreceiptAssembleJobMain/productreceiptAssembleJobMain.data.ts create mode 100644 src/views/wms/productionManage/productreceiptAssemble/productreceiptAssembleRecordMain/index.vue create mode 100644 src/views/wms/productionManage/productreceiptAssemble/productreceiptAssembleRecordMain/productreceiptAssembleRecordMain.data.ts create mode 100644 src/views/wms/productionManage/productreceiptAssemble/productreceiptAssembleRequestMain/index.vue create mode 100644 src/views/wms/productionManage/productreceiptAssemble/productreceiptAssembleRequestMain/productreceiptAssembleRequestMain.data.ts create mode 100644 src/views/wms/productionManage/productreceiptAssemble/rawMaterialConsumptionInfo/index.vue create mode 100644 src/views/wms/productionManage/productreceiptAssemble/rawMaterialConsumptionInfo/rawMaterialConsumptionInfo.data.ts create mode 100644 src/views/wms/productionManage/productreceiptscrap/productreceiptscrapJobMain/index.vue create mode 100644 src/views/wms/productionManage/productreceiptscrap/productreceiptscrapJobMain/productreceiptscrapJobMain.data.ts create mode 100644 src/views/wms/productionManage/productreceiptscrap/productreceiptscrapRecordMain/index.vue create mode 100644 src/views/wms/productionManage/productreceiptscrap/productreceiptscrapRecordMain/productreceiptscrapRecordMain.data.ts create mode 100644 src/views/wms/productionManage/productreceiptscrap/productreceiptscrapRequestMain/index.vue create mode 100644 src/views/wms/productionManage/productreceiptscrap/productreceiptscrapRequestMain/productreceiptscrapRequestMain.data.ts create mode 100644 src/views/wms/productionManage/productredress/productredressJobMain/index.vue create mode 100644 src/views/wms/productionManage/productredress/productredressJobMain/productredressJobMain.data.ts create mode 100644 src/views/wms/productionManage/productredress/productredressRecordMain/index.vue create mode 100644 src/views/wms/productionManage/productredress/productredressRecordMain/productredressRecordMain.data.ts create mode 100644 src/views/wms/productionManage/productredress/productredressRequestMain/index.vue create mode 100644 src/views/wms/productionManage/productredress/productredressRequestMain/productredressRequestMain.data.ts create mode 100644 src/views/wms/productionManage/productrepair/productrepairRecordMain/index.vue create mode 100644 src/views/wms/productionManage/productrepair/productrepairRecordMain/productrepairRecordMain.data.ts create mode 100644 src/views/wms/productionManage/productrepair/productrepairRequestMain/index.vue create mode 100644 src/views/wms/productionManage/productrepair/productrepairRequestMain/productrepairRequestMain.data.ts create mode 100644 src/views/wms/productionManage/productscrap/productscrapJobMain/index.vue create mode 100644 src/views/wms/productionManage/productscrap/productscrapJobMain/productscrapJobMain.data.ts create mode 100644 src/views/wms/productionManage/productscrap/productscrapRecordMain/index.vue create mode 100644 src/views/wms/productionManage/productscrap/productscrapRecordMain/productscrapRecordMain.data.ts create mode 100644 src/views/wms/productionManage/productscrap/productscrapRequestMain/index.vue create mode 100644 src/views/wms/productionManage/productscrap/productscrapRequestMain/productscrapRequestMain.data.ts create mode 100644 src/views/wms/purchasereceiptManage/inspect/inspectJobMain/index.vue create mode 100644 src/views/wms/purchasereceiptManage/inspect/inspectJobMain/inspectJobMain.data.ts create mode 100644 src/views/wms/purchasereceiptManage/inspect/inspectRecordMain/index.vue create mode 100644 src/views/wms/purchasereceiptManage/inspect/inspectRecordMain/inspectRecordMain.data.ts create mode 100644 src/views/wms/purchasereceiptManage/inspect/inspectRequestMain/index.vue create mode 100644 src/views/wms/purchasereceiptManage/inspect/inspectRequestMain/inspectRequestMain.data.ts create mode 100644 src/views/wms/purchasereceiptManage/purchasereceipt/purchasereceiptJobMain/index.vue create mode 100644 src/views/wms/purchasereceiptManage/purchasereceipt/purchasereceiptJobMain/purchasereceiptJobMain.data.ts create mode 100644 src/views/wms/purchasereceiptManage/purchasereceipt/purchasereceiptRecordMTypeMain/index.vue create mode 100644 src/views/wms/purchasereceiptManage/purchasereceipt/purchasereceiptRecordMTypeMain/purchasereceiptRecordMain.data.ts create mode 100644 src/views/wms/purchasereceiptManage/purchasereceipt/purchasereceiptRecordMain/index.vue create mode 100644 src/views/wms/purchasereceiptManage/purchasereceipt/purchasereceiptRecordMain/purchasereceiptRecordMain.data.ts create mode 100644 src/views/wms/purchasereceiptManage/purchasereceipt/purchasereceiptRecordRefuseMain/index.vue create mode 100644 src/views/wms/purchasereceiptManage/purchasereceipt/purchasereceiptRecordRefuseMain/purchasereceiptRecordMain.data.ts create mode 100644 src/views/wms/purchasereceiptManage/purchasereceipt/purchasereceiptReport/index.vue create mode 100644 src/views/wms/purchasereceiptManage/purchasereceipt/purchasereceiptRequestMain/index.vue create mode 100644 src/views/wms/purchasereceiptManage/purchasereceipt/purchasereceiptRequestMain/purchasereceiptRequestMain.data.ts create mode 100644 src/views/wms/purchasereceiptManage/purchasereceipt/purchasereceiptRequestOrderMTypeMain/index.vue create mode 100644 src/views/wms/purchasereceiptManage/purchasereceipt/purchasereceiptRequestOrderMTypeMain/purchasereceiptRequestMain.data.ts create mode 100644 src/views/wms/purchasereceiptManage/purchasereturn/purchasereturnJobMain/index.vue create mode 100644 src/views/wms/purchasereceiptManage/purchasereturn/purchasereturnJobMain/purchasereturnJobMain.data.ts create mode 100644 src/views/wms/purchasereceiptManage/purchasereturn/purchasereturnRecordMOrderTypeMain/index.vue create mode 100644 src/views/wms/purchasereceiptManage/purchasereturn/purchasereturnRecordMOrderTypeMain/purchasereturnRecordMOrderTypeMain.data.ts create mode 100644 src/views/wms/purchasereceiptManage/purchasereturn/purchasereturnRecordMain/index.vue create mode 100644 src/views/wms/purchasereceiptManage/purchasereturn/purchasereturnRecordMain/purchasereturnRecordMain.data.ts create mode 100644 src/views/wms/purchasereceiptManage/purchasereturn/purchasereturnRequestMOrderTypeMain/index.vue create mode 100644 src/views/wms/purchasereceiptManage/purchasereturn/purchasereturnRequestMOrderTypeMain/purchasereturnRequestMOrderTypeMain.data.ts create mode 100644 src/views/wms/purchasereceiptManage/purchasereturn/purchasereturnRequestMOrderTypeMain/purchasereturnRequestMain.data.ts create mode 100644 src/views/wms/purchasereceiptManage/purchasereturn/purchasereturnRequestMOrderTypeMain/purchasereturnRequestMainNew.data.ts create mode 100644 src/views/wms/purchasereceiptManage/purchasereturn/purchasereturnRequestMain/index.vue create mode 100644 src/views/wms/purchasereceiptManage/purchasereturn/purchasereturnRequestMain/purchasereturnRequestMain.data.ts create mode 100644 src/views/wms/purchasereceiptManage/purchasereturn/purchasereturnRequestMainNew/index.vue create mode 100644 src/views/wms/purchasereceiptManage/purchasereturn/purchasereturnRequestMainNew/purchasereturnRequestMain.data.ts create mode 100644 src/views/wms/purchasereceiptManage/purchasereturn/purchasereturnRequestMainNew/purchasereturnRequestMainNew.data.ts create mode 100644 src/views/wms/purchasereceiptManage/purchasereturnspare/purchasereturnRecordSpareMain/index.vue create mode 100644 src/views/wms/purchasereceiptManage/purchasereturnspare/purchasereturnRecordSpareMain/purchasereturnRecordSpareMain.data.ts create mode 100644 src/views/wms/purchasereceiptManage/purchasereturnspare/purchasereturnRequestSpareMain/index.vue create mode 100644 src/views/wms/purchasereceiptManage/purchasereturnspare/purchasereturnRequestSpareMain/purchasereturnRequestSpareMain.data.ts create mode 100644 src/views/wms/purchasereceiptManage/purchasereturnspare/purchasereturnRequestSpareMain/purchasereturnRequestSpareMainNew.data.ts create mode 100644 src/views/wms/purchasereceiptManage/putaway/putawayJobMain/index.vue create mode 100644 src/views/wms/purchasereceiptManage/putaway/putawayJobMain/putawayJobMain.data.ts create mode 100644 src/views/wms/purchasereceiptManage/putaway/putawayRecordMain/index.vue create mode 100644 src/views/wms/purchasereceiptManage/putaway/putawayRecordMain/putawayRecordMain.data.ts create mode 100644 src/views/wms/purchasereceiptManage/putaway/putawayRequestMain/index.vue create mode 100644 src/views/wms/purchasereceiptManage/putaway/putawayRequestMain/putawayRequestMain.data.ts create mode 100644 src/views/wms/purchasereceiptManage/sparereceipt/sparereceiptJobMain/index.vue create mode 100644 src/views/wms/purchasereceiptManage/sparereceipt/sparereceiptJobMain/sparereceiptJobMain.data.ts create mode 100644 src/views/wms/purchasereceiptManage/sparereceipt/sparereceiptRecordMain/index.vue create mode 100644 src/views/wms/purchasereceiptManage/sparereceipt/sparereceiptRecordMain/sparereceiptRecordMain.data.ts create mode 100644 src/views/wms/purchasereceiptManage/sparereceipt/sparereceiptRequestMain/index.vue create mode 100644 src/views/wms/purchasereceiptManage/sparereceipt/sparereceiptRequestMain/sparereceiptRequestMain.data.ts create mode 100644 src/views/wms/purchasereceiptManage/supplierdeliver/demandforecastingMain/demandforecastingMain.data.ts create mode 100644 src/views/wms/purchasereceiptManage/supplierdeliver/demandforecastingMain/index.vue create mode 100644 src/views/wms/purchasereceiptManage/supplierdeliver/demandforecastingSupplierMain/demandforecastingMain.data.ts create mode 100644 src/views/wms/purchasereceiptManage/supplierdeliver/demandforecastingSupplierMain/index.vue create mode 100644 src/views/wms/purchasereceiptManage/supplierdeliver/purchaseMain/index.vue create mode 100644 src/views/wms/purchasereceiptManage/supplierdeliver/purchaseMain/purchaseMain.data.ts create mode 100644 src/views/wms/purchasereceiptManage/supplierdeliver/purchaseMainWms/index.vue create mode 100644 src/views/wms/purchasereceiptManage/supplierdeliver/purchaseMainWms/purchaseMain.data.ts create mode 100644 src/views/wms/purchasereceiptManage/supplierdeliver/purchasePlanMain/index.vue create mode 100644 src/views/wms/purchasereceiptManage/supplierdeliver/purchasePlanMain/purchasePlanMain.data.ts create mode 100644 src/views/wms/purchasereceiptManage/supplierdeliver/supplierPackage/index.vue create mode 100644 src/views/wms/purchasereceiptManage/supplierdeliver/supplierPackage/supplierPackage.data.ts create mode 100644 src/views/wms/purchasereceiptManage/supplierdeliver/supplierResume/index.vue create mode 100644 src/views/wms/purchasereceiptManage/supplierdeliver/supplierdeliverInspectionDetail/index.vue create mode 100644 src/views/wms/purchasereceiptManage/supplierdeliver/supplierdeliverInspectionDetail/supplierdeliverInspectionDetail.data.ts create mode 100644 src/views/wms/purchasereceiptManage/supplierdeliver/supplierdeliverRecordMain/index.vue create mode 100644 src/views/wms/purchasereceiptManage/supplierdeliver/supplierdeliverRecordMain/supplierdeliverRecordMain.data.ts create mode 100644 src/views/wms/purchasereceiptManage/supplierdeliver/supplierdeliverRequestMain/index.vue create mode 100644 src/views/wms/purchasereceiptManage/supplierdeliver/supplierdeliverRequestMain/labelForm.vue create mode 100644 src/views/wms/purchasereceiptManage/supplierdeliver/supplierdeliverRequestMain/supplierdeliverBasicForm.vue create mode 100644 src/views/wms/purchasereceiptManage/supplierdeliver/supplierdeliverRequestMain/supplierdeliverRequestMain.data.ts create mode 100644 src/views/wms/reportList/index.vue create mode 100644 src/views/wms/supplierManage/invoicingcalendar/index.vue create mode 100644 src/views/wms/supplierManage/invoicingcalendar/invoicingcalendar.data.ts create mode 100644 src/views/wms/supplierManage/purchaseDiscreteOrder/purchaseDiscreteOrderMain/index.vue create mode 100644 src/views/wms/supplierManage/purchaseDiscreteOrder/purchaseDiscreteOrderMain/purchaseDiscreteOrderMain.data.ts create mode 100644 src/views/wms/supplierManage/purchaseclaim/purchaseclaimRecordMain/index.vue create mode 100644 src/views/wms/supplierManage/purchaseclaim/purchaseclaimRecordMain/purchaseclaimRecordMain.data.ts create mode 100644 src/views/wms/supplierManage/purchaseclaim/purchaseclaimRequestMain/index.vue create mode 100644 src/views/wms/supplierManage/purchaseclaim/purchaseclaimRequestMain/purchaseclaimRequestMain.data.ts create mode 100644 src/views/wms/supplierManage/supplierApbalance/supplierApbalanceDetail/index.vue create mode 100644 src/views/wms/supplierManage/supplierApbalance/supplierApbalanceDetail/supplierApbalanceDetail.data.ts create mode 100644 src/views/wms/supplierManage/supplierApbalance/supplierApbalanceMain/index.vue create mode 100644 src/views/wms/supplierManage/supplierApbalance/supplierApbalanceMain/supplierApbalanceMain.data.ts create mode 100644 src/views/wms/supplierManage/supplierinvoice/supplierinvoiceRecordMain/index.vue create mode 100644 src/views/wms/supplierManage/supplierinvoice/supplierinvoiceRecordMain/supplierinvoiceRecordMain.data.ts create mode 100644 src/views/wms/supplierManage/supplierinvoice/supplierinvoiceRequestMain/index.vue create mode 100644 src/views/wms/supplierManage/supplierinvoice/supplierinvoiceRequestMain/supplierinvoiceRequestMain.data.ts create mode 100644 src/views/wms/supplierManage/supplierinvoice/supplierinvoiceRequestMainDifference/index.vue create mode 100644 src/views/wms/supplierManage/supplierinvoice/supplierinvoiceRequestMainDifference/supplierinvoiceRequestMainDifference.data.ts create mode 100644 src/views/wms/supplierManage/supplierinvoiceInvoicedDiscrete/index.vue create mode 100644 src/views/wms/supplierManage/supplierinvoiceInvoicedDiscrete/supplierinvoiceInvoiced.data.ts create mode 100644 src/views/wms/supplierManage/supplierinvoiceInvoicedSchedule/index.vue create mode 100644 src/views/wms/supplierManage/supplierinvoiceInvoicedSchedule/supplierinvoiceInvoiced.data.ts create mode 100644 stylelint.config.js create mode 100644 tsconfig.json create mode 100644 types/components.d.ts create mode 100644 types/custom-types.d.ts create mode 100644 types/env.d.ts create mode 100644 types/global.d.ts create mode 100644 types/router.d.ts create mode 100644 uno.config.ts create mode 100644 vite.config.ts diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..dccf841 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,19 @@ +root = true + +[*] +charset=utf-8 +end_of_line=lf +insert_final_newline=true +indent_style=space +indent_size=2 +max_line_length = 100 + +[*.{yml,yaml,json}] +indent_style = space +indent_size = 2 + +[*.md] +trim_trailing_whitespace = false + +[Makefile] +indent_style = tab diff --git a/.env b/.env new file mode 100644 index 0000000..74e66bb --- /dev/null +++ b/.env @@ -0,0 +1,17 @@ +# 标题 +VITE_APP_TITLE=富维海拉智慧工厂管理平台 + +# 项目本地运行端口号 +VITE_PORT=80 + +# open 运行 npm run dev 时自动打开浏览器 +VITE_OPEN=true + +# 租户开关 +VITE_APP_TENANT_ENABLE=true + +# 验证码的开关 +VITE_APP_CAPTCHA_ENABLE=true + +# 百度统计 +VITE_APP_BAIDU_CODE = a1ff8825baa73c3a78eb96aa40325abc diff --git a/.env.prod b/.env.prod new file mode 100644 index 0000000..06f2aa7 --- /dev/null +++ b/.env.prod @@ -0,0 +1,54 @@ +# 生产环境 +NODE_ENV=production + +VITE_DEV=false + +# 请求路径 +VITE_BASE_URL='http://dev.ccwin-in.com:25300/api' + +# 上传路径 +VITE_UPLOAD_URL='http://dev.ccwin-in.com:25300/api/admin-api/infra/file/upload' + +# 接口前缀 +VITE_API_BASEPATH= + +# 接口地址 +VITE_API_URL=/admin-api + +# 是否删除debugger +VITE_DROP_DEBUGGER=true + +# 是否删除console.log +VITE_DROP_CONSOLE=true + +# 是否sourcemap +VITE_SOURCEMAP=false + +# 打包路径 +VITE_BASE_PATH=/ + +# 输出路径 +VITE_OUT_DIR=sfms3.0-ui + +# 自定义接口路径 +VITE_INTERFACE_URL='http://dev.ccwin-in.com:25310/magic/web/index.html' + +# 积木报表请求路径 +VITE_JMREPORT_BASE_URL='http://dev.ccwin-in.com:25310' + +# 租户配置 +VITE_TENANT='["长春1379","成都1397","长春2379"]' + +# 查看质检报告环境 +VITE_REPORT_URL = 'http://dev.ccwin-in.com:25400' + +# 登录系统升级的提示 +VITE_SYSTERM_UPDATE_ALERT = true +VITE_SYSTERM_UPDATE_URL = 'https://scptest.faway-hella.com/' + +# 是否需要验证码 +VITE_NEED_CODE = true + + +# 是否需要下载PDA链接 +VITE_PDA_URL = false diff --git a/.env.test b/.env.test new file mode 100644 index 0000000..cb687a7 --- /dev/null +++ b/.env.test @@ -0,0 +1,50 @@ +# 生产环境 +NODE_ENV=test + +VITE_DEV=false + +# 请求路径 +VITE_BASE_URL='http://dev.ccwin-in.com:29000/api' + +# 上传路径 +VITE_UPLOAD_URL='http://dev.ccwin-in.com:29000/api/admin-api/infra/file/upload' + +# 接口前缀 +VITE_API_BASEPATH= + +# 接口地址 +VITE_API_URL=/admin-api + +# 是否删除debugger +VITE_DROP_DEBUGGER=true + +# 是否删除console.log +VITE_DROP_CONSOLE=true + +# 是否sourcemap +VITE_SOURCEMAP=false + +# 打包路径 +VITE_BASE_PATH=/ + +# 输出路径 +VITE_OUT_DIR=sfms3.0-ui + +# 自定义接口路径 +VITE_INTERFACE_URL='http://dev.ccwin-in.com:29000/magic/web/index.html' + +# 积木报表请求路径 +VITE_JMREPORT_BASE_URL='http://dev.ccwin-in.com:29000' + +# 租户配置 +VITE_TENANT='["长春","成都"]' + +# 查看质检报告环境 +VITE_REPORT_URL = 'http://dev.ccwin-in.com:25400' + +# 是否需要验证码 +VITE_NEED_CODE = true + + +# 是否需要下载PDA链接 +VITE_PDA_URL = true \ No newline at end of file diff --git a/.env.test-scp b/.env.test-scp new file mode 100644 index 0000000..218728c --- /dev/null +++ b/.env.test-scp @@ -0,0 +1,50 @@ +# 生产环境 +NODE_ENV=test + +VITE_DEV=false + +# 请求路径 +VITE_BASE_URL='http://dev.ccwin-in.com:25400/api' + +# 上传路径 +VITE_UPLOAD_URL='http://dev.ccwin-in.com:25400/api/admin-api/infra/file/upload' + +# 接口前缀 +VITE_API_BASEPATH= + +# 接口地址 +VITE_API_URL=/admin-api + +# 是否删除debugger +VITE_DROP_DEBUGGER=true + +# 是否删除console.log +VITE_DROP_CONSOLE=true + +# 是否sourcemap +VITE_SOURCEMAP=false + +# 打包路径 +VITE_BASE_PATH=/ + +# 输出路径 +VITE_OUT_DIR=sfms3.0 + +# 自定义接口路径 +VITE_INTERFACE_URL='http://dev.ccwin-in.com:25311/magic/web/index.html' + +# 积木报表请求路径 +VITE_JMREPORT_BASE_URL='http://dev.ccwin-in.com:25311' + + +# 租户配置 +VITE_TENANT='["长春1379","成都1397","长春2379"]' + +# 查看质检报告环境 +VITE_REPORT_URL = 'http://dev.ccwin-in.com:25400' + +# 是否需要验证码 +VITE_NEED_CODE = false + +# 是否需要下载PDA链接 +VITE_PDA_URL = false diff --git a/.env.wyf b/.env.wyf new file mode 100644 index 0000000..b6100e3 --- /dev/null +++ b/.env.wyf @@ -0,0 +1,64 @@ +# 生产环境 +NODE_ENV=test + +VITE_DEV=false + +# # 请求路径 +# VITE_BASE_URL='http://192.168.0.113:12080' +# # 上传路径 +# VITE_UPLOAD_URL='http://192.168.0.113:12080/admin-api/infra/file/upload' +# # 请求路径 +# VITE_BASE_URL='https://scp.faway-hella.com/api' +# # 上传路径 +# VITE_UPLOAD_URL='https://scp.faway-hella.com/api/admin-api/infra/file/upload' + +# 请求路径 +VITE_BASE_URL='http://172.21.32.13/api' +# 上传路径 +VITE_UPLOAD_URL='http://172.21.32.13/api/admin-api/infra/file/upload' + + +# # 请求路径 +# VITE_BASE_URL='http://dev.ccwin-in.com:25300/api' + +# # 上传路径 +# VITE_UPLOAD_URL='http://dev.ccwin-in.com:25300/api/admin-api/infra/file/upload' + +# 接口前缀 +VITE_API_BASEPATH= + +# 接口地址 +VITE_API_URL=/admin-api + +# 是否删除debugger +VITE_DROP_DEBUGGER=true + +# 是否删除console.log +VITE_DROP_CONSOLE=true + +# 是否sourcemap +VITE_SOURCEMAP=false + +# 打包路径 +VITE_BASE_PATH=/ + +# 输出路径 +VITE_OUT_DIR=sfms3.0 + +# # 自定义接口路径 +# VITE_INTERFACE_URL='http://192.168.0.108:12080/magic/web/index.html' + +# # 积木报表请求路径 +# VITE_JMREPORT_BASE_URL='http://192.168.0.108:12080' + +# 自定义接口路径 +VITE_INTERFACE_URL='http://dev.ccwin-in.com:25310/magic/web/index.html' + +# 积木报表请求路径 +VITE_JMREPORT_BASE_URL='http://192.168.0.108:12080' + +# 租户配置 +VITE_TENANT='["长春1379","成都1397","长春2379"]' + +# 查看质检报告环境 +VITE_REPORT_URL = 'http://dev.ccwin-in.com:25400' diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..1e85c0f --- /dev/null +++ b/.eslintignore @@ -0,0 +1,8 @@ +/build/ +/config/ +/dist/ +/*.js +/test/unit/coverage/ +/node_modules/* +/dist* +/src/main.ts diff --git a/.eslintrc-auto-import.json b/.eslintrc-auto-import.json new file mode 100644 index 0000000..024c96a --- /dev/null +++ b/.eslintrc-auto-import.json @@ -0,0 +1,259 @@ +{ + "globals": { + "EffectScope": true, + "ElMessage": true, + "ElMessageBox": true, + "ElTag": true, + "asyncComputed": true, + "autoResetRef": true, + "computed": true, + "computedAsync": true, + "computedEager": true, + "computedInject": true, + "computedWithControl": true, + "controlledComputed": true, + "controlledRef": true, + "createApp": true, + "createEventHook": true, + "createGlobalState": true, + "createInjectionState": true, + "createReactiveFn": true, + "createSharedComposable": true, + "createUnrefFn": true, + "customRef": true, + "debouncedRef": true, + "debouncedWatch": true, + "defineAsyncComponent": true, + "defineComponent": true, + "eagerComputed": true, + "effectScope": true, + "extendRef": true, + "getCurrentInstance": true, + "getCurrentScope": true, + "h": true, + "ignorableWatch": true, + "inject": true, + "isDefined": true, + "isProxy": true, + "isReactive": true, + "isReadonly": true, + "isRef": true, + "makeDestructurable": true, + "markRaw": true, + "nextTick": true, + "onActivated": true, + "onBeforeMount": true, + "onBeforeUnmount": true, + "onBeforeUpdate": true, + "onClickOutside": true, + "onDeactivated": true, + "onErrorCaptured": true, + "onKeyStroke": true, + "onLongPress": true, + "onMounted": true, + "onRenderTracked": true, + "onRenderTriggered": true, + "onScopeDispose": true, + "onServerPrefetch": true, + "onStartTyping": true, + "onUnmounted": true, + "onUpdated": true, + "pausableWatch": true, + "provide": true, + "reactify": true, + "reactifyObject": true, + "reactive": true, + "reactiveComputed": true, + "reactiveOmit": true, + "reactivePick": true, + "readonly": true, + "ref": true, + "refAutoReset": true, + "refDebounced": true, + "refDefault": true, + "refThrottled": true, + "refWithControl": true, + "resolveComponent": true, + "resolveRef": true, + "resolveUnref": true, + "shallowReactive": true, + "shallowReadonly": true, + "shallowRef": true, + "syncRef": true, + "syncRefs": true, + "templateRef": true, + "throttledRef": true, + "throttledWatch": true, + "toRaw": true, + "toReactive": true, + "toRef": true, + "toRefs": true, + "triggerRef": true, + "tryOnBeforeMount": true, + "tryOnBeforeUnmount": true, + "tryOnMounted": true, + "tryOnScopeDispose": true, + "tryOnUnmounted": true, + "unref": true, + "unrefElement": true, + "until": true, + "useActiveElement": true, + "useArrayEvery": true, + "useArrayFilter": true, + "useArrayFind": true, + "useArrayFindIndex": true, + "useArrayJoin": true, + "useArrayMap": true, + "useArrayReduce": true, + "useArraySome": true, + "useAsyncQueue": true, + "useAsyncState": true, + "useAttrs": true, + "useBase64": true, + "useBattery": true, + "useBluetooth": true, + "useBreakpoints": true, + "useBroadcastChannel": true, + "useBrowserLocation": true, + "useCached": true, + "useClipboard": true, + "useColorMode": true, + "useConfirmDialog": true, + "useCounter": true, + "useCssModule": true, + "useCssVar": true, + "useCssVars": true, + "useCurrentElement": true, + "useCycleList": true, + "useDark": true, + "useDateFormat": true, + "useDebounce": true, + "useDebounceFn": true, + "useDebouncedRefHistory": true, + "useDeviceMotion": true, + "useDeviceOrientation": true, + "useDevicePixelRatio": true, + "useDevicesList": true, + "useDisplayMedia": true, + "useDocumentVisibility": true, + "useDraggable": true, + "useDropZone": true, + "useElementBounding": true, + "useElementByPoint": true, + "useElementHover": true, + "useElementSize": true, + "useElementVisibility": true, + "useEventBus": true, + "useEventListener": true, + "useEventSource": true, + "useEyeDropper": true, + "useFavicon": true, + "useFetch": true, + "useFileDialog": true, + "useFileSystemAccess": true, + "useFocus": true, + "useFocusWithin": true, + "useFps": true, + "useFullscreen": true, + "useGamepad": true, + "useGeolocation": true, + "useIdle": true, + "useImage": true, + "useInfiniteScroll": true, + "useIntersectionObserver": true, + "useInterval": true, + "useIntervalFn": true, + "useKeyModifier": true, + "useLastChanged": true, + "useLocalStorage": true, + "useMagicKeys": true, + "useManualRefHistory": true, + "useMediaControls": true, + "useMediaQuery": true, + "useMemoize": true, + "useMemory": true, + "useMounted": true, + "useMouse": true, + "useMouseInElement": true, + "useMousePressed": true, + "useMutationObserver": true, + "useNavigatorLanguage": true, + "useNetwork": true, + "useNow": true, + "useObjectUrl": true, + "useOffsetPagination": true, + "useOnline": true, + "usePageLeave": true, + "useParallax": true, + "usePermission": true, + "usePointer": true, + "usePointerSwipe": true, + "usePreferredColorScheme": true, + "usePreferredDark": true, + "usePreferredLanguages": true, + "useRafFn": true, + "useRefHistory": true, + "useResizeObserver": true, + "useRoute": true, + "useRouter": true, + "useScreenOrientation": true, + "useScreenSafeArea": true, + "useScriptTag": true, + "useScroll": true, + "useScrollLock": true, + "useSessionStorage": true, + "useShare": true, + "useSlots": true, + "useSpeechRecognition": true, + "useSpeechSynthesis": true, + "useStepper": true, + "useStorage": true, + "useStorageAsync": true, + "useStyleTag": true, + "useSupported": true, + "useSwipe": true, + "useTemplateRefsList": true, + "useTextDirection": true, + "useTextSelection": true, + "useTextareaAutosize": true, + "useThrottle": true, + "useThrottleFn": true, + "useThrottledRefHistory": true, + "useTimeAgo": true, + "useTimeout": true, + "useTimeoutFn": true, + "useTimeoutPoll": true, + "useTimestamp": true, + "useTitle": true, + "useToggle": true, + "useTransition": true, + "useUrlSearchParams": true, + "useUserMedia": true, + "useVModel": true, + "useVModels": true, + "useVibrate": true, + "useVirtualList": true, + "useWakeLock": true, + "useWebNotification": true, + "useWebSocket": true, + "useWebWorker": true, + "useWebWorkerFn": true, + "useWindowFocus": true, + "useWindowScroll": true, + "useWindowSize": true, + "watch": true, + "watchArray": true, + "watchAtMost": true, + "watchDebounced": true, + "watchEffect": true, + "watchIgnorable": true, + "watchOnce": true, + "watchPausable": true, + "watchPostEffect": true, + "watchSyncEffect": true, + "watchThrottled": true, + "watchTriggerable": true, + "watchWithFilter": true, + "whenever": true + } +} diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..eee5ae3 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,75 @@ +// @ts-check +const { defineConfig } = require('eslint-define-config') +const { off } = require('process') +module.exports = defineConfig({ + root: true, + env: { + browser: true, + node: true, + es6: true + }, + parser: 'vue-eslint-parser', + plugins: ['vue'], + parserOptions: { + parser: '@typescript-eslint/parser', + ecmaVersion: 2020, + sourceType: 'module', + jsxPragma: 'React', + ecmaFeatures: { + jsx: true + } + }, + extends: [ + 'plugin:vue/vue3-recommended', + 'plugin:@typescript-eslint/recommended', + // 'prettier', + // 'plugin:prettier/recommended', + '@unocss' + ], + rules: { + //'indent':['off',2], + //"@typescript-eslint/no-this-alias":["off"], + 'vue/script-setup-uses-vars': 'error', + 'vue/no-reserved-component-names': 'off', + 'vue/no-setup-props-destructure': 'off', + '@typescript-eslint/ban-ts-ignore': 'off', + '@typescript-eslint/explicit-function-return-type': 'off', + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-var-requires': 'off', + '@typescript-eslint/no-empty-function': 'off', + 'vue/custom-event-name-casing': 'off', + 'no-use-before-define': 'off', + '@typescript-eslint/no-use-before-define': 'off', + '@typescript-eslint/ban-ts-comment': 'off', + '@typescript-eslint/ban-types': 'off', + '@typescript-eslint/no-non-null-assertion': 'off', + '@typescript-eslint/explicit-module-boundary-types': 'off', + '@typescript-eslint/no-unused-vars': 'off', + 'no-unused-vars': 'off', + 'space-before-function-paren': 'off', + + 'vue/attributes-order': 'off', + 'vue/one-component-per-file': 'off', + 'vue/html-closing-bracket-newline': 'off', + 'vue/max-attributes-per-line': 'off', + 'vue/multiline-html-element-content-newline': 'off', + 'vue/singleline-html-element-content-newline': 'off', + 'vue/attribute-hyphenation': 'off', + 'vue/require-default-prop': 'off', + 'vue/require-explicit-emits': 'off', + 'vue/html-self-closing': [ + 'error', + { + html: { + void: 'always', + normal: 'never', + component: 'always' + }, + svg: 'always', + math: 'always' + } + ], + 'vue/multi-word-component-names': 'off', + 'vue/no-v-html': 'off' + } +}) diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1f40422 --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +node_modules +.env.development +.DS_Store +dist +dist-ssr +*.local +/dist* +*-lock.* +pnpm-debug +auto-*.d.ts +.idea +.history +/sfms3.0 +/sfms3.0-ui +.vscode/ diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..f68ea86 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,11 @@ +/node_modules/** +/dist/ +/dist* +/public/* +/docs/* +/vite.config.ts +/src/types/env.d.ts +/src/types/auto-components.d.ts +/src/types/auto-imports.d.ts +/docs/**/* +CHANGELOG diff --git a/.stylelintignore b/.stylelintignore new file mode 100644 index 0000000..aa605b4 --- /dev/null +++ b/.stylelintignore @@ -0,0 +1,6 @@ +/dist/* +/public/* +public/* +/dist* +/src/types/env.d.ts +/docs/**/* diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..1575c3c --- /dev/null +++ b/Dockerfile @@ -0,0 +1,7 @@ +# 设置基础镜像 +FROM win-nginx + +WORKDIR /opt/sfms3.0 +COPY nginx.conf /usr/local/nginx/conf/nginx.conf +# 将dist文件中的内容复制到 /opt/sfms3.0 这个目录下面 +COPY sfms3.0/ /opt/sfms3.0 diff --git a/Dockerfile_prod b/Dockerfile_prod new file mode 100644 index 0000000..e2a9419 --- /dev/null +++ b/Dockerfile_prod @@ -0,0 +1,7 @@ +# 设置基础镜像 +FROM win-nginx + +WORKDIR /opt/sfms3.0 +COPY nginx_prod.conf /usr/local/nginx/conf/nginx.conf +# 将dist文件中的内容复制到 /opt/sfms3.0 这个目录下面 +COPY sfms3.0/ /opt/sfms3.0 diff --git a/Dockerfile_scp b/Dockerfile_scp new file mode 100644 index 0000000..700cdf9 --- /dev/null +++ b/Dockerfile_scp @@ -0,0 +1,7 @@ +# 设置基础镜像 +FROM win-nginx + +WORKDIR /opt/sfms3.0 +COPY nginx_scp.conf /usr/local/nginx/conf/nginx.conf +# 将dist文件中的内容复制到 /opt/sfms3.0 这个目录下面 +COPY sfms3.0/ /opt/sfms3.0 diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..9861118 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021-present Archer + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/build/vite/index.ts b/build/vite/index.ts new file mode 100644 index 0000000..c67f8a8 --- /dev/null +++ b/build/vite/index.ts @@ -0,0 +1,107 @@ +import { resolve } from 'path' +import Vue from '@vitejs/plugin-vue' +import VueJsx from '@vitejs/plugin-vue-jsx' +import progress from 'vite-plugin-progress' +// import EslintPlugin from 'vite-plugin-eslint' +import PurgeIcons from 'vite-plugin-purge-icons' +import { ViteEjsPlugin } from 'vite-plugin-ejs' +// @ts-ignore +import ElementPlus from 'unplugin-element-plus/vite' +import AutoImport from 'unplugin-auto-import/vite' +import Components from 'unplugin-vue-components/vite' +import { ElementPlusResolver } from 'unplugin-vue-components/resolvers' +import viteCompression from 'vite-plugin-compression' +import topLevelAwait from 'vite-plugin-top-level-await' +import VueI18nPlugin from '@intlify/unplugin-vue-i18n/vite' +import { createSvgIconsPlugin } from 'vite-plugin-svg-icons' +import UnoCSS from 'unocss/vite' + +export function createVitePlugins() { + const root = process.cwd() + + // 路径查找 + function pathResolve(dir: string) { + return resolve(root, '.', dir) + } + + return [ + Vue(), + VueJsx(), + UnoCSS(), + progress(), + PurgeIcons(), + ElementPlus({}), + AutoImport({ + include: [ + /\.[tj]sx?$/, // .ts, .tsx, .js, .jsx + /\.vue$/, + /\.vue\?vue/, // .vue + /\.md$/ // .md + ], + imports: [ + 'vue', + 'vue-router', + // 可额外添加需要 autoImport 的组件 + { + '@/hooks/web/useI18n': ['useI18n'], + '@/hooks/web/useMessage': ['useMessage'], + '@/hooks/web/useTable': ['useTable'], + '@/hooks/web/useCrudSchemas': ['useCrudSchemas'], + '@/utils/formRules': ['required'], + '@/utils/dict': ['DICT_TYPE'] + } + ], + dts: 'src/types/auto-imports.d.ts', + resolvers: [ElementPlusResolver()], + eslintrc: { + enabled: false, // Default `false` + filepath: './.eslintrc-auto-import.json', // Default `./.eslintrc-auto-import.json` + globalsPropValue: true // Default `true`, (true | false | 'readonly' | 'readable' | 'writable' | 'writeable') + } + }), + Components({ + // 要搜索组件的目录的相对路径 + dirs: ['src/components'], + // 组件的有效文件扩展名 + extensions: ['vue', 'md'], + // 搜索子目录 + deep: true, + include: [/\.vue$/, /\.vue\?vue/], + // 生成自定义 `auto-components.d.ts` 全局声明 + dts: 'src/types/auto-components.d.ts', + // 自定义组件的解析器 + resolvers: [ElementPlusResolver()], + exclude: [/[\\/]node_modules[\\/]/] + }), + // EslintPlugin({ + // cache: false, + // include: ['src/**/*.vue', 'src/**/*.ts', 'src/**/*.tsx'] // 检查的文件 + // }), + VueI18nPlugin({ + runtimeOnly: true, + compositionOnly: true, + include: [resolve(__dirname, 'src/locales/**')] + }), + createSvgIconsPlugin({ + iconDirs: [pathResolve('src/assets/svgs')], + symbolId: 'icon-[dir]-[name]', + svgoOptions: true + }), + viteCompression({ + verbose: true, // 是否在控制台输出压缩结果 + disable: false, // 是否禁用 + threshold: 10240, // 体积大于 threshold 才会被压缩,单位 b + algorithm: 'gzip', // 压缩算法,可选 [ 'gzip' , 'brotliCompress' ,'deflate' , 'deflateRaw'] + ext: '.gz', // 生成的压缩包后缀 + deleteOriginFile: false //压缩后是否删除源文件 + }), + ViteEjsPlugin(), + topLevelAwait({ + // https://juejin.cn/post/7152191742513512485 + // The export name of top-level await promise for each chunk module + promiseExportName: '__tla', + // The function to generate import names of top-level await promise in each chunk module + promiseImportName: (i) => `__tla_${i}` + }) + ] +} diff --git a/build/vite/optimize.ts b/build/vite/optimize.ts new file mode 100644 index 0000000..3dda50b --- /dev/null +++ b/build/vite/optimize.ts @@ -0,0 +1,112 @@ +const include = [ + 'qs', + 'url', + 'vue', + 'sass', + 'mitt', + 'axios', + 'pinia', + 'dayjs', + 'qrcode', + 'unocss', + 'vue-router', + 'vue-types', + 'vue-i18n', + 'crypto-js', + 'cropperjs', + 'lodash-es', + 'nprogress', + 'web-storage-cache', + '@iconify/iconify', + '@vueuse/core', + '@zxcvbn-ts/core', + 'echarts/core', + 'echarts/charts', + 'echarts/components', + 'echarts/renderers', + 'echarts-wordcloud', + '@wangeditor/editor', + '@wangeditor/editor-for-vue', + 'element-plus', + 'element-plus/es', + 'element-plus/es/locale/lang/zh-cn', + 'element-plus/es/locale/lang/en', + 'element-plus/es/components/avatar/style/css', + 'element-plus/es/components/space/style/css', + 'element-plus/es/components/backtop/style/css', + 'element-plus/es/components/form/style/css', + 'element-plus/es/components/radio-group/style/css', + 'element-plus/es/components/radio/style/css', + 'element-plus/es/components/checkbox/style/css', + 'element-plus/es/components/checkbox-group/style/css', + 'element-plus/es/components/switch/style/css', + 'element-plus/es/components/time-picker/style/css', + 'element-plus/es/components/date-picker/style/css', + 'element-plus/es/components/descriptions/style/css', + 'element-plus/es/components/descriptions-item/style/css', + 'element-plus/es/components/link/style/css', + 'element-plus/es/components/tooltip/style/css', + 'element-plus/es/components/drawer/style/css', + 'element-plus/es/components/dialog/style/css', + 'element-plus/es/components/checkbox-button/style/css', + 'element-plus/es/components/option-group/style/css', + 'element-plus/es/components/radio-button/style/css', + 'element-plus/es/components/cascader/style/css', + 'element-plus/es/components/color-picker/style/css', + 'element-plus/es/components/input-number/style/css', + 'element-plus/es/components/rate/style/css', + 'element-plus/es/components/select-v2/style/css', + 'element-plus/es/components/tree-select/style/css', + 'element-plus/es/components/slider/style/css', + 'element-plus/es/components/time-select/style/css', + 'element-plus/es/components/autocomplete/style/css', + 'element-plus/es/components/image-viewer/style/css', + 'element-plus/es/components/upload/style/css', + 'element-plus/es/components/col/style/css', + 'element-plus/es/components/form-item/style/css', + 'element-plus/es/components/alert/style/css', + 'element-plus/es/components/breadcrumb/style/css', + 'element-plus/es/components/select/style/css', + 'element-plus/es/components/input/style/css', + 'element-plus/es/components/breadcrumb-item/style/css', + 'element-plus/es/components/tag/style/css', + 'element-plus/es/components/pagination/style/css', + 'element-plus/es/components/table/style/css', + 'element-plus/es/components/table-v2/style/css', + 'element-plus/es/components/table-column/style/css', + 'element-plus/es/components/card/style/css', + 'element-plus/es/components/row/style/css', + 'element-plus/es/components/button/style/css', + 'element-plus/es/components/menu/style/css', + 'element-plus/es/components/sub-menu/style/css', + 'element-plus/es/components/menu-item/style/css', + 'element-plus/es/components/option/style/css', + 'element-plus/es/components/dropdown/style/css', + 'element-plus/es/components/dropdown-menu/style/css', + 'element-plus/es/components/dropdown-item/style/css', + 'element-plus/es/components/skeleton/style/css', + 'element-plus/es/components/skeleton/style/css', + 'element-plus/es/components/backtop/style/css', + 'element-plus/es/components/menu/style/css', + 'element-plus/es/components/sub-menu/style/css', + 'element-plus/es/components/menu-item/style/css', + 'element-plus/es/components/dropdown/style/css', + 'element-plus/es/components/tree/style/css', + 'element-plus/es/components/dropdown-menu/style/css', + 'element-plus/es/components/dropdown-item/style/css', + 'element-plus/es/components/badge/style/css', + 'element-plus/es/components/breadcrumb/style/css', + 'element-plus/es/components/breadcrumb-item/style/css', + 'element-plus/es/components/image/style/css', + 'element-plus/es/components/collapse-transition/style/css', + 'element-plus/es/components/timeline/style/css', + 'element-plus/es/components/timeline-item/style/css', + 'element-plus/es/components/collapse/style/css', + 'element-plus/es/components/collapse-item/style/css', + 'element-plus/es/components/button-group/style/css', + 'element-plus/es/components/text/style/css' +] + +const exclude = ['@iconify/json'] + +export { include, exclude } diff --git a/index.html b/index.html new file mode 100644 index 0000000..e1dc00e --- /dev/null +++ b/index.html @@ -0,0 +1,147 @@ + + + + + + + + + + + + %VITE_APP_TITLE% + + +
+ +
+
+
+ +
%VITE_APP_TITLE%
+
+
+
+
+
+
+
+
+ + + diff --git a/nginx.conf b/nginx.conf new file mode 100644 index 0000000..3f28a53 --- /dev/null +++ b/nginx.conf @@ -0,0 +1,53 @@ +user root; +worker_processes 2; + +events { + worker_connections 1024; +} + +http { + include mime.types; + charset utf-8,gbk; + default_type application/octet-stream; + log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + '$status $body_bytes_sent "$http_referer" ' + '"$http_user_agent" "$http_x_forwarded_for" "$request_time $upstream_response_time"'; + access_log logs/access.log main; + sendfile on; + #tcp_nopush on; + keepalive_timeout 600s; + client_max_body_size 200m; + gzip on; + gzip_min_length 10k; + gzip_comp_level 9; + gzip_buffers 4 16k; + gzip_types text/plain application/javascript text/css application/xml text/javascript image/jpeg image/gif image/png; + gzip_vary on; + gzip_disable "MSIE [1-6]\."; + upstream sfms3.0 { + server localhost:25310 weight=10 max_fails=3 fail_timeout=10s; + } + server { + listen 25300; + server_name_in_redirect off; + server_name _; + location /api/ { + proxy_pass http://sfms3.0/; + proxy_next_upstream http_500 http_502 http_503 http_504 error timeout invalid_header; + proxy_set_header X-Forwared-For $proxy_add_x_forwarded_for; + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $http_x_forwarded_for; + } + location /profile/ { + alias /opt/profile/; + index index.html index.htm; + } + location / { + try_files $uri $uri/ /index.html; + root /opt/sfms3.0; + index index.html index.htm; + } + } +} + diff --git a/nginx_prod.conf b/nginx_prod.conf new file mode 100644 index 0000000..7cd6ed0 --- /dev/null +++ b/nginx_prod.conf @@ -0,0 +1,101 @@ +user root; +worker_processes 2; + +events { + worker_connections 1024; +} + +http { + include mime.types; + charset utf-8,gbk; + default_type application/octet-stream; + log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + '$status $body_bytes_sent "$http_referer" ' + '"$http_user_agent" "$http_x_forwarded_for" "$request_time $upstream_response_time"'; + access_log logs/access.log main; + sendfile on; + #tcp_nopush on; + keepalive_timeout 600s; + client_max_body_size 200m; + gzip on; + gzip_min_length 10k; + gzip_comp_level 9; + gzip_buffers 4 16k; + gzip_types text/plain application/javascript text/css application/xml text/javascript image/jpeg image/gif image/png; + gzip_vary on; + gzip_disable "MSIE [1-6]\."; + upstream sfms3.0 { + server localhost:90 weight=10 max_fails=3 fail_timeout=10s; + } + server { + listen 80; + server_name_in_redirect off; + server_name _; + location /api/ { + proxy_pass http://sfms3.0/; + proxy_next_upstream http_500 http_502 http_503 http_504 error timeout invalid_header; + proxy_set_header X-Forwared-For $proxy_add_x_forwarded_for; + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $http_x_forwarded_for; + } + location /profile/ { + alias /opt/profile/; + index index.html index.htm; + } + location / { + try_files $uri $uri/ /index.html; + root /opt/sfms3.0; + index index.html index.htm; + } + } + server { + listen 55563 ssl; + server_name_in_redirect off; + server_name _; + ssl_certificate /opt/faway-hella/faway-hella.com.pem; + ssl_certificate_key /opt/faway-hella/faway-hella.com.key; + location /api/ { + proxy_pass http://sfms3.0/; + proxy_next_upstream http_500 http_502 http_503 http_504 error timeout invalid_header; + proxy_set_header X-Forwared-For $proxy_add_x_forwarded_for; + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $http_x_forwarded_for; + } + location /profile/ { + alias /opt/profile/; + index index.html index.htm; + } + location / { + try_files $uri $uri/ /index.html; + root /opt/sfms3.0; + index index.html index.htm; + } + } + server { + listen 56563 ssl; + server_name_in_redirect off; + server_name _; + ssl_certificate /opt/faway-hella/faway-hella.com.pem; + ssl_certificate_key /opt/faway-hella/faway-hella.com.key; + location /api/ { + proxy_pass http://sfms3.0/; + proxy_next_upstream http_500 http_502 http_503 http_504 error timeout invalid_header; + proxy_set_header X-Forwared-For $proxy_add_x_forwarded_for; + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $http_x_forwarded_for; + } + location /profile/ { + alias /opt/profile/; + index index.html index.htm; + } + location / { + try_files $uri $uri/ /index.html; + root /opt/sfms3.0; + index index.html index.htm; + } + } +} + diff --git a/nginx_scp.conf b/nginx_scp.conf new file mode 100644 index 0000000..00a1a93 --- /dev/null +++ b/nginx_scp.conf @@ -0,0 +1,53 @@ +user root; +worker_processes 2; + +events { + worker_connections 1024; +} + +http { + include mime.types; + charset utf-8,gbk; + default_type application/octet-stream; + log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + '$status $body_bytes_sent "$http_referer" ' + '"$http_user_agent" "$http_x_forwarded_for" "$request_time $upstream_response_time"'; + access_log logs/access.log main; + sendfile on; + #tcp_nopush on; + keepalive_timeout 600s; + client_max_body_size 200m; + gzip on; + gzip_min_length 10k; + gzip_comp_level 9; + gzip_buffers 4 16k; + gzip_types text/plain application/javascript text/css application/xml text/javascript image/jpeg image/gif image/png; + gzip_vary on; + gzip_disable "MSIE [1-6]\."; + upstream sfms3.0 { + server localhost:25311 weight=10 max_fails=3 fail_timeout=10s; + } + server { + listen 25400; + server_name_in_redirect off; + server_name _; + location /api/ { + proxy_pass http://sfms3.0/; + proxy_next_upstream http_500 http_502 http_503 http_504 error timeout invalid_header; + proxy_set_header X-Forwared-For $proxy_add_x_forwarded_for; + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $http_x_forwarded_for; + } + location /profile/ { + alias /opt/profile/; + index index.html index.htm; + } + location / { + try_files $uri $uri/ /index.html; + root /opt/sfms3.0; + index index.html index.htm; + } + } +} + diff --git a/package.json b/package.json new file mode 100644 index 0000000..fb6cd18 --- /dev/null +++ b/package.json @@ -0,0 +1,140 @@ +{ + "name": "yudao-ui-admin-vue3", + "version": "1.8.2-snapshot", + "description": "基于vue3、vite4、element-plus、typesScript", + "author": "xingyu", + "private": false, + "scripts": { + "dev": "vite", + "wyf": "vite --mode wyf", + "test": "vite build --mode test", + "test-scp": "vite build --mode test-scp", + "prod": "vite build --mode prod", + "preview": "vite preview", + "lint": "eslint --fix --ext .js,.vue src" + }, + "dependencies": { + "@antv/x6": "^2.18.1", + "@element-plus/icons-vue": "^2.3.1", + "@form-create/designer": "^3.2.8", + "@form-create/element-ui": "^3.2.12", + "@iconify/iconify": "^3.1.1", + "@kjgl77/datav-vue3": "^1.7.4", + "@videojs-player/vue": "^1.0.0", + "@vueuse/core": "^10.11.1", + "@wangeditor/editor": "^5.1.23", + "@wangeditor/editor-for-vue": "^5.1.12", + "@zxcvbn-ts/core": "^3.0.4", + "animate.css": "^4.1.1", + "axios": "^1.7.7", + "benz-amr-recorder": "^1.1.5", + "bpmn-js-token-simulation": "^0.10.0", + "camunda-bpmn-moddle": "^7.0.1", + "cropperjs": "^1.6.2", + "crypto-js": "^4.2.0", + "dayjs": "^1.11.13", + "diagram-js": "^12.8.1", + "echarts": "^5.5.1", + "echarts-wordcloud": "^2.1.0", + "element-plus": "2.3.14", + "fast-xml-parser": "^4.5.0", + "highlight.js": "^11.10.0", + "intro.js": "^7.2.0", + "jsencrypt": "^3.3.2", + "lodash-es": "^4.17.21", + "min-dash": "^4.2.2", + "mitt": "^3.0.1", + "nprogress": "^0.2.0", + "pinia": "^2.2.4", + "qrcode": "^1.5.4", + "qs": "^6.13.0", + "sortablejs": "^1.15.3", + "steady-xml": "^0.1.0", + "url": "^0.11.4", + "video.js": "^7.21.6", + "vue": "^3.5.12", + "vue-dompurify-html": "^4.1.4", + "vue-i18n": "^9.14.1", + "vue-next-focus": "^0.0.12", + "vue-qr": "^4.0.9", + "vue-router": "^4.4.5", + "vue-types": "^5.1.3", + "vuedraggable": "^4.1.0", + "web-storage-cache": "^1.1.1", + "xml-js": "^1.6.11" + }, + "devDependencies": { + "@babel/plugin-proposal-optional-chaining": "^7.21.0", + "@commitlint/cli": "^17.8.1", + "@commitlint/config-conventional": "^17.8.1", + "@iconify/json": "^2.2.265", + "@intlify/unplugin-vue-i18n": "^1.6.0", + "@purge-icons/generated": "^0.9.0", + "@types/intro.js": "^5.1.5", + "@types/lodash-es": "^4.17.12", + "@types/node": "^20.17.1", + "@types/nprogress": "^0.2.3", + "@types/qrcode": "^1.5.5", + "@types/qs": "^6.9.16", + "@typescript-eslint/eslint-plugin": "^6.21.0", + "@typescript-eslint/parser": "^6.21.0", + "@unocss/eslint-config": "^0.56.5", + "@unocss/transformer-variant-group": "^0.56.5", + "@vitejs/plugin-legacy": "^4.1.1", + "@vitejs/plugin-vue": "^4.6.2", + "@vitejs/plugin-vue-jsx": "^3.1.0", + "@vue-macros/volar": "^0.14.3", + "autoprefixer": "^10.4.20", + "bpmn-js": "8.9.0", + "bpmn-js-properties-panel": "0.46.0", + "consola": "^3.2.3", + "eslint": "^8.57.1", + "eslint-config-prettier": "^9.1.0", + "eslint-define-config": "^1.24.1", + "eslint-plugin-prettier": "^5.2.1", + "eslint-plugin-vue": "^9.29.1", + "lint-staged": "^14.0.1", + "postcss": "^8.4.47", + "postcss-html": "^1.7.0", + "postcss-scss": "^4.0.9", + "prettier": "^3.3.3", + "rimraf": "^5.0.10", + "rollup": "^3.29.5", + "sass": "^1.80.4", + "stylelint": "^15.11.0", + "stylelint-config-html": "^1.1.0", + "stylelint-config-recommended": "^13.0.0", + "stylelint-config-standard": "^34.0.0", + "stylelint-order": "^6.0.4", + "terser": "^5.36.0", + "typescript": "5.2.2", + "unocss": "^0.56.5", + "unplugin-auto-import": "^0.16.7", + "unplugin-element-plus": "^0.8.0", + "unplugin-vue-components": "^0.25.2", + "vite": "4.4.9", + "vite-plugin-compression": "^0.5.1", + "vite-plugin-ejs": "^1.7.0", + "vite-plugin-eslint": "^1.8.1", + "vite-plugin-progress": "^0.0.7", + "vite-plugin-purge-icons": "^0.9.2", + "vite-plugin-svg-icons": "^2.0.1", + "vite-plugin-top-level-await": "^1.4.4", + "vue-eslint-parser": "^9.4.3", + "vue-tsc": "^1.8.27" + }, + "license": "MIT", + "repository": { + "type": "git", + "url": "git+https://gitee.com/yudaocode/yudao-ui-admin-vue3" + }, + "bugs": { + "url": "https://gitee.com/yudaocode/yudao-ui-admin-vue3/issues" + }, + "homepage": "https://gitee.com/yudaocode/yudao-ui-admin-vue3", + "packageManager": "pnpm@8.6.0", + "engines": { + "node": ">= 16.0.0", + "pnpm": ">=8.6.0" + } +} diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..961986e --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,5 @@ +module.exports = { + plugins: { + autoprefixer: {} + } +} diff --git a/prettier.config.js b/prettier.config.js new file mode 100644 index 0000000..b014bbf --- /dev/null +++ b/prettier.config.js @@ -0,0 +1,22 @@ +module.exports = { + printWidth: 100, // 每行代码长度(默认80) + tabWidth: 2, // 每个tab相当于多少个空格(默认2)ab进行缩进(默认false) + useTabs: false, // 是否使用tab + semi: false, // 声明结尾使用分号(默认true) + vueIndentScriptAndStyle: false, + singleQuote: true, // 使用单引号(默认false) + quoteProps: 'as-needed', + bracketSpacing: true, // 对象字面量的大括号间使用空格(默认true) + trailingComma: 'none', // 多行使用拖尾逗号(默认none) + jsxSingleQuote: false, + // 箭头函数参数括号 默认avoid 可选 avoid| always + // avoid 能省略括号的时候就省略 例如x => x + // always 总是有括号 + arrowParens: 'always', + insertPragma: false, + requirePragma: false, + proseWrap: 'never', + htmlWhitespaceSensitivity: 'strict', + endOfLine: 'auto', + rangeStart: 0 +} diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..5a7de08267811feb034bb0c54ab38ca417731aab GIT binary patch literal 4286 zcmcJTdr*|u8OGm?f3Tad7j|KHxq~xpVq;A@HfgF7QY~O)Go9%q6O&2POq*#slbPnf zwzf$$rcG^ZYDE+@N@~3q7I49+L1DRyKt#F7{U!nn%U;+^j39aYobU7VmKqZ!%ltTJ zSayHU`<%1G3`F1^k7e(&;Z`VJu(?k;=T7X%N)jqMq!dMyZeDC3iF!z6rw+67kxV&jDKh*=XMMH7BzC%0ZZgW^F*GR;m`LJ8Nxh;MnV_2 zo#Aeu7~L8}V>!_RD+rBki)NV^cA^7!L1e&FY)JDI!(TGDXW-mnR@`bh?a0EnGI=P9 zy>>$Z2m|CjGIt$Z+!8}0*)asCbu>FBggr}a!3yv^PwX`@<_>sE4e5ZqN9V>rmTRUF zbU(T+S`C+7@m92s-#UA`Fo4_`PSqdlNi_8Le1D!YO<=@vm4O z$%$c4iIKfW(ZR8ZbU?mO?%glC2lvBQG7OL4g2E>3CE|D(x!lD@#>|2OxWk0scT#t^ zS6+JEa8?X~2srB%*M&`SJoL{S_(0yf@}t;S27g&Z0Hpg)z+Z89e{|ZcvsAWtlnyU! zrooK~1ov;@oE;J_FsSek>;)U+*tyTdzLW6F6!^;ZVSuI_-@Jq7m6vJu4@{*G56tUW zpGZTSVx!<}kX-N$2;dyp7%$QPemsxlS=d(&zn~%_Fjb*XpK`!o{mnXPeP))mj8zZ^lWb$NF4{~3AH+q%ce-ErK%W3!iN7WAAnu?S-NPqStq)-K z^r;$jQ1|uDpfTeToz0w~uIE_Ym=?0w^$yVAEIfqUV+#(N3e zk2~QhGcbJDsny&3bvhLwfBl_1IF%8kGpjCBvvt~9zrr8d9#JR!m$M(Jd}05>Eb4nd zJ`&DTz3>To1b>z3MIY{C28N5L>h#j;Kcx$R41YcR4PV_s^-rhhbVi8kGeYX7r!U!S zQoWp`s}X+Qa=*iY4)hJLtt9w=1?Lsv?f#1(Q9@*K9WgR|GWA#mr*$@egH|Q{flqJW zfn&Lc>e2!ND{_P?Q{22wTP^vKVHzF$V&C_+Q16C#BfNFp?VUHBP>oj2B zhz=UjK_mQU{=dKMNf%Wv_mX3|SB)O*b?E`FSmwIXFFL5s)z(Cu`t>S;|CO%wi8Gz> zcD{3+@uDaWG)hk4Wq*?l=C;AD68_*>&6hq4$5NbB{u8&riVPuS;Bxqt{>2%98FcW< z-UZpz{a%6r-kQ#JN!+2ZHi^e>j@Xfb z(FH3R_9nI5>KFImbdI(Z5j@?YYO33 z34gFFoDTl5j|!g{5?GNTRI+4*l?*4In&hHK`i1Yt`Ne(~9lZ9R?`G5acM|n*SGN8s znFXUbf8oK55?7tV%W!hALlXom0foB5=@9%tUGVsTz3@jvj0}t(u4OpB%*i{yd6`D*|GZP1pkYzYvxb4teMYa#Zj_Lo>g|rUJiD`FX%!C-Qg-g2Nw4TGLa#a|M&na z8A`8a_#|~g>R_v;>eddvKnJhy{!TWvy`7|kyQ1Zf^VxYMQp~8#D(_{d@N%#l^n?dP zJ>eOEc0bbbz}_Ep9p1mVhmnEN1LG{D9z=$tSMNjqf-V*rZoG@=pcx%l%Ab3d&aIih z8eE{+mp&i+1G+xk}WiODJh<6N)JDmfKzAKZd|2|w0ncYeRMI&V=sBLj;JI14`X znA}4Vday6K$fZk1`Dluh#aSF*>g2+Oy}Ud24Cm@=8E1fdP!-j*CXKqY;$HSP>1S?o zig|DLDt@t+^XG}oKAp^97_-1JPiEbH%mN~Xwb-w{LX;}_oG4M?Bhm>5iNXX9qIrUK L_}7DgzT)vecywrn literal 0 HcmV?d00001 diff --git a/public/home.png b/public/home.png new file mode 100644 index 0000000000000000000000000000000000000000..ccd41455a9ef128c5798691a1d74b472c6d6344a GIT binary patch literal 74352 zcmZ7cWk8%g*EI|e6n7gOiWD8ZP#lU&Db4_cYq8?)?(S0DWpI~b#f!VUTXBb%^SYn! z&-d%FBx|iCduL}K2~(7pLPsG+0RRB#GScG80006Q0QeA(^x^#tdj(kw008@_D5okx zM*a~G4-WujRI}^H!NDORA^n>D=Fqi9K}kjakwQR7n2?BwUqFzCmX3=0lkis&I(i0P zUOrwv0TEGgc6JUXW|p|W&Uh`UoLt=Uipmm_(vO2004$ofx3@3cJm;oA7#KmFe@01& z2v}IzdIu-b(b2`lC8T7&%gQN&9Y&PZwAwlcb@ffDYd8YgaII7FIUaPFrkiYWY>xVrU=87q%#=Zh_9OmXwghCZ?KS z)1_(Q$@g7PyuVzeHHcXw@Uu7!RR<5X5|6<#`;?#?c5iJt;-`w|=sOyp#=d;&3Z&n26)X5%g1v%P8~wO(Fc z&i%WuBO0{7vn$(%6DM3GG?NM!UlKElv+Z=^mPgF;XTKShI)VjFYF>$5x*VF{Y#U}0 zO_jbCylr=A7-Tht^}K3^=c<>zZJHZfl=L(Nd0|$M6~`s{)myJtD8%;K>56j#qY6>G zx8Axbdxrj*~?2l)lsU;Il$mwa2G>*Yv>0GN;LGU6htu1hDG z3RYBVgk5Pn)P5K~vZ$IAM52XNH2BCojUwtuxDjj;7+4sv<^rjyB?=x1PdRx_biS2an1Kc~cZ;*V)yhpv?0f2a z-kW@LNS;HHqZRxkWQRC)k+Ds@IU!_b)NNx+2$ss>dGZa_1^AFA8(XEM=wt(v%_#dLNlvH*#0XuZU`lHQ-&Na z%0WpBmwyV9D;%FrPk)2fzceFuh#LGK92KDaI2XM11JTtGH`1e{gnYgjx~ZrzF#d#M zv8&B>md%J*USyB;f4Ho$D=EUSw+~Vuy{<=W);nPSeX74qL>y?M?elJPvUhY$TocU= z4K5?plu*K%%!1d#82Yb=_{b}e?=O$r&R5+rT5i@n#=Uj}>DX~k9=J(6bh&m(V!Why zdYjjom0EQs6>%)j*5H}`N6rV>^`yQDlRK>La=zw%hTnj)+hMcjOP7C5o2>EU_5UL@uLR8*LCh`6vI0?TI9vedN;;09=ar) zxqK9PR`M8y*Ak$p{Y7OK^)tO#2cY|w5k?t&zY?xA1S55AHGF0po4eT;zW+g*Q#mtk z%g?2GRjJdaLyZCCm8B~pxqXq7@>goxYF zj%)nT!hsm(5fBVHg(+g|`BC5xW=jVKs6LNj_8>!(mU^2T`?^F0N}uxdK;nbiZPzzy zH9T=APDZ@y(1dV(xMyZHvk+AgO9{Wvffy)^%qTP!J71erjvSXob19JEMe6;G0t2kb zR&e-Mm9V&WKqcC;m1h2sIMB%2>d*2s-b!>l!5xc;{hy;c(WvB=wgUU5+_6jY0kwVq znIbv)zrfx@N4V-Z`HRQMk98#~g4c%+qe*Dq0}q_S zpQ+5LrxEEcBfK=D?w$x1rO{CoK(K%>gS5~)mK}oo#5#GD@uwz$OrC*S2%&}h|1P_j zeR+;Xk!qX++ERx|&y3R>qU30C5wiv`224ad5&!dfa# z;w?y&sm%lC42~BKe^P5MGo3BA$o}krpxLNpY@RxesjbBgZ=M#rWLJJknM8rWyK7Bf z&oQ(Xw7rcjKUjl3_cJR(<-1eZCCVem`>z7@1*AmtVM8&ufVE4IlY2^sWE2Xz?9S`r+78)_^s00X%uSv?y@hWA;`LWVA6kg$Bcohh6qdAU%D-;jM(A{Y6gEr#U;2wV-vxDrPGUUo*>IVY1Ts)SiSa~#8h}&@cN$S7U{|&SE6#T= z7{woYK!4~)?7x={+M@zG2YXd5T(}#SdH%O##1tht!tE_ZIDl@KUcYqDaBOYhZ|I`` z`CzRe*tWap*M^WXu!J7hIgirpvX+hRt7A7mGwf@N#K`t)EkW`ng|p zmM%fqvQXnIoL_Pwg&i8_cUlR`d|*UbER{Gg5<71y?^6ZVo9YBCFt?0gCX@*38;*@l zOnd4CkfMU8WTjuT{-GgBP&hcn;PGRl+Y2Yd6*vPjIgX%1{NBR2t-#T%0_CJ=^7=Kh z`hQ{(&g;jUsxB0M3X?A{hG)O2iGrLE z5vVo{5)qPC9gL_D)}RVh-!;!v38Yxs2rpLX*jnmG!ssO;Gw5&2jvKlCva4)P82U%5 zCw3x&HPOLuSQQgv8Vc8BY~6PzD|K=_Uwo3AOu#z$G$;q+mk68st8KO$MD?Gx`+-~t zvfc4T=F8DA*P(0tAOZLBSLZw29aD(g;>>VyzETtYcO5S!P9g6zWl&cYRkY!(7zo22 zI5X_$V)=52Mvh6kvWAK{bb9LQAV_C(=7-1Mf9;*GsclM2IHv!#svrsjC`0f)FS?q8 zJ$BO9!sNC4zJN)Y&wp_wG}lnPEXlAEUj2m_VzvNm0- zZ4q#GMz$hOZ1@t_V(WNGN}D+LlSg_>H!Q4>wF9WKLgJLL`|wzH&b zU9`GVFi1=dm$BVEP6Y|s5fc7!?4T5JPR4`9tRbC>4(j8A3`wJ#PtOc{)+_�BJed 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 z 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 literal 0 HcmV?d00001 diff --git a/public/systemConfig.js b/public/systemConfig.js new file mode 100644 index 0000000..3942093 --- /dev/null +++ b/public/systemConfig.js @@ -0,0 +1,20 @@ +let systemConfig = { + // 请求路径 + baseUrl: 'http://172.22.32.8/api', + // 上传路径 + uploadUrl: 'http://172.22.32.8/api/admin-api/infra/file/upload', + // 自定义接口路径 + interfaceUrl: 'http://172.22.32.8:90/magic/web/index.html', + // 积木报表请求路径 + jmreportBaseUrl: 'http://172.22.32.8:90', + // 查看质检报告环境 + reportUrl: 'https://scp.faway-hella.com', + // 租户配置 + tenant: '["成都"]', + systermUpdateAlert: true, + systermUpdateUrl: 'https://scptest.faway-hella.com/', + //是否需要验证码 + needCode:false, + //是否需要PDA下载链接 + pdaUrl:false, +} diff --git a/qodana.yaml b/qodana.yaml new file mode 100644 index 0000000..29f8f8c --- /dev/null +++ b/qodana.yaml @@ -0,0 +1,29 @@ +#-------------------------------------------------------------------------------# +# Qodana analysis is configured by qodana.yaml file # +# https://www.jetbrains.com/help/qodana/qodana-yaml.html # +#-------------------------------------------------------------------------------# +version: "1.0" + +#Specify inspection profile for code analysis +profile: + name: qodana.starter + +#Enable inspections +#include: +# - name: + +#Disable inspections +#exclude: +# - name: +# paths: +# - + +#Execute shell command before Qodana execution (Applied in CI/CD pipeline) +#bootstrap: sh ./prepare-qodana.sh + +#Install IDE plugins before Qodana execution (Applied in CI/CD pipeline) +#plugins: +# - id: #(plugin id can be found at https://plugins.jetbrains.com) + +#Specify Qodana linter for analysis (Applied in CI/CD pipeline) +linter: jetbrains/qodana-js:latest diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 0000000..c0d50c3 --- /dev/null +++ b/src/App.vue @@ -0,0 +1,75 @@ + + + diff --git a/src/api/bpm/activity/index.ts b/src/api/bpm/activity/index.ts new file mode 100644 index 0000000..870d0d6 --- /dev/null +++ b/src/api/bpm/activity/index.ts @@ -0,0 +1,8 @@ +import request from '@/config/axios' + +export const getActivityList = async (params) => { + return await request.get({ + url: '/bpm/activity/list', + params + }) +} diff --git a/src/api/bpm/definition/index.ts b/src/api/bpm/definition/index.ts new file mode 100644 index 0000000..c0e51fa --- /dev/null +++ b/src/api/bpm/definition/index.ts @@ -0,0 +1,21 @@ +import request from '@/config/axios' + +export const getProcessDefinitionBpmnXML = async (id: number) => { + return await request.get({ + url: '/bpm/process-definition/get-bpmn-xml?id=' + id + }) +} + +export const getProcessDefinitionPage = async (params) => { + return await request.get({ + url: '/bpm/process-definition/page', + params + }) +} + +export const getProcessDefinitionList = async (params) => { + return await request.get({ + url: '/bpm/process-definition/list', + params + }) +} diff --git a/src/api/bpm/form/index.ts b/src/api/bpm/form/index.ts new file mode 100644 index 0000000..142ed24 --- /dev/null +++ b/src/api/bpm/form/index.ts @@ -0,0 +1,56 @@ +import request from '@/config/axios' + +export type FormVO = { + id: number + name: string + conf: string + fields: string[] + status: number + remark: string + createTime: string +} + +// 创建工作流的表单定义 +export const createForm = async (data: FormVO) => { + return await request.post({ + url: '/bpm/form/create', + data: data + }) +} + +// 更新工作流的表单定义 +export const updateForm = async (data: FormVO) => { + return await request.put({ + url: '/bpm/form/update', + data: data + }) +} + +// 删除工作流的表单定义 +export const deleteForm = async (id: number) => { + return await request.delete({ + url: '/bpm/form/delete?id=' + id + }) +} + +// 获得工作流的表单定义 +export const getForm = async (id: number) => { + return await request.get({ + url: '/bpm/form/get?id=' + id + }) +} + +// 获得工作流的表单定义分页 +export const getFormPage = async (params) => { + return await request.get({ + url: '/bpm/form/page', + params + }) +} + +// 获得动态表单的精简列表 +export const getSimpleFormList = async () => { + return await request.get({ + url: '/bpm/form/list-all-simple' + }) +} diff --git a/src/api/bpm/leave/index.ts b/src/api/bpm/leave/index.ts new file mode 100644 index 0000000..d4fe8d5 --- /dev/null +++ b/src/api/bpm/leave/index.ts @@ -0,0 +1,27 @@ +import request from '@/config/axios' + +export type LeaveVO = { + id: number + result: number + type: number + reason: string + processInstanceId: string + startTime: string + endTime: string + createTime: string +} + +// 创建请假申请 +export const createLeave = async (data: LeaveVO) => { + return await request.post({ url: '/bpm/oa/leave/create', data: data }) +} + +// 获得请假申请 +export const getLeave = async (id: number) => { + return await request.get({ url: '/bpm/oa/leave/get?id=' + id }) +} + +// 获得请假申请分页 +export const getLeavePage = async (params: PageParam) => { + return await request.get({ url: '/bpm/oa/leave/page', params }) +} diff --git a/src/api/bpm/model/index.ts b/src/api/bpm/model/index.ts new file mode 100644 index 0000000..2e1d4e6 --- /dev/null +++ b/src/api/bpm/model/index.ts @@ -0,0 +1,59 @@ +import request from '@/config/axios' + +export type ProcessDefinitionVO = { + id: string + version: number + deploymentTIme: string + suspensionState: number +} + +export type ModelVO = { + id: number + formName: string + key: string + name: string + description: string + category: string + formType: number + formId: number + formCustomCreatePath: string + formCustomViewPath: string + processDefinition: ProcessDefinitionVO + status: number + remark: string + createTime: string + bpmnXml: string +} + +export const getModelPage = async (params) => { + return await request.get({ url: '/bpm/model/page', params }) +} + +export const getModel = async (id: number) => { + return await request.get({ url: '/bpm/model/get?id=' + id }) +} + +export const updateModel = async (data: ModelVO) => { + return await request.put({ url: '/bpm/model/update', data: data }) +} + +// 任务状态修改 +export const updateModelState = async (id: number, state: number) => { + const data = { + id: id, + state: state + } + return await request.put({ url: '/bpm/model/update-state', data: data }) +} + +export const createModel = async (data: ModelVO) => { + return await request.post({ url: '/bpm/model/create', data: data }) +} + +export const deleteModel = async (id: number) => { + return await request.delete({ url: '/bpm/model/delete?id=' + id }) +} + +export const deployModel = async (id: number) => { + return await request.post({ url: '/bpm/model/deploy?id=' + id }) +} diff --git a/src/api/bpm/processInstance/index.ts b/src/api/bpm/processInstance/index.ts new file mode 100644 index 0000000..10cd3bc --- /dev/null +++ b/src/api/bpm/processInstance/index.ts @@ -0,0 +1,41 @@ +import request from '@/config/axios' + +export type Task = { + id: string + name: string +} + +export type ProcessInstanceVO = { + id: number + name: string + processDefinitionId: string + category: string + result: number + tasks: Task[] + fields: string[] + status: number + remark: string + businessKey: string + createTime: string + endTime: string +} + +export const getMyProcessInstancePage = async (params) => { + return await request.get({ url: '/bpm/process-instance/my-page', params }) +} + +export const createProcessInstance = async (data) => { + return await request.post({ url: '/bpm/process-instance/create', data: data }) +} + +export const cancelProcessInstance = async (id: number, reason: string) => { + const data = { + id: id, + reason: reason + } + return await request.delete({ url: '/bpm/process-instance/cancel', data: data }) +} + +export const getProcessInstance = async (id: number) => { + return await request.get({ url: '/bpm/process-instance/get?id=' + id }) +} diff --git a/src/api/bpm/task/index.ts b/src/api/bpm/task/index.ts new file mode 100644 index 0000000..e6478d3 --- /dev/null +++ b/src/api/bpm/task/index.ts @@ -0,0 +1,53 @@ +import request from '@/config/axios' + +export type TaskVO = { + id: number +} + +export const getTodoTaskPage = async (params) => { + return await request.get({ url: '/bpm/task/todo-page', params }) +} + +export const getDoneTaskPage = async (params) => { + return await request.get({ url: '/bpm/task/done-page', params }) +} + +export const completeTask = async (data) => { + return await request.put({ url: '/bpm/task/complete', data }) +} + +export const approveTask = async (data) => { + return await request.put({ url: '/bpm/task/approve', data }) +} + +export const rejectTask = async (data) => { + return await request.put({ url: '/bpm/task/reject', data }) +} +export const backTask = async (data) => { + return await request.put({ url: '/bpm/task/back', data }) +} + +export const updateTaskAssignee = async (data) => { + return await request.put({ url: '/bpm/task/update-assignee', data }) +} + +export const getTaskListByProcessInstanceId = async (processInstanceId) => { + return await request.get({ + url: '/bpm/task/list-by-process-instance-id?processInstanceId=' + processInstanceId + }) +} + +// 导出任务 +export const exportTask = async (params) => { + return await request.download({ url: '/bpm/task/export', params }) +} + +// 获取所有可回退的节点 +export const getReturnList = async (params) => { + return await request.get({ url: '/bpm/task/get-return-list', params }) +} + +// 回退 +export const returnTask = async (data) => { + return await request.put({ url: '/bpm/task/return', data }) +} diff --git a/src/api/bpm/taskAssignRule/index.ts b/src/api/bpm/taskAssignRule/index.ts new file mode 100644 index 0000000..5fbe342 --- /dev/null +++ b/src/api/bpm/taskAssignRule/index.ts @@ -0,0 +1,29 @@ +import request from '@/config/axios' + +export type TaskAssignVO = { + id: number + modelId: string + processDefinitionId: string + taskDefinitionKey: string + taskDefinitionName: string + options: string[] + type: number +} + +export const getTaskAssignRuleList = async (params) => { + return await request.get({ url: '/bpm/task-assign-rule/list', params }) +} + +export const createTaskAssignRule = async (data: TaskAssignVO) => { + return await request.post({ + url: '/bpm/task-assign-rule/create', + data: data + }) +} + +export const updateTaskAssignRule = async (data: TaskAssignVO) => { + return await request.put({ + url: '/bpm/task-assign-rule/update', + data: data + }) +} diff --git a/src/api/bpm/userGroup/index.ts b/src/api/bpm/userGroup/index.ts new file mode 100644 index 0000000..035762b --- /dev/null +++ b/src/api/bpm/userGroup/index.ts @@ -0,0 +1,47 @@ +import request from '@/config/axios' + +export type UserGroupVO = { + id: number + name: string + description: string + memberUserIds: number[] + status: number + remark: string + createTime: string +} + +// 创建用户组 +export const createUserGroup = async (data: UserGroupVO) => { + return await request.post({ + url: '/bpm/user-group/create', + data: data + }) +} + +// 更新用户组 +export const updateUserGroup = async (data: UserGroupVO) => { + return await request.put({ + url: '/bpm/user-group/update', + data: data + }) +} + +// 删除用户组 +export const deleteUserGroup = async (id: number) => { + return await request.delete({ url: '/bpm/user-group/delete?id=' + id }) +} + +// 获得用户组 +export const getUserGroup = async (id: number) => { + return await request.get({ url: '/bpm/user-group/get?id=' + id }) +} + +// 获得用户组分页 +export const getUserGroupPage = async (params) => { + return await request.get({ url: '/bpm/user-group/page', params }) +} + +// 获取用户组精简信息列表 +export const getSimpleUserGroupList = async (): Promise => { + return await request.get({ url: '/bpm/user-group/list-all-simple' }) +} diff --git a/src/api/eam/adjustRecordDetail/index.ts b/src/api/eam/adjustRecordDetail/index.ts new file mode 100644 index 0000000..d8f18cb --- /dev/null +++ b/src/api/eam/adjustRecordDetail/index.ts @@ -0,0 +1,46 @@ +import request from '@/config/axios' + +export interface AdjustRecordDetailVO { + number: string + planNumber: string + requestNumber: string + requestTime: Date + jobNumber: string + recordNumber: string +} + +// 查询备件盘点调整记录主列表 +export const getAdjustRecordDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/adjustRecordDetail/senior', data }) + } else { + return await request.get({ url: `/eam/adjustRecordDetail/page`, params }) + } +} + +// 查询备件盘点调整记录主详情 +export const getAdjustRecordDetail = async (id: number) => { + return await request.get({ url: `/eam/adjustRecordDetail/get?id=` + id }) +} + +// 新增备件盘点调整记录主 +export const createAdjustRecordDetail = async (data: AdjustRecordDetailVO) => { + return await request.post({ url: `/eam/adjustRecordDetail/create`, data }) +} + +// 修改备件盘点调整记录主 +export const updateAdjustRecordDetail = async (data: AdjustRecordDetailVO) => { + return await request.put({ url: `/eam/adjustRecordDetail/update`, data }) +} + +// 删除备件盘点调整记录主 +export const deleteAdjustRecordDetail = async (id: number) => { + return await request.delete({ url: `/eam/adjustRecordDetail/delete?id=` + id }) +} + +// 导出备件盘点调整记录主 Excel +export const exportAdjustRecordDetail = async (params) => { + return await request.download({ url: `/eam/adjustRecordDetail/export-excel`, params }) +} diff --git a/src/api/eam/adjustRecordMain/index.ts b/src/api/eam/adjustRecordMain/index.ts new file mode 100644 index 0000000..9eb4297 --- /dev/null +++ b/src/api/eam/adjustRecordMain/index.ts @@ -0,0 +1,46 @@ +import request from '@/config/axios' + +export interface AdjustRecordMainVO { + number: string + planNumber: string + requestNumber: string + requestTime: Date + jobNumber: string + recordNumber: string +} + +// 查询备件盘点调整记录主列表 +export const getAdjustRecordMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/adjustRecordMain/senior', data }) + } else { + return await request.get({ url: `/eam/adjustRecordMain/page`, params }) + } +} + +// 查询备件盘点调整记录主详情 +export const getAdjustRecordMain = async (id: number) => { + return await request.get({ url: `/eam/adjustRecordMain/get?id=` + id }) +} + +// 新增备件盘点调整记录主 +export const createAdjustRecordMain = async (data: AdjustRecordMainVO) => { + return await request.post({ url: `/eam/adjustRecordMain/create`, data }) +} + +// 修改备件盘点调整记录主 +export const updateAdjustRecordMain = async (data: AdjustRecordMainVO) => { + return await request.put({ url: `/eam/adjustRecordMain/update`, data }) +} + +// 删除备件盘点调整记录主 +export const deleteAdjustRecordMain = async (id: number) => { + return await request.delete({ url: `/eam/adjustRecordMain/delete?id=` + id }) +} + +// 导出备件盘点调整记录主 Excel +export const exportAdjustRecordMain = async (params) => { + return await request.download({ url: `/eam/adjustRecordMain/export-excel`, params }) +} diff --git a/src/api/eam/applicationRecordDetail/index.ts b/src/api/eam/applicationRecordDetail/index.ts new file mode 100644 index 0000000..9a45b46 --- /dev/null +++ b/src/api/eam/applicationRecordDetail/index.ts @@ -0,0 +1,57 @@ +import request from '@/config/axios' + +export interface ItemApplyDetailVO { + number : string + name : string + type : string + applyId : number + applyDeptId : number + approveId : number + approveTime : Date + outId : number + outTime : Date + siteId : string + available : string + concurrencyStamp : number +} + +// 查询备件申领记录主列表 +export const getApplicationRecordDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = { ...params } + return await request.post({ url: '/eam/item-apply-request-detail/senior', data }) + } else { + return await request.get({ url: `/eam/item-apply-request-detail/page`, params }) + } +} + +// 查询备件申领记录主详情 +export const getApplicationRecordDetail = async (id : number) => { + return await request.get({ url: `/eam/item-apply-request-detail/get?id=` + id }) +} + +// 新增备件申领记录主 +export const createApplicationRecordDetail = async (data : ItemApplyDetailVO) => { + return await request.post({ url: `/eam/item-apply-request-detail/create`, data }) +} + +// 修改备件申领记录主 +export const updateApplicationRecordDetail = async (data : ItemApplyDetailVO) => { + return await request.put({ url: `/eam/item-apply-request-detail/update`, data }) +} + +// 删除备件申领记录主 +export const deleteApplicationRecordDetail = async (id : number) => { + return await request.delete({ url: `/eam/item-apply-request-detail/delete?id=` + id }) +} + +// 导出备件申领记录主 Excel +export const exportApplicationRecordDetail = async (params) => { + return await request.download({ url: `/eam/item-apply-request-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/item-apply-request-detail/get-import-template' }) +} diff --git a/src/api/eam/applicationRecordMain/index.ts b/src/api/eam/applicationRecordMain/index.ts new file mode 100644 index 0000000..207b15a --- /dev/null +++ b/src/api/eam/applicationRecordMain/index.ts @@ -0,0 +1,67 @@ +import request from '@/config/axios' + +export interface ItemApplyMainVO { + number: string + name: string + type: string + applyId: number + applyDeptId: number + approveId: number + approveTime: Date + outId: number + outTime: Date + siteId: string + available: string + concurrencyStamp: number +} + +// 查询备件申领记录主列表 +export const getApplicationRecordMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/item-apply-request-main/senior', data }) + } else { + return await request.get({ url: `/eam/item-apply-request-main/page`, params }) + } +} + +// 查询备件申领记录主详情 +export const getApplicationRecordMain = async (id: number) => { + return await request.get({ url: `/eam/item-apply-request-main/get?id=` + id }) +} + +// 新增备件申领记录主 +export const createApplicationRecordMain = async (data: ItemApplyMainVO) => { + return await request.post({ url: `/eam/item-apply-request-main/create`, data }) +} + +// 修改备件申领记录主 +export const updateApplicationRecordMain = async (data: ItemApplyMainVO) => { + return await request.put({ url: `/eam/item-apply-request-main/update`, data }) +} + +// 删除备件申领记录主 +export const deleteApplicationRecordMain = async (id: number) => { + return await request.delete({ url: `/eam/item-apply-request-main/delete?id=` + id }) +} + +// 审批通过备件申领记录主 +export const agreeApplicationRecordMain = async (id: number) => { + return await request.get({ url: `/eam/item-apply-request-main/agree?id=` + id }) +} + +// 审批驳回备件申领记录主 +export const disAgreeApplicationRecordMain = async (id: number) => { + return await request.get({ url: `/eam/item-apply-request-main/disAgree?id=` + id }) +} + +// 导出备件申领记录主 Excel +export const exportApplicationRecordMain = async (params) => { + return await request.download({ url: `/eam/item-apply-request-main/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/item-apply-request-main/get-import-template' }) +} diff --git a/src/api/eam/attachmentFileUpload/index.ts b/src/api/eam/attachmentFileUpload/index.ts new file mode 100644 index 0000000..9008e96 --- /dev/null +++ b/src/api/eam/attachmentFileUpload/index.ts @@ -0,0 +1,20 @@ +import request from '@/config/axios' +// 上传图片 +export const uploadFiles = async (data) => { + return await request.post({ url: `/eam/attachment-file/upload`, data }) +} + +// 查询图片 +export const getFiles = async (data) => { + return await request.post({ url: `/eam/attachment-file/listNoPage`, data }) +} + +// 新增图片 +export const addFile = async (data) => { + return await request.post({ url: `/eam/attachment-file/create`, data }) +} + +// 删除图片 +export const delFile = async (id: number) => { + return await request.delete({ url: `/eam/attachment-file/delete?uid=`, id }) +} \ No newline at end of file diff --git a/src/api/eam/basicEamProductionline/index.ts b/src/api/eam/basicEamProductionline/index.ts new file mode 100644 index 0000000..9f410ae --- /dev/null +++ b/src/api/eam/basicEamProductionline/index.ts @@ -0,0 +1,73 @@ +import request from '@/config/axios' +import {BasicEamWorkshopVO} from "@/api/eam/basicEamWorkshop"; + +export interface BasicEamProductionlineVO { + id: number + code: string + name: string + description: string + type: string + workshopCode: string + rawLocationCode: string + fgLocationCode: string + available: string + activeTime: Date + expireTime: Date + remark: string + deletionTime: Date + deleterId: string + extraProperties: string + concurrencyStamp: number + siteId: string +} + +// 查询生产线列表 +export const getBasicEamProductionlinePage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/basic-eam-productionline/senior', data }) + } else { + return await request.get({ url: `/eam/basic-eam-productionline/page`, params }) + } +} + +// 查询生产线详情 +export const getBasicEamProductionline = async (id: number) => { + return await request.get({ url: `/eam/basic-eam-productionline/get?id=` + id }) +} + +// 新增生产线 +export const createBasicEamProductionline = async (data: BasicEamProductionlineVO) => { + return await request.post({ url: `/eam/basic-eam-productionline/create`, data }) +} + +// 修改生产线 +export const updateBasicEamProductionline = async (data: BasicEamProductionlineVO) => { + return await request.put({ url: `/eam/basic-eam-productionline/update`, data }) +} + +// 删除生产线 +export const deleteBasicEamProductionline = async (id: number) => { + return await request.delete({ url: `/eam/basic-eam-productionline/delete?id=` + id }) +} + +// 导出生产线 Excel +export const exportBasicEamProductionline = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/eam/basic-eam-productionline/export-excel-senior`, data }) + }else{ + return await request.download({ url: `/eam/basic-eam-productionline/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/basic-eam-productionline/get-import-template' }) +} + +// 启用 / 禁用 +export const updateEnableCode = async (data: BasicEamProductionlineVO) => { + return await request.post({ url: `/eam/basic-eam-productionline/ables` , data }) +} diff --git a/src/api/eam/basicEamWorkshop/index.ts b/src/api/eam/basicEamWorkshop/index.ts new file mode 100644 index 0000000..2728f74 --- /dev/null +++ b/src/api/eam/basicEamWorkshop/index.ts @@ -0,0 +1,75 @@ +import request from '@/config/axios' + +export interface BasicEamWorkshopVO { + id: number + code: string + name: string + description: string + type: string + available: string + activeTime: Date + expireTime: Date + remark: string + deletionTime: Date + deleterId: string + extraProperties: string + concurrencyStamp: number + siteId: string +} + +// 查询EAM车间列表 +export const getBasicEamWorkshopPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/basic-eam-workshop/senior', data }) + } else { + return await request.get({ url: `/eam/basic-eam-workshop/page`, params }) + } +} + +// 查询EAM车间详情 +export const getBasicEamWorkshop = async (id: number) => { + return await request.get({ url: `/eam/basic-eam-workshop/get?id=` + id }) +} + +// 新增EAM车间 +export const createBasicEamWorkshop = async (data: BasicEamWorkshopVO) => { + return await request.post({ url: `/eam/basic-eam-workshop/create`, data }) +} + +// 修改EAM车间 +export const updateBasicEamWorkshop = async (data: BasicEamWorkshopVO) => { + return await request.put({ url: `/eam/basic-eam-workshop/update`, data }) +} + +// 删除EAM车间 +export const deleteBasicEamWorkshop = async (id: number) => { + return await request.delete({ url: `/eam/basic-eam-workshop/delete?id=` + id }) +} + +// 导出EAM车间 Excel +export const exportBasicEamWorkshop = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/eam/basic-eam-workshop/export-excel-senior`, data }) + }else{ + return await request.download({ url: `/eam/basic-eam-workshop/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/basic-eam-workshop/get-import-template' }) +} + +// 启用 / 禁用 +export const updateEnableCode = async (data: BasicEamWorkshopVO) => { + return await request.post({ url: `/eam/basic-eam-workshop/ables` , data }) +} + + +// 查询EAM车间列表 +export const getBasicEamWorkshopNoPage = async (params) => { + return await request.get({ url: `/eam/basic-eam-workshop/noPage`, params }) +} \ No newline at end of file diff --git a/src/api/eam/basicFaultCause/index.ts b/src/api/eam/basicFaultCause/index.ts new file mode 100644 index 0000000..5c72afd --- /dev/null +++ b/src/api/eam/basicFaultCause/index.ts @@ -0,0 +1,68 @@ +import request from '@/config/axios' +import {EquipmentMainPartVO} from "@/api/eam/equipmentMainPart"; + +export interface BasicFaultCauseVO { + id: number + parentId: number + code: string + name: string + describing: string + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询故障原因列表 +export const getBasicFaultCausePage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/basic-fault-cause/senior', data }) + } else { + return await request.get({ url: `/eam/basic-fault-cause/page`, params }) + } +} + +// 查询故障原因详情 +export const getBasicFaultCause = async (id: number) => { + return await request.get({ url: `/eam/basic-fault-cause/get?id=` + id }) +} + +// 新增故障原因 +export const createBasicFaultCause = async (data: BasicFaultCauseVO) => { + return await request.post({ url: `/eam/basic-fault-cause/create`, data }) +} + +// 修改故障原因 +export const updateBasicFaultCause = async (data: BasicFaultCauseVO) => { + return await request.put({ url: `/eam/basic-fault-cause/update`, data }) +} + +// 删除故障原因 +export const deleteBasicFaultCause = async (id: number) => { + return await request.delete({ url: `/eam/basic-fault-cause/delete?id=` + id }) +} + +// 导出故障原因 Excel +export const exportBasicFaultCause = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/eam/basic-fault-cause/export-excel-senior`, data }) + }else{ + return await request.download({ url: `/eam/basic-fault-cause/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/basic-fault-cause/get-import-template' }) +} + +// 启用 / 禁用 +export const updateEnableCode = async (data: BasicFaultCauseVO) => { + return await request.post({ url: `/eam/basic-fault-cause/ables` , data }) +} diff --git a/src/api/eam/basicFaultType/index.ts b/src/api/eam/basicFaultType/index.ts new file mode 100644 index 0000000..6986595 --- /dev/null +++ b/src/api/eam/basicFaultType/index.ts @@ -0,0 +1,67 @@ +import request from '@/config/axios' +import {EquipmentMainPartVO} from "@/api/eam/equipmentMainPart"; + +export interface BasicFaultTypeVO { + id: number + code: string + name: string + describing: string + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询故障类型列表 +export const getBasicFaultTypePage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/basic-fault-type/senior', data }) + } else { + return await request.get({ url: `/eam/basic-fault-type/page`, params }) + } +} + +// 查询故障类型详情 +export const getBasicFaultType = async (id: number) => { + return await request.get({ url: `/eam/basic-fault-type/get?id=` + id }) +} + +// 新增故障类型 +export const createBasicFaultType = async (data: BasicFaultTypeVO) => { + return await request.post({ url: `/eam/basic-fault-type/create`, data }) +} + +// 修改故障类型 +export const updateBasicFaultType = async (data: BasicFaultTypeVO) => { + return await request.put({ url: `/eam/basic-fault-type/update`, data }) +} + +// 删除故障类型 +export const deleteBasicFaultType = async (id: number) => { + return await request.delete({ url: `/eam/basic-fault-type/delete?id=` + id }) +} + +// 导出故障类型 Excel +export const exportBasicFaultType = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/eam/basic-fault-type/export-excel-senior`, data }) + }else{ + return await request.download({ url: `/eam/basic-fault-type/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/basic-fault-type/get-import-template' }) +} + +// 启用 / 禁用 +export const updateEnableCode = async (data: BasicFaultTypeVO) => { + return await request.post({ url: `/eam/basic-fault-type/ables` , data }) +} diff --git a/src/api/eam/basicInspectionOption/index.ts b/src/api/eam/basicInspectionOption/index.ts new file mode 100644 index 0000000..663c618 --- /dev/null +++ b/src/api/eam/basicInspectionOption/index.ts @@ -0,0 +1,64 @@ +import request from '@/config/axios' +import {EquipmentMainPartVO} from "@/api/eam/equipmentMainPart"; + +export interface BasicInspectionOptionVO { + id: number + code: string + name: string + describing: string + isUpdated: boolean + type: string + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询巡检方案列表 +export const getBasicInspectionOptionPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/basic-inspection-option/senior', data }) + } else { + return await request.get({ url: `/eam/basic-inspection-option/page`, params }) + } +} + +// 查询巡检方案详情 +export const getBasicInspectionOption = async (id: number) => { + return await request.get({ url: `/eam/basic-inspection-option/get?id=` + id }) +} + +// 新增巡检方案 +export const createBasicInspectionOption = async (data: BasicInspectionOptionVO) => { + return await request.post({ url: `/eam/basic-inspection-option/create`, data }) +} + +// 修改巡检方案 +export const updateBasicInspectionOption = async (data: BasicInspectionOptionVO) => { + return await request.put({ url: `/eam/basic-inspection-option/update`, data }) +} + +// 删除巡检方案 +export const deleteBasicInspectionOption = async (id: number) => { + return await request.delete({ url: `/eam/basic-inspection-option/delete?id=` + id }) +} + +// 导出巡检方案 Excel +export const exportBasicInspectionOption = async (params) => { + return await request.download({ url: `/eam/basic-inspection-option/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/basic-inspection-option/get-import-template' }) +} + +// 启用 / 禁用 +export const updateEnableCode = async (data: BasicInspectionOptionVO) => { + return await request.post({ url: `/eam/basic-inspection-option/ables` , data }) +} diff --git a/src/api/eam/basicMaintenanceOption/index.ts b/src/api/eam/basicMaintenanceOption/index.ts new file mode 100644 index 0000000..96cca69 --- /dev/null +++ b/src/api/eam/basicMaintenanceOption/index.ts @@ -0,0 +1,64 @@ +import request from '@/config/axios' + +export interface BasicMaintenanceOptionVO { + id: number + code: string + name: string + selectId: string + describing: string + isUpdated: boolean + type: string + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询保养方案列表 +export const getBasicMaintenanceOptionPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/basic-maintenance-option/senior', data }) + } else { + return await request.get({ url: `/eam/basic-maintenance-option/page`, params }) + } +} + +// 查询保养方案详情 +export const getBasicMaintenanceOption = async (id: number) => { + return await request.get({ url: `/eam/basic-maintenance-option/get?id=` + id }) +} + +// 新增保养方案 +export const createBasicMaintenanceOption = async (data) => { + return await request.post({ url: `/eam/basic-maintenance-option/create`, data }) +} + +// 修改保养方案 +export const updateBasicMaintenanceOption = async (data: BasicMaintenanceOptionVO) => { + return await request.put({ url: `/eam/basic-maintenance-option/update`, data }) +} + +// 删除保养方案 +export const deleteBasicMaintenanceOption = async (id: number) => { + return await request.delete({ url: `/eam/basic-maintenance-option/delete?id=` + id }) +} + +// 导出保养方案 Excel +export const exportBasicMaintenanceOption = async (params) => { + return await request.download({ url: `/eam/basic-maintenance-option/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/basic-maintenance-option/get-import-template' }) +} + +// 启用 / 禁用 +export const updateEnableCode = async (data: BasicMaintenanceOptionVO) => { + return await request.post({ url: `/eam/basic-maintenance-option/ables` , data }) +} diff --git a/src/api/eam/basicSpotCheckOption/index.ts b/src/api/eam/basicSpotCheckOption/index.ts new file mode 100644 index 0000000..5b7d2d4 --- /dev/null +++ b/src/api/eam/basicSpotCheckOption/index.ts @@ -0,0 +1,63 @@ +import request from '@/config/axios' + +export interface BasicSpotCheckOptionVO { + id: number + code: string + name: string + selectId: number + describing: string + isUpdated: boolean + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询点检方案列表 +export const getBasicSpotCheckOptionPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/basic-spotCheck-option/senior', data }) + } else { + return await request.get({ url: `/eam/basic-spotCheck-option/page`, params }) + } +} + +// 查询点检方案详情 +export const getBasicSpotCheckOption = async (id: number) => { + return await request.get({ url: `/eam/basic-spotCheck-option/get?id=` + id }) +} + +// 新增点检方案 +export const createBasicSpotCheckOption = async (data: BasicSpotCheckOptionVO) => { + return await request.post({ url: `/eam/basic-spotCheck-option/create`, data }) +} + +// 修改点检方案 +export const updateBasicSpotCheckOption = async (data: BasicSpotCheckOptionVO) => { + return await request.put({ url: `/eam/basic-spotCheck-option/update`, data }) +} + +// 删除点检方案 +export const deleteBasicSpotCheckOption = async (id: number) => { + return await request.delete({ url: `/eam/basic-spotCheck-option/delete?id=` + id }) +} + +// 导出点检方案 Excel +export const exportBasicSpotCheckOption = async (params) => { + return await request.download({ url: `/eam/basic-spotCheck-option/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/basic-spotCheck-option/get-import-template' }) +} + +// 启用 / 禁用 +export const updateEnableCode = async (data: BasicSpotCheckOptionVO) => { + return await request.post({ url: `/eam/basic-spotCheck-option/ables` , data }) +} diff --git a/src/api/eam/classTypeRole/index.ts b/src/api/eam/classTypeRole/index.ts new file mode 100644 index 0000000..c6dd939 --- /dev/null +++ b/src/api/eam/classTypeRole/index.ts @@ -0,0 +1,70 @@ +import request from '@/config/axios' + +export interface ClassTypeRoleVO { + id: number + workerRoleId: string + engineerRoleId: string + type: string + factoryAreaCode: string + workshopCode: string + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询厂区班组角色维护列表 +export const getClassTypeRolePage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/basic/class-type-role/senior', data }) + } else { + return await request.get({ url: `/eam/basic/class-type-role/page`, params }) + } +} + +// 查询厂区班组角色维护详情 +export const getClassTypeRole = async (id: number) => { + return await request.get({ url: `/eam/basic/class-type-role/get?id=` + id }) +} + +// 新增厂区班组角色维护 +export const createClassTypeRole = async (data: ClassTypeRoleVO) => { + return await request.post({ url: `/eam/basic/class-type-role/create`, data }) +} + +// 修改厂区班组角色维护 +export const updateClassTypeRole = async (data: ClassTypeRoleVO) => { + return await request.put({ url: `/eam/basic/class-type-role/update`, data }) +} + +// 删除厂区班组角色维护 +export const deleteClassTypeRole = async (id: number) => { + return await request.delete({ url: `/eam/basic/class-type-role/delete?id=` + id }) +} + +// 导出厂区班组角色维护 Excel +export const exportClassTypeRole = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = { ...params } + return await request.downloadPost({ url: `/eam/basic/class-type-role/export-excel-senior`, data }) + } else { + return await request.download({ url: `/eam/basic/class-type-role/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/basic/class-type-role/get-import-template' }) +} + + +// 启用 / 禁用 +export const updateEnableCode = async (data: ClassTypeRoleVO) => { + return await request.post({ url: `/eam/basic/class-type-role/ables` , data }) +} diff --git a/src/api/eam/countJobDetail/index.ts b/src/api/eam/countJobDetail/index.ts new file mode 100644 index 0000000..5f06e89 --- /dev/null +++ b/src/api/eam/countJobDetail/index.ts @@ -0,0 +1,51 @@ +import request from '@/config/axios' + +export interface CountJobDetailVO { + id : number + number : string + name : string + classification : string + isInAccount : string + status : string +} + +// 查询备件盘点计划列表 +export const getCountJobDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = { ...params } + return await request.post({ url: '/eam/countJobDetail/senior', data }) + } else { + return await request.get({ url: `/eam/countJobDetail/page`, params }) + } +} + +// 查询备件盘点计划详情 +export const getCountJobDetail = async (id : number) => { + return await request.get({ url: `/eam/countJobDetail/get?id=` + id }) +} + +// 新增备件盘点计划 +export const createCountJobDetail = async (data : CountJobDetailVO) => { + return await request.post({ url: `/eam/countJobDetail/create`, data }) +} + +// 修改备件盘点计划 +export const updateCountJobDetail = async (data : CountJobDetailVO) => { + return await request.put({ url: `/eam/countJobDetail/update`, data }) +} + +// 删除备件盘点计划 +export const deleteCountJobDetail = async (id : number) => { + return await request.delete({ url: `/eam/countJobDetail/delete?id=` + id }) +} + +// 导出备件盘点计划 Excel +export const exportCountJobDetail = async (params) => { + return await request.download({ url: `/eam/countJobDetail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/countJobDetail/get-import-template' }) +} diff --git a/src/api/eam/countJobMain/index.ts b/src/api/eam/countJobMain/index.ts new file mode 100644 index 0000000..2ead754 --- /dev/null +++ b/src/api/eam/countJobMain/index.ts @@ -0,0 +1,56 @@ +import request from '@/config/axios' + +export interface CountJobMainVO { + id : number + number : string + name : string + classification : string + isInAccount : string + status : string +} + +// 查询备件盘点计划列表 +export const getCountJobMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = { ...params } + return await request.post({ url: '/eam/countJobMain/senior', data }) + } else { + return await request.get({ url: `/eam/countJobMain/page`, params }) + } +} + +// 查询备件盘点计划详情 +export const getCountJobMain = async (id : number) => { + return await request.get({ url: `/eam/countJobMain/get?id=` + id }) +} + +// 新增备件盘点计划 +export const createCountJobMain = async (data : CountJobMainVO) => { + return await request.post({ url: `/eam/countJobMain/create`, data }) +} + +// 修改备件盘点计划 +export const updateCountJobMain = async (data : CountJobMainVO) => { + return await request.put({ url: `/eam/countJobMain/update`, data }) +} + +// 删除备件盘点计划 +export const deleteCountJobMain = async (id : number) => { + return await request.delete({ url: `/eam/countJobMain/delete?id=` + id }) +} + +// 导出备件盘点计划 Excel +export const handleMainExport = async (id : number) => { + return await request.download({ url: `/eam/countJobMain/handleMainExport?id=` + id }) +} + +// 导出备件盘点计划 Excel +export const exportCountJobMain = async (params) => { + return await request.download({ url: `/eam/countJobMain/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/countJobMain/get-import-template' }) +} diff --git a/src/api/eam/countRecordDetail/index.ts b/src/api/eam/countRecordDetail/index.ts new file mode 100644 index 0000000..0387608 --- /dev/null +++ b/src/api/eam/countRecordDetail/index.ts @@ -0,0 +1,51 @@ +import request from '@/config/axios' + +export interface CountRecordDetailVO { + id : number + number : string + name : string + classification : string + isInAccount : string + status : string +} + +// 查询备件盘点计划列表 +export const getCountRecordDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = { ...params } + return await request.post({ url: '/eam/countRecordDetail/senior', data }) + } else { + return await request.get({ url: `/eam/countRecordDetail/page`, params }) + } +} + +// 查询备件盘点计划详情 +export const getCountRecordDetail = async (id : number) => { + return await request.get({ url: `/eam/countRecordDetail/get?id=` + id }) +} + +// 新增备件盘点计划 +export const createCountRecordDetail = async (data : CountRecordDetailVO) => { + return await request.post({ url: `/eam/countRecordDetail/create`, data }) +} + +// 修改备件盘点计划 +export const updateCountRecordDetail = async (data : CountRecordDetailVO) => { + return await request.put({ url: `/eam/countRecordDetail/update`, data }) +} + +// 删除备件盘点计划 +export const deleteCountRecordDetail = async (id : number) => { + return await request.delete({ url: `/eam/countRecordDetail/delete?id=` + id }) +} + +// 导出备件盘点计划 Excel +export const exportCountRecordDetail = async (params) => { + return await request.download({ url: `/eam/countRecordDetail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/countRecordDetail/get-import-template' }) +} diff --git a/src/api/eam/countRecordMain/index.ts b/src/api/eam/countRecordMain/index.ts new file mode 100644 index 0000000..512ae4c --- /dev/null +++ b/src/api/eam/countRecordMain/index.ts @@ -0,0 +1,61 @@ +import request from '@/config/axios' + +export interface CountRecordMainVO { + id : number + number : string + name : string + classification : string + isInAccount : string + status : string +} + +// 查询备件盘点计划列表 +export const getCountRecordMainPage = async (params) => { + params.status="CANGENERATE" + if (params.isSearch) { + delete params.isSearch + const data = { ...params } + return await request.post({ url: '/eam/countRecordMain/senior', data }) + } else { + return await request.get({ url: `/eam/countRecordMain/page`, params }) + } +} + +// 查询备件盘点计划详情 +export const getCountRecordMain = async (id : number) => { + return await request.get({ url: `/eam/countRecordMain/get?id=` + id }) +} + +// 新增备件盘点计划 +export const createCountRecordMain = async (data : CountRecordMainVO) => { + return await request.post({ url: `/eam/countRecordMain/create`, data }) +} + +// 修改备件盘点计划 +export const updateCountRecordMain = async (data : CountRecordMainVO) => { + return await request.put({ url: `/eam/countRecordMain/update`, data }) +} + +// 删除备件盘点计划 +export const deleteCountRecordMain = async (id : number) => { + return await request.delete({ url: `/eam/countRecordMain/delete?id=` + id }) +} +// 盘点调整 +export const adjustCountRecordMain = async (id : number) => { + return await request.get({ url: `/eam/countRecordMain/adjust?number=` + id }) +} + +// 导出备件盘点计划 Excel +export const handleMainExport = async (id : number) => { + return await request.download({ url: `/eam/countRecordMain/handleMainExport?id=` + id }) +} + +// 导出备件盘点计划 Excel +export const exportCounRecordMain = async (params) => { + return await request.download({ url: `/eam/countRecordMain/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/countRecordMain/get-import-template' }) +} diff --git a/src/api/eam/countadjustPlan/index.ts b/src/api/eam/countadjustPlan/index.ts new file mode 100644 index 0000000..4a9470f --- /dev/null +++ b/src/api/eam/countadjustPlan/index.ts @@ -0,0 +1,51 @@ +import request from '@/config/axios' + +export interface CountadjustPlanVO { + id : number + number : string + name : string + classification : string + isInAccount : string + status : string +} + +// 查询备件盘点计划列表 +export const getCountadjustPlanPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = { ...params } + return await request.post({ url: '/eam/countadjust-plan/senior', data }) + } else { + return await request.get({ url: `/eam/countadjust-plan/page`, params }) + } +} + +// 查询备件盘点计划详情 +export const getCountadjustPlan = async (id : number) => { + return await request.get({ url: `/eam/countadjust-plan/get?id=` + id }) +} + +// 新增备件盘点计划 +export const createCountadjustPlan = async (data : CountadjustPlanVO) => { + return await request.post({ url: `/eam/countadjust-plan/create`, data }) +} + +// 修改备件盘点计划 +export const updateCountadjustPlan = async (data : CountadjustPlanVO) => { + return await request.put({ url: `/eam/countadjust-plan/update`, data }) +} + +// 删除备件盘点计划 +export const deleteCountadjustPlan = async (id : number) => { + return await request.delete({ url: `/eam/countadjust-plan/delete?id=` + id }) +} + +// 导出备件盘点计划 Excel +export const exportCountadjustPlan = async (params) => { + return await request.download({ url: `/eam/countadjust-plan/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/countadjust-plan/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/eam/documentType/index.ts b/src/api/eam/documentType/index.ts new file mode 100644 index 0000000..af93a8b --- /dev/null +++ b/src/api/eam/documentType/index.ts @@ -0,0 +1,67 @@ +import request from '@/config/axios' +import {EquipmentMainPartVO} from "@/api/eam/equipmentMainPart"; + +export interface DocumentTypeVO { + id: number + code: string + name: string + type: string + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询文档类型列表 +export const getDocumentTypePage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/basic/document-type/senior', data }) + } else { + return await request.get({ url: `/eam/basic/document-type/page`, params }) + } +} + +// 查询文档类型详情 +export const getDocumentType = async (id: number) => { + return await request.get({ url: `/eam/basic/document-type/get?id=` + id }) +} + +// 新增文档类型 +export const createDocumentType = async (data: DocumentTypeVO) => { + return await request.post({ url: `/eam/basic/document-type/create`, data }) +} + +// 修改文档类型 +export const updateDocumentType = async (data: DocumentTypeVO) => { + return await request.put({ url: `/eam/basic/document-type/update`, data }) +} + +// 删除文档类型 +export const deleteDocumentType = async (id: number) => { + return await request.delete({ url: `/eam/basic/document-type/delete?id=` + id }) +} + +// 导出文档类型 Excel +export const exportDocumentType = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/eam/basic/document-type/export-excel-senior`, data }) + }else{ + return await request.download({ url: `/eam/basic/document-type/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/basic/document-type/get-import-template' }) +} + +// 启用 / 禁用 +export const updateEnableCode = async (data: DocumentTypeVO) => { + return await request.post({ url: `/eam/basic/document-type/ables` , data }) +} diff --git a/src/api/eam/documentTypeSelectSet/index.ts b/src/api/eam/documentTypeSelectSet/index.ts new file mode 100644 index 0000000..c776a99 --- /dev/null +++ b/src/api/eam/documentTypeSelectSet/index.ts @@ -0,0 +1,60 @@ +import request from '@/config/axios' + +export interface DocumentTypeSelectSetVO { + id: number + name: string + itemCode: string + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询文档类型选择集列表 +export const getDocumentTypeSelectSetPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/basic/document-type-select-set/senior', data }) + } else { + return await request.get({ url: `/eam/basic/document-type-select-set/page`, params }) + } +} + +// 查询文档类型选择集详情 +export const getDocumentTypeSelectSet = async (id: number) => { + return await request.get({ url: `/eam/basic/document-type-select-set/get?id=` + id }) +} + +// 新增文档类型选择集 +export const createDocumentTypeSelectSet = async (data: DocumentTypeSelectSetVO) => { + return await request.post({ url: `/eam/basic/document-type-select-set/create`, data }) +} + +// 修改文档类型选择集 +export const updateDocumentTypeSelectSet = async (data: DocumentTypeSelectSetVO) => { + return await request.put({ url: `/eam/basic/document-type-select-set/update`, data }) +} + +// 删除文档类型选择集 +export const deleteDocumentTypeSelectSet = async (id: number) => { + return await request.delete({ url: `/eam/basic/document-type-select-set/delete?id=` + id }) +} + +// 导出文档类型选择集 Excel +export const exportDocumentTypeSelectSet = async (params) => { + return await request.download({ url: `/eam/basic/document-type-select-set/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/basic/document-type-select-set/get-import-template' }) +} + +// 启用 / 禁用 +export const updateEnableCode = async (data: DocumentTypeSelectSetVO) => { + return await request.post({ url: `/eam/basic/document-type-select-set/ables` , data }) +} diff --git a/src/api/eam/equipmentAccounts/index.ts b/src/api/eam/equipmentAccounts/index.ts new file mode 100644 index 0000000..6f76580 --- /dev/null +++ b/src/api/eam/equipmentAccounts/index.ts @@ -0,0 +1,90 @@ +import request from '@/config/axios' + +export interface EquipmentAccountsVO { + id: number + code: string + name: string + specification: string + type: string + power: string + equity: string + electricMachine: string + beat: string + storageLocation: string + useDept: string + principal: string + principalTelephone: string + status: string + changeReason: string + startDate: Date + supplierCode: string + purchaseTime: Date + purchaseDept: string + purchaser: string + productionDate: Date + manufactureCode: string + equipmentLife: string + acceptanceDate: Date + purchasePrice: number + factoryAreaCode: string + workshopCode: string + workshopSectionCode: string + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询设备台账列表 +export const getEquipmentAccountsPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/device/equipment-accounts/senior', data }) + } else { + return await request.get({ url: `/eam/device/equipment-accounts/page`, params }) + } +} + +// 查询设备台账详情 +export const getEquipmentAccounts = async (id: number) => { + return await request.get({ url: `/eam/device/equipment-accounts/get?id=` + id }) +} + +// 新增设备台账 +export const createEquipmentAccounts = async (data: EquipmentAccountsVO) => { + return await request.post({ url: `/eam/device/equipment-accounts/create`, data }) +} + +// 修改设备台账 +export const updateEquipmentAccounts = async (data: EquipmentAccountsVO) => { + return await request.put({ url: `/eam/device/equipment-accounts/update`, data }) +} + +// 删除设备台账 +export const deleteEquipmentAccounts = async (id: number) => { + return await request.delete({ url: `/eam/device/equipment-accounts/delete?id=` + id }) +} + +// 导出设备台账 Excel +export const exportEquipmentAccounts = async (params) => { + return await request.download({ url: `/eam/device/equipment-accounts/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/device/equipment-accounts/get-import-template' }) +} + +// 查询设备台账列表 +export const getEquipmentAccountsNoPage = async (params) => { + return await request.get({ url: `/eam/device/equipment-accounts/noPage`, params }) +} + +//停用启用 +export const ableEquipmentAccountsMain = async (data: EquipmentAccountsVO) => { + return await request.post({ url: `/eam/device/equipment-accounts/ables`, data }) +} diff --git a/src/api/eam/equipmentInspectionDetail/index.ts b/src/api/eam/equipmentInspectionDetail/index.ts new file mode 100644 index 0000000..2381178 --- /dev/null +++ b/src/api/eam/equipmentInspectionDetail/index.ts @@ -0,0 +1,60 @@ +import request from '@/config/axios' + +export interface EquipmentInspectionDetailVO { + id: number + number: string + masterId: number + completionTime: Date + uncompletedCause: string + result: string + name: string + content: string + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询巡检工单子列表 +export const getEquipmentInspectionDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/equipment-inspection-detail/senior', data }) + } else { + return await request.get({ url: `/eam/equipment-inspection-detail/page`, params }) + } +} + +// 查询巡检工单子详情 +export const getEquipmentInspectionDetail = async (id: number) => { + return await request.get({ url: `/eam/equipment-inspection-detail/get?id=` + id }) +} + +// 新增巡检工单子 +export const createEquipmentInspectionDetail = async (data: EquipmentInspectionDetailVO) => { + return await request.post({ url: `/eam/equipment-inspection-detail/create`, data }) +} + +// 修改巡检工单子 +export const updateEquipmentInspectionDetail = async (data: EquipmentInspectionDetailVO) => { + return await request.put({ url: `/eam/equipment-inspection-detail/update`, data }) +} + +// 删除巡检工单子 +export const deleteEquipmentInspectionDetail = async (id: number) => { + return await request.delete({ url: `/eam/equipment-inspection-detail/delete?id=` + id }) +} + +// 导出巡检工单子 Excel +export const exportEquipmentInspectionDetail = async (params) => { + return await request.download({ url: `/eam/equipment-inspection-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/equipment-inspection-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/eam/equipmentInspectionMain/index.ts b/src/api/eam/equipmentInspectionMain/index.ts new file mode 100644 index 0000000..6f25500 --- /dev/null +++ b/src/api/eam/equipmentInspectionMain/index.ts @@ -0,0 +1,104 @@ +import request from '@/config/axios' +import {EquipmentMainPartVO} from "@/api/eam/equipmentMainPart"; +import {EquipmentMaintenanceMainVO} from "@/api/eam/equipmentMaintenanceMain"; + +export interface EquipmentInspectionMainVO { + id: number + number: string + sources: string + describing: string + equipmentCode: string + type: string + isPictures: boolean + planNumber: string + planStartTime: Date + planEndTime: Date + startTime: Date + endTime: Date + classType: string + verifyer: number + verifyContent: string + verifyTime: Date + maintenancer: number + completionTime: Date + maintenanceTime: Date + status: string + autoOrder: string + autoPerform: string + autoVerify: string + directCreateRecord: string + faultType: string + factoryAreaCode: string + workshopCode: string + lineCode: string + processCode: string + workstationCode: string + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询巡检工单主列表 +export const getEquipmentInspectionMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/equipment-inspection-main/senior', data }) + } else { + return await request.get({ url: `/eam/equipment-inspection-main/page`, params }) + } +} + +// 查询巡检工单主详情 +export const getEquipmentInspectionMain = async (id: number) => { + return await request.get({ url: `/eam/equipment-inspection-main/get?id=` + id }) +} + +// 新增巡检工单主 +export const createEquipmentInspectionMain = async (data: EquipmentInspectionMainVO) => { + return await request.post({ url: `/eam/equipment-inspection-main/create`, data }) +} + +// 修改巡检工单主 +export const updateEquipmentInspectionMain = async (data: EquipmentInspectionMainVO) => { + return await request.put({ url: `/eam/equipment-inspection-main/update`, data }) +} + +// 验证巡检工单主 +export const verifyEquipmentInspectionMain = async (data: EquipmentInspectionMainVO) => { + return await request.post({ url: `/eam/equipment-inspection-main/verifyOrder`, data }) +} + +// 删除巡检工单主 +export const deleteEquipmentInspectionMain = async (id: number) => { + return await request.delete({ url: `/eam/equipment-inspection-main/delete?id=` + id }) +} + +// 导出巡检工单主 Excel +export const exportEquipmentInspectionMain = async (params) => { + return await request.download({ url: `/eam/equipment-inspection-main/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/equipment-inspection-main/get-import-template' }) +} + +// 修改保养工单状态 +export const updateEquipmentInspectionOrder = async (data: EquipmentInspectionMainVO) => { + return await request.post({ url: `/eam/equipment-inspection-main/updateOrder`, data }) +} + +//完成保养工单 +export const executeEquipmentInspectionOrder = async (data: EquipmentInspectionMainVO) => { + return await request.post({ url: `/eam/equipment-inspection-main/execute`, data }) +} + +//验证不通过,打回保养工单 +export const backEquipmentInspectionOrder = async (data: EquipmentInspectionMainVO) => { + return await request.post({ url: `/eam/equipment-inspection-main/fallback`, data }) +} diff --git a/src/api/eam/equipmentInspectionRecordDetail/index.ts b/src/api/eam/equipmentInspectionRecordDetail/index.ts new file mode 100644 index 0000000..32f0f5c --- /dev/null +++ b/src/api/eam/equipmentInspectionRecordDetail/index.ts @@ -0,0 +1,60 @@ +import request from '@/config/axios' + +export interface EquipmentInspectionRecordDetailVO { + id: number + number: string + masterId: number + completionTime: Date + uncompletedCause: string + result: string + name: string + content: string + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询巡检记录子列表 +export const getEquipmentInspectionRecordDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/equipment-inspection-record-detail/senior', data }) + } else { + return await request.get({ url: `/eam/equipment-inspection-record-detail/page`, params }) + } +} + +// 查询巡检记录子详情 +export const getEquipmentInspectionRecordDetail = async (id: number) => { + return await request.get({ url: `/eam/equipment-inspection-record-detail/get?id=` + id }) +} + +// 新增巡检记录子 +export const createEquipmentInspectionRecordDetail = async (data: EquipmentInspectionRecordDetailVO) => { + return await request.post({ url: `/eam/equipment-inspection-record-detail/create`, data }) +} + +// 修改巡检记录子 +export const updateEquipmentInspectionRecordDetail = async (data: EquipmentInspectionRecordDetailVO) => { + return await request.put({ url: `/eam/equipment-inspection-record-detail/update`, data }) +} + +// 删除巡检记录子 +export const deleteEquipmentInspectionRecordDetail = async (id: number) => { + return await request.delete({ url: `/eam/equipment-inspection-record-detail/delete?id=` + id }) +} + +// 导出巡检记录子 Excel +export const exportEquipmentInspectionRecordDetail = async (params) => { + return await request.download({ url: `/eam/equipment-inspection-record-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/equipment-inspection-record-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/eam/equipmentInspectionRecordMain/index.ts b/src/api/eam/equipmentInspectionRecordMain/index.ts new file mode 100644 index 0000000..23f4893 --- /dev/null +++ b/src/api/eam/equipmentInspectionRecordMain/index.ts @@ -0,0 +1,79 @@ +import request from '@/config/axios' + +export interface EquipmentInspectionRecordMainVO { + id: number + number: string + describing: string + equipmentCode: string + type: string + isPictures: boolean + planNumber: string + planStartTime: Date + planEndTime: Date + startTime: Date + endTime: Date + classType: string + verifyer: number + verifyContent: string + verifyTime: Date + maintenancer: number + completionTime: Date + maintenanceTime: Date + status: string + autoOrder: string + autoPerform: string + autoVerify: string + directCreateRecord: string + faultType: string + factoryAreaCode: string + workshopCode: string + workshopSectionCode: string + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询巡检记录主列表 +export const getEquipmentInspectionRecordMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/equipment-inspection-record-main/senior', data }) + } else { + return await request.get({ url: `/eam/equipment-inspection-record-main/page`, params }) + } +} + +// 查询巡检记录主详情 +export const getEquipmentInspectionRecordMain = async (id: number) => { + return await request.get({ url: `/eam/equipment-inspection-record-main/get?id=` + id }) +} + +// 新增巡检记录主 +export const createEquipmentInspectionRecordMain = async (data: EquipmentInspectionRecordMainVO) => { + return await request.post({ url: `/eam/equipment-inspection-record-main/create`, data }) +} + +// 修改巡检记录主 +export const updateEquipmentInspectionRecordMain = async (data: EquipmentInspectionRecordMainVO) => { + return await request.put({ url: `/eam/equipment-inspection-record-main/update`, data }) +} + +// 删除巡检记录主 +export const deleteEquipmentInspectionRecordMain = async (id: number) => { + return await request.delete({ url: `/eam/equipment-inspection-record-main/delete?id=` + id }) +} + +// 导出巡检记录主 Excel +export const exportEquipmentInspectionRecordMain = async (params) => { + return await request.download({ url: `/eam/equipment-inspection-record-main/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/equipment-inspection-record-main/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/eam/equipmentMainPart/index.ts b/src/api/eam/equipmentMainPart/index.ts new file mode 100644 index 0000000..c50e500 --- /dev/null +++ b/src/api/eam/equipmentMainPart/index.ts @@ -0,0 +1,72 @@ +import request from '@/config/axios' + +export interface EquipmentMainPartVO { + id: number + name: string + code: string + type: string + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询主要部件列表 +export const getEquipmentMainPartPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/equipment-main-part/senior', data }) + } else { + return await request.get({ url: `/eam/equipment-main-part/page`, params }) + } +} + +// 查询主要部件详情 +export const getEquipmentMainPart = async (id: number) => { + return await request.get({ url: `/eam/equipment-main-part/get?id=` + id }) +} + +// 新增主要部件 +export const createEquipmentMainPart = async (data: EquipmentMainPartVO) => { + return await request.post({ url: `/eam/equipment-main-part/create`, data }) +} + +// 修改主要部件 +export const updateEquipmentMainPart = async (data: EquipmentMainPartVO) => { + console.log(data) + return await request.put({ url: `/eam/equipment-main-part/update`, data }) +} + +// 删除主要部件 +export const deleteEquipmentMainPart = async (id: number) => { + return await request.delete({ url: `/eam/equipment-main-part/delete?id=` + id }) +} + +// 导出主要部件 Excel +export const exportEquipmentMainPart = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/eam/equipment-main-part/export-excel-senior`, data }) + }else{ + return await request.download({ url: `/eam/equipment-main-part/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/equipment-main-part/get-import-template' }) +} + +// 启用 / 禁用 +export const updateEnableCode = async (data: EquipmentMainPartVO) => { + return await request.post({ url: `/eam/equipment-main-part/ables` , data }) +} + +// 查询主要部件列表 +export const getEquipmentMainPartNoPage = async (params) => { + return await request.get({ url: `/eam/equipment-main-part/noPage`, params }) +} \ No newline at end of file diff --git a/src/api/eam/equipmentMaintenanceDetail/index.ts b/src/api/eam/equipmentMaintenanceDetail/index.ts new file mode 100644 index 0000000..0869a00 --- /dev/null +++ b/src/api/eam/equipmentMaintenanceDetail/index.ts @@ -0,0 +1,69 @@ +import request from '@/config/axios' + +export interface EquipmentMaintenanceDetailVO { + id: number + number: string + masterId: number + peoples: number + estimatedMinutes: number + actualMinutes: number + chargePeoples: string + completionTime: Date + uncompletedCause: string + result: string + contents: string + equipmentParts: string + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询设备保养工单子列表 +export const getEquipmentMaintenanceDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/equipment-maintenance-detail/senior', data }) + } else { + return await request.get({ url: `/eam/equipment-maintenance-detail/page`, params }) + } +} + +// 查询设备保养工单子详情 +export const getEquipmentMaintenanceDetail = async (id: number) => { + return await request.get({ url: `/eam/equipment-maintenance-detail/get?id=` + id }) +} + +// 新增设备保养工单子 +export const createEquipmentMaintenanceDetail = async (data: EquipmentMaintenanceDetailVO) => { + return await request.post({ url: `/eam/equipment-maintenance-detail/create`, data }) +} + +// 新增设备保养工单 通过主表添加 +export const createItemEquipmentMaintenanceDetail = async (data: EquipmentMaintenanceDetailVO) => { + return await request.post({ url: `/eam/equipment-maintenance-detail/createItem`, data }) +} + +// 修改设备保养工单子 +export const updateEquipmentMaintenanceDetail = async (data: EquipmentMaintenanceDetailVO) => { + return await request.put({ url: `/eam/equipment-maintenance-detail/update`, data }) +} + +// 删除设备保养工单子 +export const deleteEquipmentMaintenanceDetail = async (id: number) => { + return await request.delete({ url: `/eam/equipment-maintenance-detail/delete?id=` + id }) +} + +// 导出设备保养工单子 Excel +export const exportEquipmentMaintenanceDetail = async (params) => { + return await request.download({ url: `/eam/equipment-maintenance-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/equipment-maintenance-detail/get-import-template' }) +} diff --git a/src/api/eam/equipmentMaintenanceMain/index.ts b/src/api/eam/equipmentMaintenanceMain/index.ts new file mode 100644 index 0000000..e8b4498 --- /dev/null +++ b/src/api/eam/equipmentMaintenanceMain/index.ts @@ -0,0 +1,111 @@ +import request from '@/config/axios' +import {EquipmentMainPartVO} from "@/api/eam/equipmentMainPart"; + +export interface EquipmentMaintenanceMainVO { + id: number + describing: string + number: string + sources: string + equipmentCode: string + type: string + faultType: string + planNumber: string + planStartTime: Date + planEndTime: Date + startTime: Date + endTime: Date + classType: string + verifyer: number + verifyContent: string + verifyTime: Date + maintenancer: number + maintenancePhone: string + completionTime: Date + maintenanceTime: Date + status: string + autoOrder: string + autoPerform: string + autoVerify: string + directCreateRecord: string + factoryAreaCode: string + workshopCode: string + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询设备保养工单主列表 +export const getEquipmentMaintenanceMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/equipment-maintenance-main/senior', data }) + } else { + return await request.get({ url: `/eam/equipment-maintenance-main/page`, params }) + } +} + +// 查询设备保养工单主详情 +export const getEquipmentMaintenanceMain = async (id: number) => { + return await request.get({ url: `/eam/equipment-maintenance-main/get?id=` + id }) +} + + + +export const getMaintenanceOrderConfig = async () => { + return await request.get({ url: `/eam/equipment-maintenance-main/get-order-config`}) +} + +// 新增设备保养工单主 +export const createEquipmentMaintenanceMain = async (data: EquipmentMaintenanceMainVO) => { + return await request.post({ url: `/eam/equipment-maintenance-main/create`, data }) +} + +// 修改设备保养工单主 +export const updateEquipmentMaintenanceMain = async (data: EquipmentMaintenanceMainVO) => { + return await request.put({ url: `/eam/equipment-maintenance-main/update`, data }) +} + +// 验证设备保养工单主 +export const verifyEquipmentMaintenanceMain = async (data: EquipmentMaintenanceMainVO) => { + return await request.post({ url: `/eam/equipment-maintenance-main/verifyOrder`, data }) +} + +// 删除设备保养工单主 +export const deleteEquipmentMaintenanceMain = async (id: number) => { + return await request.delete({ url: `/eam/equipment-maintenance-main/delete?id=` + id }) +} + +// 导出设备保养工单主 Excel +export const exportEquipmentMaintenanceMain = async (params) => { + return await request.download({ url: `/eam/equipment-maintenance-main/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/equipment-maintenance-main/get-import-template' }) +} + +// 启用 / 禁用 +export const updateEnableCode = async (data: EquipmentMainPartVO) => { + return await request.post({ url: `/eam/equipment-maintenance-main/ables` , data }) +} + +// 修改保养工单状态 +export const updateMaintenanceOrder = async (data: EquipmentMainPartVO) => { + return await request.post({ url: `/eam/equipment-maintenance-main/updateOrder`, data }) +} + +//完成保养工单 +export const executeMaintenanceOrder = async (data: EquipmentMainPartVO) => { + return await request.post({ url: `/eam/equipment-maintenance-main/execute`, data }) +} + +//验证不通过,打回保养工单 +export const backMaintenanceOrder = async (data: EquipmentMainPartVO) => { + return await request.post({ url: `/eam/equipment-maintenance-main/fallback`, data }) +} diff --git a/src/api/eam/equipmentMaintenanceRecordDetail/index.ts b/src/api/eam/equipmentMaintenanceRecordDetail/index.ts new file mode 100644 index 0000000..2ddc101 --- /dev/null +++ b/src/api/eam/equipmentMaintenanceRecordDetail/index.ts @@ -0,0 +1,65 @@ +import request from '@/config/axios' + +export interface EquipmentMaintenanceRecordDetailVO { + id: number + number: string + masterId: number + peoples: number + estimatedMinutes: number + actualMinutes: number + chargePeoples: string + completionTime: Date + uncompletedCause: string + result: string + name: string + content: string + equipmentParts: string + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询保养记录子列表 +export const getEquipmentMaintenanceRecordDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/equipment-maintenance-record-detail/senior', data }) + } else { + return await request.get({ url: `/eam/equipment-maintenance-record-detail/page`, params }) + } +} + +// 查询保养记录子详情 +export const getEquipmentMaintenanceRecordDetail = async (id: number) => { + return await request.get({ url: `/eam/equipment-maintenance-record-detail/get?id=` + id }) +} + +// 新增保养记录子 +export const createEquipmentMaintenanceRecordDetail = async (data: EquipmentMaintenanceRecordDetailVO) => { + return await request.post({ url: `/eam/equipment-maintenance-record-detail/create`, data }) +} + +// 修改保养记录子 +export const updateEquipmentMaintenanceRecordDetail = async (data: EquipmentMaintenanceRecordDetailVO) => { + return await request.put({ url: `/eam/equipment-maintenance-record-detail/update`, data }) +} + +// 删除保养记录子 +export const deleteEquipmentMaintenanceRecordDetail = async (id: number) => { + return await request.delete({ url: `/eam/equipment-maintenance-record-detail/delete?id=` + id }) +} + +// 导出保养记录子 Excel +export const exportEquipmentMaintenanceRecordDetail = async (params) => { + return await request.download({ url: `/eam/equipment-maintenance-record-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/equipment-maintenance-record-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/eam/equipmentMaintenanceRecordMain/index.ts b/src/api/eam/equipmentMaintenanceRecordMain/index.ts new file mode 100644 index 0000000..184805d --- /dev/null +++ b/src/api/eam/equipmentMaintenanceRecordMain/index.ts @@ -0,0 +1,74 @@ +import request from '@/config/axios' + +export interface EquipmentMaintenanceRecordMainVO { + id: number + number: string + describing: string + equipmentCode: string + category: string + classes: string + planNumber: string + faultType: string + cycle: string + times: string + verifyer2: number + verifyContent2: string + verifyTime2: Date + maintenancer: number + maintenancePhone: string + completeResult: string + completionTime2: Date + maintenanceTime: Date + status: string + factoryAreaCode: string + workshopCode: string + workshopSectionCode: string + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询设备保养记录主列表 +export const getEquipmentMaintenanceRecordMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/equipment-maintenance-record-main/senior', data }) + } else { + return await request.get({ url: `/eam/equipment-maintenance-record-main/page`, params }) + } +} + +// 查询设备保养记录主详情 +export const getEquipmentMaintenanceRecordMain = async (id: number) => { + return await request.get({ url: `/eam/equipment-maintenance-record-main/get?id=` + id }) +} + +// 新增设备保养记录主 +export const createEquipmentMaintenanceRecordMain = async (data: EquipmentMaintenanceRecordMainVO) => { + return await request.post({ url: `/eam/equipment-maintenance-record-main/create`, data }) +} + +// 修改设备保养记录主 +export const updateEquipmentMaintenanceRecordMain = async (data: EquipmentMaintenanceRecordMainVO) => { + return await request.put({ url: `/eam/equipment-maintenance-record-main/update`, data }) +} + +// 删除设备保养记录主 +export const deleteEquipmentMaintenanceRecordMain = async (id: number) => { + return await request.delete({ url: `/eam/equipment-maintenance-record-main/delete?id=` + id }) +} + +// 导出设备保养记录主 Excel +export const exportEquipmentMaintenanceRecordMain = async (params) => { + return await request.download({ url: `/eam/equipment-maintenance-record-main/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/equipment-maintenance-record-main/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/eam/equipmentManufacturer/index.ts b/src/api/eam/equipmentManufacturer/index.ts new file mode 100644 index 0000000..1160cc0 --- /dev/null +++ b/src/api/eam/equipmentManufacturer/index.ts @@ -0,0 +1,73 @@ +import request from '@/config/axios' + +export interface EquipmentManufacturerVO { + id: number + number: string + name: string + shortName: string + address: string + country: string + city: string + phone: string + fax: string + postId: string + contacts: string + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询设备制造商列表 +export const getEquipmentManufacturerPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/basic/equipment-manufacturer/senior', data }) + } else { + return await request.get({ url: `/eam/basic/equipment-manufacturer/page`, params }) + } +} + +// 查询设备制造商详情 +export const getEquipmentManufacturer = async (id: number) => { + return await request.get({ url: `/eam/basic/equipment-manufacturer/get?id=` + id }) +} + +// 新增设备制造商 +export const createEquipmentManufacturer = async (data: EquipmentManufacturerVO) => { + return await request.post({ url: `/eam/basic/equipment-manufacturer/create`, data }) +} + +// 修改设备制造商 +export const updateEquipmentManufacturer = async (data: EquipmentManufacturerVO) => { + return await request.put({ url: `/eam/basic/equipment-manufacturer/update`, data }) +} + +// 删除设备制造商 +export const deleteEquipmentManufacturer = async (id: number) => { + return await request.delete({ url: `/eam/basic/equipment-manufacturer/delete?id=` + id }) +} + +// 导出设备制造商 Excel +export const exportEquipmentManufacturer = async (params) => { + if (params.isSearch) { + const data = { ...params } + return await request.downloadPost({ url: `/eam/basic/equipment-manufacturer/export-excel-senior`, data }) + } else { + return await request.download({ url: `/eam/basic/equipment-manufacturer/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/basic/equipment-manufacturer/get-import-template' }) +} + +// 查询设备制造商列表 +export const getEquipmentManufacturerNoPage = async (params) => { + return await request.get({ url: `/eam/basic/equipment-manufacturer/noPage`, params }) +} \ No newline at end of file diff --git a/src/api/eam/equipmentRepairJobDetail/index.ts b/src/api/eam/equipmentRepairJobDetail/index.ts new file mode 100644 index 0000000..efe6bda --- /dev/null +++ b/src/api/eam/equipmentRepairJobDetail/index.ts @@ -0,0 +1,59 @@ +import request from '@/config/axios' + +export interface EquipmentRepairJobDetailVO { + id: number + number: string + masterId: number + describing: string + faultCause: string + workOut: string + maintenances: string + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询维修工单子列表 +export const getEquipmentRepairJobDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/equipment-repair-job-detail/senior', data }) + } else { + return await request.get({ url: `/eam/equipment-repair-job-detail/page`, params }) + } +} + +// 查询维修工单子详情 +export const getEquipmentRepairJobDetail = async (id: number) => { + return await request.get({ url: `/eam/equipment-repair-job-detail/get?id=` + id }) +} + +// 新增维修工单子 +export const createEquipmentRepairJobDetail = async (data: EquipmentRepairJobDetailVO) => { + return await request.post({ url: `/eam/equipment-repair-job-detail/create`, data }) +} + +// 修改维修工单子 +export const updateEquipmentRepairJobDetail = async (data: EquipmentRepairJobDetailVO) => { + return await request.put({ url: `/eam/equipment-repair-job-detail/update`, data }) +} + +// 删除维修工单子 +export const deleteEquipmentRepairJobDetail = async (id: number) => { + return await request.delete({ url: `/eam/equipment-repair-job-detail/delete?id=` + id }) +} + +// 导出维修工单子 Excel +export const exportEquipmentRepairJobDetail = async (params) => { + return await request.download({ url: `/eam/equipment-repair-job-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/equipment-repair-job-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/eam/equipmentRepairJobMain/index.ts b/src/api/eam/equipmentRepairJobMain/index.ts new file mode 100644 index 0000000..0a77ee4 --- /dev/null +++ b/src/api/eam/equipmentRepairJobMain/index.ts @@ -0,0 +1,122 @@ +import request from '@/config/axios' + +export interface EquipmentRepairJobMainVO { + id: number + number: string + type: string + repairNumber: string + sources: string + maintenanceDesc: string + urgency: string + level: string + equipmentCode: string + shutDown: boolean + startTime: Date + endTime: Date + totalMinutes: number + verifyerRepair: number + verifyContentRepair: string + verifyTimeRepair: Date + verifyerReport: number + verifyContentReport: string + verifyTimeReport: Date + maintenancer: number + maintenancePhone: string + completeResult: string + completionTime: Date + maintenanceTime: Date + repairTime: Date + repairer: number + faultType: string + status: string + autoOrder: string + autoPerform: string + autoVerify: string + directCreateRecord: string + classType: string + factoryAreaCode: string + workshopCode: string + lineCode: string + processCode: string + workstationCode: string + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询维修工单主列表 +export const getEquipmentRepairJobMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/equipment-repair-job-main/senior', data }) + } else { + return await request.get({ url: `/eam/equipment-repair-job-main/page`, params }) + } +} + +// 查询维修工单主详情 +export const getEquipmentRepairJobMain = async (id: number) => { + return await request.get({ url: `/eam/equipment-repair-job-main/get?id=` + id }) +} + +// 新增维修工单主 +export const createEquipmentRepairJobMain = async (data: EquipmentRepairJobMainVO) => { + return await request.post({ url: `/eam/equipment-repair-job-main/create`, data }) +} + +// 维修验证更新工单主 +export const wxVerifyEquipmentRepairJobMain = async (data: EquipmentRepairJobMainVO) => { + return await request.post({ url: `/eam/equipment-repair-job-main/wxVerify`, data }) +} + +// 修改维修工单主 +export const updateEquipmentRepairJobMain = async (data: EquipmentRepairJobMainVO) => { + return await request.put({ url: `/eam/equipment-repair-job-main/update`, data }) +} + +// 修改维修工单主 +export const updateEquipmentRepairMain = async (data: EquipmentRepairJobMainVO) => { + return await request.post({ url: `/eam/equipment-repair-job-main/updateRepair`, data }) +} + + +// 完成维修工单主 +export const executeEquipmentRepairJobMain = async (data: EquipmentRepairJobMainVO) => { + return await request.post({ url: `/eam/equipment-repair-job-main/execute`, data }) +} + +// 删除维修工单主 +export const deleteEquipmentRepairJobMain = async (id: number) => { + return await request.delete({ url: `/eam/equipment-repair-job-main/delete?id=` + id }) +} + +// 导出维修工单主 Excel +export const exportEquipmentRepairJobMain = async (params) => { + return await request.download({ url: `/eam/equipment-repair-job-main/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/equipment-repair-job-main/get-import-template' }) +} + +// 修改维修工单状态 +export const updateEquipmentRepairOrder = async (data: EquipmentRepairJobMainVO) => { + return await request.post({ url: `/eam/equipment-repair-job-main/updateOrder`, data }) +} + +//维修验证不通过,打回维修工单 +export const backEquipmentRepairOrder = async (data: EquipmentRepairJobMainVO) => { + return await request.post({ url: `/eam/equipment-repair-job-main/fallback`, data }) +} + +//报修验证 +export const createEquipmentRepairNewOrder = async (data: EquipmentRepairJobMainVO) => { + return await request.post({ url: `/eam/equipment-repair-job-main/createNew`, data }) +} + diff --git a/src/api/eam/equipmentRepairRecordDetail/index.ts b/src/api/eam/equipmentRepairRecordDetail/index.ts new file mode 100644 index 0000000..91b3e73 --- /dev/null +++ b/src/api/eam/equipmentRepairRecordDetail/index.ts @@ -0,0 +1,59 @@ +import request from '@/config/axios' + +export interface EquipmentRepairRecordDetailVO { + id: number + number: string + masterId: number + describing: string + faultCause: string + workOut: string + maintenances: string + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询设备维修记录子列表 +export const getEquipmentRepairRecordDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/equipment-repair-record-detail/senior', data }) + } else { + return await request.get({ url: `/eam/equipment-repair-record-detail/page`, params }) + } +} + +// 查询设备维修记录子详情 +export const getEquipmentRepairRecordDetail = async (id: number) => { + return await request.get({ url: `/eam/equipment-repair-record-detail/get?id=` + id }) +} + +// 新增设备维修记录子 +export const createEquipmentRepairRecordDetail = async (data: EquipmentRepairRecordDetailVO) => { + return await request.post({ url: `/eam/equipment-repair-record-detail/create`, data }) +} + +// 修改设备维修记录子 +export const updateEquipmentRepairRecordDetail = async (data: EquipmentRepairRecordDetailVO) => { + return await request.put({ url: `/eam/equipment-repair-record-detail/update`, data }) +} + +// 删除设备维修记录子 +export const deleteEquipmentRepairRecordDetail = async (id: number) => { + return await request.delete({ url: `/eam/equipment-repair-record-detail/delete?id=` + id }) +} + +// 导出设备维修记录子 Excel +export const exportEquipmentRepairRecordDetail = async (params) => { + return await request.download({ url: `/eam/equipment-repair-record-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/equipment-repair-record-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/eam/equipmentRepairRecordMain/index.ts b/src/api/eam/equipmentRepairRecordMain/index.ts new file mode 100644 index 0000000..d10e21d --- /dev/null +++ b/src/api/eam/equipmentRepairRecordMain/index.ts @@ -0,0 +1,85 @@ +import request from '@/config/axios' + +export interface EquipmentRepairRecordMainVO { + id: number + number: string + type: string + repairNumber: string + sources: string + maintenanceDesc: string + urgency: string + level: string + equipmentCode: string + shutDown: boolean + startTime: Date + endTime: Date + totalMinutes: number + verifyer: number + verifyContent: string + verifyTime: Date + maintenancer: number + maintenancePhone: string + completeResult: string + completionTime: Date + maintenanceTime: Date + repairTime: Date + repairer: number + faultType: string + status: string + autoOrder: string + autoPerform: string + autoVerify: string + directCreateRecord: string + classType: string + factoryAreaCode: string + workshopCode: string + workshopSectionCode: string + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询设备维修记录主列表 +export const getEquipmentRepairRecordMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/equipment-repair-record-main/senior', data }) + } else { + return await request.get({ url: `/eam/equipment-repair-record-main/page`, params }) + } +} + +// 查询设备维修记录主详情 +export const getEquipmentRepairRecordMain = async (id: number) => { + return await request.get({ url: `/eam/equipment-repair-record-main/get?id=` + id }) +} + +// 新增设备维修记录主 +export const createEquipmentRepairRecordMain = async (data: EquipmentRepairRecordMainVO) => { + return await request.post({ url: `/eam/equipment-repair-record-main/create`, data }) +} + +// 修改设备维修记录主 +export const updateEquipmentRepairRecordMain = async (data: EquipmentRepairRecordMainVO) => { + return await request.put({ url: `/eam/equipment-repair-record-main/update`, data }) +} + +// 删除设备维修记录主 +export const deleteEquipmentRepairRecordMain = async (id: number) => { + return await request.delete({ url: `/eam/equipment-repair-record-main/delete?id=` + id }) +} + +// 导出设备维修记录主 Excel +export const exportEquipmentRepairRecordMain = async (params) => { + return await request.download({ url: `/eam/equipment-repair-record-main/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/equipment-repair-record-main/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/eam/equipmentReportRepairRequest/index.ts b/src/api/eam/equipmentReportRepairRequest/index.ts new file mode 100644 index 0000000..c804cc4 --- /dev/null +++ b/src/api/eam/equipmentReportRepairRequest/index.ts @@ -0,0 +1,93 @@ +import request from '@/config/axios' + +export interface EquipmentReportRepairRequestVO { + id: number + number: string + type: string + equipmentCode: string + urgency: string + faultType: string + describing: string + shutDown: boolean + images: string + factoryAreaCode: string + workshopCode: string + workshopSectionCode: string + repairmaner: number + repairPhone: string + status: string + approver: number + approveContent: string + approveTime: Date + autoExamine: string + autoAgree: string + autoVerify: string + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询设报修申请列表 +export const getEquipmentReportRepairRequestPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/equipment-report-repair-request/senior', data }) + } else { + return await request.get({ url: `/eam/equipment-report-repair-request/page`, params }) + } +} + +// 查询设报修申请详情 +export const getEquipmentReportRepairRequest = async (id: number) => { + return await request.get({ url: `/eam/equipment-report-repair-request/get?id=` + id }) +} + +// 新增设报修申请 +export const createEquipmentReportRepairRequest = async (data: EquipmentReportRepairRequestVO) => { + return await request.post({ url: `/eam/equipment-report-repair-request/create`, data }) +} + +// 修改设报修申请 +export const updateEquipmentReportRepairRequest = async (data: EquipmentReportRepairRequestVO) => { + return await request.put({ url: `/eam/equipment-report-repair-request/update`, data }) +} + +// 删除设报修申请 +export const deleteEquipmentReportRepairRequest = async (id: number) => { + return await request.delete({ url: `/eam/equipment-report-repair-request/delete?id=` + id }) +} + +// 导出设报修申请 Excel +export const exportEquipmentReportRepairRequest = async (params) => { + return await request.download({ url: `/eam/equipment-report-repair-request/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/equipment-report-repair-request/get-import-template' }) +} + +// 修改报修工单状态 +export const updateEquipmentReportRepairOrder = async (data: EquipmentReportRepairRequestVO) => { + return await request.post({ url: `/eam/equipment-report-repair-request/updateOrder`, data }) +} + +// 审核报修工单状态 +export const audiEquipmentReportRepairOrder = async (data: EquipmentReportRepairRequestVO) => { + return await request.post({ url: `/eam/equipment-report-repair-request/audiOrder`, data }) +} + +// 完成并创建维修工单 +export const createEquipmentWeixiuOrder = async (data: EquipmentReportRepairRequestVO) => { + return await request.post({ url: `/eam/equipment-report-repair-request/updateCreateOrder`, data }) +} + +// 查询报修工单文件附件 +export const getEquipmentReportFileInfo = async (data) => { + return await request.post({ url: `/eam/equipment-report-repair-request/fileListInfo`, data }) +} diff --git a/src/api/eam/equipmentShutdown/index.ts b/src/api/eam/equipmentShutdown/index.ts new file mode 100644 index 0000000..61ff870 --- /dev/null +++ b/src/api/eam/equipmentShutdown/index.ts @@ -0,0 +1,61 @@ +import request from '@/config/axios' + +export interface EquipmentShutdownVO { + id: number + equipmentCode: string + operationDate: Date + operationer: string + factoryAreaCode: string + workshopCode: string + workshopSectionCode: string + status: string + shutdownCause: string + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询设备停机记录列表 +export const getEquipmentShutdownPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/equipment-shutdown/senior', data }) + } else { + return await request.get({ url: `/eam/equipment-shutdown/page`, params }) + } +} + +// 查询设备停机记录详情 +export const getEquipmentShutdown = async (id: number) => { + return await request.get({ url: `/eam/equipment-shutdown/get?id=` + id }) +} + +// 新增设备停机记录 +export const createEquipmentShutdown = async (data: EquipmentShutdownVO) => { + return await request.post({ url: `/eam/equipment-shutdown/create`, data }) +} + +// 修改设备停机记录 +export const updateEquipmentShutdown = async (data: EquipmentShutdownVO) => { + return await request.put({ url: `/eam/equipment-shutdown/update`, data }) +} + +// 删除设备停机记录 +export const deleteEquipmentShutdown = async (id: number) => { + return await request.delete({ url: `/eam/equipment-shutdown/delete?id=` + id }) +} + +// 导出设备停机记录 Excel +export const exportEquipmentShutdown = async (params) => { + return await request.download({ url: `/eam/equipment-shutdown/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/equipment-shutdown/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/eam/equipmentSigning/index.ts b/src/api/eam/equipmentSigning/index.ts new file mode 100644 index 0000000..b33bcc9 --- /dev/null +++ b/src/api/eam/equipmentSigning/index.ts @@ -0,0 +1,76 @@ +import request from '@/config/axios' + +export interface EquipmentSigningVO { + id: number + equipmentCode: string + operationDate: Date + operationer: string + operationDept: string + telephone: string + supplierCode: string + supplierPeople: string + supplierTelephone: string + status: string + approver: number + approveContent: string + approveTime: Date + autoExamine: string + autoAgree: string + directCreateRecord: string + storageLocation: string + factoryAreaCode: string + workshopCode: string + workshopSectionCode: string + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询设备到货签收记录列表 +export const getEquipmentSigningPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/equipment-signing/senior', data }) + } else { + return await request.get({ url: `/eam/equipment-signing/page`, params }) + } +} + +// 查询设备到货签收记录详情 +export const getEquipmentSigning = async (id: number) => { + return await request.get({ url: `/eam/equipment-signing/get?id=` + id }) +} + +// 新增设备到货签收记录 +export const createEquipmentSigning = async (data: EquipmentSigningVO) => { + return await request.post({ url: `/eam/equipment-signing/create`, data }) +} +export const createsEquipmentSigning = async (data: EquipmentSigningVO) => { + return await request.post({ url: `/eam/equipment-signing/creates`, data }) +} + + +// 修改设备到货签收记录 +export const updateEquipmentSigning = async (data: EquipmentSigningVO) => { + return await request.put({ url: `/eam/equipment-signing/update`, data }) +} + +// 删除设备到货签收记录 +export const deleteEquipmentSigning = async (id: number) => { + return await request.delete({ url: `/eam/equipment-signing/delete?id=` + id }) +} + +// 导出设备到货签收记录 Excel +export const exportEquipmentSigning = async (params) => { + return await request.download({ url: `/eam/equipment-signing/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/equipment-signing/get-import-template' }) +} diff --git a/src/api/eam/equipmentSpotCheckDetail/index.ts b/src/api/eam/equipmentSpotCheckDetail/index.ts new file mode 100644 index 0000000..be5b180 --- /dev/null +++ b/src/api/eam/equipmentSpotCheckDetail/index.ts @@ -0,0 +1,62 @@ +import request from '@/config/axios' + +export interface EquipmentSpotCheckDetailVO { + id: number + number: string + masterId: number + completionTime: Date + uncompletedCause: string + result: string + name: string + content: string + equipmentParts: string + methods: string + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询点检工单子列表 +export const getEquipmentSpotCheckDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/equipment-spot-check-detail/senior', data }) + } else { + return await request.get({ url: `/eam/equipment-spot-check-detail/page`, params }) + } +} + +// 查询点检工单子详情 +export const getEquipmentSpotCheckDetail = async (id: number) => { + return await request.get({ url: `/eam/equipment-spot-check-detail/get?id=` + id }) +} + +// 新增点检工单子 +export const createEquipmentSpotCheckDetail = async (data: EquipmentSpotCheckDetailVO) => { + return await request.post({ url: `/eam/equipment-spot-check-detail/create`, data }) +} + +// 修改点检工单子 +export const updateEquipmentSpotCheckDetail = async (data: EquipmentSpotCheckDetailVO) => { + return await request.put({ url: `/eam/equipment-spot-check-detail/update`, data }) +} + +// 删除点检工单子 +export const deleteEquipmentSpotCheckDetail = async (id: number) => { + return await request.delete({ url: `/eam/equipment-spot-check-detail/delete?id=` + id }) +} + +// 导出点检工单子 Excel +export const exportEquipmentSpotCheckDetail = async (params) => { + return await request.download({ url: `/eam/equipment-spot-check-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/equipment-spot-check-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/eam/equipmentSpotCheckMain/index.ts b/src/api/eam/equipmentSpotCheckMain/index.ts new file mode 100644 index 0000000..bd0c0d5 --- /dev/null +++ b/src/api/eam/equipmentSpotCheckMain/index.ts @@ -0,0 +1,103 @@ +import request from '@/config/axios' +import {EquipmentInspectionMainVO} from "@/api/eam/equipmentInspectionMain"; + +export interface EquipmentSpotCheckMainVO { + id: number + number: string + describing: string + equipmentCode: string + type: string + planNumber: string + planStartTime: Date + planEndTime: Date + startTime: Date + endTime: Date + faultType: string + verifyer: number + verifyContent: string + verifyTime: Date + maintenancer: number + completionTime: Date + maintenanceTime: Date + isPictures: boolean + status: string + autoOrder: string + autoPerform: string + autoVerify: string + directCreateRecord: string + classType: string + factoryAreaCode: string + workshopCode: string + lineCode: string + processCode: string + workstationCode: string + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询点检工单主列表 +export const getEquipmentSpotCheckMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/equipment-spot-check-main/senior', data }) + } else { + return await request.get({ url: `/eam/equipment-spot-check-main/page`, params }) + } +} + +// 查询点检工单主详情 +export const getEquipmentSpotCheckMain = async (id: number) => { + return await request.get({ url: `/eam/equipment-spot-check-main/get?id=` + id }) +} + +// 新增点检工单主 +export const createEquipmentSpotCheckMain = async (data: EquipmentSpotCheckMainVO) => { + return await request.post({ url: `/eam/equipment-spot-check-main/create`, data }) +} + +// 修改点检工单主 +export const updateEquipmentSpotCheckMain = async (data: EquipmentSpotCheckMainVO) => { + return await request.put({ url: `/eam/equipment-spot-check-main/update`, data }) +} + +// 验证点检工单主 +export const verifyEquipmentSpotCheckMain = async (data: EquipmentSpotCheckMainVO) => { + return await request.post({ url: `/eam/equipment-spot-check-main/verifyOrder`, data }) +} + +// 删除点检工单主 +export const deleteEquipmentSpotCheckMain = async (id: number) => { + return await request.delete({ url: `/eam/equipment-spot-check-main/delete?id=` + id }) +} + +// 导出点检工单主 Excel +export const exportEquipmentSpotCheckMain = async (params) => { + return await request.download({ url: `/eam/equipment-spot-check-main/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/equipment-spot-check-main/get-import-template' }) +} + + +// 修改点检工单状态 +export const updateEquipmentSpotCheckOrder = async (data: EquipmentSpotCheckMainVO) => { + return await request.post({ url: `/eam/equipment-spot-check-main/updateOrder`, data }) +} + +//完成点检工单 +export const executeEquipmentSpotCheckOrder = async (data: EquipmentSpotCheckMainVO) => { + return await request.post({ url: `/eam/equipment-spot-check-main/execute`, data }) +} + +//验证不通过,打回点检工单 +export const backEquipmentSpotCheckOrder = async (data: EquipmentSpotCheckMainVO) => { + return await request.post({ url: `/eam/equipment-spot-check-main/fallback`, data }) +} diff --git a/src/api/eam/equipmentSpotCheckRecordDetail/index.ts b/src/api/eam/equipmentSpotCheckRecordDetail/index.ts new file mode 100644 index 0000000..952ae13 --- /dev/null +++ b/src/api/eam/equipmentSpotCheckRecordDetail/index.ts @@ -0,0 +1,62 @@ +import request from '@/config/axios' + +export interface EquipmentSpotCheckRecordDetailVO { + id: number + number: string + masterId: number + completionTime: Date + uncompletedCause: string + result: string + name: string + content: string + equipmentParts: string + methods: string + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询点检记录子列表 +export const getEquipmentSpotCheckRecordDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/equipment-spot-check-record-detail/senior', data }) + } else { + return await request.get({ url: `/eam/equipment-spot-check-record-detail/page`, params }) + } +} + +// 查询点检记录子详情 +export const getEquipmentSpotCheckRecordDetail = async (id: number) => { + return await request.get({ url: `/eam/equipment-spot-check-record-detail/get?id=` + id }) +} + +// 新增点检记录子 +export const createEquipmentSpotCheckRecordDetail = async (data: EquipmentSpotCheckRecordDetailVO) => { + return await request.post({ url: `/eam/equipment-spot-check-record-detail/create`, data }) +} + +// 修改点检记录子 +export const updateEquipmentSpotCheckRecordDetail = async (data: EquipmentSpotCheckRecordDetailVO) => { + return await request.put({ url: `/eam/equipment-spot-check-record-detail/update`, data }) +} + +// 删除点检记录子 +export const deleteEquipmentSpotCheckRecordDetail = async (id: number) => { + return await request.delete({ url: `/eam/equipment-spot-check-record-detail/delete?id=` + id }) +} + +// 导出点检记录子 Excel +export const exportEquipmentSpotCheckRecordDetail = async (params) => { + return await request.download({ url: `/eam/equipment-spot-check-record-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/equipment-spot-check-record-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/eam/equipmentSpotCheckRecordMain/index.ts b/src/api/eam/equipmentSpotCheckRecordMain/index.ts new file mode 100644 index 0000000..ca4d8f4 --- /dev/null +++ b/src/api/eam/equipmentSpotCheckRecordMain/index.ts @@ -0,0 +1,79 @@ +import request from '@/config/axios' + +export interface EquipmentSpotCheckRecordMainVO { + id: number + number: string + describing: string + equipmentCode: string + type: string + planNumber: string + planStartTime: Date + planEndTime: Date + startTime: Date + endTime: Date + faultType: string + verifyer: number + verifyContent: string + verifyTime: Date + maintenancer: number + completionTime: Date + maintenanceTime: Date + isPictures: boolean + status: string + autoOrder: string + autoPerform: string + autoVerify: string + directCreateRecord: string + classType: string + factoryAreaCode: string + workshopCode: string + workshopSectionCode: string + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询点检记录主列表 +export const getEquipmentSpotCheckRecordMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/equipment-spot-check-record-main/senior', data }) + } else { + return await request.get({ url: `/eam/equipment-spot-check-record-main/page`, params }) + } +} + +// 查询点检记录主详情 +export const getEquipmentSpotCheckRecordMain = async (id: number) => { + return await request.get({ url: `/eam/equipment-spot-check-record-main/get?id=` + id }) +} + +// 新增点检记录主 +export const createEquipmentSpotCheckRecordMain = async (data: EquipmentSpotCheckRecordMainVO) => { + return await request.post({ url: `/eam/equipment-spot-check-record-main/create`, data }) +} + +// 修改点检记录主 +export const updateEquipmentSpotCheckRecordMain = async (data: EquipmentSpotCheckRecordMainVO) => { + return await request.put({ url: `/eam/equipment-spot-check-record-main/update`, data }) +} + +// 删除点检记录主 +export const deleteEquipmentSpotCheckRecordMain = async (id: number) => { + return await request.delete({ url: `/eam/equipment-spot-check-record-main/delete?id=` + id }) +} + +// 导出点检记录主 Excel +export const exportEquipmentSpotCheckRecordMain = async (params) => { + return await request.download({ url: `/eam/equipment-spot-check-record-main/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/equipment-spot-check-record-main/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/eam/equipmentSupplier/index.ts b/src/api/eam/equipmentSupplier/index.ts new file mode 100644 index 0000000..62e5510 --- /dev/null +++ b/src/api/eam/equipmentSupplier/index.ts @@ -0,0 +1,73 @@ +import request from '@/config/axios' + +export interface EquipmentSupplierVO { + id: number + number: string + name: string + shortName: string + address: string + country: string + city: string + phone: string + fax: string + postId: string + contacts: string + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询供应商列表 +export const getEquipmentSupplierPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/basic/equipment-supplier/senior', data }) + } else { + return await request.get({ url: `/eam/basic/equipment-supplier/page`, params }) + } +} + +// 查询供应商详情 +export const getEquipmentSupplier = async (id: number) => { + return await request.get({ url: `/eam/basic/equipment-supplier/get?id=` + id }) +} + +// 新增供应商 +export const createEquipmentSupplier = async (data: EquipmentSupplierVO) => { + return await request.post({ url: `/eam/basic/equipment-supplier/create`, data }) +} + +// 修改供应商 +export const updateEquipmentSupplier = async (data: EquipmentSupplierVO) => { + return await request.put({ url: `/eam/basic/equipment-supplier/update`, data }) +} + +// 删除供应商 +export const deleteEquipmentSupplier = async (id: number) => { + return await request.delete({ url: `/eam/basic/equipment-supplier/delete?id=` + id }) +} + +// 导出供应商 Excel +export const exportEquipmentSupplier = async (params) => { + if (params.isSearch) { + const data = { ...params } + return await request.downloadPost({ url: `/eam/basic/equipment-supplier/export-excel-senior`, data }) + } else { + return await request.download({ url: `/eam/basic/equipment-supplier/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/basic/equipment-supplier/get-import-template' }) +} + +//供应商列表不分页 +export const getEquipmentSupplierNoPage = async (params) => { + return await request.get({ url: `/eam/basic/equipment-supplier/noPage`, params }) +} \ No newline at end of file diff --git a/src/api/eam/equipmentToolSparePart/index.ts b/src/api/eam/equipmentToolSparePart/index.ts new file mode 100644 index 0000000..a1ae420 --- /dev/null +++ b/src/api/eam/equipmentToolSparePart/index.ts @@ -0,0 +1,68 @@ +import request from '@/config/axios' + +export interface EquipmentToolSparePartVO { + id: number + sparePartCode: string + equipmentToolCode: string + type: string + usePosition: string + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询设备或工装与备件关联列表 +export const getEquipmentToolSparePartPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/relation/equipment-tool-spare-part/senior', data }) + } else { + return await request.get({ url: `/eam/relation/equipment-tool-spare-part/page`, params }) + } +} + +// 查询设备或工装与备件关联详情 +export const getEquipmentToolSparePart = async (id: number) => { + return await request.get({ url: `/eam/relation/equipment-tool-spare-part/get?id=` + id }) +} + +// 新增设备或工装与备件关联 +export const createEquipmentToolSparePart = async (data: EquipmentToolSparePartVO) => { + return await request.post({ url: `/eam/relation/equipment-tool-spare-part/create`, data }) +} + +// 修改设备或工装与备件关联 +export const updateEquipmentToolSparePart = async (data: EquipmentToolSparePartVO) => { + return await request.put({ url: `/eam/relation/equipment-tool-spare-part/update`, data }) +} + +// 删除设备或工装与备件关联 +export const deleteEquipmentToolSparePart = async (id: number) => { + return await request.delete({ url: `/eam/relation/equipment-tool-spare-part/delete?id=` + id }) +} + +// 导出设备或工装与备件关联 Excel +export const exportEquipmentToolSparePart = async (params) => { + return await request.download({ url: `/eam/relation/equipment-tool-spare-part/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/relation/equipment-tool-spare-part/get-import-template' }) +} + +// 新增设备或工装与备件关联 +export const createEquipmentToolSparePartBatch = async (data: Array) => { + return await request.post({ url: `/eam/relation/equipment-tool-spare-part/createBatch`, data }) +} + +// 查询设备或工装与备件关联列表 +export const getEquipmentToolSparePartNoPage = async (params) => { + return await request.get({ url: `/eam/relation/equipment-tool-spare-part/noPage`, params }) +} + diff --git a/src/api/eam/equipmentTransferRecord/index.ts b/src/api/eam/equipmentTransferRecord/index.ts new file mode 100644 index 0000000..493a0a7 --- /dev/null +++ b/src/api/eam/equipmentTransferRecord/index.ts @@ -0,0 +1,65 @@ +import request from '@/config/axios' + +export interface EquipmentTransferRecordVO { + id: number + equipmentCode: string + type: string + operationDate: Date + operationer: string + beforeFactoryAreaCode: string + beforeLocation: string + beforeWorkshopCode: string + beforeWorkshopSectionCode: string + nowLocation: string + factoryAreaCode: string + workshopCode: string + workshopSectionCode: string + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询设备移动记录列表 +export const getEquipmentTransferRecordPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/equipment-transfer-record/senior', data }) + } else { + return await request.get({ url: `/eam/equipment-transfer-record/page`, params }) + } +} + +// 查询设备移动记录详情 +export const getEquipmentTransferRecord = async (id: number) => { + return await request.get({ url: `/eam/equipment-transfer-record/get?id=` + id }) +} + +// 新增设备移动记录 +export const createEquipmentTransferRecord = async (data: EquipmentTransferRecordVO) => { + return await request.post({ url: `/eam/equipment-transfer-record/create`, data }) +} + +// 修改设备移动记录 +export const updateEquipmentTransferRecord = async (data: EquipmentTransferRecordVO) => { + return await request.put({ url: `/eam/equipment-transfer-record/update`, data }) +} + +// 删除设备移动记录 +export const deleteEquipmentTransferRecord = async (id: number) => { + return await request.delete({ url: `/eam/equipment-transfer-record/delete?id=` + id }) +} + +// 导出设备移动记录 Excel +export const exportEquipmentTransferRecord = async (params) => { + return await request.download({ url: `/eam/equipment-transfer-record/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/equipment-transfer-record/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/eam/inspectionItem/index.ts b/src/api/eam/inspectionItem/index.ts new file mode 100644 index 0000000..98f14dc --- /dev/null +++ b/src/api/eam/inspectionItem/index.ts @@ -0,0 +1,68 @@ +import request from '@/config/axios' + +export interface InspectionItemVO { + id: number + content: string + equipmentParts: string + serialNumber: number + category: string + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询巡检项列表 +export const getInspectionItemPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/basic/inspection-item/senior', data }) + } else { + return await request.get({ url: `/eam/basic/inspection-item/page`, params }) + } +} + +// 查询巡检项详情 +export const getInspectionItem = async (id: number) => { + return await request.get({ url: `/eam/basic/inspection-item/get?id=` + id }) +} + +// 新增巡检项 +export const createInspectionItem = async (data: InspectionItemVO) => { + return await request.post({ url: `/eam/basic/inspection-item/create`, data }) +} + +// 修改巡检项 +export const updateInspectionItem = async (data: InspectionItemVO) => { + return await request.put({ url: `/eam/basic/inspection-item/update`, data }) +} + +// 删除巡检项 +export const deleteInspectionItem = async (id: number) => { + return await request.delete({ url: `/eam/basic/inspection-item/delete?id=` + id }) +} + +// 导出巡检项 Excel +export const exportInspectionItem = async (params) => { + if (params.isSearch) { + const data = { ...params } + return await request.downloadPost({ url: `/eam/basic/inspection-item/export-excel-senior`, data }) + } else { + return await request.download({ url: `/eam/basic/inspection-item/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/basic/inspection-item/get-import-template' }) +} + + +// 启用 / 禁用 +export const updateEnableCode = async (data: InspectionItemVO) => { + return await request.post({ url: `/eam/basic/inspection-item/ables` , data }) +} diff --git a/src/api/eam/inspectionItemSelectSet/index.ts b/src/api/eam/inspectionItemSelectSet/index.ts new file mode 100644 index 0000000..f02a166 --- /dev/null +++ b/src/api/eam/inspectionItemSelectSet/index.ts @@ -0,0 +1,70 @@ +import request from '@/config/axios' + +export interface InspectionItemSelectSetVO { + id: number + name: string + itemCode: string + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询巡检项选择集列表 +export const getInspectionItemSelectSetPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/basic/inspection-item-select-set/senior', data }) + } else { + return await request.get({ url: `/eam/basic/inspection-item-select-set/page`, params }) + } +} + +// 查询巡检项选择集详情 +export const getInspectionItemSelectSet = async (id: number) => { + return await request.get({ url: `/eam/basic/inspection-item-select-set/get?id=` + id }) +} + +// 新增巡检项选择集 +export const createInspectionItemSelectSet = async (data: InspectionItemSelectSetVO) => { + return await request.post({ url: `/eam/basic/inspection-item-select-set/create`, data }) +} + +// 修改巡检项选择集 +export const updateInspectionItemSelectSet = async (data: InspectionItemSelectSetVO) => { + return await request.put({ url: `/eam/basic/inspection-item-select-set/update`, data }) +} + +// 删除巡检项选择集 +export const deleteInspectionItemSelectSet = async (id: number) => { + return await request.delete({ url: `/eam/basic/inspection-item-select-set/delete?id=` + id }) +} + +// 导出巡检项选择集 Excel +export const exportInspectionItemSelectSet = async (params) => { + return await request.download({ url: `/eam/basic/inspection-item-select-set/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/basic/inspection-item-select-set/get-import-template' }) +} + +// 启用 / 禁用 +export const updateEnableCode = async (data: InspectionItemSelectSetVO) => { + return await request.post({ url: `/eam/basic/inspection-item-select-set/ables` , data }) +} + +// 查询巡检项选择集列表 +export const getInspectionItemSelectSetList = async (params) => { + return await request.get({ url: `/eam/basic/inspection-item/getList`, params }) +} + +// 查询巡检方案项列表 +export const getRalInspectionOptionItemList = async (params) => { + return await request.get({url: `/eam/relation-inspection-option-item/getList?optionCode=` + params}) +} diff --git a/src/api/eam/item/index.ts b/src/api/eam/item/index.ts new file mode 100644 index 0000000..35d3e10 --- /dev/null +++ b/src/api/eam/item/index.ts @@ -0,0 +1,80 @@ +import request from '@/config/axios' + +export interface ItemVO { + number : string + name : string + brand : string + specifications : string + isConstant : string + subject : string + classification : string + uom : string + singlePrice : number + reprocurement : number + safetyStock : number + cost : string + purchaser : string + financer : string + isFramework : string + isRadeIn : string + siteId : string + available : string + concurrencyStamp : number +} + +// 查询备件列表 +export const getItemPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = { ...params } + return await request.post({ url: '/eam/item/senior', data }) + } else { + return await request.get({ url: `/eam/item/page`, params }) + } +} + +// 生成标签 +export const genDevice = async (data) => { + return await request.post({ url: `/eam/item/genDevice`, data }) +} + +// 查询备件详情 +export const getItem = async (id : number) => { + return await request.get({ url: `/eam/item/get?id=` + id }) +} + +// 新增备件 +export const createItem = async (data : ItemVO) => { + return await request.post({ url: `/eam/item/create`, data }) +} + +// 修改备件 +export const updateItem = async (data : ItemVO) => { + return await request.put({ url: `/eam/item/update`, data }) +} + +// 删除备件 +export const deleteItem = async (id : number) => { + return await request.delete({ url: `/eam/item/delete?id=` + id }) +} + +// 导出备件 Excel +export const exportItem = async (params) => { + return await request.download({ url: `/eam/item/export-excel`, params }) +} + +// 修改备件 +export const getItemList = async (params) => { + return await request.get({ url: `/eam/item/getListByNumber`, params }) +} + +// // 删除备件 +// export const getaaa = async () => { +// return await request.get({ url: `/eam/producePlan/produce`}) +// } + +// 备件不分页 + +export const getItemNoPage = async (params) => { + return await request.get({ url: `/eam/item/noPage`, params }) +} diff --git a/src/api/eam/itemAccounts/index.ts b/src/api/eam/itemAccounts/index.ts new file mode 100644 index 0000000..88fb3d1 --- /dev/null +++ b/src/api/eam/itemAccounts/index.ts @@ -0,0 +1,63 @@ +import request from '@/config/axios' + +export interface ItemAccountsVO { + itemNumber: string + qty: number + areaNumber: string + isInAccount: string + siteId: string + available: string + concurrencyStamp: number +} + +// 查询备件台账列表 +export const getItemAccountsPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/item-accounts/senior', data }) + } else { + return await request.get({ url: `/eam/item-accounts/page`, params }) + } +} + +// 查询备件台账详情 +export const getItemAccounts = async (id: number) => { + return await request.get({ url: `/eam/item-accounts/get?id=` + id }) +} + +// 新增备件台账 +export const createItemAccounts = async (data: ItemAccountsVO) => { + return await request.post({ url: `/eam/item-accounts/create`, data }) +} + +// 修改备件台账 +export const updateItemAccounts = async (data: ItemAccountsVO) => { + return await request.put({ url: `/eam/item-accounts/update`, data }) +} + +// 删除备件台账 +export const deleteItemAccounts = async (id: number) => { + return await request.delete({ url: `/eam/item-accounts/delete?id=` + id }) +} + +// 导出备件台账 Excel +export const exportItemAccounts = async (params) => { + return await request.download({ url: `/eam/item-accounts/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/item-accounts/get-import-template' }) +} + +// 更改备件库位 +export const replaceLocation = async (data: Array) => { + return await request.post({url: `/eam/item-accounts/replaceLocation `, data }); +}; + +// 备件不分页 + +export const getItemAccountsNoPage = async (params) => { + return await request.get({ url: `/eam/item-accounts/noPage`, params }) +} diff --git a/src/api/eam/itemApplyDetail/index.ts b/src/api/eam/itemApplyDetail/index.ts new file mode 100644 index 0000000..0941c11 --- /dev/null +++ b/src/api/eam/itemApplyDetail/index.ts @@ -0,0 +1,57 @@ +import request from '@/config/axios' + +export interface ItemApplyDetailVO { + number: string + name: string + type: string + applyId: number + applyDeptId: number + approveId: number + approveTime: Date + outId: number + outTime: Date + siteId: string + available: string + concurrencyStamp: number +} + +// 查询备件申领记录主列表 +export const getItemApplyDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/item-apply-request-detail/senior', data }) + } else { + return await request.get({ url: `/eam/item-apply-request-detail/page`, params }) + } +} + +// 查询备件申领记录主详情 +export const getItemApplyDetail = async (id: number) => { + return await request.get({ url: `/eam/item-apply-request-detail/get?id=` + id }) +} + +// 新增备件申领记录主 +export const createItemApplyDetail = async (data: ItemApplyDetailVO) => { + return await request.post({ url: `/eam/item-apply-request-detail/create`, data }) +} + +// 修改备件申领记录主 +export const updateItemApplyDetail = async (data: ItemApplyDetailVO) => { + return await request.put({ url: `/eam/item-apply-request-detail/update`, data }) +} + +// 删除备件申领记录主 +export const deleteItemApplyDetail = async (id: number) => { + return await request.delete({ url: `/eam/item-apply-request-detail/delete?id=` + id }) +} + +// 导出备件申领记录主 Excel +export const exportItemApplyDetail = async (params) => { + return await request.download({ url: `/eam/item-apply-request-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/item-apply-request-detail/get-import-template' }) +} diff --git a/src/api/eam/itemApplyMain/index.ts b/src/api/eam/itemApplyMain/index.ts new file mode 100644 index 0000000..eeccb6e --- /dev/null +++ b/src/api/eam/itemApplyMain/index.ts @@ -0,0 +1,63 @@ +import request from '@/config/axios' + +export interface ItemApplyMainVO { + number: string + name: string + type: string + applyId: number + applyDeptId: number + approveId: number + approveTime: Date + outId: number + outTime: Date + siteId: string + available: string + concurrencyStamp: number +} + +// 查询备件申领记录主列表 +export const getItemApplyMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/item-apply-request-main/senior', data }) + } else { + return await request.get({ url: `/eam/item-apply-request-main/page`, params }) + } +} + +// 查询备件申领记录主详情 +export const getItemApplyMain = async (id: number) => { + return await request.get({ url: `/eam/item-apply-request-main/get?id=` + id }) +} + +// 新增备件申领记录主 +export const createItemApplyMain = async (data: ItemApplyMainVO) => { + return await request.post({ url: `/eam/item-apply-request-main/create`, data }) +} + +// 修改备件申领记录主 +export const updateItemApplyMain = async (data: ItemApplyMainVO) => { + return await request.put({ url: `/eam/item-apply-request-main/update`, data }) +} + +// 删除备件申领记录主 +export const deleteItemApplyMain = async (id: number) => { + return await request.delete({ url: `/eam/item-apply-request-main/delete?id=` + id }) +} + +// 撤销备件申领记录主 +export const backoutItemApplyMain = async (id: number) => { + return await request.get({ url: `/eam/item-apply-request-main/backout?id=` + id }) +} + + +// 导出备件申领记录主 Excel +export const exportItemApplyMain = async (params) => { + return await request.download({ url: `/eam/item-apply-request-main/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/item-apply-request-main/get-import-template' }) +} diff --git a/src/api/eam/itemDelete/index.ts b/src/api/eam/itemDelete/index.ts new file mode 100644 index 0000000..417f114 --- /dev/null +++ b/src/api/eam/itemDelete/index.ts @@ -0,0 +1,65 @@ +import request from '@/config/axios' + +export interface ItemAccountsVO { + itemNumber: string + qty: number + areaNumber: string + isInAccount: string + siteId: string + available: string + concurrencyStamp: number +} + +// 查询备件台账移除列表 +export const getItemAccountsPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = { ...params } + data.qty = 0 + return await request.post({ url: '/eam/item-accounts/senior', data }) + } else { + params.qty = 0 + return await request.get({ url: `/eam/item-accounts/page`, params }) + } +} + +// 查询备件台账详情 +export const getItemAccounts = async (id: number) => { + return await request.get({ url: `/eam/item-accounts/get?id=` + id }) +} + +// 新增备件台账 +export const createItemAccounts = async (data: ItemAccountsVO) => { + return await request.post({ url: `/eam/item-accounts/create`, data }) +} + +// 修改备件台账 +export const updateItemAccounts = async (data: ItemAccountsVO) => { + return await request.put({ url: `/eam/item-accounts/update`, data }) +} + +// 删除备件台账 +export const deleteItemAccounts = async (id: number) => { + return await request.delete({ url: `/eam/item-accounts/delete?id=` + id }) +} + +// 导出备件台账 Excel +export const exportItemAccounts = async (params) => { + return await request.download({ url: `/eam/item-accounts/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/item-accounts/get-import-template' }) +} + +// 更改备件库位 +export const replaceLocation = async (data: Array) => { + return await request.post({ url: `/eam/item-accounts/replaceLocation `, data }) +} + +// 备件不分页 + +export const getItemAccountsNoPage = async (params) => { + return await request.get({ url: `/eam/item-accounts/noPage`, params }) +} diff --git a/src/api/eam/itemInLocation/index.ts b/src/api/eam/itemInLocation/index.ts new file mode 100644 index 0000000..9589db3 --- /dev/null +++ b/src/api/eam/itemInLocation/index.ts @@ -0,0 +1,50 @@ +import request from '@/config/axios' + +export interface ItemInLocationVO { + number: string + itemNumber: string + locationNumber: string + type: string + qty: number +} + +// 查询备件入库记录列表 +export const getItemInLocationPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/item-in-location/senior', data }) + } else { + return await request.get({ url: `/eam/item-in-location/page`, params }) + } +} + +// 查询备件入库记录详情 +export const getItemInLocation = async (id: number) => { + return await request.get({ url: `/eam/item-in-location/get?id=` + id }) +} + +// 新增备件入库记录 +export const createItemInLocation = async (data: ItemInLocationVO) => { + return await request.post({ url: `/eam/item-in-location/create`, data }) +} + +// 修改备件入库记录 +export const updateItemInLocation = async (data: ItemInLocationVO) => { + return await request.put({ url: `/eam/item-in-location/update`, data }) +} + +// 删除备件入库记录 +export const deleteItemInLocation = async (id: number) => { + return await request.delete({ url: `/eam/item-in-location/delete?id=` + id }) +} + +// 导出备件入库记录 Excel +export const exportItemInLocation = async (params) => { + return await request.download({ url: `/eam/item-in-location/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/item-in-location/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/eam/itemLocationReplace/index.ts b/src/api/eam/itemLocationReplace/index.ts new file mode 100644 index 0000000..7bdab64 --- /dev/null +++ b/src/api/eam/itemLocationReplace/index.ts @@ -0,0 +1,49 @@ +import request from '@/config/axios' + +export interface ItemLocationReplaceVO { + locationNumber: string + describe: string + oldItemNumber: string + itemNumber: string +} + +// 查询备件库位变更记录列表 +export const getItemLocationReplacePage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/item-location-replace/senior', data }) + } else { + return await request.get({ url: `/eam/item-location-replace/page`, params }) + } +} + +// 查询备件库位变更记录详情 +export const getItemLocationReplace = async (id: number) => { + return await request.get({ url: `/eam/item-location-replace/get?id=` + id }) +} + +// 新增备件库位变更记录 +export const createItemLocationReplace = async (data: ItemLocationReplaceVO) => { + return await request.post({ url: `/eam/item-location-replace/create`, data }) +} + +// 修改备件库位变更记录 +export const updateItemLocationReplace = async (data: ItemLocationReplaceVO) => { + return await request.put({ url: `/eam/item-location-replace/update`, data }) +} + +// 删除备件库位变更记录 +export const deleteItemLocationReplace = async (id: number) => { + return await request.delete({ url: `/eam/item-location-replace/delete?id=` + id }) +} + +// 导出备件库位变更记录 Excel +export const exportItemLocationReplace = async (params) => { + return await request.download({ url: `/eam/item-location-replace/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/item-location-replace/get-import-template' }) +} diff --git a/src/api/eam/itemMaintenance/index.ts b/src/api/eam/itemMaintenance/index.ts new file mode 100644 index 0000000..d6fe941 --- /dev/null +++ b/src/api/eam/itemMaintenance/index.ts @@ -0,0 +1,52 @@ +import request from '@/config/axios' + +export interface ItemMaintenanceVO { + number: string + itemNumber: string + qty: number + result: string + siteId: string + available: string + concurrencyStamp: number +} + +// 查询备件维修记录列表 +export const getItemMaintenancePage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/item-maintenance-record/senior', data }) + } else { + return await request.get({ url: `/eam/item-maintenance-record/page`, params }) + } +} + +// 查询备件维修记录详情 +export const getItemMaintenance = async (id: number) => { + return await request.get({ url: `/eam/item-maintenance-record/get?id=` + id }) +} + +// 新增备件维修记录 +export const createItemMaintenance = async (data: ItemMaintenanceVO) => { + return await request.post({ url: `/eam/item-maintenance-record/create`, data }) +} + +// 修改备件维修记录 +export const updateItemMaintenance = async (data: ItemMaintenanceVO) => { + return await request.put({ url: `/eam/item-maintenance-record/update`, data }) +} + +// 删除备件维修记录 +export const deleteItemMaintenance = async (id: number) => { + return await request.delete({ url: `/eam/item-maintenance-record/delete?id=` + id }) +} + +// 导出备件维修记录 Excel +export const exportItemMaintenance = async (params) => { + return await request.download({ url: `/eam/item-maintenance-record/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/item-maintenance-record/get-import-template' }) +} diff --git a/src/api/eam/itemOrderDetail/index.ts b/src/api/eam/itemOrderDetail/index.ts new file mode 100644 index 0000000..339c348 --- /dev/null +++ b/src/api/eam/itemOrderDetail/index.ts @@ -0,0 +1,65 @@ +import request from '@/config/axios' + +export interface ItemOrderDetailVO { + number: string + date: string + phone: string + fax: string + purchaser: string + supplierNumber: string + supplierName: string + supplierAddress: string + shipTo: string + invoiceTo: string + contacts: string + contactsPhone: string + paymentType: string + registLocation: string + bank: string + account: string + dutyParagraph: string + siteId: string + available: string + concurrencyStamp: number +} + +// 查询备件采购订单主列表 +export const getItemOrderDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/item-order-detail/senior', data }) + } else { + return await request.get({ url: `/eam/item-order-detail/page`, params }) + } +} + +// 查询备件采购订单主详情 +export const getItemOrderDetail = async (id: number) => { + return await request.get({ url: `/eam/item-order-detail/get?id=` + id }) +} + +// 新增备件采购订单主 +export const createItemOrderDetail = async (data: ItemOrderDetailVO) => { + return await request.post({ url: `/eam/item-order-detail/create`, data }) +} + +// 修改备件采购订单主 +export const updateItemOrderDetail = async (data: ItemOrderDetailVO) => { + return await request.put({ url: `/eam/item-order-detail/update`, data }) +} + +// 删除备件采购订单主 +export const deleteItemOrderDetail = async (id: number) => { + return await request.delete({ url: `/eam/item-order-detail/delete?id=` + id }) +} + +// 导出备件采购订单主 Excel +export const exportItemOrderDetail = async (params) => { + return await request.download({ url: `/eam/item-order-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/item-order-detail/get-import-template' }) +} diff --git a/src/api/eam/itemOrderMain/index.ts b/src/api/eam/itemOrderMain/index.ts new file mode 100644 index 0000000..125851b --- /dev/null +++ b/src/api/eam/itemOrderMain/index.ts @@ -0,0 +1,71 @@ +import request from '@/config/axios' + +export interface ItemOrderMainVO { + number: string + date: string + phone: string + fax: string + purchaser: string + supplierNumber: string + supplierName: string + supplierAddress: string + shipTo: string + invoiceTo: string + contacts: string + contactsPhone: string + paymentType: string + registLocation: string + bank: string + account: string + dutyParagraph: string + siteId: string + available: string + concurrencyStamp: number +} + +// 查询备件采购订单主列表 +export const getItemOrderMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/item-order-main/senior', data }) + } else { + return await request.get({ url: `/eam/item-order-main/page`, params }) + } +} + +// 查询备件采购订单主详情 +export const getItemOrderMain = async (id: number) => { + return await request.get({ url: `/eam/item-order-main/get?id=` + id }) +} + +// 新增备件采购订单主 +export const createItemOrderMain = async (data: ItemOrderMainVO) => { + return await request.post({ url: `/eam/item-order-main/create`, data }) +} + +// 修改备件采购订单主 +export const updateItemOrderMain = async (data: ItemOrderMainVO) => { + return await request.put({ url: `/eam/item-order-main/update`, data }) +} + +// 删除备件采购订单主 +export const deleteItemOrderMain = async (id: number) => { + return await request.delete({ url: `/eam/item-order-main/delete?id=` + id }) +} + +// 关闭采购订单主 +export const closeItemOrderMain = async (id: number) => { + return await request.post({ url: `/eam/item-order-main/close?id=` + id }) +} + + +// 导出备件采购订单主 Excel +export const exportItemOrderMain = async (params) => { + return await request.download({ url: `/eam/item-order-main/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/item-order-main/get-import-template' }) +} diff --git a/src/api/eam/itemOutLocation/index.ts b/src/api/eam/itemOutLocation/index.ts new file mode 100644 index 0000000..a6660ae --- /dev/null +++ b/src/api/eam/itemOutLocation/index.ts @@ -0,0 +1,50 @@ +import request from '@/config/axios' + +export interface ItemOutLocationVO { + number: string + itemNumber: string + locationNumber: string + type: string + qty: number +} + +// 查询备件出库记录列表 +export const getItemOutLocationPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/item-out-location/senior', data }) + } else { + return await request.get({ url: `/eam/item-out-location/page`, params }) + } +} + +// 查询备件出库记录详情 +export const getItemOutLocation = async (id: number) => { + return await request.get({ url: `/eam/item-out-location/get?id=` + id }) +} + +// 新增备件出库记录 +export const createItemOutLocation = async (data: ItemOutLocationVO) => { + return await request.post({ url: `/eam/item-out-location/create`, data }) +} + +// 修改备件出库记录 +export const updateItemOutLocation = async (data: ItemOutLocationVO) => { + return await request.put({ url: `/eam/item-out-location/update`, data }) +} + +// 删除备件出库记录 +export const deleteItemOutLocation = async (id: number) => { + return await request.delete({ url: `/eam/item-out-location/delete?id=` + id }) +} + +// 导出备件出库记录 Excel +export const exportItemOutLocation = async (params) => { + return await request.download({ url: `/eam/item-out-location/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/item-out-location/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/eam/location/index.ts b/src/api/eam/location/index.ts new file mode 100644 index 0000000..66eab6e --- /dev/null +++ b/src/api/eam/location/index.ts @@ -0,0 +1,55 @@ +import request from '@/config/axios' + +export interface LocationVO { + number: string + name: string + description: string + areaNumber: string + type: string + isInAccount: string + siteId: string + available: string + concurrencyStamp: number +} + +// 查询库位列表 +export const getLocationPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/location/senior', data }) + } else { + return await request.get({ url: `/eam/location/page`, params }) + } +} + +// 查询库位详情 +export const getLocation = async (id: number) => { + return await request.get({ url: `/eam/location/get?id=` + id }) +} + +// 新增库位 +export const createLocation = async (data: LocationVO) => { + return await request.post({ url: `/eam/location/create`, data }) +} + +// 修改库位 +export const updateLocation = async (data: LocationVO) => { + return await request.put({ url: `/eam/location/update`, data }) +} + +// 删除库位 +export const deleteLocation = async (id: number) => { + return await request.delete({ url: `/eam/location/delete?id=` + id }) +} + +// 导出库位 Excel +export const exportLocation = async (params) => { + return await request.download({ url: `/eam/location/export-excel`, params }) +} + + +// 查询库位列表 +export const getLocationNoPage = async (params) => { + return await request.get({ url: `/eam/location/noPage`, params }) +} diff --git a/src/api/eam/locationArea/index.ts b/src/api/eam/locationArea/index.ts new file mode 100644 index 0000000..e1dd72e --- /dev/null +++ b/src/api/eam/locationArea/index.ts @@ -0,0 +1,48 @@ +import request from '@/config/axios' + +export interface LocationAreaVO { + number: string + name: string + description: string + type: string + siteId: string + available: string + concurrencyStamp: number +} + +// 查询库区列表 +export const getLocationAreaPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/location-area/senior', data }) + } else { + return await request.get({ url: `/eam/location-area/page`, params }) + } +} + +// 查询库区详情 +export const getLocationArea = async (id: number) => { + return await request.get({ url: `/eam/location-area/get?id=` + id }) +} + +// 新增库区 +export const createLocationArea = async (data: LocationAreaVO) => { + return await request.post({ url: `/eam/location-area/create`, data }) +} + +// 修改库区 +export const updateLocationArea = async (data: LocationAreaVO) => { + return await request.put({ url: `/eam/location-area/update`, data }) +} + +// 删除库区 +export const deleteLocationArea = async (id: number) => { + return await request.delete({ url: `/eam/location-area/delete?id=` + id }) +} + +// 导出库区 Excel +export const exportLocationArea = async (params) => { + return await request.download({ url: `/eam/location-area/export-excel`, params }) +} + diff --git a/src/api/eam/maintainExperience/index.ts b/src/api/eam/maintainExperience/index.ts new file mode 100644 index 0000000..f85ae6e --- /dev/null +++ b/src/api/eam/maintainExperience/index.ts @@ -0,0 +1,51 @@ +import request from '@/config/axios' + +export interface MaintainExperienceVO { + id: number + name: string + content: string + masterId: number + orderType: string + maintainNumber: string +} + +// 查询保养经验记录列表 +export const getMaintainExperiencePage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/record/maintain-experience/senior', data }) + } else { + return await request.get({ url: `/record/maintain-experience/page`, params }) + } +} + +// 查询保养经验记录详情 +export const getMaintainExperience = async (id: number) => { + return await request.get({ url: `/record/maintain-experience/get?id=` + id }) +} + +// 新增保养经验记录 +export const createMaintainExperience = async (data: MaintainExperienceVO) => { + return await request.post({ url: `/record/maintain-experience/create`, data }) +} + +// 修改保养经验记录 +export const updateMaintainExperience = async (data: MaintainExperienceVO) => { + return await request.put({ url: `/record/maintain-experience/update`, data }) +} + +// 删除保养经验记录 +export const deleteMaintainExperience = async (id: number) => { + return await request.delete({ url: `/record/maintain-experience/delete?id=` + id }) +} + +// 导出保养经验记录 Excel +export const exportMaintainExperience = async (params) => { + return await request.download({ url: `/record/maintain-experience/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/record/maintain-experience/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/eam/maintenance/index.ts b/src/api/eam/maintenance/index.ts new file mode 100644 index 0000000..dbba478 --- /dev/null +++ b/src/api/eam/maintenance/index.ts @@ -0,0 +1,88 @@ +import request from '@/config/axios' +import {InspectionItemSelectSetVO} from "@/api/eam/inspectionItemSelectSet"; +import {EquipmentMainPartVO} from "@/api/eam/equipmentMainPart"; + +export interface MaintenanceVO { + id: number + number: string + name: string + equipmentCode: string + type: string + optionCode: string + cycle: string + startTime: Date + endTime: Date + status: string + approver: number + approveContent: string + approveTime: Date + autoExamine: string + autoAgree: string + directCreateRecord: string + factoryAreaCode: string + workshopCode: string + workshopSectionCode: string + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询保养计划列表 +export const getMaintenancePage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/maintenance/senior', data }) + } else { + return await request.get({ url: `/eam/maintenance/page`, params }) + } +} + +// 查询保养计划详情 +export const getMaintenance = async (id: number) => { + return await request.get({ url: `/eam/maintenance/get?id=` + id }) +} + +// 新增保养计划 +export const createMaintenance = async (data: MaintenanceVO) => { + return await request.post({ url: `/eam/maintenance/create`, data }) +} + +// 修改保养计划 +export const updateMaintenance = async (data: MaintenanceVO) => { + return await request.put({ url: `/eam/maintenance/update`, data }) +} + +// 修改保养计划-审核 +export const updateMaintenanceAudi = async (data: MaintenanceVO) => { + return await request.post({ url: `/eam/maintenance/updateAudi`, data }) +} + +// 删除保养计划 +export const deleteMaintenance = async (id: number) => { + return await request.delete({ url: `/eam/maintenance/delete?id=` + id }) +} + +// 导出保养计划 Excel +export const exportMaintenance = async (params) => { + return await request.download({ url: `/eam/maintenance/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/maintenance/get-import-template' }) +} + +// 启用 / 禁用 +export const updateEnableCode = async (data: MaintenanceVO) => { + return await request.post({ url: `/eam/maintenance/ables` , data }) +} + +// 修改计划状态 +export const updateMaintenancePlan = async (data: MaintenanceVO) => { + return await request.post({ url: `/eam/maintenance/updatePlan`, data }) +} diff --git a/src/api/eam/maintenanceItem/index.ts b/src/api/eam/maintenanceItem/index.ts new file mode 100644 index 0000000..403c459 --- /dev/null +++ b/src/api/eam/maintenanceItem/index.ts @@ -0,0 +1,61 @@ +import request from '@/config/axios' + +export interface MaintenanceItemVO { + id: number + content: string + serialNumber: number + equipmentParts: string + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询保养项维护列表 +export const getMaintenanceItemPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/basic/maintenance-item/senior', data }) + } else { + return await request.get({ url: `/eam/basic/maintenance-item/page`, params }) + } +} + +// 查询保养项维护详情 +export const getMaintenanceItem = async (id: number) => { + return await request.get({ url: `/eam/basic/maintenance-item/get?id=` + id }) +} + +// 新增保养项维护 +export const createMaintenanceItem = async (data: MaintenanceItemVO) => { + return await request.post({ url: `/eam/basic/maintenance-item/create`, data }) +} + +// 修改保养项维护 +export const updateMaintenanceItem = async (data: MaintenanceItemVO) => { + return await request.put({ url: `/eam/basic/maintenance-item/update`, data }) +} + +// 删除保养项维护 +export const deleteMaintenanceItem = async (id: number) => { + return await request.delete({ url: `/eam/basic/maintenance-item/delete?id=` + id }) +} + +// 导出保养项维护 Excel +export const exportMaintenanceItem = async (params) => { + if (params.isSearch) { + const data = { ...params } + return await request.downloadPost({ url: `/eam/basic/maintenance-item/export-excel-senior`, data }) + } else { + return await request.download({ url: `/eam/basic/maintenance-item/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/basic/maintenance-item/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/eam/maintenanceItemSelectSet/index.ts b/src/api/eam/maintenanceItemSelectSet/index.ts new file mode 100644 index 0000000..b3a67ce --- /dev/null +++ b/src/api/eam/maintenanceItemSelectSet/index.ts @@ -0,0 +1,70 @@ +import request from '@/config/axios' + +export interface MaintenanceItemSelectSetVO { + id: number + name: string + itemCode: string + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询保养项选择集列表 +export const getBasicMaintenanceItemSelectSetPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/basic/maintenance-item-select-set/senior', data }) + } else { + return await request.get({ url: `/eam/basic/maintenance-item-select-set/page`, params }) + } +} + +// 查询保养项选择集详情 +export const getBasicMaintenanceItemSelectSet = async (id: number) => { + return await request.get({ url: `/eam/basic/maintenance-item-select-set/get?id=` + id }) +} + +// 新增保养项选择集 +export const createBasicMaintenanceItemSelectSet = async (data: MaintenanceItemSelectSetVO) => { + return await request.post({ url: `/eam/basic/maintenance-item-select-set/create`, data }) +} + +// 修改保养项选择集 +export const updateBasicMaintenanceItemSelectSet = async (data: MaintenanceItemSelectSetVO) => { + return await request.put({ url: `/eam/basic/maintenance-item-select-set/update`, data }) +} + +// 删除保养项选择集 +export const deleteBasicMaintenanceItemSelectSet = async (id: number) => { + return await request.delete({ url: `/eam/basic/maintenance-item-select-set/delete?id=` + id }) +} + +// 导出保养项选择集 Excel +export const exportBasicMaintenanceItemSelectSet = async (params) => { + return await request.download({ url: `/eam/basic/maintenance-item-select-set/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/basic/maintenance-item-select-set/get-import-template' }) +} + +// 启用 / 禁用 +export const updateEnableCode = async (data: MaintenanceItemSelectSetVO) => { + return await request.post({ url: `/eam/basic/maintenance-item-select-set/ables` , data }) +} + +// 查询保养项选择集列表 +export const getMaintenanceItemSelectSetList = async (params) => { + return await request.get({ url: `/eam/basic/maintenance-item/getList`, params }) +} + +// 查询保养方案项列表 +export const getRalMaintenanceOptionItemList = async (params) => { + return await request.get({url: `/eam/relation-maintenance-option-item/getList?optionCode=` + params}) +} diff --git a/src/api/eam/planInspection/index.ts b/src/api/eam/planInspection/index.ts new file mode 100644 index 0000000..10b3fbf --- /dev/null +++ b/src/api/eam/planInspection/index.ts @@ -0,0 +1,91 @@ +import request from '@/config/axios' +import {MaintenanceVO} from "@/api/eam/maintenance"; + +export interface PlanInspectionVO { + id: number + number: string + name: string + equipmentCode: string + type: string + optionCode: string + cycle: string + startTime: Date + endTime: Date + status: string + approver: number + approveContent: string + approveTime: Date + autoExamine: string + autoAgree: string + directCreateRecord: string + factoryAreaCode: string + workshopCode: string + lineCode: string + processCode: string + workstationCode: string + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询巡检计划列表 +export const getPlanInspectionPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/plan-inspection/senior', data }) + } else { + return await request.get({ url: `/eam/plan-inspection/page`, params }) + } +} + +// 查询巡检计划详情 +export const getPlanInspection = async (id: number) => { + return await request.get({ url: `/eam/plan-inspection/get?id=` + id }) +} + +// 新增巡检计划 +export const createPlanInspection = async (data: PlanInspectionVO) => { + return await request.post({ url: `/eam/plan-inspection/create`, data }) +} + +// 修改巡检计划 +export const updatePlanInspection = async (data: PlanInspectionVO) => { + return await request.put({ url: `/eam/plan-inspection/update`, data }) +} + +// 修改巡检计划-审核 +export const updateInspectionPlanAudi = async (data: PlanInspectionVO) => { + return await request.post({ url: `/eam/plan-inspection/updateAudi`, data }) +} + +// 删除巡检计划 +export const deletePlanInspection = async (id: number) => { + return await request.delete({ url: `/eam/plan-inspection/delete?id=` + id }) +} + +// 导出巡检计划 Excel +export const exportPlanInspection = async (params) => { + return await request.download({ url: `/eam/plan-inspection/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/plan-inspection/get-import-template' }) +} + + +// 启用 / 禁用 +export const updateEnableCode = async (data: PlanInspectionVO) => { + return await request.post({ url: `/eam/plan-inspection/ables` , data }) +} + + +// 修改计划状态 +export const updateInspectionPlan = async (data: PlanInspectionVO) => { + return await request.post({ url: `/eam/plan-inspection/updatePlan`, data }) +} diff --git a/src/api/eam/planSpotCheck/index.ts b/src/api/eam/planSpotCheck/index.ts new file mode 100644 index 0000000..9ed72a1 --- /dev/null +++ b/src/api/eam/planSpotCheck/index.ts @@ -0,0 +1,91 @@ +import request from '@/config/axios' +import {PlanInspectionVO} from "@/api/eam/planInspection"; + +export interface PlanSpotCheckVO { + id: number + number: string + name: string + equipmentCode: string + type: string + optionCode: string + cycle: string + startTime: Date + endTime: Date + status: string + approver: number + approveContent: string + approveTime: Date + autoExamine: string + autoAgree: string + directCreateRecord: string + factoryAreaCode: string + workshopCode: string + lineCode: string + processCode: string + workstationCode: string + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询点检计划列表 +export const getPlanSpotCheckPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/plan-spot-check/senior', data }) + } else { + return await request.get({ url: `/eam/plan-spot-check/page`, params }) + } +} + +// 查询点检计划详情 +export const getPlanSpotCheck = async (id: number) => { + return await request.get({ url: `/eam/plan-spot-check/get?id=` + id }) +} + +// 新增点检计划 +export const createPlanSpotCheck = async (data: PlanSpotCheckVO) => { + return await request.post({ url: `/eam/plan-spot-check/create`, data }) +} + +// 修改点检计划 +export const updatePlanSpotCheck = async (data: PlanSpotCheckVO) => { + return await request.put({ url: `/eam/plan-spot-check/update`, data }) +} + +// 修改巡检计划-审核 +export const updateSpotCheckPlanAudi = async (data: PlanSpotCheckVO) => { + return await request.post({ url: `/eam/plan-spot-check/updateAudi`, data }) +} + +// 删除点检计划 +export const deletePlanSpotCheck = async (id: number) => { + return await request.delete({ url: `/eam/plan-spot-check/delete?id=` + id }) +} + +// 导出点检计划 Excel +export const exportPlanSpotCheck = async (params) => { + return await request.download({ url: `/eam/plan-spot-check/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/plan-spot-check/get-import-template' }) +} + + +// 启用 / 禁用 +export const updateEnableCode = async (data: PlanSpotCheckVO) => { + return await request.post({ url: `/eam/plan-spot-check/ables` , data }) +} + + +// 修改计划状态 +export const updateSpotCheckPlan = async (data: PlanSpotCheckVO) => { + return await request.post({ url: `/eam/plan-spot-check/updatePlan`, data }) +} diff --git a/src/api/eam/recordDeviceChanged/index.ts b/src/api/eam/recordDeviceChanged/index.ts new file mode 100644 index 0000000..a7fe656 --- /dev/null +++ b/src/api/eam/recordDeviceChanged/index.ts @@ -0,0 +1,59 @@ +import request from '@/config/axios' + +export interface RecordDeviceChangedVO { + id: number + code: string + name: string + statusBefore: string + statusAfter: string + operator: number + operateTime: Date + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询设备变更记录列表 +export const getRecordDeviceChangedPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/record-device-changed/senior', data }) + } else { + return await request.get({ url: `/eam/record-device-changed/page`, params }) + } +} + +// 查询设备变更记录详情 +export const getRecordDeviceChanged = async (id: number) => { + return await request.get({ url: `/eam/record-device-changed/get?id=` + id }) +} + +// 新增设备变更记录 +export const createRecordDeviceChanged = async (data: RecordDeviceChangedVO) => { + return await request.post({ url: `/eam/record-device-changed/create`, data }) +} + +// 修改设备变更记录 +export const updateRecordDeviceChanged = async (data: RecordDeviceChangedVO) => { + return await request.put({ url: `/eam/record-device-changed/update`, data }) +} + +// 删除设备变更记录 +export const deleteRecordDeviceChanged = async (id: number) => { + return await request.delete({ url: `/eam/record-device-changed/delete?id=` + id }) +} + +// 导出设备变更记录 Excel +export const exportRecordDeviceChanged = async (params) => { + return await request.download({ url: `/eam/record-device-changed/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/record-device-changed/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/eam/relationInspectionPlanItem/index.ts b/src/api/eam/relationInspectionPlanItem/index.ts new file mode 100644 index 0000000..08f7863 --- /dev/null +++ b/src/api/eam/relationInspectionPlanItem/index.ts @@ -0,0 +1,57 @@ +import request from '@/config/axios' + +export interface RelationInspectionPlanItemVO { + id: number + planNumber: string + itemCode: string + itemName: string + isSelectd: boolean + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询巡检计划和巡检项关系列表 +export const getRelationInspectionPlanItemPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/relation-inspection-plan-item/senior', data }) + } else { + return await request.get({ url: `/eam/relation-inspection-plan-item/page`, params }) + } +} + +// 查询巡检计划和巡检项关系详情 +export const getRelationInspectionPlanItem = async (id: number) => { + return await request.get({ url: `/eam/relation-inspection-plan-item/get?id=` + id }) +} + +// 新增巡检计划和巡检项关系 +export const createRelationInspectionPlanItem = async (data: RelationInspectionPlanItemVO) => { + return await request.post({ url: `/eam/relation-inspection-plan-item/create`, data }) +} + +// 修改巡检计划和巡检项关系 +export const updateRelationInspectionPlanItem = async (data: RelationInspectionPlanItemVO) => { + return await request.put({ url: `/eam/relation-inspection-plan-item/update`, data }) +} + +// 删除巡检计划和巡检项关系 +export const deleteRelationInspectionPlanItem = async (id: number) => { + return await request.delete({ url: `/eam/relation-inspection-plan-item/delete?id=` + id }) +} + +// 导出巡检计划和巡检项关系 Excel +export const exportRelationInspectionPlanItem = async (params) => { + return await request.download({ url: `/eam/relation-inspection-plan-item/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/relation-inspection-plan-item/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/eam/relationMainPart/index.ts b/src/api/eam/relationMainPart/index.ts new file mode 100644 index 0000000..41d9322 --- /dev/null +++ b/src/api/eam/relationMainPart/index.ts @@ -0,0 +1,67 @@ +import request from '@/config/axios' + +export interface RelationMainPartVO { + id: number + mainPartCode: string + equipmentCode: string + type: string + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询主要部件关联列表 +export const getRelationMainPartPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/relation/relation-main-partsenior', data }) + } else { + return await request.get({ url: `/eam/relation/relation-main-part/page`, params }) + } +} + +// 查询主要部件关联详情 +export const getRelationMainPart = async (id: number) => { + return await request.get({ url: `/eam/relation/relation-main-part/get?id=` + id }) +} + +// 新增主要部件关联 +export const createRelationMainPart = async (data: RelationMainPartVO) => { + return await request.post({ url: `/eam/relation/relation-main-part/create`, data }) +} + +// 修改主要部件关联 +export const updateRelationMainPart = async (data: RelationMainPartVO) => { + return await request.put({ url: `/eam/relation/relation-main-part/update`, data }) +} + +// 删除主要部件关联 +export const deleteRelationMainPart = async (id: number) => { + return await request.delete({ url: `/eam/relation/relation-main-part/delete?id=` + id }) +} + +// 导出主要部件关联 Excel +export const exportRelationMainPart = async (params) => { + return await request.download({ url: `/eam/relation/relation-main-part/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/relation/relation-main-part/get-import-template' }) +} + +// 查询主要部件关联列表不分页 +export const getRelationMainPartNoPage = async (params) => { + return await request.get({ url: `/eam/relation/relation-main-part/noPage`, params }) +} + + +// 新增主要部件批量关联 +export const createRelationMainPartBatch = async (data: Array) => { + return await request.post({ url: `/eam/relation/relation-main-part/createBatch`, data }) +} diff --git a/src/api/eam/relationMaintenancePlanItem/index.ts b/src/api/eam/relationMaintenancePlanItem/index.ts new file mode 100644 index 0000000..9381fb7 --- /dev/null +++ b/src/api/eam/relationMaintenancePlanItem/index.ts @@ -0,0 +1,57 @@ +import request from '@/config/axios' + +export interface RelationMaintenancePlanItemVO { + id: number + planNumber: string + itemCode: string + itemName: string + isSelectd: boolean + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询保养计划表和保养项关系列表 +export const getRelationMaintenancePlanItemPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/relation-maintenance-plan-item/senior', data }) + } else { + return await request.get({ url: `/eam/relation-maintenance-plan-item/page`, params }) + } +} + +// 查询保养计划表和保养项关系详情 +export const getRelationMaintenancePlanItem = async (id: number) => { + return await request.get({ url: `/eam/relation-maintenance-plan-item/get?id=` + id }) +} + +// 新增保养计划表和保养项关系 +export const createRelationMaintenancePlanItem = async (data: RelationMaintenancePlanItemVO) => { + return await request.post({ url: `/eam/relation-maintenance-plan-item/create`, data }) +} + +// 修改保养计划表和保养项关系 +export const updateRelationMaintenancePlanItem = async (data: RelationMaintenancePlanItemVO) => { + return await request.put({ url: `/eam/relation-maintenance-plan-item/update`, data }) +} + +// 删除保养计划表和保养项关系 +export const deleteRelationMaintenancePlanItem = async (id: number) => { + return await request.delete({ url: `/eam/relation-maintenance-plan-item/delete?id=` + id }) +} + +// 导出保养计划表和保养项关系 Excel +export const exportRelationMaintenancePlanItem = async (params) => { + return await request.download({ url: `/eam/relation-maintenance-plan-item/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/relation-maintenance-plan-item/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/eam/relationSpotCheckPlanItem/index.ts b/src/api/eam/relationSpotCheckPlanItem/index.ts new file mode 100644 index 0000000..7293e47 --- /dev/null +++ b/src/api/eam/relationSpotCheckPlanItem/index.ts @@ -0,0 +1,57 @@ +import request from '@/config/axios' + +export interface RelationSpotCheckPlanItemVO { + id: number + planNumber: string + itemCode: string + itemName: string + isSelectd: boolean + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询点检计划表和巡检项关系列表 +export const getRelationSpotCheckPlanItemPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/relation-spot-check-plan-item/senior', data }) + } else { + return await request.get({ url: `/eam/relation-spot-check-plan-item/page`, params }) + } +} + +// 查询点检计划表和巡检项关系详情 +export const getRelationSpotCheckPlanItem = async (id: number) => { + return await request.get({ url: `/eam/relation-spot-check-plan-item/get?id=` + id }) +} + +// 新增点检计划表和巡检项关系 +export const createRelationSpotCheckPlanItem = async (data: RelationSpotCheckPlanItemVO) => { + return await request.post({ url: `/eam/relation-spot-check-plan-item/create`, data }) +} + +// 修改点检计划表和巡检项关系 +export const updateRelationSpotCheckPlanItem = async (data: RelationSpotCheckPlanItemVO) => { + return await request.put({ url: `/eam/relation-spot-check-plan-item/update`, data }) +} + +// 删除点检计划表和巡检项关系 +export const deleteRelationSpotCheckPlanItem = async (id: number) => { + return await request.delete({ url: `/eam/relation-spot-check-plan-item/delete?id=` + id }) +} + +// 导出点检计划表和巡检项关系 Excel +export const exportRelationSpotCheckPlanItem = async (params) => { + return await request.download({ url: `/eam/relation-spot-check-plan-item/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/relation-spot-check-plan-item/get-import-template' }) +} diff --git a/src/api/eam/repairExperience/index.ts b/src/api/eam/repairExperience/index.ts new file mode 100644 index 0000000..b0fe57f --- /dev/null +++ b/src/api/eam/repairExperience/index.ts @@ -0,0 +1,49 @@ +import request from '@/config/axios' + +export interface RepairExperienceVO { + id: number + name: string + content: string + repairRecordNumber: string +} + +// 查询维修经验记录列表 +export const getRepairExperiencePage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/record/repair-experience/senior', data }) + } else { + return await request.get({ url: `/record/repair-experience/page`, params }) + } +} + +// 查询维修经验记录详情 +export const getRepairExperience = async (id: number) => { + return await request.get({ url: `/record/repair-experience/get?id=` + id }) +} + +// 新增维修经验记录 +export const createRepairExperience = async (data: RepairExperienceVO) => { + return await request.post({ url: `/record/repair-experience/create`, data }) +} + +// 修改维修经验记录 +export const updateRepairExperience = async (data: RepairExperienceVO) => { + return await request.put({ url: `/record/repair-experience/update`, data }) +} + +// 删除维修经验记录 +export const deleteRepairExperience = async (id: number) => { + return await request.delete({ url: `/record/repair-experience/delete?id=` + id }) +} + +// 导出维修经验记录 Excel +export const exportRepairExperience = async (params) => { + return await request.download({ url: `/record/repair-experience/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/record/repair-experience/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/eam/repairSparePartsRecord/index.ts b/src/api/eam/repairSparePartsRecord/index.ts new file mode 100644 index 0000000..d499696 --- /dev/null +++ b/src/api/eam/repairSparePartsRecord/index.ts @@ -0,0 +1,67 @@ +import request from '@/config/axios' + +export interface RepairSparePartsRecordVO { + id: number + number: string + sparePartsCode: string + qty: number + areaCode: string + locationCode: string + status: string + result: string + applyer: string + approver: number + approveContent: string + approveTime: Date + autoExamine: string + autoAgree: string + directCreateRecord: string + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询备件维修申请列表 +export const getRepairSparePartsRecordPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/repair-spare-parts-record/senior', data }) + } else { + return await request.get({ url: `/eam/repair-spare-parts-record/page`, params }) + } +} + +// 查询备件维修申请详情 +export const getRepairSparePartsRecord = async (id: number) => { + return await request.get({ url: `/eam/repair-spare-parts-record/get?id=` + id }) +} + +// 新增备件维修申请 +export const createRepairSparePartsRecord = async (data: RepairSparePartsRecordVO) => { + return await request.post({ url: `/eam/repair-spare-parts-record/create`, data }) +} + +// 修改备件维修申请 +export const updateRepairSparePartsRecord = async (data: RepairSparePartsRecordVO) => { + return await request.put({ url: `/eam/repair-spare-parts-record/update`, data }) +} + +// 删除备件维修申请 +export const deleteRepairSparePartsRecord = async (id: number) => { + return await request.delete({ url: `/eam/repair-spare-parts-record/delete?id=` + id }) +} + +// 导出备件维修申请 Excel +export const exportRepairSparePartsRecord = async (params) => { + return await request.download({ url: `/eam/repair-spare-parts-record/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/repair-spare-parts-record/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/eam/repairSparePartsRequest/index.ts b/src/api/eam/repairSparePartsRequest/index.ts new file mode 100644 index 0000000..b99181f --- /dev/null +++ b/src/api/eam/repairSparePartsRequest/index.ts @@ -0,0 +1,68 @@ +import request from '@/config/axios' + +export interface RepairSparePartsRequestVO { + id: number + number: string + sparePartsCode: string + qty: number + areaCode: string + locationCode: string + status: string + result: string + applyer: string + approver: number + approveContent: string + approveTime: Date + autoExamine: string + autoAgree: string + directCreateRecord: string + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number + repairCause: string +} + +// 查询备件维修申请列表 +export const getRepairSparePartsRequestPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/repair-spare-parts-request/senior', data }) + } else { + return await request.get({ url: `/eam/repair-spare-parts-request/page`, params }) + } +} + +// 查询备件维修申请详情 +export const getRepairSparePartsRequest = async (id: number) => { + return await request.get({ url: `/eam/repair-spare-parts-request/get?id=` + id }) +} + +// 新增备件维修申请 +export const createRepairSparePartsRequest = async (data: RepairSparePartsRequestVO) => { + return await request.post({ url: `/eam/repair-spare-parts-request/create`, data }) +} + +// 修改备件维修申请 +export const updateRepairSparePartsRequest = async (data: RepairSparePartsRequestVO) => { + return await request.put({ url: `/eam/repair-spare-parts-request/update`, data }) +} + +// 删除备件维修申请 +export const deleteRepairSparePartsRequest = async (id: number) => { + return await request.delete({ url: `/eam/repair-spare-parts-request/delete?id=` + id }) +} + +// 导出备件维修申请 Excel +export const exportRepairSparePartsRequest = async (params) => { + return await request.download({ url: `/eam/repair-spare-parts-request/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/repair-spare-parts-request/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/eam/sparePart/index.ts b/src/api/eam/sparePart/index.ts new file mode 100644 index 0000000..2956ac0 --- /dev/null +++ b/src/api/eam/sparePart/index.ts @@ -0,0 +1,76 @@ +import request from '@/config/axios' + +export interface SparePartVO { + id: number + code: string + name: string + brand: string + specifications: string + isOverall: string + subject: string + subjectCode: string + type: string + images: string + region: string + classification: string + uom: string + singlePrice: number + manufacturer: string + minInventory: number + maxInventory: number + replacementCycle: number + storageLocation: string + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询备件基础列表 +export const getSparePartPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/basic/spare-part/senior', data }) + } else { + return await request.get({ url: `/eam/basic/spare-part/page`, params }) + } +} + +// 查询备件基础详情 +export const getSparePart = async (id: number) => { + return await request.get({ url: `/eam/basic/spare-part/get?id=` + id }) +} + +// 新增备件基础 +export const createSparePart = async (data: SparePartVO) => { + return await request.post({ url: `/eam/basic/spare-part/create`, data }) +} + +// 修改备件基础 +export const updateSparePart = async (data: SparePartVO) => { + return await request.put({ url: `/eam/basic/spare-part/update`, data }) +} + +// 删除备件基础 +export const deleteSparePart = async (id: number) => { + return await request.delete({ url: `/eam/basic/spare-part/delete?id=` + id }) +} + +// 导出备件基础 Excel +export const exportSparePart = async (params) => { + return await request.download({ url: `/eam/basic/spare-part/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/basic/spare-part/get-import-template' }) +} + +// 查询备件基础列表 +export const getSparePartNoPage = async (params) => { + return await request.get({ url: `/eam/basic/spare-part/noPage`, params }) +} diff --git a/src/api/eam/sparePartsApplyDetail/index.ts b/src/api/eam/sparePartsApplyDetail/index.ts new file mode 100644 index 0000000..ae94831 --- /dev/null +++ b/src/api/eam/sparePartsApplyDetail/index.ts @@ -0,0 +1,63 @@ +import request from '@/config/axios' + +export interface SparePartsApplyDetailVO { + id: number + number: string + masterId: number + sparePartsCode: string + isRadeIn: string + applyQty: number + currentQty: number + type: string + currentSinglePrice: number + equipmentCode: byte[] + jobNumber: byte[] + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询备件领用申请子列表 +export const getSparePartsApplyDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/spare-parts-apply-detail/senior', data }) + } else { + return await request.get({ url: `/eam/spare-parts-apply-detail/page`, params }) + } +} + +// 查询备件领用申请子详情 +export const getSparePartsApplyDetail = async (id: number) => { + return await request.get({ url: `/eam/spare-parts-apply-detail/get?id=` + id }) +} + +// 新增备件领用申请子 +export const createSparePartsApplyDetail = async (data: SparePartsApplyDetailVO) => { + return await request.post({ url: `/eam/spare-parts-apply-detail/create`, data }) +} + +// 修改备件领用申请子 +export const updateSparePartsApplyDetail = async (data: SparePartsApplyDetailVO) => { + return await request.put({ url: `/eam/spare-parts-apply-detail/update`, data }) +} + +// 删除备件领用申请子 +export const deleteSparePartsApplyDetail = async (id: number) => { + return await request.delete({ url: `/eam/spare-parts-apply-detail/delete?id=` + id }) +} + +// 导出备件领用申请子 Excel +export const exportSparePartsApplyDetail = async (params) => { + return await request.download({ url: `/eam/spare-parts-apply-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/spare-parts-apply-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/eam/sparePartsApplyMain/index.ts b/src/api/eam/sparePartsApplyMain/index.ts new file mode 100644 index 0000000..80288a6 --- /dev/null +++ b/src/api/eam/sparePartsApplyMain/index.ts @@ -0,0 +1,87 @@ +import request from '@/config/axios' + +export interface SparePartsApplyMainVO { + id: number + number: string + description: string + applyDeptId: string + sumVal: number + status: string + applyer: string + approver: number + approveContent: string + approveTime: Date + autoExamine: string + autoAgree: string + directCreateRecord: string + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询备件领用申请列表 +export const getSparePartsApplyMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = { ...params } + return await request.post({ url: '/eam/spare-parts-apply-main/senior', data }) + } else { + return await request.get({ url: `/eam/spare-parts-apply-main/page`, params }) + } +} + +// 查询备件领用申请详情 +export const getSparePartsApplyMain = async (id: number) => { + return await request.get({ url: `/eam/spare-parts-apply-main/get?id=` + id }) +} + +// 新增备件领用申请 +export const createSparePartsApplyMain = async (data: SparePartsApplyMainVO) => { + return await request.post({ url: `/eam/spare-parts-apply-main/create`, data }) +} + +// 修改备件领用申请 +export const updateSparePartsApplyMain = async (data: SparePartsApplyMainVO) => { + return await request.put({ url: `/eam/spare-parts-apply-main/update`, data }) +} + +// 删除备件领用申请 +export const deleteSparePartsApplyMain = async (id: number) => { + return await request.delete({ url: `/eam/spare-parts-apply-main/delete?id=` + id }) +} + +// 导出备件领用申请 Excel +export const exportSparePartsApplyMain = async (params) => { + return await request.download({ url: `/eam/spare-parts-apply-main/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/spare-parts-apply-main/get-import-template' }) +} + +// 撤回 +export const cancelSparePartsApplyMain = async (id) => { + return await request.get({ url: `/eam/spare-parts-apply-main/cancel?id=` + id }) +} +// 审核 +export const submitSparePartsApplyMain = async (id) => { + return await request.get({ url: `/eam/spare-parts-apply-main/submitExamine?id=` + id }) +} +// 审核驳回 +export const rejectSparePartsApplyMain = async (id) => { + return await request.get({ url: `/eam/spare-parts-apply-main/reject?id=` + id }) +} +// 审核通过 +export const approveSparePartsApplyMain = async (data) => { + return await request.post({ url: `/eam/spare-parts-apply-main/approve`, data }) +} + +// 完成 +export const finishSparePartsApplyMain = async (id) => { + return await request.post({ url: `/eam/spare-parts-apply-main/finish?id=` + id }) +} diff --git a/src/api/eam/sparePartsInLocationDetail/index.ts b/src/api/eam/sparePartsInLocationDetail/index.ts new file mode 100644 index 0000000..827687a --- /dev/null +++ b/src/api/eam/sparePartsInLocationDetail/index.ts @@ -0,0 +1,58 @@ +import request from '@/config/axios' + +export interface SparePartsInLocationDetailVO { + id: number + number: string + masterId: number + sparePartsCode: string + isRadeIn: string + applyQty: number + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询备件入库记录子列表 +export const getSparePartsInLocationDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/spare-parts-in-location-detail/senior', data }) + } else { + return await request.get({ url: `/eam/spare-parts-in-location-detail/page`, params }) + } +} + +// 查询备件入库记录子详情 +export const getSparePartsInLocationDetail = async (id: number) => { + return await request.get({ url: `/eam/spare-parts-in-location-detail/get?id=` + id }) +} + +// 新增备件入库记录子 +export const createSparePartsInLocationDetail = async (data: SparePartsInLocationDetailVO) => { + return await request.post({ url: `/eam/spare-parts-in-location-detail/create`, data }) +} + +// 修改备件入库记录子 +export const updateSparePartsInLocationDetail = async (data: SparePartsInLocationDetailVO) => { + return await request.put({ url: `/eam/spare-parts-in-location-detail/update`, data }) +} + +// 删除备件入库记录子 +export const deleteSparePartsInLocationDetail = async (id: number) => { + return await request.delete({ url: `/eam/spare-parts-in-location-detail/delete?id=` + id }) +} + +// 导出备件入库记录子 Excel +export const exportSparePartsInLocationDetail = async (params) => { + return await request.download({ url: `/eam/spare-parts-in-location-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/spare-parts-in-location-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/eam/sparePartsInLocationMain/index.ts b/src/api/eam/sparePartsInLocationMain/index.ts new file mode 100644 index 0000000..687d99a --- /dev/null +++ b/src/api/eam/sparePartsInLocationMain/index.ts @@ -0,0 +1,91 @@ +import request from '@/config/axios' + +export interface SparePartsInLocationMainVO { + id: number + number: string + theme: string + status: string + applyer: string + approver: number + approveContent: string + approveTime: Date + autoExamine: string + autoAgree: string + directCreateRecord: string + areaCode: string + locationCode: string + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询备件入库记录主列表 +export const getSparePartsInLocationMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/spare-parts-in-location-main/senior', data }) + } else { + return await request.get({ url: `/eam/spare-parts-in-location-main/page`, params }) + } +} + +// 查询备件入库记录主详情 +export const getSparePartsInLocationMain = async (id: number) => { + return await request.get({ url: `/eam/spare-parts-in-location-main/get?id=` + id }) +} + +// 新增备件入库记录主 +export const createSparePartsInLocationMain = async (data: SparePartsInLocationMainVO) => { + return await request.post({ url: `/eam/spare-parts-in-location-main/create`, data }) +} + +// 修改备件入库记录主 +export const updateSparePartsInLocationMain = async (data: SparePartsInLocationMainVO) => { + return await request.put({ url: `/eam/spare-parts-in-location-main/update`, data }) +} + +// 删除备件入库记录主 +export const deleteSparePartsInLocationMain = async (id: number) => { + return await request.delete({ url: `/eam/spare-parts-in-location-main/delete?id=` + id }) +} + +// 导出备件入库记录主 Excel +export const exportSparePartsInLocationMain = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/eam/spare-parts-in-location-main/export-excel-senior`, data }) + }else{ + return await request.download({ url: `/eam/spare-parts-in-location-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/spare-parts-in-location-main/get-import-template' }) +} + +// 撤回 +export const cancelSparePartsInLocation = async (id) => { + return await request.get({ url: `/eam/spare-parts-in-location-main/cancel?id=` + id }) +} +// 审核 +export const submitExamineSparePartsInLocation = async (id) => { + return await request.get({ url: `/eam/spare-parts-in-location-main/submitExamine?id=` + id }) +} +// 审核驳回 +export const rejectSparePartsInLocation = async (id) => { + return await request.get({ url: `/eam/spare-parts-in-location-main/reject?id=` + id }) +} +// 审核通过 +export const approveSparePartsInLocation = async (data) => { + return await request.post({ url: `/eam/spare-parts-in-location-main/approve`,data }) +} +// 完成 +export const finishSparePartsInLocation = async (id) => { + return await request.post({ url: `/eam/spare-parts-in-location-main/finish?id=` + id }) +} \ No newline at end of file diff --git a/src/api/eam/sparePartsInLocationRecordDetail/index.ts b/src/api/eam/sparePartsInLocationRecordDetail/index.ts new file mode 100644 index 0000000..9e4df69 --- /dev/null +++ b/src/api/eam/sparePartsInLocationRecordDetail/index.ts @@ -0,0 +1,58 @@ +import request from '@/config/axios' + +export interface SparePartsInLocationDetailRecordVO { + id: number + number: string + masterId: number + sparePartsCode: string + isRadeIn: string + applyQty: number + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询备件入库记录子列表 +export const getSparePartsInLocationRecordDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/spare-parts-in-location-detail-record/senior', data }) + } else { + return await request.get({ url: `/eam/spare-parts-in-location-detail-record/page`, params }) + } +} + +// 查询备件入库记录子详情 +export const getSparePartsInLocationRecordDetail = async (id: number) => { + return await request.get({ url: `/eam/spare-parts-in-location-detail-record/get?id=` + id }) +} + +// 新增备件入库记录子 +export const createSparePartsInLocationRecordDetail= async (data: SparePartsInLocationDetailRecordVO) => { + return await request.post({ url: `/eam/spare-parts-in-location-detail-record/create`, data }) +} + +// 修改备件入库记录子 +export const updateSparePartsInLocationRecordDetail = async (data: SparePartsInLocationDetailRecordVO) => { + return await request.put({ url: `/eam/spare-parts-in-location-detail-record/update`, data }) +} + +// 删除备件入库记录子 +export const deleteSparePartsInLocationRecordDetail = async (id: number) => { + return await request.delete({ url: `/eam/spare-parts-in-location-detail-record/delete?id=` + id }) +} + +// 导出备件入库记录子 Excel +export const exportSparePartsInLocationRecordDetail = async (params) => { + return await request.download({ url: `/eam/spare-parts-in-location-detail-record/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/spare-parts-in-location-detail-record/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/eam/sparePartsInLocationRecordMain/index.ts b/src/api/eam/sparePartsInLocationRecordMain/index.ts new file mode 100644 index 0000000..42c7616 --- /dev/null +++ b/src/api/eam/sparePartsInLocationRecordMain/index.ts @@ -0,0 +1,72 @@ +import request from '@/config/axios' + +export interface SparePartsInLocationMainRecordVO { + id: number + number: string + theme: string + status: string + applyer: string + approver: number + approveContent: string + approveTime: Date + autoExamine: string + autoAgree: string + directCreateRecord: string + areaCode: string + locationCode: string + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询备件入库记录主列表 +export const getSparePartsInLocationRecordMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = { ...params } + return await request.post({ url: '/eam/spare-parts-in-location-main-record/senior', data }) + } else { + return await request.get({ url: `/eam/spare-parts-in-location-main-record/page`, params }) + } +} + +// 查询备件入库记录主详情 +export const getSparePartsInLocationRecordMain = async (id: number) => { + return await request.get({ url: `/eam/spare-parts-in-location-main-record/get?id=` + id }) +} + +// 新增备件入库记录主 +export const createSparePartsInLocationRecordMain = async ( + data: SparePartsInLocationMainRecordVO +) => { + return await request.post({ url: `/eam/spare-parts-in-location-main-record/create`, data }) +} + +// 修改备件入库记录主 +export const updateSparePartsInLocationRecordMain = async ( + data: SparePartsInLocationMainRecordVO +) => { + return await request.put({ url: `/eam/spare-parts-in-location-main-record/update`, data }) +} + +// 删除备件入库记录主 +export const deleteSparePartsInLocationRecordMain= async (id: number) => { + return await request.delete({ url: `/eam/spare-parts-in-location-main-record/delete?id=` + id }) +} + +// 导出备件入库记录主 Excel +export const exportSparePartsInLocationRecordMain = async (params) => { + return await request.download({ + url: `/eam/spare-parts-in-location-main-record/export-excel`, + params + }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/spare-parts-in-location-main-record/get-import-template' }) +} diff --git a/src/api/eam/sparePartsOutLocationDetail/index.ts b/src/api/eam/sparePartsOutLocationDetail/index.ts new file mode 100644 index 0000000..16b9fe4 --- /dev/null +++ b/src/api/eam/sparePartsOutLocationDetail/index.ts @@ -0,0 +1,61 @@ +import request from '@/config/axios' + +export interface SparePartsOutLocationDetailVO { + id: number + number: string + masterId: number + sparePartsCode: string + isRadeIn: string + applyQty: number + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询备件入库记录子列表 +export const getSparePartsOutLocationDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = { ...params } + return await request.post({ url: '/eam/spare-parts-out-location-detail/senior', data }) + } else { + return await request.get({ url: `/eam/spare-parts-out-location-detail/page`, params }) + } +} + +// 查询备件入库记录子详情 +export const getSparePartsOutLocationDetail = async (id: number) => { + return await request.get({ url: `/eam/spare-parts-out-location-detail/get?id=` + id }) +} + +// 新增备件入库记录子 +export const createSparePartsOutLocationDetail = async (data: SparePartsOutLocationDetailVO) => { + return await request.post({ url: `/eam/spare-parts-out-location-detail/create`, data }) +} + +// 修改备件入库记录子 +export const updateSparePartsOutLocationDetail = async (data: SparePartsOutLocationDetailVO) => { + return await request.put({ url: `/eam/spare-parts-out-location-detail/update`, data }) +} + +// 删除备件入库记录子 +export const deleteSparePartsOutLocationDetail = async (id: number) => { + return await request.delete({ url: `/eam/spare-parts-out-location-detail/delete?id=` + id }) +} + +// 导出备件入库记录子 Excel +export const exportSparePartsOutLocationDetail = async (params) => { + return await request.download({ + url: `/eam/spare-parts-out-location-detail/export-excel`, + params + }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/spare-parts-out-location-detail/get-import-template' }) +} diff --git a/src/api/eam/sparePartsOutLocationMain/index.ts b/src/api/eam/sparePartsOutLocationMain/index.ts new file mode 100644 index 0000000..1eeccf4 --- /dev/null +++ b/src/api/eam/sparePartsOutLocationMain/index.ts @@ -0,0 +1,81 @@ +import request from '@/config/axios' + +export interface SparePartsOutLocationMainVO { + id: number + number: string + theme: string + status: string + applyer: string + approver: number + approveContent: string + approveTime: Date + autoExamine: string + autoAgree: string + directCreateRecord: string + areaCode: string + locationCode: string + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询备件入库记录主列表 +export const getSparePartsOutLocationMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = { ...params } + return await request.post({ url: '/eam/spare-parts-out-location-main/senior', data }) + } else { + return await request.get({ url: `/eam/spare-parts-out-location-main/page`, params }) + } +} + +// 查询备件入库记录主详情 +export const getSparePartsOutLocationMain = async (id: number) => { + return await request.get({ url: `/eam/spare-parts-out-location-main/get?id=` + id }) +} + +// 新增备件入库记录主 +export const createSparePartsOutLocationMain = async (data: SparePartsOutLocationMainVO) => { + return await request.post({ url: `/eam/spare-parts-out-location-main/create`, data }) +} + +// 修改备件入库记录主 +export const updateSparePartsOutLocationMain = async (data: SparePartsOutLocationMainVO) => { + return await request.put({ url: `/eam/spare-parts-out-location-main/update`, data }) +} + +// 删除备件入库记录主 +export const deleteSparePartsOutLocationMain = async (id: number) => { + return await request.delete({ url: `/eam/spare-parts-out-location-main/delete?id=` + id }) +} + +// 出库 +export const outSparePartsOutLocationMain = async (id) => { + return await request.get({ url: `/eam/spare-parts-out-location-main/out?id=` + id }) +} + +// 导出备件入库记录主 Excel +export const exportSparePartsOutLocationMain = async (params) => { + if (params.isSearch) { + const data = { ...params } + return await request.downloadPost({ + url: `/eam/spare-parts-out-location-main/export-excel-senior`, + data + }) + } else { + return await request.download({ + url: `/eam/spare-parts-out-location-main/export-excel`, + params + }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/spare-parts-out-location-main/get-import-template' }) +} diff --git a/src/api/eam/sparePartsOutLocationRecordDetail/index.ts b/src/api/eam/sparePartsOutLocationRecordDetail/index.ts new file mode 100644 index 0000000..afffa39 --- /dev/null +++ b/src/api/eam/sparePartsOutLocationRecordDetail/index.ts @@ -0,0 +1,76 @@ +import request from '@/config/axios' + +export interface SparePartsOutLocationRecordDetailVO { + id: number + number: string + theme: string + status: string + applyer: string + approver: number + approveContent: string + approveTime: Date + autoExamine: string + autoAgree: string + directCreateRecord: string + areaCode: string + locationCode: string + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询备件入库记录主列表 +export const getSparePartsOutLocationDetailRecordPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = { ...params } + return await request.post({ url: '/eam/spare-parts-out-location-detail-record/senior', data }) + } else { + return await request.get({ url: `/eam/spare-parts-out-location-detail-record/page`, params }) + } +} + +// 查询备件入库记录主详情 +export const getSparePartsOutLocationDetailRecord = async (id: number) => { + return await request.get({ url: `/eam/spare-parts-out-location-detail-record/get?id=` + id }) +} + +// 新增备件入库记录主 +export const createSparePartsOutLocationDetailRecord = async ( + data: SparePartsOutLocationRecordDetailVO +) => { + return await request.post({ url: `/eam/spare-parts-out-location-detail-record/create`, data }) +} + +// 修改备件入库记录主 +export const updateSparePartsOutLocationDetailRecord = async ( + data: SparePartsOutLocationRecordDetailVO +) => { + return await request.put({ url: `/eam/spare-parts-out-location-detail-record/update`, data }) +} + +// 删除备件入库记录主 +export const deleteSparePartsOutLocationDetailRecord = async (id: number) => { + return await request.delete({ + url: `/eam/spare-parts-out-location-detail-record/delete?id=` + id + }) +} + +// 导出备件入库记录主 Excel +export const exportSparePartsOutLocationDetailRecord = async (params) => { + return await request.download({ + url: `/eam/spare-parts-out-location-detail-record/export-excel`, + params + }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ + url: '/eam/spare-parts-out-location-detail-record/get-import-template' + }) +} diff --git a/src/api/eam/sparePartsOutLocationRecordDetail/sparePartsOutLocationDetailRecord.js b/src/api/eam/sparePartsOutLocationRecordDetail/sparePartsOutLocationDetailRecord.js new file mode 100644 index 0000000..4e84a94 --- /dev/null +++ b/src/api/eam/sparePartsOutLocationRecordDetail/sparePartsOutLocationDetailRecord.js @@ -0,0 +1,54 @@ +import request from '@/config/axios' + +// 创建领用出库记录子 +export function createSparePartsOutLocationRecordDetail(data) { + return request({ + url: '/eam/spare-parts-out-location-detail-record/create', + method: 'post', + data: data + }) +} + +// 更新领用出库记录子 +export function updateSparePartsOutLocationRecordDetail(data) { + return request({ + url: '/eam/spare-parts-out-location-detail-record/update', + method: 'put', + data: data + }) +} + +// 删除领用出库记录子 +export function deleteSparePartsOutLocationRecordDetail(id) { + return request({ + url: '/eam/spare-parts-out-location-detail-record/delete?id=' + id, + method: 'delete' + }) +} + +// 获得领用出库记录子 +export function getSparePartsOutLocationRecordDetail(id) { + return request({ + url: '/eam/spare-parts-out-location-detail-record/get?id=' + id, + method: 'get' + }) +} + +// 获得领用出库记录子分页 +export function getSparePartsOutLocationRecordDetailPage(query) { + return request({ + url: '/eam/spare-parts-out-location-detail-record/page', + method: 'get', + params: query + }) +} + +// 导出领用出库记录子 Excel +export function exportSparePartsOutLocationRecordDetailExcel(query) { + return request({ + url: '/eam/spare-parts-out-location-detail-record/export-excel', + method: 'get', + params: query, + responseType: 'blob' + }) +} diff --git a/src/api/eam/sparePartsOutLocationRecordMain/index.ts b/src/api/eam/sparePartsOutLocationRecordMain/index.ts new file mode 100644 index 0000000..4f075cc --- /dev/null +++ b/src/api/eam/sparePartsOutLocationRecordMain/index.ts @@ -0,0 +1,71 @@ +import request from '@/config/axios' + +export interface SparePartsOutLocationRecordMainVO { + id: number + number: string + theme: string + applyer: string + approver: number + approveContent: string + approveTime: Date + autoExamine: string + autoAgree: string + directCreateRecord: string + areaCode: string + locationCode: string + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询领用出库记录主列表 +export const getSparePartsOutLocationRecordMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = { ...params } + return await request.post({ url: '/eam/spare-parts-out-location-main-record/senior', data }) + } else { + return await request.get({ url: `/eam/spare-parts-out-location-main-record/page`, params }) + } +} + +// 查询领用出库记录主详情 +export const getSparePartsOutLocationRecordMain = async (id: number) => { + return await request.get({ url: `/eam/spare-parts-out-location-main-record/get?id=` + id }) +} + +// 新增领用出库记录主 +export const createSparePartsOutLocationRecordMain = async ( + data: SparePartsOutLocationRecordMainVO +) => { + return await request.post({ url: `/eam/spare-parts-out-location-main-record/create`, data }) +} + +// 修改领用出库记录主 +export const updateSparePartsOutLocationRecordMain = async ( + data: SparePartsOutLocationRecordMainVO +) => { + return await request.put({ url: `/eam/spare-parts-out-location-main-record/update`, data }) +} + +// 删除领用出库记录主 +export const deleteSparePartsOutLocationRecordMain = async (id: number) => { + return await request.delete({ url: `/eam/spare-parts-out-location-main-record/delete?id=` + id }) +} + +// 导出领用出库记录主 Excel +export const exportSparePartsOutLocationRecordMain = async (params) => { + return await request.download({ + url: `/eam/spare-parts-out-location-main-record/export-excel`, + params + }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/spare-parts-out-location-main-record/get-import-template' }) +} diff --git a/src/api/eam/spotCheckItem/index.ts b/src/api/eam/spotCheckItem/index.ts new file mode 100644 index 0000000..e1f587c --- /dev/null +++ b/src/api/eam/spotCheckItem/index.ts @@ -0,0 +1,62 @@ +import request from '@/config/axios' + +export interface SpotCheckItemVO { + id: number + content: string + equipmentParts: string + serialNumber: number + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询点检项列表 +export const getSpotCheckItemPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/basic/spot-check-item/senior', data }) + } else { + return await request.get({ url: `/eam/basic/spot-check-item/page`, params }) + } +} + +// 查询点检项详情 +export const getSpotCheckItem = async (id: number) => { + return await request.get({ url: `/eam/basic/spot-check-item/get?id=` + id }) +} + +// 新增点检项 +export const createSpotCheckItem = async (data: SpotCheckItemVO) => { + return await request.post({ url: `/eam/basic/spot-check-item/create`, data }) +} + +// 修改点检项 +export const updateSpotCheckItem = async (data: SpotCheckItemVO) => { + return await request.put({ url: `/eam/basic/spot-check-item/update`, data }) +} + +// 删除点检项 +export const deleteSpotCheckItem = async (id: number) => { + return await request.delete({ url: `/eam/basic/spot-check-item/delete?id=` + id }) +} + +// 导出点检项 Excel +export const exportSpotCheckItem = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = { ...params } + return await request.downloadPost({ url: `/eam/basic/spot-check-item/export-excel-senior`, data }) + } else { + return await request.download({ url: `/eam/basic/spot-check-item/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/basic/spot-check-item/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/eam/spotCheckSelectSet/index.ts b/src/api/eam/spotCheckSelectSet/index.ts new file mode 100644 index 0000000..dd6a604 --- /dev/null +++ b/src/api/eam/spotCheckSelectSet/index.ts @@ -0,0 +1,72 @@ +import request from '@/config/axios' + +export interface BasicSpotCheckSelectSetVO { + id: number + name: string + describing: string + itemCode: string + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询点检选择集维护列表 +export const getBasicSpotCheckSelectSetPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/basic/spot-check-select-set/senior', data }) + } else { + return await request.get({ url: `/eam/basic/spot-check-select-set/page`, params }) + } +} + +// 查询点检选择集维护详情 +export const getBasicSpotCheckSelectSet = async (id: number) => { + return await request.get({ url: `/eam/basic/spot-check-select-set/get?id=` + id }) +} + +// 新增点检选择集维护 +export const createBasicSpotCheckSelectSet = async (data: BasicSpotCheckSelectSetVO) => { + return await request.post({ url: `/eam/basic/spot-check-select-set/create`, data }) +} + +// 修改点检选择集维护 +export const updateBasicSpotCheckSelectSet = async (data: BasicSpotCheckSelectSetVO) => { + return await request.put({ url: `/eam/basic/spot-check-select-set/update`, data }) +} + +// 删除点检选择集维护 +export const deleteBasicSpotCheckSelectSet = async (id: number) => { + return await request.delete({ url: `/eam/basic/spot-check-select-set/delete?id=` + id }) +} + +// 导出点检选择集维护 Excel +export const exportBasicSpotCheckSelectSet = async (params) => { + return await request.download({ url: `/eam/basic/spot-check-select-set/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/basic/spot-check-select-set/get-import-template' }) +} + +// 启用 / 禁用 +export const updateEnableCode = async (data: BasicSpotCheckSelectSetVO) => { + return await request.post({ url: `/eam/basic/spot-check-select-set/ables` , data }) +} + + +// 查询点检项选择集列表 +export const getSpotCheckSelectSetList = async (params) => { + return await request.get({ url: `/eam/basic/spot-check-item/getList`, params }) +} + +// 查询点检方案项列表 +export const getRalSpotCheckOptionItemList = async (params) => { + return await request.get({url: `/eam/relation-spotCheck-option-item/getList?optionCode=` + params}) +} diff --git a/src/api/eam/tableDataExtendedAttribute/index.ts b/src/api/eam/tableDataExtendedAttribute/index.ts new file mode 100644 index 0000000..a1ca18d --- /dev/null +++ b/src/api/eam/tableDataExtendedAttribute/index.ts @@ -0,0 +1,65 @@ +import request from '@/config/axios' + +export interface TableDataExtendedAttributeVO { + id: number + tableName: string + dataId: string + fieldName: string + fieldVal: string + siteId: string + available: string + departmentCode: number + remark: string + concurrencyStamp: number +} + +// 查询表数据扩展属性字段列表 +export const getTableDataExtendedAttributePage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/table-data-extended-attribute/senior', data }) + } else { + return await request.get({ url: `/eam/table-data-extended-attribute/page`, params }) + } +} + +// 查询表数据扩展属性字段详情 +export const getTableDataExtendedAttribute = async (id: number) => { + return await request.get({ url: `/eam/table-data-extended-attribute/get?id=` + id }) +} + +// 新增表数据扩展属性字段 +export const createTableDataExtendedAttribute = async (data: TableDataExtendedAttributeVO) => { + return await request.post({ url: `/eam/table-data-extended-attribute/create`, data }) +} + +// 修改表数据扩展属性字段 +export const updateTableDataExtendedAttribute = async (data: TableDataExtendedAttributeVO) => { + return await request.put({ url: `/eam/table-data-extended-attribute/update`, data }) +} + +// 删除表数据扩展属性字段 +export const deleteTableDataExtendedAttribute = async (id: number) => { + return await request.delete({ url: `/eam/table-data-extended-attribute/delete?id=` + id }) +} + +// 导出表数据扩展属性字段 Excel +export const exportTableDataExtendedAttribute = async (params) => { + return await request.download({ url: `/eam/table-data-extended-attribute/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/table-data-extended-attribute/get-import-template' }) +} + +// 查询表数据扩展属性字段列表 +export const getTableDataExtendedAttributeNoPage = async (params) => { + return await request.get({ url: `/eam/table-data-extended-attribute/noPage`, params }) +} + +// 新增表数据扩展属性字段 +export const createTableDataExtendedAttributeBatch = async (data: Object) => { + return await request.post({ url: `/eam/table-data-extended-attribute/createBatch`, data }) +} diff --git a/src/api/eam/toolAccounts/index.ts b/src/api/eam/toolAccounts/index.ts new file mode 100644 index 0000000..bf93820 --- /dev/null +++ b/src/api/eam/toolAccounts/index.ts @@ -0,0 +1,84 @@ +import request from '@/config/axios' + +export interface ToolAccountsVO { + id: number + code: string + name: string + specification: string + type: string + equity: string + electricMachine: string + isCustomerAptitude: boolean + customerId: string + storageLocation: string + useDept: string + principal: string + principalTelephone: string + status: string + startDate: Date + supplierCode: string + purchaseTime: Date + purchaseDept: string + purchaser: string + productionDate: Date + manufactureCode: string + equipmentLife: string + acceptanceDate: Date + purchasePrice: number + factoryAreaCode: string + workshopCode: string + workshopSectionCode: string + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询工装台账列表 +export const getToolAccountsPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/tool/tool-accounts/senior', data }) + } else { + return await request.get({ url: `/eam/tool/tool-accounts/page`, params }) + } +} + +// 查询工装台账详情 +export const getToolAccounts = async (id: number) => { + return await request.get({ url: `/eam/tool/tool-accounts/get?id=` + id }) +} + +// 新增工装台账 +export const createToolAccounts = async (data: ToolAccountsVO) => { + return await request.post({ url: `/eam/tool/tool-accounts/create`, data }) +} + +// 修改工装台账 +export const updateToolAccounts = async (data: ToolAccountsVO) => { + return await request.put({ url: `/eam/tool/tool-accounts/update`, data }) +} + +// 删除工装台账 +export const deleteToolAccounts = async (id: number) => { + return await request.delete({ url: `/eam/tool/tool-accounts/delete?id=` + id }) +} + +// 导出工装台账 Excel +export const exportToolAccounts = async (params) => { + return await request.download({ url: `/eam/tool/tool-accounts/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/tool/tool-accounts/get-import-template' }) +} + +// 查询工装台账列表 +export const getToolAccountsNoPage = async (params) => { + return await request.get({ url: `/eam/tool/tool-accounts/noPage`, params }) +} \ No newline at end of file diff --git a/src/api/eam/toolChangedRecord/index.ts b/src/api/eam/toolChangedRecord/index.ts new file mode 100644 index 0000000..c3b32e0 --- /dev/null +++ b/src/api/eam/toolChangedRecord/index.ts @@ -0,0 +1,59 @@ +import request from '@/config/axios' + +export interface ToolChangedRecordVO { + id: number + code: string + name: string + statusBefore: string + statusAfter: string + operator: number + operateTime: Date + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询设备变更记录列表 +export const getToolChangedRecordPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/tool-changed-record/senior', data }) + } else { + return await request.get({ url: `/eam/tool-changed-record/page`, params }) + } +} + +// 查询设备变更记录详情 +export const getToolChangedRecord = async (id: number) => { + return await request.get({ url: `/eam/tool-changed-record/get?id=` + id }) +} + +// 新增设备变更记录 +export const createToolChangedRecord = async (data: ToolChangedRecordVO) => { + return await request.post({ url: `/eam/tool-changed-record/create`, data }) +} + +// 修改设备变更记录 +export const updateToolChangedRecord = async (data: ToolChangedRecordVO) => { + return await request.put({ url: `/eam/tool-changed-record/update`, data }) +} + +// 删除设备变更记录 +export const deleteToolChangedRecord = async (id: number) => { + return await request.delete({ url: `/eam/tool-changed-record/delete?id=` + id }) +} + +// 导出设备变更记录 Excel +export const exportToolChangedRecord = async (params) => { + return await request.download({ url: `/eam/tool-changed-record/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/tool-changed-record/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/eam/toolEquipmentIn/index.ts b/src/api/eam/toolEquipmentIn/index.ts new file mode 100644 index 0000000..d175f6d --- /dev/null +++ b/src/api/eam/toolEquipmentIn/index.ts @@ -0,0 +1,64 @@ +import request from '@/config/axios' + +export interface ToolEquipmentInVO { + id: number + describing: string + toolCode: string + status: string + approver: number + approveContent: string + approveTime: Date + factoryAreaCode: string + workshopCode: string + lineCode: string + processCode: string + workstationCode: string + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询工装入库记录列表 +export const getToolEquipmentInPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/tool/tool-equipment-in/senior', data }) + } else { + return await request.get({ url: `/eam/tool/tool-equipment-in/page`, params }) + } +} + +// 查询工装入库记录详情 +export const getToolEquipmentIn = async (id: number) => { + return await request.get({ url: `/eam/tool/tool-equipment-in/get?id=` + id }) +} + +// 新增工装入库记录 +export const createToolEquipmentIn = async (data: ToolEquipmentInVO) => { + return await request.post({ url: `/eam/tool/tool-equipment-in/create`, data }) +} + +// 修改工装入库记录 +export const updateToolEquipmentIn = async (data: ToolEquipmentInVO) => { + return await request.put({ url: `/eam/tool/tool-equipment-in/update`, data }) +} + +// 删除工装入库记录 +export const deleteToolEquipmentIn = async (id: number) => { + return await request.delete({ url: `/eam/tool/tool-equipment-in/delete?id=` + id }) +} + +// 导出工装入库记录 Excel +export const exportToolEquipmentIn = async (params) => { + return await request.download({ url: `/eam/tool/tool-equipment-in/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/tool/tool-equipment-in/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/eam/toolEquipmentOut/index.ts b/src/api/eam/toolEquipmentOut/index.ts new file mode 100644 index 0000000..7ffda68 --- /dev/null +++ b/src/api/eam/toolEquipmentOut/index.ts @@ -0,0 +1,64 @@ +import request from '@/config/axios' + +export interface ToolEquipmentOutVO { + id: number + theme: string + toolCode: string + type: string + qty: number + status: string + applyer: string + approver: number + approveContent: string + approveTime: Date + autoExamine: string + autoAgree: string + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询工装出库记录列表 +export const getToolEquipmentOutPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/tool/tool-equipment-out/senior', data }) + } else { + return await request.get({ url: `/eam/tool/tool-equipment-out/page`, params }) + } +} + +// 查询工装出库记录详情 +export const getToolEquipmentOut = async (id: number) => { + return await request.get({ url: `/eam/tool/tool-equipment-out/get?id=` + id }) +} + +// 新增工装出库记录 +export const createToolEquipmentOut = async (data: ToolEquipmentOutVO) => { + return await request.post({ url: `/eam/tool/tool-equipment-out/create`, data }) +} + +// 修改工装出库记录 +export const updateToolEquipmentOut = async (data: ToolEquipmentOutVO) => { + return await request.put({ url: `/eam/tool/tool-equipment-out/update`, data }) +} + +// 删除工装出库记录 +export const deleteToolEquipmentOut = async (id: number) => { + return await request.delete({ url: `/eam/tool/tool-equipment-out/delete?id=` + id }) +} + +// 导出工装出库记录 Excel +export const exportToolEquipmentOut = async (params) => { + return await request.download({ url: `/eam/tool/tool-equipment-out/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/tool/tool-equipment-out/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/eam/toolMod/index.ts b/src/api/eam/toolMod/index.ts new file mode 100644 index 0000000..507aa8e --- /dev/null +++ b/src/api/eam/toolMod/index.ts @@ -0,0 +1,61 @@ +import request from '@/config/axios' + +export interface ToolModVO { + id: number + modCode: string + toolCode: string + type: string + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询工装物料关联列表 +export const getToolModPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/basic/tool-mod/senior', data }) + } else { + return await request.get({ url: `/eam/basic/tool-mod/page`, params }) + } +} + +// 查询工装物料关联详情 +export const getToolMod = async (id: number) => { + return await request.get({ url: `/eam/basic/tool-mod/get?id=` + id }) +} + +// 新增工装物料关联 +export const createToolMod = async (data: ToolModVO) => { + return await request.post({ url: `/eam/basic/tool-mod/create`, data }) +} + +// 修改工装物料关联 +export const updateToolMod = async (data: ToolModVO) => { + return await request.put({ url: `/eam/basic/tool-mod/update`, data }) +} + +// 删除工装物料关联 +export const deleteToolMod = async (id: number) => { + return await request.delete({ url: `/eam/basic/tool-mod/delete?id=` + id }) +} + +// 导出工装物料关联 Excel +export const exportToolMod = async (params) => { + return await request.download({ url: `/eam/basic/tool-mod/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/basic/tool-mod/get-import-template' }) +} + +// 新增工装物料关联 +export const createToolModBatch = async (data: ToolModVO) => { + return await request.post({ url: `/eam/basic/tool-mod/createBatch`, data }) +} diff --git a/src/api/eam/toolSigning/index.ts b/src/api/eam/toolSigning/index.ts new file mode 100644 index 0000000..66fca87 --- /dev/null +++ b/src/api/eam/toolSigning/index.ts @@ -0,0 +1,79 @@ +import request from '@/config/axios' + +export interface ToolSigningVO { + id: number + toolCode: string + operationDate: Date + operationer: string + operationDept: string + telephone: string + supplierCode: string + supplierPeople: string + supplierTelephone: string + status: string + approver: number + approveContent: string + approveTime: Date + autoExamine: string + autoAgree: string + directCreateRecord: string + storageLocation: string + factoryAreaCode: string + workshopCode: string + lineCode: string + processCode: string + workstationCode: string + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询工装到货签收记录列表 +export const getToolSigningPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/tool-signing/senior', data }) + } else { + return await request.get({ url: `/eam/tool-signing/page`, params }) + } +} + +// 查询工装到货签收记录详情 +export const getToolSigning = async (id: number) => { + return await request.get({ url: `/eam/tool-signing/get?id=` + id }) +} + +// 新增工装到货签收记录 +export const createToolSigning = async (data: ToolSigningVO) => { + return await request.post({ url: `/eam/tool-signing/create`, data }) +} + +// 新增工装到货签收记录 +export const createToolSigningNew = async (data: ToolSigningVO) => { + return await request.post({ url: `/eam/tool-signing/createNew`, data }) +} + +// 修改工装到货签收记录 +export const updateToolSigning = async (data: ToolSigningVO) => { + return await request.put({ url: `/eam/tool-signing/update`, data }) +} + +// 删除工装到货签收记录 +export const deleteToolSigning = async (id: number) => { + return await request.delete({ url: `/eam/tool-signing/delete?id=` + id }) +} + +// 导出工装到货签收记录 Excel +export const exportToolSigning = async (params) => { + return await request.download({ url: `/eam/tool-signing/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/tool-signing/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/eam/transaction/index.ts b/src/api/eam/transaction/index.ts new file mode 100644 index 0000000..c11588a --- /dev/null +++ b/src/api/eam/transaction/index.ts @@ -0,0 +1,53 @@ +import request from '@/config/axios' + +export interface TransactionVO { + itemNumber: string + locationNumber: string + transactionType: string + inventoryAction: string + businessType: string + inventoryStatus: string + uom: string + qty: number +} + +// 查询库存事务列表 +export const getTransactionPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/eam/transaction/senior', data }) + } else { + return await request.get({ url: `/eam/transaction/page`, params }) + } +} + +// 查询库存事务详情 +export const getTransaction = async (id: number) => { + return await request.get({ url: `/eam/transaction/get?id=` + id }) +} + +// 新增库存事务 +export const createTransaction = async (data: TransactionVO) => { + return await request.post({ url: `/eam/transaction/create`, data }) +} + +// 修改库存事务 +export const updateTransaction = async (data: TransactionVO) => { + return await request.put({ url: `/eam/transaction/update`, data }) +} + +// 删除库存事务 +export const deleteTransaction = async (id: number) => { + return await request.delete({ url: `/eam/transaction/delete?id=` + id }) +} + +// 导出库存事务 Excel +export const exportTransaction = async (params) => { + return await request.download({ url: `/eam/transaction/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/eam/transaction/get-import-template' }) +} diff --git a/src/api/home/index.ts b/src/api/home/index.ts new file mode 100644 index 0000000..dee1700 --- /dev/null +++ b/src/api/home/index.ts @@ -0,0 +1,59 @@ +import request from '@/config/axios' + +// 供应商首页 +export const getSupplierData = async () => { + return await request.get({ url: `/wms/index/indexSupplier` }) +} + +// 原料管理员首页 +export const getMaterialData = async () => { + return await request.get({ url: `/wms/index/indexMaterial` }) +} + +// 生产管理员首页 +export const getProduceData = async () => { + return await request.get({ url: `/wms/index/indexProduce` }) +} + +// 成品管理员首页 +export const getProductData = async () => { + return await request.get({ url: `/wms/index/indexProduct` }) +} + +// 超期库存预警 +export const getOverdueBalance = async (params) => { + return await request.get({ url: `/wms/index/pageOverdueBalance`,params }) +} + +// 呆滞库存预警 +export const getStagnantBalance = async (params) => { + return await request.get({ url: `/wms/index/pageStagnantBalance` ,params}) +} +// 高低储预警 +export const getWarningBalance = async (params) => { + return await request.get({ url: `/wms/index/pageWarningBalance` ,params}) +} + +// 本月退货明细 +export const getPurchasereturnRecordMonth = async (params) => { + return await request.get({ url: `/wms/index/pagePurchasereturnRecordMonth`,params }) +} + +// 本月索赔明细 +export const getPurchaseclaimRecordMonth = async (params) => { + return await request.get({ url: `/wms/index/pagePurchaseclaimRecordMonth`,params }) +} + +// 今日生产计划 +export const getProductionToday = async (params) => { + return await request.get({ url: `/wms/index/pageProductionToday`,params }) +} + +// 线边安全库存 +export const getSafeLocation = async (params) => { + return await request.get({ url: `/wms/index/pageSafeLocation`,params }) +} +// 待上架成品库存 +export const getProductputawayJobDetail = async (params) => { + return await request.get({ url: `/wms/index/pageProductputawayJobDetail`,params }) +} \ No newline at end of file diff --git a/src/api/infra/apiAccessLog/index.ts b/src/api/infra/apiAccessLog/index.ts new file mode 100644 index 0000000..c6b4b45 --- /dev/null +++ b/src/api/infra/apiAccessLog/index.ts @@ -0,0 +1,30 @@ +import request from '@/config/axios' + +export interface ApiAccessLogVO { + id: number + traceId: string + userId: number + userType: number + applicationName: string + requestMethod: string + requestParams: string + requestUrl: string + userIp: string + userAgent: string + beginTime: Date + endTIme: Date + duration: number + resultCode: number + resultMsg: string + createTime: Date +} + +// 查询列表API 访问日志 +export const getApiAccessLogPage = (params: PageParam) => { + return request.get({ url: '/infra/api-access-log/page', params }) +} + +// 导出API 访问日志 +export const exportApiAccessLog = (params) => { + return request.download({ url: '/infra/api-access-log/export-excel', params }) +} diff --git a/src/api/infra/apiErrorLog/index.ts b/src/api/infra/apiErrorLog/index.ts new file mode 100644 index 0000000..59ee214 --- /dev/null +++ b/src/api/infra/apiErrorLog/index.ts @@ -0,0 +1,48 @@ +import request from '@/config/axios' + +export interface ApiErrorLogVO { + id: number + traceId: string + userId: number + userType: number + applicationName: string + requestMethod: string + requestParams: string + requestUrl: string + userIp: string + userAgent: string + exceptionTime: Date + exceptionName: string + exceptionMessage: string + exceptionRootCauseMessage: string + exceptionStackTrace: string + exceptionClassName: string + exceptionFileName: string + exceptionMethodName: string + exceptionLineNumber: number + processUserId: number + processStatus: number + processTime: Date + resultCode: number + createTime: Date +} + +// 查询列表API 访问日志 +export const getApiErrorLogPage = (params: PageParam) => { + return request.get({ url: '/infra/api-error-log/page', params }) +} + +// 更新 API 错误日志的处理状态 +export const updateApiErrorLogPage = (id: number, processStatus: number) => { + return request.put({ + url: '/infra/api-error-log/update-status?id=' + id + '&processStatus=' + processStatus + }) +} + +// 导出API 访问日志 +export const exportApiErrorLog = (params) => { + return request.download({ + url: '/infra/api-error-log/export-excel', + params + }) +} diff --git a/src/api/infra/codegen/index.ts b/src/api/infra/codegen/index.ts new file mode 100644 index 0000000..64701ef --- /dev/null +++ b/src/api/infra/codegen/index.ts @@ -0,0 +1,123 @@ +import request from '@/config/axios' + +export type CodegenTableVO = { + id: number + tableId: number + isParentMenuIdValid: boolean + dataSourceConfigId: number + scene: number + tableName: string + tableComment: string + remark: string + moduleName: string + businessName: string + className: string + classComment: string + author: string + createTime: Date + updateTime: Date + templateType: number + parentMenuId: number +} + +export type CodegenColumnVO = { + id: number + tableId: number + columnName: string + dataType: string + columnComment: string + nullable: number + primaryKey: number + autoIncrement: string + ordinalPosition: number + javaType: string + javaField: string + dictType: string + example: string + createOperation: number + updateOperation: number + listOperation: number + listOperationCondition: string + listOperationResult: number + htmlType: string +} + +export type DatabaseTableVO = { + name: string + comment: string +} + +export type CodegenDetailVO = { + table: CodegenTableVO + columns: CodegenColumnVO[] +} + +export type CodegenPreviewVO = { + filePath: string + code: string +} + +export type CodegenUpdateReqVO = { + table: CodegenTableVO | any + columns: CodegenColumnVO[] +} + +export type CodegenCreateListReqVO = { + dataSourceConfigId: number + tableNames: string[] +} + +// 查询列表代码生成表定义 +export const getCodegenTablePage = (params: PageParam) => { + return request.get({ url: '/infra/codegen/table/page', params }) +} + +// 查询详情代码生成表定义 +export const getCodegenTable = (id: number) => { + return request.get({ url: '/infra/codegen/detail?tableId=' + id }) +} + +// 新增代码生成表定义 +export const createCodegenTable = (data: CodegenCreateListReqVO) => { + return request.post({ url: '/infra/codegen/create', data }) +} + +// 修改代码生成表定义 +export const updateCodegenTable = (data: CodegenUpdateReqVO) => { + return request.put({ url: '/infra/codegen/update', data }) +} + +// 基于数据库的表结构,同步数据库的表和字段定义 +export const syncCodegenFromDB = (id: number) => { + return request.put({ url: '/infra/codegen/sync-from-db?tableId=' + id }) +} + +// 基于 SQL 建表语句,同步数据库的表和字段定义 +export const syncCodegenFromSQL = (id: number, sql: string) => { + return request.put({ url: '/infra/codegen/sync-from-sql?tableId=' + id + '&sql=' + sql }) +} + +// 预览生成代码 +export const previewCodegen = (id: number) => { + return request.get({ url: '/infra/codegen/preview?tableId=' + id }) +} + +// 下载生成代码 +export const downloadCodegen = (id: number) => { + return request.download({ url: '/infra/codegen/download?tableId=' + id }) +} + +// 获得表定义 +export const getSchemaTableList = (params) => { + return request.get({ url: '/infra/codegen/db/table/list', params }) +} + +// 基于数据库的表结构,创建代码生成器的表定义 +export const createCodegenList = (data) => { + return request.post({ url: '/infra/codegen/create-list', data }) +} + +// 删除代码生成表定义 +export const deleteCodegenTable = (id: number) => { + return request.delete({ url: '/infra/codegen/delete?tableId=' + id }) +} diff --git a/src/api/infra/config/index.ts b/src/api/infra/config/index.ts new file mode 100644 index 0000000..d9b0031 --- /dev/null +++ b/src/api/infra/config/index.ts @@ -0,0 +1,57 @@ +import request from '@/config/axios' + +export interface ConfigVO { + id: number | undefined + category: string + name: string + key: string + value: string + itemType: string + areaType: string + inventoryStatus: string + type: number + visible: boolean + remark: string + createTime: Date + locoationCode: string +} + +// 查询参数列表 +export const getConfigPage = (params: PageParam) => { + return request.get({ url: '/infra/config/page', params }) +} + +// 查询参数详情 +export const getConfig = (id: number) => { + return request.get({ url: '/infra/config/get?id=' + id }) +} + +// 根据参数键名查询参数值 +export const getConfigKey = (configKey: string) => { + return request.get({ url: '/infra/config/get-value-by-key?key=' + configKey }) +} + +// 根据参数键名查询参数值 +export const queryByKey = (configKey: string) => { + return request.get({ url: '/infra/config/queryByKey?key=' + configKey }) +} + +// 新增参数 +export const createConfig = (data: ConfigVO) => { + return request.post({ url: '/infra/config/create', data }) +} + +// 修改参数 +export const updateConfig = (data: ConfigVO) => { + return request.put({ url: '/infra/config/update', data }) +} + +// 删除参数 +export const deleteConfig = (id: number) => { + return request.delete({ url: '/infra/config/delete?id=' + id }) +} + +// 导出参数 +export const exportConfig = (params) => { + return request.download({ url: '/infra/config/export', params }) +} diff --git a/src/api/infra/dataSourceConfig/index.ts b/src/api/infra/dataSourceConfig/index.ts new file mode 100644 index 0000000..b413f34 --- /dev/null +++ b/src/api/infra/dataSourceConfig/index.ts @@ -0,0 +1,35 @@ +import request from '@/config/axios' + +export interface DataSourceConfigVO { + id: number | undefined + name: string + url: string + username: string + password: string + createTime?: Date +} + +// 新增数据源配置 +export const createDataSourceConfig = (data: DataSourceConfigVO) => { + return request.post({ url: '/infra/data-source-config/create', data }) +} + +// 修改数据源配置 +export const updateDataSourceConfig = (data: DataSourceConfigVO) => { + return request.put({ url: '/infra/data-source-config/update', data }) +} + +// 删除数据源配置 +export const deleteDataSourceConfig = (id: number) => { + return request.delete({ url: '/infra/data-source-config/delete?id=' + id }) +} + +// 查询数据源配置详情 +export const getDataSourceConfig = (id: number) => { + return request.get({ url: '/infra/data-source-config/get?id=' + id }) +} + +// 查询数据源配置列表 +export const getDataSourceConfigList = () => { + return request.get({ url: '/infra/data-source-config/list' }) +} diff --git a/src/api/infra/dbDoc/index.ts b/src/api/infra/dbDoc/index.ts new file mode 100644 index 0000000..1a1a36b --- /dev/null +++ b/src/api/infra/dbDoc/index.ts @@ -0,0 +1,16 @@ +import request from '@/config/axios' + +// 导出Html +export const exportHtml = () => { + return request.download({ url: '/infra/db-doc/export-html' }) +} + +// 导出Word +export const exportWord = () => { + return request.download({ url: '/infra/db-doc/export-word' }) +} + +// 导出Markdown +export const exportMarkdown = () => { + return request.download({ url: '/infra/db-doc/export-markdown' }) +} diff --git a/src/api/infra/file/index.ts b/src/api/infra/file/index.ts new file mode 100644 index 0000000..f64bc0d --- /dev/null +++ b/src/api/infra/file/index.ts @@ -0,0 +1,17 @@ +import request from '@/config/axios' + +export interface FilePageReqVO extends PageParam { + path?: string + type?: string + createTime?: Date[] +} + +// 查询文件列表 +export const getFilePage = (params: FilePageReqVO) => { + return request.get({ url: '/infra/file/page', params }) +} + +// 删除文件 +export const deleteFile = (id: number) => { + return request.delete({ url: '/infra/file/delete?id=' + id }) +} diff --git a/src/api/infra/fileConfig/index.ts b/src/api/infra/fileConfig/index.ts new file mode 100644 index 0000000..b72f18b --- /dev/null +++ b/src/api/infra/fileConfig/index.ts @@ -0,0 +1,61 @@ +import request from '@/config/axios' + +export interface FileClientConfig { + basePath: string + host?: string + port?: number + username?: string + password?: string + mode?: string + endpoint?: string + bucket?: string + accessKey?: string + accessSecret?: string + domain: string +} + +export interface FileConfigVO { + id: number + name: string + storage: any + master: boolean + visible: boolean + config: FileClientConfig + remark: string + createTime: Date +} + +// 查询文件配置列表 +export const getFileConfigPage = (params: PageParam) => { + return request.get({ url: '/infra/file-config/page', params }) +} + +// 查询文件配置详情 +export const getFileConfig = (id: number) => { + return request.get({ url: '/infra/file-config/get?id=' + id }) +} + +// 更新文件配置为主配置 +export const updateFileConfigMaster = (id: number) => { + return request.put({ url: '/infra/file-config/update-master?id=' + id }) +} + +// 新增文件配置 +export const createFileConfig = (data: FileConfigVO) => { + return request.post({ url: '/infra/file-config/create', data }) +} + +// 修改文件配置 +export const updateFileConfig = (data: FileConfigVO) => { + return request.put({ url: '/infra/file-config/update', data }) +} + +// 删除文件配置 +export const deleteFileConfig = (id: number) => { + return request.delete({ url: '/infra/file-config/delete?id=' + id }) +} + +// 测试文件配置 +export const testFileConfig = (id: number) => { + return request.get({ url: '/infra/file-config/test?id=' + id }) +} diff --git a/src/api/infra/job/index.ts b/src/api/infra/job/index.ts new file mode 100644 index 0000000..033b2cb --- /dev/null +++ b/src/api/infra/job/index.ts @@ -0,0 +1,63 @@ +import request from '@/config/axios' + +export interface JobVO { + id: number + name: string + status: number + handlerName: string + handlerParam: string + cronExpression: string + retryCount: number + retryInterval: number + monitorTimeout: number + createTime: Date +} + +// 任务列表 +export const getJobPage = (params: PageParam) => { + return request.get({ url: '/infra/job/page', params }) +} + +// 任务详情 +export const getJob = (id: number) => { + return request.get({ url: '/infra/job/get?id=' + id }) +} + +// 新增任务 +export const createJob = (data: JobVO) => { + return request.post({ url: '/infra/job/create', data }) +} + +// 修改定时任务调度 +export const updateJob = (data: JobVO) => { + return request.put({ url: '/infra/job/update', data }) +} + +// 删除定时任务调度 +export const deleteJob = (id: number) => { + return request.delete({ url: '/infra/job/delete?id=' + id }) +} + +// 导出定时任务调度 +export const exportJob = (params) => { + return request.download({ url: '/infra/job/export-excel', params }) +} + +// 任务状态修改 +export const updateJobStatus = (id: number, status: number) => { + const params = { + id, + status + } + return request.put({ url: '/infra/job/update-status', params }) +} + +// 定时任务立即执行一次 +export const runJob = (id: number) => { + return request.put({ url: '/infra/job/trigger?id=' + id }) +} + +// 获得定时任务的下 n 次执行时间 +export const getJobNextTimes = (id: number) => { + return request.get({ url: '/infra/job/get_next_times?id=' + id }) +} diff --git a/src/api/infra/jobLog/index.ts b/src/api/infra/jobLog/index.ts new file mode 100644 index 0000000..f429cd9 --- /dev/null +++ b/src/api/infra/jobLog/index.ts @@ -0,0 +1,33 @@ +import request from '@/config/axios' + +export interface JobLogVO { + id: number + jobId: number + handlerName: string + handlerParam: string + cronExpression: string + executeIndex: string + beginTime: string + endTime: string + duration: string + status: number + createTime: string +} + +// 任务日志列表 +export const getJobLogPage = (params: PageParam) => { + return request.get({ url: '/infra/job-log/page', params }) +} + +// 任务日志详情 +export const getJobLog = (id: number) => { + return request.get({ url: '/infra/job-log/get?id=' + id }) +} + +// 导出定时任务日志 +export const exportJobLog = (params) => { + return request.download({ + url: '/infra/job-log/export-excel', + params + }) +} diff --git a/src/api/infra/redis/index.ts b/src/api/infra/redis/index.ts new file mode 100644 index 0000000..f27be77 --- /dev/null +++ b/src/api/infra/redis/index.ts @@ -0,0 +1,8 @@ +import request from '@/config/axios' + +/** + * 获取redis 监控信息 + */ +export const getCache = () => { + return request.get({ url: '/infra/redis/get-monitor-info' }) +} diff --git a/src/api/infra/redis/types.ts b/src/api/infra/redis/types.ts new file mode 100644 index 0000000..548bfe9 --- /dev/null +++ b/src/api/infra/redis/types.ts @@ -0,0 +1,176 @@ +export interface RedisMonitorInfoVO { + info: RedisInfoVO + dbSize: number + commandStats: RedisCommandStatsVO[] +} + +export interface RedisInfoVO { + io_threaded_reads_processed: string + tracking_clients: string + uptime_in_seconds: string + cluster_connections: string + current_cow_size: string + maxmemory_human: string + aof_last_cow_size: string + master_replid2: string + mem_replication_backlog: string + aof_rewrite_scheduled: string + total_net_input_bytes: string + rss_overhead_ratio: string + hz: string + current_cow_size_age: string + redis_build_id: string + errorstat_BUSYGROUP: string + aof_last_bgrewrite_status: string + multiplexing_api: string + client_recent_max_output_buffer: string + allocator_resident: string + mem_fragmentation_bytes: string + aof_current_size: string + repl_backlog_first_byte_offset: string + tracking_total_prefixes: string + redis_mode: string + redis_git_dirty: string + aof_delayed_fsync: string + allocator_rss_bytes: string + repl_backlog_histlen: string + io_threads_active: string + rss_overhead_bytes: string + total_system_memory: string + loading: string + evicted_keys: string + maxclients: string + cluster_enabled: string + redis_version: string + repl_backlog_active: string + mem_aof_buffer: string + allocator_frag_bytes: string + io_threaded_writes_processed: string + instantaneous_ops_per_sec: string + used_memory_human: string + total_error_replies: string + role: string + maxmemory: string + used_memory_lua: string + rdb_current_bgsave_time_sec: string + used_memory_startup: string + used_cpu_sys_main_thread: string + lazyfree_pending_objects: string + aof_pending_bio_fsync: string + used_memory_dataset_perc: string + allocator_frag_ratio: string + arch_bits: string + used_cpu_user_main_thread: string + mem_clients_normal: string + expired_time_cap_reached_count: string + unexpected_error_replies: string + mem_fragmentation_ratio: string + aof_last_rewrite_time_sec: string + master_replid: string + aof_rewrite_in_progress: string + lru_clock: string + maxmemory_policy: string + run_id: string + latest_fork_usec: string + tracking_total_items: string + total_commands_processed: string + expired_keys: string + errorstat_ERR: string + used_memory: string + module_fork_in_progress: string + errorstat_WRONGPASS: string + aof_buffer_length: string + dump_payload_sanitizations: string + mem_clients_slaves: string + keyspace_misses: string + server_time_usec: string + executable: string + lazyfreed_objects: string + db0: string + used_memory_peak_human: string + keyspace_hits: string + rdb_last_cow_size: string + aof_pending_rewrite: string + used_memory_overhead: string + active_defrag_hits: string + tcp_port: string + uptime_in_days: string + used_memory_peak_perc: string + current_save_keys_processed: string + blocked_clients: string + total_reads_processed: string + expire_cycle_cpu_milliseconds: string + sync_partial_err: string + used_memory_scripts_human: string + aof_current_rewrite_time_sec: string + aof_enabled: string + process_supervised: string + master_repl_offset: string + used_memory_dataset: string + used_cpu_user: string + rdb_last_bgsave_status: string + tracking_total_keys: string + atomicvar_api: string + allocator_rss_ratio: string + client_recent_max_input_buffer: string + clients_in_timeout_table: string + aof_last_write_status: string + mem_allocator: string + used_memory_scripts: string + used_memory_peak: string + process_id: string + master_failover_state: string + errorstat_NOAUTH: string + used_cpu_sys: string + repl_backlog_size: string + connected_slaves: string + current_save_keys_total: string + gcc_version: string + total_system_memory_human: string + sync_full: string + connected_clients: string + module_fork_last_cow_size: string + total_writes_processed: string + allocator_active: string + total_net_output_bytes: string + pubsub_channels: string + current_fork_perc: string + active_defrag_key_hits: string + rdb_changes_since_last_save: string + instantaneous_input_kbps: string + used_memory_rss_human: string + configured_hz: string + expired_stale_perc: string + active_defrag_misses: string + used_cpu_sys_children: string + number_of_cached_scripts: string + sync_partial_ok: string + used_memory_lua_human: string + rdb_last_save_time: string + pubsub_patterns: string + slave_expires_tracked_keys: string + redis_git_sha1: string + used_memory_rss: string + rdb_last_bgsave_time_sec: string + os: string + mem_not_counted_for_evict: string + active_defrag_running: string + rejected_connections: string + aof_rewrite_buffer_length: string + total_forks: string + active_defrag_key_misses: string + allocator_allocated: string + aof_base_size: string + instantaneous_output_kbps: string + second_repl_offset: string + rdb_bgsave_in_progress: string + used_cpu_user_children: string + total_connections_received: string + migrate_cached_sockets: string +} + +export interface RedisCommandStatsVO { + command: string + calls: number + usec: number +} diff --git a/src/api/login/index.ts b/src/api/login/index.ts new file mode 100644 index 0000000..7f30be3 --- /dev/null +++ b/src/api/login/index.ts @@ -0,0 +1,83 @@ +import request from '@/config/axios' +import { getRefreshToken } from '@/utils/auth' +import type { UserLoginVO } from './types' + +export interface SmsCodeVO { + mobile: string + scene: number +} + +export interface SmsLoginVO { + mobile: string + code: string +} + +// 登录 +export const login = (data: UserLoginVO) => { + return request.post({ url: '/system/auth/login', data }) +} +export const loginNoCode = (data: UserLoginVO) => { + return request.post({ url: '/system/auth/loginNoCode', data }) +} +// 刷新访问令牌 +export const refreshToken = () => { + return request.post({ url: '/system/auth/refresh-token?refreshToken=' + getRefreshToken() }) +} + +// 使用租户名,获得租户编号 +export const getTenantIdByName = (name: string) => { + return request.get({ url: '/system/tenant/get-id-by-name?name=' + name }) +} + +// 登出 +export const loginOut = () => { + return request.post({ url: '/system/auth/logout' }) +} + +// 获取用户权限信息 +export const getInfo = () => { + return request.get({ url: '/system/auth/get-permission-info' }) +} + +//获取登录验证码 +export const sendSmsCode = (data: SmsCodeVO) => { + return request.post({ url: '/system/auth/send-sms-code', data }) +} + +// 短信验证码登录 +export const smsLogin = (data: SmsLoginVO) => { + return request.post({ url: '/system/auth/sms-login', data }) +} + +// 社交授权的跳转 +export const socialAuthRedirect = (type: number, redirectUri: string) => { + return request.get({ + url: '/system/auth/social-auth-redirect?type=' + type + '&redirectUri=' + redirectUri + }) +} +// 获取验证图片以及 token +export const getCode = (data) => { + return request.postOriginal({ url: 'system/captcha/get', data }) +} + +// 获取验证图片以及 token +export const getCodeCaptchaImage = (params) => { + return request.get({ url: 'system/captcha/captchaImage', params }) +} + +// 滑动或者点选验证 +export const reqCheck = (data) => { + return request.postOriginal({ url: 'system/captcha/check', data }) +} + +// 获取验证码 +export const getCodeImg = () => { + return request.get({ + url: 'system/captcha/captchaImage', headers: { + isToken: false + }}) +} +// PDA下载地址 +export const downloadApk = (params) => { + return request.get({ url: '/wms/system-install-package/downloadApk', params }) +} diff --git a/src/api/login/oauth2/index.ts b/src/api/login/oauth2/index.ts new file mode 100644 index 0000000..aef1820 --- /dev/null +++ b/src/api/login/oauth2/index.ts @@ -0,0 +1,41 @@ +import request from '@/config/axios' + +// 获得授权信息 +export const getAuthorize = (clientId: string) => { + return request.get({ url: '/system/oauth2/authorize?clientId=' + clientId }) +} + +// 发起授权 +export const authorize = ( + responseType: string, + clientId: string, + redirectUri: string, + state: string, + autoApprove: boolean, + checkedScopes: string[], + uncheckedScopes: string[] +) => { + // 构建 scopes + const scopes = {} + for (const scope of checkedScopes) { + scopes[scope] = true + } + for (const scope of uncheckedScopes) { + scopes[scope] = false + } + // 发起请求 + return request.post({ + url: '/system/oauth2/authorize', + headers: { + 'Content-type': 'application/x-www-form-urlencoded' + }, + params: { + response_type: responseType, + client_id: clientId, + redirect_uri: redirectUri, + state: state, + auto_approve: autoApprove, + scope: JSON.stringify(scopes) + } + }) +} diff --git a/src/api/login/types.ts b/src/api/login/types.ts new file mode 100644 index 0000000..b2173f7 --- /dev/null +++ b/src/api/login/types.ts @@ -0,0 +1,28 @@ +export type UserLoginVO = { + username: string + password: string + captchaVerification: string +} + +export type TokenType = { + id: number // 编号 + accessToken: string // 访问令牌 + refreshToken: string // 刷新令牌 + userId: number // 用户编号 + userType: number //用户类型 + clientId: string //客户端编号 + expiresTime: number //过期时间 +} + +export type UserVO = { + id: number + username: string + nickname: string + deptId: number + email: string + mobile: string + sex: number + avatar: string + loginIp: string + loginDate: string +} diff --git a/src/api/mes/abilityInfo/index.ts b/src/api/mes/abilityInfo/index.ts new file mode 100644 index 0000000..f7c2c02 --- /dev/null +++ b/src/api/mes/abilityInfo/index.ts @@ -0,0 +1,56 @@ +import request from '@/config/axios' + +export interface AbilityInfoVO { + deleteTime: Date + id: number + status: string + concurrencyStamp: number + remark: string + deleter: string + siteId: number + ablityCode: string + ablityName: string + trainMinHours: number + operMinHours: number +} + +// 查询能力矩阵信息列表 +export const getAbilityInfoPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/mes/ability-info/senior', data }) + } else { + return await request.get({ url: `/mes/ability-info/page`, params }) + } +} + +// 查询能力矩阵信息详情 +export const getAbilityInfo = async (id: number) => { + return await request.get({ url: `/mes/ability-info/get?id=` + id }) +} + +// 新增能力矩阵信息 +export const createAbilityInfo = async (data: AbilityInfoVO) => { + return await request.post({ url: `/mes/ability-info/create`, data }) +} + +// 修改能力矩阵信息 +export const updateAbilityInfo = async (data: AbilityInfoVO) => { + return await request.put({ url: `/mes/ability-info/update`, data }) +} + +// 删除能力矩阵信息 +export const deleteAbilityInfo = async (id: number) => { + return await request.delete({ url: `/mes/ability-info/delete?id=` + id }) +} + +// 导出能力矩阵信息 Excel +export const exportAbilityInfo = async (params) => { + return await request.download({ url: `/mes/ability-info/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/mes/ability-info/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/mes/dismantlingDetail/index.ts b/src/api/mes/dismantlingDetail/index.ts new file mode 100644 index 0000000..e9baec0 --- /dev/null +++ b/src/api/mes/dismantlingDetail/index.ts @@ -0,0 +1,56 @@ +import request from '@/config/axios' + +export interface DismantlingDetailVO { + deleteTime: Date + id: number + status: string + concurrencyStamp: number + remark: string + deleter: string + siteId: number + mainBiilno: string + materialCode: string + materialStauts: string + materialProcessstauts: string +} + +// 查询报废拆解明细列表 +export const getDismantlingDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/mes/dismantling-detail/senior', data }) + } else { + return await request.get({ url: `/mes/dismantling-detail/page`, params }) + } +} + +// 查询报废拆解明细详情 +export const getDismantlingDetail = async (id: number) => { + return await request.get({ url: `/mes/dismantling-detail/get?id=` + id }) +} + +// 新增报废拆解明细 +export const createDismantlingDetail = async (data: DismantlingDetailVO) => { + return await request.post({ url: `/mes/dismantling-detail/create`, data }) +} + +// 修改报废拆解明细 +export const updateDismantlingDetail = async (data: DismantlingDetailVO) => { + return await request.put({ url: `/mes/dismantling-detail/update`, data }) +} + +// 删除报废拆解明细 +export const deleteDismantlingDetail = async (id: number) => { + return await request.delete({ url: `/mes/dismantling-detail/delete?id=` + id }) +} + +// 导出报废拆解明细 Excel +export const exportDismantlingDetail = async (params) => { + return await request.download({ url: `/mes/dismantling-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/mes/dismantling-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/mes/dismantlingMain/index.ts b/src/api/mes/dismantlingMain/index.ts new file mode 100644 index 0000000..67bb422 --- /dev/null +++ b/src/api/mes/dismantlingMain/index.ts @@ -0,0 +1,55 @@ +import request from '@/config/axios' + +export interface DismantlingMainVO { + deleteTime: Date + id: number + status: string + concurrencyStamp: number + remark: string + deleter: string + siteId: number + dismantlingBillno: string + productionCode: string + workbillType: string +} + +// 查询报废拆解登记主列表 +export const getDismantlingMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/mes/dismantling-main/senior', data }) + } else { + return await request.get({ url: `/mes/dismantling-main/page`, params }) + } +} + +// 查询报废拆解登记主详情 +export const getDismantlingMain = async (id: number) => { + return await request.get({ url: `/mes/dismantling-main/get?id=` + id }) +} + +// 新增报废拆解登记主 +export const createDismantlingMain = async (data: DismantlingMainVO) => { + return await request.post({ url: `/mes/dismantling-main/create`, data }) +} + +// 修改报废拆解登记主 +export const updateDismantlingMain = async (data: DismantlingMainVO) => { + return await request.put({ url: `/mes/dismantling-main/update`, data }) +} + +// 删除报废拆解登记主 +export const deleteDismantlingMain = async (id: number) => { + return await request.delete({ url: `/mes/dismantling-main/delete?id=` + id }) +} + +// 导出报废拆解登记主 Excel +export const exportDismantlingMain = async (params) => { + return await request.download({ url: `/mes/dismantling-main/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/mes/dismantling-main/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/mes/holiday/index.ts b/src/api/mes/holiday/index.ts new file mode 100644 index 0000000..546a0ee --- /dev/null +++ b/src/api/mes/holiday/index.ts @@ -0,0 +1,53 @@ +import request from '@/config/axios' + +export interface HolidayVO { + id: number + status: string + remark: string + holidayYear: string + holidayType: string + keyDate: string + holidayName: string + holidayDate: Date +} + +// 查询节假日设置列表 +export const getHolidayPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/mes/holiday/senior', data }) + } else { + return await request.get({ url: `/mes/holiday/page`, params }) + } +} + +// 查询节假日设置详情 +export const getHoliday = async (id: number) => { + return await request.get({ url: `/mes/holiday/get?id=` + id }) +} + +// 新增节假日设置 +export const createHoliday = async (data: HolidayVO) => { + return await request.post({ url: `/mes/holiday/create`, data }) +} + +// 修改节假日设置 +export const updateHoliday = async (data: HolidayVO) => { + return await request.put({ url: `/mes/holiday/update`, data }) +} + +// 删除节假日设置 +export const deleteHoliday = async (id: number) => { + return await request.delete({ url: `/mes/holiday/delete?id=` + id }) +} + +// 导出节假日设置 Excel +export const exportHoliday = async (params) => { + return await request.download({ url: `/mes/holiday/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/mes/holiday/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/mes/holidayCalendar/index.ts b/src/api/mes/holidayCalendar/index.ts new file mode 100644 index 0000000..8bd1e08 --- /dev/null +++ b/src/api/mes/holidayCalendar/index.ts @@ -0,0 +1,59 @@ +import request from '@/config/axios' + +export interface HolidayCalendarVO { + id: number + holidayDate: Date + endTime: Date + textOne: string + textTwo: string + textThree: string + textFour: string + textFive: string + deleteTime: Date + status: string + concurrencyStamp: number + remark: string + deleter: string + siteId: number +} + +// 查询节假日设置日历列表 +export const getHolidayCalendarPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/mes/holidayCalendar/senior', data }) + } else { + return await request.get({ url: `/mes/holidayCalendar/page`, params }) + } +} + +// 查询节假日设置日历详情 +export const getHolidayCalendar = async (id: number) => { + return await request.get({ url: `/mes/holidayCalendar/get?id=` + id }) +} + +// 新增节假日设置日历 +export const createHolidayCalendar = async (data: HolidayCalendarVO) => { + return await request.post({ url: `/mes/holidayCalendar/create`, data }) +} + +// 修改节假日设置日历 +export const updateHolidayCalendar = async (data: HolidayCalendarVO) => { + return await request.put({ url: `/mes/holidayCalendar/update`, data }) +} + +// 删除节假日设置日历 +export const deleteHolidayCalendar = async (id: number) => { + return await request.delete({ url: `/mes/holidayCalendar/delete?id=` + id }) +} + +// 导出节假日设置日历 Excel +export const exportHolidayCalendar = async (params) => { + return await request.download({ url: `/mes/holidayCalendar/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/mes/holidayCalendar/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/mes/hrPersonAbility/index.ts b/src/api/mes/hrPersonAbility/index.ts new file mode 100644 index 0000000..f076d1a --- /dev/null +++ b/src/api/mes/hrPersonAbility/index.ts @@ -0,0 +1,58 @@ +import request from '@/config/axios' + +export interface HrPersonAbilityVO { + deleteTime: Date + id: number + status: string + concurrencyStamp: number + remark: string + deleter: string + siteId: number + personId: number + personCode: string + ablityCode: string + ablityLevel: number + studyDuration: number + workDuration: number +} + +// 查询人员能力矩阵配置列表 +export const getHrPersonAbilityPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/mes/hr-person-ability/senior', data }) + } else { + return await request.get({ url: `/mes/hr-person-ability/page`, params }) + } +} + +// 查询人员能力矩阵配置详情 +export const getHrPersonAbility = async (id: number) => { + return await request.get({ url: `/mes/hr-person-ability/get?id=` + id }) +} + +// 新增人员能力矩阵配置 +export const createHrPersonAbility = async (data: HrPersonAbilityVO) => { + return await request.post({ url: `/mes/hr-person-ability/create`, data }) +} + +// 修改人员能力矩阵配置 +export const updateHrPersonAbility = async (data: HrPersonAbilityVO) => { + return await request.put({ url: `/mes/hr-person-ability/update`, data }) +} + +// 删除人员能力矩阵配置 +export const deleteHrPersonAbility = async (id: number) => { + return await request.delete({ url: `/mes/hr-person-ability/delete?id=` + id }) +} + +// 导出人员能力矩阵配置 Excel +export const exportHrPersonAbility = async (params) => { + return await request.download({ url: `/mes/hr-person-ability/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/mes/hr-person-ability/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/mes/item/index.ts b/src/api/mes/item/index.ts new file mode 100644 index 0000000..f915865 --- /dev/null +++ b/src/api/mes/item/index.ts @@ -0,0 +1,61 @@ +import request from '@/config/axios' + +export interface ItemVO { + deleteTime: Date + id: number + status: string + concurrencyStamp: number + remark: string + deleter: string + siteId: number + itemCode: string + itemName: string + itemType: string + qmsClass: string + dataType: string + dataVerify: string + dataStandvalue: string + dataDescripe: string +} + +// 查询质检项目定义列表 +export const getItemPage = async (params) => { + console.log(params); + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/mes/item/senior', data }) + } else { + return await request.get({ url: `/mes/item/page`, params }) + } +} + +// 查询质检项目定义详情 +export const getItem = async (id: number) => { + return await request.get({ url: `/mes/item/get?id=` + id }) +} + +// 新增质检项目定义 +export const createItem = async (data: ItemVO) => { + return await request.post({ url: `/mes/item/create`, data }) +} + +// 修改质检项目定义 +export const updateItem = async (data: ItemVO) => { + return await request.put({ url: `/mes/item/update`, data }) +} + +// 删除质检项目定义 +export const deleteItem = async (id: number) => { + return await request.delete({ url: `/mes/item/delete?id=` + id }) +} + +// 导出质检项目定义 Excel +export const exportItem = async (params) => { + return await request.download({ url: `/mes/item/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/mes/item/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/mes/itemRequestDetail/index.ts b/src/api/mes/itemRequestDetail/index.ts new file mode 100644 index 0000000..dd253bc --- /dev/null +++ b/src/api/mes/itemRequestDetail/index.ts @@ -0,0 +1,56 @@ +import request from '@/config/axios' + +export interface ItemRequestDetailVO { + deleteTime: Date + id: number + status: string + concurrencyStamp: number + remark: string + deleter: string + requestBillNo: string + itemBasicCode: string + itemCounts: number + itemUom: string + siteId: number +} + +// 查询叫料申请明细列表 +export const getItemRequestDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/mes/item-request-detail/senior', data }) + } else { + return await request.get({ url: `/mes/item-request-detail/page`, params }) + } +} + +// 查询叫料申请明细详情 +export const getItemRequestDetail = async (id: number) => { + return await request.get({ url: `/mes/item-request-detail/get?id=` + id }) +} + +// 新增叫料申请明细 +export const createItemRequestDetail = async (data: ItemRequestDetailVO) => { + return await request.post({ url: `/mes/item-request-detail/create`, data }) +} + +// 修改叫料申请明细 +export const updateItemRequestDetail = async (data: ItemRequestDetailVO) => { + return await request.put({ url: `/mes/item-request-detail/update`, data }) +} + +// 删除叫料申请明细 +export const deleteItemRequestDetail = async (id: number) => { + return await request.delete({ url: `/mes/item-request-detail/delete?id=` + id }) +} + +// 导出叫料申请明细 Excel +export const exportItemRequestDetail = async (params) => { + return await request.download({ url: `/mes/item-request-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/mes/item-request-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/mes/itemRequestMain/index.ts b/src/api/mes/itemRequestMain/index.ts new file mode 100644 index 0000000..9cc8e20 --- /dev/null +++ b/src/api/mes/itemRequestMain/index.ts @@ -0,0 +1,60 @@ +import request from '@/config/axios' + +export interface ItemRequestMainVO { + deleteTime: Date + id: number + status: string + concurrencyStamp: number + remark: string + deleter: string + siteId: number + planDayCode: string + workBillNo: string + batchCode: string + requestBillNo: string + workstationCode: string + productCode: string + processCode: string + requestType: string +} + +// 查询叫料申请单主列表 +export const getItemRequestMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/mes/item-request-main/senior', data }) + } else { + return await request.get({ url: `/mes/item-request-main/page`, params }) + } +} + +// 查询叫料申请单主详情 +export const getItemRequestMain = async (id: number) => { + return await request.get({ url: `/mes/item-request-main/get?id=` + id }) +} + +// 新增叫料申请单主 +export const createItemRequestMain = async (data: ItemRequestMainVO) => { + return await request.post({ url: `/mes/item-request-main/create`, data }) +} + +// 修改叫料申请单主 +export const updateItemRequestMain = async (data: ItemRequestMainVO) => { + return await request.put({ url: `/mes/item-request-main/update`, data }) +} + +// 删除叫料申请单主 +export const deleteItemRequestMain = async (id: number) => { + return await request.delete({ url: `/mes/item-request-main/delete?id=` + id }) +} + +// 导出叫料申请单主 Excel +export const exportItemRequestMain = async (params) => { + return await request.download({ url: `/mes/item-request-main/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/mes/item-request-main/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/mes/opersteps/index.ts b/src/api/mes/opersteps/index.ts new file mode 100644 index 0000000..a4e8b65 --- /dev/null +++ b/src/api/mes/opersteps/index.ts @@ -0,0 +1,55 @@ +import request from '@/config/axios' + +export interface OperstepsVO { + deleteTime: Date + id: number + status: string + concurrencyStamp: number + remark: string + deleter: string + siteId: number + stepsCode: string + stepsName: string + collectCode: string +} + +// 查询MES操作步骤信息列表 +export const getOperstepsPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/mes/opersteps/senior', data }) + } else { + return await request.get({ url: `/mes/opersteps/page`, params }) + } +} + +// 查询MES操作步骤信息详情 +export const getOpersteps = async (id: number) => { + return await request.get({ url: `/mes/opersteps/get?id=` + id }) +} + +// 新增MES操作步骤信息 +export const createOpersteps = async (data: OperstepsVO) => { + return await request.post({ url: `/mes/opersteps/create`, data }) +} + +// 修改MES操作步骤信息 +export const updateOpersteps = async (data: OperstepsVO) => { + return await request.put({ url: `/mes/opersteps/update`, data }) +} + +// 删除MES操作步骤信息 +export const deleteOpersteps = async (id: number) => { + return await request.delete({ url: `/mes/opersteps/delete?id=` + id }) +} + +// 导出MES操作步骤信息 Excel +export const exportOpersteps = async (params) => { + return await request.download({ url: `/mes/opersteps/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/mes/opersteps/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/mes/operstepsType/index.ts b/src/api/mes/operstepsType/index.ts new file mode 100644 index 0000000..0519078 --- /dev/null +++ b/src/api/mes/operstepsType/index.ts @@ -0,0 +1,57 @@ +import request from '@/config/axios' + +export interface OperstepsTypeVO { + collectCode: string + collectName: string + collectType: string + adpaterClass: string + argLsit: string + deleteTime: Date + id: number + status: string + concurrencyStamp: number + remark: string + deleter: string + siteId: number +} + +// 查询操作步骤类型配置列表 +export const getOperstepsTypePage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/mes/opersteps-type/senior', data }) + } else { + return await request.get({ url: `/mes/opersteps-type/page`, params }) + } +} + +// 查询操作步骤类型配置详情 +export const getOperstepsType = async (id: number) => { + return await request.get({ url: `/mes/opersteps-type/get?id=` + id }) +} + +// 新增操作步骤类型配置 +export const createOperstepsType = async (data: OperstepsTypeVO) => { + return await request.post({ url: `/mes/opersteps-type/create`, data }) +} + +// 修改操作步骤类型配置 +export const updateOperstepsType = async (data: OperstepsTypeVO) => { + return await request.put({ url: `/mes/opersteps-type/update`, data }) +} + +// 删除操作步骤类型配置 +export const deleteOperstepsType = async (id: number) => { + return await request.delete({ url: `/mes/opersteps-type/delete?id=` + id }) +} + +// 导出操作步骤类型配置 Excel +export const exportOperstepsType = async (params) => { + return await request.download({ url: `/mes/opersteps-type/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/mes/opersteps-type/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/mes/orderDay/index.ts b/src/api/mes/orderDay/index.ts new file mode 100644 index 0000000..89fafea --- /dev/null +++ b/src/api/mes/orderDay/index.ts @@ -0,0 +1,108 @@ +import request from '@/config/axios' + +export interface OrderDayVO { + status: string + remark: string + planNoMonth: string + planNoDay: string + productCode: string + workroomCode: string + lineCode: string + planCount: number + processrouteCode: string + tempProcessroute: string + standardBom: string + tempBom: string + workMode: string + planDate: Date + startTime: Date + endTime: Date + taskMode: string + batchCode:string +} + +// 查询生产日计划列表 +export const getOrderDayPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/mes/orderday/senior', data }) + } else { + return await request.get({ url: `/mes/orderday/page`, params }) + } +} + +// 查询生产日计划详情 +export const getOrderDay = async (id: number) => { + return await request.get({ url: `/mes/orderday/get?id=` + id }) +} + +// 新增生产日计划 +export const createOrderDay = async (data: OrderDayVO) => { + return await request.post({ url: `/mes/orderday/create`, data }) +} + +// 修改生产日计划 +export const updateOrderDay = async (data: OrderDayVO) => { + return await request.put({ url: `/mes/orderday/update`, data }) +} + +// 删除生产日计划 +export const deleteOrderDay = async (id: number) => { + return await request.delete({ url: `/mes/orderday/delete?id=` + id }) +} + +// 导出生产日计划 Excel +export const exportOrderDay = async (params) => { + return await request.download({ url: `/mes/orderday/export-excel`, params }) +} +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/mes/orderday/get-import-template' }) +} +// 根据产品编码获取Bom +export const getBoms = async (code: String) => { + return request.get({ url: '/mes/common/geBomByProductCode?code='+code }) +} +// 根据产品编码获取工艺路线 +export const getProcessroutes = async (code: String) => { + return request.get({ url: '/mes/common/getProcessRouteByProductCode?code='+code }) +} +// 根据车间编码获取产线列表 +export const getProductlines = async (code: String) => { + return request.get({ url: '/mes/common/getLinesByWorkRoomCode?code='+code }) +} +// 获取产线信息 +export const getProductlineInfo = async (code: String) => { + return request.get({ url: '/mes/common/getLinesByWorkRoomCode?code='+code }) +} +// 根据工艺路线的工序信息 +export const getProcessroutesDetail = async (code) => { + return await request.get({ url: `/mes/orderday/getProcessInfo?code=`+ code }) +} +// 根据获取计划BOM信息 +export const getPlanBom = async (params) => { + return await request.get({ url: `/mes/orderday/getBomInfo`,params }) +} + +// 根据获取计划BOM信息 +export const getBomInfoTree = async (params) => { + return await request.get({ url: `/mes/orderday/getBomInfoTree`,params }) +} +// 根据计划的车间、产线、计划时间 查询已经配置的人员 +export const getPlanWorks = async (params) => { + return await request.get({ url: `/mes/orderday/getWorkGroup`,params }) +} +// 根据车间、产线 查询已配置的设备 +export const getPlanDevices = async (params) => { + return await request.get({ url: `/mes/orderday/getDeviceInfo`,params }) +} + +///发布计划 +export const publishPlan = async (data: OrderDayVO) => { + return await request.postOriginal({ url: `/mes/orderday/publishPlan`,data }) +} +//终止计划 +export const stopPlan = async (id) => { + return await request.post({ url: `/mes/orderday/stopPlan/`+id }) +} diff --git a/src/api/mes/orderDayConfig/index.ts b/src/api/mes/orderDayConfig/index.ts new file mode 100644 index 0000000..f1f5749 --- /dev/null +++ b/src/api/mes/orderDayConfig/index.ts @@ -0,0 +1,57 @@ +import request from '@/config/axios' +export interface OrderDayQueryParamVo { + planNoDay:String + productCode:String + workroomCode:String + lineCode:String + processrouteCode:String + batchCode:String + processCode:String +} + + +// 查询生产配置工艺路线 +export const getConfigProcessRoute = async (params) => { + return await request.get({ url: `/mes/orderDayRoute/getByOrder`, params }) +} +// 查询已经配置的工序 +export const getConfigProcessRouteNode = async (params) => { + return await request.get({ url: `/mes/orderDayRoutesub/getByOrder`, params }) +} +// 查询生产配置工序BOM +export const getOrderDayBomByOrder = async (params) => { + return await request.get({ url: `/mes/orderDayBom/getByOrder`, params }) +} + +// 查询已经配置工序工位 +export const getConfigProcessWorkstation = async (params) => { + return await request.get({ url: `/mes/orderDayWorkstation/getByOrder`, params }) +} +// 查询已经配置工序人员 +export const getConfigProcessWorker = async (params) => { + return await request.get({ url: `/mes/orderDayWorker/getByOrder`, params }) +} +// 查询已经的工序工位设备 +export const getConfigProcessEquipment = async (params) => { + return await request.get({ url: `/mes/orderDayequipment/getByOrder`, params }) +} + +/*批量保存工序人员配置*/ +export const saveWorker = async (data: any) => { + return await request.post({ url: `/mes/orderDayWorker/batchCreate`, data }) +} + +// 查询设备基本信息列表 +export const getDeviceInfoPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/mes/device-info/senior', data }) + } else { + return await request.get({ url: `/mes/device-info/page`, params }) + } +} +/*批量保存工序模具配置*/ +export const saveEquipment = async (data: any) => { + return await request.post({ url: `/mes/orderDayequipment/batchCreate`, data }) +} diff --git a/src/api/mes/ordermonthplan/index.ts b/src/api/mes/ordermonthplan/index.ts new file mode 100644 index 0000000..b2b77a7 --- /dev/null +++ b/src/api/mes/ordermonthplan/index.ts @@ -0,0 +1,118 @@ +import request from '@/config/axios' + +export interface MesOrderMonthMainVO { + deleteTime: Date + id: number + status: string + concurrencyStamp: number + remark: string + deleter: string + siteId: number + sourceType: string + planMasterCode: string + planSubCode: string + planType: string + checker: string + checkDate: string + factoryCode: string + factoryName: string +} + +// 查询订单计划月主列表 +export const getMesOrderMonthMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/plan/mes-order-month-main/senior', data }) + } else { + return await request.get({ url: `/plan/mes-order-month-main/page`, params }) + } +} + +// 查询订单计划月主详情 +export const getMesOrderMonthMain = async (id: number) => { + return await request.get({ url: `/plan/mes-order-month-main/get?id=` + id }) +} + +// 新增订单计划月主 +export const createMesOrderMonthMain = async (data: MesOrderMonthMainVO) => { + return await request.post({ url: `/plan/mes-order-month-main/create`, data }) +} + +// 修改订单计划月主 +export const updateMesOrderMonthMain = async (data: MesOrderMonthMainVO) => { + return await request.put({ url: `/plan/mes-order-month-main/update`, data }) +} + +// 删除订单计划月主 +export const deleteMesOrderMonthMain = async (id: number) => { + return await request.delete({ url: `/plan/mes-order-month-main/delete?id=` + id }) +} + +// 导出订单计划月主 Excel +export const exportMesOrderMonthMain = async (params) => { + return await request.download({ url: `/plan/mes-order-month-main/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/plan/mes-order-month-main/get-import-template' }) +} + +export interface MesOrderMonthSubVO { + status: string + remark: string + productCode: string + productName: string + bomCode: string + bomVersion: string + inStoreCode: string + planBegin: Date + planEnd: Date + realStart: string + realFinish: Date + planCount: number + finishCount: number + qualifiedCount: number + unqualifiedCount: number + flagBackwash: string + productBatchcode: string +} +// 查询订单月计划子列表 +export const getMesOrderMonthSubPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/plan/mes-order-month-sub/senior', data }) + } else { + return await request.get({ url: `/plan/mes-order-month-sub/page`, params }) + } +} + +// 查询订单月计划子详情 +export const getMesOrderMonthSub = async (id: number) => { + return await request.get({ url: `/plan/mes-order-month-sub/get?id=` + id }) +} + +// 新增订单月计划子 +export const createMesOrderMonthSub = async (data: MesOrderMonthSubVO) => { + return await request.post({ url: `/plan/mes-order-month-sub/create`, data }) +} + +// 修改订单月计划子 +export const updateMesOrderMonthSub = async (data: MesOrderMonthSubVO) => { + return await request.put({ url: `/plan/mes-order-month-sub/update`, data }) +} + +// 删除订单月计划子 +export const deleteMesOrderMonthSub = async (id: number) => { + return await request.delete({ url: `/plan/mes-order-month-sub/delete?id=` + id }) +} +export interface MesOrderMonthSubBreakdownReqVO{ + planMasterId: string + id: number +} +// 拆解为日计划 +export const breakdown = async (data: MesOrderMonthSubBreakdownReqVO) => { + return await request.post({ url: `/plan/mes-order-month-sub/breakdown`,data}) +} diff --git a/src/api/mes/pattern/index.ts b/src/api/mes/pattern/index.ts new file mode 100644 index 0000000..2ee8068 --- /dev/null +++ b/src/api/mes/pattern/index.ts @@ -0,0 +1,66 @@ +import request from '@/config/axios' + +export interface PatternVO { + deleteTime: Date + id: number + status: string + concurrencyStamp: number + remark: string + deleter: string + siteId: number + code: string + name: string + partternName: string + productCode: string + dateUseStart: Date + dateUseStop: Date + partternFrom: string + partternGo: string + initCout: number + effectStart: Date + effectEnd: Date + factoryCode: string + factoryName: string + factoryType: string +} + +// 查询模具基本信息列表 +export const getPatternPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/mes/pattern/senior', data }) + } else { + return await request.get({ url: `/mes/pattern/page`, params }) + } +} + +// 查询模具基本信息详情 +export const getPattern = async (id: number) => { + return await request.get({ url: `/mes/pattern/get?id=` + id }) +} + +// 新增模具基本信息 +export const createPattern = async (data: PatternVO) => { + return await request.post({ url: `/mes/pattern/create`, data }) +} + +// 修改模具基本信息 +export const updatePattern = async (data: PatternVO) => { + return await request.put({ url: `/mes/pattern/update`, data }) +} + +// 删除模具基本信息 +export const deletePattern = async (id: number) => { + return await request.delete({ url: `/mes/pattern/delete?id=` + id }) +} + +// 导出模具基本信息 Excel +export const exportPattern = async (params) => { + return await request.download({ url: `/mes/pattern/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/mes/pattern/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/mes/patternType/index.ts b/src/api/mes/patternType/index.ts new file mode 100644 index 0000000..f4bf226 --- /dev/null +++ b/src/api/mes/patternType/index.ts @@ -0,0 +1,54 @@ +import request from '@/config/axios' + +export interface PatternTypeVO { + deleteTime: Date + id: number + status: string + concurrencyStamp: number + remark: string + deleter: string + siteId: number + code: string + name: string +} + +// 查询模具类型列表 +export const getPatternTypePage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/mes/pattern-type/senior', data }) + } else { + return await request.get({ url: `/mes/pattern-type/page`, params }) + } +} + +// 查询模具类型详情 +export const getPatternType = async (id: number) => { + return await request.get({ url: `/mes/pattern-type/get?id=` + id }) +} + +// 新增模具类型 +export const createPatternType = async (data: PatternTypeVO) => { + return await request.post({ url: `/mes/pattern-type/create`, data }) +} + +// 修改模具类型 +export const updatePatternType = async (data: PatternTypeVO) => { + return await request.put({ url: `/mes/pattern-type/update`, data }) +} + +// 删除模具类型 +export const deletePatternType = async (id: number) => { + return await request.delete({ url: `/mes/pattern-type/delete?id=` + id }) +} + +// 导出模具类型 Excel +export const exportPatternType = async (params) => { + return await request.download({ url: `/mes/pattern-type/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/mes/pattern-type/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/mes/process/index.ts b/src/api/mes/process/index.ts new file mode 100644 index 0000000..0adec9e --- /dev/null +++ b/src/api/mes/process/index.ts @@ -0,0 +1,158 @@ +import request from '@/config/axios' + +export interface ProcessVO { + code: string + name: string + description: string + type: string + workshopCode: string + productionLineCode: string + available: number + activeTime: Date + expireTime: Date + remark: string +} + +export const goalParams = { + processCode:null +} +// 查询工序列表 +export const getProcessPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/mes/process/senior', data }) + } else { + return await request.get({ url: `/mes/process/page`, params }) + } +} + +// 查询工序详情 +export const getProcess = async (id: number) => { + return await request.get({ url: `/mes/process/get?id=` + id }) +} + +// 新增工序 +export const createProcess: (data: ProcessVO) => Promise = async (data: ProcessVO) => { + return await request.post({ url: `/mes/process/create`, data }) +} + +// 修改工序 +export const updateProcess = async (data: ProcessVO) => { + return await request.put({ url: `/mes/process/update`, data }) +} + +// 删除工序 +export const deleteProcess: (id: number) => Promise = async (id: number) => { + return await request.delete({ url: `/mes/process/delete?id=` + id }) +} + +// 导出工序 Excel +export const exportProcess = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/mes/process/export-excel-senior`, data }) + } else { + return await request.download({ url: `/mes/process/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/mes/process/get-import-template' }) +} + + +// 查询模具基本信息列表 +export const getPatternPage = async (params) => { + params.processCode = goalParams.processCode + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/mes/mes-process-pattern/senior', data }) + } else { + return await request.get({ url: `/mes/mes-process-pattern/pagePatternByProcessCode`, params }) + } +} + +//创建工序模具关联 +export const createPatternRelation = async (Codes:string[]) => { + const data = { + processCode : goalParams.processCode, + listPatternCode : Codes + } + return await request.post({ url: `/mes/mes-process-pattern/createRelation`, data }) +} + +//删除工序模具关联 +export const deletePatternRelation = async (Codes:string[]) => { + const data = { + processCode : goalParams.processCode, + listPatternCode : Codes + } + return await request.post({ url: `/mes/mes-process-pattern/deleteRelation`, data }) +} + + + +// 查询产线列表 +export const getProductionlinePage = async (params) => { + params.processCode = goalParams.processCode + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/mes/mes-process-productionline/senior', data }) + } else { + return await request.get({ url: `/mes/mes-process-productionline/pageByProcessCode`, params }) + } +} + +//创建工序产线关联 +export const createProductionlineRelation = async (Codes:string[]) => { + const data = { + processCode : goalParams.processCode, + listProductionlineCode : Codes + } + return await request.post({ url: `/mes/mes-process-productionline/createRelation`, data }) +} + +//删除工序产线关联 +export const deleteProductionlineRelation = async (Codes:string[]) => { + const data = { + processCode : goalParams.processCode, + listProductionlineCode : Codes + } + return await request.post({ url: `/mes/mes-process-productionline/deleteRelation`, data }) +} + + + +// 查询物料列表 +export const getItembasicPage = async (params) => { + params.processCode = goalParams.processCode + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/mes/mes-process-itembasic/senior', data }) + } else { + return await request.get({ url: `/mes/mes-process-itembasic/pageByProcessCode`, params }) + } +} + +//创建工序物料关联 +export const createItembasicRelation = async (Codes:string[]) => { + const data = { + processCode : goalParams.processCode, + listItembasicCode : Codes + } + return await request.post({ url: `/mes/mes-process-itembasic/createRelation`, data }) +} + +//删除工序物料关联 +export const deleteItembasicRelation = async (Codes:string[]) => { + const data = { + processCode : goalParams.processCode, + listItembasicCode : Codes + } + return await request.post({ url: `/mes/mes-process-itembasic/deleteRelation`, data }) +} diff --git a/src/api/mes/processroute/index.ts b/src/api/mes/processroute/index.ts new file mode 100644 index 0000000..f6f5f17 --- /dev/null +++ b/src/api/mes/processroute/index.ts @@ -0,0 +1,97 @@ +import request from '@/config/axios' + +export interface ProcessrouteVO { + deleteTime: Date + id: number + status: string + concurrencyStamp: number + remark: string + deleter: string + processrouteCode: string + processName: string + productCode: string + routeVersion: number + +} + + +// 查询工艺路线定义列表 +export const getProcessroutePage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/mes/processroute/senior', data }) + } else { + return await request.get({ url: `/mes/processroute/page`, params }) + } +} + +// 查询工艺路线定义详情 +export const getProcessroute = async (id: number) => { + return await request.get({ url: `/mes/processroute/get?id=` + id }) +} +// 查询工艺路线定义的工序列表 +export const getProcessrouteNodeList = async (code:any) => { + return await request.get({ url: `/mes/processrouteNodeDetail/getRouteNodes?code=`+code }) +} + + +// 新增工艺路线定义 +export const createProcessroute = async (data: ProcessrouteVO) => { + return await request.post({ url: `/mes/processroute/create`, data }) +} +//提交图形数据 +// 新增工艺路线定义 +export const saveGraphData = async (data: any) => { + return await request.post({ url: `/mes/processroute/updategraph`, data }) +} +// 修改工艺路线定义 +export const updateProcessroute = async (data: ProcessrouteVO) => { + return await request.put({ url: `/mes/processroute/update`, data }) +} + +// 删除工艺路线定义 +export const deleteProcessroute = async (id: number) => { + return await request.delete({ url: `/mes/processroute/delete?id=` + id }) +} + +// 导出工艺路线定义 Excel +export const exportProcessroute = async (params) => { + return await request.download({ url: `/mes/processroute/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/mes/processroute/get-import-template' }) +} +// 获取工序工序列表- +export const getProcessList =async (params) => { + return await request.get({ url: `/mes/process/page`, params }) +} +// 获取工序工序信息- +export const getProcesInfo = async(code:String) => { + return await request.get({ url: `/mes/process/getByCode?code=`+code }) +} +// 获取产品信息列表- +export const getProductInfo =async (code:String) => { + return await request.get({ url: `/wms/itembasic/getProduct?code=`+code}) +} + +// 查询模具基本信息列表 +export const getPatternPage = async (code:String) => { + return await request.get({ url: `/mes/mes-process-pattern/pagePatternByProcessCode?pageSize=25&processCode=`+code }) +} + +// 查询产品物料列表 +export const getProcessBomList = async (params) => { + return await request.get({ url: `/mes/common/getBomListByProductAndProcess`,params}) +} + +// 查询产品bom的工序物料列表 +export const getBomListByProductBomAndProcess = async (params) => { + return await request.get({ url: `/mes/common/getBomListByProductBomAndProcess`,params}) +} + +export const getWorkstationPage = async (code:String) => { + return await request.get({ url: `/mes/workstation/page?pageSize=25&processCode=`+code}) +} diff --git a/src/api/mes/productBackline/index.ts b/src/api/mes/productBackline/index.ts new file mode 100644 index 0000000..c1403fc --- /dev/null +++ b/src/api/mes/productBackline/index.ts @@ -0,0 +1,59 @@ +import request from '@/config/axios' + +export interface ProductBacklineVO { + offlineCode: string + productCode: string + workBillno: string + processCode: string + operCode: string + backlineBillno: string + planCode: string + deleteTime: Date + id: number + status: string + remark: string + deleter: string + siteId: number + workstationCode: string +} + +// 查询产品返线登记列表 +export const getProductBacklinePage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/mes/product-backline/senior', data }) + } else { + return await request.get({ url: `/mes/product-backline/page`, params }) + } +} + +// 查询产品返线登记详情 +export const getProductBackline = async (id: number) => { + return await request.get({ url: `/mes/product-backline/get?id=` + id }) +} + +// 新增产品返线登记 +export const createProductBackline = async (data: ProductBacklineVO) => { + return await request.post({ url: `/mes/product-backline/create`, data }) +} + +// 修改产品返线登记 +export const updateProductBackline = async (data: ProductBacklineVO) => { + return await request.put({ url: `/mes/product-backline/update`, data }) +} + +// 删除产品返线登记 +export const deleteProductBackline = async (id: number) => { + return await request.delete({ url: `/mes/product-backline/delete?id=` + id }) +} + +// 导出产品返线登记 Excel +export const exportProductBackline = async (params) => { + return await request.download({ url: `/mes/product-backline/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/mes/product-backline/get-import-template' }) +} diff --git a/src/api/mes/productOffline/index.ts b/src/api/mes/productOffline/index.ts new file mode 100644 index 0000000..8d504ad --- /dev/null +++ b/src/api/mes/productOffline/index.ts @@ -0,0 +1,71 @@ +import request from '@/config/axios' + +export interface ProductOfflineVO { + offlineCode: string + workBillno: string + planCode: string + productCode: string + offlineReson: string + productDestination: string + deleteTime: Date + id: number + status: string + concurrencyStamp: number + remark: string + deleter: string + siteId: number + processCode: string + stationCode: string + checkPersonCode: string +} + +// 查询产品离线登记记录列表 +export const getProductOfflinePage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/mes/product-offline/senior', data }) + } else { + return await request.get({ url: `/mes/product-offline/page`, params }) + } +} + +// 查询产品离线登记记录详情 +export const getProductOffline = async (id: number) => { + return await request.get({ url: `/mes/product-offline/get?id=` + id }) +} + +// 新增产品离线登记记录 +export const createProductOffline = async (data: ProductOfflineVO) => { + return await request.post({ url: `/mes/product-offline/create`, data }) +} + +// 修改产品离线登记记录 +export const updateProductOffline = async (data: ProductOfflineVO) => { + return await request.put({ url: `/mes/product-offline/update`, data }) +} + +// 删除产品离线登记记录 +export const deleteProductOffline = async (id: number) => { + return await request.delete({ url: `/mes/product-offline/delete?id=` + id }) +} + +// 导出产品离线登记记录 Excel +export const exportProductOffline = async (params) => { + return await request.download({ url: `/mes/product-offline/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/mes/product-offline/get-import-template' }) +} + +export const getworkSchedulingPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/mes/workScheduling/senior', data }) + } else { + return await request.get({ url: `/mes/workScheduling/page`, params }) + } +} diff --git a/src/api/mes/productionPlan/index.ts b/src/api/mes/productionPlan/index.ts new file mode 100644 index 0000000..de60663 --- /dev/null +++ b/src/api/mes/productionPlan/index.ts @@ -0,0 +1,61 @@ +import request from '@/config/axios' + +export interface ProductionPlanVO { + id: number + planCode: string + planName: string + teamType: string + endTime: Date + shiftMode: string + billState: number + deleteTime: Date + status: string + concurrencyStamp: number + remark: string + deleter: string + siteId: number + textOne: string + textTwo: string + textThree: string +} + +// 查询生产排产计划列表 +export const getProductionPlanPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/mes/productionPlan/senior', data }) + } else { + return await request.get({ url: `/mes/productionPlan/page`, params }) + } +} + +// 查询生产排产计划详情 +export const getProductionPlan = async (id: number) => { + return await request.get({ url: `/mes/productionPlan/get?id=` + id }) +} + +// 新增生产排产计划 +export const createProductionPlan = async (data: ProductionPlanVO) => { + return await request.post({ url: `/mes/productionPlan/create`, data }) +} + +// 修改生产排产计划 +export const updateProductionPlan = async (data: ProductionPlanVO) => { + return await request.put({ url: `/mes/productionPlan/update`, data }) +} + +// 删除生产排产计划 +export const deleteProductionPlan = async (id: number) => { + return await request.delete({ url: `/mes/productionPlan/delete?id=` + id }) +} + +// 导出生产排产计划 Excel +export const exportProductionPlan = async (params) => { + return await request.download({ url: `/mes/productionPlan/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/mes/productionPlan/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/mes/qualityclass/index.ts b/src/api/mes/qualityclass/index.ts new file mode 100644 index 0000000..137a6bd --- /dev/null +++ b/src/api/mes/qualityclass/index.ts @@ -0,0 +1,55 @@ +import request from '@/config/axios' + +export interface QualityclassVO { + deleteTime: Date + id: number + status: string + concurrencyStamp: number + remark: string + deleter: string + siteId: number + code: string + name: string + groupCode: string +} + +// 查询质检类别列表 +export const getQualityclassPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/mes/qualityclass/senior', data }) + } else { + return await request.get({ url: `/mes/qualityclass/page`, params }) + } +} + +// 查询质检类别详情 +export const getQualityclass = async (id: number) => { + return await request.get({ url: `/mes/qualityclass/get?id=` + id }) +} + +// 新增质检类别 +export const createQualityclass = async (data: QualityclassVO) => { + return await request.post({ url: `/mes/qualityclass/create`, data }) +} + +// 修改质检类别 +export const updateQualityclass = async (data: QualityclassVO) => { + return await request.put({ url: `/mes/qualityclass/update`, data }) +} + +// 删除质检类别 +export const deleteQualityclass = async (id: number) => { + return await request.delete({ url: `/mes/qualityclass/delete?id=` + id }) +} + +// 导出质检类别 Excel +export const exportQualityclass = async (params) => { + return await request.download({ url: `/mes/qualityclass/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/mes/qualityclass/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/mes/qualityform/index.ts b/src/api/mes/qualityform/index.ts new file mode 100644 index 0000000..40041b6 --- /dev/null +++ b/src/api/mes/qualityform/index.ts @@ -0,0 +1,50 @@ +import request from '@/config/axios' + +export interface QualityformVO { + deleteTime: Date + id: number + status: string + concurrencyStamp: number + remark: string + deleter: string + siteId: number + formNo: string + formName: string + formType: string +} + +// 查询质检表单列表 +export const getQualityformPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/mes/qualityform/senior', data }) + } else { + return await request.get({ url: `/mes/qualityform/page`, params }) + } +} + +// 查询质检表单详情 +export const getQualityform = async (id: number) => { + return await request.get({ url: `/mes/qualityform/get?id=` + id }) +} + +// 新增质检表单 +export const createQualityform = async (data: QualityformVO) => { + return await request.post({ url: `/mes/qualityform/create`, data }) +} + +// 修改质检表单 +export const updateQualityform = async (data: QualityformVO) => { + return await request.put({ url: `/mes/qualityform/update`, data }) +} + +// 删除质检表单 +export const deleteQualityform = async (id: number) => { + return await request.delete({ url: `/mes/qualityform/delete?id=` + id }) +} + +// 导出质检表单 Excel +export const exportQualityform = async (params) => { + return await request.download({ url: `/mes/qualityform/export-excel`, params }) +} diff --git a/src/api/mes/qualityformdetail/index.ts b/src/api/mes/qualityformdetail/index.ts new file mode 100644 index 0000000..8526e44 --- /dev/null +++ b/src/api/mes/qualityformdetail/index.ts @@ -0,0 +1,56 @@ +import request from '@/config/axios' + +export interface QualityformdetailVO { + deleteTime: Date + id: number + status: string + concurrencyStamp: number + remark: string + deleter: string + siteId: number + formNo: string + itemCode: string + itemName: string + itemType: string + qmsClass: string + dataType: string + dataVerify: string + dataStandvalue: string + dataDescripe: string +} + +// 查询质检表单子表列表 +export const getQualityformdetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/mes/qualityformdetail/senior', data }) + } else { + return await request.get({ url: `/mes/qualityformdetail/page`, params }) + } +} + +// 查询质检表单子表详情 +export const getQualityformdetail = async (id: number) => { + return await request.get({ url: `/mes/qualityformdetail/get?id=` + id }) +} + +// 新增质检表单子表 +export const createQualityformdetail = async (data: QualityformdetailVO) => { + return await request.post({ url: `/mes/qualityformdetail/create`, data }) +} + +// 修改质检表单子表 +export const updateQualityformdetail = async (data: QualityformdetailVO) => { + return await request.put({ url: `/mes/qualityformdetail/update`, data }) +} + +// 删除质检表单子表 +export const deleteQualityformdetail = async (id: number) => { + return await request.delete({ url: `/mes/qualityformdetail/delete?id=` + id }) +} + +// 导出质检表单子表 Excel +export const exportQualityformdetail = async (params) => { + return await request.download({ url: `/mes/qualityformdetail/export-excel`, params }) +} diff --git a/src/api/mes/qualityformlog/index.ts b/src/api/mes/qualityformlog/index.ts new file mode 100644 index 0000000..31b7d2f --- /dev/null +++ b/src/api/mes/qualityformlog/index.ts @@ -0,0 +1,53 @@ +import request from '@/config/axios' + +export interface QualityformlogVO { + deleteTime: Date + id: number + status: string + concurrencyStamp: number + remark: string + deleter: string + siteId: number + masterId: number + formNo: string + operation: string + operator: string + operateContent: string + operateTime: Date +} + +// 查询质检表单日志列表 +export const getQualityformlogPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/mes/qualityformlog/senior', data }) + } else { + return await request.get({ url: `/mes/qualityformlog/page`, params }) + } +} + +// 查询质检表单日志详情 +export const getQualityformlog = async (id: number) => { + return await request.get({ url: `/mes/qualityformlog/get?id=` + id }) +} + +// 新增质检表单日志 +export const createQualityformlog = async (data: QualityformlogVO) => { + return await request.post({ url: `/mes/qualityformlog/create`, data }) +} + +// 修改质检表单日志 +export const updateQualityformlog = async (data: QualityformlogVO) => { + return await request.put({ url: `/mes/qualityformlog/update`, data }) +} + +// 删除质检表单日志 +export const deleteQualityformlog = async (id: number) => { + return await request.delete({ url: `/mes/qualityformlog/delete?id=` + id }) +} + +// 导出质检表单日志 Excel +export const exportQualityformlog = async (params) => { + return await request.download({ url: `/mes/qualityformlog/export-excel`, params }) +} diff --git a/src/api/mes/qualitygroup/index.ts b/src/api/mes/qualitygroup/index.ts new file mode 100644 index 0000000..8825bba --- /dev/null +++ b/src/api/mes/qualitygroup/index.ts @@ -0,0 +1,55 @@ +import request from '@/config/axios' + +export interface QualitygroupVO { + deleteTime: Date + id: number + status: string + concurrencyStamp: number + remark: string + deleter: string + siteId: number + code: string + name: string + groupCode: string +} + +// 查询质检分组列表 +export const getQualitygroupPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/mes/qualitygroup/senior', data }) + } else { + return await request.get({ url: `/mes/qualitygroup/page`, params }) + } +} + +// 查询质检分组详情 +export const getQualitygroup = async (id: number) => { + return await request.get({ url: `/mes/qualitygroup/get?id=` + id }) +} + +// 新增质检分组 +export const createQualitygroup = async (data: QualitygroupVO) => { + return await request.post({ url: `/mes/qualitygroup/create`, data }) +} + +// 修改质检分组 +export const updateQualitygroup = async (data: QualitygroupVO) => { + return await request.put({ url: `/mes/qualitygroup/update`, data }) +} + +// 删除质检分组 +export const deleteQualitygroup = async (id: number) => { + return await request.delete({ url: `/mes/qualitygroup/delete?id=` + id }) +} + +// 导出质检分组 Excel +export const exportQualitygroup = async (params) => { + return await request.download({ url: `/mes/qualitygroup/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/mes/qualitygroup/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/mes/reportpStore/index.ts b/src/api/mes/reportpStore/index.ts new file mode 100644 index 0000000..adb29ea --- /dev/null +++ b/src/api/mes/reportpStore/index.ts @@ -0,0 +1,56 @@ +import request from '@/config/axios' + +export interface ReportpStoreVO { + status: string + remark: string + planDayCode: string + workBillNo: string + batchCode: string + reportUuid: string + itemBasicCode: string + itemCounts: number + itemUom: string + workstationCode: string + productCode: string +} + +// 查询工序报工物料明细列表 +export const getReportpStorePage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/mes/reportp-store/senior', data }) + } else { + return await request.get({ url: `/mes/reportp-store/page`, params }) + } +} + +// 查询工序报工物料明细详情 +export const getReportpStore = async (id: number) => { + return await request.get({ url: `/mes/reportp-store/get?id=` + id }) +} + +// 新增工序报工物料明细 +export const createReportpStore = async (data: ReportpStoreVO) => { + return await request.post({ url: `/mes/reportp-store/create`, data }) +} + +// 修改工序报工物料明细 +export const updateReportpStore = async (data: ReportpStoreVO) => { + return await request.put({ url: `/mes/reportp-store/update`, data }) +} + +// 删除工序报工物料明细 +export const deleteReportpStore = async (id: number) => { + return await request.delete({ url: `/mes/reportp-store/delete?id=` + id }) +} + +// 导出工序报工物料明细 Excel +export const exportReportpStore = async (params) => { + return await request.download({ url: `/mes/reportp-store/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/mes/reportp-store/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/mes/reworkBatch/index.ts b/src/api/mes/reworkBatch/index.ts new file mode 100644 index 0000000..0ab7e79 --- /dev/null +++ b/src/api/mes/reworkBatch/index.ts @@ -0,0 +1,76 @@ +import request from '@/config/axios' + +export interface ReworkBatchVO { + deleteTime: Date + id: number + status: string + concurrencyStamp: number + remark: string + deleter: string + siteId: number + reworkType: string + productionCode: string + productionCount: string + reworkAction: string + replaceFlag: string + reworkPersoncode: string + reworkTime: Date + reworkResult: string + reworkbillNo: string +} + +// 查询返工登记批量列表 +export const getReworkBatchPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/mes/rework-batch/senior', data }) + } else { + return await request.get({ url: `/mes/rework-batch/page`, params }) + } +} + +// 查询返工登记批量详情 +export const getReworkBatch = async (id: number) => { + return await request.get({ url: `/mes/rework-batch/get?id=` + id }) +} + +// 新增返工登记批量 +export const createReworkBatch = async (data: ReworkBatchVO) => { + return await request.post({ url: `/mes/rework-batch/create`, data }) +} + +// 修改返工登记批量 +export const updateReworkBatch = async (data: ReworkBatchVO) => { + return await request.put({ url: `/mes/rework-batch/update`, data }) +} + +// 删除返工登记批量 +export const deleteReworkBatch = async (id: number) => { + return await request.delete({ url: `/mes/rework-batch/delete?id=` + id }) +} + +// 中止返工登记单件 +export const suspendReworkSingle = async (id: number) => { + return await request.delete({ url: `/mes/rework-batch/suspend?id=` + id }) +} + +// 领取返工登记单件 +export const receiveReworkSingle = async (id: number) => { + return await request.put({ url: `/mes/rework-batch/receive?id=` + id }) +} + +// 完成返工登记单件 +export const finishReworkSingle = async (id: number) => { + return await request.put({ url: `/mes/rework-batch/finish?id=` + id }) +} + +// 导出返工登记批量 Excel +export const exportReworkBatch = async (params) => { + return await request.download({ url: `/mes/rework-batch/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/mes/rework-batch/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/mes/reworkSingle/index.ts b/src/api/mes/reworkSingle/index.ts new file mode 100644 index 0000000..d84be32 --- /dev/null +++ b/src/api/mes/reworkSingle/index.ts @@ -0,0 +1,76 @@ +import request from '@/config/axios' + +export interface ReworkSingleVO { + deleteTime: Date + id: number + status: string + concurrencyStamp: number + remark: string + deleter: string + siteId: number + reworkType: string + productionCode: string + reworkAction: string + replaceFlag: string + reworkPersoncode: string + reworkTime: Date + reworkResult: string + reworkbillNo: string +} + +// 查询返工登记单件列表 +export const getReworkSinglePage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/mes/rework-single/senior', data }) + } else { + return await request.get({ url: `/mes/rework-single/page`, params }) + } +} + +// 查询返工登记单件详情 +export const getReworkSingle = async (id: number) => { + return await request.get({ url: `/mes/rework-single/get?id=` + id }) +} + +// 新增返工登记单件 +export const createReworkSingle = async (data: ReworkSingleVO) => { + return await request.post({ url: `/mes/rework-single/create`, data }) +} + +// 修改返工登记单件 +export const updateReworkSingle = async (data: ReworkSingleVO) => { + return await request.put({ url: `/mes/rework-single/update`, data }) +} + +// 删除返工登记单件 +export const deleteReworkSingle = async (id: number) => { + return await request.delete({ url: `/mes/rework-single/delete?id=` + id }) +} + +// 中止返工登记单件 +export const suspendReworkSingle = async (id: number) => { + return await request.delete({ url: `/mes/rework-single/suspend?id=` + id }) +} + +// 领取返工登记单件 +export const receiveReworkSingle = async (id: number) => { + return await request.put({ url: `/mes/rework-single/receive?id=` + id }) +} + +// 完成返工登记单件 +export const finishReworkSingle = async (id: number) => { + return await request.put({ url: `/mes/rework-single/finish?id=` + id }) +} + + +// 导出返工登记单件 Excel +export const exportReworkSingle = async (params) => { + return await request.download({ url: `/mes/rework-single/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/mes/rework-single/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/mes/teamSetting/index.ts b/src/api/mes/teamSetting/index.ts new file mode 100644 index 0000000..61224bc --- /dev/null +++ b/src/api/mes/teamSetting/index.ts @@ -0,0 +1,61 @@ +import request from '@/config/axios' + +export interface TeamSettingVO { + id: number + teamCode: string + teamName: string + teamType: string + endTime: Date + textOne: string + textTwo: string + textThree: string + textFour: string + textFive: string + deleteTime: Date + status: string + concurrencyStamp: number + remark: string + deleter: string + siteId: number +} + +// 查询班组人员管理列表 +export const getTeamSettingPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/mes/teamSetting/senior', data }) + } else { + return await request.get({ url: `/mes/teamSetting/page`, params }) + } +} + +// 查询班组人员管理详情 +export const getTeamSetting = async (id: number) => { + return await request.get({ url: `/mes/teamSetting/get?id=` + id }) +} + +// 新增班组人员管理 +export const createTeamSetting = async (data: TeamSettingVO) => { + return await request.post({ url: `/mes/teamSetting/create`, data }) +} + +// 修改班组人员管理 +export const updateTeamSetting = async (data: TeamSettingVO) => { + return await request.put({ url: `/mes/teamSetting/update`, data }) +} + +// 删除班组人员管理 +export const deleteTeamSetting = async (id: number) => { + return await request.delete({ url: `/mes/teamSetting/delete?id=` + id }) +} + +// 导出班组人员管理 Excel +export const exportTeamSetting = async (params) => { + return await request.download({ url: `/mes/teamSetting/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/mes/teamSetting/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/mes/workScheduling/index.ts b/src/api/mes/workScheduling/index.ts new file mode 100644 index 0000000..f6f118c --- /dev/null +++ b/src/api/mes/workScheduling/index.ts @@ -0,0 +1,80 @@ +import request from '@/config/axios' + +export interface WorkSchedulingVO { + flagDo: string +} + +// 查询生产任务排产列表 +export const getWorkSchedulingPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/mes/workScheduling/senior', data }) + } else { + return await request.get({ url: `/mes/workScheduling/page`, params }) + } +} + +// 查询生产任务排产详情 +export const getWorkScheduling = async (id: number) => { + return await request.get({ url: `/mes/workScheduling/get?id=` + id }) +} + +// 新增生产任务排产 +export const createWorkScheduling = async (data: WorkSchedulingVO) => { + return await request.post({ url: `/mes/workScheduling/create`, data }) +} + +// 修改生产任务排产 +export const updateWorkScheduling = async (data: WorkSchedulingVO) => { + return await request.put({ url: `/mes/workScheduling/update`, data }) +} +// 更改生产任务状态 +export const updateWorkSchedulingStatus = async (data: any) => { + return await request.put({ url: `/mes/workScheduling/updateStatus`, data }) +} + +// 删除生产任务排产 +export const deleteWorkScheduling = async (id: number) => { + return await request.delete({ url: `/mes/workScheduling/delete?id=` + id }) +} + +// 导出生产任务排产 Excel +export const exportWorkScheduling = async (params) => { + return await request.download({ url: `/mes/workScheduling/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/mes/workScheduling/get-import-template' }) +} +// 完工 +export const completeHandle = async (data) => { + return await request.post({ url: `/mes/workScheduling/completeHandle`, data }) +} +//工序报工 +export const reportWorkByProcess = async (data) => { + return await request.post({ url: `/mes/work-scheduling-detail/reportWorkByProcess`, data }) +} +//批量报工 +export const reportWorkByTask = async (data) => { + return await request.post({ url: `/mes/workScheduling/reportForAll`, data }) +} +//检查当前节点是否可以完工 +export const getNodePosition = async (params) => { + return await request.get({ url: `/mes/workScheduling/getNodePosition`, params }) +} +//获取当前工序的员工列表 +export const getCurrentWorkerList = async (params) => { + return await request.get({ url: `/mes/workScheduling/getCurrentWorkerList`, params }) +} +//获取当前工单的工序列表 +export const getProcessList = async (params) => { + return await request.get({ url: `/mes/workScheduling/getProcessList`, params }) +} +//工序质检 +export const processQualified = async (data) => { + return await request.post({ url: `/mes/work-scheduling-detail/processQualified`, data }) +} + + diff --git a/src/api/mes/workSchedulingDetail/index.ts b/src/api/mes/workSchedulingDetail/index.ts new file mode 100644 index 0000000..122291b --- /dev/null +++ b/src/api/mes/workSchedulingDetail/index.ts @@ -0,0 +1,69 @@ +import request from '@/config/axios' + +export interface WorkSchedulingDetailVO { + schedulingCode: string + schedulingId: number + taskSort: number + nodeCode: string + workstationValidate: string + deviceValidate: string + personValidate: string + reportPerson: string + receivePerson: string + planCount: number + reportCount: number + reportType: number + qualifiedCount: number + unqualifiedCount: number + receiveWorkstation: string + receiveDevice: string + materialValidate: string +} + +// 查询工单任务明细列表 +export const getWorkSchedulingDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/mes/work-scheduling-detail/senior', data }) + } else { + return await request.get({ url: `/mes/work-scheduling-detail/page`, params }) + } +} + +// 查询工单任务明细详情 +export const getWorkSchedulingDetail = async (id: number) => { + return await request.get({ url: `/mes/work-scheduling-detail/get?id=` + id }) +} + +// 新增工单任务明细 +export const createWorkSchedulingDetail = async (data: WorkSchedulingDetailVO) => { + return await request.post({ url: `/mes/work-scheduling-detail/create`, data }) +} +// 更新工序的状态 +export const processFinished = async (id:number) => { + return await request.get({ url: `/mes/work-scheduling-detail/processFinished?id=`+id }) +} +// 修改工单任务明细 +export const updateWorkSchedulingDetail = async (data: WorkSchedulingDetailVO) => { + return await request.put({ url: `/mes/work-scheduling-detail/update`, data }) +} + +// 删除工单任务明细 +export const deleteWorkSchedulingDetail = async (id: number) => { + return await request.delete({ url: `/mes/work-scheduling-detail/delete?id=` + id }) +} + +// 导出工单任务明细 Excel +export const exportWorkSchedulingDetail = async (params) => { + return await request.download({ url: `/mes/work-scheduling-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/mes/work-scheduling-detail/get-import-template' }) +} +//工序报工 +export const reportWorkByProcess = async (data) => { + return await request.post({ url: `/mes/work-scheduling-detail/reportWorkByProcess`, data }) +} \ No newline at end of file diff --git a/src/api/mes/workSchedulingQaform/index.ts b/src/api/mes/workSchedulingQaform/index.ts new file mode 100644 index 0000000..e964dad --- /dev/null +++ b/src/api/mes/workSchedulingQaform/index.ts @@ -0,0 +1,63 @@ +import request from '@/config/axios' + +export interface WorkSchedulingQaformVO { + deleteTime: Date + id: number + status: string + concurrencyStamp: number + remark: string + deleter: string + siteId: number + planMaserCode: string + schedulingCode: string + nodeCode: string + qaFormNo: string + qaFormName: string + qaFormType: string + qaTime: Date + qaCount: number + qaCountPassed: number + qaCountNotpassed: number + qaPassRate: string +} + +// 查询任务质检单列表 +export const getWorkSchedulingQaformPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/mes/work-scheduling-qaform/senior', data }) + } else { + return await request.get({ url: `/mes/work-scheduling-qaform/page`, params }) + } +} + +// 查询任务质检单详情 +export const getWorkSchedulingQaform = async (id: number) => { + return await request.get({ url: `/mes/work-scheduling-qaform/get?id=` + id }) +} + +// 新增任务质检单 +export const createWorkSchedulingQaform = async (data: WorkSchedulingQaformVO) => { + return await request.post({ url: `/mes/work-scheduling-qaform/create`, data }) +} + +// 修改任务质检单 +export const updateWorkSchedulingQaform = async (data: WorkSchedulingQaformVO) => { + return await request.put({ url: `/mes/work-scheduling-qaform/update`, data }) +} + +// 删除任务质检单 +export const deleteWorkSchedulingQaform = async (id: number) => { + return await request.delete({ url: `/mes/work-scheduling-qaform/delete?id=` + id }) +} + +// 导出任务质检单 Excel +export const exportWorkSchedulingQaform = async (params) => { + return await request.download({ url: `/mes/work-scheduling-qaform/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/mes/work-scheduling-qaform/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/mes/workcalendar/index.ts b/src/api/mes/workcalendar/index.ts new file mode 100644 index 0000000..2769ea2 --- /dev/null +++ b/src/api/mes/workcalendar/index.ts @@ -0,0 +1,81 @@ +import request from '@/config/axios' + + + +// 查询节假日 +export const getDismantlingDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/mes/workCalendar/senior', data }) + } else { + return await request.get({ url: `/mes/workCalendar/page`, params }) + } +} + +//班组排班 信息 +export interface SchedulingcalendarCreateReqVO{ + keyDate:String, + //班组编码 + teamCode:String, +//班组名称 + teamName:String, +//班组类别" + teamType:String, +//班次名称" + shiftName:String, +//班次编码 +shiftCode:String, +//上班时间 +startTime:String, +//下班时间" +endTime:String, +//工作日期 +workDate:String, +//倒班规则 +shiftRule:String, +//倒班类型 +shiftRate:String, +sort:number +} +// +// 查询班组列表 +export const getTeamList = async (params) => { + return await request.get({ url: `/wms/team/page`, params }) +} + +// 保存排班信息 +export const saveWorkPlan = async (data:SchedulingcalendarCreateReqVO ) => { + return await request.post({ url: `/mes/schedulingcalendar/create`, data }) +} +// 删除班组排班信息 +export const deleteWorkPlan = async (data) => { + return await request.post({ url: `/mes/schedulingcalendar/deleteTeam`, data}) +} +//批量保存排班信息 +export const createBatch = async (data:any) => { + return await request.post({ url: `/mes/schedulingcalendar/createBatch`, data }) +} +//批量对象方式保存排班信息--保留 +export const createObj= async (data:any) => { + return await request.post({ url: `/mes/schedulingcalendar/createObj`, data }) +} + +// 查询排班信息 code startTime:开始时间" endTime:结束时间") +export const getWorkPlan = async (params ) => { + return await request.get({ url: `/mes/schedulingcalendar/getList`,params }) +} +// 查询班次信息 +export const getShiftInfos = async (code:any) => { + return await request.get({ url: `/mes/schedulingcalendar/shift?code=`+code}) +} +//查询节假日信息 +export const getHolidays = async (year:any) => { + return await request.get({ url: `/mes/holiday/listByYear?year=`+year}) +} + +// 导出排班信息 +export const exportWorkPlan = async (params) => { + return await request.download({ url: `/mes/schedulingcalendar/export-excel`, params }) +} + diff --git a/src/api/mes/workstation/index.ts b/src/api/mes/workstation/index.ts new file mode 100644 index 0000000..fcd745b --- /dev/null +++ b/src/api/mes/workstation/index.ts @@ -0,0 +1,160 @@ +import request from '@/config/axios' + +export interface WorkstationVO { + code: string + activeTime: Date + expireTime: Date + name: string +} +export const goalParams = { + workstationCode:null +} +// 查询工位列表 +export const getWorkstationPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/mes/workstation/senior', data }) + } else { + return await request.get({ url: `/mes/workstation/page`, params }) + } +} + +// 新增工位 +export const createWorkstation = async (data: WorkstationVO) => { + return await request.post({ url: `/mes/workstation/create`, data }) +} + +// 修改工位 +export const updateWorkstation = async (data: WorkstationVO) => { + return await request.put({ url: `/mes/workstation/update`, data }) +} + +// 删除工位 +export const deleteWorkstation = async (id: number) => { + return await request.delete({ url: `/mes/workstation/delete?id=` + id }) +} + +export const getEquipmentPage = async (params) => { + params.workstationCode = goalParams.workstationCode + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/mes/equipment/senior', data }) + } else { + return await request.get({ url: `/mes/equipment/getEquipmentPage`, params }) + } +} +// 查询选择设备列表 +export const checkEquipmentPageList = async (params) => { + params.workstationCode = goalParams.workstationCode + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/mes/equipment/senior', data }) + } else { + return await request.get({ url: `/mes/equipment/pageCheckList`, params }) + } +} +// 添加设备关联 +export const createEquipment = async (equipmentCodes:string[]) => { + const data = { + workstationCode : goalParams.workstationCode, + equipmentCodes : equipmentCodes + } + return await request.post({ url: `/mes/equipment/createRelation`, data }) +} + +// 删除设备关联 +export const deleteEquipment = async (equipmentCodes:string[]) => { + const data = { + workstationCode : goalParams.workstationCode, + equipmentCodes : equipmentCodes + } + return await request.post({ url: `/mes/equipment/deleteRelation`, data }) +} + + +export const getOperstepsPage = async (params) => { + params.workstationCode = goalParams.workstationCode + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/mes/workstation-opersteps/senior', data }) + } else { + return await request.get({ url: `/mes/workstation-opersteps/getWorkstationOperstepsPage`, params }) + } +} +// 添加操作步骤关联 +export const createOpersteps = async (codes:string[]) => { + const data = { + workstationCode : goalParams.workstationCode, + operstepsCodes : codes + } + return await request.post({ url: `/mes/workstation-opersteps/create`, data }) +} + +// 删除操作步骤关联 +export const deleteOpersteps = async (codes:string[]) => { + const data = { + workstationCode : goalParams.workstationCode, + operstepsCodes : codes + } + return await request.post({ url: `/mes/workstation-opersteps/delete`, data }) +} + +export const getAbilityPage = async (params) => { + params.workstationCode = goalParams.workstationCode + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/mes/workstation-ability/senior', data }) + } else { + return await request.get({ url: `/mes/workstation-ability/getWorkstationAbilityPage`, params }) + } +} +// 添加能力关联 +export const createAbility = async (codes:string[]) => { + const data = { + workstationCode : goalParams.workstationCode, + abilityCodes : codes + } + return await request.post({ url: `/mes/workstation-ability/create`, data }) +} + +// 删除能力关联 +export const deleteAbility = async (codes:string[]) => { + const data = { + workstationCode : goalParams.workstationCode, + abilityCodes : codes + } + return await request.post({ url: `/mes/workstation-ability/delete`, data }) +} +// 查询工位岗位关联 +export const getPostPage = async (params) => { + params.workstationCode = goalParams.workstationCode + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/mes/workstation-post/senior', data }) + } else { + return await request.get({ url: `/mes/workstation-post/getWorkstationPostPage`, params }) + } +} +// 添加能力关联 +export const createAPost = async (codes:string[]) => { + const data = { + workstationCode : goalParams.workstationCode, + postCodes : codes + } + return await request.post({ url: `/mes/workstation-post/create`, data }) +} + +// 删除能力关联 +export const deletePost = async (codes:string[]) => { + const data = { + workstationCode : goalParams.workstationCode, + postCodes : codes + } + return await request.post({ url: `/mes/workstation-post/delete`, data }) +} diff --git a/src/api/opc/automaticShellInsertion/index.ts b/src/api/opc/automaticShellInsertion/index.ts new file mode 100644 index 0000000..2a55f4a --- /dev/null +++ b/src/api/opc/automaticShellInsertion/index.ts @@ -0,0 +1,59 @@ +import request from '@/config/axios' + +export interface AutomaticShellInsertionVO { + id: number + code: string + rkyl: string + rklg: string + result: string + qualityStatus: string + station: string + processStartTime: string + processEndTime: string + loginId: string + coreId: number + rework: number + inBoundRst: string + inBoundFinsh: string +} + +// 查询自动入壳列表 +export const getAutomaticShellInsertionPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/opc/automatic-shell-insertion/senior', data }) + } else { + return await request.get({ url: `/opc/automatic-shell-insertion/page`, params }) + } +} + +// 查询自动入壳详情 +export const getAutomaticShellInsertion = async (id: number) => { + return await request.get({ url: `/opc/automatic-shell-insertion/get?id=` + id }) +} + +// 新增自动入壳 +export const createAutomaticShellInsertion = async (data: AutomaticShellInsertionVO) => { + return await request.post({ url: `/opc/automatic-shell-insertion/create`, data }) +} + +// 修改自动入壳 +export const updateAutomaticShellInsertion = async (data: AutomaticShellInsertionVO) => { + return await request.put({ url: `/opc/automatic-shell-insertion/update`, data }) +} + +// 删除自动入壳 +export const deleteAutomaticShellInsertion = async (id: number) => { + return await request.delete({ url: `/opc/automatic-shell-insertion/delete?id=` + id }) +} + +// 导出自动入壳 Excel +export const exportAutomaticShellInsertion = async (params) => { + return await request.download({ url: `/opc/automatic-shell-insertion/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/opc/automatic-shell-insertion/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/opc/coverCode/index.ts b/src/api/opc/coverCode/index.ts new file mode 100644 index 0000000..3f35c37 --- /dev/null +++ b/src/api/opc/coverCode/index.ts @@ -0,0 +1,56 @@ +import request from '@/config/axios' + +export interface CoverCodeVO { + id: number + code: string + qualityStatus: string + station: string + processStartTime: string + processEndTime: string + loginId: number + coreId: number + rework: string + inBoundRst: string + inBoundFinsh: string +} + +// 查询顶盖刻码列表 +export const getCoverCodePage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/opc/cover-code/senior', data }) + } else { + return await request.get({ url: `/opc/cover-code/page`, params }) + } +} + +// 查询顶盖刻码详情 +export const getCoverCode = async (id: number) => { + return await request.get({ url: `/opc/cover-code/get?id=` + id }) +} + +// 新增顶盖刻码 +export const createCoverCode = async (data: CoverCodeVO) => { + return await request.post({ url: `/opc/cover-code/create`, data }) +} + +// 修改顶盖刻码 +export const updateCoverCode = async (data: CoverCodeVO) => { + return await request.put({ url: `/opc/cover-code/update`, data }) +} + +// 删除顶盖刻码 +export const deleteCoverCode = async (id: number) => { + return await request.delete({ url: `/opc/cover-code/delete?id=` + id }) +} + +// 导出顶盖刻码 Excel +export const exportCoverCode = async (params) => { + return await request.download({ url: `/opc/cover-code/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/opc/cover-code/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/opc/hexinPatch/index.ts b/src/api/opc/hexinPatch/index.ts new file mode 100644 index 0000000..27bef55 --- /dev/null +++ b/src/api/opc/hexinPatch/index.ts @@ -0,0 +1,60 @@ +import request from '@/config/axios' + +export interface HexinPatchVO { + id: number + code: string + jdpcm1: string + jdpcm2: string + jdpcm3: string + result: string + qualityStatus: string + station: string + processStartTime: string + processEndTime: string + loginId: string + coreId: number + rework: number + inBoundRst: string + inBoundFinsh: string +} + +// 查询合芯贴片列表 +export const getHexinPatchPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/opc/hexin-patch/senior', data }) + } else { + return await request.get({ url: `/opc/hexin-patch/page`, params }) + } +} + +// 查询合芯贴片详情 +export const getHexinPatch = async (id: number) => { + return await request.get({ url: `/opc/hexin-patch/get?id=` + id }) +} + +// 新增合芯贴片 +export const createHexinPatch = async (data: HexinPatchVO) => { + return await request.post({ url: `/opc/hexin-patch/create`, data }) +} + +// 修改合芯贴片 +export const updateHexinPatch = async (data: HexinPatchVO) => { + return await request.put({ url: `/opc/hexin-patch/update`, data }) +} + +// 删除合芯贴片 +export const deleteHexinPatch = async (id: number) => { + return await request.delete({ url: `/opc/hexin-patch/delete?id=` + id }) +} + +// 导出合芯贴片 Excel +export const exportHexinPatch = async (params) => { + return await request.download({ url: `/opc/hexin-patch/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/opc/hexin-patch/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/opc/hotPress/index.ts b/src/api/opc/hotPress/index.ts new file mode 100644 index 0000000..ddf166f --- /dev/null +++ b/src/api/opc/hotPress/index.ts @@ -0,0 +1,70 @@ +import request from '@/config/axios' + +export interface HotPressVO { + id: number + code: string + gwh: string + jjh: string + qualityStatus: string + ryjg: string + dzjcjg: string + zzyl: string + ylsx: string + ylxx: string + ylbcsj: string + zjscwd: string + zjscxjwd: string + zjxcwd: string + zjxcxjwd: string + dzjcyk: string + dzjczz: string + dzjcsj: string + processStartTime: string + processEndTime: string + loginId: string + coreId: number + rework: number + inBoundRst: string + inBoundFinsh: string +} + +// 查询热压列表 +export const getHotPressPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/opc/hot-press/senior', data }) + } else { + return await request.get({ url: `/opc/hot-press/page`, params }) + } +} + +// 查询热压详情 +export const getHotPress = async (id: number) => { + return await request.get({ url: `/opc/hot-press/get?id=` + id }) +} + +// 新增热压 +export const createHotPress = async (data: HotPressVO) => { + return await request.post({ url: `/opc/hot-press/create`, data }) +} + +// 修改热压 +export const updateHotPress = async (data: HotPressVO) => { + return await request.put({ url: `/opc/hot-press/update`, data }) +} + +// 删除热压 +export const deleteHotPress = async (id: number) => { + return await request.delete({ url: `/opc/hot-press/delete?id=` + id }) +} + +// 导出热压 Excel +export const exportHotPress = async (params) => { + return await request.download({ url: `/opc/hot-press/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/opc/hot-press/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/opc/laserWelding/index.ts b/src/api/opc/laserWelding/index.ts new file mode 100644 index 0000000..de81bf4 --- /dev/null +++ b/src/api/opc/laserWelding/index.ts @@ -0,0 +1,74 @@ +import request from '@/config/axios' + +export interface LaserWeldingVO { + id: number + code: string + gbtm: string + code2: string + zjdw: string + zjljl: string + zjwz: string + zjgz: string + zjbhqll: string + zjccfs: string + zjhjsd: string + fjdw: string + fhlljl: string + fhwz: string + fjgl: string + fjbhqll: string + fjccfs: string + fjhjsd: string + qualityStatus: string + station: string + processStartTime: string + processEndTime: string + whnl: string + xxnl: string + loginId: string + coreId: number + rework: number + inDoundRst: string + inDoundFinsh: string +} + +// 查询转接片激光焊列表 +export const getLaserWeldingPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/opc/laser-welding/senior', data }) + } else { + return await request.get({ url: `/opc/laser-welding/page`, params }) + } +} + +// 查询转接片激光焊详情 +export const getLaserWelding = async (id: number) => { + return await request.get({ url: `/opc/laser-welding/get?id=` + id }) +} + +// 新增转接片激光焊 +export const createLaserWelding = async (data: LaserWeldingVO) => { + return await request.post({ url: `/opc/laser-welding/create`, data }) +} + +// 修改转接片激光焊 +export const updateLaserWelding = async (data: LaserWeldingVO) => { + return await request.put({ url: `/opc/laser-welding/update`, data }) +} + +// 删除转接片激光焊 +export const deleteLaserWelding = async (id: number) => { + return await request.delete({ url: `/opc/laser-welding/delete?id=` + id }) +} + +// 导出转接片激光焊 Excel +export const exportLaserWelding = async (params) => { + return await request.download({ url: `/opc/laser-welding/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/opc/laser-welding/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/opc/oneHelium/index.ts b/src/api/opc/oneHelium/index.ts new file mode 100644 index 0000000..87448da --- /dev/null +++ b/src/api/opc/oneHelium/index.ts @@ -0,0 +1,68 @@ +import request from '@/config/axios' + +export interface OneHeliumVO { + id: number + code: string + yhxh: string + yhhjjg: string + yhdcdljg: string + yhckyl: string + yhzhyl: string + yhchyl: string + yhzkd: string + yhqll: string + yhhll: string + yhhlyl: string + qualityStatus: string + station: string + processStartTime: string + processEndTime: string + hjsj: string + chsj: string + loginId: string + coreId: number + rework: number + inBoundRst: string + inBoundFinsh: string +} + +// 查询一次氦检列表 +export const getOneHeliumPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/opc/one-helium/senior', data }) + } else { + return await request.get({ url: `/opc/one-helium/page`, params }) + } +} + +// 查询一次氦检详情 +export const getOneHelium = async (id: number) => { + return await request.get({ url: `/opc/one-helium/get?id=` + id }) +} + +// 新增一次氦检 +export const createOneHelium = async (data: OneHeliumVO) => { + return await request.post({ url: `/opc/one-helium/create`, data }) +} + +// 修改一次氦检 +export const updateOneHelium = async (data: OneHeliumVO) => { + return await request.put({ url: `/opc/one-helium/update`, data }) +} + +// 删除一次氦检 +export const deleteOneHelium = async (id: number) => { + return await request.delete({ url: `/opc/one-helium/delete?id=` + id }) +} + +// 导出一次氦检 Excel +export const exportOneHelium = async (params) => { + return await request.download({ url: `/opc/one-helium/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/opc/one-helium/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/opc/packageMylar/index.ts b/src/api/opc/packageMylar/index.ts new file mode 100644 index 0000000..ce4b8b4 --- /dev/null +++ b/src/api/opc/packageMylar/index.ts @@ -0,0 +1,67 @@ +import request from '@/config/axios' + +export interface PackageMylarVO { + id: number + code: string + dtrrwd: string + dtrrTime: string + scbrrwd: string + scvrrTime: string + xcbrrwd: string + xcbrrTime: string + zyrrwd: string + zyrrTime: string + dtpcm: string + mylarPcm: string + jdpcm: string + qualityStatus: string + station: string + processStartTime: string + processEndTime: string + loginId: string + coreId: number + rework: number + inBoundRst: string + inBoundFinsh: string +} + +// 查询包Mylar列表 +export const getPackageMylarPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/opc/package-mylar/senior', data }) + } else { + return await request.get({ url: `/opc/package-mylar/page`, params }) + } +} + +// 查询包Mylar详情 +export const getPackageMylar = async (id: number) => { + return await request.get({ url: `/opc/package-mylar/get?id=` + id }) +} + +// 新增包Mylar +export const createPackageMylar = async (data: PackageMylarVO) => { + return await request.post({ url: `/opc/package-mylar/create`, data }) +} + +// 修改包Mylar +export const updatePackageMylar = async (data: PackageMylarVO) => { + return await request.put({ url: `/opc/package-mylar/update`, data }) +} + +// 删除包Mylar +export const deletePackageMylar = async (id: number) => { + return await request.delete({ url: `/opc/package-mylar/delete?id=` + id }) +} + +// 导出包Mylar Excel +export const exportPackageMylar = async (params) => { + return await request.download({ url: `/opc/package-mylar/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/opc/package-mylar/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/opc/sealingNailWelding/index.ts b/src/api/opc/sealingNailWelding/index.ts new file mode 100644 index 0000000..d707d41 --- /dev/null +++ b/src/api/opc/sealingNailWelding/index.ts @@ -0,0 +1,76 @@ +import request from '@/config/axios' + +export interface SealingNailWeldingVO { + id: number + code: string + jjNumber: string + qxJg: string + bhqll: string + qxCount: string + qxSpeed: string + qxpl: string + qcPower: string + topx: string + topy: string + topResult: string + ccdx: string + ccdy: string + ccdResult: string + hjbhqll: string + bx: string + gl: string + nl: string + pl: string + sd: string + ccz: string + qualityStatus: string + station: string + processStartTime: string + processEndTime: string + loginId: string + coreId: number + rework: number + inBoundRst: string + inBoundFinsh: string +} + +// 查询密封钉焊接列表 +export const getSealingNailWeldingPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/opc/sealing-nail-welding/senior', data }) + } else { + return await request.get({ url: `/opc/sealing-nail-welding/page`, params }) + } +} + +// 查询密封钉焊接详情 +export const getSealingNailWelding = async (id: number) => { + return await request.get({ url: `/opc/sealing-nail-welding/get?id=` + id }) +} + +// 新增密封钉焊接 +export const createSealingNailWelding = async (data: SealingNailWeldingVO) => { + return await request.post({ url: `/opc/sealing-nail-welding/create`, data }) +} + +// 修改密封钉焊接 +export const updateSealingNailWelding = async (data: SealingNailWeldingVO) => { + return await request.put({ url: `/opc/sealing-nail-welding/update`, data }) +} + +// 删除密封钉焊接 +export const deleteSealingNailWelding = async (id: number) => { + return await request.delete({ url: `/opc/sealing-nail-welding/delete?id=` + id }) +} + +// 导出密封钉焊接 Excel +export const exportSealingNailWelding = async (params) => { + return await request.download({ url: `/opc/sealing-nail-welding/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/opc/sealing-nail-welding/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/opc/secondaryInspection/index.ts b/src/api/opc/secondaryInspection/index.ts new file mode 100644 index 0000000..972e36b --- /dev/null +++ b/src/api/opc/secondaryInspection/index.ts @@ -0,0 +1,64 @@ +import request from '@/config/axios' + +export interface SecondaryInspectionVO { + id: number + code: string + exwh: string + exjjg: string + ezkd: string + eqll: string + ehll: string + eylz: string + qualityStatus: string + station: string + processStartTime: string + processEndTime: string + chsj: string + hjsj: string + loginId: string + coreId: number + rework: number + inBoundRst: string + inBoundFinsh: string +} + +// 查询二次氦检列表 +export const getSecondaryInspectionPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/opc/secondary-inspection/senior', data }) + } else { + return await request.get({ url: `/opc/secondary-inspection/page`, params }) + } +} + +// 查询二次氦检详情 +export const getSecondaryInspection = async (id: number) => { + return await request.get({ url: `/opc/secondary-inspection/get?id=` + id }) +} + +// 新增二次氦检 +export const createSecondaryInspection = async (data: SecondaryInspectionVO) => { + return await request.post({ url: `/opc/secondary-inspection/create`, data }) +} + +// 修改二次氦检 +export const updateSecondaryInspection = async (data: SecondaryInspectionVO) => { + return await request.put({ url: `/opc/secondary-inspection/update`, data }) +} + +// 删除二次氦检 +export const deleteSecondaryInspection = async (id: number) => { + return await request.delete({ url: `/opc/secondary-inspection/delete?id=` + id }) +} + +// 导出二次氦检 Excel +export const exportSecondaryInspection = async (params) => { + return await request.download({ url: `/opc/secondary-inspection/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/opc/secondary-inspection/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/opc/stackedCoreAdhesive/index.ts b/src/api/opc/stackedCoreAdhesive/index.ts new file mode 100644 index 0000000..74d0548 --- /dev/null +++ b/src/api/opc/stackedCoreAdhesive/index.ts @@ -0,0 +1,60 @@ +import request from '@/config/axios' + +export interface StackedCoreAdhesiveVO { + id: number + code: string + jdpcm1: string + jdpcm2: string + jdpcm3: string + result: string + qualityStatus: string + station: string + processStartTime: string + processEndTime: string + loginId: number + coreId: number + rework: string + inBoundRst: string + inBoundFinsh: string +} + +// 查询叠芯贴胶列表 +export const getStackedCoreAdhesivePage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/opc/stacked-core-adhesive/senior', data }) + } else { + return await request.get({ url: `/opc/stacked-core-adhesive/page`, params }) + } +} + +// 查询叠芯贴胶详情 +export const getStackedCoreAdhesive = async (id: number) => { + return await request.get({ url: `/opc/stacked-core-adhesive/get?id=` + id }) +} + +// 新增叠芯贴胶 +export const createStackedCoreAdhesive = async (data: StackedCoreAdhesiveVO) => { + return await request.post({ url: `/opc/stacked-core-adhesive/create`, data }) +} + +// 修改叠芯贴胶 +export const updateStackedCoreAdhesive = async (data: StackedCoreAdhesiveVO) => { + return await request.put({ url: `/opc/stacked-core-adhesive/update`, data }) +} + +// 删除叠芯贴胶 +export const deleteStackedCoreAdhesive = async (id: number) => { + return await request.delete({ url: `/opc/stacked-core-adhesive/delete?id=` + id }) +} + +// 导出叠芯贴胶 Excel +export const exportStackedCoreAdhesive = async (params) => { + return await request.download({ url: `/opc/stacked-core-adhesive/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/opc/stacked-core-adhesive/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/opc/topWelded/index.ts b/src/api/opc/topWelded/index.ts new file mode 100644 index 0000000..67e90d1 --- /dev/null +++ b/src/api/opc/topWelded/index.ts @@ -0,0 +1,132 @@ +import request from '@/config/axios' + +export interface TopWeldedVO { + id: number + code: string + jjyhj1: string + jjljl1: string + jjbhq1: string + jjccll1: string + jjhjsd1: string + jj1ngl1: string + jjwnl1: string + jjhjnl1: string + jjbx1: string + jjh1: string + jjljl2: string + jjbhq2: string + jjccll2: string + jjhjsd2: string + jj1ngl2: string + jjwnl2: string + jjhjnl2: string + jjbx2: string + jjljl3: string + jjbhq3: string + jjccll3: string + jjhjsd3: string + jj1ngl3: string + jjwnl3: string + jjhjnl3: string + jjbx3: string + jjljl4: string + jjbhq4: string + jjccll4: string + jjhjsd4: string + jj1ngl4: string + jjwnl4: string + jjhjnl4: string + jjbx4: string + jjljl5: string + jjbhq5: string + jjccll5: string + jjhjsd5: string + jj1ngl5: string + jjwnl5: string + jjhjl5: string + jjbx5: string + jjljl6: string + jjbhq6: string + jjccll6: string + jjhjsd6: string + jj1ngl6: string + jjwnl6: string + jjhjnl6: string + jjbx6: string + jjljl7: string + jjbhq7: string + jjccll7: string + jjhjsd7: string + jj1ngl7: string + jjwnl7: string + jjhjnl7: string + jjbx7: string + jjljl8: string + jjbhq8: string + jjccll8: string + jjhjsd8: string + jj1ngl8: string + jjwnl8: string + jjhjnl8: string + jjbx8: string + jythj: string + jyljl: string + jybhq: string + jyccll: string + jyhjsd: string + jynhgl: string + jywhgl: string + jyhjnl: string + jybx: string + jyjjh: string + qualityStatus: string + station: string + processStartTime: string + processEndTime: string + loginId: string + coreId: number + rework: number + inBoundRst: string + inBoundFinsh: string +} + +// 查询顶盖预满焊列表 +export const getTopWeldedPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/opc/top-welded/senior', data }) + } else { + return await request.get({ url: `/opc/top-welded/page`, params }) + } +} + +// 查询顶盖预满焊详情 +export const getTopWelded = async (id: number) => { + return await request.get({ url: `/opc/top-welded/get?id=` + id }) +} + +// 新增顶盖预满焊 +export const createTopWelded = async (data: TopWeldedVO) => { + return await request.post({ url: `/opc/top-welded/create`, data }) +} + +// 修改顶盖预满焊 +export const updateTopWelded = async (data: TopWeldedVO) => { + return await request.put({ url: `/opc/top-welded/update`, data }) +} + +// 删除顶盖预满焊 +export const deleteTopWelded = async (id: number) => { + return await request.delete({ url: `/opc/top-welded/delete?id=` + id }) +} + +// 导出顶盖预满焊 Excel +export const exportTopWelded = async (params) => { + return await request.download({ url: `/opc/top-welded/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/opc/top-welded/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/opc/ultrasonicFinalWelding/index.ts b/src/api/opc/ultrasonicFinalWelding/index.ts new file mode 100644 index 0000000..17f6659 --- /dev/null +++ b/src/api/opc/ultrasonicFinalWelding/index.ts @@ -0,0 +1,70 @@ +import request from '@/config/axios' + +export interface UltrasonicFinalWeldingVO { + id: number + code: string + alzsj: string + alnl: string + algl: string + alcs: string + alzf: string + alfl: string + cuzsj: string + cunl: string + cugl: string + cucs: string + cuzf: string + cuyl: string + qualityStatus: string + station: string + processStartTime: string + processEndTime: string + hzsm: string + htsm: string + loginId: number + coreId: number + rework: string + inBoundRst: string + inBoundFinsh: string +} + +// 查询超声波终焊列表 +export const getUltrasonicFinalWeldingPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/opc/ultrasonic-final-welding/senior', data }) + } else { + return await request.get({ url: `/opc/ultrasonic-final-welding/page`, params }) + } +} + +// 查询超声波终焊详情 +export const getUltrasonicFinalWelding = async (id: number) => { + return await request.get({ url: `/opc/ultrasonic-final-welding/get?id=` + id }) +} + +// 新增超声波终焊 +export const createUltrasonicFinalWelding = async (data: UltrasonicFinalWeldingVO) => { + return await request.post({ url: `/opc/ultrasonic-final-welding/create`, data }) +} + +// 修改超声波终焊 +export const updateUltrasonicFinalWelding = async (data: UltrasonicFinalWeldingVO) => { + return await request.put({ url: `/opc/ultrasonic-final-welding/update`, data }) +} + +// 删除超声波终焊 +export const deleteUltrasonicFinalWelding = async (id: number) => { + return await request.delete({ url: `/opc/ultrasonic-final-welding/delete?id=` + id }) +} + +// 导出超声波终焊 Excel +export const exportUltrasonicFinalWelding = async (params) => { + return await request.download({ url: `/opc/ultrasonic-final-welding/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/opc/ultrasonic-final-welding/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/opc/ultrasonicPreWelding/index.ts b/src/api/opc/ultrasonicPreWelding/index.ts new file mode 100644 index 0000000..bbd5f18 --- /dev/null +++ b/src/api/opc/ultrasonicPreWelding/index.ts @@ -0,0 +1,68 @@ +import request from '@/config/axios' + +export interface UltrasonicPreWeldingVO { + id: number + code: string + alzsj: string + alnl: string + algl: string + alcs: string + alzf: string + alyl: string + cuzsj: string + cunl: string + cugl: string + cucs: string + cuzf: string + cuyl: string + qualityStatus: string + station: string + processStartTime: string + processEndTime: string + loginId: number + coreId: number + rework: string + inBoundRst: string + inBoundFinsh: string +} + +// 查询超声波预焊列表 +export const getUltrasonicPreWeldingPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/opc/ultrasonic-pre-welding/senior', data }) + } else { + return await request.get({ url: `/opc/ultrasonic-pre-welding/page`, params }) + } +} + +// 查询超声波预焊详情 +export const getUltrasonicPreWelding = async (id: number) => { + return await request.get({ url: `/opc/ultrasonic-pre-welding/get?id=` + id }) +} + +// 新增超声波预焊 +export const createUltrasonicPreWelding = async (data: UltrasonicPreWeldingVO) => { + return await request.post({ url: `/opc/ultrasonic-pre-welding/create`, data }) +} + +// 修改超声波预焊 +export const updateUltrasonicPreWelding = async (data: UltrasonicPreWeldingVO) => { + return await request.put({ url: `/opc/ultrasonic-pre-welding/update`, data }) +} + +// 删除超声波预焊 +export const deleteUltrasonicPreWelding = async (id: number) => { + return await request.delete({ url: `/opc/ultrasonic-pre-welding/delete?id=` + id }) +} + +// 导出超声波预焊 Excel +export const exportUltrasonicPreWelding = async (params) => { + return await request.download({ url: `/opc/ultrasonic-pre-welding/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/opc/ultrasonic-pre-welding/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/opc/weldAdhesiveBond/index.ts b/src/api/opc/weldAdhesiveBond/index.ts new file mode 100644 index 0000000..826bc8f --- /dev/null +++ b/src/api/opc/weldAdhesiveBond/index.ts @@ -0,0 +1,59 @@ +import request from '@/config/axios' + +export interface WeldAdhesiveBondVO { + id: number + code: string + zmtjcd: string + bmtjcd: string + jdyclm: string + qualityStatus: string + station: string + processStartTime: string + processEndTime: string + loginId: number + coreId: number + rework: string + inBoundRst: string + inBoundFinsh: string +} + +// 查询超声波焊后贴胶列表 +export const getWeldAdhesiveBondPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/opc/weld-adhesive-bond/senior', data }) + } else { + return await request.get({ url: `/opc/weld-adhesive-bond/page`, params }) + } +} + +// 查询超声波焊后贴胶详情 +export const getWeldAdhesiveBond = async (id: number) => { + return await request.get({ url: `/opc/weld-adhesive-bond/get?id=` + id }) +} + +// 新增超声波焊后贴胶 +export const createWeldAdhesiveBond = async (data: WeldAdhesiveBondVO) => { + return await request.post({ url: `/opc/weld-adhesive-bond/create`, data }) +} + +// 修改超声波焊后贴胶 +export const updateWeldAdhesiveBond = async (data: WeldAdhesiveBondVO) => { + return await request.put({ url: `/opc/weld-adhesive-bond/update`, data }) +} + +// 删除超声波焊后贴胶 +export const deleteWeldAdhesiveBond = async (id: number) => { + return await request.delete({ url: `/opc/weld-adhesive-bond/delete?id=` + id }) +} + +// 导出超声波焊后贴胶 Excel +export const exportWeldAdhesiveBond = async (params) => { + return await request.download({ url: `/opc/weld-adhesive-bond/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/opc/weld-adhesive-bond/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/qms/aql/index.ts b/src/api/qms/aql/index.ts new file mode 100644 index 0000000..90d8e63 --- /dev/null +++ b/src/api/qms/aql/index.ts @@ -0,0 +1,120 @@ +import request from '@/config/axios' + +export interface AqlVO { + id: number + code: string + inspectionQualification: string + sampleCharacterCode: string + sampleSize: number + a0separator010: number + r0separator010: number + a0separator015: number + r0separator015: number + a0separator025: number + r0separator025: number + a0separator040: number + r0separator040: number + a0separator065: number + r0separator065: number + a0separator10: number + r0separator10: number + a0separator15: number + r0separator15: number + a0separator25: number + r0separator25: number + a0separator40: number + r0separator40: number + a0separator65: number + r0separator65: number + a1separator0: number + r1separator0: number + a1separator5: number + r1separator5: number + a2separator5: number + r2separator5: number + a4separator0: number + r4separator0: number + a6separator5: number + r6separator5: number + a10: number + r10: number + a15: number + r15: number + a25: number + r25: number + a40: number + r40: number + a65: number + r65: number + a100: number + r100: number + a150: number + r150: number + a250: number + r250: number + a400: number + r400: number + a650: number + r650: number + a1000: number + r1000: number + available: string +} + +// 查询aql列表 +export const getAqlPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/qms/aql/senior', data }) + } else { + return await request.get({ url: `/qms/aql/page`, params }) + } +} + +// 查询aql详情 +export const getAql = async (id: number) => { + return await request.get({ url: `/qms/aql/get?id=` + id }) +} + +// 新增aql +export const createAql = async (data: AqlVO) => { + return await request.post({ url: `/qms/aql/create`, data }) +} + +// 修改aql +export const updateAql = async (data: AqlVO) => { + return await request.put({ url: `/qms/aql/update`, data }) +} + +// 删除aql +export const deleteAql = async (id: number) => { + return await request.delete({ url: `/qms/aql/delete?id=` + id }) +} + +// 导出aql Excel +export const exportAql = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/qms/aql/export-excel-senior`, data }) + }else{ + return await request.download({ url: `/qms/aql/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/qms/aql/get-import-template' }) +} + +export const getSamplingScheme = async () => { + return await request.get({ url: `/qms/sampling-scheme/get-available-list`}) +} +// 启用 +export const enableAql = async (id: number) => { + return await request.enable({ url: `/qms/aql/enable?id=` + id }) +} +// 禁用 +export const disableAql = async (id: number) => { + return await request.disable({ url: `/qms/aql/disable?id=` + id }) +} diff --git a/src/api/qms/counter/index.ts b/src/api/qms/counter/index.ts new file mode 100644 index 0000000..9642371 --- /dev/null +++ b/src/api/qms/counter/index.ts @@ -0,0 +1,71 @@ +import request from '@/config/axios' + +export interface CounterVO { + id: number + itemCode: string + inspectionType: string + supplierCode: string + qualifiedTimes: number + lastQualifiedBatch: string + lastQualifiedTime: Date + unqualifiedTimes: number + lastUnqualifiedBatch: number + lastUnqualifiedTime: number + nextStage: number + available: string + deletionTime: Date + deleterId: string + extraProperties: string + concurrencyStamp: number + siteId: string +} + +// 查询物料检验计数器列表 +export const getCounterPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/qms/counter/senior', data }) + } else { + return await request.get({ url: `/qms/counter/page`, params }) + } +} + +// 查询物料检验计数器详情 +export const getCounter = async (id: number) => { + return await request.get({ url: `/qms/counter/get?id=` + id }) +} + +// 新增物料检验计数器 +export const createCounter = async (data: CounterVO) => { + return await request.post({ url: `/qms/counter/create`, data }) +} + +// 修改物料检验计数器 +export const updateCounter = async (data: CounterVO) => { + return await request.put({ url: `/qms/counter/update`, data }) +} + +// 删除物料检验计数器 +export const deleteCounter = async (id: number) => { + return await request.delete({ url: `/qms/counter/delete?id=` + id }) +} + +// 导出物料检验计数器 Excel +export const exportCounter = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/qms/counter/export-excel-senior`, data }) + }else{ + return await request.download({ url: `/qms/counter/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/qms/counter/get-import-template' }) +} + +export const getNextStage = async (id:number) => { + return await request.get({ url: `/qms/counter/getNextStage?id=` + id}) +} diff --git a/src/api/qms/dynamicRule/index.ts b/src/api/qms/dynamicRule/index.ts new file mode 100644 index 0000000..23deba6 --- /dev/null +++ b/src/api/qms/dynamicRule/index.ts @@ -0,0 +1,67 @@ +import request from '@/config/axios' + +export interface DynamicRuleVO { + code: string + description: string + available: string + deletionTime: Date + deleterId: string + extraProperties: string + concurrencyStamp: number + siteId: string +} + +// 查询动态修改规则列表 +export const getDynamicRulePage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/qms/dynamic-rule/senior', data }) + } else { + return await request.get({ url: `/qms/dynamic-rule/page`, params }) + } +} + +// 查询动态修改规则详情 +export const getDynamicRule = async (id: number) => { + return await request.get({ url: `/qms/dynamic-rule/get?id=` + id }) +} + +// 新增动态修改规则 +export const createDynamicRule = async (data: DynamicRuleVO) => { + return await request.post({ url: `/qms/dynamic-rule/create`, data }) +} + +// 修改动态修改规则 +export const updateDynamicRule = async (data: DynamicRuleVO) => { + return await request.put({ url: `/qms/dynamic-rule/update`, data }) +} + +// 删除动态修改规则 +export const deleteDynamicRule = async (id: number) => { + return await request.delete({ url: `/qms/dynamic-rule/delete?id=` + id }) +} + +// 导出动态修改规则 Excel +export const exportDynamicRule = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/qms/dynamic-rule/export-excel-senior`, data }) + }else{ + return await request.download({ url: `/qms/dynamic-rule/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/qms/dynamic-rule/get-import-template' }) +} + +// 启用 +export const enableDynamicRule = async (id: number) => { + return await request.enable({ url: `/qms/dynamic-rule/enable?id=` + id }) +} +// 禁用 +export const disableDynamicRule = async (id: number) => { + return await request.disable({ url: `/qms/dynamic-rule/disable?id=` + id }) +} diff --git a/src/api/qms/inspectionJob/InspectionJobPackage/InspectionJobPackage.ts b/src/api/qms/inspectionJob/InspectionJobPackage/InspectionJobPackage.ts new file mode 100644 index 0000000..ff82af6 --- /dev/null +++ b/src/api/qms/inspectionJob/InspectionJobPackage/InspectionJobPackage.ts @@ -0,0 +1,13 @@ +import request from '@/config/axios' +export interface InspectionRequestPackageVO { + number: string + packageCode: string + packageSpecificationCode: string + amount: string + measuringUnit: string +} + +//查询包装列表 +export const getInspectionJobPackageList = async (id: number) => { + return await request.get({ url: `/qms/inspection-job-package/list?masterId=` + id }) +} diff --git a/src/api/qms/inspectionJob/inspectionJobDetail/index.ts b/src/api/qms/inspectionJob/inspectionJobDetail/index.ts new file mode 100644 index 0000000..e9148ab --- /dev/null +++ b/src/api/qms/inspectionJob/inspectionJobDetail/index.ts @@ -0,0 +1,52 @@ +import request from '@/config/axios' + + +// 查询检验申请列表 +export const getInspectionJobDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/qms/inspection-job-detail/senior', data }) + } else { + return await request.get({ url: `/qms/inspection-job-detail/page`, params }) + } +} +//查询检验申请列表 +export const getInspectionJobDetailList = async (id: number) => { + return await request.get({ url: `/qms/inspection-job-detail/list?masterId=` + id }) +} + +// 查询检验申请详情 +export const getInspectionJobDetail = async (id: number) => { + return await request.get({ url: `/qms/inspection-job-detail/get?id=` + id }) +} + +// 新增检验申请 +export const createInspectionJobDetail = async (data) => { + return await request.post({ url: `/qms/inspection-job-detail/create`, data }) +} + +// 修改检验申请 +export const updateInspectionJobDetail = async (data) => { + return await request.put({ url: `/qms/inspection-job-detail/update`, data }) +} + +// 删除检验申请 +export const deleteInspectionJobDetail = async (id: number) => { + return await request.delete({ url: `/qms/inspection-job-detail/delete?id=` + id }) +} + +// 导出检验申请 Excel +export const exportInspectionJobDetail = async (params) => { + return await request.download({ url: `/qms/inspection-job-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/qms/inspection-job-detail/get-import-template' }) +} + +// 根据检验方案编码获取工序和检验特性列表 +export const getBySchemeCode = async (schemeCode) => { + return await request.get({ url: `/qms/inspection-job-detail/getBySchemeCode?schemeCode=${schemeCode}` }) +} diff --git a/src/api/qms/inspectionJob/inspectionJobMain/index.ts b/src/api/qms/inspectionJob/inspectionJobMain/index.ts new file mode 100644 index 0000000..b8ff3f9 --- /dev/null +++ b/src/api/qms/inspectionJob/inspectionJobMain/index.ts @@ -0,0 +1,71 @@ +import request from '@/config/axios' + + +// 查询检验任务列表 +export const getInspectionJobMainPage = async (params) => { + if (params.isSearch) { + // delete params.isSearch + const data = {...params} + return await request.post({ url: '/qms/inspection-job-main/senior', data }) + } else { + return await request.get({ url: `/qms/inspection-job-main/page`, params }) + } +} + +// 查询检验任务详情 +export const getInspectionJobMain = async (id: number) => { + return await request.get({ url: `/qms/inspection-job-main/get?id=` + id }) +} + +// 新增检验任务 +export const createInspectionJobMain = async (data) => { + return await request.post({ url: `/qms/inspection-job-main/create`, data }) +} + +// 暂存检验任务 +export const stagingInspectionJobMain = async (data) => { + return await request.post({ url: `/qms/inspection-job-main/staging`, data }) +} + +// 修改检验任务 +export const updateInspectionJobMain = async (data) => { + return await request.put({ url: `/qms/inspection-job-main/update`, data }) +} +// 执行检验任务 +export const executeInspectionJobMain = async (data) => { + return await request.put({ url: `/qms/inspection-job-main/execute`, data }) +} +// 删除检验任务 +export const deleteInspectionJobMain = async (id: number) => { + return await request.delete({ url: `/qms/inspection-job-main/delete?id=` + id }) +} +// 承接检验任务 +export const acceptInspectionJobMain = async (id) => { + return await request.put({ url: `/qms/inspection-job-main/accept?id=` + id }) +} +// 放弃检验任务 +export const abandonInspectionJobMain = async (id) => { + return await request.put({ url: `/qms/inspection-job-main/abandon?id=` + id }) +} +// 关闭检验任务 +export const closeInspectionJobMain = async (id) => { + return await request.put({ url: `/qms/inspection-job-main/close?id=` + id }) +} +// 发布检验任务 +export const releaseInspectionJobMain = async (id) => { + return await request.put({ url: `/qms/inspection-job-main/release?id=` + id }) +} +// 导出检验申请 Excel +export const exportInspectionJobMain = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/qms/inspection-job-main/export-excel-senior`, data }) + }else{ + return await request.download({ url: `/qms/inspection-job-main/export-excel`, params }) + } +} +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/qms/inspection-job-main/get-import-template' }) +} + diff --git a/src/api/qms/inspectionMethod/index.ts b/src/api/qms/inspectionMethod/index.ts new file mode 100644 index 0000000..12aeeb6 --- /dev/null +++ b/src/api/qms/inspectionMethod/index.ts @@ -0,0 +1,66 @@ +import request from '@/config/axios' + +export interface InspectionMethodVO { + id: number + code: string + description: string + version: string + operationGuidance: string + videoAddress: string + available: string +} + +// 查询检验方法列表 +export const getInspectionMethodPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/qms/inspection-method/senior', data }) + } else { + return await request.get({ url: `/qms/inspection-method/page`, params }) + } +} + +// 查询检验方法详情 +export const getInspectionMethod = async (id: number) => { + return await request.get({ url: `/qms/inspection-method/get?id=` + id }) +} + +// 新增检验方法 +export const createInspectionMethod = async (data: InspectionMethodVO) => { + return await request.post({ url: `/qms/inspection-method/create`, data }) +} + +// 修改检验方法 +export const updateInspectionMethod = async (data: InspectionMethodVO) => { + // debugger + return await request.put({ url: `/qms/inspection-method/update`, data }) +} + +// 删除检验方法 +export const deleteInspectionMethod = async (id: number) => { + return await request.delete({ url: `/qms/inspection-method/delete?id=` + id }) +} + +// 导出检验方法 Excel +export const exportInspectionMethod = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/qms/inspection-method/export-excel-senior`, data }) + }else{ + return await request.download({ url: `/qms/inspection-method/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/qms/inspection-method/get-import-template' }) +} +// 启用 +export const enableInspectionMethod = async (id: number) => { + return await request.enable({ url: `/qms/inspection-method/enable?id=` + id }) +} +// 禁用 +export const disableInspectionMethod = async (id: number) => { + return await request.disable({ url: `/qms/inspection-method/disable?id=` + id }) +} diff --git a/src/api/qms/inspectionQ1/index.ts b/src/api/qms/inspectionQ1/index.ts new file mode 100644 index 0000000..9072dcd --- /dev/null +++ b/src/api/qms/inspectionQ1/index.ts @@ -0,0 +1,77 @@ +import request from '@/config/axios' + +export interface Q1VO { + id: number + number: string + customerCode: string + costCode: string + itemCode: string + qty: number + uom: string + code: string + priority: number + responUser: string + claimAmount: number + claimReason: number + claimTime: Date + handleTime: Date + desc: string + status: string + available: string + deletionTime: Date + deleterId: string + extraProperties: string + concurrencyStamp: number + siteId: string +} + +// 查询Q1通知单列表 +export const getQ1Page = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = { ...params } + return await request.post({ url: '/qms/inspectionQ1/senior', data }) + } else { + return await request.get({ url: `/qms/inspectionQ1/page`, params }) + } +} + +// 查询Q1通知单详情 +export const getQ1 = async (id: number) => { + return await request.get({ url: `/qms/inspectionQ1/get?id=` + id }) +} + +// 新增Q1通知单 +export const createQ1 = async (data: Q1VO) => { + return await request.post({ url: `/qms/inspectionQ1/create`, data }) +} + +// 修改Q1通知单 +export const updateQ1 = async (data: Q1VO) => { + return await request.put({ url: `/qms/inspectionQ1/update`, data }) +} + +// 删除Q1通知单 +export const deleteQ1 = async (id: number) => { + return await request.delete({ url: `/qms/inspectionQ1/delete?id=` + id }) +} + +// 导出Q1通知单 Excel +export const exportQ1 = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/qms/inspectionQ1/export-excel-senior`, data }) + }else{ + return await request.download({ url: `/qms/inspectionQ1/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/qms/inspectionQ1/get-import-template' }) +} + +// 完成 +export const finishQ1 = async (id: number) => { + return await request.get({ url: `/qms/inspectionQ1/finish?id=` + id }) +} diff --git a/src/api/qms/inspectionQ2/index.ts b/src/api/qms/inspectionQ2/index.ts new file mode 100644 index 0000000..a89604a --- /dev/null +++ b/src/api/qms/inspectionQ2/index.ts @@ -0,0 +1,87 @@ +import request from '@/config/axios' + +export interface Q2VO { + id: number + number: string + supplierCode: string + itemCode: string + q1Number: string + purchaseReceiptNumber: string + qty: number + uom: string + code: string + desc: string + priority: number + responUser: string + claimAmount: number + costCode: string + claimTime: Date + handleTime: Date + status: string + available: string + deletionTime: Date + deleterId: string + extraProperties: string + concurrencyStamp: number + siteId: string +} + +// 查询Q2通知单列表 +export const getQ2Page = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = { ...params } + return await request.post({ url: '/qms/inspectionQ2/senior', data }) + } else { + return await request.get({ url: `/qms/inspectionQ2/page`, params }) + } +} + +// 查询Q2通知单详情 +export const getQ2 = async (id: number) => { + return await request.get({ url: `/qms/inspectionQ2/get?id=` + id }) +} + +// 新增Q2通知单 +export const createQ2 = async (data: Q2VO) => { + return await request.post({ url: `/qms/inspectionQ2/create`, data }) +} + +// 修改Q2通知单 +export const updateQ2 = async (data: Q2VO) => { + return await request.put({ url: `/qms/inspectionQ2/update`, data }) +} + +// 删除Q2通知单 +export const deleteQ2 = async (id: number) => { + return await request.delete({ url: `/qms/inspectionQ2/delete?id=` + id }) +} + +// 导出Q2通知单 Excel +export const exportQ2 = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/qms/inspectionQ2/export-excel-senior`, data }) + }else{ + return await request.download({ url: `/qms/inspectionQ2/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/qms/inspectionQ2/get-import-template' }) +} + +// 完成 +export const finishQ2 = async (id: number) => { + return await request.get({ url: `/qms/inspectionQ2/finish?id=` + id }) +} + +// 获取系统中的email地址 +export const getEmail = () => { + return request.get({ url: `/qms/inspectionQ2/getEmail`}) +} + +export const sendQ2 = async (id: number) => { + return await request.get({ url: `/qms/inspectionQ2/send?id=` + id }) +} diff --git a/src/api/qms/inspectionQ3/inspectionQ3Detail/index.ts b/src/api/qms/inspectionQ3/inspectionQ3Detail/index.ts new file mode 100644 index 0000000..796b255 --- /dev/null +++ b/src/api/qms/inspectionQ3/inspectionQ3Detail/index.ts @@ -0,0 +1,64 @@ +import request from '@/config/axios' + +export interface InspectionQ3DetailVO { + id: number + masterId: number + number: string + itemCode: string + qty: number + uom: string + price: number + amount: number + costCode: string + defectCode: string + defectLocation: string + defectType: string + problemReason: string + available: string + deletionTime: Date + deleterId: string + extraProperties: string + concurrencyStamp: number + siteId: string +} + +// 查询Q3通知单子列表 +export const getInspectionQ3DetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = { ...params } + return await request.post({ url: '/qms/inspection-Q3-detail/senior', data }) + } else { + return await request.get({ url: `/qms/inspection-Q3-detail/page`, params }) + } +} + +// 查询Q3通知单子详情 +export const getInspectionQ3Detail = async (id: number) => { + return await request.get({ url: `/qms/inspection-Q3-detail/get?id=` + id }) +} + +// 新增Q3通知单子 +export const createInspectionQ3Detail = async (data: InspectionQ3DetailVO) => { + return await request.post({ url: `/qms/inspection-Q3-detail/create`, data }) +} + +// 修改Q3通知单子 +export const updateInspectionQ3Detail = async (data: InspectionQ3DetailVO) => { + return await request.put({ url: `/qms/inspection-Q3-detail/update`, data }) +} + +// 删除Q3通知单子 +export const deleteInspectionQ3Detail = async (id: number) => { + return await request.delete({ url: `/qms/inspection-Q3-detail/delete?id=` + id }) +} + +// 导出Q3通知单子 Excel +export const exportInspectionQ3Detail = async (params) => { + return await request.download({ url: `/qms/inspection-Q3-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/qms/inspection-Q3-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/qms/inspectionQ3/inspectionQ3Main/index.ts b/src/api/qms/inspectionQ3/inspectionQ3Main/index.ts new file mode 100644 index 0000000..60c723f --- /dev/null +++ b/src/api/qms/inspectionQ3/inspectionQ3Main/index.ts @@ -0,0 +1,65 @@ +import request from '@/config/axios' + +export interface InspectionQ3MainVO { + id: number + number: string + q1Number: string + responUser: string + priority: string + handleTime: Date + summaryAmount: number + desc: string + status: string + available: string + deletionTime: Date + deleterId: string + extraProperties: string + concurrencyStamp: number + siteId: string +} + +// 查询Q3通知单主列表 +export const getInspectionQ3MainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = { ...params } + return await request.post({ url: '/qms/inspection-Q3-main/senior', data }) + } else { + return await request.get({ url: `/qms/inspection-Q3-main/page`, params }) + } +} + +// 查询Q3通知单主详情 +export const getInspectionQ3Main = async (id: number) => { + return await request.get({ url: `/qms/inspection-Q3-main/get?id=` + id }) +} + +// 新增Q3通知单主 +export const createInspectionQ3Main = async (data: InspectionQ3MainVO) => { + return await request.post({ url: `/qms/inspection-Q3-main/create`, data }) +} + +// 修改Q3通知单主 +export const updateInspectionQ3Main = async (data: InspectionQ3MainVO) => { + return await request.put({ url: `/qms/inspection-Q3-main/update`, data }) +} + +// 删除Q3通知单主 +export const deleteInspectionQ3Main = async (id: number) => { + return await request.delete({ url: `/qms/inspection-Q3-main/delete?id=` + id }) +} + +// 导出Q3通知单主 Excel +export const exportInspectionQ3Main = async (params) => { + return await request.download({ url: `/qms/inspection-Q3-main/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/qms/inspection-Q3-main/get-import-template' }) +} + +// 完成 +export const finishInspectionQ3Main = async (id: number) => { + return await request.get({ url: `/qms/inspection-Q3-main/finish?id=` + id }) +} diff --git a/src/api/qms/inspectionRecord/InspectionRecordPackage/InspectionRecordPackage.ts b/src/api/qms/inspectionRecord/InspectionRecordPackage/InspectionRecordPackage.ts new file mode 100644 index 0000000..cb0c2e6 --- /dev/null +++ b/src/api/qms/inspectionRecord/InspectionRecordPackage/InspectionRecordPackage.ts @@ -0,0 +1,13 @@ +import request from '@/config/axios' +export interface InspectionRequestPackageVO { + number: string + packageCode: string + packageSpecificationCode: string + amount: string + measuringUnit: string +} + +//查询包装列表 +export const getInspectionRecordPackageList = async (id: number) => { + return await request.get({ url: `/qms/inspection-record-package/list?masterId=` + id }) +} diff --git a/src/api/qms/inspectionRecord/inspectionRecordDetail/index.ts b/src/api/qms/inspectionRecord/inspectionRecordDetail/index.ts new file mode 100644 index 0000000..16dfb87 --- /dev/null +++ b/src/api/qms/inspectionRecord/inspectionRecordDetail/index.ts @@ -0,0 +1,47 @@ +import request from '@/config/axios' + + + +// 查询检验申请列表 +export const getInspectionRecordDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/qms/inspection-record-detail/senior', data }) + } else { + return await request.get({ url: `/qms/inspection-record-detail/page`, params }) + } +} +// 查询检验申请列表 +export const getInspectionRecordDetailList = async (id: number) => { + return await request.get({ url: `/qms/inspection-record-detail/list?masterId=` + id }) +} +// 查询检验申请详情 +export const getInspectionRecordDetail = async (id: number) => { + return await request.get({ url: `/qms/inspection-record-detail/get?id=` + id }) +} + +// 新增检验申请 +export const createInspectionRecordDetail = async (data) => { + return await request.post({ url: `/qms/inspection-record-detail/create`, data }) +} + +// 修改检验申请 +export const updateInspectionRecordDetail = async (data) => { + return await request.put({ url: `/qms/inspection-record-detail/update`, data }) +} + +// 删除检验申请 +export const deleteInspectionRecordDetail = async (id: number) => { + return await request.delete({ url: `/qms/inspection-record-detail/delete?id=` + id }) +} + +// 导出检验申请 Excel +export const exportInspectionRecordDetail = async (params) => { + return await request.download({ url: `/qms/inspection-record-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/qms/inspection-record-detail/get-import-template' }) +} diff --git a/src/api/qms/inspectionRecord/inspectionRecordMain/index.ts b/src/api/qms/inspectionRecord/inspectionRecordMain/index.ts new file mode 100644 index 0000000..f5ec5d9 --- /dev/null +++ b/src/api/qms/inspectionRecord/inspectionRecordMain/index.ts @@ -0,0 +1,100 @@ +import request from '@/config/axios' + +export interface InspectionRecordMainVO { + number: string + applicationDate: localdate + applicationTime: Date + requestStartTime: Date + requestEndTime: Date + finishTime: Date + supplierCode: string + materialCode: string + batch: string + requestInspectionNum: number + referenceOrderCode: string + referenceOrderRow: number + referenceCertificateCode: string + referenceCertificateRow: number + inspectionSchemeCode: string + inspectionStageCode: string + applicationPackageCode: string + inspectionLevel: string + aqlValue: number + available: string +} + +// 查询检验申请列表 +export const getInspectionRecordMainPage = async (params) => { + if (params.isSearch) { + // delete params.isSearch + const data = { ...params } + return await request.post({ url: '/qms/inspection-record-main/senior', data }) + } else { + return await request.get({ url: `/qms/inspection-record-main/page`, params }) + } +} + +// 查询检验申请详情 +export const getInspectionRecordMain = async (id: number) => { + return await request.get({ url: `/qms/inspection-record-main/get?id=` + id }) +} + +// 新增检验申请 +export const createInspectionRecordMain = async (data: InspectionRecordMainVO) => { + return await request.post({ url: `/qms/inspection-record-main/create`, data }) +} + +// 修改检验申请 +export const updateInspectionRecordMain = async (data: InspectionRecordMainVO) => { + return await request.put({ url: `/qms/inspection-record-main/update`, data }) +} +// 首件检验保存 +export const updateInspectionRecordFirstMain = async (data: InspectionRecordMainVO) => { + return await request.put({ url: `/qms/inspection-record-main/firstInspectionUpdate`, data }) +} + +// 删除检验申请 +export const deleteInspectionRecordMain = async (id: number) => { + return await request.delete({ url: `/qms/inspection-record-main/delete?id=` + id }) +} + +// 导出检验申请 Excel +export const exportInspectionRecordMain = async (params) => { + if (params.isSearch) { + const data = { ...params } + return await request.downloadPost({ + url: `/qms/inspection-record-main/export-excel-senior`, + data + }) + } else { + return await request.download({ url: `/qms/inspection-record-main/export-excel`, params }) + } +} + +// 导出首件检验记录 Excel +export const exportFirstInspectionRecordMain = async (params) => { + if (params.isSearch) { + const data = { ...params } + return await request.downloadPost({ + url: `/qms/inspection-record-main/export-excel-first-senior`, + data + }) + } else { + return await request.download({ url: `/qms/inspection-record-main/export-excel-first`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/qms/inspection-record-main/get-import-template' }) +} +// 发布 +export const publishInspectionRecordMain = async (id) => { + return await request.put({ url: `/qms/inspection-record-main/publish?id=`+id }) +} + +// 执行检验任务 +export const executeInspectionRecordMain = async (data) => { + return await request.put({ url: `/qms/inspection-record-main/execute`, data }) +} + diff --git a/src/api/qms/inspectionRequest/InspectionRequestPackage.ts b/src/api/qms/inspectionRequest/InspectionRequestPackage.ts new file mode 100644 index 0000000..34acfae --- /dev/null +++ b/src/api/qms/inspectionRequest/InspectionRequestPackage.ts @@ -0,0 +1,27 @@ +import request from '@/config/axios' +export interface InspectionRequestPackageVO { + number: string + packageCode: string + packageSpecificationCode: string + amount: string + measuringUnit: string +} + +//查询包装列表 +export const getInspectionRequestPackageList = async (id: number) => { + return await request.get({ url: `/qms/inspection-request-package/list?masterId=` + id }) +} +// 新增检验申请 +export const createInspectionRequestPackage = async (data: InspectionRequestPackageVO) => { + return await request.post({ url: `/qms/inspection-request-package/create`, data }) +} + +// 修改检验申请 +export const updateInspectionRequestPackage = async (data: InspectionRequestPackageVO) => { + return await request.put({ url: `/qms/inspection-request-package/update`, data }) +} + +// 删除检验申请 +export const deleteInspectionRequestPackage = async (id: number) => { + return await request.delete({ url: `/qms/inspection-request-package/delete?id=` + id }) +} \ No newline at end of file diff --git a/src/api/qms/inspectionRequest/index.ts b/src/api/qms/inspectionRequest/index.ts new file mode 100644 index 0000000..68dc89e --- /dev/null +++ b/src/api/qms/inspectionRequest/index.ts @@ -0,0 +1,93 @@ +import request from '@/config/axios' + +export interface InspectionMainVO { + number: string + applicationDate: Date + applicationTime: Date + requestStartTime: Date + requestEndTime: Date + finishTime: Date + supplierCode: string + itemCode: string + batch: string + requestInspectionNum: number + referenceOrderCode: string + referenceOrderRow: number + referenceCertificateCode: string + referenceCertificateRow: number +} + +// 查询检验申请列表 +export const getInspectionMainPage = async (params) => { + if (params.isSearch) { + // delete params.isSearch + const data = {...params} + return await request.post({ url: '/qms/inspection-request-main/senior', data }) + } else { + return await request.get({ url: `/qms/inspection-request-main/page`, params }) + } +} + +// 查询检验申请详情 +export const getInspectionMain = async (id: number) => { + return await request.get({ url: `/qms/inspection-request-main/get?id=` + id }) +} + +// 新增检验申请 +export const createInspectionMain = async (data: InspectionMainVO) => { + return await request.post({ url: `/qms/inspection-request-main/create`, data }) +} + +// 修改检验申请 +export const updateInspectionMain = async (data: InspectionMainVO) => { + return await request.put({ url: `/qms/inspection-request-main/update`, data }) +} + +// 删除检验申请 +export const deleteInspectionMain = async (id: number) => { + return await request.delete({ url: `/qms/inspection-request-main/delete?id=` + id }) +} + +// 导出检验申请 Excel +export const exportInspectionMain = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/qms/inspection-request-main/export-excel-senior`, data }) + }else{ + return await request.download({ url: `/qms/inspection-request-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/qms/inspection-request-main/get-import-template' }) +} +// 关闭检验申请主 Excel +export const closeInspectRequestMain = async (id) => { + return await request.put({ url: `/qms/inspection-request-main/close?id=` + id }) +} + +// 重新添加检验申请主 Excel +export const reAddInspectRequestMain = async (id) => { + return await request.put({ url: `/qms/inspection-request-main/reAdd?id=` + id }) +} + +// 提交检验申请主 Excel +export const submitInspectRequestMain = async (id) => { + return await request.put({ url: `/qms/inspection-request-main/submit?id=` + id }) +} + +// 审批通过检验申请主 Excel +export const agreeInspectRequestMain = async (id) => { + return await request.put({ url: `/qms/inspection-request-main/agree?id=` + id }) +} + +// 审批驳回检验申请主 Excel +export const refusedInspectRequestMain = async (id) => { + return await request.put({ url: `/qms/inspection-request-main/refused?id=` + id }) +} + +// 处理检验申请主 Excel +export const handleInspectRequestMain = async (id) => { + return await request.put({ url: `/qms/inspection-request-main/handle?id=` + id }) +} diff --git a/src/api/qms/inspectionScheme/index.ts b/src/api/qms/inspectionScheme/index.ts new file mode 100644 index 0000000..42a82a5 --- /dev/null +++ b/src/api/qms/inspectionScheme/index.ts @@ -0,0 +1,47 @@ +import request from '@/config/axios' +// 新增 +export const InspectionSchemeCreat = async (data) => { + return await request.post({ url: `/qms/inspection-scheme/create`, data }) +} +// 编辑 +export const InspectionSchemeUpdate = async (data) => { + return await request.put({ url: `/qms/inspection-scheme/update`, data }) +} +// 删除 +export const InspectionSchemeDelete = async (id) => { + return await request.delete({ url: `/qms/inspection-scheme/delete?id=` + id }) +} +// 列表 +export const InspectionSchemePage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = { ...params } + return request.post({ url: '/qms/inspection-scheme/senior', data }) + } else { + return await request.get({ url: `/qms/inspection-scheme/page`, params }) + } +} + +// 启用 +export const enableInspectionScheme = async (id: number) => { + return await request.enable({ url: `/qms/inspection-scheme/enable?id=` + id }) +} +// 禁用 +export const disableInspectionScheme = async (id: number) => { + return await request.disable({ url: `/qms/inspection-scheme/disable?id=` + id }) +} + +// 导出检验阶段 Excel +export const exportInspectionScheme = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/qms/inspection-scheme/export-excel-senior`, data }) + }else{ + return await request.download({ url: `/qms/inspection-scheme/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/qms/inspection-scheme/get-import-template' }) +} diff --git a/src/api/qms/inspectionStage/index.ts b/src/api/qms/inspectionStage/index.ts new file mode 100644 index 0000000..2ad0ed1 --- /dev/null +++ b/src/api/qms/inspectionStage/index.ts @@ -0,0 +1,69 @@ +import request from '@/config/axios' + +export interface InspectionStageVO { + code: string + masterId: number + stage: number + dynamicModifyCode: string + description: string + okTimes: number + okTimeStage: number + noOkTimes: number + noOkTimeStage: number + isStartStage: boolean + skipInspection: boolean + inspectionStringency: string + available: string + deletionTime: Date + deleterId: string + extraProperties: string + concurrencyStamp: number + siteId: string +} + +// 查询检验阶段列表 +export const getInspectionStagePage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/qms/inspection-stage/senior', data }) + } else { + return await request.get({ url: `/qms/inspection-stage/page`, params }) + } +} + +// 查询检验阶段详情 +export const getInspectionStage = async (id: number) => { + return await request.get({ url: `/qms/inspection-stage/get?id=` + id }) +} + +// 新增检验阶段 +export const createInspectionStage = async (data: InspectionStageVO) => { + return await request.post({ url: `/qms/inspection-stage/create`, data }) +} + +// 修改检验阶段 +export const updateInspectionStage = async (data: InspectionStageVO) => { + return await request.put({ url: `/qms/inspection-stage/update`, data }) +} + +// 删除检验阶段 +export const deleteInspectionStage = async (id: number) => { + return await request.delete({ url: `/qms/inspection-stage/delete?id=` + id }) +} + +// 导出检验阶段 Excel +export const exportInspectionStage = async (params) => { + return await request.download({ url: `/qms/inspection-stage/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/qms/inspection-stage/get-import-template' }) +} + + +// 查询检验阶段列表 +export const getInspectionStageNoPage = async (params) => { + return await request.get({ url: `/qms/inspection-stage/noPage`, params }) +} \ No newline at end of file diff --git a/src/api/qms/inspectionTemplate/index.ts b/src/api/qms/inspectionTemplate/index.ts new file mode 100644 index 0000000..048c705 --- /dev/null +++ b/src/api/qms/inspectionTemplate/index.ts @@ -0,0 +1,52 @@ +import request from '@/config/axios' + +// 列表 +export const getListByTempleteCode = async (code) => { + return await request.get({ url: `/qms/inspection-process/getListByTempleteCode?code=` + code }) +} +// 新增 +export const inspectionTemplateCreat = async (data) => { + return await request.post({ url: `/qms/programme-template/create`, data }) +} +// 编辑 +export const inspectionTemplateUpdate = async (data) => { + return await request.put({ url: `/qms/programme-template/update`, data }) +} +// 删除 +export const inspectionTemplateDelete = async (id) => { + return await request.delete({ url: `/qms/programme-template/delete?id=` + id }) +} +// 列表 +export const inspectionTemplatePage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = { ...params } + return request.post({ url: '/qms/programme-template/senior', data }) + } else { + return await request.get({ url: `/qms/programme-template/page`, params }) + } +} + +// 启用 +export const enableInspectionTemplate = async (id: number) => { + return await request.enable({ url: `/qms/programme-template/enable?id=` + id }) +} +// 禁用 +export const disableInspectionTemplate = async (id: number) => { + return await request.disable({ url: `/qms/programme-template/disable?id=` + id }) +} + +// 导出检验模版 Excel +export const exportInspectionTemplate = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/qms/programme-template/export-excel-senior`, data }) + }else{ + return await request.download({ url: `/qms/programme-template/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/qms/programme-template/get-import-template' }) +} diff --git a/src/api/qms/qualityNotice/index.ts b/src/api/qms/qualityNotice/index.ts new file mode 100644 index 0000000..3dcb342 --- /dev/null +++ b/src/api/qms/qualityNotice/index.ts @@ -0,0 +1,31 @@ +import request from '@/config/axios' +// 列表 +export const qualityNoticePage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/basic/quality-notice/senior', data }) + } else { + return await request.get({ url: `/basic/quality-notice/page`, params }) + } +} +// 新增 +export const qualityNoticeCreat = async (data) => { + return await request.post({ url: `/basic/quality-notice/create`,data}) +} +// 编辑 +export const qualityNoticeUpdate = async (data) => { + return await request.put({ url: `/basic/quality-notice/update`,data}) +} +// 删除 +export const qualityNoticeDelete = async (id) => { + return await request.delete({ url: `/basic/quality-notice/delete?id=`+id}) +} +// 详情 +export const qualityNoticeDetail = async (id) => { + return await request.get({ url: `/basic/quality-notice/get?id=`+id}) +} +// 详情 +export const qualityNoticePublish = async (id) => { + return await request.put({ url: `/basic/quality-notice/release?id=`+id}) +} \ No newline at end of file diff --git a/src/api/qms/sampleCode/index.ts b/src/api/qms/sampleCode/index.ts new file mode 100644 index 0000000..8710358 --- /dev/null +++ b/src/api/qms/sampleCode/index.ts @@ -0,0 +1,76 @@ +import request from '@/config/axios' + +export interface SampleCodeVO { + id: number + code: string + batchLowLimiting: number + batchUpperLimiting: number + s1: string + s2: string + s3: string + s4: string + g1: string + g2: string + g3: string + available: string +} + +// 查询样本字码列表 +export const getSampleCodePage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/qms/sample-code/senior', data }) + } else { + return await request.get({ url: `/qms/sample-code/page`, params }) + } +} + +// 查询样本字码详情 +export const getSampleCode = async (id: number) => { + return await request.get({ url: `/qms/sample-code/get?id=` + id }) +} + +// 新增样本字码 +export const createSampleCode = async (data: SampleCodeVO) => { + return await request.post({ url: `/qms/sample-code/create`, data }) +} + +// 修改样本字码 +export const updateSampleCode = async (data: SampleCodeVO) => { + return await request.put({ url: `/qms/sample-code/update`, data }) +} + +// 删除样本字码 +export const deleteSampleCode = async (id: number) => { + return await request.delete({ url: `/qms/sample-code/delete?id=` + id }) +} + +// 导出样本字码 Excel +export const exportSampleCode = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.downloadPost({ url: '/qms/sample-code/export-excel-senior', data }) + } else { + return await request.download({ url: `/qms/sample-code/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/qms/sample-code/get-import-template' }) +} + +export const getSamplingScheme = async () => { + return await request.get({ url: `/qms/sampling-scheme/get-available-list`}) +} + +// 启用 +export const enableSampleCode = async (id: number) => { + return await request.enable({ url: `/qms/sample-code/enable?id=` + id }) +} +// 禁用 +export const disableSampleCode = async (id: number) => { + return await request.disable({ url: `/qms/sample-code/disable?id=` + id }) +} diff --git a/src/api/qms/samplingProcess/index.ts b/src/api/qms/samplingProcess/index.ts new file mode 100644 index 0000000..55d9675 --- /dev/null +++ b/src/api/qms/samplingProcess/index.ts @@ -0,0 +1,76 @@ +import request from '@/config/axios' +import { validatePercent } from '@/utils/validator' + +export interface SamplingProcessVO { + id: number + code: string + description: string + sampleType: string + evaluationMode: string + sampleSize: number + sampleProgCode: String + available: string +} + +const rules = ref({ + sampleSize:[ + {validator:validatePercent,message:'百分比范围 0 ~ 100', trigger:'blur'} + ] +}) +// 查询采样过程列表 +export const getSamplingProcessPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/qms/sampling-process/senior', data }) + } else { + return await request.get({ url: `/qms/sampling-process/page`, params }) + } +} + +// 查询采样过程详情 +export const getSamplingProcess = async (id: number) => { + return await request.get({ url: `/qms/sampling-process/get?id=` + id }) +} + +// 新增采样过程 +export const createSamplingProcess = async (data: SamplingProcessVO) => { + return await request.post({ url: `/qms/sampling-process/create`, data }) +} + +// 修改采样过程 +export const updateSamplingProcess = async (data: SamplingProcessVO) => { + return await request.put({ url: `/qms/sampling-process/update`, data }) +} + +// 删除采样过程 +export const deleteSamplingProcess = async (id: number) => { + return await request.delete({ url: `/qms/sampling-process/delete?id=` + id }) +} + +// 导出采样过程 Excel +export const exportSamplingProcess = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/qms/sampling-process/export-excel-senior`, data }) + }else{ + return await request.download({ url: `/qms/sampling-process/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/qms/sampling-process/get-import-template' }) +} + +export const getSamplingScheme = async () => { + return await request.get({ url: `/qms/sampling-scheme/get-available-list`}) +} +// 启用 +export const enableSamplingProcess = async (id: number) => { + return await request.enable({ url: `/qms/sampling-process/enable?id=` + id }) +} +// 禁用 +export const disableSamplingProcess = async (id: number) => { + return await request.disable({ url: `/qms/sampling-process/disable?id=` + id }) +} diff --git a/src/api/qms/samplingScheme/index.ts b/src/api/qms/samplingScheme/index.ts new file mode 100644 index 0000000..8512eea --- /dev/null +++ b/src/api/qms/samplingScheme/index.ts @@ -0,0 +1,64 @@ +import request from '@/config/axios' + +export interface SamplingSchemeVO { + id: number + code: string + description: string + available: string +} + +// 查询采样方案列表 +export const getSamplingSchemePage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = { ...params } + return await request.post({ url: '/qms/sampling-scheme/senior', data }) + } else { + return await request.get({ url: `/qms/sampling-scheme/page`, params }) + } +} + +// 查询采样方案详情 +export const getSamplingScheme = async (id: number) => { + return await request.get({ url: `/qms/sampling-scheme/get?id=` + id }) +} + +// 新增采样方案 +export const createSamplingScheme = async (data: SamplingSchemeVO) => { + return await request.post({ url: `/qms/sampling-scheme/create`, data }) +} + +// 修改采样方案 +export const updateSamplingScheme = async (data: SamplingSchemeVO) => { + return await request.put({ url: `/qms/sampling-scheme/update`, data }) +} + +// 删除采样方案 +export const deleteSamplingScheme = async (id: number) => { + return await request.delete({ url: `/qms/sampling-scheme/delete?id=` + id }) +} + +// 导出采样方案 Excel +export const exportSamplingScheme = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.downloadPost({ url: '/qms/sampling-scheme/export-excel-senior', data }) + } else { + return await request.download({ url: `/qms/sampling-scheme/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/qms/sampling-scheme/get-import-template' }) +} + +// 启用 +export const enableSamplingScheme = async (id: number) => { + return await request.enable({ url: `/qms/sampling-scheme/enable?id=` + id }) +} +// 禁用 +export const disableSamplingScheme = async (id: number) => { + return await request.disable({ url: `/qms/sampling-scheme/disable?id=` + id }) +} diff --git a/src/api/qms/selectedProject/index.ts b/src/api/qms/selectedProject/index.ts new file mode 100644 index 0000000..941fc48 --- /dev/null +++ b/src/api/qms/selectedProject/index.ts @@ -0,0 +1,63 @@ +import request from '@/config/axios' + +export interface SelectedProjectVO { + id: number + code: string + dictionaryCode: string + dictionaryValue: string + estimateCode: string + defectLevel: string + available: string + deletionTime: Date + deleterId: string + extraProperties: string + concurrencyStamp: number + siteId: string +} + +// 查询选定集项目列表 +export const getSelectedProjectPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/qms/selected-project/senior', data }) + } else { + return await request.get({ url: `/qms/selected-project/page`, params }) + } +} + +// 查询选定集项目详情 +export const getSelectedProject = async (id: number) => { + return await request.get({ url: `/qms/selected-project/get?id=` + id }) +} + +// 新增选定集项目 +export const createSelectedProject = async (data: SelectedProjectVO) => { + return await request.post({ url: `/qms/selected-project/create`, data }) +} + +// 修改选定集项目 +export const updateSelectedProject = async (data: SelectedProjectVO) => { + return await request.put({ url: `/qms/selected-project/update`, data }) +} + +// 删除选定集项目 +export const deleteSelectedProject = async (id: number) => { + return await request.delete({ url: `/qms/selected-project/delete?id=` + id }) +} + +// 导出选定集项目 Excel +export const exportSelectedProject = async (params) => { + return await request.download({ url: `/qms/selected-project/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/qms/selected-project/get-import-template' }) +} + + +// 查询选定集项目列表 +export const getSelectedProjectNoPage = async (params) => { + return await request.get({ url: `/qms/selected-project/noPage`, params }) +} \ No newline at end of file diff --git a/src/api/qms/selectedSet/index.ts b/src/api/qms/selectedSet/index.ts new file mode 100644 index 0000000..cf11448 --- /dev/null +++ b/src/api/qms/selectedSet/index.ts @@ -0,0 +1,69 @@ +import request from '@/config/axios' + +export interface SelectedSetVO { + id: number + code: string + description: string + classification: string + available: string + deletionTime: Date + deleterId: string + extraProperties: string + concurrencyStamp: number + siteId: string +} + +// 查询选定集列表 +export const getSelectedSetPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/qms/selected-set/senior', data }) + } else { + return await request.get({ url: `/qms/selected-set/page`, params }) + } +} + +// 查询选定集详情 +export const getSelectedSet = async (id: number) => { + return await request.get({ url: `/qms/selected-set/get?id=` + id }) +} + +// 新增选定集 +export const createSelectedSet = async (data: SelectedSetVO) => { + return await request.post({ url: `/qms/selected-set/create`, data }) +} + +// 修改选定集 +export const updateSelectedSet = async (data: SelectedSetVO) => { + return await request.put({ url: `/qms/selected-set/update`, data }) +} + +// 删除选定集 +export const deleteSelectedSet = async (id: number) => { + return await request.delete({ url: `/qms/selected-set/delete?id=` + id }) +} + +// 导出选定集 Excel +export const exportSelectedSet = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/qms/selected-set/export-excel-senior`, data }) + }else{ + return await request.download({ url: `/qms/selected-set/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/qms/selected-set/get-import-template' }) +} + +// 启用 +export const enableSelectedSet = async (id: number) => { + return await request.enable({ url: `/qms/selected-set/enable?id=` + id }) +} +// 禁用 +export const disableSelectedSet = async (id: number) => { + return await request.disable({ url: `/qms/selected-set/disable?id=` + id }) +} diff --git a/src/api/redis/index.ts b/src/api/redis/index.ts new file mode 100644 index 0000000..b716359 --- /dev/null +++ b/src/api/redis/index.ts @@ -0,0 +1,21 @@ +import request from '@/config/axios' + +export interface RedisVO { + key: string + value: string +} + +// 加入缓存 +export const addRedis = async (data:RedisVO) => { + return await request.post({ url: `/infra/redis/set`, data }) +} + +// 获取缓存 +export const getRedis = async (key) => { + return await request.get({ url: `/infra/redis/get?key=` + key}) +} + +// 删除物料清单 +export const deleteRedis = async (key) => { + return await request.delete({ url: `/infra/redis/delete?key=` + key}) +} \ No newline at end of file diff --git a/src/api/scp/index.ts b/src/api/scp/index.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/api/system/area/index.ts b/src/api/system/area/index.ts new file mode 100644 index 0000000..b7da941 --- /dev/null +++ b/src/api/system/area/index.ts @@ -0,0 +1,19 @@ +import request from '@/config/axios' + +// 获得地区树 +export const getAreaTree = async () => { + return await request.get({ url: '/system/area/tree' }) +} + +export const getChildrenArea = async (id: number) => { + return await request.get({ url: '/system/area/get-children?id=' + id }) +} + +export const getAreaListByIds = async (ids) => { + return await request.get({ url: '/system/area/get-by-ids?ids=' + ids }) +} + +// 获得 IP 对应的地区名 +export const getAreaByIp = async (ip: string) => { + return await request.get({ url: '/system/area/get-by-ip?ip=' + ip }) +} diff --git a/src/api/system/dept/index.ts b/src/api/system/dept/index.ts new file mode 100644 index 0000000..d995f13 --- /dev/null +++ b/src/api/system/dept/index.ts @@ -0,0 +1,43 @@ +import request from '@/config/axios' + +export interface DeptVO { + id?: number + name: string + parentId: number + status: number + sort: number + leaderUserId: number + phone: string + email: string + createTime: Date +} + +// 查询部门(精简)列表 +export const getSimpleDeptList = async (): Promise => { + return await request.get({ url: '/system/dept/list-all-simple' }) +} + +// 查询部门列表 +export const getDeptPage = async (params: PageParam) => { + return await request.get({ url: '/system/dept/list', params }) +} + +// 查询部门详情 +export const getDept = async (id: number) => { + return await request.get({ url: '/system/dept/get?id=' + id }) +} + +// 新增部门 +export const createDept = async (data: DeptVO) => { + return await request.post({ url: '/system/dept/create', data: data }) +} + +// 修改部门 +export const updateDept = async (params: DeptVO) => { + return await request.put({ url: '/system/dept/update', data: params }) +} + +// 删除部门 +export const deleteDept = async (id: number) => { + return await request.delete({ url: '/system/dept/delete?id=' + id }) +} diff --git a/src/api/system/dict/dict.data.ts b/src/api/system/dict/dict.data.ts new file mode 100644 index 0000000..faa0dca --- /dev/null +++ b/src/api/system/dict/dict.data.ts @@ -0,0 +1,54 @@ +import request from '@/config/axios' + +export type DictDataVO = { + id: number | undefined + sort: number | undefined + label: string + value: string + dictType: string + status: number + colorType: string + cssClass: string + remark: string + createTime: Date +} + +// 查询字典数据(精简)列表 +export const listSimpleDictData = () => { + return request.get({ url: '/system/dict-data/list-all-simple' }) +} + +// 查询字典数据列表 +export const getDictDataPage = (params: PageParam) => { + return request.get({ url: '/system/dict-data/page', params }) +} + +// 查询字典数据列表根据类型 +export const queryByDictType = (dictType: number) => { + return request.get({ url: '/system/dict-data/queryByDictType?dictType=' + dictType }) +} + +// 查询字典数据详情 +export const getDictData = (id: string) => { + return request.get({ url: '/system/dict-data/get?id=' + id }) +} + +// 新增字典数据 +export const createDictData = (data: DictDataVO) => { + return request.post({ url: '/system/dict-data/create', data }) +} + +// 修改字典数据 +export const updateDictData = (data: DictDataVO) => { + return request.put({ url: '/system/dict-data/update', data }) +} + +// 删除字典数据 +export const deleteDictData = (id: number) => { + return request.delete({ url: '/system/dict-data/delete?id=' + id }) +} + +// 导出字典类型数据 +export const exportDictData = (params) => { + return request.get({ url: '/system/dict-data/export', params }) +} diff --git a/src/api/system/dict/dict.type.ts b/src/api/system/dict/dict.type.ts new file mode 100644 index 0000000..d88c889 --- /dev/null +++ b/src/api/system/dict/dict.type.ts @@ -0,0 +1,54 @@ +import request from '@/config/axios' + +export type DictTypeVO = { + id: number | undefined + name: string + type: string + status: number + remark: string + createTime: Date +} + +// 查询字典(精简)列表 +export const getSimpleDictTypeList = () => { + return request.get({ url: '/system/dict-type/list-all-simple' }) +} + +// 查询字典列表 +export const getDictTypePage = (params: PageParam) => { + return request.get({ url: '/system/dict-type/page', params }) +} + +// 查询字典详情 +export const getDictType = (id: number) => { + return request.get({ url: '/system/dict-type/get?id=' + id }) +} + +// 新增字典 +export const createDictType = (data: DictTypeVO) => { + return request.post({ url: '/system/dict-type/create', data }) +} + +// 修改字典 +export const updateDictType = (data: DictTypeVO) => { + return request.put({ url: '/system/dict-type/update', data }) +} + +// 删除字典 +export const deleteDictType = (id: number) => { + return request.delete({ url: '/system/dict-type/delete?id=' + id }) +} +// 导出字典类型 +export const exportDictType = (params) => { + return request.get({ url: '/system/dict-type/export', params }) +} + + +// 查询字典列表 +export const getDictTypeAndData = (classes: string | null) => { + let url = '/system/dict-type/list-all-data-all'; + if (classes !== null) { + url += `?classes=${classes}`; + } + return request.get({ url }); +} \ No newline at end of file diff --git a/src/api/system/errorCode/index.ts b/src/api/system/errorCode/index.ts new file mode 100644 index 0000000..8a86a63 --- /dev/null +++ b/src/api/system/errorCode/index.ts @@ -0,0 +1,40 @@ +import request from '@/config/axios' + +export interface ErrorCodeVO { + id: number | undefined + type: number + applicationName: string + code: number | undefined + message: string + memo: string + createTime: Date +} + +// 查询错误码列表 +export const getErrorCodePage = (params: PageParam) => { + return request.get({ url: '/system/error-code/page', params }) +} + +// 查询错误码详情 +export const getErrorCode = (id: number) => { + return request.get({ url: '/system/error-code/get?id=' + id }) +} + +// 新增错误码 +export const createErrorCode = (data: ErrorCodeVO) => { + return request.post({ url: '/system/error-code/create', data }) +} + +// 修改错误码 +export const updateErrorCode = (data: ErrorCodeVO) => { + return request.put({ url: '/system/error-code/update', data }) +} + +// 删除错误码 +export const deleteErrorCode = (id: number) => { + return request.delete({ url: '/system/error-code/delete?id=' + id }) +} +// 导出错误码 +export const excelErrorCode = (params) => { + return request.download({ url: '/system/error-code/export-excel', params }) +} diff --git a/src/api/system/loginLog/index.ts b/src/api/system/loginLog/index.ts new file mode 100644 index 0000000..f275c3e --- /dev/null +++ b/src/api/system/loginLog/index.ts @@ -0,0 +1,24 @@ +import request from '@/config/axios' + +export interface LoginLogVO { + id: number + logType: number + traceId: number + userId: number + userType: number + username: string + status: number + userIp: string + userAgent: string + createTime: Date +} + +// 查询登录日志列表 +export const getLoginLogPage = (params: PageParam) => { + return request.get({ url: '/system/login-log/page', params }) +} + +// 导出登录日志 +export const exportLoginLog = (params) => { + return request.download({ url: '/system/login-log/export', params }) +} diff --git a/src/api/system/mail/account/index.ts b/src/api/system/mail/account/index.ts new file mode 100644 index 0000000..9e10c92 --- /dev/null +++ b/src/api/system/mail/account/index.ts @@ -0,0 +1,41 @@ +import request from '@/config/axios' + +export interface MailAccountVO { + id: number + mail: string + username: string + password: string + host: string + port: number + sslEnable: boolean +} + +// 查询邮箱账号列表 +export const getMailAccountPage = async (params: PageParam) => { + return await request.get({ url: '/system/mail-account/page', params }) +} + +// 查询邮箱账号详情 +export const getMailAccount = async (id: number) => { + return await request.get({ url: '/system/mail-account/get?id=' + id }) +} + +// 新增邮箱账号 +export const createMailAccount = async (data: MailAccountVO) => { + return await request.post({ url: '/system/mail-account/create', data }) +} + +// 修改邮箱账号 +export const updateMailAccount = async (data: MailAccountVO) => { + return await request.put({ url: '/system/mail-account/update', data }) +} + +// 删除邮箱账号 +export const deleteMailAccount = async (id: number) => { + return await request.delete({ url: '/system/mail-account/delete?id=' + id }) +} + +// 获得邮箱账号精简列表 +export const getSimpleMailAccountList = async () => { + return request.get({ url: '/system/mail-account/list-all-simple' }) +} diff --git a/src/api/system/mail/log/index.ts b/src/api/system/mail/log/index.ts new file mode 100644 index 0000000..13172a7 --- /dev/null +++ b/src/api/system/mail/log/index.ts @@ -0,0 +1,30 @@ +import request from '@/config/axios' + +export interface MailLogVO { + id: number + userId: number + userType: number + toMail: string + accountId: number + fromMail: string + templateId: number + templateCode: string + templateNickname: string + templateTitle: string + templateContent: string + templateParams: string + sendStatus: number + sendTime: Date + sendMessageId: string + sendException: string +} + +// 查询邮件日志列表 +export const getMailLogPage = async (params: PageParam) => { + return await request.get({ url: '/system/mail-log/page', params }) +} + +// 查询邮件日志详情 +export const getMailLog = async (id: number) => { + return await request.get({ url: '/system/mail-log/get?id=' + id }) +} diff --git a/src/api/system/mail/template/index.ts b/src/api/system/mail/template/index.ts new file mode 100644 index 0000000..60b4048 --- /dev/null +++ b/src/api/system/mail/template/index.ts @@ -0,0 +1,55 @@ +import request from '@/config/axios' + +export interface MailTemplateVO { + id: number + name: string + code: string + accountId: number + nickname: string + title: string + content: string + params: string + status: number + remark: string +} + +export interface MailSendReqVO { + mail: string + templateCode: string + templateParams: Map +} + +// 查询邮件模版列表 +export const getMailTemplatePage = async (params: PageParam) => { + return await request.get({ url: '/system/mail-template/page', params }) +} + +// 查询邮件模版详情 +export const getMailTemplate = async (id: number) => { + return await request.get({ url: '/system/mail-template/get?id=' + id }) +} + +// 新增邮件模版 +export const createMailTemplate = async (data: MailTemplateVO) => { + return await request.post({ url: '/system/mail-template/create', data }) +} + +// 修改邮件模版 +export const updateMailTemplate = async (data: MailTemplateVO) => { + return await request.put({ url: '/system/mail-template/update', data }) +} + +// 删除邮件模版 +export const deleteMailTemplate = async (id: number) => { + return await request.delete({ url: '/system/mail-template/delete?id=' + id }) +} + +// 发送邮件 +export const sendMail = (data: MailSendReqVO) => { + return request.post({ url: '/system/mail-template/send-mail', data }) +} + +// 查询邮件模版列表不分页 +export const getMailTemplateNoPage = async (params: PageParam) => { + return await request.get({ url: '/system/mail-template/noPage', params }) +} \ No newline at end of file diff --git a/src/api/system/menu/index.ts b/src/api/system/menu/index.ts new file mode 100644 index 0000000..4bb9a87 --- /dev/null +++ b/src/api/system/menu/index.ts @@ -0,0 +1,49 @@ +import request from '@/config/axios' + +export interface MenuVO { + id: number + name: string + permission: string + type: number + sort: number + parentId: number + path: string + icon: string + component: string + componentName?: string + status: number + visible: boolean + keepAlive: boolean + alwaysShow?: boolean + createTime: Date +} + +// 查询菜单(精简)列表 +export const getSimpleMenusList = () => { + return request.get({ url: '/system/menu/list-all-simple' }) +} + +// 查询菜单列表 +export const getMenuList = (params) => { + return request.get({ url: '/system/menu/list', params }) +} + +// 获取菜单详情 +export const getMenu = (id: number) => { + return request.get({ url: '/system/menu/get?id=' + id }) +} + +// 新增菜单 +export const createMenu = (data: MenuVO) => { + return request.post({ url: '/system/menu/create', data }) +} + +// 修改菜单 +export const updateMenu = (data: MenuVO) => { + return request.put({ url: '/system/menu/update', data }) +} + +// 删除菜单 +export const deleteMenu = (id: number) => { + return request.delete({ url: '/system/menu/delete?id=' + id }) +} diff --git a/src/api/system/messageSet/index.ts b/src/api/system/messageSet/index.ts new file mode 100644 index 0000000..d7814b7 --- /dev/null +++ b/src/api/system/messageSet/index.ts @@ -0,0 +1,60 @@ +import request from '@/config/axios' + +export interface MessageSetVO { + id: number + tableName: string + action: number + available: string + remark: string + deletionTime: Date + deleterId: string + extraProperties: string + concurrencyStamp: number + siteId: string +} + +// 查询消息设置列表 +export const getMessageSetPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/system/message-set/senior', data }) + } else { + return await request.get({ url: `/system/message-set/page`, params }) + } +} + +// 查询消息设置详情 +export const getMessageSet = async (id: number) => { + return await request.get({ url: `/system/message-set/get?id=` + id }) +} + +// 新增消息设置 +export const createMessageSet = async (data: MessageSetVO) => { + return await request.post({ url: `/system/message-set/create`, data }) +} + +// 修改消息设置 +export const updateMessageSet = async (data: MessageSetVO) => { + return await request.put({ url: `/system/message-set/update`, data }) +} + +// 删除消息设置 +export const deleteMessageSet = async (id: number) => { + return await request.delete({ url: `/system/message-set/delete?id=` + id }) +} + +// 导出消息设置 Excel +export const exportMessageSet = async (params) => { + return await request.download({ url: `/system/message-set/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/system/message-set/get-import-template' }) +} + +// 查询消息设置列表不分页 +export const getMessageSetNoPage = async (params) => { + return await request.get({ url: `/system/message-set/noPage`, params }) +} diff --git a/src/api/system/notice/index.ts b/src/api/system/notice/index.ts new file mode 100644 index 0000000..62bf525 --- /dev/null +++ b/src/api/system/notice/index.ts @@ -0,0 +1,37 @@ +import request from '@/config/axios' + +export interface NoticeVO { + id: number | undefined + title: string + type: number + content: string + status: number + remark: string + creator: string + createTime: Date +} + +// 查询公告列表 +export const getNoticePage = (params: PageParam) => { + return request.get({ url: '/system/notice/page', params }) +} + +// 查询公告详情 +export const getNotice = (id: number) => { + return request.get({ url: '/system/notice/get?id=' + id }) +} + +// 新增公告 +export const createNotice = (data: NoticeVO) => { + return request.post({ url: '/system/notice/create', data }) +} + +// 修改公告 +export const updateNotice = (data: NoticeVO) => { + return request.put({ url: '/system/notice/update', data }) +} + +// 删除公告 +export const deleteNotice = (id: number) => { + return request.delete({ url: '/system/notice/delete?id=' + id }) +} diff --git a/src/api/system/notify/message/index.ts b/src/api/system/notify/message/index.ts new file mode 100644 index 0000000..29036b9 --- /dev/null +++ b/src/api/system/notify/message/index.ts @@ -0,0 +1,48 @@ +import request from '@/config/axios' +import qs from 'qs' + +export interface NotifyMessageVO { + id: number + userId: number + userType: number + templateId: number + templateCode: string + templateNickname: string + templateContent: string + templateType: number + templateParams: string + readStatus: boolean + readTime: Date +} + +// 查询站内信消息列表 +export const getNotifyMessagePage = async (params: PageParam) => { + return await request.get({ url: '/system/notify-message/page', params }) +} + +// 获得我的站内信分页 +export const getMyNotifyMessagePage = async (params: PageParam) => { + return await request.get({ url: '/system/notify-message/my-page', params }) +} + +// 批量标记已读 +export const updateNotifyMessageRead = async (ids) => { + return await request.put({ + url: '/system/notify-message/update-read?' + qs.stringify({ ids: ids }, { indices: false }) + }) +} + +// 标记所有站内信为已读 +export const updateAllNotifyMessageRead = async () => { + return await request.put({ url: '/system/notify-message/update-all-read' }) +} + +// 获取当前用户的最新站内信列表 +export const getUnreadNotifyMessageList = async () => { + return await request.get({ url: '/system/notify-message/get-unread-list' }) +} + +// 获得当前用户的未读站内信数量 +export const getUnreadNotifyMessageCount = async () => { + return await request.get({ url: '/system/notify-message/get-unread-count' }) +} diff --git a/src/api/system/notify/template/index.ts b/src/api/system/notify/template/index.ts new file mode 100644 index 0000000..fd7b5ac --- /dev/null +++ b/src/api/system/notify/template/index.ts @@ -0,0 +1,59 @@ +import request from '@/config/axios' + +export interface NotifyTemplateVO { + id?: number + name: string + nickname: string + code: string + roleIds: [] + content: string + type: number + params: string + status: number + remark: string + roleIdList: [] + deptIdList: [] + postIdList: [] + userIdList: [] +} + +export interface NotifySendReqVO { + userId: number | null + templateCode: string + templateParams: Map +} + +// 查询站内信模板列表 +export const getNotifyTemplatePage = async (params: PageParam) => { + return await request.get({ url: '/system/notify-template/page', params }) +} + +// 查询站内信模板详情 +export const getNotifyTemplate = async (id: number) => { + return await request.get({ url: '/system/notify-template/get?id=' + id }) +} + +// 新增站内信模板 +export const createNotifyTemplate = async (data: NotifyTemplateVO) => { + return await request.post({ url: '/system/notify-template/create', data }) +} + +// 修改站内信模板 +export const updateNotifyTemplate = async (data: NotifyTemplateVO) => { + return await request.put({ url: '/system/notify-template/update', data }) +} + +// 删除站内信模板 +export const deleteNotifyTemplate = async (id: number) => { + return await request.delete({ url: '/system/notify-template/delete?id=' + id }) +} + +// 发送站内信 +export const sendNotify = (data: NotifySendReqVO) => { + return request.post({ url: '/system/notify-template/send-notify', data }) +} + +// 查询站内信模板列表不分页 +export const getNotifyTemplateNoPage = async (params: PageParam) => { + return await request.get({ url: '/system/notify-template/noPage', params }) +} diff --git a/src/api/system/oauth2/client.ts b/src/api/system/oauth2/client.ts new file mode 100644 index 0000000..6f71aca --- /dev/null +++ b/src/api/system/oauth2/client.ts @@ -0,0 +1,47 @@ +import request from '@/config/axios' + +export interface OAuth2ClientVO { + id: number + clientId: string + secret: string + name: string + logo: string + description: string + status: number + accessTokenValiditySeconds: number + refreshTokenValiditySeconds: number + redirectUris: string[] + autoApprove: boolean + authorizedGrantTypes: string[] + scopes: string[] + authorities: string[] + resourceIds: string[] + additionalInformation: string + isAdditionalInformationJson: boolean + createTime: Date +} + +// 查询 OAuth2 客户端的列表 +export const getOAuth2ClientPage = (params: PageParam) => { + return request.get({ url: '/system/oauth2-client/page', params }) +} + +// 查询 OAuth2 客户端的详情 +export const getOAuth2Client = (id: number) => { + return request.get({ url: '/system/oauth2-client/get?id=' + id }) +} + +// 新增 OAuth2 客户端 +export const createOAuth2Client = (data: OAuth2ClientVO) => { + return request.post({ url: '/system/oauth2-client/create', data }) +} + +// 修改 OAuth2 客户端 +export const updateOAuth2Client = (data: OAuth2ClientVO) => { + return request.put({ url: '/system/oauth2-client/update', data }) +} + +// 删除 OAuth2 +export const deleteOAuth2Client = (id: number) => { + return request.delete({ url: '/system/oauth2-client/delete?id=' + id }) +} diff --git a/src/api/system/oauth2/token.ts b/src/api/system/oauth2/token.ts new file mode 100644 index 0000000..ac89ae8 --- /dev/null +++ b/src/api/system/oauth2/token.ts @@ -0,0 +1,22 @@ +import request from '@/config/axios' + +export interface OAuth2TokenVO { + id: number + accessToken: string + refreshToken: string + userId: number + userType: number + clientId: string + createTime: Date + expiresTime: Date +} + +// 查询 token列表 +export const getAccessTokenPage = (params: PageParam) => { + return request.get({ url: '/system/oauth2-token/page', params }) +} + +// 删除 token +export const deleteAccessToken = (accessToken: string) => { + return request.delete({ url: '/system/oauth2-token/delete?accessToken=' + accessToken }) +} diff --git a/src/api/system/operatelog/index.ts b/src/api/system/operatelog/index.ts new file mode 100644 index 0000000..848a533 --- /dev/null +++ b/src/api/system/operatelog/index.ts @@ -0,0 +1,33 @@ +import request from '@/config/axios' + +export type OperateLogVO = { + id: number + userNickname: string + traceId: string + userId: number + module: string + name: string + type: number + content: string + exts: Map + requestMethod: string + requestUrl: string + userIp: string + userAgent: string + javaMethod: string + javaMethodArgs: string + startTime: Date + duration: number + resultCode: number + resultMsg: string + resultData: string +} + +// 查询操作日志列表 +export const getOperateLogPage = (params: PageParam) => { + return request.get({ url: '/system/operate-log/page', params }) +} +// 导出操作日志 +export const exportOperateLog = (params) => { + return request.download({ url: '/system/operate-log/export', params }) +} diff --git a/src/api/system/password/index.ts b/src/api/system/password/index.ts new file mode 100644 index 0000000..13d65aa --- /dev/null +++ b/src/api/system/password/index.ts @@ -0,0 +1,30 @@ +import request from '@/config/axios' + +export interface PassWordConfigVO { + id: number + status: boolean + ruleLevel: string + ruleDesc: string + tryCount: number + lockHours: number + updatePeriod: number + dayTryCount: number +} +// 获取密码策略 +export const getConfig = () => { + return request.get({ url: '/system/password/getConfig' }) +} + +// 设置密码策略 +export const setConfig = (data: PassWordConfigVO) => { + return request.post({ url: '/system/password/setConfig', data }) +} + +// 获取密码复杂度 +export const getRuleList = () => { + return request.get({ url: '/system/password/getRuleList'}) +} +// 验证密码是否过期 +export const validateResetTime = (userId:number) => { + return request.get({ url: '/system/password/validateResetTime?userId=' + userId}) +} diff --git a/src/api/system/permission/index.ts b/src/api/system/permission/index.ts new file mode 100644 index 0000000..b3c7696 --- /dev/null +++ b/src/api/system/permission/index.ts @@ -0,0 +1,42 @@ +import request from '@/config/axios' + +export interface PermissionAssignUserRoleReqVO { + userId: number + roleIds: number[] +} + +export interface PermissionAssignRoleMenuReqVO { + roleId: number + menuIds: number[] +} + +export interface PermissionAssignRoleDataScopeReqVO { + roleId: number + dataScope: number + dataScopeDeptIds: number[] +} + +// 查询角色拥有的菜单权限 +export const getRoleMenuList = async (roleId: number) => { + return await request.get({ url: '/system/permission/list-role-menus?roleId=' + roleId }) +} + +// 赋予角色菜单权限 +export const assignRoleMenu = async (data: PermissionAssignRoleMenuReqVO) => { + return await request.post({ url: '/system/permission/assign-role-menu', data }) +} + +// 赋予角色数据权限 +export const assignRoleDataScope = async (data: PermissionAssignRoleDataScopeReqVO) => { + return await request.post({ url: '/system/permission/assign-role-data-scope', data }) +} + +// 查询用户拥有的角色数组 +export const getUserRoleList = async (userId: number) => { + return await request.get({ url: '/system/permission/list-user-roles?userId=' + userId }) +} + +// 赋予用户角色 +export const assignUserRole = async (data: PermissionAssignUserRoleReqVO) => { + return await request.post({ url: '/system/permission/assign-user-role', data }) +} diff --git a/src/api/system/post/index.ts b/src/api/system/post/index.ts new file mode 100644 index 0000000..405db38 --- /dev/null +++ b/src/api/system/post/index.ts @@ -0,0 +1,46 @@ +import request from '@/config/axios' + +export interface PostVO { + id?: number + name: string + code: string + sort: number + status: number + remark: string + createTime?: Date +} + +// 查询岗位列表 +export const getPostPage = async (params: PageParam) => { + return await request.get({ url: '/system/post/page', params }) +} + +// 获取岗位精简信息列表 +export const getSimplePostList = async (): Promise => { + return await request.get({ url: '/system/post/list-all-simple' }) +} + +// 查询岗位详情 +export const getPost = async (id: number) => { + return await request.get({ url: '/system/post/get?id=' + id }) +} + +// 新增岗位 +export const createPost = async (data: PostVO) => { + return await request.post({ url: '/system/post/create', data }) +} + +// 修改岗位 +export const updatePost = async (data: PostVO) => { + return await request.put({ url: '/system/post/update', data }) +} + +// 删除岗位 +export const deletePost = async (id: number) => { + return await request.delete({ url: '/system/post/delete?id=' + id }) +} + +// 导出岗位 +export const exportPost = async (params) => { + return await request.download({ url: '/system/post/export', params }) +} diff --git a/src/api/system/role/index.ts b/src/api/system/role/index.ts new file mode 100644 index 0000000..ac8b3e7 --- /dev/null +++ b/src/api/system/role/index.ts @@ -0,0 +1,66 @@ +import request from '@/config/axios' + +export interface RoleVO { + id: number + name: string + code: string + sort: number + status: number + type: number + dataScope: number + dataScopeDeptIds: number[] + createTime: Date +} + +export interface UpdateStatusReqVO { + id: number + status: number +} + +// 查询角色列表 +export const getRolePage = async (params: PageParam) => { + return await request.get({ url: '/system/role/page', params }) +} + +// 查询角色(精简)列表 +export const getSimpleRoleList = async (): Promise => { + return await request.get({ url: '/system/role/list-all-simple' }) +} + +// 查询角色详情 +export const getRole = async (id: number) => { + return await request.get({ url: '/system/role/get?id=' + id }) +} + +// 新增角色 +export const createRole = async (data: RoleVO) => { + return await request.post({ url: '/system/role/create', data }) +} + +// 修改角色 +export const updateRole = async (data: RoleVO) => { + return await request.put({ url: '/system/role/update', data }) +} + +// 修改角色状态 +export const updateRoleStatus = async (data: UpdateStatusReqVO) => { + return await request.put({ url: '/system/role/update-status', data }) +} + +// 删除角色 +export const deleteRole = async (id: number) => { + return await request.delete({ url: '/system/role/delete?id=' + id }) +} + +// 导出角色 +export const exportRole = (params) => { + return request.download({ + url: '/system/role/export-excel', + params + }) +} + +// 查询角色列表 +export const getRoleNoPage = async (params: PageParam) => { + return await request.get({ url: '/system/role/noPage', params }) +} diff --git a/src/api/system/sensitiveWord/index.ts b/src/api/system/sensitiveWord/index.ts new file mode 100644 index 0000000..1116226 --- /dev/null +++ b/src/api/system/sensitiveWord/index.ts @@ -0,0 +1,58 @@ +import request from '@/config/axios' +import qs from 'qs' + +export interface SensitiveWordVO { + id: number + name: string + status: number + description: string + tags: string[] + createTime: Date +} + +export interface SensitiveWordTestReqVO { + text: string + tag: string[] +} + +// 查询敏感词列表 +export const getSensitiveWordPage = (params: PageParam) => { + return request.get({ url: '/system/sensitive-word/page', params }) +} + +// 查询敏感词详情 +export const getSensitiveWord = (id: number) => { + return request.get({ url: '/system/sensitive-word/get?id=' + id }) +} + +// 新增敏感词 +export const createSensitiveWord = (data: SensitiveWordVO) => { + return request.post({ url: '/system/sensitive-word/create', data }) +} + +// 修改敏感词 +export const updateSensitiveWord = (data: SensitiveWordVO) => { + return request.put({ url: '/system/sensitive-word/update', data }) +} + +// 删除敏感词 +export const deleteSensitiveWord = (id: number) => { + return request.delete({ url: '/system/sensitive-word/delete?id=' + id }) +} + +// 导出敏感词 +export const exportSensitiveWord = (params) => { + return request.download({ url: '/system/sensitive-word/export-excel', params }) +} + +// 获取所有敏感词的标签数组 +export const getSensitiveWordTagList = () => { + return request.get({ url: '/system/sensitive-word/get-tags' }) +} + +// 获得文本所包含的不合法的敏感词数组 +export const validateText = (query: SensitiveWordTestReqVO) => { + return request.get({ + url: '/system/sensitive-word/validate-text?' + qs.stringify(query, { arrayFormat: 'repeat' }) + }) +} diff --git a/src/api/system/serialNumber/index.ts b/src/api/system/serialNumber/index.ts new file mode 100644 index 0000000..33fa754 --- /dev/null +++ b/src/api/system/serialNumber/index.ts @@ -0,0 +1,42 @@ +import request from '@/config/axios' + +export interface SerialNumberVO { + id: number + ruleCode: string + ruleName: string + prefix: string + pattern: string + length: byte + separator: string + remark: string +} + +// 查询流水号规则列表 +export const getSerialNumberPage = async (params) => { + return await request.get({ url: `/system/serial-number/page`, params }) +} + +// 查询流水号规则详情 +export const getSerialNumber = async (id: number) => { + return await request.get({ url: `/system/serial-number/get?id=` + id }) +} + +// 新增流水号规则 +export const createSerialNumber = async (data: SerialNumberVO) => { + return await request.post({ url: `/system/serial-number/create`, data }) +} + +// 修改流水号规则 +export const updateSerialNumber = async (data: SerialNumberVO) => { + return await request.put({ url: `/system/serial-number/update`, data }) +} + +// 删除流水号规则 +export const deleteSerialNumber = async (id: number) => { + return await request.delete({ url: `/system/serial-number/delete?id=` + id }) +} + +// 导出流水号规则 Excel +export const exportSerialNumber = async (params) => { + return await request.download({ url: `/system/serial-number/export-excel`, params }) +} diff --git a/src/api/system/sms/smsChannel/index.ts b/src/api/system/sms/smsChannel/index.ts new file mode 100644 index 0000000..f335628 --- /dev/null +++ b/src/api/system/sms/smsChannel/index.ts @@ -0,0 +1,43 @@ +import request from '@/config/axios' + +export interface SmsChannelVO { + id: number + code: string + status: number + signature: string + remark: string + apiKey: string + apiSecret: string + callbackUrl: string + createTime: Date +} + +// 查询短信渠道列表 +export const getSmsChannelPage = (params: PageParam) => { + return request.get({ url: '/system/sms-channel/page', params }) +} + +// 获得短信渠道精简列表 +export function getSimpleSmsChannelList() { + return request.get({ url: '/system/sms-channel/list-all-simple' }) +} + +// 查询短信渠道详情 +export const getSmsChannel = (id: number) => { + return request.get({ url: '/system/sms-channel/get?id=' + id }) +} + +// 新增短信渠道 +export const createSmsChannel = (data: SmsChannelVO) => { + return request.post({ url: '/system/sms-channel/create', data }) +} + +// 修改短信渠道 +export const updateSmsChannel = (data: SmsChannelVO) => { + return request.put({ url: '/system/sms-channel/update', data }) +} + +// 删除短信渠道 +export const deleteSmsChannel = (id: number) => { + return request.delete({ url: '/system/sms-channel/delete?id=' + id }) +} diff --git a/src/api/system/sms/smsLog/index.ts b/src/api/system/sms/smsLog/index.ts new file mode 100644 index 0000000..3d54fac --- /dev/null +++ b/src/api/system/sms/smsLog/index.ts @@ -0,0 +1,39 @@ +import request from '@/config/axios' + +export interface SmsLogVO { + id: number | null + channelId: number | null + channelCode: string + templateId: number | null + templateCode: string + templateType: number | null + templateContent: string + templateParams: Map | null + apiTemplateId: string + mobile: string + userId: number | null + userType: number | null + sendStatus: number | null + sendTime: Date | null + sendCode: number | null + sendMsg: string + apiSendCode: string + apiSendMsg: string + apiRequestId: string + apiSerialNo: string + receiveStatus: number | null + receiveTime: Date | null + apiReceiveCode: string + apiReceiveMsg: string + createTime: Date | null +} + +// 查询短信日志列表 +export const getSmsLogPage = (params: PageParam) => { + return request.get({ url: '/system/sms-log/page', params }) +} + +// 导出短信日志 +export const exportSmsLog = (params) => { + return request.download({ url: '/system/sms-log/export-excel', params }) +} diff --git a/src/api/system/sms/smsTemplate/index.ts b/src/api/system/sms/smsTemplate/index.ts new file mode 100644 index 0000000..4ad36c7 --- /dev/null +++ b/src/api/system/sms/smsTemplate/index.ts @@ -0,0 +1,69 @@ +import request from '@/config/axios' + +export interface SmsTemplateVO { + id: number | null + type: number | null + status: number + code: string + name: string + content: string + remark: string + apiTemplateId: string + channelId: number | null + channelCode?: string + params?: string[] + createTime?: Date + roleIdList: [] + deptIdList: [] + postIdList: [] + userIdList: [] +} + +export interface SendSmsReqVO { + mobile: string + templateCode: string + templateParams: Map +} + +// 查询短信模板列表 +export const getSmsTemplatePage = (params: PageParam) => { + return request.get({ url: '/system/sms-template/page', params }) +} + +// 查询短信模板详情 +export const getSmsTemplate = (id: number) => { + return request.get({ url: '/system/sms-template/get?id=' + id }) +} + +// 新增短信模板 +export const createSmsTemplate = (data: SmsTemplateVO) => { + return request.post({ url: '/system/sms-template/create', data }) +} + +// 修改短信模板 +export const updateSmsTemplate = (data: SmsTemplateVO) => { + return request.put({ url: '/system/sms-template/update', data }) +} + +// 删除短信模板 +export const deleteSmsTemplate = (id: number) => { + return request.delete({ url: '/system/sms-template/delete?id=' + id }) +} + +// 导出短信模板 +export const exportSmsTemplate = (params) => { + return request.download({ + url: '/system/sms-template/export-excel', + params + }) +} + +// 发送短信 +export const sendSms = (data: SendSmsReqVO) => { + return request.post({ url: '/system/sms-template/send-sms', data }) +} + +// 查询待发送列表 +export const getSmsTemplateNoPage = (data: SendSmsReqVO) => { + return request.get({ url: '/system/sms-template/noPage', data }) +} diff --git a/src/api/system/tableActionRel/index.ts b/src/api/system/tableActionRel/index.ts new file mode 100644 index 0000000..481d2eb --- /dev/null +++ b/src/api/system/tableActionRel/index.ts @@ -0,0 +1,64 @@ +import request from '@/config/axios' + +export interface TableActionRelVO { + id: number + tableName: string + action: number + type: number + name: string + available: string + activeTime: Date + expireTime: Date + remark: string + deletionTime: Date + deleterId: string + extraProperties: string + concurrencyStamp: number + siteId: string +} + +// 查询表名动作关系列表 +export const getTableActionRelPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/system/table-action-rel/senior', data }) + } else { + return await request.get({ url: `/system/table-action-rel/page`, params }) + } +} + +// 查询表名动作关系详情 +export const getTableActionRel = async (id: number) => { + return await request.get({ url: `/system/table-action-rel/get?id=` + id }) +} + +// 新增表名动作关系 +export const createTableActionRel = async (data: TableActionRelVO) => { + return await request.post({ url: `/system/table-action-rel/create`, data }) +} + +// 修改表名动作关系 +export const updateTableActionRel = async (data: TableActionRelVO) => { + return await request.put({ url: `/system/table-action-rel/update`, data }) +} + +// 删除表名动作关系 +export const deleteTableActionRel = async (id: number) => { + return await request.delete({ url: `/system/table-action-rel/delete?id=` + id }) +} + +// 导出表名动作关系 Excel +export const exportTableActionRel = async (params) => { + return await request.download({ url: `/system/table-action-rel/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/system/table-action-rel/get-import-template' }) +} + +// 查询表名动作关系列表 +export const getTableActionRelNoPage = async (params) => { + return await request.get({ url: `/system/table-action-rel/noPage`, params }) +} \ No newline at end of file diff --git a/src/api/system/tenant/index.ts b/src/api/system/tenant/index.ts new file mode 100644 index 0000000..1e11e2d --- /dev/null +++ b/src/api/system/tenant/index.ts @@ -0,0 +1,70 @@ +import request from '@/config/axios' + +export interface TenantVO { + id: number + name: string + contactName: string + contactMobile: string + status: number + domain: string + packageId: number + username: string + password: string + expireTime: Date + accountCount: number + createTime: Date +} + +export interface TenantPageReqVO extends PageParam { + name?: string + contactName?: string + contactMobile?: string + status?: number + createTime?: Date[] +} + +export interface TenantExportReqVO { + name?: string + contactName?: string + contactMobile?: string + status?: number + createTime?: Date[] +} + +// 查询租户列表 +export const getTenantPage = (params: TenantPageReqVO) => { + console.log(params) + if (params.isSearch) { + delete params.isSearch + const data = { ...params } + return request.post({ url: '/system/tenant/senior', data }) + } else { + return request.get({ url: '/system/tenant/page', params }) + } + // return request.get({ url: '/system/tenant/page', params }) +} + +// 查询租户详情 +export const getTenant = (id: number) => { + return request.get({ url: '/system/tenant/get?id=' + id }) +} + +// 新增租户 +export const createTenant = (data: TenantVO) => { + return request.post({ url: '/system/tenant/create', data }) +} + +// 修改租户 +export const updateTenant = (data: TenantVO) => { + return request.put({ url: '/system/tenant/update', data }) +} + +// 删除租户 +export const deleteTenant = (id: number) => { + return request.delete({ url: '/system/tenant/delete?id=' + id }) +} + +// 导出租户 +export const exportTenant = (params: TenantExportReqVO) => { + return request.download({ url: '/system/tenant/export-excel', params }) +} diff --git a/src/api/system/tenantPackage/index.ts b/src/api/system/tenantPackage/index.ts new file mode 100644 index 0000000..01d139e --- /dev/null +++ b/src/api/system/tenantPackage/index.ts @@ -0,0 +1,42 @@ +import request from '@/config/axios' + +export interface TenantPackageVO { + id: number + name: string + status: number + remark: string + creator: string + updater: string + updateTime: string + menuIds: number[] + createTime: Date +} + +// 查询租户套餐列表 +export const getTenantPackagePage = (params: PageParam) => { + return request.get({ url: '/system/tenant-package/page', params }) +} + +// 获得租户 +export const getTenantPackage = (id: number) => { + return request.get({ url: '/system/tenant-package/get?id=' + id }) +} + +// 新增租户套餐 +export const createTenantPackage = (data: TenantPackageVO) => { + return request.post({ url: '/system/tenant-package/create', data }) +} + +// 修改租户套餐 +export const updateTenantPackage = (data: TenantPackageVO) => { + return request.put({ url: '/system/tenant-package/update', data }) +} + +// 删除租户套餐 +export const deleteTenantPackage = (id: number) => { + return request.delete({ url: '/system/tenant-package/delete?id=' + id }) +} +// 获取租户套餐精简信息列表 +export const getTenantPackageList = () => { + return request.get({ url: '/system/tenant-package/get-simple-list' }) +} diff --git a/src/api/system/user/index.ts b/src/api/system/user/index.ts new file mode 100644 index 0000000..606b951 --- /dev/null +++ b/src/api/system/user/index.ts @@ -0,0 +1,120 @@ +import request from '@/config/axios' + +export interface UserVO { + id : number + username : string + nickname : string + deptId : number + postIds : string[] + email : string + mobile : string + sex : number + avatar : string + loginIp : string + status : number + remark : string + loginDate : Date + createTime : Date + userType : string + mailKey : string +} + +export const getUserPage = async (params) => { + console.log(params) + if (params.isSearch) { + delete params.isSearch + const data = { ...params } + return await request.post({ url: '/system/user/senior', data }) + } else { + return await request.get({ url: '/system/user/page', params }) + } +} + +// 查询用户管理列表 +// export const getUserPage = (params: PageParam) => { +// return request.get({ url: '/system/user/page', params }) +// } + +// 查询用户详情 +export const getUser = (id : number) => { + return request.get({ url: '/system/user/get?id=' + id }) +} + +// 新增用户 +export const createUser = (data : UserVO) => { + return request.post({ url: '/system/user/create', data }) +} + +// 修改用户 +export const updateUser = (data : UserVO) => { + return request.put({ url: '/system/user/update', data }) +} + +// 删除用户 +export const deleteUser = (id : number) => { + return request.delete({ url: '/system/user/delete?id=' + id }) +} +// 解冻用户 +export const unLockUser = (id : number) => { + return request.get({ url: '/system/user/unLockUser?id=' + id }) +} +// 导出用户 +export const exportUser = (params) => { + return request.download({ url: '/system/user/export', params }) +} + +// 下载用户导入模板 +export const importUserTemplate = () => { + return request.download({ url: '/system/user/get-import-template' }) +} + +// 用户密码重置 +export const resetUserPwd = (id : number, password : string) => { + const data = { + id, + password + } + return request.put({ url: '/system/user/update-password', data: data }) +} + +// 用户状态修改 +export const updateUserStatus = (id : number, status : number) => { + const data = { + id, + status + } + return request.put({ url: '/system/user/update-status', data: data }) +} + +// 获取用户精简信息列表 +export const getSimpleUserList = () : Promise => { + return request.get({ url: '/system/user/list-all-simple' }) +} + +// 忘记密码 +export const forgetPassword = (data : UserVO) => { + return request.put({ url: '/system/user/forgetPassword', data }) +} + +// 忘记密码->修改密码 +export const updatePassword = (data : UserVO) => { + return request.put({ url: '/system/user/updatePassword', data }) +} +// 重置密码 +export const updateUserPassword = (data : UserVO) => { + return request.put({ url: '/system/user/update-password-by-mailKey', data }) +} + +export const getPassWordConfig = () => { + return request.get({ url: '/system/password/getConfig' }) +} +// 查询用户详情 +export const getUserListByDeptIds = (data : Array) => { + return request.post({ url: '/system/user/getUserListByDeptIds', data }) +} +// 获取全部用户 +export const getUserListAll = () => { + return request.get({ url: '/system/user/listAll' }) +} + + diff --git a/src/api/system/user/profile.ts b/src/api/system/user/profile.ts new file mode 100644 index 0000000..b2623c8 --- /dev/null +++ b/src/api/system/user/profile.ts @@ -0,0 +1,77 @@ +import request from '@/config/axios' + +export interface ProfileDept { + id: number + name: string +} +export interface ProfileRole { + id: number + name: string +} +export interface ProfilePost { + id: number + name: string +} +export interface SocialUser { + id: number + type: number + openid: string + token: string + rawTokenInfo: string + nickname: string + avatar: string + rawUserInfo: string + code: string + state: string +} +export interface ProfileVO { + id: number + username: string + nickname: string + dept: ProfileDept + roles: ProfileRole[] + posts: ProfilePost[] + socialUsers: SocialUser[] + email: string + mobile: string + sex: number + avatar: string + status: number + remark: string + loginIp: string + loginDate: Date + createTime: Date +} + +export interface UserProfileUpdateReqVO { + nickname: string + email: string + mobile: string + sex: number +} + +// 查询用户个人信息 +export const getUserProfile = () => { + return request.get({ url: '/system/user/profile/get' }) +} + +// 修改用户个人信息 +export const updateUserProfile = (data: UserProfileUpdateReqVO) => { + return request.put({ url: '/system/user/profile/update', data }) +} + +// 用户密码重置 +export const updateUserPassword = (oldPassword: string, newPassword: string) => { + return request.put({ + url: '/system/user/profile/update-password', + data: { + oldPassword: oldPassword, + newPassword: newPassword + } + }) +} + +// 用户头像上传 +export const uploadAvatar = (data) => { + return request.upload({ url: '/system/user/profile/update-avatar', data: data }) +} diff --git a/src/api/system/user/socialUser.ts b/src/api/system/user/socialUser.ts new file mode 100644 index 0000000..79f4d40 --- /dev/null +++ b/src/api/system/user/socialUser.ts @@ -0,0 +1,31 @@ +import request from '@/config/axios' + +// 社交绑定,使用 code 授权码 +export const socialBind = (type, code, state) => { + return request.post({ + url: '/system/social-user/bind', + data: { + type, + code, + state + } + }) +} + +// 取消社交绑定 +export const socialUnbind = (type, openid) => { + return request.delete({ + url: '/system/social-user/unbind', + data: { + type, + openid + } + }) +} + +// 社交授权的跳转 +export const socialAuthRedirect = (type, redirectUri) => { + return request.get({ + url: '/system/auth/social-auth-redirect?type=' + type + '&redirectUri=' + redirectUri + }) +} diff --git a/src/api/wms/accountcalendar/index.ts b/src/api/wms/accountcalendar/index.ts new file mode 100644 index 0000000..984d36b --- /dev/null +++ b/src/api/wms/accountcalendar/index.ts @@ -0,0 +1,60 @@ +import request from '@/config/axios' + +export interface AccountcalendarVO { + year: string + month: string + descriiption: string + beginTime: Date + endTime: Date + converttotime: Date + available: number + activeTime: Date + expireTime: Date + remark: string +} + +// 查询账期日历列表 +export const getAccountcalendarPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/wms/accountcalendar/senior', data }) + } else { + return await request.get({ url: `/wms/accountcalendar/page`, params }) + } +} + +// 查询账期日历详情 +export const getAccountcalendar = async (id: number) => { + return await request.get({ url: `/wms/accountcalendar/get?id=` + id }) +} + +// 新增账期日历 +export const createAccountcalendar = async (data: AccountcalendarVO) => { + return await request.post({ url: `/wms/accountcalendar/create`, data }) +} + +// 修改账期日历 +export const updateAccountcalendar = async (data: AccountcalendarVO) => { + return await request.put({ url: `/wms/accountcalendar/update`, data }) +} + +// 删除账期日历 +export const deleteAccountcalendar = async (id: number) => { + return await request.delete({ url: `/wms/accountcalendar/delete?id=` + id }) +} + +// 导出账期日历 Excel +export const exportAccountcalendar = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/accountcalendar/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/accountcalendar/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/accountcalendar/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/agvLocationrelation/index.ts b/src/api/wms/agvLocationrelation/index.ts new file mode 100644 index 0000000..3bc7533 --- /dev/null +++ b/src/api/wms/agvLocationrelation/index.ts @@ -0,0 +1,59 @@ +import request from '@/config/axios' + +export interface AgvLocationrelationVO { + id: number + reqCode: string + positionCode: string + positionArea: string + wmsArea: string + wmsPosition: string + available: string + remark: string +} + +// 查询AGV库位转换列表 +export const getAgvLocationrelationPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/agv-locationrelation/senior', data }) + } else { + return await request.get({ url: `/wms/agv-locationrelation/page`, params }) + } +} + +// 查询AGV库位转换详情 +export const getAgvLocationrelation = async (id: number) => { + return await request.get({ url: `/wms/agv-locationrelation/get?id=` + id }) +} + +// 新增AGV库位转换 +export const createAgvLocationrelation = async (data: AgvLocationrelationVO) => { + return await request.post({ url: `/wms/agv-locationrelation/create`, data }) +} + +// 修改AGV库位转换 +export const updateAgvLocationrelation = async (data: AgvLocationrelationVO) => { + return await request.put({ url: `/wms/agv-locationrelation/update`, data }) +} + +// 删除AGV库位转换 +export const deleteAgvLocationrelation = async (id: number) => { + return await request.delete({ url: `/wms/agv-locationrelation/delete?id=` + id }) +} + +// 导出AGV库位转换 Excel +export const exportAgvLocationrelation = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/agv-locationrelation/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/agv-locationrelation/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/agv-locationrelation/get-import-template' }) +} diff --git a/src/api/wms/areabasic/index.ts b/src/api/wms/areabasic/index.ts new file mode 100644 index 0000000..8554c55 --- /dev/null +++ b/src/api/wms/areabasic/index.ts @@ -0,0 +1,77 @@ +import request from '@/config/axios' + +export interface AreaVO { + code: string + name: string + description: string + warehouseCode: string + type: string + isFunctional: number + available: number + activeTime: Date + expireTime: Date + remark: string +} + +// 查询库区列表 +export const getAreaPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/wms/areabasic/senior', data }) + } else { + return await request.get({ url: `/wms/areabasic/page`, params }) + } +} + +// 查询库区列表 +export const selectAreabasicDOByCode = async (locationCode: String) => { + return await request.get({ url: `/wms/areabasic/getArea?locationCode=`+locationCode }) +} +// 查询库区列表 +export const getAreaList = async (params) => { + return await request.get({ url: `/wms/areabasic/list`, params }) +} +// 校验库区 +export const verifyAreaList = async (params) => { + return await request.get({ url: `/wms/areabasic/listAreabasicByCode`, params }) +} +// 查询库区详情 +export const getArea = async (id: number) => { + return await request.get({ url: `/wms/areabasic/get?id=` + id }) +} + +// 新增库区 +export const createArea = async (data: AreaVO) => { + return await request.post({ url: `/wms/areabasic/create`, data }) +} + +// 修改库区 +export const updateArea = async (data: AreaVO) => { + return await request.put({ url: `/wms/areabasic/update`, data }) +} + +// 删除库区 +export const deleteArea = async (id: number) => { + return await request.delete({ url: `/wms/areabasic/delete?id=` + id }) +} + +// 导出库区 Excel +export const exportArea = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/areabasic/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/areabasic/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/areabasic/get-import-template' }) +} + +// 根据code获取数据列表 +export const getAreabasicByCodes = async (params) => { + return await request.get({ url: `/wms/areabasic/listByCodes`, params }) +} \ No newline at end of file diff --git a/src/api/wms/backflushDetailbQad/index.ts b/src/api/wms/backflushDetailbQad/index.ts new file mode 100644 index 0000000..096cc33 --- /dev/null +++ b/src/api/wms/backflushDetailbQad/index.ts @@ -0,0 +1,50 @@ +import request from '@/config/axios' + +export interface BackflushDetailbQadVO { + qty: number + productreceiptNumber: string + parentItemCode: string + itemCode: string + status: number +} + +// 查询制品收货记录子表QAD返回数据列表 +export const getBackflushDetailbQadPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/backflush-detailb-qad/senior', data }) + } else { + return await request.get({ url: `/wms/backflush-detailb-qad/page`, params }) + } +} + +// 查询制品收货记录子表QAD返回数据详情 +export const getBackflushDetailbQad = async (id: number) => { + return await request.get({ url: `/wms/backflush-detailb-qad/get?id=` + id }) +} + +// 新增制品收货记录子表QAD返回数据 +export const createBackflushDetailbQad = async (data: BackflushDetailbQadVO) => { + return await request.post({ url: `/wms/backflush-detailb-qad/create`, data }) +} + +// 修改制品收货记录子表QAD返回数据 +export const updateBackflushDetailbQad = async (data: BackflushDetailbQadVO) => { + return await request.put({ url: `/wms/backflush-detailb-qad/update`, data }) +} + +// 删除制品收货记录子表QAD返回数据 +export const deleteBackflushDetailbQad = async (id: number) => { + return await request.delete({ url: `/wms/backflush-detailb-qad/delete?id=` + id }) +} + +// 导出制品收货记录子表QAD返回数据 Excel +export const exportBackflushDetailbQad = async (params) => { + return await request.download({ url: `/wms/backflush-detailb-qad/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/backflush-detailb-qad/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/backflushRecordDetailb/index.ts b/src/api/wms/backflushRecordDetailb/index.ts new file mode 100644 index 0000000..3b770a5 --- /dev/null +++ b/src/api/wms/backflushRecordDetailb/index.ts @@ -0,0 +1,66 @@ +import request from '@/config/axios' + +export interface BackflushRecordDetailbVO { + processCode: string + bomVersion: string + packingNumber: string + batch: string + inventoryStatus: string + fromLocationCode: string + fromLocationGroupCode: string + fromAreaCode: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + uom: string + number: string + itemCode: string + remark: string + createTime: Date + creator: string + code: string + interfaceType: string + jobDetailId: string +} + +// 查询制品收货记录子列表 +export const getBackflushRecordDetailbPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/backflush-record-detailb/senior', data }) + } else { + return await request.get({ url: `/wms/backflush-record-detailb/page`, params }) + } +} + +// 查询制品收货记录子详情 +export const getBackflushRecordDetailb = async (id: number) => { + return await request.get({ url: `/wms/backflush-record-detailb/get?id=` + id }) +} + +// 新增制品收货记录子 +export const createBackflushRecordDetailb = async (data: BackflushRecordDetailbVO) => { + return await request.post({ url: `/wms/backflush-record-detailb/create`, data }) +} + +// 修改制品收货记录子 +export const updateBackflushRecordDetailb = async (data: BackflushRecordDetailbVO) => { + return await request.put({ url: `/wms/backflush-record-detailb/update`, data }) +} + +// 删除制品收货记录子 +export const deleteBackflushRecordDetailb = async (id: number) => { + return await request.delete({ url: `/wms/backflush-record-detailb/delete?id=` + id }) +} + +// 导出制品收货记录子 Excel +export const exportBackflushRecordDetailb = async (params) => { + return await request.download({ url: `/wms/backflush-record-detailb/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/backflush-record-detailb/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/backflushRequestDetailb/index.ts b/src/api/wms/backflushRequestDetailb/index.ts new file mode 100644 index 0000000..7e67a09 --- /dev/null +++ b/src/api/wms/backflushRequestDetailb/index.ts @@ -0,0 +1,60 @@ +import request from '@/config/axios' + +export interface BackflushRequestDetailbVO { + processCode: string + bomVersion: string + itemCode: string + number: string + remark: string + createTime: Date + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + updateTime: Date + updater: string + creator: string +} + +// 查询制品收货申请子列表 +export const getBackflushRequestDetailbPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productreceipt-request-detailb/senior', data }) + } else { + return await request.get({ url: `/wms/productreceipt-request-detailb/page`, params }) + } +} + +// 查询制品收货申请子详情 +export const getBackflushRequestDetailb = async (id: number) => { + return await request.get({ url: `/wms/productreceipt-request-detailb/get?id=` + id }) +} + +// 新增制品收货申请子 +export const createBackflushRequestDetailb = async (data: BackflushRequestDetailbVO) => { + return await request.post({ url: `/wms/productreceipt-request-detailb/create`, data }) +} + +// 修改制品收货申请子 +export const updateBackflushRequestDetailb = async (data: BackflushRequestDetailbVO) => { + return await request.put({ url: `/wms/productreceipt-request-detailb/update`, data }) +} + +// 删除制品收货申请子 +export const deleteBackflushRequestDetailb = async (id: number) => { + return await request.delete({ url: `/wms/productreceipt-request-detailb/delete?id=` + id }) +} + +// 导出制品收货申请子 Excel +export const exportBackflushRequestDetailb = async (params) => { + return await request.download({ url: `/wms/productreceipt-request-detailb/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/productreceipt-request-detailb/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/balance/index.ts b/src/api/wms/balance/index.ts new file mode 100644 index 0000000..5199e94 --- /dev/null +++ b/src/api/wms/balance/index.ts @@ -0,0 +1,248 @@ +import request from '@/config/axios' + +export interface BalanceVO { + packingNumber: string + containerNumber: string + itemCode: string + batch: string + altBatch: string + arriveDate: Date + produceDate: Date + expireDate: Date + inventoryStatus: string + locationCode: string + locationGroupCode: string + areaCode: string + warehouseCode: string + erpLocationCode: string + ownerCode: string + uom: string + qty: number + lockedQty: number + usableQty: number + singlePrice: number + amount: number + putInTime: Date + frozen: string + frozenReason: string + lastTransNumber: string + weight: number + area: number + volume: number +} + +// 查询库存余额列表 +export const getBalancePage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/balance/senior', data }) + } else { + return await request.get({ url: `/wms/balance/page`, params }) + } +} + +export const getTransactionBalancePage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/transaction/senior', data }) + } else { + return await request.get({ url: `/wms/transaction/page_balance`, params }) + } +} + +// 查询库存余额列表(包括已冻结,已失效的物料) +export const getBalancePageAll = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/balance/seniorAll', data }) + } else { + return await request.get({ url: `/wms/balance/pageAll`, params }) + } +} + +// 查询库存汇总列表 +export const getBalanceSummaryPageAll = async (params) => { + return await request.get({ url: `/wms/balance/totalBalanceTree`, params }) +} +// 查询库存余额列表 +export const getBalancePageReturn= async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/balance/seniorReturn', data }) + } else { + return await request.get({ url: `/wms/balance/pageReturn`, params }) + } +} +// 查询库存余额列表 +export const getBalancePagePutaway= async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/balance/senior', data }) + } else { + return await request.get({ url: `/wms/balance/pagePutaway`, params }) + } +} +// 查询库存余额列表增加物料筛选条件 +export const getBalanceItemPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/balance/seniorItems', data }) + } else { + return await request.get({ url: `/wms/balance/pageItems`, params }) + } +} +// 查询库存余额列表根据业务类型 +export const getBalancePageByBusinessType = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/balance/seniorBusinessType', data }) + } else { + return await request.get({ url: `/wms/balance/pageBusinessType`, params }) + } +} + + +// 查询库存余额列表根据业务类型的物料类型 +export const getBalancePageByBusinessTypeByItemType = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/balance/seniorBusinessTypeByItemType', data }) + } else { + return await request.get({ url: `/wms/balance/pageBusinessTypeByItemType`, params }) + } +} + +// 备件出库查询库存余额列表 +export const getBalancePageSpare = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/balance/seniorSpareItems', data }) + } else { + return await request.get({ url: `/wms/balance/pageSpareItem`, params }) + } +} + +// 根据物料code 批次 和库位码查询库存余额总数 +export const getSumByConditions= async (params) => { + return await request.get({ url: `/wms/balance/getSumByConditions`, params }) +} + +// 查询库存余额详情 +export const getBalance = async (id: number) => { + return await request.get({ url: `/wms/balance/get?id=` + id }) +} + +// 新增库存余额 +export const createBalance = async (data: BalanceVO) => { + return await request.post({ url: `/wms/balance/create`, data }) +} + +// 修改库存余额 +export const updateBalance = async (data: BalanceVO) => { + return await request.put({ url: `/wms/balance/update`, data }) +} + +// 删除库存余额 +export const deleteBalance = async (id: number) => { + return await request.delete({ url: `/wms/balance/delete?id=` + id }) +} + +// 导出库存余额 Excel +export const exportBalance = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/balance/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/balance/export-excel`, params }) + } +} + +// 导出库存汇总 Excel +export const exportTotalBalanceTree = async (params) => { + return await request.download({ url: `/wms/balance/exportTotalBalanceTree`, params }) +} + + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/balance/get-import-template' }) +} + +// 获得库位代码筛选出的库存余额分页 +export const selectLocationTypeToBalance = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/balance/pageLocationCodeToBalanceSenior', data }) + } else { + return request.get({ url: '/wms/balance/pageLocationCodeToBalance', params}) + } +} + +// 获得配置筛选出的库存余额分页 +export const selectConfigToBalance = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/balance/pageConfigToBalanceSenior', data }) + } else { + return request.get({ url: '/wms/balance/pageConfigToBalance', params}) + } +} + + +// 查询库存余额列表根据业务类型 根据库存状态及库区类型筛选 +export const getBalanceByBusinessTypeByItemType = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/balance/pageBusinessTypeToBalanceSenior', data }) + } else { + return await request.get({ url: `/wms/balance/pageBusinessTypeToBalance`, params }) + } +} + +// 查询库存余额列表根据业务类型 根据库存状态及库区类型再根据物料的种类筛选 +export const getBalanceByBusinessCategoryByItemType = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/balance/pageBusinessCategoryToBalanceSenior', data }) + } else { + return await request.get({ url: `/wms/balance/pageBusinessCategoryToBalance`, params }) + } +} +// 根据code获取数据列表 +export const getBalanceItemListByCodes = async (data) => { +   return await request.get({ url: `/wms/balance/listByCodes`,data }) +} +// 查询bom批次默认数据 +export const getBanchBomPage = async (params) => { + return await request.get({ url: `/wms/balance/pageBOM`, params }) +} + +// 查询 +export const getAllBalancePage = async (params) => { + return await request.get({ url: `/wms/balance/getBalancePageAll `, params }) +} + + +// 查询库存余额列表根据库位 +export const getBalanceByLocation = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/balance/balanceSeniorByLocation', data }) + } else { + return await request.get({ url: `/wms/balance/balancePageByLocation`, params }) + } +} \ No newline at end of file diff --git a/src/api/wms/barbasic/index.ts b/src/api/wms/barbasic/index.ts new file mode 100644 index 0000000..0f7e161 --- /dev/null +++ b/src/api/wms/barbasic/index.ts @@ -0,0 +1,62 @@ +import request from '@/config/axios' + +export interface BarbasicVO { + id: number + number: string + type: string + template: string + status: string + relateNumber: string + barcodeString: string + printTimes: number + lastPrintTime: string + lastPrintUserId: string + lastPrintUserName: string +} + +// 查询条码实体基类列表 +export const getBarbasicPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/barbasic/senior', data }) + } else { + return await request.get({ url: `/wms/barbasic/page`, params }) + } +} + +// 查询条码实体基类详情 +export const getBarbasic = async (id: number) => { + return await request.get({ url: `/wms/barbasic/get?id=` + id }) +} + +// 新增条码实体基类 +export const createBarbasic = async (data: BarbasicVO) => { + return await request.post({ url: `/wms/barbasic/create`, data }) +} + +// 修改条码实体基类 +export const updateBarbasic = async (data: BarbasicVO) => { + return await request.put({ url: `/wms/barbasic/update`, data }) +} + +// 删除条码实体基类 +export const deleteBarbasic = async (id: number) => { + return await request.delete({ url: `/wms/barbasic/delete?id=` + id }) +} + +// 导出条码实体基类 Excel +export const exportBarbasic = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/barbasic/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/barbasic/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/barbasic/get-import-template' }) +} diff --git a/src/api/wms/barcode/index.ts b/src/api/wms/barcode/index.ts new file mode 100644 index 0000000..38d00d6 --- /dev/null +++ b/src/api/wms/barcode/index.ts @@ -0,0 +1,65 @@ +import request from '@/config/axios' + +export interface BarcodeVO { + id: number + code: string + name: string + description: string + order: number + length: number + prefixLenght: number + prefixChar: string + entityProperties: string + encyptMethod: string + masterId: number + trimEnd: string + isEncypt: string, + labelType: string, +} + +// 查询条码片段列表 +export const getBarcodePage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/label/barcode/senior', data }) + } else { + return await request.get({ url: `/label/barcode/page`, params }) + } +} + +// 查询条码片段详情 +export const getBarcode = async (id: number) => { + return await request.get({ url: `/label/barcode/get?id=` + id }) +} + +// 新增条码片段 +export const createBarcode = async (data: BarcodeVO) => { + return await request.post({ url: `/label/barcode/create`, data }) +} + +// 修改条码片段 +export const updateBarcode = async (data: BarcodeVO) => { + return await request.put({ url: `/label/barcode/update`, data }) +} + +// 删除条码片段 +export const deleteBarcode = async (id: number) => { + return await request.delete({ url: `/label/barcode/delete?id=` + id }) +} + +// 导出条码片段 Excel +export const exportBarcode = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/label/barcode/export-excel-senior', data }) + } else { + return await request.download({ url: `/label/barcode/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/label/barcode/get-import-template' }) +} diff --git a/src/api/wms/bom/index.ts b/src/api/wms/bom/index.ts new file mode 100644 index 0000000..84fa225 --- /dev/null +++ b/src/api/wms/bom/index.ts @@ -0,0 +1,61 @@ +import request from '@/config/axios' + +export interface BomVO { + productItemCode: string + componentItemCode: string + componentUom: string + componentQty: number + processCode: string + version: string + layer: number + available: number + activeTime: Date + expireTime: Date + remark: string +} + +// 查询物料清单列表 +export const getBomPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/wms/bom/senior', data }) + } else { + return await request.get({ url: `/wms/bom/page`, params }) + } +} + +// 查询物料清单详情 +export const getBom = async (id: number) => { + return await request.get({ url: `/wms/bom/get?id=` + id }) +} + +// 新增物料清单 +export const createBom = async (data: BomVO) => { + return await request.post({ url: `/wms/bom/create`, data }) +} + +// 修改物料清单 +export const updateBom = async (data: BomVO) => { + return await request.put({ url: `/wms/bom/update`, data }) +} + +// 删除物料清单 +export const deleteBom = async (id: number) => { + return await request.delete({ url: `/wms/bom/delete?id=` + id }) +} + +// 导出物料清单 Excel +export const exportBom = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/bom/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/bom/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/bom/get-import-template' }) +} diff --git a/src/api/wms/bomDismantle/index.ts b/src/api/wms/bomDismantle/index.ts new file mode 100644 index 0000000..981af0f --- /dev/null +++ b/src/api/wms/bomDismantle/index.ts @@ -0,0 +1,52 @@ +import request from '@/config/axios' + +// 查询制品返修申请子列表 +export const getBomDismantlePage = async (params) => { + return await request.get({ url: `/wms/productrepair-request-main/bomPage`, params }) +} + +// 查询制品返修记录子列表 +export const getBomDismantleRecordPage = async (params) => { + return await request.get({ url: `/wms/productrepair-record-main/bomPage`, params }) +} + +// 查询制品报废申请子列表 +export const getProductscrapBomDismantlePage = async (params) => { + return await request.get({ url: `/wms/productscrap-request-main/bomPage`, params }) +} + + +export const getProductscrapBomRecordPage = async (params1) => { + console.log('getProductscrapBomRecordPage',params1) + let params = {...params1} + if(params.isRecord){ + delete params.isRecord + return await request.get({ url: `/wms/productscrap-request-main/bomRecordPage`, params }) + }else{ + delete params.isRecord + return await request.get({ url: `/wms/productscrap-request-main/bomPage`, params }) + + } +} +export const getProductscrapBomRecordPageBatch = async (params1) => { + console.log('getProductscrapBomRecordPage',params1) + let params = {...params1} + if(params.isRecord){ + delete params.isRecord + return await request.get({ url: `/wms/productscrap-request-main/bomRecordPageBatch`, params }) + }else{ + delete params.isRecord + return await request.get({ url: `/wms/productscrap-request-main/bomPageBatch`, params }) + + } +} + +// 查询制品报废申请子列表 +export const getProductscrapBomDismantleRecordPage = async (params) => { + return await request.get({ url: `/wms/productscrap-record-main/bomPage`, params }) +} + +// 查询制品拆解申请子列表 +export const getDetailbBomDismantlePage = async (params) => { + return await request.get({ url: `/wms/dismantle-request-detailb/bomPage`, params }) +} \ No newline at end of file diff --git a/src/api/wms/business/inputBlur.ts b/src/api/wms/business/inputBlur.ts new file mode 100644 index 0000000..2ae9504 --- /dev/null +++ b/src/api/wms/business/inputBlur.ts @@ -0,0 +1,600 @@ + +import { isString } from 'min-dash' +const message = useMessage() // 消息弹窗 +const { t } = useI18n() // 国际化 +/** + * 业务组件 + * tableFormBlur 表格表单失去焦点时候获取焦点 + * FormBlur 表格失去焦点时候获取焦点 + */ +export const tableFormBlurVer = async (headerItem, val, row, index, routeName, formRef, detailData, tableData, callback) => { + + try { + if (headerItem?.tableForm?.searchPage && headerItem?.tableForm?.verificationParams) { + if (val && isString(val)) { + if (!headerItem?.tableForm?.multiple && val.indexOf(',') > -1) { + message.alert('该输入框只能输入一条数据') + row[headerItem.field] = '' + return + } + // 校验 + const params = ref({}) + const params1 = ref({}) + const filters: any[] = [] + const searchCondition = headerItem.tableForm.searchCondition //获取data.ts参数信息 + const verificationParams = headerItem.tableForm.verificationParams //获取data.ts参数信息 + // 循环参数设置参数为key:value格式 + if (searchCondition && searchCondition.length > 0) { + for (let i = 0; i < searchCondition.length; i++) { + if (searchCondition[i].isMainValue) { + params.value[searchCondition[i].key] = + formRef.formModel[searchCondition[i].value] + ? formRef.formModel[searchCondition[i].value] + : detailData + ? detailData[searchCondition[i].value] + : row + ? row[searchCondition[i].value] + : '' + params1.value[searchCondition[i].key] = + formRef.formModel[searchCondition[i].value] + ? formRef.formModel[searchCondition[i].value] + : detailData + ? detailData[searchCondition[i].value] + : row + ? row[searchCondition[i].value] + : '' + // 是否含有空参数情况 + let isNull = false + if ( + params.value[searchCondition[i].key] == '' || + params.value[searchCondition[i].key] == undefined + ) { + if(!searchCondition[i].isOptional){ // 添加参数可选可空的判断 + isNull = true + } + } + if (isNull) { + message.warning( + searchCondition[i].message ? searchCondition[i].message : '前置条件未选择!' + ) + row[headerItem.field] = '' + return + } + if(searchCondition[i].isOptional&&!params.value[searchCondition[i].key]){ // 添加参数可选可空的判断 + continue + } + filters.push({ + action: searchCondition[i].action || '==', + column: searchCondition[i].key, + value: formRef.formModel[ + searchCondition[i].value + ] + ? formRef.formModel[searchCondition[i].value] + : detailData + ? detailData[searchCondition[i].value] + : row + ? row[searchCondition[i].value] + : '' + }) + + } else if (searchCondition[i].isTableRowValue) { + if (searchCondition[i].required) { + if (row[searchCondition[i].value] == '' || row[searchCondition[i].value] == undefined) { + message.warning( + searchCondition[i].message ? searchCondition[i].message : '前置条件未选择!' + ) + row[headerItem.field] = '' + return + } + } + //查询当前table表数据的值 + filters.push({ + action: searchCondition[i].action || '==', + column: searchCondition[i].key, + value: row[searchCondition[i].value] + }) + params1.value[searchCondition[i].key] = row[searchCondition[i].value] + } else { + // 扩展 转换为筛选条件进行查询 + if (searchCondition[i].isSearch) { + if (searchCondition[i].isFormModel) { + //用formModel中的值 + if (searchCondition[i].required) { + if ( + formRef.formModel[searchCondition[i].value] == '' || + formRef.formModel[searchCondition[i].value] == undefined + ) { + message.warning( + searchCondition[i].message ? searchCondition[i].message : '前置条件未选择!' + ) + row[headerItem.field] = '' + return + } + } + filters.push({ + action: searchCondition[i].action || '==', + column: searchCondition[i].key, + value: formRef.formModel[searchCondition[i].value] + }) + params1.value[searchCondition[i].key] = formRef.formModel[searchCondition[i].value] + } else { + filters.push({ + action: searchCondition[i].action || '==', + column: searchCondition[i].key, + value: searchCondition[i].value + }) + params1.value[searchCondition[i].key] = searchCondition[i].value + } + } else { + filters.push({ + action: searchCondition[i].action || '==', + column: searchCondition[i].key, + value: searchCondition[i].value + }) + params1.value[searchCondition[i].key] = searchCondition[i].value + } + } + } + } + if (verificationParams && verificationParams.length > 0) { + // 转换筛选条件所需 + for (let i = 0; i < verificationParams.length; i++) { + // 扩展 转换为筛选条件进行查询 + if (verificationParams[i].isSearch) { + if (verificationParams[i].isFormModel) { + filters.push({ + action: verificationParams[i].action, + column: verificationParams[i].key, + value: formRef.formModel[verificationParams[i].value] + ? formRef.formModel[verificationParams[i].value] + : val.trim() + }) + + verificationParams[i].key1 = verificationParams[i].key + 's' + params1.value[verificationParams[i].key1] = + formRef.formModel[verificationParams[i].value] + ? formRef.formModel[verificationParams[i].value] + : val.trim() + } else { + filters.push({ + action: searchCondition[i].action || '==', + column: searchCondition[i].key, + value: searchCondition[i].value + }) + verificationParams[i].key1 = verificationParams[i].key + 's' + params1.value[verificationParams[i].key1] = searchCondition[i].value + } + } else { + params[verificationParams[i].key] = verificationParams[i].value + verificationParams[i].key1 = verificationParams[i].key + 's' + params1.value[verificationParams[i].key1] = verificationParams[i].value + + } + } + } + console.log(params1.value) + // 判断代码是否存在 + if (!headerItem?.tableForm.isRepeat) { + const seen = new Set() + const repeatCode = new Set() + const arr = tableData.map((item) => item[headerItem.field]?.trim()) + arr.forEach((item) => { + if (item) { + if (seen.has(item)) { + repeatCode.add(item) + } else { + seen.add(item) + } + } + }) + const arr1 = Array.from(repeatCode) + if (arr1.length > 0) { + message.warning(`${arr1.join(',')}${t('ts.已经存在')}`) + row[headerItem.field] = '' + return + } + } + if (filters.length > 0) { + params.value.isSearch = true + params.value.filters = filters + } + const obj = { + by: 'ASC', + pageNo: 1, + pageSize: 20 + } + params.value = { + isSearch: params.value.isSearch, + filters: params.value.filters, + ...obj + } + const list = ref() + if (headerItem?.tableForm?.multiple) { + const pageApi = row.searchTable?.verificationPage ? row.searchTable?.verificationPage : headerItem.tableForm.verificationPage + await pageApi(params1.value).then(async (res) => { + const arr1 = val.split(',') + const list = ref([]) + list.value = res?.length > 0 ? res : [] + if (list.value?.length == 0) { + message.alert('暂无数据') + formRef.setValues(setV) + return + } + console.log(arr1) + console.log(list.value) + if (arr1.length != list.value.length) { + const arr2 = list.value.map((item) => item.code) + const str = [ + ...arr1.filter((item) => !arr2.includes(item)), + ...arr2.filter((item) => !arr1.includes(item)) + ].join(',') + message.alert('代码' + str + '没有找到对应数据') + formRef.setValues(setV) + return + } + callback(list.value) + }) + } else { + // 调取包装接口 + await headerItem.tableForm.searchPage(params.value).then(async (res) => { + + list.value = res?.list?.length > 0 ? res.list.slice(0, 1) : [] + // 只查一条数据,多条数据查询默认显示不存在 + if (list.value?.length == 0) { + message.alert('代码' + row[headerItem.field] + '没有找到对应数据') + row[headerItem.field] = '' + return + } + callback(list.value) + }) + } + } + } + } catch { + message.warning('暂无数据') + row[headerItem.field] = '' + return + } +} +export const FormBlur = async (field, val, routeName, formRef, detailData, formSchema, callback) => { + const setV = {} + setV[field] = '' + try { + if (formSchema.searchPage && formSchema.verificationParams) { + if (!formSchema.multiple) { + //获取data.ts参数信息 + const searchCondition = formSchema?.searchCondition || [] + //获取失去焦点参数信息 + const verificationParams = formSchema?.verificationParams || + [] + console.log('走新方法啦') + // searchCondition = [...searchCondition, ...verificationParams] + + if (val && isString(val)) { + let params = {} + const _searchCondition = {} + const filters: any[] = [] + if (searchCondition && searchCondition.length > 0) { + // 转换筛选条件所需 + for (let i = 0; i < searchCondition.length; i++) { + // searchCondition.forEach((item) => { + // 查询条件为主表某字段,需要赋值主表数据,数据来源是详情的,赋值需要从row中获取 + if (searchCondition[i].isMainValue) { + _searchCondition[searchCondition[i].key] = formRef.formModel[ + searchCondition[i].value + ] + ? formRef.formModel[searchCondition[i].value] + : detailData + ? detailData[searchCondition[i].value] + : // : row + // ? row[searchCondition[i].value] + '' + // 是否含有空参数情况 + let isNull = false + if ( + _searchCondition[searchCondition[i].key] == '' || + _searchCondition[searchCondition[i].key] == undefined + ) { + isNull = true + } + if (isNull) { + message.warning( + searchCondition[i].message ? searchCondition[i].message : '前置条件未选择!' + ) + formRef.setValues(setV) + return + } + filters.push({ + action: searchCondition[i].action || '==', + column: searchCondition[i].key, + value: formRef.formModel[searchCondition[i].value] + }) + } + + // else if (searchCondition[i].isTableRowValue) { + // if (searchCondition[i].required) { + // if (row[searchCondition[i].value] == '' || row[searchCondition[i].value] == undefined) { + // message.warning( + // searchCondition[i].message ? searchCondition[i].message : '前置条件未选择!' + // ) + // return + // } + // } + // row[searchCondition[i].value] + // //查询当前table表数据的值 + // _searchCondition[searchCondition[i].key] = row[searchCondition[i].value] + // } + else { + // 扩展 转换为筛选条件进行查询 + if (searchCondition[i].isSearch) { + if (searchCondition[i].isFormModel) { + //用formModel中的值 + if (searchCondition[i].required) { + if ( + formRef.formModel[searchCondition[i].value] == '' || + formRef.formModel[searchCondition[i].value] == undefined + ) { + message.warning( + searchCondition[i].message ? searchCondition[i].message : '前置条件未选择!' + ) + formRef.setValues(setV) + return + } + } + filters.push({ + action: searchCondition[i].action || '==', + column: searchCondition[i].key, + value: formRef.formModel[searchCondition[i].value] + }) + } else { + filters.push({ + action: searchCondition[i].action || '==', + column: searchCondition[i].key, + value: searchCondition[i].value + }) + } + } else { + filters.push({ + action: searchCondition[i].action || '==', + column: searchCondition[i].key, + value: searchCondition[i].value + }) + } + } + } + } + if (verificationParams && verificationParams.length > 0) { + // 转换筛选条件所需 + for (let i = 0; i < verificationParams.length; i++) { + // 扩展 转换为筛选条件进行查询 + if (verificationParams[i].isSearch) { + if (verificationParams[i].isFormModel) { + filters.push({ + action: verificationParams[i].action, + column: verificationParams[i].key, + value: formRef.formModel[verificationParams[i].value] + ? formRef.formModel[verificationParams[i].value] + : val.trim() + }) + } else { + filters.push({ + action: verificationParams[i].action, + column: verificationParams[i].key, + value: verificationParams[i].value + }) + } + } else { + _searchCondition[verificationParams[i].key] = verificationParams[i].value + } + } + } + console.log(filters) + if (filters.length > 0) { + _searchCondition.isSearch = true + _searchCondition.filters = filters + } + const obj = { + by: 'ASC', + pageNo: 1, + pageSize: 20 + } + params = { + isSearch: _searchCondition.isSearch, + filters: _searchCondition.filters, + ...obj + } + // console.log(333,params) + if (!formSchema?.multiple && val.indexOf(',') > -1) { + message.alert('该输入框只能输入一条数据') + formRef.setValues(setV) + return + } + await formSchema.searchPage(params).then((res) => { + const arr1 = val.split(',') + const list = ref([]) + list.value = res?.list?.length > 0 ? res.list.slice(0, 1) : [] + if (list.value?.length == 0) { + message.alert('暂无数据') + formRef.setValues(setV) + return + } + if (arr1.length != list.value.length) { + const arr2 = list.value.map((item) => item.code) + const str = [ + ...arr1.filter((item) => !arr2.includes(item)), + ...arr2.filter((item) => !arr1.includes(item)) + ].join(',') + message.alert('代码' + str + '没有找到对应数据') + formRef.setValues(setV) + return + } + callback(list.value) + }) + + } + } else { + if (val && isString(val)) { + await formSchema.verificationPage({ + codes: val + }).then((res) => { + const arr1 = val.split(',') + const list = ref([]) + list.value = res?.length > 0 ? res : [] + if (list.value?.length == 0) { + message.alert('暂无数据') + formRef.setValues(setV) + return + } + console.log(arr1) + console.log(list.value) + if (arr1.length != list.value.length) { + const arr2 = list.value.map((item) => item.code) + const str = [ + ...arr1.filter((item) => !arr2.includes(item)), + ...arr2.filter((item) => !arr1.includes(item)) + ].join(',') + const cleanedStr = str.replace(/[,]+$/, ''); // 去掉末尾的逗号// 去掉所有非字母和数字的符号 + message.alert('代码' + cleanedStr + '没有找到对应数据') + formRef.setValues(setV) + return + } + callback(list.value) + }) + } + } + } + } catch { + message.alert('暂无数据') + formRef.setValues(setV) + return + } + + +} + +// 根据下方输入框失去焦点校验信息 +export const getListByBottonInput = async (headerItem, val, row, routeName, formRef, detailData, tableData, callback) => { + const tableFormSchemaObj = headerItem?.tableForm + console.log(333, tableFormSchemaObj) + if (tableFormSchemaObj.verificationPage && tableFormSchemaObj.verificationParams) { + if (!val) return; + const params = ref({}) + const list = ref([]) + const searchCondition1 = headerItem.tableForm.searchCondition //获取data.ts参数信息 + const verificationParams = headerItem.tableForm.verificationParams //获取data.ts参数信息 + // 循环参数设置参数为key:value格式 + if (searchCondition1 && searchCondition1.length > 0) { + for (let i = 0; i < searchCondition1.length; i++) { + if (searchCondition1[i].isMainValue) { + params.value[searchCondition1[i].key] = formRef.formModel[ + searchCondition1[i].value + ] + ? formRef.formModel[searchCondition1[i].value] + : detailData + ? detailData[searchCondition1[i].value] + : '' + // 是否含有空参数情况 + let isNull = false + if ( + params.value[searchCondition1[i].key] == '' || + params.value[searchCondition1[i].key] == undefined + ) { + if(!searchCondition1[i].isOptional){ // 添加参数可选可空的判断 + if(!searchCondition1[i].isOptional){ // 添加参数可选可空的判断 + isNull = true + } + } + } + if (isNull) { + message.warning( + searchCondition1[i].message ? searchCondition1[i].message : '前置条件未选择!' + ) + return + } + } else if (searchCondition1[i].isTableRowValue) { + if (searchCondition1[i].required) { + if (row[searchCondition1[i].value] == '' || row[searchCondition1[i].value] == undefined) { + message.warning( + searchCondition1[i].message ? searchCondition1[i].message : '前置条件未选择!' + ) + return + } + } + row[searchCondition1[i].value] + //查询当前table表数据的值 + params.value[searchCondition1[i].key] = row[searchCondition1[i].value] + } else { + // 扩展 转换为筛选条件进行查询 + if (searchCondition1[i].isSearch) { + if (searchCondition1[i].isFormModel) { + //用formModel中的值 + if (searchCondition1[i].required) { + if ( + formRef.formModel[searchCondition1[i].value] == '' || + formRef.formModel[searchCondition1[i].value] == undefined + ) { + message.warning( + searchCondition1[i].message ? searchCondition1[i].message : '前置条件未选择!' + ) + return + } + } + } else { + params.value[searchCondition1[i].key] = searchCondition1[i].value + } + } else { + params.value[searchCondition1[i].key] = searchCondition1[i].value + } + } + } + } + if (verificationParams && verificationParams.length > 0) { + for (let i = 0; i < verificationParams.length; i++) { + console.log(54565, verificationParams[i].key) + verificationParams[i].key1 = verificationParams[i].key + 's' + params.value[verificationParams[i].key1] = val + } + } + const arr1 = val.split(',').map(item => item.trim()) + // 判断代码是否存在 + if (!headerItem?.tableForm.isRepeat) { + const repeatCode = [] + if (tableData.length > 0) { + tableData.forEach((item) => { + const findIndex = arr1.findIndex(valItem => valItem == item[headerItem.field]) + if (findIndex > -1) { + arr1.splice(findIndex, 1) + repeatCode.push(item[headerItem.field]) + } + }) + } + if (repeatCode.length > 0) { + message.warning(`${t('ts.代码')}${repeatCode.join(',')}${t('ts.已经存在')}`); + return; + } + } + await tableFormSchemaObj.verificationPage(params.value).then(async (res) => { + if(!Array.isArray(res)&&res.list&&Array.isArray(res.list)){ + res = res.list + } + list.value = res ? res : [] + if (arr1.length != res.length) { + const arr2 = res.map((item) => item[headerItem.tableForm.searchField]) + const str = [ + ...arr1.filter((item) => !arr2.includes(item)), + ...arr2.filter((item) => !arr1.includes(item)) + ].join(',') + console.log(arr1.filter((item) => arr2.includes(item))) + console.log(22, str) + if (str) { + message.alert('代码' + str + '没有找到对应数据') + return + } + } + + callback(list.value) + }) + return + } + +} diff --git a/src/api/wms/businesstype/index.ts b/src/api/wms/businesstype/index.ts new file mode 100644 index 0000000..422a828 --- /dev/null +++ b/src/api/wms/businesstype/index.ts @@ -0,0 +1,70 @@ +import request from '@/config/axios' + +export interface BusinesstypeVO { + code: string + name: string + description: string + itemTypes: string + itemStatuses: string + outAreaTypes: string + inAreaTypes: string + outAreaCodes: string + inAreaCodes: string + outInventoryStatuses: string + inInventoryStatuses: string + outTransactionType: string + inTransactionType: string + onTheWayArea: string + activeTime: Date + expireTime: Date + remark: string + useOnTheWay: string + available: string + isSoftDeleted: string +} + +// 查询业务类型列表 +export const getBusinesstypePage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/wms/businesstype/senior', data }) + } else { + return await request.get({ url: `/wms/businesstype/page`, params }) + } +} + +// 查询业务类型详情 +export const getBusinesstype = async (id: number) => { + return await request.get({ url: `/wms/businesstype/get?id=` + id }) +} + +// 新增业务类型 +export const createBusinesstype = async (data: BusinesstypeVO) => { + return await request.post({ url: `/wms/businesstype/create`, data }) +} + +// 修改业务类型 +export const updateBusinesstype = async (data: BusinesstypeVO) => { + return await request.put({ url: `/wms/businesstype/update`, data }) +} + +// 删除业务类型 +export const deleteBusinesstype = async (id: number) => { + return await request.delete({ url: `/wms/businesstype/delete?id=` + id }) +} + +// 导出业务类型 Excel +export const exportBusinesstype = async (params) => { + return await request.download({ url: `/wms/businesstype/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/businesstype/get-import-template' }) +} + +// 库存状态 +export const getBusinesstypeCode = async (businessCode: string) => { + return await request.get({ url: `/wms/businesstype/getBusinesstypeCode?businessCode=` + businessCode }) +} diff --git a/src/api/wms/callmaterials/index.ts b/src/api/wms/callmaterials/index.ts new file mode 100644 index 0000000..198efd9 --- /dev/null +++ b/src/api/wms/callmaterials/index.ts @@ -0,0 +1,59 @@ +import request from '@/config/axios' + +export interface CallmaterialsVO { + id: number + itemCode: string + batch: string + isRecive: string + packUnit: string + location: string + qty: number + uom: string +} + +// 查询叫料标签列表 +export const getCallmaterialsPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/callmaterials/senior', data }) + } else { + return await request.get({ url: `/wms/callmaterials/page`, params }) + } +} + +// 查询叫料标签详情 +export const getCallmaterials = async (id: number) => { + return await request.get({ url: `/wms/callmaterials/get?id=` + id }) +} + +// 新增叫料标签 +export const createCallmaterials = async (data: CallmaterialsVO) => { + return await request.post({ url: `/wms/callmaterials/create`, data }) +} + +// 修改叫料标签 +export const updateCallmaterials = async (data: CallmaterialsVO) => { + return await request.put({ url: `/wms/callmaterials/update`, data }) +} + +// 删除叫料标签 +export const deleteCallmaterials = async (id: number) => { + return await request.delete({ url: `/wms/callmaterials/delete?id=` + id }) +} + +// 导出叫料标签 Excel +export const exportCallmaterials = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/callmaterials/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/callmaterials/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/callmaterials/get-import-template' }) +} diff --git a/src/api/wms/carrier/index.ts b/src/api/wms/carrier/index.ts new file mode 100644 index 0000000..18d1c88 --- /dev/null +++ b/src/api/wms/carrier/index.ts @@ -0,0 +1,68 @@ +import request from '@/config/axios' + +export interface CarrierVO { + code: string + name: string + shortName: string + address: string + country: string + city: string + phone: string + fax: string + postId: string + contacts: string + bank: string + currency: string + taxRate: number + type: string + activeTime: Date + expireTime: Date + remark: string + available: string +} + +// 查询承运商列表 +export const getCarrierPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/wms/carrier/senior', data }) + } else { + return await request.get({ url: `/wms/carrier/page`, params }) + } +} + +// 查询承运商详情 +export const getCarrier = async (id: number) => { + return await request.get({ url: `/wms/carrier/get?id=` + id }) +} + +// 新增承运商 +export const createCarrier = async (data: CarrierVO) => { + return await request.post({ url: `/wms/carrier/create`, data }) +} + +// 修改承运商 +export const updateCarrier = async (data: CarrierVO) => { + return await request.put({ url: `/wms/carrier/update`, data }) +} + +// 删除承运商 +export const deleteCarrier = async (id: number) => { + return await request.delete({ url: `/wms/carrier/delete?id=` + id }) +} + +// 导出承运商 Excel +export const exportCarrier = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/carrier/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/carrier/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/carrier/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/condition/index.ts b/src/api/wms/condition/index.ts new file mode 100644 index 0000000..6e2acde --- /dev/null +++ b/src/api/wms/condition/index.ts @@ -0,0 +1,56 @@ +import request from '@/config/axios' + +export interface ConditionVO { + strategyCode: string + ruleCode: string + paramCode: string + operator: string + value: string + groupCode: string +} + +// 查询条件列表 +export const getConditionPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/wms/condition/senior', data }) + } else { + return await request.get({ url: `/wms/condition/page`, params }) + } +} + +// 查询条件详情 +export const getCondition = async (id: number) => { + return await request.get({ url: `/wms/condition/get?id=` + id }) +} + +// 新增条件 +export const createCondition = async (data: ConditionVO) => { + return await request.post({ url: `/wms/condition/create`, data }) +} + +// 修改条件 +export const updateCondition = async (data: ConditionVO) => { + return await request.put({ url: `/wms/condition/update`, data }) +} + +// 删除条件 +export const deleteCondition = async (id: number) => { + return await request.delete({ url: `/wms/condition/delete?id=` + id }) +} + +// 导出条件 Excel +export const exportCondition = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/condition/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/condition/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/condition/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/configuration/index.ts b/src/api/wms/configuration/index.ts new file mode 100644 index 0000000..65fc1ad --- /dev/null +++ b/src/api/wms/configuration/index.ts @@ -0,0 +1,56 @@ +import request from '@/config/axios' + +export interface ConfigurationVO { + strategyCode: string + ruleCode: string + configurationCode: string + configurationValue: string + description: string + groupCode: string +} + +// 查询配置列表 +export const getConfigurationPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/wms/configuration/senior', data }) + } else { + return await request.get({ url: `/wms/configuration/page`, params }) + } +} + +// 查询配置详情 +export const getConfiguration = async (id: number) => { + return await request.get({ url: `/wms/configuration/get?id=` + id }) +} + +// 新增配置 +export const createConfiguration = async (data: ConfigurationVO) => { + return await request.post({ url: `/wms/configuration/create`, data }) +} + +// 修改配置 +export const updateConfiguration = async (data: ConfigurationVO) => { + return await request.put({ url: `/wms/configuration/update`, data }) +} + +// 删除配置 +export const deleteConfiguration = async (id: number) => { + return await request.delete({ url: `/wms/configuration/delete?id=` + id }) +} + +// 导出配置 Excel +export const exportConfiguration = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/configuration/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/configuration/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/configuration/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/configurationsetting/index.ts b/src/api/wms/configurationsetting/index.ts new file mode 100644 index 0000000..a1a063c --- /dev/null +++ b/src/api/wms/configurationsetting/index.ts @@ -0,0 +1,58 @@ +import request from '@/config/axios' + +export interface ConfigurationsettingVO { + strategyType: string + configurationCode: string + configurationName: string + dataType: string + valueScope: string + relatedTo: string + description: string + isRequired: string +} + +// 查询配置设置列表 +export const getConfigurationsettingPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/wms/configurationsetting/senior', data }) + } else { + return await request.get({ url: `/wms/configurationsetting/page`, params }) + } +} + +// 查询配置设置详情 +export const getConfigurationsetting = async (id: number) => { + return await request.get({ url: `/wms/configurationsetting/get?id=` + id }) +} + +// 新增配置设置 +export const createConfigurationsetting = async (data: ConfigurationsettingVO) => { + return await request.post({ url: `/wms/configurationsetting/create`, data }) +} + +// 修改配置设置 +export const updateConfigurationsetting = async (data: ConfigurationsettingVO) => { + return await request.put({ url: `/wms/configurationsetting/update`, data }) +} + +// 删除配置设置 +export const deleteConfigurationsetting = async (id: number) => { + return await request.delete({ url: `/wms/configurationsetting/delete?id=` + id }) +} + +// 导出配置设置 Excel +export const exportConfigurationsetting = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/configurationsetting/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/configurationsetting/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/configurationsetting/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/consumeRecordDetailb/index.ts b/src/api/wms/consumeRecordDetailb/index.ts new file mode 100644 index 0000000..98745df --- /dev/null +++ b/src/api/wms/consumeRecordDetailb/index.ts @@ -0,0 +1,63 @@ +import request from '@/config/axios' + +export interface ConsumeRecordDetailbVO { + batch: string + fromLocationCode: string + fromLocationGroupCode: string + fromAreaCode: string + inventoryStatus: string + packingNumber: string + number: string + itemCode: string + remark: string + createTime: Date + creator: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + uom: string + code: string + interfaceType: string +} + +// 查询制品返修记录子列表 +export const getConsumeRecordDetailbPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/consume-record-detailb/senior', data }) + } else { + return await request.get({ url: `/wms/consume-record-detailb/page`, params }) + } +} + +// 查询制品返修记录子详情 +export const getConsumeRecordDetailb = async (id: number) => { + return await request.get({ url: `/wms/consume-record-detailb/get?id=` + id }) +} + +// 新增制品返修记录子 +export const createConsumeRecordDetailb = async (data: ConsumeRecordDetailbVO) => { + return await request.post({ url: `/wms/consume-record-detailb/create`, data }) +} + +// 修改制品返修记录子 +export const updateConsumeRecordDetailb = async (data: ConsumeRecordDetailbVO) => { + return await request.put({ url: `/wms/consume-record-detailb/update`, data }) +} + +// 删除制品返修记录子 +export const deleteConsumeRecordDetailb = async (id: number) => { + return await request.delete({ url: `/wms/consume-record-detailb/delete?id=` + id }) +} + +// 导出制品返修记录子 Excel +export const exportConsumeRecordDetailb = async (params) => { + return await request.download({ url: `/wms/consume-record-detailb/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/consume-record-detailb/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/consumereRequestDetailb/index.ts b/src/api/wms/consumereRequestDetailb/index.ts new file mode 100644 index 0000000..9c0baa5 --- /dev/null +++ b/src/api/wms/consumereRequestDetailb/index.ts @@ -0,0 +1,61 @@ +import request from '@/config/axios' + +export interface ConsumereRequestDetailbVO { + inventoryStatus: string + packingNumber: string + batch: string + fromLocationCode: string + number: string + itemCode: string + remark: string + createTime: Date + creator: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + uom: string + updateTime: Date + updater: string +} + +// 查询制品返修申请子列表 +export const getConsumereRequestDetailbPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/consumere-request-detailb/senior', data }) + } else { + return await request.get({ url: `/wms/consumere-request-detailb/page`, params }) + } +} + +// 查询制品返修申请子详情 +export const getConsumereRequestDetailb = async (id: number) => { + return await request.get({ url: `/wms/consumere-request-detailb/get?id=` + id }) +} + +// 新增制品返修申请子 +export const createConsumereRequestDetailb = async (data: ConsumereRequestDetailbVO) => { + return await request.post({ url: `/wms/consumere-request-detailb/create`, data }) +} + +// 修改制品返修申请子 +export const updateConsumereRequestDetailb = async (data: ConsumereRequestDetailbVO) => { + return await request.put({ url: `/wms/consumere-request-detailb/update`, data }) +} + +// 删除制品返修申请子 +export const deleteConsumereRequestDetailb = async (id: number) => { + return await request.delete({ url: `/wms/consumere-request-detailb/delete?id=` + id }) +} + +// 导出制品返修申请子 Excel +export const exportConsumereRequestDetailb = async (params) => { + return await request.download({ url: `/wms/consumere-request-detailb/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/consumere-request-detailb/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/containerBindRecordDetail/index.ts b/src/api/wms/containerBindRecordDetail/index.ts new file mode 100644 index 0000000..6b70279 --- /dev/null +++ b/src/api/wms/containerBindRecordDetail/index.ts @@ -0,0 +1,57 @@ +import request from '@/config/axios' + +export interface ContainerBindRecordDetailVO { + id: number + containerContentType: string + contentNumber: string + itemCode: string + batch: string + inventoryStatus: string + uom: string + qty: number + masterId: number + number: string + siteId: string + remark: string +} + +// 查询器具绑定记录子列表 +export const getContainerBindRecordDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/container-bind-record-detail/senior', data }) + } else { + return await request.get({ url: `/wms/container-bind-record-detail/page`, params }) + } +} + +// 查询器具绑定记录子详情 +export const getContainerBindRecordDetail = async (id: number) => { + return await request.get({ url: `/wms/container-bind-record-detail/get?id=` + id }) +} + +// 新增器具绑定记录子 +export const createContainerBindRecordDetail = async (data: ContainerBindRecordDetailVO) => { + return await request.post({ url: `/wms/container-bind-record-detail/create`, data }) +} + +// 修改器具绑定记录子 +export const updateContainerBindRecordDetail = async (data: ContainerBindRecordDetailVO) => { + return await request.put({ url: `/wms/container-bind-record-detail/update`, data }) +} + +// 删除器具绑定记录子 +export const deleteContainerBindRecordDetail = async (id: number) => { + return await request.delete({ url: `/wms/container-bind-record-detail/delete?id=` + id }) +} + +// 导出器具绑定记录子 Excel +export const exportContainerBindRecordDetail = async (params) => { + return await request.download({ url: `/wms/container-bind-record-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/container-bind-record-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/containerBindRecordMain/index.ts b/src/api/wms/containerBindRecordMain/index.ts new file mode 100644 index 0000000..be7cca6 --- /dev/null +++ b/src/api/wms/containerBindRecordMain/index.ts @@ -0,0 +1,69 @@ +import request from '@/config/axios' + +export interface ContainerBindRecordMainVO { + id: number + number: string + containerNumber: string + fromWarehouseCode: string + toWarehouseCode: string + outTransactionType: string + inTransactionType: string + executeTime: Date + activeDate: Date + available: string + requestTime: Date + dueTime: Date + departmentCode: string + userGroupCode: string + interfaceType: string + businessType: string + remark: string + extraProperties: string + siteId: string + code: string + fromAreaTypes: string + toAreaTypes: string + fromAreaCodes: string + toAreaCodes: string +} + +// 查询器具绑定记录主列表 +export const getContainerBindRecordMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/container-bind-record-main/senior', data }) + } else { + return await request.get({ url: `/wms/container-bind-record-main/page`, params }) + } +} + +// 查询器具绑定记录主详情 +export const getContainerBindRecordMain = async (id: number) => { + return await request.get({ url: `/wms/container-bind-record-main/get?id=` + id }) +} + +// 新增器具绑定记录主 +export const createContainerBindRecordMain = async (data: ContainerBindRecordMainVO) => { + return await request.post({ url: `/wms/container-bind-record-main/create`, data }) +} + +// 修改器具绑定记录主 +export const updateContainerBindRecordMain = async (data: ContainerBindRecordMainVO) => { + return await request.put({ url: `/wms/container-bind-record-main/update`, data }) +} + +// 删除器具绑定记录主 +export const deleteContainerBindRecordMain = async (id: number) => { + return await request.delete({ url: `/wms/container-bind-record-main/delete?id=` + id }) +} + +// 导出器具绑定记录主 Excel +export const exportContainerBindRecordMain = async (params) => { + return await request.download({ url: `/wms/container-bind-record-main/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/container-bind-record-main/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/containerDetail/index.ts b/src/api/wms/containerDetail/index.ts new file mode 100644 index 0000000..1be2d08 --- /dev/null +++ b/src/api/wms/containerDetail/index.ts @@ -0,0 +1,52 @@ +import request from '@/config/axios' + +export interface ContainerDetailVO { + containerContentType: string + contentNumber: string + itemCode: string + batch: string + inventoryStatus: string + uom: string + qty: number +} + +// 查询器具子列表 +export const getContainerDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/container-detail/senior', data }) + } else { + return await request.get({ url: `/wms/container-detail/page`, params }) + } +} + +// 查询器具子详情 +export const getContainerDetail = async (id: number) => { + return await request.get({ url: `/wms/container-detail/get?id=` + id }) +} + +// 新增器具子 +export const createContainerDetail = async (data: ContainerDetailVO) => { + return await request.post({ url: `/wms/container-detail/create`, data }) +} + +// 修改器具子 +export const updateContainerDetail = async (data: ContainerDetailVO) => { + return await request.put({ url: `/wms/container-detail/update`, data }) +} + +// 删除器具子 +export const deleteContainerDetail = async (id: number) => { + return await request.delete({ url: `/wms/container-detail/delete?id=` + id }) +} + +// 导出器具子 Excel +export const exportContainerDetail = async (params) => { + return await request.download({ url: `/wms/container-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/container-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/containerDetailRequest/index.ts b/src/api/wms/containerDetailRequest/index.ts new file mode 100644 index 0000000..43ec721 --- /dev/null +++ b/src/api/wms/containerDetailRequest/index.ts @@ -0,0 +1,60 @@ +import request from '@/config/axios' + +export interface ContainerDetailRequestVO { + id: number + masterId: number + number: string + containerNumber: string + fromLocationCode: string + toLocationCode: string + qty: number + uom: string + remark: string + siteId: string + concurrencyStamp: number + fromOwnerCode: string + toOwnerCode: string +} + +// 查询器具管理申请子列表 +export const getContainerDetailRequestPage = async (params) => { + console.log(params); + + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/container-detail-request/senior', data }) + } else { + return await request.get({ url: `/wms/container-detail-request/page`, params }) + } +} + +// 查询器具管理申请子详情 +export const getContainerDetailRequest = async (id: number) => { + return await request.get({ url: `/wms/container-detail-request/get?id=` + id }) +} + +// 新增器具管理申请子 +export const createContainerDetailRequest = async (data: ContainerDetailRequestVO) => { + return await request.post({ url: `/wms/container-detail-request/create`, data }) +} + +// 修改器具管理申请子 +export const updateContainerDetailRequest = async (data: ContainerDetailRequestVO) => { + return await request.put({ url: `/wms/container-detail-request/update`, data }) +} + +// 删除器具管理申请子 +export const deleteContainerDetailRequest = async (id: number) => { + return await request.delete({ url: `/wms/container-detail-request/delete?id=` + id }) +} + +// 导出器具管理申请子 Excel +export const exportContainerDetailRequest = async (params) => { + return await request.download({ url: `/wms/container-detail-request/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/container-detail-request/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/containerInitRecordDetail/index.ts b/src/api/wms/containerInitRecordDetail/index.ts new file mode 100644 index 0000000..f998ec3 --- /dev/null +++ b/src/api/wms/containerInitRecordDetail/index.ts @@ -0,0 +1,55 @@ +import request from '@/config/axios' + +export interface ContainerInitRecordDetailVO { + id: number + containerNumber: string + type: string + capacity: number + status: string + ownerCode: string + masterId: number + number: string + siteId: string + remark: string +} + +// 查询器具初始化记录子列表 +export const getContainerInitRecordDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/container-init-record-detail/senior', data }) + } else { + return await request.get({ url: `/wms/container-init-record-detail/page`, params }) + } +} + +// 查询器具初始化记录子详情 +export const getContainerInitRecordDetail = async (id: number) => { + return await request.get({ url: `/wms/container-init-record-detail/get?id=` + id }) +} + +// 新增器具初始化记录子 +export const createContainerInitRecordDetail = async (data: ContainerInitRecordDetailVO) => { + return await request.post({ url: `/wms/container-init-record-detail/create`, data }) +} + +// 修改器具初始化记录子 +export const updateContainerInitRecordDetail = async (data: ContainerInitRecordDetailVO) => { + return await request.put({ url: `/wms/container-init-record-detail/update`, data }) +} + +// 删除器具初始化记录子 +export const deleteContainerInitRecordDetail = async (id: number) => { + return await request.delete({ url: `/wms/container-init-record-detail/delete?id=` + id }) +} + +// 导出器具初始化记录子 Excel +export const exportContainerInitRecordDetail = async (params) => { + return await request.download({ url: `/wms/container-init-record-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/container-init-record-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/containerInitRecordMain/index.ts b/src/api/wms/containerInitRecordMain/index.ts new file mode 100644 index 0000000..9bcb441 --- /dev/null +++ b/src/api/wms/containerInitRecordMain/index.ts @@ -0,0 +1,68 @@ +import request from '@/config/axios' + +export interface ContainerInitRecordMainVO { + id: number + number: string + fromWarehouseCode: string + toWarehouseCode: string + outTransactionType: string + inTransactionType: string + executeTime: Date + activeDate: Date + available: string + requestTime: Date + dueTime: Date + departmentCode: string + userGroupCode: string + interfaceType: string + businessType: string + remark: string + extraProperties: string + siteId: string + code: string + fromAreaTypes: string + toAreaTypes: string + fromAreaCodes: string + toAreaCodes: string +} + +// 查询器具初始化记录主列表 +export const getContainerInitRecordMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/container-init-record-main/senior', data }) + } else { + return await request.get({ url: `/wms/container-init-record-main/page`, params }) + } +} + +// 查询器具初始化记录主详情 +export const getContainerInitRecordMain = async (id: number) => { + return await request.get({ url: `/wms/container-init-record-main/get?id=` + id }) +} + +// 新增器具初始化记录主 +export const createContainerInitRecordMain = async (data: ContainerInitRecordMainVO) => { + return await request.post({ url: `/wms/container-init-record-main/create`, data }) +} + +// 修改器具初始化记录主 +export const updateContainerInitRecordMain = async (data: ContainerInitRecordMainVO) => { + return await request.put({ url: `/wms/container-init-record-main/update`, data }) +} + +// 删除器具初始化记录主 +export const deleteContainerInitRecordMain = async (id: number) => { + return await request.delete({ url: `/wms/container-init-record-main/delete?id=` + id }) +} + +// 导出器具初始化记录主 Excel +export const exportContainerInitRecordMain = async (params) => { + return await request.download({ url: `/wms/container-init-record-main/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/container-init-record-main/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/containerMain/index.ts b/src/api/wms/containerMain/index.ts new file mode 100644 index 0000000..7e10ebf --- /dev/null +++ b/src/api/wms/containerMain/index.ts @@ -0,0 +1,61 @@ +import request from '@/config/axios' + +export interface ContainerMainVO { + id: string + number: string + type: string + capacity: number + status: string + ownerCode: string +} + +// 查询器具主列表 +export const getContainerMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/container-main/senior', data }) + } else { + return await request.get({ url: `/wms/container-main/page`, params }) + } +} + +// 查询器具主详情 +export const getContainerMain = async (id: number) => { + return await request.get({ url: `/wms/container-main/get?id=` + id }) +} + +// 新增器具主 +export const createContainerMain = async (data: ContainerMainVO) => { + return await request.post({ url: `/wms/container-main/create`, data }) +} + +// 修改器具主 +export const updateContainerMain = async (data: ContainerMainVO) => { + return await request.put({ url: `/wms/container-main/update`, data }) +} + +// 删除器具主 +export const deleteContainerMain = async (id: number) => { + return await request.delete({ url: `/wms/container-main/delete?id=` + id }) +} + +// 导出器具主 Excel +export const exportContainerMain = async (params) => { + return await request.download({ url: `/wms/container-main/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/container-main/get-import-template' }) +} + +// 器具维修 +export const repairSubmitContainerRequestMain = async (id) => { + return await request.put({ url: `/wms/container-main/repair?id=` + id }) +} + +// 器具报废 +export const scrapSubmitContainerRequestMain = async (id) => { + return await request.put({ url: `/wms/container-main/scrap?id=` + id }) +} diff --git a/src/api/wms/containerMainRequest/index.ts b/src/api/wms/containerMainRequest/index.ts new file mode 100644 index 0000000..2d5bea0 --- /dev/null +++ b/src/api/wms/containerMainRequest/index.ts @@ -0,0 +1,149 @@ +import request from '@/config/axios' + +export interface ContainerMainRequestVO { + id: number + type: string + available: string + remark: string + extraProperties: string + concurrencyStamp: number + siteId: string +} + +// 查询器具管理申请主列表 +export const getContainerMainRequestPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = { ...params } + return await request.post({ url: '/wms/container-main-request/senior', data }) + } else { + return await request.get({ url: `/wms/container-main-request/page`, params }) + } +} + +// 查询器具管理申请主详情 +export const getContainerMainRequest = async (id: number) => { + return await request.get({ url: `/wms/container-main-request/get?id=` + id }) +} + +// 新增器具管理申请主 +export const createContainerMainRequest = async (data: ContainerMainRequestVO) => { + return await request.post({ url: `/wms/container-main-request/create`, data }) +} + +// 修改器具管理申请主 +export const updateContainerMainRequest = async (data: ContainerMainRequestVO) => { + return await request.put({ url: `/wms/container-main-request/update`, data }) +} + +// 删除器具管理申请主 +export const deleteContainerMainRequest = async (id: number) => { + return await request.delete({ url: `/wms/container-main-request/delete?id=` + id }) +} + +// 导出器具管理申请主 Excel +export const exportContainerMainRequest = async (params) => { + params.businessType = 'ContainerManage' + if (params.isSearch) { + delete params.isSearch + const data = { ...params } + return await request.downloadPost({ url: '/wms/container-main-request/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/container-main-request/export-excel`, params }) + } +} + +// 导出初始化器具管理申请主 Excel +export const exportInitialContainerMainRequest = async (params) => { + params.businessType = 'InitialContainerManage' + if (params.isSearch) { + delete params.isSearch + const data = { ...params } + return await request.downloadPost({ url: '/wms/container-main-request/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/container-main-request/export-excel`, params }) + } +} + +// 导出初始化器具管理申请主 Excel +export const exportScrapContainerMainRequest = async (params) => { + params.businessType = 'ScrapContainerManage' + if (params.isSearch) { + delete params.isSearch + const data = { ...params } + return await request.downloadPost({ url: '/wms/container-main-request/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/container-main-request/export-excel`, params }) + } +} + +// 导出移动器具管理申请主 Excel +export const exportMoveContainerMainRequest = async (params) => { + params.businessType = 'MoveContainerManage' + if (params.isSearch) { + delete params.isSearch + const data = { ...params } + return await request.downloadPost({ url: '/wms/container-main-request/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/container-main-request/export-excel`, params }) + } +} + +// 导出返回器具管理申请主 Excel +export const exportReturnContainerMainRequest = async (params) => { + params.businessType = 'ReturnContainerManage' + if (params.isSearch) { + delete params.isSearch + const data = { ...params } + return await request.downloadPost({ url: '/wms/container-main-request/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/container-main-request/export-excel`, params }) + } +} + +// 导出发运器具管理申请主 Excel +export const exportDeliverContainerMainRequest = async (params) => { + params.businessType = 'DeliverContainerManage' + if (params.isSearch) { + delete params.isSearch + const data = { ...params } + return await request.downloadPost({ url: '/wms/container-main-request/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/container-main-request/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/container-main-request/get-import-template' }) +} + +// 关闭 +export const close = (id) => { + return request.put({ url: '/wms/container-main-request/close?id=' + id }) +} + +// 重新添加 +export const reAdd = (id) => { + return request.put({ url: '/wms/container-main-request/reAdd?id=' + id }) +} + +// 提交审批 +export const submit = (id) => { + return request.put({ url: '/wms/container-main-request/submit?id=' + id }) +} + +// 驳回 +export const refused = (id) => { + return request.put({ url: '/wms/container-main-request/refused?id=' + id }) +} + +// 审批通过 +export const agree = (id) => { + return request.put({ url: '/wms/container-main-request/agree?id=' + id }) +} + +// 处理 +export const handle = (id) => { + return request.put({ url: '/wms/container-main-request/handle?id=' + id }) +} diff --git a/src/api/wms/containerRecordDetail/index.ts b/src/api/wms/containerRecordDetail/index.ts new file mode 100644 index 0000000..e8993f7 --- /dev/null +++ b/src/api/wms/containerRecordDetail/index.ts @@ -0,0 +1,58 @@ +import request from '@/config/axios' + +export interface ContainerRecordDetailVO { + id: number + masterId: number + number: string + containerNumber: string + fromLocationCode: string + toLocationCode: string + qty: number + uom: string + remark: string + siteId: string + concurrencyStamp: number + fromOwnerCode: string + toOwnerCode: string +} + +// 查询器具管理记录子列表 +export const getContainerRecordDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/container-record-detail/senior', data }) + } else { + return await request.get({ url: `/wms/container-record-detail/page`, params }) + } +} + +// 查询器具管理记录子详情 +export const getContainerRecordDetail = async (id: number) => { + return await request.get({ url: `/wms/container-record-detail/get?id=` + id }) +} + +// 新增器具管理记录子 +export const createContainerRecordDetail = async (data: ContainerRecordDetailVO) => { + return await request.post({ url: `/wms/container-record-detail/create`, data }) +} + +// 修改器具管理记录子 +export const updateContainerRecordDetail = async (data: ContainerRecordDetailVO) => { + return await request.put({ url: `/wms/container-record-detail/update`, data }) +} + +// 删除器具管理记录子 +export const deleteContainerRecordDetail = async (id: number) => { + return await request.delete({ url: `/wms/container-record-detail/delete?id=` + id }) +} + +// 导出器具管理记录子 Excel +export const exportContainerRecordDetail = async (params) => { + return await request.download({ url: `/wms/container-record-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/container-record-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/containerRecordMain/index.ts b/src/api/wms/containerRecordMain/index.ts new file mode 100644 index 0000000..044e9d8 --- /dev/null +++ b/src/api/wms/containerRecordMain/index.ts @@ -0,0 +1,74 @@ +import request from '@/config/axios' + +export interface ContainerRecordMainVO { + id: number + type: string + number: string + requestNumber: string + status: string + available: string + remark: string + extraProperties: string + concurrencyStamp: number + siteId: string + departmentCode: string +} + +// 查询器具管理记录主列表 +export const getContainerRecordMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/container-record-main/senior', data }) + } else { + return await request.get({ url: `/wms/container-record-main/page`, params }) + } +} + +// 查询器具管理记录主详情 +export const getContainerRecordMain = async (id: number) => { + return await request.get({ url: `/wms/container-record-main/get?id=` + id }) +} + +// 新增器具管理记录主 +export const createContainerRecordMain = async (data: ContainerRecordMainVO) => { + return await request.post({ url: `/wms/container-record-main/create`, data }) +} + +// 修改器具管理记录主 +export const updateContainerRecordMain = async (data: ContainerRecordMainVO) => { + return await request.put({ url: `/wms/container-record-main/update`, data }) +} + +// 删除器具管理记录主 +export const deleteContainerRecordMain = async (id: number) => { + return await request.delete({ url: `/wms/container-record-main/delete?id=` + id }) +} + +// 导出器具管理记录主 Excel +export const exportContainerRecordMain = async (params) => { + // return await request.download({ url: `/wms/container-record-main/export-excel`, params }) + if (params.isSearch) { + delete params.isSearch + const data = { ...params } + return await request.downloadPost({ url: '/wms/container-record-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/container-record-main/export-excel`, params }) + } +} + +// 导出器具管理初始化记录主 Excel +export const exportContainerInitRecordMain = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = { ...params } + return await request.downloadPost({ url: '/wms/container-record-main/export-excel-init-senior', data }) + } else { + return await request.download({ url: `/wms/container-record-main/export-excel-init`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/container-record-main/get-import-template' }) +} diff --git a/src/api/wms/containerRepairRecordDetail/index.ts b/src/api/wms/containerRepairRecordDetail/index.ts new file mode 100644 index 0000000..379757f --- /dev/null +++ b/src/api/wms/containerRepairRecordDetail/index.ts @@ -0,0 +1,53 @@ +import request from '@/config/axios' + +export interface ContainerRepairRecordDetailVO { + id: number + containerNumber: string + fromContainerStatus: string + toContainerStatus: string + masterId: number + number: string + siteId: string + remark: string +} + +// 查询器具维修记录子列表 +export const getContainerRepairRecordDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/container-repair-record-detail/senior', data }) + } else { + return await request.get({ url: `/wms/container-repair-record-detail/page`, params }) + } +} + +// 查询器具维修记录子详情 +export const getContainerRepairRecordDetail = async (id: number) => { + return await request.get({ url: `/wms/container-repair-record-detail/get?id=` + id }) +} + +// 新增器具维修记录子 +export const createContainerRepairRecordDetail = async (data: ContainerRepairRecordDetailVO) => { + return await request.post({ url: `/wms/container-repair-record-detail/create`, data }) +} + +// 修改器具维修记录子 +export const updateContainerRepairRecordDetail = async (data: ContainerRepairRecordDetailVO) => { + return await request.put({ url: `/wms/container-repair-record-detail/update`, data }) +} + +// 删除器具维修记录子 +export const deleteContainerRepairRecordDetail = async (id: number) => { + return await request.delete({ url: `/wms/container-repair-record-detail/delete?id=` + id }) +} + +// 导出器具维修记录子 Excel +export const exportContainerRepairRecordDetail = async (params) => { + return await request.download({ url: `/wms/container-repair-record-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/container-repair-record-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/containerRepairRecordMain/index.ts b/src/api/wms/containerRepairRecordMain/index.ts new file mode 100644 index 0000000..8754af5 --- /dev/null +++ b/src/api/wms/containerRepairRecordMain/index.ts @@ -0,0 +1,69 @@ +import request from '@/config/axios' + +export interface ContainerRepairRecordMainVO { + id: number + number: string + containerNumber: string + fromWarehouseCode: string + toWarehouseCode: string + outTransactionType: string + inTransactionType: string + executeTime: Date + activeDate: Date + available: string + requestTime: Date + dueTime: Date + departmentCode: string + userGroupCode: string + interfaceType: string + businessType: string + remark: string + extraProperties: string + siteId: string + code: string + fromAreaTypes: string + toAreaTypes: string + fromAreaCodes: string + toAreaCodes: string +} + +// 查询器具维修记录主列表 +export const getContainerRepairRecordMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/container-repair-record-main/senior', data }) + } else { + return await request.get({ url: `/wms/container-repair-record-main/page`, params }) + } +} + +// 查询器具维修记录主详情 +export const getContainerRepairRecordMain = async (id: number) => { + return await request.get({ url: `/wms/container-repair-record-main/get?id=` + id }) +} + +// 新增器具维修记录主 +export const createContainerRepairRecordMain = async (data: ContainerRepairRecordMainVO) => { + return await request.post({ url: `/wms/container-repair-record-main/create`, data }) +} + +// 修改器具维修记录主 +export const updateContainerRepairRecordMain = async (data: ContainerRepairRecordMainVO) => { + return await request.put({ url: `/wms/container-repair-record-main/update`, data }) +} + +// 删除器具维修记录主 +export const deleteContainerRepairRecordMain = async (id: number) => { + return await request.delete({ url: `/wms/container-repair-record-main/delete?id=` + id }) +} + +// 导出器具维修记录主 Excel +export const exportContainerRepairRecordMain = async (params) => { + return await request.download({ url: `/wms/container-repair-record-main/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/container-repair-record-main/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/containerUnbindRecordDetail/index.ts b/src/api/wms/containerUnbindRecordDetail/index.ts new file mode 100644 index 0000000..737f9f0 --- /dev/null +++ b/src/api/wms/containerUnbindRecordDetail/index.ts @@ -0,0 +1,57 @@ +import request from '@/config/axios' + +export interface ContainerUnbindRecordDetailVO { + id: number + containerContentType: string + contentNumber: string + itemCode: string + batch: string + inventoryStatus: string + uom: string + qty: number + masterId: number + number: string + siteId: string + remark: string +} + +// 查询器具解绑记录子列表 +export const getContainerUnbindRecordDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/container-unbind-record-detail/senior', data }) + } else { + return await request.get({ url: `/wms/container-unbind-record-detail/page`, params }) + } +} + +// 查询器具解绑记录子详情 +export const getContainerUnbindRecordDetail = async (id: number) => { + return await request.get({ url: `/wms/container-unbind-record-detail/get?id=` + id }) +} + +// 新增器具解绑记录子 +export const createContainerUnbindRecordDetail = async (data: ContainerUnbindRecordDetailVO) => { + return await request.post({ url: `/wms/container-unbind-record-detail/create`, data }) +} + +// 修改器具解绑记录子 +export const updateContainerUnbindRecordDetail = async (data: ContainerUnbindRecordDetailVO) => { + return await request.put({ url: `/wms/container-unbind-record-detail/update`, data }) +} + +// 删除器具解绑记录子 +export const deleteContainerUnbindRecordDetail = async (id: number) => { + return await request.delete({ url: `/wms/container-unbind-record-detail/delete?id=` + id }) +} + +// 导出器具解绑记录子 Excel +export const exportContainerUnbindRecordDetail = async (params) => { + return await request.download({ url: `/wms/container-unbind-record-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/container-unbind-record-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/containerUnbindRecordMain/index.ts b/src/api/wms/containerUnbindRecordMain/index.ts new file mode 100644 index 0000000..1dc49d4 --- /dev/null +++ b/src/api/wms/containerUnbindRecordMain/index.ts @@ -0,0 +1,69 @@ +import request from '@/config/axios' + +export interface ContainerUnbindRecordMainVO { + id: number + number: string + containerNumber: string + fromWarehouseCode: string + toWarehouseCode: string + outTransactionType: string + inTransactionType: string + executeTime: Date + activeDate: Date + available: string + requestTime: Date + dueTime: Date + departmentCode: string + userGroupCode: string + interfaceType: string + businessType: string + remark: string + extraProperties: string + siteId: string + code: string + fromAreaTypes: string + toAreaTypes: string + fromAreaCodes: string + toAreaCodes: string +} + +// 查询器具解绑记录主列表 +export const getContainerUnbindRecordMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/container-unbind-record-main/senior', data }) + } else { + return await request.get({ url: `/wms/container-unbind-record-main/page`, params }) + } +} + +// 查询器具解绑记录主详情 +export const getContainerUnbindRecordMain = async (id: number) => { + return await request.get({ url: `/wms/container-unbind-record-main/get?id=` + id }) +} + +// 新增器具解绑记录主 +export const createContainerUnbindRecordMain = async (data: ContainerUnbindRecordMainVO) => { + return await request.post({ url: `/wms/container-unbind-record-main/create`, data }) +} + +// 修改器具解绑记录主 +export const updateContainerUnbindRecordMain = async (data: ContainerUnbindRecordMainVO) => { + return await request.put({ url: `/wms/container-unbind-record-main/update`, data }) +} + +// 删除器具解绑记录主 +export const deleteContainerUnbindRecordMain = async (id: number) => { + return await request.delete({ url: `/wms/container-unbind-record-main/delete?id=` + id }) +} + +// 导出器具解绑记录主 Excel +export const exportContainerUnbindRecordMain = async (params) => { + return await request.download({ url: `/wms/container-unbind-record-main/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/container-unbind-record-main/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/countJobDetail/index.ts b/src/api/wms/countJobDetail/index.ts new file mode 100644 index 0000000..6b7e132 --- /dev/null +++ b/src/api/wms/countJobDetail/index.ts @@ -0,0 +1,62 @@ +import request from '@/config/axios' + +export interface CountJobDetailVO { + countDetailNumber: string + ownerCode: string + packingNumber: string + containerNumber: string + batch: string + inventoryStatus: string + itemCode: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + number: string + remark: string + createTime: Date + creator: string +} + +// 查询盘点任务子列表 +export const getCountJobDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/count-job-detail/senior', data }) + } else { + return await request.get({ url: `/wms/count-job-detail/page`, params }) + } +} + +// 查询盘点任务子详情 +export const getCountJobDetail = async (id: number) => { + return await request.get({ url: `/wms/count-job-detail/get?id=` + id }) +} + +// 新增盘点任务子 +export const createCountJobDetail = async (data: CountJobDetailVO) => { + return await request.post({ url: `/wms/count-job-detail/create`, data }) +} + +// 修改盘点任务子 +export const updateCountJobDetail = async (data: CountJobDetailVO) => { + return await request.put({ url: `/wms/count-job-detail/update`, data }) +} + +// 删除盘点任务子 +export const deleteCountJobDetail = async (id: number) => { + return await request.delete({ url: `/wms/count-job-detail/delete?id=` + id }) +} + +// 导出盘点任务子 Excel +export const exportCountJobDetail = async (params) => { + return await request.download({ url: `/wms/count-job-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/count-job-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/countJobMain/index.ts b/src/api/wms/countJobMain/index.ts new file mode 100644 index 0000000..d851c31 --- /dev/null +++ b/src/api/wms/countJobMain/index.ts @@ -0,0 +1,115 @@ +import request from '@/config/axios' + +export interface CountJobMainVO { + requestNumber: string + planNumber: string + stage: string + warehouseCode: string + locationCode: string + requestTime: Date + requestDueTime: Date + status: string + expiredTime: Date + updateTime: Date + updater: string + jobStageStatus: string + priority: number + priorityIncrement: number + departmentCode: string + acceptUserId: string + acceptTime: Date + completeUserId: string + completeTime: Date + fromAreaTypes: string + toAreaTypes: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + siteId: string + autoComplete: string + allowModifyLocation: string + allowModifyQty: string + allowBiggerQty: string + allowSmallerQty: string + allowModifInventoryStatus: string + allowContinuousScanning: string + allowPartialComplete: string + allowModifyBatch: string + allowModifyPackingNumber: string +} + +// 查询盘点任务主列表 +export const getCountJobMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/count-job-main/senior', data }) + } else { + return await request.get({ url: `/wms/count-job-main/page`, params }) + } +} + +// 查询盘点任务主详情 +export const getCountJobMain = async (id: number) => { + return await request.get({ url: `/wms/count-job-main/get?id=` + id }) +} + +// 新增盘点任务主 +export const createCountJobMain = async (data: CountJobMainVO) => { + return await request.post({ url: `/wms/count-job-main/create`, data }) +} + +// 修改盘点任务主 +export const updateCountJobMain = async (data: CountJobMainVO) => { + return await request.put({ url: `/wms/count-job-main/update`, data }) +} + +// 删除盘点任务主 +export const deleteCountJobMain = async (id: number) => { + return await request.delete({ url: `/wms/count-job-main/delete?id=` + id }) +} + +// 导出盘点任务主 Excel +export const exportCountJobMain = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.downloadPost({ url: '/wms/count-job-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/count-job-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/count-job-main/get-import-template' }) +} + +// 关闭盘点任务主 +export const closeCountJobMain = (id: number) => { + return request.put({ url: '/wms/count-job-main/close?id=' + id }) +} + +// 完成盘点任务主 +export const doneCountJobMain = (id: number) => { + //更换一下完成接口 + return request.put({ url: '/wms/count-job-main/finish?id=' + id }) +} +// 承接盘点任务主 +export const acceptCountJobMain = (id: number) => { + return request.put({ url: '/wms/count-job-main/accept?id=' + id }) +} +// 取消承接盘点任务主 +export const abandonCountJobMain = (id: number) => { + return request.put({ url: '/wms/count-job-main/abandon?id=' + id }) +} + +// 关闭盘点任务主 +export const handleExportCountJob = async (id: number) => { + let params = { + masterId:id + } + return await request.download({ url: `/wms/count-job-main/export-excel-single`, params }) +} diff --git a/src/api/wms/countPlanDetail/index.ts b/src/api/wms/countPlanDetail/index.ts new file mode 100644 index 0000000..5c4300b --- /dev/null +++ b/src/api/wms/countPlanDetail/index.ts @@ -0,0 +1,52 @@ +import request from '@/config/axios' + +export interface CountPlanDetailVO { + type: string + value: string + number: string + itemCode: string + remark: string + createTime: Date + creator: string + planQty: number + uom: string + updateTime: Date + updater: string + available: string +} + +// 查询盘点计划子列表 +export const getCountPlanDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/count-plan-detail/senior', data }) + } else { + return await request.get({ url: `/wms/count-plan-detail/page`, params }) + } +} + +// 查询盘点计划子详情 +export const getCountPlanDetail = async (id: number) => { + return await request.get({ url: `/wms/count-plan-detail/get?id=` + id }) +} + +// 新增盘点计划子 +export const createCountPlanDetail = async (data: CountPlanDetailVO) => { + return await request.post({ url: `/wms/count-plan-detail/create`, data }) +} + +// 修改盘点计划子 +export const updateCountPlanDetail = async (data: CountPlanDetailVO) => { + return await request.put({ url: `/wms/count-plan-detail/update`, data }) +} + +// 删除盘点计划子 +export const deleteCountPlanDetail = async (id: number) => { + return await request.delete({ url: `/wms/count-plan-detail/delete?id=` + id }) +} + +// 导出盘点计划子 Excel +export const exportCountPlanDetail = async (params) => { + return await request.download({ url: `/wms/count-plan-detail/export-excel`, params }) +} diff --git a/src/api/wms/countPlanMain/index.ts b/src/api/wms/countPlanMain/index.ts new file mode 100644 index 0000000..e292f6d --- /dev/null +++ b/src/api/wms/countPlanMain/index.ts @@ -0,0 +1,111 @@ +import request from '@/config/axios' + +export interface CountPlanMainVO { + type: string + crontab: string + dimension: string + limitedValue: number + ignoreListOfItem: string + ignoreListOfLocation: string + scopeList: string + countSplitType: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + beginTime: Date + endTime: Date + status: string + updateTime: Date + updater: string + isSnapshot: string + isFreeze: string + isCountEmptyLocation: string + isCountZeroInventory: string + isCountNegativeInventory: string + isOpenCount: string + available: string +} + +// 查询盘点计划主列表 +export const getCountPlanMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/count-plan-main/senior', data }) + } else { + return await request.get({ url: `/wms/count-plan-main/page`, params }) + } +} + +// 查询盘点计划主详情 +export const getCountPlanMain = async (id: number) => { + return await request.get({ url: `/wms/count-plan-main/get?id=` + id }) +} + +// 新增盘点计划主 +export const createCountPlanMain = async (data: CountPlanMainVO) => { + return await request.post({ url: `/wms/count-plan-main/create`, data }) +} + +// 修改盘点计划主 +export const updateCountPlanMain = async (data: CountPlanMainVO) => { + return await request.put({ url: `/wms/count-plan-main/update`, data }) +} + +// 删除盘点计划主 +export const deleteCountPlanMain = async (id: number) => { + return await request.delete({ url: `/wms/count-plan-main/delete?id=` + id }) +} + +// 导出盘点计划主 Excel +export const exportCountPlanMain = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.downloadPost({ url: '/wms/count-plan-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/count-plan-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/count-plan-main/get-import-template' }) +} + +// 关闭 +export const close = (id) => { + return request.put({ url: '/wms/count-plan-main/close?id=' + id }) +} + +// 提交审批 +export const submit = (id) => { + return request.put({ url: '/wms/count-plan-main/submit?id=' + id }) +} + +// 打开 +export const open = (id) => { + return request.put({ url: '/wms/count-plan-main/open?id=' + id }) +} + +// 驳回 +export const reject = (id) => { + return request.put({ url: '/wms/count-plan-main/reject?id=' + id }) +} + +// 通过 +export const agree = (id) => { + return request.put({ url: '/wms/count-plan-main/agree?id=' + id }) +} + +// 发布 +export const publish = (id) => { + return request.put({ url: '/wms/count-plan-main/publish?id=' + id }) +} + +// 重置 +export const resetting = (id) => { + return request.put({ url: '/wms/count-plan-main/resetting?id=' + id }) +} diff --git a/src/api/wms/countRecordDetail/index.ts b/src/api/wms/countRecordDetail/index.ts new file mode 100644 index 0000000..3a35068 --- /dev/null +++ b/src/api/wms/countRecordDetail/index.ts @@ -0,0 +1,72 @@ +import request from '@/config/axios' + +export interface CountRecordDetailVO { + countDetailNumber: string + ownerCode: string + packingNumber: string + containerNumber: string + batch: string + locationCode: string + locationGroupCode: string + areaCode: string + inventoryStatus: string + countQty: number + countTime: Date + countUser: string + countDescription: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + code: string + interfaceType: string + number: string + itemCode: string + remark: string + createTime: Date + creatorId: string + jobDetailId: string +} + +// 查询盘点记录子列表 +export const getCountRecordDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/count-record-detail/senior', data }) + } else { + return await request.get({ url: `/wms/count-record-detail/page`, params }) + } +} + +// 查询盘点记录子详情 +export const getCountRecordDetail = async (id: number) => { + return await request.get({ url: `/wms/count-record-detail/get?id=` + id }) +} + +// 新增盘点记录子 +export const createCountRecordDetail = async (data: CountRecordDetailVO) => { + return await request.post({ url: `/wms/count-record-detail/create`, data }) +} + +// 修改盘点记录子 +export const updateCountRecordDetail = async (data: CountRecordDetailVO) => { + return await request.put({ url: `/wms/count-record-detail/update`, data }) +} + +// 删除盘点记录子 +export const deleteCountRecordDetail = async (id: number) => { + return await request.delete({ url: `/wms/count-record-detail/delete?id=` + id }) +} + +// 导出盘点记录子 Excel +export const exportCountRecordDetail = async (params) => { + return await request.download({ url: `/wms/count-record-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/count-record-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/countRecordMain/index.ts b/src/api/wms/countRecordMain/index.ts new file mode 100644 index 0000000..71012a8 --- /dev/null +++ b/src/api/wms/countRecordMain/index.ts @@ -0,0 +1,76 @@ +import request from '@/config/axios' + +export interface CountRecordMainVO { + requestNumber: string + jobNumber: string + planNumber: string + stage: string + warehouseCode: string + outTransactionType: string + inTransactionType: string + executeTime: Date + activeDate: Date + requestTime: Date + dueTime: Date + departmentCode: string + interfaceType: string + code: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + available: string +} + +// 查询盘点记录主列表 +export const getCountRecordMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/count-record-main/senior', data }) + } else { + return await request.get({ url: `/wms/count-record-main/page`, params }) + } +} + +// 查询盘点记录主详情 +export const getCountRecordMain = async (id: number) => { + return await request.get({ url: `/wms/count-record-main/get?id=` + id }) +} + +// 新增盘点记录主 +export const createCountRecordMain = async (data: CountRecordMainVO) => { + return await request.post({ url: `/wms/count-record-main/create`, data }) +} + +// 修改盘点记录主 +export const updateCountRecordMain = async (data: CountRecordMainVO) => { + return await request.put({ url: `/wms/count-record-main/update`, data }) +} + +// 删除盘点记录主 +export const deleteCountRecordMain = async (id: number) => { + return await request.delete({ url: `/wms/count-record-main/delete?id=` + id }) +} + +// 导出盘点记录主 Excel +export const exportCountRecordMain = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.downloadPost({ url: '/wms/count-record-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/count-record-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/count-record-main/get-import-template' }) +} + +// 生成盘点调整 +export const generateCountRecordMain = async (id) => { + return await request.put({ url: `/wms/count-record-main/generate?id=` + id}) +} diff --git a/src/api/wms/countRequestDetail/index.ts b/src/api/wms/countRequestDetail/index.ts new file mode 100644 index 0000000..96ed644 --- /dev/null +++ b/src/api/wms/countRequestDetail/index.ts @@ -0,0 +1,67 @@ +import request from '@/config/axios' + +export interface CountRequestDetailVO { + countDetailNumber: string + ownerCode: string + batch: string + locationCode: string + inventoryStatus: string + number: string + remark: string + createTime: Date + creator: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + updateTime: Date + updater: string + itemCode: string + fromPackingNumber: string + toPackingNumber: string + fromContainerNumber: string + toContainerNumber: string +} + +// 查询盘点申请子列表 +export const getCountRequestDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/count-request-detail/senior', data }) + } else { + return await request.get({ url: `/wms/count-request-detail/page`, params }) + } +} + +// 查询盘点申请子详情 +export const getCountRequestDetail = async (id: number) => { + return await request.get({ url: `/wms/count-request-detail/get?id=` + id }) +} + +// 新增盘点申请子 +export const createCountRequestDetail = async (data: CountRequestDetailVO) => { + return await request.post({ url: `/wms/count-request-detail/create`, data }) +} + +// 修改盘点申请子 +export const updateCountRequestDetail = async (data: CountRequestDetailVO) => { + return await request.put({ url: `/wms/count-request-detail/update`, data }) +} + +// 删除盘点申请子 +export const deleteCountRequestDetail = async (id: number) => { + return await request.delete({ url: `/wms/count-request-detail/delete?id=` + id }) +} + +// 导出盘点申请子 Excel +export const exportCountRequestDetail = async (params) => { + return await request.download({ url: `/wms/count-request-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/count-request-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/countRequestMain/index.ts b/src/api/wms/countRequestMain/index.ts new file mode 100644 index 0000000..77ff0c0 --- /dev/null +++ b/src/api/wms/countRequestMain/index.ts @@ -0,0 +1,118 @@ +import request from '@/config/axios' + +export interface CountRequestMainVO { + requestNumber: string + planNumber: string + stage: string + warehouseCode: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + requestTime: Date + dueTime: Date + departmentCode: string + status: string + updateTime: Date + updater: string + autoCommit: string + autoAgree: string + autoExecute: string + directCreateRecord: string +} + +// 查询盘点申请主列表 +export const getCountRequestMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/count-request-main/senior', data }) + } else { + return await request.get({ url: `/wms/count-request-main/page`, params }) + } +} + +// 查询盘点申请主详情 +export const getCountRequestMain = async (id: number) => { + return await request.get({ url: `/wms/count-request-main/get?id=` + id }) +} + +// 新增盘点申请主 +export const createCountRequestMain = async (data: CountRequestMainVO) => { + return await request.post({ url: `/wms/count-request-main/create`, data }) +} + +// 修改盘点申请主 +export const updateCountRequestMain = async (data: CountRequestMainVO) => { + return await request.put({ url: `/wms/count-request-main/update`, data }) +} + +// 删除盘点申请主 +export const deleteCountRequestMain = async (id: number) => { + return await request.delete({ url: `/wms/count-request-main/delete?id=` + id }) +} + +// 导出盘点申请主 Excel +export const exportCountRequestMain = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.downloadPost({ url: '/wms/count-request-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/count-request-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/count-request-main/get-import-template' }) +} + +// 关闭盘点申请主 Excel +export const close = async (id) => { + return await request.put({ url: `/wms/count-request-main/close?id=` + id }) +} + +// 重新添加盘点申请主 Excel +export const reAdd = async (id) => { + return await request.put({ url: `/wms/count-request-main/reAdd?id=` + id }) +} + +// 提交盘点申请主 Excel +export const submit = async (id) => { + return await request.put({ url: `/wms/count-request-main/submit?id=` + id }) +} + +// 审批通过盘点申请主 Excel +export const agree = async (id) => { + return await request.put({ url: `/wms/count-request-main/agree?id=` + id }) +} + +// 审批驳回盘点申请主 Excel +export const refused = async (id) => { + return await request.put({ url: `/wms/count-request-main/refused?id=` + id }) +} + +// 处理盘点申请主 Excel +export const handle = async (id) => { + return await request.put({ url: `/wms/count-request-main/handle?id=` + id }) +} + +//重盘 +export const reCount = async (data) => { + return await request.put({ url: `/wms/count-request-main/reCount`,data}) +} + +//监盘 +export const superviseCount = async (data) => { + return await request.put({ url: `/wms/count-request-main/supervise`,data}) +} +//生成盘点调整申请 +export const generateCountadjustRequest = async (id) => { + return await request.put({ url: `/wms/count-request-main/generateCountadjustRequest?id=` + id }) +} +//解冻 +export const thaw = async (id) => { + return await request.put({ url: `/wms/count-request-main/thaw?id=` + id }) +} diff --git a/src/api/wms/countadjustRecordDetail/index.ts b/src/api/wms/countadjustRecordDetail/index.ts new file mode 100644 index 0000000..ab86020 --- /dev/null +++ b/src/api/wms/countadjustRecordDetail/index.ts @@ -0,0 +1,69 @@ +import request from '@/config/axios' + +export interface CountadjustRecordDetailVO { + countDetailNumber: string + ownerCode: string + packingNumber: string + containerNumber: string + batch: string + locationCode: string + inventoryStatus: string + inventoryQty: number + countQty: number + adjustQty: number + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + code: string + interfaceType: string + number: string + itemCode: string + remark: string + createTime: Date + creator: string + jobDetailId: string +} + +// 查询盘点调整记录子列表 +export const getCountadjustRecordDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/countadjust-record-detail/senior', data }) + } else { + return await request.get({ url: `/wms/countadjust-record-detail/page`, params }) + } +} + +// 查询盘点调整记录子详情 +export const getCountadjustRecordDetail = async (id: number) => { + return await request.get({ url: `/wms/countadjust-record-detail/get?id=` + id }) +} + +// 新增盘点调整记录子 +export const createCountadjustRecordDetail = async (data: CountadjustRecordDetailVO) => { + return await request.post({ url: `/wms/countadjust-record-detail/create`, data }) +} + +// 修改盘点调整记录子 +export const updateCountadjustRecordDetail = async (data: CountadjustRecordDetailVO) => { + return await request.put({ url: `/wms/countadjust-record-detail/update`, data }) +} + +// 删除盘点调整记录子 +export const deleteCountadjustRecordDetail = async (id: number) => { + return await request.delete({ url: `/wms/countadjust-record-detail/delete?id=` + id }) +} + +// 导出盘点调整记录子 Excel +export const exportCountadjustRecordDetail = async (params) => { + return await request.download({ url: `/wms/countadjust-record-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/countadjust-record-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/countadjustRecordMain/index.ts b/src/api/wms/countadjustRecordMain/index.ts new file mode 100644 index 0000000..8cb6da3 --- /dev/null +++ b/src/api/wms/countadjustRecordMain/index.ts @@ -0,0 +1,69 @@ +import request from '@/config/axios' + +export interface CountadjustRecordMainVO { + requestNumber: string + countRecordNumber: string + warehouseCode: string + outTransactionType: string + inTransactionType: string + executeTime: Date + activeDate: Date + requestTime: Date + dueTime: Date + departmentCode: string + interfaceType: string + code: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + available: string +} + +// 查询盘点调整记录主列表 +export const getCountadjustRecordMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/countadjust-record-main/senior', data }) + } else { + return await request.get({ url: `/wms/countadjust-record-main/page`, params }) + } +} + +// 查询盘点调整记录主详情 +export const getCountadjustRecordMain = async (id: number) => { + return await request.get({ url: `/wms/countadjust-record-main/get?id=` + id }) +} + +// 新增盘点调整记录主 +export const createCountadjustRecordMain = async (data: CountadjustRecordMainVO) => { + return await request.post({ url: `/wms/countadjust-record-main/create`, data }) +} + +// 修改盘点调整记录主 +export const updateCountadjustRecordMain = async (data: CountadjustRecordMainVO) => { + return await request.put({ url: `/wms/countadjust-record-main/update`, data }) +} + +// 删除盘点调整记录主 +export const deleteCountadjustRecordMain = async (id: number) => { + return await request.delete({ url: `/wms/countadjust-record-main/delete?id=` + id }) +} + +// 导出盘点调整记录主 Excel +export const exportCountadjustRecordMain = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.downloadPost({ url: '/wms/countadjust-record-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/countadjust-record-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/countadjust-record-main/get-import-template' }) +} diff --git a/src/api/wms/countadjustRequestDetail/index.ts b/src/api/wms/countadjustRequestDetail/index.ts new file mode 100644 index 0000000..1bb9805 --- /dev/null +++ b/src/api/wms/countadjustRequestDetail/index.ts @@ -0,0 +1,68 @@ +import request from '@/config/axios' + +export interface CountadjustRequestDetailVO { + countDetailNumber: string + ownerlCode: string + packinglNumber: string + containerlNumber: string + batch: string + locationlCode: string + inventorylStatus: string + inventorylQty: number + countlQty: number + adjustlQty: number + number: string + remark: string + createTime: Date + creator: string + itemlName: string + itemlDesc1: string + itemlDesc2: string + projectlCode: string + qty: number + uom: string + updateTime: Date + updater: string + itemlCode: string +} + +// 查询盘点调整申请子列表 +export const getCountadjustRequestDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/countadjust-request-detail/senior', data }) + } else { + return await request.get({ url: `/wms/countadjust-request-detail/page`, params }) + } +} + +// 查询盘点调整申请子详情 +export const getCountadjustRequestDetail = async (id: number) => { + return await request.get({ url: `/wms/countadjust-request-detail/get?id=` + id }) +} + +// 新增盘点调整申请子 +export const createCountadjustRequestDetail = async (data: CountadjustRequestDetailVO) => { + return await request.post({ url: `/wms/countadjust-request-detail/create`, data }) +} + +// 修改盘点调整申请子 +export const updateCountadjustRequestDetail = async (data: CountadjustRequestDetailVO) => { + return await request.put({ url: `/wms/countadjust-request-detail/update`, data }) +} + +// 删除盘点调整申请子 +export const deleteCountadjustRequestDetail = async (id: number) => { + return await request.delete({ url: `/wms/countadjust-request-detail/delete?id=` + id }) +} + +// 导出盘点调整申请子 Excel +export const exportCountadjustRequestDetail = async (params) => { + return await request.download({ url: `/wms/countadjust-request-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/countadjust-request-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/countadjustRequestMain/index.ts b/src/api/wms/countadjustRequestMain/index.ts new file mode 100644 index 0000000..d1612bd --- /dev/null +++ b/src/api/wms/countadjustRequestMain/index.ts @@ -0,0 +1,99 @@ +import request from '@/config/axios' + +export interface CountadjustRequestMainVO { + requestNumber: string + countRecordNumber: string + warehouseCode: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + requestTime: Date + dueTime: Date + departmentCode: string + status: string + updateTime: Date + updater: string + autoCommit: string + autoAgree: string + autoExecute: string + directCreateRecord: string +} + +// 查询盘点调整申请主列表 +export const getCountadjustRequestMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/countadjust-request-main/senior', data }) + } else { + return await request.get({ url: `/wms/countadjust-request-main/page`, params }) + } +} + +// 查询盘点调整申请主详情 +export const getCountadjustRequestMain = async (id: number) => { + return await request.get({ url: `/wms/countadjust-request-main/get?id=` + id }) +} + +// 新增盘点调整申请主 +export const createCountadjustRequestMain = async (data: CountadjustRequestMainVO) => { + return await request.post({ url: `/wms/countadjust-request-main/create`, data }) +} + +// 修改盘点调整申请主 +export const updateCountadjustRequestMain = async (data: CountadjustRequestMainVO) => { + return await request.put({ url: `/wms/countadjust-request-main/update`, data }) +} + +// 删除盘点调整申请主 +export const deleteCountadjustRequestMain = async (id: number) => { + return await request.delete({ url: `/wms/countadjust-request-main/delete?id=` + id }) +} + +// 导出盘点调整申请主 Excel +export const exportCountadjustRequestMain = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.downloadPost({ url: '/wms/countadjust-request-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/countadjust-request-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/countadjust-request-main/get-import-template' }) +} + +// 关闭盘点申请主 Excel +export const close = async (id) => { + return await request.put({ url: `/wms/countadjust-request-main/close?id=` + id }) +} + +// 重新添加盘点申请主 Excel +export const reAdd = async (id) => { + return await request.put({ url: `/wms/countadjust-request-main/reAdd?id=` + id }) +} + +// 提交盘点申请主 Excel +export const submit = async (id) => { + return await request.put({ url: `/wms/countadjust-request-main/submit?id=` + id }) +} + +// 审批通过盘点申请主 Excel +export const agree = async (id) => { + return await request.put({ url: `/wms/countadjust-request-main/agree?id=` + id }) +} + +// 审批驳回盘点申请主 Excel +export const refused = async (id) => { + return await request.put({ url: `/wms/countadjust-request-main/refused?id=` + id }) +} + +// 处理盘点申请主 Excel +export const handle = async (id) => { + return await request.put({ url: `/wms/countadjust-request-main/handle?id=` + id }) +} diff --git a/src/api/wms/currencyexchange/index.ts b/src/api/wms/currencyexchange/index.ts new file mode 100644 index 0000000..6e07777 --- /dev/null +++ b/src/api/wms/currencyexchange/index.ts @@ -0,0 +1,57 @@ +import request from '@/config/axios' + +export interface CurrencyexchangeVO { + currency: string + basiccurrency: string + rate: number + available: number + activeTime: Date + expireTime: Date + remark: string +} + +// 查询货币转换列表 +export const getCurrencyexchangePage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/wms/currencyexchange/senior', data }) + } else { + return await request.get({ url: `/wms/currencyexchange/page`, params }) + } +} + +// 查询货币转换详情 +export const getCurrencyexchange = async (id: number) => { + return await request.get({ url: `/wms/currencyexchange/get?id=` + id }) +} + +// 新增货币转换 +export const createCurrencyexchange = async (data: CurrencyexchangeVO) => { + return await request.post({ url: `/wms/currencyexchange/create`, data }) +} + +// 修改货币转换 +export const updateCurrencyexchange = async (data: CurrencyexchangeVO) => { + return await request.put({ url: `/wms/currencyexchange/update`, data }) +} + +// 删除货币转换 +export const deleteCurrencyexchange = async (id: number) => { + return await request.delete({ url: `/wms/currencyexchange/delete?id=` + id }) +} + +// 导出货币转换 Excel +export const exportCurrencyexchange = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/currencyexchange/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/currencyexchange/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/currencyexchange/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/customer/index.ts b/src/api/wms/customer/index.ts new file mode 100644 index 0000000..2ae4ee4 --- /dev/null +++ b/src/api/wms/customer/index.ts @@ -0,0 +1,75 @@ +import request from '@/config/axios' + +export interface CustomerVO { + code: string + name: string + shortName: string + address: string + country: string + city: string + phone: string + fax: string + postId: string + contacts: string + bank: string + currency: string + taxRate: number + type: string + available: number + activeTime: Date + expireTime: Date + remark: string +} + +// 查询客户列表 +export const getCustomerPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/wms/customer/senior', data }) + } else { + return await request.get({ url: `/wms/customer/page`, params }) + } +} +// 查询客户列表 +export const getCustomerList = async (params) => { + return await request.get({ url: `/wms/customer/list`, params }) +} +// 查询客户详情 +export const getCustomer = async (id: number) => { + return await request.get({ url: `/wms/customer/get?id=` + id }) +} + +// 新增客户 +export const createCustomer = async (data: CustomerVO) => { + return await request.post({ url: `/wms/customer/create`, data }) +} + +// 修改客户 +export const updateCustomer = async (data: CustomerVO) => { + return await request.put({ url: `/wms/customer/update`, data }) +} + +// 删除客户 +export const deleteCustomer = async (id: number) => { + return await request.delete({ url: `/wms/customer/delete?id=` + id }) +} + +// 导出客户 Excel +export const exportCustomer = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/customer/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/customer/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/customer/get-import-template' }) +} + +export const getCustomerByCodes = async (params) => { + return await request.get({ url: `/wms/customer/listByCodes`, params }) +} diff --git a/src/api/wms/customerDeliveryForecast/index.ts b/src/api/wms/customerDeliveryForecast/index.ts new file mode 100644 index 0000000..65322ff --- /dev/null +++ b/src/api/wms/customerDeliveryForecast/index.ts @@ -0,0 +1,63 @@ +import request from '@/config/axios' + +export interface CustomerDeliveryForecastVO { + schdSite: string + schdOrder: string + schdLine: string + schdCust: string + schdShipto: string + schdDock: string + schdPart: string + schdNetReq: string + schdDate: Date + schdTime: Date + schdReference: string + schdOrdMult: string + schdCustpart: string + schdPkgCode: string + schdModelyr: string + schdCustref: string + schdPcrQty: string + available: string +} + +// 查询客户发货预测列表 +export const getCustomerDeliveryForecastPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/customer-delivery-forecast/senior', data }) + } else { + return await request.get({ url: `/wms/customer-delivery-forecast/page`, params }) + } +} + +// 查询客户发货预测详情 +export const getCustomerDeliveryForecast = async (id: number) => { + return await request.get({ url: `/wms/customer-delivery-forecast/get?id=` + id }) +} + +// 新增客户发货预测 +export const createCustomerDeliveryForecast = async (data: CustomerDeliveryForecastVO) => { + return await request.post({ url: `/wms/customer-delivery-forecast/create`, data }) +} + +// 修改客户发货预测 +export const updateCustomerDeliveryForecast = async (data: CustomerDeliveryForecastVO) => { + return await request.put({ url: `/wms/customer-delivery-forecast/update`, data }) +} + +// 删除客户发货预测 +export const deleteCustomerDeliveryForecast = async (id: number) => { + return await request.delete({ url: `/wms/customer-delivery-forecast/delete?id=` + id }) +} + +// 导出客户发货预测 Excel +export const exportCustomerDeliveryForecast = async (params) => { + return await request.download({ url: `/wms/customer-delivery-forecast/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/customer-delivery-forecast/get-import-template' }) +} diff --git a/src/api/wms/customerdock/index.ts b/src/api/wms/customerdock/index.ts new file mode 100644 index 0000000..a340407 --- /dev/null +++ b/src/api/wms/customerdock/index.ts @@ -0,0 +1,90 @@ +import request from '@/config/axios' + +export interface CustomerdockVO { + code: string + name: string + description: string + city: string + address: string + contactPerson: string + contactPhone: string + customerCode: string + warehouseCode: string + defaultLocationCode: string + available: number + activeTime: Date + expireTime: Date + remark: string +} + +// 查询客户月台列表 +export const getCustomerdockPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/wms/customerdock/senior', data }) + } else { + return await request.get({ url: `/wms/customerdock/page`, params }) + } +} + +export const getdeliverCustomerdockPage = async (params) => { + return await request.get({ url: `/wms/customerdock/deliverPages`, params }) +} + +// 查询客户月台详情 +export const getCustomerdock = async (id: number) => { + return await request.get({ url: `/wms/customerdock/get?id=` + id }) +} + +// 新增客户月台 +export const createCustomerdock = async (data: CustomerdockVO) => { + return await request.post({ url: `/wms/customerdock/create`, data }) +} + +// 修改客户月台 +export const updateCustomerdock = async (data: CustomerdockVO) => { + return await request.put({ url: `/wms/customerdock/update`, data }) +} + +// 删除客户月台 +export const deleteCustomerdock = async (id: number) => { + return await request.delete({ url: `/wms/customerdock/delete?id=` + id }) +} + +// 导出客户月台 Excel +export const exportCustomerdock = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/customerdock/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/customerdock/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/customerdock/get-import-template' }) +} + +// 查询客户月台发货口列表 +export const pageCustomerCodeToCustomerDock = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/wms/customerdock/pageCustomerCodeToCustomerDockSenior', data }) + } else { + return await request.get({ url: `/wms/customerdock/pageCustomerCodeToCustomerDock`, params }) + } +} + +// 查询客户月台收货口列表 +export const pageCustomerCodeToCustomerDockReceiving = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/wms/customerdock/pageCustomerCodeToCustomerDockReceivingSenior', data }) + } else { + return await request.get({ url: `/wms/customerdock/pageCustomerCodeToCustomerDockReceiving`, params }) + } +} diff --git a/src/api/wms/customeritem/index.ts b/src/api/wms/customeritem/index.ts new file mode 100644 index 0000000..b9af703 --- /dev/null +++ b/src/api/wms/customeritem/index.ts @@ -0,0 +1,80 @@ +import request from '@/config/axios' + +export interface CustomeritemVO { + customerCode: string + itemCode: string + customerItemCode: string + cusotmerUom: string + convertRate: number + packUnit: string + packQty: number + altPackUnit: string + altPackQty: number + packQtyOfContainer: number + available: number + activeTime: Date + expireTime: Date + remark: string +} + +// 查询客户物料列表 +export const getCustomeritemPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/wms/customeritem/senior', data }) + } else { + return await request.get({ url: `/wms/customeritem/page`, params }) + } +} + +// 查询客户物料详情 +export const getCustomeritem = async (id: number) => { + return await request.get({ url: `/wms/customeritem/get?id=` + id }) +} + +// 新增客户物料 +export const createCustomeritem = async (data: CustomeritemVO) => { + return await request.post({ url: `/wms/customeritem/create`, data }) +} + +// 修改客户物料 +export const updateCustomeritem = async (data: CustomeritemVO) => { + return await request.put({ url: `/wms/customeritem/update`, data }) +} + +// 删除客户物料 +export const deleteCustomeritem = async (id: number) => { + return await request.delete({ url: `/wms/customeritem/delete?id=` + id }) +} + +// 导出客户物料 Excel +export const exportCustomeritem = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/customeritem/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/customeritem/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/customeritem/get-import-template' }) +} + +// 获得业务类型筛选出的物料分页 +export const getPageBusinessTypeToItemCode = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/wms/customeritem/pageBusinessTypeToLocationSenior', data }) + } else { + return await request.get({ url: `/wms/customeritem/pageBusinessTypeToItemCode`, params }) + } +} + +// 根据code获取数据列表 +export const getCustomerItemListByCodes = async (data) => { + return await request.get({ url: `/wms/customeritem/listByCodes?itemCodes=` + data.itemCodes + '&customerCode='+data.customerCode + '&businessType='+(data.businessType?data.businessType:'') }) +} diff --git a/src/api/wms/customerreceiptRecordDetail/index.ts b/src/api/wms/customerreceiptRecordDetail/index.ts new file mode 100644 index 0000000..037bf8e --- /dev/null +++ b/src/api/wms/customerreceiptRecordDetail/index.ts @@ -0,0 +1,78 @@ +import request from '@/config/axios' + +export interface CustomerreceiptRecordDetailVO { + soNumber: string + soLine: string + fromBatch: string + inventoryStatus: string + fromOwnerCode: string + fromContainerNumber: string + fromLocationCode: string + fromLocationGroupCode: string + fromAreaCode: string + toOwnerCode: string + toContainerNumber: string + toLocationCode: string + toLocationGroupCode: string + toAreaCode: string + singlePrice: number + amount: number + number: string + itemCode: string + remark: string + createTime: Date + creator: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + code: string + interfaceType: string + jobDetailId: string + fromPackingNumber: string + toPackingNumber: string + toBatch: string +} + +// 查询客户收货记录子列表 +export const getCustomerreceiptRecordDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/customerreceipt-record-detail/senior', data }) + } else { + return await request.get({ url: `/wms/customerreceipt-record-detail/page`, params }) + } +} + +// 查询客户收货记录子详情 +export const getCustomerreceiptRecordDetail = async (id: number) => { + return await request.get({ url: `/wms/customerreceipt-record-detail/get?id=` + id }) +} + +// 新增客户收货记录子 +export const createCustomerreceiptRecordDetail = async (data: CustomerreceiptRecordDetailVO) => { + return await request.post({ url: `/wms/customerreceipt-record-detail/create`, data }) +} + +// 修改客户收货记录子 +export const updateCustomerreceiptRecordDetail = async (data: CustomerreceiptRecordDetailVO) => { + return await request.put({ url: `/wms/customerreceipt-record-detail/update`, data }) +} + +// 删除客户收货记录子 +export const deleteCustomerreceiptRecordDetail = async (id: number) => { + return await request.delete({ url: `/wms/customerreceipt-record-detail/delete?id=` + id }) +} + +// 导出客户收货记录子 Excel +export const exportCustomerreceiptRecordDetail = async (params) => { + return await request.download({ url: `/wms/customerreceipt-record-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/customerreceipt-record-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/customerreceiptRecordMain/index.ts b/src/api/wms/customerreceiptRecordMain/index.ts new file mode 100644 index 0000000..73e8e34 --- /dev/null +++ b/src/api/wms/customerreceiptRecordMain/index.ts @@ -0,0 +1,79 @@ +import request from '@/config/axios' + +export interface CustomerreceiptRecordMainVO { + requestNumber: string + deliverRecordNumber: string + deliverPlanNumber: string + customerCode: string + customerDockCode: string + carrierCode: string + transferMode: string + vehiclePlateNumber: string + fromWarehouseCode: string + toWarehouseCode: string + outTransactionType: string + inTransactionType: string + executeTime: Date + activeDate: Date + requestTime: Date + dueTime: Date + departmentCode: string + interfaceType: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + code: string + fromAreaTypes: string + toAreaTypes: string + fromAreaCodes: string + toAreaCodes: string + available: string +} + +// 查询客户收货记录主列表 +export const getCustomerreceiptRecordMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/customerreceipt-record-main/senior', data }) + } else { + return await request.get({ url: `/wms/customerreceipt-record-main/page`, params }) + } +} + +// 查询客户收货记录主详情 +export const getCustomerreceiptRecordMain = async (id: number) => { + return await request.get({ url: `/wms/customerreceipt-record-main/get?id=` + id }) +} + +// 新增客户收货记录主 +export const createCustomerreceiptRecordMain = async (data: CustomerreceiptRecordMainVO) => { + return await request.post({ url: `/wms/customerreceipt-record-main/create`, data }) +} + +// 修改客户收货记录主 +export const updateCustomerreceiptRecordMain = async (data: CustomerreceiptRecordMainVO) => { + return await request.put({ url: `/wms/customerreceipt-record-main/update`, data }) +} + +// 删除客户收货记录主 +export const deleteCustomerreceiptRecordMain = async (id: number) => { + return await request.delete({ url: `/wms/customerreceipt-record-main/delete?id=` + id }) +} + +// 导出客户收货记录主 Excel +export const exportCustomerreceiptRecordMain = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/customerreceipt-record-main/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/customerreceipt-record-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/customerreceipt-record-main/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/customerreceiptRequestDetail/index.ts b/src/api/wms/customerreceiptRequestDetail/index.ts new file mode 100644 index 0000000..f370f62 --- /dev/null +++ b/src/api/wms/customerreceiptRequestDetail/index.ts @@ -0,0 +1,68 @@ +import request from '@/config/axios' + +export interface CustomerreceiptRequestDetailVO { + soNumber: string + soLine: string + packingNumber: string + containerNumber: string + batch: string + inventoryStatus: string + fromLocationCode: string + toLocationCode: string + number: string + itemCode: string + remark: string + createTime: Date + creator: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + updateTime: Date + updater: string + fromOwnerCode: string + toOwnerCode: string +} + +// 查询客户收货申请子列表 +export const getCustomerreceiptRequestDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/customerreceipt-request-detail/senior', data }) + } else { + return await request.get({ url: `/wms/customerreceipt-request-detail/page`, params }) + } +} + +// 查询客户收货申请子详情 +export const getCustomerreceiptRequestDetail = async (id: number) => { + return await request.get({ url: `/wms/customerreceipt-request-detail/get?id=` + id }) +} + +// 新增客户收货申请子 +export const createCustomerreceiptRequestDetail = async (data: CustomerreceiptRequestDetailVO) => { + return await request.post({ url: `/wms/customerreceipt-request-detail/create`, data }) +} + +// 修改客户收货申请子 +export const updateCustomerreceiptRequestDetail = async (data: CustomerreceiptRequestDetailVO) => { + return await request.put({ url: `/wms/customerreceipt-request-detail/update`, data }) +} + +// 删除客户收货申请子 +export const deleteCustomerreceiptRequestDetail = async (id: number) => { + return await request.delete({ url: `/wms/customerreceipt-request-detail/delete?id=` + id }) +} + +// 导出客户收货申请子 Excel +export const exportCustomerreceiptRequestDetail = async (params) => { + return await request.download({ url: `/wms/customerreceipt-request-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/customerreceipt-request-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/customerreceiptRequestMain/index.ts b/src/api/wms/customerreceiptRequestMain/index.ts new file mode 100644 index 0000000..a933b87 --- /dev/null +++ b/src/api/wms/customerreceiptRequestMain/index.ts @@ -0,0 +1,103 @@ +import request from '@/config/axios' + +export interface CustomerreceiptRequestMainVO { + customerreceiptRequestNumber: string + customerreceiptPlanNumber: string + customerCode: string + customerDockCode: string + carrierCode: string + transferMode: string + vehiclePlateNumber: string + fromWarehouseCode: string + toWarehouseCode: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + requestTime: Date + dueTime: Date + departmentCode: string + status: string + updateTime: Date + updater: string + fromAreaTypes: string + toAreaTypes: string + fromAreaCodes: string + toAreaCodes: string + autoCommit: string + autoAgree: string + autoExecute: string + directCreateRecord: string +} + +// 查询客户收货申请主列表 +export const getCustomerreceiptRequestMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/customerreceipt-request-main/senior', data }) + } else { + return await request.get({ url: `/wms/customerreceipt-request-main/page`, params }) + } +} + +// 查询客户收货申请主详情 +export const getCustomerreceiptRequestMain = async (id: number) => { + return await request.get({ url: `/wms/customerreceipt-request-main/get?id=` + id }) +} + +// 新增客户收货申请主 +export const createCustomerreceiptRequestMain = async (data: CustomerreceiptRequestMainVO) => { + return await request.post({ url: `/wms/customerreceipt-request-main/create`, data }) +} + +// 修改客户收货申请主 +export const updateCustomerreceiptRequestMain = async (data: CustomerreceiptRequestMainVO) => { + return await request.put({ url: `/wms/customerreceipt-request-main/update`, data }) +} + +// 删除客户收货申请主 +export const deleteCustomerreceiptRequestMain = async (id: number) => { + return await request.delete({ url: `/wms/customerreceipt-request-main/delete?id=` + id }) +} + +// 导出客户收货申请主 Excel +export const exportCustomerreceiptRequestMain = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/customerreceipt-request-main/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/customerreceipt-request-main/export-excel`, params }) + } +} + +// 关闭 +export const close = (id) => { + return request.put({ url: '/wms/customerreceipt-request-main/close?id=' + id }) +} + +// 重新添加 +export const reAdd = (id) => { + return request.put({ url: '/wms/customerreceipt-request-main/reAdd?id=' + id }) +} + +// 提交审批 +export const submit = (id) => { + return request.put({ url: '/wms/customerreceipt-request-main/submit?id=' + id }) +} + +// 驳回 +export const refused = (id) => { + return request.put({ url: '/wms/customerreceipt-request-main/refused?id=' + id }) +} + +// 审批通过 +export const agree = (id) => { + return request.put({ url: '/wms/customerreceipt-request-main/agree?id=' + id }) +} + +// 处理 +export const handle = (id) => { + return request.put({ url: '/wms/customerreceipt-request-main/handle?id=' + id }) +} \ No newline at end of file diff --git a/src/api/wms/customerreturnJobDetail/index.ts b/src/api/wms/customerreturnJobDetail/index.ts new file mode 100644 index 0000000..526c63a --- /dev/null +++ b/src/api/wms/customerreturnJobDetail/index.ts @@ -0,0 +1,65 @@ +import request from '@/config/axios' + +export interface CustomerreturnJobDetailVO { + soNumber: string + soLine: string + packingNumber: string + batch: string + inventoryStatus: string + ownerCode: string + containerNumber: string + fromLocationCode: string + toLocationCode: string + itemCode: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + number: string + remark: string + createtime: Date + creator: string +} + +// 查询客户退货任务子列表 +export const getCustomerreturnJobDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/customerreturn-job-detail/senior', data }) + } else { + return await request.get({ url: `/wms/customerreturn-job-detail/page`, params }) + } +} + +// 查询客户退货任务子详情 +export const getCustomerreturnJobDetail = async (id: number) => { + return await request.get({ url: `/wms/customerreturn-job-detail/get?id=` + id }) +} + +// 新增客户退货任务子 +export const createCustomerreturnJobDetail = async (data: CustomerreturnJobDetailVO) => { + return await request.post({ url: `/wms/customerreturn-job-detail/create`, data }) +} + +// 修改客户退货任务子 +export const updateCustomerreturnJobDetail = async (data: CustomerreturnJobDetailVO) => { + return await request.put({ url: `/wms/customerreturn-job-detail/update`, data }) +} + +// 删除客户退货任务子 +export const deleteCustomerreturnJobDetail = async (id: number) => { + return await request.delete({ url: `/wms/customerreturn-job-detail/delete?id=` + id }) +} + +// 导出客户退货任务子 Excel +export const exportCustomerreturnJobDetail = async (params) => { + return await request.download({ url: `/wms/customerreturn-job-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/customerreturn-job-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/customerreturnJobMain/index.ts b/src/api/wms/customerreturnJobMain/index.ts new file mode 100644 index 0000000..cc2ca4f --- /dev/null +++ b/src/api/wms/customerreturnJobMain/index.ts @@ -0,0 +1,115 @@ +import request from '@/config/axios' + +export interface CustomerreturnJobMainVO { + requestNumber: string + deliverRecordNumber: string + deliverPlanNumber: string + customerCode: string + customerDockCode: string + receiptDock: string + carrierCode: string + transferMode: string + vehiclePlateNumber: string + fromWarehouseCode: string + toWarehouseCode: string + requestTime: Date + requestDueTime: Date + status: string + expiredTime: Date + updateTime: Date + updater: string + jobStageStatus: string + priority: number + priorityIncrement: number + departmentCode: string + acceptUserId: string + acceptTime: Date + completeUserId: string + completeTime: Date + fromAreaTypes: string + toAreaTypes: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + fromAreaCodes: string + toAreaCodes: string + toDockCode: string + autoComplete: string + allowModifyLocation: string + allowModifyQty: string + allowBiggerQty: string + allowSmallerQty: string + allowModifyInventoryStatus: string + allowContinuousScanning: string + allowPartialComplete: string + allowModifyBatch: string + allowModifyPackingNumber: string +} + +// 查询客户退货任务主列表 +export const getCustomerreturnJobMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/customerreturn-job-main/senior', data }) + } else { + return await request.get({ url: `/wms/customerreturn-job-main/page`, params }) + } +} + +// 查询客户退货任务主详情 +export const getCustomerreturnJobMain = async (id: number) => { + return await request.get({ url: `/wms/customerreturn-job-main/get?id=` + id }) +} + +// 新增客户退货任务主 +export const createCustomerreturnJobMain = async (data: CustomerreturnJobMainVO) => { + return await request.post({ url: `/wms/customerreturn-job-main/create`, data }) +} + +// 修改客户退货任务主 +export const updateCustomerreturnJobMain = async (data: CustomerreturnJobMainVO) => { + return await request.put({ url: `/wms/customerreturn-job-main/update`, data }) +} + +// 删除客户退货任务主 +export const deleteCustomerreturnJobMain = async (id: number) => { + return await request.delete({ url: `/wms/customerreturn-job-main/delete?id=` + id }) +} + +// 导出客户退货任务主 Excel +export const exportCustomerreturnJobMain = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/customerreturn-job-main/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/customerreturn-job-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/customerreturn-job-main/get-import-template' }) +} + +// 承接客户退货任务主 Excel +export const acceptCustomerreturnJobMain = async (id) => { + return await request.put({ url: `/wms/customerreturn-job-main/accept?id=` + id }) +} + +// 取消承接客户退货任务主 Excel +export const abandonCustomerreturnJobMain = async (id) => { + return await request.put({ url: `/wms/customerreturn-job-main/abandon?id=` + id }) +} + +// 关闭客户退货任务主 Excel +export const closeCustomerreturnJobMain = async (id) => { + return await request.put({ url: `/wms/customerreturn-job-main/close?id=` + id }) +} + +// 执行客户退货任务主 +export const executeCustomerreturnJobMain = async (data: CustomerreturnJobMainVO) => { + return await request.put({ url: `/wms/customerreturn-job-main/execute`, data }) +} \ No newline at end of file diff --git a/src/api/wms/customerreturnRecordDetail/index.ts b/src/api/wms/customerreturnRecordDetail/index.ts new file mode 100644 index 0000000..e139bd6 --- /dev/null +++ b/src/api/wms/customerreturnRecordDetail/index.ts @@ -0,0 +1,78 @@ +import request from '@/config/axios' + +export interface CustomerreturnRecordDetailVO { + soNumber: string + soLine: string + fromBatch: string + inventoryStatus: string + fromOwnerCode: string + fromContainerNumber: string + fromLocationCode: string + fromLocationGroupCode: string + fromAreaCode: string + toOwnerCode: string + toContainerNumber: string + toLocationCode: string + toLocationGroupCode: string + toAreaCode: string + singlePrice: number + amount: number + number: string + itemCode: string + remark: string + createTime: Date + creator: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + code: string + interfaceType: string + jobDetailId: string + fromPackingNumber: string + toPackingNumber: string + toBatch: string +} + +// 查询客户退货记录子列表 +export const getCustomerreturnRecordDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/customerreturn-record-detail/senior', data }) + } else { + return await request.get({ url: `/wms/customerreturn-record-detail/page`, params }) + } +} + +// 查询客户退货记录子详情 +export const getCustomerreturnRecordDetail = async (id: number) => { + return await request.get({ url: `/wms/customerreturn-record-detail/get?id=` + id }) +} + +// 新增客户退货记录子 +export const createCustomerreturnRecordDetail = async (data: CustomerreturnRecordDetailVO) => { + return await request.post({ url: `/wms/customerreturn-record-detail/create`, data }) +} + +// 修改客户退货记录子 +export const updateCustomerreturnRecordDetail = async (data: CustomerreturnRecordDetailVO) => { + return await request.put({ url: `/wms/customerreturn-record-detail/update`, data }) +} + +// 删除客户退货记录子 +export const deleteCustomerreturnRecordDetail = async (id: number) => { + return await request.delete({ url: `/wms/customerreturn-record-detail/delete?id=` + id }) +} + +// 导出客户退货记录子 Excel +export const exportCustomerreturnRecordDetail = async (params) => { + return await request.download({ url: `/wms/customerreturn-record-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/customerreturn-record-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/customerreturnRecordMain/index.ts b/src/api/wms/customerreturnRecordMain/index.ts new file mode 100644 index 0000000..4da1116 --- /dev/null +++ b/src/api/wms/customerreturnRecordMain/index.ts @@ -0,0 +1,91 @@ +import request from '@/config/axios' + +export interface CustomerreturnRecordMainVO { + requestNumber: string + jobNumber: string + deliverRecordNumber: string + deliverPlanNumber: string + customerCode: string + customerDockCode: string + carrierCode: string + transferMode: string + vehiclePlateNumber: string + fromWarehouseCode: string + toWarehouseCode: string + outTransactionType: string + inTransactionType: string + executeTime: Date + activeDate: Date + requestTime: Date + dueTime: Date + departmentCode: string + interfaceType: string + number: string + businessType: string + remark: string + createTime: Date + creatorId: string + code: string + fromAreaTypes: string + toAreaTypes: string + toAreaCodes: string + toDockCode: string + available: string + fromAreaCodes: string +} + +// 查询客户退货记录主列表 +export const getCustomerreturnRecordMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/customerreturn-record-main/senior', data }) + } else { + return await request.get({ url: `/wms/customerreturn-record-main/page`, params }) + } +} + +// 查询客户退货记录主详情 +export const getCustomerreturnRecordMain = async (id: number) => { + return await request.get({ url: `/wms/customerreturn-record-main/get?id=` + id }) +} + +// 新增客户退货记录主 +export const createCustomerreturnRecordMain = async (data: CustomerreturnRecordMainVO) => { + return await request.post({ url: `/wms/customerreturn-record-main/create`, data }) +} + +// 修改客户退货记录主 +export const updateCustomerreturnRecordMain = async (data: CustomerreturnRecordMainVO) => { + return await request.put({ url: `/wms/customerreturn-record-main/update`, data }) +} + +// 删除客户退货记录主 +export const deleteCustomerreturnRecordMain = async (id: number) => { + return await request.delete({ url: `/wms/customerreturn-record-main/delete?id=` + id }) +} + +// 导出客户退货记录主 Excel +export const exportCustomerreturnRecordMain = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/customerreturn-record-main/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/customerreturn-record-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/customerreturn-record-main/get-import-template' }) +} + +// 接收隔离收货 +export const receive = (id) => { + return request.put({ url: '/wms/customerreturn-record-main/receive?id=' + id }) +} + +// 拒收隔离收货 +export const refuse = (id) => { + return request.put({ url: '/wms/customerreturn-record-main/refuse?id=' + id }) +} \ No newline at end of file diff --git a/src/api/wms/customerreturnRequestDetail/index.ts b/src/api/wms/customerreturnRequestDetail/index.ts new file mode 100644 index 0000000..28f2b02 --- /dev/null +++ b/src/api/wms/customerreturnRequestDetail/index.ts @@ -0,0 +1,67 @@ +import request from '@/config/axios' + +export interface CustomerreturnRequestDetailVO { + soNumber: string + soLine: string + packingNumber: string + containerNumber: string + batch: string + inventoryStatus: string + fromOwnerCode: string + fromLocationCode: string + number: string + itemCode: string + remark: string + createTime: Date + creator: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + updateTime: Date + updater: string + toOwnerCode: string +} + +// 查询客户退货申请子列表 +export const getCustomerreturnRequestDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/customerreturn-request-detail/senior', data }) + } else { + return await request.get({ url: `/wms/customerreturn-request-detail/page`, params }) + } +} + +// 查询客户退货申请子详情 +export const getCustomerreturnRequestDetail = async (id: number) => { + return await request.get({ url: `/wms/customerreturn-request-detail/get?id=` + id }) +} + +// 新增客户退货申请子 +export const createCustomerreturnRequestDetail = async (data: CustomerreturnRequestDetailVO) => { + return await request.post({ url: `/wms/customerreturn-request-detail/create`, data }) +} + +// 修改客户退货申请子 +export const updateCustomerreturnRequestDetail = async (data: CustomerreturnRequestDetailVO) => { + return await request.put({ url: `/wms/customerreturn-request-detail/update`, data }) +} + +// 删除客户退货申请子 +export const deleteCustomerreturnRequestDetail = async (id: number) => { + return await request.delete({ url: `/wms/customerreturn-request-detail/delete?id=` + id }) +} + +// 导出客户退货申请子 Excel +export const exportCustomerreturnRequestDetail = async (params) => { + return await request.download({ url: `/wms/customerreturn-request-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/customerreturn-request-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/customerreturnRequestMain/index.ts b/src/api/wms/customerreturnRequestMain/index.ts new file mode 100644 index 0000000..873bb25 --- /dev/null +++ b/src/api/wms/customerreturnRequestMain/index.ts @@ -0,0 +1,125 @@ +import request from '@/config/axios' + +export interface CustomerreturnRequestMainVO { + requestNumber: string + deliverRecordNumber: string + deliverPlanNumber: string + customerCode: string + customerDockCode: string + carrierCode: string + transferMode: string + vehiclePlateNumber: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + requestTime: Date + dueTime: Date + departmentCode: string + status: string + updateTime: Date + updater: string + fromWarehouseCode: string + fromAreaTypes: string + fromAreaCodes: string + toWarehouseCode: string + toAreaTypes: string + toAreaCodes: string + toDockCode: string + autoCommit: string + autoAgree: string + autoExecute: string + directCreateRecord: string +} + +// 查询客户退货申请主列表 +export const getCustomerreturnRequestMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/customerreturn-request-main/senior', data }) + } else { + return await request.get({ url: `/wms/customerreturn-request-main/page`, params }) + } +} + +// 查询客户退货申请主详情 +export const getCustomerreturnRequestMain = async (id: number) => { + return await request.get({ url: `/wms/customerreturn-request-main/get?id=` + id }) +} + +// 新增客户退货申请主 +export const createCustomerreturnRequestMain = async (data: CustomerreturnRequestMainVO) => { + return await request.post({ url: `/wms/customerreturn-request-main/create`, data }) +} + +// 修改客户退货申请主 +export const updateCustomerreturnRequestMain = async (data: CustomerreturnRequestMainVO) => { + return await request.put({ url: `/wms/customerreturn-request-main/update`, data }) +} + +// 删除客户退货申请主 +export const deleteCustomerreturnRequestMain = async (id: number) => { + return await request.delete({ url: `/wms/customerreturn-request-main/delete?id=` + id }) +} + +// 导出客户退货申请主 Excel +export const exportCustomerreturnRequestMain = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/customerreturn-request-main/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/customerreturn-request-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/customerreturn-request-main/get-import-template' }) +} + +// 关闭客户退货申请主 Excel +export const close = async (id) => { + return await request.put({ url: `/wms/customerreturn-request-main/close?id=` + id }) +} + +// 重新添加客户退货申请主 Excel +export const reAdd = async (id) => { + return await request.put({ url: `/wms/customerreturn-request-main/reAdd?id=` + id }) +} + +// 提交客户退货申请主 Excel +export const submit = async (id) => { + return await request.put({ url: `/wms/customerreturn-request-main/submit?id=` + id }) +} + +// 审批通过客户退货申请主 Excel +export const agree = async (id) => { + return await request.put({ url: `/wms/customerreturn-request-main/agree?id=` + id }) +} + +// 审批驳回客户退货申请主 Excel +export const refused = async (id) => { + return await request.put({ url: `/wms/customerreturn-request-main/refused?id=` + id }) +} + +// 处理驳回客户退货申请主 Excel +export const handle = async (id) => { + return await request.put({ url: `/wms/customerreturn-request-main/handle?id=` + id }) +} + +export const pageItemCodeToBalance = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/customerreturn-request-main/pageItemCodeToBalanceSenior', data }) + } else { + return request.get({ url: `/wms/customerreturn-request-main/pageItemCodeToBalance`, params }) + } +} + +// 生成标签 +export const genLabel = async (data) => { + return await request.post({ url: `/wms/customerreturn-request-main/genLabel`, data }) +} diff --git a/src/api/wms/customersettleRecordDetail/index.ts b/src/api/wms/customersettleRecordDetail/index.ts new file mode 100644 index 0000000..3932fed --- /dev/null +++ b/src/api/wms/customersettleRecordDetail/index.ts @@ -0,0 +1,71 @@ +import request from '@/config/axios' + +export interface CustomersettleRecordDetailVO { + soNumber: string + soLine: string + ownerCode: string + packingNumber: string + batch: string + inventoryStatus: string + fromLocationCode: string + fromLocationGroupCode: string + fromAreaCode: string + singlePrice: number + amount: number + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + interfaceType: string + code: string + number: string + itemCode: string + remark: string + createTime: Date + creator: string + siteId: string + jobDetailId: string +} + +// 查询客户结算记录子列表 +export const getCustomersettleRecordDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/customersettle-record-detail/senior', data }) + } else { + return await request.get({ url: `/wms/customersettle-record-detail/page`, params }) + } +} + +// 查询客户结算记录子详情 +export const getCustomersettleRecordDetail = async (id: number) => { + return await request.get({ url: `/wms/customersettle-record-detail/get?id=` + id }) +} + +// 新增客户结算记录子 +export const createCustomersettleRecordDetail = async (data: CustomersettleRecordDetailVO) => { + return await request.post({ url: `/wms/customersettle-record-detail/create`, data }) +} + +// 修改客户结算记录子 +export const updateCustomersettleRecordDetail = async (data: CustomersettleRecordDetailVO) => { + return await request.put({ url: `/wms/customersettle-record-detail/update`, data }) +} + +// 删除客户结算记录子 +export const deleteCustomersettleRecordDetail = async (id: number) => { + return await request.delete({ url: `/wms/customersettle-record-detail/delete?id=` + id }) +} + +// 导出客户结算记录子 Excel +export const exportCustomersettleRecordDetail = async (params) => { + return await request.download({ url: `/wms/customersettle-record-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/customersettle-record-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/customersettleRecordMain/index.ts b/src/api/wms/customersettleRecordMain/index.ts new file mode 100644 index 0000000..ac7a404 --- /dev/null +++ b/src/api/wms/customersettleRecordMain/index.ts @@ -0,0 +1,73 @@ +import request from '@/config/axios' + +export interface CustomersettleRecordMainVO { + requestNumber: string + deliverRecordNumber: string + deliverPlanNumber: string + customerCode: string + outTransactionType: string + inTransactionYpe: string + executeTime: Date + activeDate: Date + requestTime: Date + dueTime: Date + departmentCode: string + interfaceType: string + code: string + number: string + businessType: string + createTime: Date + creator: string + remark: string + fromWarehouseCode: string + fromAreaTypes: string + fromAreaCodes: string + available: string +} + +// 查询客户结算记录主列表 +export const getCustomersettleRecordMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/customersettle-record-main/senior', data }) + } else { + return await request.get({ url: `/wms/customersettle-record-main/page`, params }) + } +} + +// 查询客户结算记录主详情 +export const getCustomersettleRecordMain = async (id: number) => { + return await request.get({ url: `/wms/customersettle-record-main/get?id=` + id }) +} + +// 新增客户结算记录主 +export const createCustomersettleRecordMain = async (data: CustomersettleRecordMainVO) => { + return await request.post({ url: `/wms/customersettle-record-main/create`, data }) +} + +// 修改客户结算记录主 +export const updateCustomersettleRecordMain = async (data: CustomersettleRecordMainVO) => { + return await request.put({ url: `/wms/customersettle-record-main/update`, data }) +} + +// 删除客户结算记录主 +export const deleteCustomersettleRecordMain = async (id: number) => { + return await request.delete({ url: `/wms/customersettle-record-main/delete?id=` + id }) +} + +// 导出客户结算记录主 Excel +export const exportCustomersettleRecordMain = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/customersettle-record-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/customersettle-record-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/customersettle-record-main/get-import-template' }) +} diff --git a/src/api/wms/customersettleRequestDetail/index.ts b/src/api/wms/customersettleRequestDetail/index.ts new file mode 100644 index 0000000..9877bd9 --- /dev/null +++ b/src/api/wms/customersettleRequestDetail/index.ts @@ -0,0 +1,65 @@ +import request from '@/config/axios' + +export interface CustomersettleRequestDetailVO { + soNumber: string + soLine: string + fromOwnerCode: string + packingNumber: string + batch: string + inventoryStatus: string + fromLocationCode: string + number: string + itemCode: string + remark: string + createTime: Date + creator: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + updateTime: Date + updater: string +} + +// 查询客户结算申请子列表 +export const getCustomersettleRequestDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/customersettle-request-detail/senior', data }) + } else { + return await request.get({ url: `/wms/customersettle-request-detail/page`, params }) + } +} + +// 查询客户结算申请子详情 +export const getCustomersettleRequestDetail = async (id: number) => { + return await request.get({ url: `/wms/customersettle-request-detail/get?id=` + id }) +} + +// 新增客户结算申请子 +export const createCustomersettleRequestDetail = async (data: CustomersettleRequestDetailVO) => { + return await request.post({ url: `/wms/customersettle-request-detail/create`, data }) +} + +// 修改客户结算申请子 +export const updateCustomersettleRequestDetail = async (data: CustomersettleRequestDetailVO) => { + return await request.put({ url: `/wms/customersettle-request-detail/update`, data }) +} + +// 删除客户结算申请子 +export const deleteCustomersettleRequestDetail = async (id: number) => { + return await request.delete({ url: `/wms/customersettle-request-detail/delete?id=` + id }) +} + +// 导出客户结算申请子 Excel +export const exportCustomersettleRequestDetail = async (params) => { + return await request.download({ url: `/wms/customersettle-request-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/customersettle-request-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/customersettleRequestMain/index.ts b/src/api/wms/customersettleRequestMain/index.ts new file mode 100644 index 0000000..a291458 --- /dev/null +++ b/src/api/wms/customersettleRequestMain/index.ts @@ -0,0 +1,102 @@ +import request from '@/config/axios' + +export interface CustomersettleRequestMainVO { + deliverRecordNumber: string + deliverPlanNumber: string + customerCode: string + fromWarehouseCode: string + fromAreaTypes: string + fromAreaCodes: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + requestTime: Date + dueTime: Date + departmentCode: string + status: string + updateTime: Date + updater: string + autoCommit: string + autoAgree: string + autoExecute: string + directCreateRecord: string +} + +// 查询客户结算申请主列表 +export const getCustomersettleRequestMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/customersettle-request-main/senior', data }) + } else { + return await request.get({ url: `/wms/customersettle-request-main/page`, params }) + } +} + +// 查询客户结算申请主详情 +export const getCustomersettleRequestMain = async (id: number) => { + return await request.get({ url: `/wms/customersettle-request-main/get?id=` + id }) +} + +// 新增客户结算申请主 +export const createCustomersettleRequestMain = async (data: CustomersettleRequestMainVO) => { + return await request.post({ url: `/wms/customersettle-request-main/create`, data }) +} + +// 修改客户结算申请主 +export const updateCustomersettleRequestMain = async (data: CustomersettleRequestMainVO) => { + return await request.put({ url: `/wms/customersettle-request-main/update`, data }) +} + +// 删除客户结算申请主 +export const deleteCustomersettleRequestMain = async (id: number) => { + return await request.delete({ url: `/wms/customersettle-request-main/delete?id=` + id }) +} + +// 导出客户结算申请主 Excel +export const exportCustomersettleRequestMain = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/customersettle-request-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/customersettle-request-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/customersettle-request-main/get-import-template' }) +} + +// 关闭 +export const close = (id) => { + return request.put({ url: '/wms/customersettle-request-main/close?id=' + id }) +} + +// 重新添加 +export const reAdd = (id) => { + return request.put({ url: '/wms/customersettle-request-main/reAdd?id=' + id }) +} + +// 提交审批 +export const submit = (id) => { + return request.put({ url: '/wms/customersettle-request-main/submit?id=' + id }) +} + +// 驳回 +export const refused = (id) => { + return request.put({ url: '/wms/customersettle-request-main/refused?id=' + id }) +} + +// 审批通过 +export const agree = (id) => { + return request.put({ url: '/wms/customersettle-request-main/agree?id=' + id }) +} + +// 处理 +export const handle = (id) => { + return request.put({ url: '/wms/customersettle-request-main/handle?id=' + id }) +} \ No newline at end of file diff --git a/src/api/wms/deliverJobDetail/index.ts b/src/api/wms/deliverJobDetail/index.ts new file mode 100644 index 0000000..9e54e57 --- /dev/null +++ b/src/api/wms/deliverJobDetail/index.ts @@ -0,0 +1,65 @@ +import request from '@/config/axios' + +export interface DeliverJobDetailVO { + soNumber: string + soLine: string + packingNumber: string + batch: string + inventoryStatus: string + ownerCode: string + containerNumber: string + fromLocationCode: string + toLocationCode: string + itemCode: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + number: string + remark: string + createTime: Date + creator: string +} + +// 查询发货任务子列表 +export const getDeliverJobDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/deliver-job-detail/senior', data }) + } else { + return await request.get({ url: `/wms/deliver-job-detail/page`, params }) + } +} + +// 查询发货任务子详情 +export const getDeliverJobDetail = async (id: number) => { + return await request.get({ url: `/wms/deliver-job-detail/get?id=` + id }) +} + +// 新增发货任务子 +export const createDeliverJobDetail = async (data: DeliverJobDetailVO) => { + return await request.post({ url: `/wms/deliver-job-detail/create`, data }) +} + +// 修改发货任务子 +export const updateDeliverJobDetail = async (data: DeliverJobDetailVO) => { + return await request.put({ url: `/wms/deliver-job-detail/update`, data }) +} + +// 删除发货任务子 +export const deleteDeliverJobDetail = async (id: number) => { + return await request.delete({ url: `/wms/deliver-job-detail/delete?id=` + id }) +} + +// 导出发货任务子 Excel +export const exportDeliverJobDetail = async (params) => { + return await request.download({ url: `/wms/deliver-job-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/deliver-job-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/deliverJobMain/index.ts b/src/api/wms/deliverJobMain/index.ts new file mode 100644 index 0000000..5be9037 --- /dev/null +++ b/src/api/wms/deliverJobMain/index.ts @@ -0,0 +1,115 @@ +import request from '@/config/axios' + +export interface DeliverJobMainVO { + requestNumber: string + deliverPlanNumber: string + customerDeliverNumber: string + customerCode: string + customerDockCode: string + deliverDock: string + carrierCode: string + transferMode: string + vehiclePlateNumber: string + fromWarehouseCode: string + toWarehouseCode: string + requestTime: Date + requestDueTime: Date + status: string + expiredTime: Date + updateTime: Date + updater: string + jobStageStatus: string + priority: number + priorityincrement: number + departmentCode: string + acceptUserId: string + acceptTime: Date + completeUserId: string + completeTime: Date + fromAreaTypes: string + toAreaTypes: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + ruleUserId: number + fromAreaCodes: string + toAreaCodes: string + fromDockCode: string + autoComplete: string + allowModifyLocation: string + allowModifyQty: string + allowBiggerQty: string + allowSmallerQty: string + allowModifyInventoryStatus: string + allowContinuousScanning: string + allowPartialComplete: string + allowModifyBatch: string + allowModifyPackingNumber: string +} + +// 查询发货任务主列表 +export const getDeliverJobMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/deliver-job-main/senior', data }) + } else { + return await request.get({ url: `/wms/deliver-job-main/page`, params }) + } +} + +// 查询发货任务主详情 +export const getDeliverJobMain = async (id: number) => { + return await request.get({ url: `/wms/deliver-job-main/get?id=` + id }) +} + +// 新增发货任务主 +export const createDeliverJobMain = async (data: DeliverJobMainVO) => { + return await request.post({ url: `/wms/deliver-job-main/create`, data }) +} + +// 修改发货任务主 +export const updateDeliverJobMain = async (data: DeliverJobMainVO) => { + return await request.put({ url: `/wms/deliver-job-main/update`, data }) +} + +// 删除发货任务主 +export const deleteDeliverJobMain = async (id: number) => { + return await request.delete({ url: `/wms/deliver-job-main/delete?id=` + id }) +} + +// 导出发货任务主 Excel +export const exportDeliverJobMain = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/deliver-job-main/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/deliver-job-main/export-excel`, params }) } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/deliver-job-main/get-import-template' }) +} + +// 承接发货任务 Excel +export const acceptDeliverJobMain = async (id) => { + return await request.put({ url: `/wms/deliver-job-main/accept?id=` + id }) +} + +// 取消承接发货任务 Excel +export const abandonDeliverJobMain = async (id) => { + return await request.put({ url: `/wms/deliver-job-main/abandon?id=` + id }) +} + +// 关闭发货任务主 Excel +export const closeDeliverJobMain = async (id) => { + return await request.put({ url: `/wms/deliver-job-main/close?id=` + id }) +} + +// 执行发货任务主 +export const executeDeliverJobMain = async (data: DeliverJobMainVO) => { + return await request.put({ url: `/wms/deliver-job-main/execute`, data }) +} \ No newline at end of file diff --git a/src/api/wms/deliverPlanDetail/index.ts b/src/api/wms/deliverPlanDetail/index.ts new file mode 100644 index 0000000..ea68874 --- /dev/null +++ b/src/api/wms/deliverPlanDetail/index.ts @@ -0,0 +1,64 @@ +import request from '@/config/axios' + +export interface DeliverPlanDetailVO { + soNumber: string + soLine: string + customerDockCode: string + project: string + number: string + itemCode: string + remark: string + createTime: Date + creator: string + planQty: number + uom: string + updateTime: Date + updater: string + available: string +} + +// 查询发货计划子列表 +export const selectDetailByMasterID = async (id: number) => { + return await request.get({ url: `/wms/deliver-plan-detail/detailList?id=` + id }) +} + +// 查询发货计划子列表 +export const getDeliverPlanDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/deliver-plan-detail/senior', data }) + } else { + return await request.get({ url: `/wms/deliver-plan-detail/page`, params }) + } +} + +// 查询发货计划子列表 +export const getDeliverPlanDetailPage1 = async (params) => { + return await request.get({ url: `/wms/deliver-plan-detail/page`, params }) +} + +// 查询发货计划子详情 +export const getDeliverPlanDetail = async (id: number) => { + return await request.get({ url: `/wms/deliver-plan-detail/get?id=` + id }) +} + +// 新增发货计划子 +export const createDeliverPlanDetail = async (data: DeliverPlanDetailVO) => { + return await request.post({ url: `/wms/deliver-plan-detail/create`, data }) +} + +// 修改发货计划子 +export const updateDeliverPlanDetail = async (data: DeliverPlanDetailVO) => { + return await request.put({ url: `/wms/deliver-plan-detail/update`, data }) +} + +// 删除发货计划子 +export const deleteDeliverPlanDetail = async (id: number) => { + return await request.delete({ url: `/wms/deliver-plan-detail/delete?id=` + id }) +} + +// 导出发货计划子 Excel +export const exportDeliverPlanDetail = async (params) => { + return await request.download({ url: `/wms/deliver-plan-detail/export-excel`, params }) +} diff --git a/src/api/wms/deliverPlanMain/index.ts b/src/api/wms/deliverPlanMain/index.ts new file mode 100644 index 0000000..47e9624 --- /dev/null +++ b/src/api/wms/deliverPlanMain/index.ts @@ -0,0 +1,124 @@ +import request from '@/config/axios' + +export interface DeliverPlanMainVO { + customerCode: string + planDate: Date + number: string + businessType: string + remark: string + createTime: Date + creator: string + beginTime: Date + endTime: Date + status: string + updateTime: Date + updater: string + available: string +} + +// 查询发货计划主列表 +export const getDeliverPlanMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/deliver-plan-main/senior', data }) + } else { + return await request.get({ url: `/wms/deliver-plan-main/page`, params }) + } +} + +// 查询发货计划主详情 +export const getDeliverPlanMain = async (id: number) => { + return await request.get({ url: `/wms/deliver-plan-main/get?id=` + id }) +} + +// 新增发货计划主 +export const createDeliverPlanMain = async (data: DeliverPlanMainVO) => { + return await request.post({ url: `/wms/deliver-plan-main/create`, data }) +} + +// 修改发货计划主 +export const updateDeliverPlanMain = async (data: DeliverPlanMainVO) => { + return await request.put({ url: `/wms/deliver-plan-main/update`, data }) +} + +// 删除发货计划主 +export const deleteDeliverPlanMain = async (id: number) => { + return await request.delete({ url: `/wms/deliver-plan-main/delete?id=` + id }) +} + +// 导出发货计划主 Excel +export const exportDeliverPlanMain = async (params) => { + params.businessType = 'Deliver' + if (params.isSearch) { + // const cmd = { + // 'column':'businessType', + // 'action':'==', + // 'value':'Deliver' + // } + // params.filters.push(cmd) + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/deliver-plan-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/deliver-plan-main/export-excel`, params }) + } +} + +// 导出发货计划主 Excela +export const exportZZBJDeliverPlanMain = async (params) => { + params.businessType = 'ZZBJDeliver' + if (params.isSearch) { + // const cmd = { + // 'column':'businessType', + // 'action':'==', + // 'value':'ZZBJDeliver' + // } + // params.filters.push(cmd) + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/deliver-plan-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/deliver-plan-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/deliver-plan-main/get-import-template' }) +} + +// 关闭 +export const close = (id) => { + return request.put({ url: '/wms/deliver-plan-main/close?id=' + id }) +} + +// 提交审批 +export const submit = (id) => { + return request.put({ url: '/wms/deliver-plan-main/submit?id=' + id }) +} + +// 打开 +export const open = (id) => { + return request.put({ url: '/wms/deliver-plan-main/open?id=' + id }) +} + +// 驳回 +export const reject = (id) => { + return request.put({ url: '/wms/deliver-plan-main/reject?id=' + id }) +} + +// 通过 +export const agree = (id) => { + return request.put({ url: '/wms/deliver-plan-main/agree?id=' + id }) +} + +// 发布 +export const publish = (id) => { + return request.put({ url: '/wms/deliver-plan-main/publish?id=' + id }) +} + +// 重置 +export const resetting = (id) => { + return request.put({ url: '/wms/deliver-plan-main/resetting?id=' + id }) +} diff --git a/src/api/wms/deliverRecordDetail/index.ts b/src/api/wms/deliverRecordDetail/index.ts new file mode 100644 index 0000000..293f1c0 --- /dev/null +++ b/src/api/wms/deliverRecordDetail/index.ts @@ -0,0 +1,90 @@ +import request from '@/config/axios' + +export interface DeliverRecordDetailVO { + soNumber: string + soLine: string + packingNumber: string + batch: string + inventoryStatus: string + fromOwnerCode: string + fromContainerNumber: string + fromLocationCode: string + fromLocationGroupCode: string + fromAreaCode: string + toOwnerCode: string + toContainerNumber: string + toLocationCode: string + toLocationGroupCode: string + toAreaCode: string + singlePrice: number + amount: number + number: string + itemCode: string + remark: string + createTime: Date + creator: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + code: string + interfaceType: string + jobDetailId: string +} +// 查询发货记录子列表 +export const getDeliverRecordDetailPageCustomerreturn = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/deliver-record-detail/seniorCustomerreturn', data }) + } else { + return await request.get({ url: `/wms/deliver-record-detail/pageCustomerreturn`, params }) + } +} +// 查询发货记录子列表 +export const getDeliverRecordDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/deliver-record-detail/senior', data }) + } else { + return await request.get({ url: `/wms/deliver-record-detail/page`, params }) + } +} + +// 查询发货记录子详情 +export const getDeliverRecordDetail = async (id: number) => { + return await request.get({ url: `/wms/deliver-record-detail/get?id=` + id }) +} + +// 新增发货记录子 +export const createDeliverRecordDetail = async (data: DeliverRecordDetailVO) => { + return await request.post({ url: `/wms/deliver-record-detail/create`, data }) +} + +// 修改发货记录子 +export const updateDeliverRecordDetail = async (data: DeliverRecordDetailVO) => { + return await request.put({ url: `/wms/deliver-record-detail/update`, data }) +} + +// 删除发货记录子 +export const deleteDeliverRecordDetail = async (id: number) => { + return await request.delete({ url: `/wms/deliver-record-detail/delete?id=` + id }) +} + +// 导出发货记录子 Excel +export const exportDeliverRecordDetail = async (params) => { + return await request.download({ url: `/wms/deliver-record-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/deliver-record-detail/get-import-template' }) +} + +// 查询发货记录子列表 +export const getDeliverRecordDetailListToRepeat = async (params) => { + return await request.get({ url: `/wms/deliver-record-detail/listToRepeatDeliverReceipt`, params }) +} \ No newline at end of file diff --git a/src/api/wms/deliverRecordMain/index.ts b/src/api/wms/deliverRecordMain/index.ts new file mode 100644 index 0000000..c7c01cb --- /dev/null +++ b/src/api/wms/deliverRecordMain/index.ts @@ -0,0 +1,82 @@ +import request from '@/config/axios' + +export interface DeliverRecordMainVO { + requestNumber: string + jobNumber: string + deliverPlanNumber: string + customerDeliverNumber: string + customerCode: string + customerDockCode: string + carrierCode: string + transferMode: string + vehiclePlateNumber: string + fromWarehouseCode: string + toWarehouseCode: string + outTransactionType: string + inTransactionType: string + executeTime: Date + activeDate: Date + requestTime: Date + dueTime: Date + departmentCode: string + interfaceType: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + code: string + fromAreaTypes: string + fromAreaCodes: string + toAreaTypes: string + toAreaCodes: string + fromDockCode: string + available: string +} + +// 查询发货记录主列表 +export const getDeliverRecordMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/deliver-record-main/senior', data }) + } else { + return await request.get({ url: `/wms/deliver-record-main/page`, params }) + } +} + +// 查询发货记录主详情 +export const getDeliverRecordMain = async (id: number) => { + return await request.get({ url: `/wms/deliver-record-main/get?id=` + id }) +} + +// 新增发货记录主 +export const createDeliverRecordMain = async (data: DeliverRecordMainVO) => { + return await request.post({ url: `/wms/deliver-record-main/create`, data }) +} + +// 修改发货记录主 +export const updateDeliverRecordMain = async (data: DeliverRecordMainVO) => { + return await request.put({ url: `/wms/deliver-record-main/update`, data }) +} + +// 删除发货记录主 +export const deleteDeliverRecordMain = async (id: number) => { + return await request.delete({ url: `/wms/deliver-record-main/delete?id=` + id }) +} + +// 导出发货记录主 Excel +export const exportDeliverRecordMain = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/deliver-record-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/deliver-record-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/deliver-record-main/get-import-template' }) +} diff --git a/src/api/wms/deliverRequestDetail/index.ts b/src/api/wms/deliverRequestDetail/index.ts new file mode 100644 index 0000000..2022ede --- /dev/null +++ b/src/api/wms/deliverRequestDetail/index.ts @@ -0,0 +1,67 @@ +import request from '@/config/axios' + +export interface DeliverRequestDetailVO { + soNumber: string + soLine: string + packingNumber: string + containerNumber: string + batch: string + inventoryStatus: string + toOwnerCode: string + toLocationCode: string + number: string + remark: string + createTime: Date + creator: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + updateTime: Date + updater: string + itemCode: string + fromOwnerCode: string +} + +// 查询发货申请子列表 +export const getDeliverRequestDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/deliver-request-detail/senior', data }) + } else { + return await request.get({ url: `/wms/deliver-request-detail/page`, params }) + } +} + +// 查询发货申请子详情 +export const getDeliverRequestDetail = async (id: number) => { + return await request.get({ url: `/wms/deliver-request-detail/get?id=` + id }) +} + +// 新增发货申请子 +export const createDeliverRequestDetail = async (data: DeliverRequestDetailVO) => { + return await request.post({ url: `/wms/deliver-request-detail/create`, data }) +} + +// 修改发货申请子 +export const updateDeliverRequestDetail = async (data: DeliverRequestDetailVO) => { + return await request.put({ url: `/wms/deliver-request-detail/update`, data }) +} + +// 删除发货申请子 +export const deleteDeliverRequestDetail = async (id: number) => { + return await request.delete({ url: `/wms/deliver-request-detail/delete?id=` + id }) +} + +// 导出发货申请子 Excel +export const exportDeliverRequestDetail = async (params) => { + return await request.download({ url: `/wms/deliver-request-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/deliver-request-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/deliverRequestMain/index.ts b/src/api/wms/deliverRequestMain/index.ts new file mode 100644 index 0000000..621e912 --- /dev/null +++ b/src/api/wms/deliverRequestMain/index.ts @@ -0,0 +1,122 @@ +import request from '@/config/axios' + +export interface DeliverRequestMainVO { + deliverPlanNumber: string + customerDeliverNumber: string + customerCode: string + customerDockCode: string + carrierCode: string + transferMode: string + vehiclePlateNumber: string + fromWarehouseCode: string + toWarehouseCode: string + fromAreaTypes: string + fromAreaCodes: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + requestTime: Date + dueTime: Date + departmentCode: string + status: string + updateTime: Date + updater: string + toAreaTypes: string + toAreaCodes: string + fromDockCode: string + autoCommit: string + autoAgree: string + autoExecute: string + directCreateRecord: string +} + +// 查询发货申请主列表 +export const getDeliverRequestMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/deliver-request-main/senior', data }) + } else { + return await request.get({ url: `/wms/deliver-request-main/page`, params }) + } +} + +// 查询发货申请主详情 +export const getDeliverRequestMain = async (id: number) => { + return await request.get({ url: `/wms/deliver-request-main/get?id=` + id }) +} + +// 新增发货申请主 +export const createDeliverRequestMain = async (data: DeliverRequestMainVO) => { + return await request.post({ url: `/wms/deliver-request-main/create`, data }) +} + +// 修改发货申请主 +export const updateDeliverRequestMain = async (data: DeliverRequestMainVO) => { + return await request.put({ url: `/wms/deliver-request-main/update`, data }) +} + +// 删除发货申请主 +export const deleteDeliverRequestMain = async (id: number) => { + return await request.delete({ url: `/wms/deliver-request-main/delete?id=` + id }) +} + +// 导出发货申请主 Excel +export const exportDeliverRequestMain = async (params) => { + params.businessType = 'Deliver' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/deliver-request-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/deliver-request-main/export-excel`, params }) + } +} + +// 导出发货申请主 Excel +export const exportZZBJDeliverRequestMain = async (params) => { + params.businessType = 'ZZBJDeliver' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/deliver-request-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/deliver-request-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/deliver-request-main/get-import-template' }) +} +// 关闭 +export const close = (id) => { + return request.put({ url: '/wms/deliver-request-main/close?id=' + id }) +} + +// 重新添加 +export const reAdd = (id) => { + return request.put({ url: '/wms/deliver-request-main/reAdd?id=' + id }) +} + +// 提交审批 +export const submit = (id) => { + return request.put({ url: '/wms/deliver-request-main/submit?id=' + id }) +} + +// 驳回 +export const refused = (id) => { + return request.put({ url: '/wms/deliver-request-main/refused?id=' + id }) +} + +// 审批通过 +export const agree = (id) => { + return request.put({ url: '/wms/deliver-request-main/agree?id=' + id }) +} + +// 处理 +export const handle = (id) => { + return request.put({ url: '/wms/deliver-request-main/handle?id=' + id }) +} diff --git a/src/api/wms/demandforecastingDetail/index.ts b/src/api/wms/demandforecastingDetail/index.ts new file mode 100644 index 0000000..753c999 --- /dev/null +++ b/src/api/wms/demandforecastingDetail/index.ts @@ -0,0 +1,127 @@ +import request from '@/config/axios' +import { isString } from '@/utils/is' +import dayjs from 'dayjs' + +export interface DemandforecastingDetailVO { + predictTimeType: string + predictTime: Date + number: string + itemCode: string + remark: string + createTime: Date + creator: string + planQty: number + uom: string + updateTime: Date + updater: string + available: string +} + +// 要货预测-列表和头部请求参数 +const getPageParams = (params)=>{ + // 到货日期 + if(params.dueDate&¶ms.dueDate.length>0){ + if(isString(params.dueDate[0])){ + params.startDate = params.dueDate[0] + }else{ + params.startDate = params.dueDate[0].format('YYYY-MM-DD') + } + + } + if(params.dueDate&¶ms.dueDate.length>1){ + if(isString(params.dueDate[1])){ + params.endDate = params.dueDate[1] + }else{ + params.endDate = params.dueDate[1].format('YYYY-MM-DD') + } + } + console.log(params.dueDate) + if (!params.dueDate || params.dueDate.length == 0) { + params.startDate = '' + params.endDate = '' + } + // params.dueDate = '' + + //计划员 + if(params.planerId&¶ms.planerId.length>0){ + params.planers = params.planerId.join(',') + } + params.planerId = '' + // 供应商代码 + if(params.supplierCode&¶ms.supplierCode.length>0){ + let keyValue = params.supplierCode.split(' ') + keyValue.forEach(item=>{item = item.trim()}) + params.supplierCodes = keyValue.join(',') + } + params.supplierCode = '' + + // 物料代码 + if(params.itemCode&¶ms.itemCode.length>0){ + let keyValue = params.itemCode.split(' ') + keyValue.forEach(item=>{item = item.trim()}) + params.itemCodes = keyValue.join(',') + } + params.itemCode = '' + + // 版本号 + if(params.version&¶ms.version.length>0){ + let keyValue = params.version.split(' ') + keyValue.forEach(item=>{item = item.trim()}) + params.versions = keyValue.join(',') + } + params.version = '' + return params +} + +// 查询要货预测子列表 +export const getDemandforecastingDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + if(params.flag){ + delete params.flag + } + const data = {...params} + return await request.post({ url: '/wms/demandforecasting-detail/senior', data }) + } else { + params = getPageParams(params) + return await request.get({ url: `/wms/demandforecasting-detail/page`, params }) + } +} + +// 查询要货预测子详情 +export const getDemandforecastingDetail = async (id: number) => { + return await request.get({ url: `/wms/demandforecasting-detail/get?id=` + id }) +} + +// 新增要货预测子 +export const createDemandforecastingDetail = async (data: DemandforecastingDetailVO) => { + return await request.post({ url: `/wms/demandforecasting-detail/create`, data }) +} + +// 修改要货预测子 +export const updateDemandforecastingDetail = async (data: DemandforecastingDetailVO) => { + return await request.put({ url: `/wms/demandforecasting-detail/update`, data }) +} + +// 删除要货预测子 +export const deleteDemandforecastingDetail = async (id: number) => { + return await request.delete({ url: `/wms/demandforecasting-detail/delete?id=` + id }) +} + +// 导出要货预测子 Excel +export const exportDemandforecastingDetail = async (params) => { + return await request.download({ url: `/wms/demandforecasting-detail/export-excel`, params }) +} + +// 查询要货预测主列表 +export const getPageTableHead = async (params) => { + params = getPageParams(params) + console.log('params',params) + return await request.get({ url: `/wms/demandforecasting-detail/queryPageTableHead`, params }) +} + + +// 查询版本号 +export const queryVersion = async (params) => { + return await request.get({ url: `/wms/demandforecasting-detail/queryVersion`, params }) +} \ No newline at end of file diff --git a/src/api/wms/demandforecastingMain/index.ts b/src/api/wms/demandforecastingMain/index.ts new file mode 100644 index 0000000..cbb7bfb --- /dev/null +++ b/src/api/wms/demandforecastingMain/index.ts @@ -0,0 +1,159 @@ +import request from '@/config/axios' +import { isString } from '@/utils/is' + +export interface DemandforecastingMainVO { + supplierCode: string + version: string + publishTime: Date + number: string + businessType: string + remark: string + createTime: Date + creator: string + beginTime: Date + endTime: Date + status: string + updateTime: Date + updater: string + available: string +} + +// 查询要货预测主列表 +export const getDemandforecastingMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/demandforecasting-main/senior', data }) + } else { + return await request.get({ url: `/wms/demandforecasting-main/page`, params }) + } +} + +// 查询要货预测主详情 +export const getDemandforecastingMain = async (id: number) => { + return await request.get({ url: `/wms/demandforecasting-main/get?id=` + id }) +} + +// 新增要货预测主 +export const createDemandforecastingMain = async (data: DemandforecastingMainVO) => { + return await request.post({ url: `/wms/demandforecasting-main/create`, data }) +} + +// 修改要货预测主 +export const updateDemandforecastingMain = async (data: DemandforecastingMainVO) => { + return await request.put({ url: `/wms/demandforecasting-main/update`, data }) +} + +// 删除要货预测主 +export const deleteDemandforecastingMain = async (id: number) => { + return await request.delete({ url: `/wms/demandforecasting-main/delete?id=` + id }) +} + + +// 关闭要货预测 +export const closePurchaseMain = async (id: number) => { + return await request.post({ url: `/wms/demandforecasting-main/close?id=` + id }) +} +// 打开要货预测 +export const openPurchaseMain = async (id: number) => { + return await request.post({ url: `/wms/demandforecasting-main/open?id=` + id }) +} +// 发布要货预测 +export const publishPurchaseMain = async (id: number) => { + return await request.post({ url: `/wms/demandforecasting-main/publish?id=` + id }) +} +// 下架要货预测 +export const witPurchaseMain = async (id: number) => { + return await request.post({ url: `/wms/demandforecasting-main/wit?id=` + id }) +} + +// 要货预测-列表和头部请求参数 +const getPageParams = (params)=>{ + // 到货日期 + if(params.dueDate&¶ms.dueDate.length>0){ + if(isString(params.dueDate[0])){ + params.startDate = params.dueDate[0] + }else{ + params.startDate = params.dueDate[0].format('YYYY-MM-DD') + } + + } + if(params.dueDate&¶ms.dueDate.length>1){ + if(isString(params.dueDate[1])){ + params.endDate = params.dueDate[1] + }else{ + params.endDate = params.dueDate[1].format('YYYY-MM-DD') + } + } + if (!params.dueDate || params.dueDate.length == 0) { + params.startDate = '' + params.endDate = '' + } + // params.dueDate = '' + + //计划员 + if(params.planerId&¶ms.planerId.length>0){ + params.planers = params.planerId.join(',') + } + params.planerId = '' + // 供应商代码 + if(params.supplierCode&¶ms.supplierCode.length>0){ + let keyValue = params.supplierCode.split(' ') + keyValue.forEach(item=>{item = item.trim()}) + params.supplierCodes = keyValue.join(',') + } + params.supplierCode = '' + + // 物料代码 + if(params.itemCode&¶ms.itemCode.length>0){ + let keyValue = params.itemCode.split(' ') + keyValue.forEach(item=>{item = item.trim()}) + params.itemCodes = keyValue.join(',') + } + params.itemCode = '' + + // 版本号 + if(params.version&¶ms.version.length>0){ + let keyValue = params.version.split(' ') + keyValue.forEach(item=>{item = item.trim()}) + params.versions = keyValue.join(',') + } + params.version = '' + return params +} +// 导出要货预测主 Excel +export const exportDemandforecastingMain = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/wms/demandforecasting-main/export-excel-senior', data }) + } else { + params = getPageParams(params) + return await request.download({ url: `/wms/demandforecasting-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/demandforecasting-main/get-import-template' }) +} + + +// 计划员 +export const queryUserPlanerList = async () => { + return await request.post({ url: `/wms/demandforecasting-main/queryUserPlanerList`,data:{} }) + +} + +// 供应商代码 +export const querySupplierList = async (data) => { + return await request.post({ url: `/wms/demandforecasting-main/querySupplierList`,data }) +} + + +// 是否已读接口 +export const updateIsRead = async (data) => { + return await request.post({ url: `/wms/demandforecasting-main/updateIsRead`,data }) +} + + diff --git a/src/api/wms/detail/index.ts b/src/api/wms/detail/index.ts new file mode 100644 index 0000000..9bf57f6 --- /dev/null +++ b/src/api/wms/detail/index.ts @@ -0,0 +1,35 @@ +import request from '@/config/axios' + + +// 查询备注列表 +export const getRemarkPage = async (params) => { + return await request.get({ url: `/infra/remark/list`, params }) +} + +// // 查询库区详情 +// export const getArea = async (id: number) => { +// return await request.get({ url: `/wms/areabasic/get?id=` + id }) +// } + +// 新增备注 +export const createRemark= async (data) => { + return await request.post({ url: `/infra/remark/create`, data }) +} +// 查询变更记录列表 +export const getChangeRecordPage = async (params) => { + return await request.get({ url: `/infra/trends/list`, params }) +} +// // 修改库区 +// export const updateArea = async (data: AreaVO) => { +// return await request.put({ url: `/wms/areabasic/update`, data }) +// } + +// // 删除库区 +// export const deleteArea = async (id: number) => { +// return await request.delete({ url: `/wms/areabasic/delete?id=` + id }) +// } + +// // 导出库区 Excel +// export const exportArea = async (params) => { +// return await request.download({ url: `/wms/areabasic/export-excel`, params }) +// } diff --git a/src/api/wms/dismantleRecordDetailb/index.ts b/src/api/wms/dismantleRecordDetailb/index.ts new file mode 100644 index 0000000..e1aaa04 --- /dev/null +++ b/src/api/wms/dismantleRecordDetailb/index.ts @@ -0,0 +1,66 @@ +import request from '@/config/axios' + +export interface DismantleRecordDetailbVO { + processCode: string + bomVersion: string + batch: string + toLocationCode: string + toLocationGroupCode: string + toAreaCode: string + inventoryStatus: string + packingNumber: string + number: string + itemCode: string + remark: string + createTime: Date + creator: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + uom: string + code: string + interfaceType: string + jobDetailId: string +} + +// 查询制品拆解记录子列表 +export const getDismantleRecordDetailbPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/dismantle-record-detailb/senior', data }) + } else { + return await request.get({ url: `/wms/dismantle-record-detailb/page`, params }) + } +} + +// 查询制品拆解记录子详情 +export const getDismantleRecordDetailb = async (id: number) => { + return await request.get({ url: `/wms/dismantle-record-detailb/get?id=` + id }) +} + +// 新增制品拆解记录子 +export const createDismantleRecordDetailb = async (data: DismantleRecordDetailbVO) => { + return await request.post({ url: `/wms/dismantle-record-detailb/create`, data }) +} + +// 修改制品拆解记录子 +export const updateDismantleRecordDetailb = async (data: DismantleRecordDetailbVO) => { + return await request.put({ url: `/wms/dismantle-record-detailb/update`, data }) +} + +// 删除制品拆解记录子 +export const deleteDismantleRecordDetailb = async (id: number) => { + return await request.delete({ url: `/wms/dismantle-record-detailb/delete?id=` + id }) +} + +// 导出制品拆解记录子 Excel +export const exportDismantleRecordDetailb = async (params) => { + return await request.download({ url: `/wms/dismantle-record-detailb/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/dismantle-record-detailb/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/dismantleRequestDetailb/index.ts b/src/api/wms/dismantleRequestDetailb/index.ts new file mode 100644 index 0000000..4603fb3 --- /dev/null +++ b/src/api/wms/dismantleRequestDetailb/index.ts @@ -0,0 +1,61 @@ +import request from '@/config/axios' + +export interface DismantleRequestDetailbVO { + processCode: string + bomVersion: string + itemCode: string + number: string + remark: string + createTime: Date + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + updateTime: Date + updater: string + creator: string + siteId: string +} + +// 查询制品拆解申请子列表 +export const getDismantleRequestDetailbPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/dismantle-request-detailb/senior', data }) + } else { + return await request.get({ url: `/wms/dismantle-request-detailb/page`, params }) + } +} + +// 查询制品拆解申请子详情 +export const getDismantleRequestDetailb = async (id: number) => { + return await request.get({ url: `/wms/dismantle-request-detailb/get?id=` + id }) +} + +// 新增制品拆解申请子 +export const createDismantleRequestDetailb = async (data: DismantleRequestDetailbVO) => { + return await request.post({ url: `/wms/dismantle-request-detailb/create`, data }) +} + +// 修改制品拆解申请子 +export const updateDismantleRequestDetailb = async (id, data) => { + return await request.post({ url: `/wms/dismantle-request-detailb/update?id=`+id, data }) +} + +// 删除制品拆解申请子 +export const deleteDismantleRequestDetailb = async (id: number) => { + return await request.delete({ url: `/wms/dismantle-request-detailb/delete?id=` + id }) +} + +// 导出制品拆解申请子 Excel +export const exportDismantleRequestDetailb = async (params) => { + return await request.download({ url: `/wms/dismantle-request-detailb/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/dismantle-request-detailb/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/dock/index.ts b/src/api/wms/dock/index.ts new file mode 100644 index 0000000..ece07e8 --- /dev/null +++ b/src/api/wms/dock/index.ts @@ -0,0 +1,67 @@ +import request from '@/config/axios' + +export interface DockVO { + code: string + name: string + description: string + city: string + address: string + type: string + warehouseCode: string + defaultLocationCode: string + contactPerson: string + contactPhone: string + available: number + activeTime: Date + expireTime: Date + remark: string +} + +// 查询月台列表 +export const getDockPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/wms/dock/senior', data }) + } else { + return await request.get({ url: `/wms/dock/page`, params }) + } +} +// 查询月台列表 +export const getDockList = async (params) => { + return await request.get({ url: `/wms/dock/list`, params }) +} +// 查询月台详情 +export const getDock = async (id: number) => { + return await request.get({ url: `/wms/dock/get?id=` + id }) +} + +// 新增月台 +export const createDock = async (data: DockVO) => { + return await request.post({ url: `/wms/dock/create`, data }) +} + +// 修改月台 +export const updateDock = async (data: DockVO) => { + return await request.put({ url: `/wms/dock/update`, data }) +} + +// 删除月台 +export const deleteDock = async (id: number) => { + return await request.delete({ url: `/wms/dock/delete?id=` + id }) +} + +// 导出月台 Excel +export const exportDock = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/dock/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/dock/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/dock/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/documentsetting/index.ts b/src/api/wms/documentsetting/index.ts new file mode 100644 index 0000000..6d9dc6b --- /dev/null +++ b/src/api/wms/documentsetting/index.ts @@ -0,0 +1,60 @@ +import request from '@/config/axios' + +export interface DocumentsettingVO { + code: string + name: string + description: string + type: string + businessType: string + numberPrefix: string + dateFormat: string + serialLength: number + separatorStr: string + resetPeriod: string + activeTime: Date + expireTime: Date + remark: string + available: string + isSoftDeleted: string +} + +// 查询单据设置列表 +export const getDocumentsettingPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/wms/documentsetting/senior', data }) + } else { + return await request.get({ url: `/wms/documentsetting/page`, params }) + } +} + +// 查询单据设置详情 +export const getDocumentsetting = async (id: number) => { + return await request.get({ url: `/wms/documentsetting/get?id=` + id }) +} + +// 新增单据设置 +export const createDocumentsetting = async (data: DocumentsettingVO) => { + return await request.post({ url: `/wms/documentsetting/create`, data }) +} + +// 修改单据设置 +export const updateDocumentsetting = async (data: DocumentsettingVO) => { + return await request.put({ url: `/wms/documentsetting/update`, data }) +} + +// 删除单据设置 +export const deleteDocumentsetting = async (id: number) => { + return await request.delete({ url: `/wms/documentsetting/delete?id=` + id }) +} + +// 导出单据设置 Excel +export const exportDocumentsetting = async (params) => { + return await request.download({ url: `/wms/documentsetting/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/documentsetting/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/enterprise/index.ts b/src/api/wms/enterprise/index.ts new file mode 100644 index 0000000..87cf0ff --- /dev/null +++ b/src/api/wms/enterprise/index.ts @@ -0,0 +1,64 @@ +import request from '@/config/axios' + +export interface EnterpriseVO { + id: number + code: string + name: string + shortName: string + address: string + available: string + activeTime: Date + expireTime: Date + remark: string + deletionTime: Date + deleterId: string + extraProperties: string + concurrencyStamp: string + siteId: string +} + +// 查询企业列表 +export const getEnterprisePage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/enterprise/senior', data }) + } else { + return await request.get({ url: `/wms/enterprise/page`, params }) + } +} + +// 查询企业详情 +export const getEnterprise = async (id: number) => { + return await request.get({ url: `/wms/enterprise/get?id=` + id }) +} + +// 新增企业 +export const createEnterprise = async (data: EnterpriseVO) => { + return await request.post({ url: `/wms/enterprise/create`, data }) +} + +// 修改企业 +export const updateEnterprise = async (data: EnterpriseVO) => { + return await request.put({ url: `/wms/enterprise/update`, data }) +} + +// 删除企业 +export const deleteEnterprise = async (id: number) => { + return await request.delete({ url: `/wms/enterprise/delete?id=` + id }) +} + +// 导出企业 Excel +export const exportEnterprise = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/enterprise/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/enterprise/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/enterprise/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/expectin/index.ts b/src/api/wms/expectin/index.ts new file mode 100644 index 0000000..ab98fbc --- /dev/null +++ b/src/api/wms/expectin/index.ts @@ -0,0 +1,65 @@ +import request from '@/config/axios' + +export interface ExpectinVO { + jobNumber: string + businessType: string + itemCode: string + batch: string + inventoryStatus: string + uom: string + qty: number + locationCode: string + warehouseCode: string + ownerCode: string +} + +// 查询预计入库存列表 +export const getExpectinPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/expectin/senior', data }) + } else { + return await request.get({ url: `/wms/expectin/page`, params }) + } +} + +// 查询预计入库存详情 +export const getExpectin = async (id: number) => { + return await request.get({ url: `/wms/expectin/get?id=` + id }) +} + +// 新增预计入库存 +export const createExpectin = async (data: ExpectinVO) => { + return await request.post({ url: `/wms/expectin/create`, data }) +} + +// 修改预计入库存 +export const updateExpectin = async (data: ExpectinVO) => { + return await request.put({ url: `/wms/expectin/update`, data }) +} + +// 删除预计入库存 +export const deleteExpectin = async (id: number) => { + return await request.delete({ url: `/wms/expectin/delete?id=` + id }) +} + +// 批量删除预计出库存 +export const deleteExpectinIds = async (ids: string) => { + return await request.delete({ url: `/wms/expectin/deleteIds?ids=` + ids }) +} + +// 导出预计入库存 Excel +export const exportExpectin = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/expectin/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/expectin/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/expectin/get-import-template' }) +} diff --git a/src/api/wms/expectout/index.ts b/src/api/wms/expectout/index.ts new file mode 100644 index 0000000..64329d4 --- /dev/null +++ b/src/api/wms/expectout/index.ts @@ -0,0 +1,66 @@ +import request from '@/config/axios' + +export interface ExpectoutVO { + jobNumber: string + businessType: string + packingNumber: string + itemCode: string + batch: string + inventoryStatus: string + uom: string + qty: number + locationCode: string + warehouseCode: string + ownerCode: string +} + +// 查询预计出库存列表 +export const getExpectoutPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/expectout/senior', data }) + } else { + return await request.get({ url: `/wms/expectout/page`, params }) + } +} + +// 查询预计出库存详情 +export const getExpectout = async (id: number) => { + return await request.get({ url: `/wms/expectout/get?id=` + id }) +} + +// 新增预计出库存 +export const createExpectout = async (data: ExpectoutVO) => { + return await request.post({ url: `/wms/expectout/create`, data }) +} + +// 修改预计出库存 +export const updateExpectout = async (data: ExpectoutVO) => { + return await request.put({ url: `/wms/expectout/update`, data }) +} + +// 删除预计出库存 +export const deleteExpectout = async (id: number) => { + return await request.delete({ url: `/wms/expectout/delete?id=` + id }) +} + +// 批量删除预计出库存 +export const deleteExpectoutIds = async (ids: string) => { + return await request.delete({ url: `/wms/expectout/deleteIds?ids=` + ids }) +} + +// 导出预计出库存 Excel +export const exportExpectout = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/expectout/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/expectout/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/expectout/get-import-template' }) +} diff --git a/src/api/wms/file/index.ts b/src/api/wms/file/index.ts new file mode 100644 index 0000000..f817181 --- /dev/null +++ b/src/api/wms/file/index.ts @@ -0,0 +1,12 @@ +import request from '@/config/axios' + +// 查询变更记录列表 +export const getFileList = async (params) => { + return await request.get({ url: `/infra/file/list`, params }) +} + +// 删除库区 +export const deleteFile = async (id: number) => { + return await request.delete({ url: `/infra/file/delete?id=` + id }) +} + diff --git a/src/api/wms/index.ts b/src/api/wms/index.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/api/wms/inspectJobDetail/index.ts b/src/api/wms/inspectJobDetail/index.ts new file mode 100644 index 0000000..64fcb32 --- /dev/null +++ b/src/api/wms/inspectJobDetail/index.ts @@ -0,0 +1,60 @@ +import request from '@/config/axios' + +export interface InspectJobDetailVO { + packingNumber: string + containerNumber: string + inventoryStatus: string + fromLocationCode: string + number: string + remark: string + createTime: Date + creator: string + itemCode: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string +} + +// 查询检验任务子列表 +export const getInspectJobDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/inspect-job-detail/senior', data }) + } else { + return await request.get({ url: `/wms/inspect-job-detail/page`, params }) + } +} + +// 查询检验任务子详情 +export const getInspectJobDetail = async (id: number) => { + return await request.get({ url: `/wms/inspect-job-detail/get?id=` + id }) +} + +// 新增检验任务子 +export const createInspectJobDetail = async (data: InspectJobDetailVO) => { + return await request.post({ url: `/wms/inspect-job-detail/create`, data }) +} + +// 修改检验任务子 +export const updateInspectJobDetail = async (data: InspectJobDetailVO) => { + return await request.put({ url: `/wms/inspect-job-detail/update`, data }) +} + +// 删除检验任务子 +export const deleteInspectJobDetail = async (id: number) => { + return await request.delete({ url: `/wms/inspect-job-detail/delete?id=` + id }) +} + +// 导出检验任务子 Excel +export const exportInspectJobDetail = async (params) => { + return await request.download({ url: `/wms/inspect-job-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/inspect-job-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/inspectJobMain/index.ts b/src/api/wms/inspectJobMain/index.ts new file mode 100644 index 0000000..54e9514 --- /dev/null +++ b/src/api/wms/inspectJobMain/index.ts @@ -0,0 +1,101 @@ +import request from '@/config/axios' + +export interface InspectJobMainVO { + requestNumber: string + purchaseReceiptRecordNumber: string + supplierCode: string + warehouseCode: string + requestTime: Date + requestDueTime: Date + status: string + expiredTime: Date + updateTime: Date + updater: string + jobStageStatus: string + priority: number + priorityIncrement: number + departmentCode: string + acceptUserId: string + acceptTime: Date + completeUserId: string + completeTime: Date + fromAreaTypes: string + toAreaTypes: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + poUmber: string + poLine: string + batch: string + itemCode: string + inspectType: string + nextAction: string + sampleMethod: string + uom: string + receiveQty: number + sampleQty: number + owner: string + autoComplete: string + allowModifyLocation: string + allowModifyQty: string + allowBiggerQty: string + allowSmallerQty: string + allowModifyInventoryStatus: string + allowContinuousScanning: string + allowPartialComplete: string + allowModifyBatch: string + allowModifyPackingNumber: string +} + +// 查询检验任务主列表 +export const getInspectJobMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/inspect-job-main/senior', data }) + } else { + return await request.get({ url: `/wms/inspect-job-main/page`, params }) + } +} + +// 查询检验任务主详情 +export const getInspectJobMain = async (id: number) => { + return await request.get({ url: `/wms/inspect-job-main/get?id=` + id }) +} + +// 新增检验任务主 +export const createInspectJobMain = async (data: InspectJobMainVO) => { + return await request.post({ url: `/wms/inspect-job-main/create`, data }) +} + +// 修改检验任务主 +export const updateInspectJobMain = async (data: InspectJobMainVO) => { + return await request.put({ url: `/wms/inspect-job-main/update`, data }) +} + +// 删除检验任务主 +export const deleteInspectJobMain = async (id: number) => { + return await request.delete({ url: `/wms/inspect-job-main/delete?id=` + id }) +} + +// 导出检验任务主 Excel +export const exportInspectJobMain = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/inspect-job-main/export-excel-senior`, data }) + } else { + return await request.download({url: `/wms/inspect-job-main/export-excel`, params}) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/inspect-job-main/get-import-template' }) +} + +// 关闭检验任务主 +export const closeInspectJobMain = (id: number) => { + return request.put({ url: '/wms/inspect-job-main/close?id=' + id }) +} diff --git a/src/api/wms/inspectRecordDetail/index.ts b/src/api/wms/inspectRecordDetail/index.ts new file mode 100644 index 0000000..5bda866 --- /dev/null +++ b/src/api/wms/inspectRecordDetail/index.ts @@ -0,0 +1,76 @@ +import request from '@/config/axios' + +export interface InspectRecordDetailVO { + packingNumber: string + containerNumber: string + fromLocationCode: string + fromLocationGroupCode: string + fromAreaCode: string + sampleQty: number + goodQty: number + failedQty: number + crackQty: number + notPassedQty: number + failedReason: string + photos: string + inspectUser: string + inspectResult: string + appearance: string + volume: string + weight: string + otherProperties: string + number: string + itemCode: string + remark: string + createTime: Date + creator: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + uom: string + code: string + interfaceType: string + jobDetailId: string +} + +// 查询检验记录子列表 +export const getInspectRecordDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/inspect-record-detail/senior', data }) + } else { + return await request.get({ url: `/wms/inspect-record-detail/page`, params }) + } +} + +// 查询检验记录子详情 +export const getInspectRecordDetail = async (id: number) => { + return await request.get({ url: `/wms/inspect-record-detail/get?id=` + id }) +} + +// 新增检验记录子 +export const createInspectRecordDetail = async (data: InspectRecordDetailVO) => { + return await request.post({ url: `/wms/inspect-record-detail/create`, data }) +} + +// 修改检验记录子 +export const updateInspectRecordDetail = async (data: InspectRecordDetailVO) => { + return await request.put({ url: `/wms/inspect-record-detail/update`, data }) +} + +// 删除检验记录子 +export const deleteInspectRecordDetail = async (id: number) => { + return await request.delete({ url: `/wms/inspect-record-detail/delete?id=` + id }) +} + +// 导出检验记录子 Excel +export const exportInspectRecordDetail = async (params) => { + return await request.download({ url: `/wms/inspect-record-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/inspect-record-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/inspectRecordMain/index.ts b/src/api/wms/inspectRecordMain/index.ts new file mode 100644 index 0000000..3de2e0b --- /dev/null +++ b/src/api/wms/inspectRecordMain/index.ts @@ -0,0 +1,94 @@ +import request from '@/config/axios' + +export interface InspectRecordMainVO { + requestNumber: string + jobNumber: string + purchaseReceiptRecordNumber: string + supplierCode: string + outTransactionType: string + inTransactionType: string + executeTime: Date + activeDate: Date + requestTime: Date + dueTime: Date + departmentCode: string + interfaceType: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + code: string + poNumber: string + poLine: string + batch: string + inspectType: string + nextAction: string + sampleMethod: string + uom: string + receiveQty: number + batchGoodQty: number + batchFaildQty: number + batchCrackQty: number + batchNotPassedQty: number + itemCode: string + fromWarehouseCode: string + fromAreaCodes: string + ownerCode: string + available: string + sampleQty: number + fromAreaTypes: string + putawayRequestFlag: boolean +} + +// 查询检验记录主列表 +export const getInspectRecordMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/inspect-record-main/senior', data }) + } else { + return await request.get({ url: `/wms/inspect-record-main/page`, params }) + } +} + +// 查询检验记录主详情 +export const getInspectRecordMain = async (id: number) => { + return await request.get({ url: `/wms/inspect-record-main/get?id=` + id }) +} + +// 新增检验记录主 +export const createInspectRecordMain = async (data: InspectRecordMainVO) => { + return await request.post({ url: `/wms/inspect-record-main/create`, data }) +} + +// 修改检验记录主 +export const updateInspectRecordMain = async (data: InspectRecordMainVO) => { + return await request.put({ url: `/wms/inspect-record-main/update`, data }) +} + +// 删除检验记录主 +export const deleteInspectRecordMain = async (id: number) => { + return await request.delete({ url: `/wms/inspect-record-main/delete?id=` + id }) +} + +// 导出检验记录主 Excel +export const exportInspectRecordMain = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/inspect-record-main/export-excel-senior`, data }) + } else { + return await request.download({url: `/wms/inspect-record-main/export-excel`, params}) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/inspect-record-main/get-import-template' }) +} + + +// 创建上架申请 +export const createPutAwayRequest = async (number:string) => { + return await request.post({ url: `/wms/inspect-record-main/createPutAwayRequestPC?number=`+number }) +} \ No newline at end of file diff --git a/src/api/wms/inspectRequestDetail/index.ts b/src/api/wms/inspectRequestDetail/index.ts new file mode 100644 index 0000000..d3a1a0f --- /dev/null +++ b/src/api/wms/inspectRequestDetail/index.ts @@ -0,0 +1,58 @@ +import request from '@/config/axios' + +export interface InspectRequestDetailVO { + packingNumber: string + containerNumber: string + inventoryStatus: string + fromLocationCode: string + updateTime: Date + updater: string + itemCode: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string +} + +// 查询检验申请子列表 +export const getInspectRequestDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/inspect-request-detail/senior', data }) + } else { + return await request.get({ url: `/wms/inspect-request-detail/page`, params }) + } +} + +// 查询检验申请子详情 +export const getInspectRequestDetail = async (id: number) => { + return await request.get({ url: `/wms/inspect-request-detail/get?id=` + id }) +} + +// 新增检验申请子 +export const createInspectRequestDetail = async (data: InspectRequestDetailVO) => { + return await request.post({ url: `/wms/inspect-request-detail/create`, data }) +} + +// 修改检验申请子 +export const updateInspectRequestDetail = async (data: InspectRequestDetailVO) => { + return await request.put({ url: `/wms/inspect-request-detail/update`, data }) +} + +// 删除检验申请子 +export const deleteInspectRequestDetail = async (id: number) => { + return await request.delete({ url: `/wms/inspect-request-detail/delete?id=` + id }) +} + +// 导出检验申请子 Excel +export const exportInspectRequestDetail = async (params) => { + return await request.download({ url: `/wms/inspect-request-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/inspect-request-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/inspectRequestMain/index.ts b/src/api/wms/inspectRequestMain/index.ts new file mode 100644 index 0000000..c4f71cc --- /dev/null +++ b/src/api/wms/inspectRequestMain/index.ts @@ -0,0 +1,111 @@ +import request from '@/config/axios' + +export interface InspectRequestMainVO { + purchaseReceiptRecordNumber: string + supplierCode: string + number: string + businessType: string + fromWarehouseCode: string + fromAreaCodes: string + fromAreaTypes: string + remark: string + createTime: Date + creator: string + requestTime: Date + dueTime: Date + departmentCode: string + status: string + updateTime: Date + updater: string + poNumber: string + poLine: string + batch: string + itemCode: string + inspectType: string + nextAction: string + sampleMethod: string + uom: string + receiveQty: number + sampleQty: number + ownerCode: string + autoCommit: string + autoAgree: string + autoExecute: string + directCreateRecord: string +} + +// 查询检验申请主列表 +export const getInspectRequestMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/inspect-request-main/senior', data }) + } else { + return await request.get({ url: `/wms/inspect-request-main/page`, params }) + } +} + +// 查询检验申请主详情 +export const getInspectRequestMain = async (id: number) => { + return await request.get({ url: `/wms/inspect-request-main/get?id=` + id }) +} + +// 新增检验申请主 +export const createInspectRequestMain = async (data: InspectRequestMainVO) => { + return await request.post({ url: `/wms/inspect-request-main/create`, data }) +} + +// 修改检验申请主 +export const updateInspectRequestMain = async (data: InspectRequestMainVO) => { + return await request.put({ url: `/wms/inspect-request-main/update`, data }) +} + +// 删除检验申请主 +export const deleteInspectRequestMain = async (id: number) => { + return await request.delete({ url: `/wms/inspect-request-main/delete?id=` + id }) +} + +// 导出检验申请主 Excel +export const exportInspectRequestMain = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/inspect-request-main/export-excel-senior`, data }) + } else { + return await request.download({url: `/wms/inspect-request-main/export-excel`, params}) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/inspect-request-main/get-import-template' }) +} + +// 关闭检验申请主 Excel +export const closeInspectRequestMain = async (id) => { + return await request.put({ url: `/wms/inspect-request-main/close?id=` + id }) +} + +// 重新添加检验申请主 Excel +export const reAddInspectRequestMain = async (id) => { + return await request.put({ url: `/wms/inspect-request-main/reAdd?id=` + id }) +} + +// 提交检验申请主 Excel +export const submitInspectRequestMain = async (id) => { + return await request.put({ url: `/wms/inspect-request-main/submit?id=` + id }) +} + +// 审批通过检验申请主 Excel +export const agreeInspectRequestMain = async (id) => { + return await request.put({ url: `/wms/inspect-request-main/agree?id=` + id }) +} + +// 审批驳回检验申请主 Excel +export const refusedInspectRequestMain = async (id) => { + return await request.put({ url: `/wms/inspect-request-main/refused?id=` + id }) +} + +// 处理检验申请主 Excel +export const handleInspectRequestMain = async (id) => { + return await request.put({ url: `/wms/inspect-request-main/handle?id=` + id }) +} diff --git a/src/api/wms/interfaceInfo/index.ts b/src/api/wms/interfaceInfo/index.ts new file mode 100644 index 0000000..9af0ea3 --- /dev/null +++ b/src/api/wms/interfaceInfo/index.ts @@ -0,0 +1,57 @@ +import request from '@/config/axios' + +export interface InterfaceInfoVO { + number:string + id: number + interfaceType: string + interfaceName: string + interfaceStatus: string + url: string + reqBody: string + respBody: string + errorMsg: string + remark: string + extraProperties: string + concurrencyStamp: number +} + +// 查询接口调用信息列表 +export const getInterfaceInfoPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/interface-info/senior', data }) + } else { + return await request.get({ url: `/wms/interface-info/page`, params }) + } +} + +// 查询接口调用信息详情 +export const getInterfaceInfo = async (id: number) => { + return await request.get({ url: `/wms/interface-info/get?id=` + id }) +} + +// 新增接口调用信息 +export const createInterfaceInfo = async (data: InterfaceInfoVO) => { + return await request.post({ url: `/wms/interface-info/create`, data }) +} + +// 修改接口调用信息 +export const updateInterfaceInfo = async (data: InterfaceInfoVO) => { + return await request.put({ url: `/wms/interface-info/update`, data }) +} + +// 删除接口调用信息 +export const deleteInterfaceInfo = async (id: number) => { + return await request.delete({ url: `/wms/interface-info/delete?id=` + id }) +} + +// 导出接口调用信息 Excel +export const exportInterfaceInfo = async (params) => { + return await request.download({ url: `/wms/interface-info/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/interface-info/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/inventorychangeRecordDetail/index.ts b/src/api/wms/inventorychangeRecordDetail/index.ts new file mode 100644 index 0000000..3c68f04 --- /dev/null +++ b/src/api/wms/inventorychangeRecordDetail/index.ts @@ -0,0 +1,82 @@ +import request from '@/config/axios' + +export interface InventorychangeRecordDetailVO { + locationCode: string + locationGroupCode: string + areaCode: string + fromQty: number + fromOwnerCode: string + fromPackingNumber: string + fromContainerNumber: string + fromBatch: string + fromAltBatch: string + fromArriveDate: Date + fromProduceDate: Date + fromExpireDate: Date + fromInventoryStatus: string + toQty: number + toOwnerCode: string + toPackingNumber: string + toContainerNumber: string + toBatch: string + toAltBatch: string + toArriveDate: Date + toProduceDate: Date + toExpireDate: Date + toInventoryStatus: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + code: string + interfaceType: string + number: string + itemCode: string + remark: string + createTime: Date + creator: string + jobDetailId: string +} + +// 查询库存修改记录子列表 +export const getInventorychangeRecordDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/inventorychange-record-detail/senior', data }) + } else { + return await request.get({ url: `/wms/inventorychange-record-detail/page`, params }) + } +} + +// 查询库存修改记录子详情 +export const getInventorychangeRecordDetail = async (id: number) => { + return await request.get({ url: `/wms/inventorychange-record-detail/get?id=` + id }) +} + +// 新增库存修改记录子 +export const createInventorychangeRecordDetail = async (data: InventorychangeRecordDetailVO) => { + return await request.post({ url: `/wms/inventorychange-record-detail/create`, data }) +} + +// 修改库存修改记录子 +export const updateInventorychangeRecordDetail = async (data: InventorychangeRecordDetailVO) => { + return await request.put({ url: `/wms/inventorychange-record-detail/update`, data }) +} + +// 删除库存修改记录子 +export const deleteInventorychangeRecordDetail = async (id: number) => { + return await request.delete({ url: `/wms/inventorychange-record-detail/delete?id=` + id }) +} + +// 导出库存修改记录子 Excel +export const exportInventorychangeRecordDetail = async (params) => { + return await request.download({ url: `/wms/inventorychange-record-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/inventorychange-record-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/inventorychangeRecordMain/index.ts b/src/api/wms/inventorychangeRecordMain/index.ts new file mode 100644 index 0000000..dea0dc2 --- /dev/null +++ b/src/api/wms/inventorychangeRecordMain/index.ts @@ -0,0 +1,68 @@ +import request from '@/config/axios' + +export interface InventorychangeRecordMainVO { + requestNumber: string + warehouseCode: string + outTransactionType: string + inTransactionType: string + executeTime: Date + activeDate: Date + requestTime: Date + dueTime: Date + departmentCode: string + interfaceType: string + code: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + available: string +} + +// 查询库存修改记录主列表 +export const getInventorychangeRecordMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/inventorychange-record-main/senior', data }) + } else { + return await request.get({ url: `/wms/inventorychange-record-main/page`, params }) + } +} + +// 查询库存修改记录主详情 +export const getInventorychangeRecordMain = async (id: number) => { + return await request.get({ url: `/wms/inventorychange-record-main/get?id=` + id }) +} + +// 新增库存修改记录主 +export const createInventorychangeRecordMain = async (data: InventorychangeRecordMainVO) => { + return await request.post({ url: `/wms/inventorychange-record-main/create`, data }) +} + +// 修改库存修改记录主 +export const updateInventorychangeRecordMain = async (data: InventorychangeRecordMainVO) => { + return await request.put({ url: `/wms/inventorychange-record-main/update`, data }) +} + +// 删除库存修改记录主 +export const deleteInventorychangeRecordMain = async (id: number) => { + return await request.delete({ url: `/wms/inventorychange-record-main/delete?id=` + id }) +} + +// 导出库存修改记录主 Excel +export const exportInventorychangeRecordMain = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/inventorychange-record-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/inventorychange-record-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/inventorychange-record-main/get-import-template' }) +} diff --git a/src/api/wms/inventorychangeRequestDetail/index.ts b/src/api/wms/inventorychangeRequestDetail/index.ts new file mode 100644 index 0000000..3a36cad --- /dev/null +++ b/src/api/wms/inventorychangeRequestDetail/index.ts @@ -0,0 +1,81 @@ +import request from '@/config/axios' + +export interface InventorychangeRequestDetailVO { + locationGroupCode: string + locationCode: string + areaCode: string + fromQty: number + fromOwnerCode: string + fromPackingNumber: string + fromContainerNumber: string + fromBatch: string + fromAltbatch: string + fromArriveDate: Date + fromProduceDate: Date + fromExpireDate: Date + frominventoryStatus: string + toQty: number + toOwnerCode: string + toPackingNumber: string + toContainerNumber: string + toBatch: string + toAltBatch: string + toArrivdAte: Date + toProduceDate: Date + toExpireDate: Date + toInventoryStatus: string + number: string + remark: string + createTime: Date + creator: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + updateTime: Date + updater: string + itemCode: string +} + +// 查询库存修改申请子列表 +export const getInventorychangeRequestDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/inventorychange-request-detail/senior', data }) + } else { + return await request.get({ url: `/wms/inventorychange-request-detail/page`, params }) + } +} + +// 查询库存修改申请子详情 +export const getInventorychangeRequestDetail = async (id: number) => { + return await request.get({ url: `/wms/inventorychange-request-detail/get?id=` + id }) +} + +// 新增库存修改申请子 +export const createInventorychangeRequestDetail = async (data: InventorychangeRequestDetailVO) => { + return await request.post({ url: `/wms/inventorychange-request-detail/create`, data }) +} + +// 修改库存修改申请子 +export const updateInventorychangeRequestDetail = async (data: InventorychangeRequestDetailVO) => { + return await request.put({ url: `/wms/inventorychange-request-detail/update`, data }) +} + +// 删除库存修改申请子 +export const deleteInventorychangeRequestDetail = async (id: number) => { + return await request.delete({ url: `/wms/inventorychange-request-detail/delete?id=` + id }) +} + +// 导出库存修改申请子 Excel +export const exportInventorychangeRequestDetail = async (params) => { + return await request.download({ url: `/wms/inventorychange-request-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/inventorychange-request-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/inventorychangeRequestMain/index.ts b/src/api/wms/inventorychangeRequestMain/index.ts new file mode 100644 index 0000000..4d531a3 --- /dev/null +++ b/src/api/wms/inventorychangeRequestMain/index.ts @@ -0,0 +1,97 @@ +import request from '@/config/axios' + +export interface InventorychangeRequestMainVO { + warehouseCode: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + requestTime: Date + dueTime: Date + departmentCode: string + status: string + updateTime: Date + updater: string + autoCommit: string + autoAgree: string + autoExecute: string + directCreateRecord: string +} + +// 查询库存修改申请主列表 +export const getInventorychangeRequestMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/inventorychange-request-main/senior', data }) + } else { + return await request.get({ url: `/wms/inventorychange-request-main/page`, params }) + } +} + +// 查询库存修改申请主详情 +export const getInventorychangeRequestMain = async (id: number) => { + return await request.get({ url: `/wms/inventorychange-request-main/get?id=` + id }) +} + +// 新增库存修改申请主 +export const createInventorychangeRequestMain = async (data: InventorychangeRequestMainVO) => { + return await request.post({ url: `/wms/inventorychange-request-main/create`, data }) +} + +// 修改库存修改申请主 +export const updateInventorychangeRequestMain = async (data: InventorychangeRequestMainVO) => { + return await request.put({ url: `/wms/inventorychange-request-main/update`, data }) +} + +// 删除库存修改申请主 +export const deleteInventorychangeRequestMain = async (id: number) => { + return await request.delete({ url: `/wms/inventorychange-request-main/delete?id=` + id }) +} + +// 导出库存修改申请主 Excel +export const exportInventorychangeRequestMain = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/inventorychange-request-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/inventorychange-request-main/export-excel`, params }) + } + } + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/inventorychange-request-main/get-import-template' }) +} + +// 关闭 +export const close = (id) => { + return request.put({ url: '/wms/inventorychange-request-main/close?id=' + id }) +} + +// 重新添加 +export const reAdd = (id) => { + return request.put({ url: '/wms/inventorychange-request-main/reAdd?id=' + id }) +} + +// 提交审批 +export const submit = (id) => { + return request.put({ url: '/wms/inventorychange-request-main/submit?id=' + id }) +} + +// 驳回 +export const refused = (id) => { + return request.put({ url: '/wms/inventorychange-request-main/refused?id=' + id }) +} + +// 审批通过 +export const agree = (id) => { + return request.put({ url: '/wms/inventorychange-request-main/agree?id=' + id }) +} + +// 处理 +export const handle = (id) => { + return request.put({ url: '/wms/inventorychange-request-main/handle?id=' + id }) +} diff --git a/src/api/wms/inventoryinitRecordDetail/index.ts b/src/api/wms/inventoryinitRecordDetail/index.ts new file mode 100644 index 0000000..fe2d27f --- /dev/null +++ b/src/api/wms/inventoryinitRecordDetail/index.ts @@ -0,0 +1,80 @@ +import request from '@/config/axios' + +export interface InventoryinitRecordDetailVO { + ownerCode: string + packingNumber: string + containerNumber: string + batch: string + altBatch: string + arriveDate: Date + produceDate: Date + expireDate: Date + inventoryStatus: string + locationCode: string + locationGroupCode: string + areaCode: string + packQty: number + packUnit: string + qty: number + singlePrice: number + amount: number + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + uom: string + code: string + interfaceType: string + number: string + itemCode: string + remark: string + createTime: Date + creator: string + jobDetailId: string +} + +// 查询库存初始化记录子列表 +export const getInventoryinitRecordDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/inventoryinit-record-detail/senior', data }) + } else { + return await request.get({ url: `/wms/inventoryinit-record-detail/page`, params }) + } +} + +// 查询库存初始化记录子详情 +export const getInventoryinitRecordDetail = async (id: number) => { + return await request.get({ url: `/wms/inventoryinit-record-detail/get?id=` + id }) +} + +// 新增库存初始化记录子 +export const createInventoryinitRecordDetail = async (data: InventoryinitRecordDetailVO) => { + return await request.post({ url: `/wms/inventoryinit-record-detail/create`, data }) +} + +// 修改库存初始化记录子 +export const updateInventoryinitRecordDetail = async (data: InventoryinitRecordDetailVO) => { + return await request.put({ url: `/wms/inventoryinit-record-detail/update`, data }) +} + +// 删除库存初始化记录子 +export const deleteInventoryinitRecordDetail = async (id: number) => { + return await request.delete({ url: `/wms/inventoryinit-record-detail/delete?id=` + id }) +} + +// 导出库存初始化记录子 Excel +export const exportInventoryinitRecordDetail = async (params) => { + return await request.download({ url: `/wms/inventoryinit-record-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/inventoryinit-record-detail/get-import-template' }) +} + +// 批量打印 +export const printLabelBatchByIdSelection = async (data: any) => { + return await request.post({ url: `/wms/inventoryinit-record-main/printLabelBatchById` ,data}) +} \ No newline at end of file diff --git a/src/api/wms/inventoryinitRecordMain/index.ts b/src/api/wms/inventoryinitRecordMain/index.ts new file mode 100644 index 0000000..173941d --- /dev/null +++ b/src/api/wms/inventoryinitRecordMain/index.ts @@ -0,0 +1,67 @@ +import request from '@/config/axios' + +export interface InventoryinitRecordMainVO { + requestNumber: string + warehouseCode: string + outTransactionType: string + inTransactionType: string + executeTime: Date + activeDate: Date + requestTime: Date + dueTime: Date + departmentCode: string + interfaceType: string + code: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + available: string +} + +// 查询库存初始化记录主列表 +export const getInventoryinitRecordMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/inventoryinit-record-main/senior', data }) + } else { + return await request.get({ url: `/wms/inventoryinit-record-main/page`, params }) + } +} + +// 查询库存初始化记录主详情 +export const getInventoryinitRecordMain = async (id: number) => { + return await request.get({ url: `/wms/inventoryinit-record-main/get?id=` + id }) +} + +// 新增库存初始化记录主 +export const createInventoryinitRecordMain = async (data: InventoryinitRecordMainVO) => { + return await request.post({ url: `/wms/inventoryinit-record-main/create`, data }) +} + +// 修改库存初始化记录主 +export const updateInventoryinitRecordMain = async (data: InventoryinitRecordMainVO) => { + return await request.put({ url: `/wms/inventoryinit-record-main/update`, data }) +} + +// 删除库存初始化记录主 +export const deleteInventoryinitRecordMain = async (id: number) => { + return await request.delete({ url: `/wms/inventoryinit-record-main/delete?id=` + id }) +} + +// 导出库存初始化记录主 Excel +export const exportInventoryinitRecordMain = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/inventoryinit-record-main/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/inventoryinit-record-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/inventoryinit-record-main/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/inventoryinitRequestDetail/index.ts b/src/api/wms/inventoryinitRequestDetail/index.ts new file mode 100644 index 0000000..8962c3a --- /dev/null +++ b/src/api/wms/inventoryinitRequestDetail/index.ts @@ -0,0 +1,72 @@ +import request from '@/config/axios' + +export interface InventoryinitRequestDetailVO { + ownerCode: string + packingNumber: string + containerNumber: string + batch: string + altBatch: string + arriveDate: Date + produceDate: Date + expireDate: Date + inventoryStatus: string + locationCode: string + locationGroupCode: string + areaCode: string + packQty: number + packUnit: string + qty: number + number: string + remark: string + createTime: Date + creator: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + uom: string + updateTime: Date + updater: string + itemCode: string +} + +// 查询库存初始化申请子列表 +export const getInventoryinitRequestDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/inventoryinit-request-detail/senior', data }) + } else { + return await request.get({ url: `/wms/inventoryinit-request-detail/page`, params }) + } +} + +// 查询库存初始化申请子详情 +export const getInventoryinitRequestDetail = async (id: number) => { + return await request.get({ url: `/wms/inventoryinit-request-detail/get?id=` + id }) +} + +// 新增库存初始化申请子 +export const createInventoryinitRequestDetail = async (data: InventoryinitRequestDetailVO) => { + return await request.post({ url: `/wms/inventoryinit-request-detail/create`, data }) +} + +// 修改库存初始化申请子 +export const updateInventoryinitRequestDetail = async (data: InventoryinitRequestDetailVO) => { + return await request.put({ url: `/wms/inventoryinit-request-detail/update`, data }) +} + +// 删除库存初始化申请子 +export const deleteInventoryinitRequestDetail = async (id: number) => { + return await request.delete({ url: `/wms/inventoryinit-request-detail/delete?id=` + id }) +} + +// 导出库存初始化申请子 Excel +export const exportInventoryinitRequestDetail = async (params) => { + return await request.download({ url: `/wms/inventoryinit-request-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/inventoryinit-request-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/inventoryinitRequestMain/index.ts b/src/api/wms/inventoryinitRequestMain/index.ts new file mode 100644 index 0000000..1cab338 --- /dev/null +++ b/src/api/wms/inventoryinitRequestMain/index.ts @@ -0,0 +1,94 @@ +import request from '@/config/axios' + +export interface InventoryinitRequestMainVO { + warehouseCode: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + requestTime: Date + dueTime: Date + departmentCode: string + status: string + updateTime: Date + updater: string + autoCommit: string + autoAgree: string + autoExecute: string + directCreateRecord: string +} + +// 查询库存初始化申请主列表 +export const getInventoryinitRequestMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/inventoryinit-request-main/senior', data }) + } else { + return await request.get({ url: `/wms/inventoryinit-request-main/page`, params }) + } +} + +// 查询库存初始化申请主详情 +export const getInventoryinitRequestMain = async (id: number) => { + return await request.get({ url: `/wms/inventoryinit-request-main/get?id=` + id }) +} + +// 新增库存初始化申请主 +export const createInventoryinitRequestMain = async (data: InventoryinitRequestMainVO) => { + return await request.post({ url: `/wms/inventoryinit-request-main/create`, data }) +} + +// 修改库存初始化申请主 +export const updateInventoryinitRequestMain = async (data: InventoryinitRequestMainVO) => { + return await request.put({ url: `/wms/inventoryinit-request-main/update`, data }) +} +// 关闭库存初始化申请主 Excel +export const closeInventoryinitRequestMain = async (id) => { + return await request.put({ url: `/wms/inventoryinit-request-main/close?id=` + id }) +} +// 重新添加库存初始化申请主 Excel +export const reAddInventoryinitRequestMain = async (id) => { + return await request.put({ url: `/wms/inventoryinit-request-main/reAdd?id=` + id }) +} + +// 审批驳回库存初始化申请主 Excel +export const refusedInventoryinitRequestMain = async (id) => { + return await request.put({ url: `/wms/inventoryinit-request-main/refused?id=` + id }) +} + +// 审批通过库存初始化申请主 Excel +export const agreeInventoryinitRequestMain = async (id) => { + return await request.put({ url: `/wms/inventoryinit-request-main/agree?id=` + id }) +} + +// 提交库存初始化申请主 Excel +export const submitInventoryinitRequestMain = async (id) => { + return await request.put({ url: `/wms/inventoryinit-request-main/submit?id=` + id }) +} + +// 删除库存初始化申请主 +export const deleteInventoryinitRequestMain = async (id: number) => { + return await request.delete({ url: `/wms/inventoryinit-request-main/delete?id=` + id }) +} + +// 导出库存初始化申请主 Excel +export const exportInventoryinitRequestMain = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/inventoryinit-request-main/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/inventoryinit-request-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/inventoryinit-request-main/get-import-template' }) +} + +// 处理采购收货申请主 Excel +export const handleInventoryinitRequestMain = async (id) => { + return await request.put({ url: `/wms/inventoryinit-request-main/handle?id=` + id }) +} diff --git a/src/api/wms/inventorymoveJobDetail/index.ts b/src/api/wms/inventorymoveJobDetail/index.ts new file mode 100644 index 0000000..f3821de --- /dev/null +++ b/src/api/wms/inventorymoveJobDetail/index.ts @@ -0,0 +1,66 @@ +import request from '@/config/axios' + +export interface InventorymoveJobDetailVO { + itemCode: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + number: string + remark: string + createtime: Date + creator: string + packingNumber: string + containerNumber: string + batch: string + inventoryStatus: string + poNumber: string + poLine: string + fromLocationCode: string + toLocationCode: string + fromOwnerCode: string + toOwnerCode: string +} + +// 查询库存转移任务子列表 +export const getInventorymoveJobDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/inventorymove-job-detail/senior', data }) + } else { + return await request.get({ url: `/wms/inventorymove-job-detail/page`, params }) + } +} + +// 查询库存转移任务子详情 +export const getInventorymoveJobDetail = async (id: number) => { + return await request.get({ url: `/wms/inventorymove-job-detail/get?id=` + id }) +} + +// 新增库存转移任务子 +export const createInventorymoveJobDetail = async (data: InventorymoveJobDetailVO) => { + return await request.post({ url: `/wms/inventorymove-job-detail/create`, data }) +} + +// 修改库存转移任务子 +export const updateInventorymoveJobDetail = async (data: InventorymoveJobDetailVO) => { + return await request.put({ url: `/wms/inventorymove-job-detail/update`, data }) +} + +// 删除库存转移任务子 +export const deleteInventorymoveJobDetail = async (id: number) => { + return await request.delete({ url: `/wms/inventorymove-job-detail/delete?id=` + id }) +} + +// 导出库存转移任务子 Excel +export const exportInventorymoveJobDetail = async (params) => { + return await request.download({ url: `/wms/inventorymove-job-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/inventorymove-job-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/inventorymoveJobMain/index.ts b/src/api/wms/inventorymoveJobMain/index.ts new file mode 100644 index 0000000..11e2341 --- /dev/null +++ b/src/api/wms/inventorymoveJobMain/index.ts @@ -0,0 +1,192 @@ +import request from '@/config/axios' + +export interface InventorymoveJobMainVO { + requestNumber: string + useOnTheWayLocation: string + fromWarehouseCode: string + requestTime: Date + requestDueTime: Date + status: string + expiredTime: Date + updateTime: Date + updater: string + jobStageStatus: string + priority: number + priorityIncrement: number + departmentCode: string + acceptUserId: string + acceptTime: Date + completeUserId: string + completeTime: Date + fromAreaTypes: string + toAreaTypes: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + creatorName: string + toWarehouseCode: string + fromAreaCodes: string + toAreaCodes: string + autoComplete: string + allowModifyLocation: string + allowModifyQty: string + allowBiggerQty: string + allowSmallerQty: string + allowModifyInventoryStatus: string + allowContinuousScanning: string + allowPartialComplete: string + allowModifyBatch: string + allowModifyPackingNumber: string +} + +// 查询库存转移任务主列表 +export const getInventorymoveJobMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/inventorymove-job-main/senior', data }) + } else { + return await request.get({ url: `/wms/inventorymove-job-main/page`, params }) + } +} + +// 查询库存转移任务主详情 +export const getInventorymoveJobMain = async (id: number) => { + return await request.get({ url: `/wms/inventorymove-job-main/get?id=` + id }) +} + +// 新增库存转移任务主 +export const createInventorymoveJobMain = async (data: InventorymoveJobMainVO) => { + return await request.post({ url: `/wms/inventorymove-job-main/create`, data }) +} + +// 修改库存转移任务主 +export const updateInventorymoveJobMain = async (data: InventorymoveJobMainVO) => { + return await request.put({ url: `/wms/inventorymove-job-main/update`, data }) +} + +// 删除库存转移任务主 +export const deleteInventorymoveJobMain = async (id: number) => { + return await request.delete({ url: `/wms/inventorymove-job-main/delete?id=` + id }) +} + +// 导出库存转移任务主 Excel +export const exportInventorymoveJobMain = async (params) => { + params.businessType = 'Move' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/inventorymove-job-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/inventorymove-job-main/export-excel`, params }) + } +} + +// 导出合格转隔离任务主 Excel +export const exportOkToHoldJobMain = async (params) => { + params.businessType = 'OkToHold' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/inventorymove-job-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/inventorymove-job-main/export-excel`, params }) + } +} + +// 导出不合格转隔离任务主 Excel +export const exportNokToHoldJobMain = async (params) => { + params.businessType = 'NokToHold' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/inventorymove-job-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/inventorymove-job-main/export-excel`, params }) + } +} +// 导出隔离转合格任务主 Excel +export const exportHoldToOkJobMain = async (params) => { + params.businessType = 'HoldToOk' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/inventorymove-job-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/inventorymove-job-main/export-excel`, params }) + } +} + +// 导出隔离转线边任务主 Excel +export const exportHoldToWipJobMain = async (params) => { + params.businessType = 'HoldToWip' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/inventorymove-job-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/inventorymove-job-main/export-excel`, params }) + } +} + +// 导出隔离转报废任务主 Excel +export const exportHoldToScrapJobMain = async (params) => { + params.businessType = 'HoldToScrap' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/inventorymove-job-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/inventorymove-job-main/export-excel`, params }) + } +} + +// 导出合格转报废任务主 Excel +export const exportOkToScrapJobMain = async (params) => { + params.businessType = 'OkToScrap' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/inventorymove-job-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/inventorymove-job-main/export-excel`, params }) + } +} + +// 导出报废转隔离任务主 Excel +export const exportScrapToHoldJobMain = async (params) => { + params.businessType = 'ScrapToHold' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/inventorymove-job-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/inventorymove-job-main/export-excel`, params }) + } +} +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/inventorymove-job-main/get-import-template' }) +} + +// 承接库存转移任务 +export const acceptInventorymoveMain = async (id) => { + return await request.put({ url: `/wms/inventorymove-job-main/accept?id=` + id }) +} + +// 放弃库存转移任务 +export const abandonInventorymoveMain = async (id) => { + return await request.put({ url: `/wms/inventorymove-job-main/abandon?id=` + id }) +} + +// 关闭库存转移任务 +export const closeInventorymoveMain = async (id) => { + return await request.put({ url: `/wms/inventorymove-job-main/close?id=` + id }) +} + +// 执行库存转移任务 +export const executeInventorymoveMain = async (data) => { + return await request.put({ url: `/wms/inventorymove-job-main/execute`, data}) +} diff --git a/src/api/wms/inventorymoveRecordDetail/index.ts b/src/api/wms/inventorymoveRecordDetail/index.ts new file mode 100644 index 0000000..8becf54 --- /dev/null +++ b/src/api/wms/inventorymoveRecordDetail/index.ts @@ -0,0 +1,77 @@ +import request from '@/config/axios' + +export interface InventorymoveRecordDetailVO { + onTheWayLocationCode: string + fromOwnerCode: string + fromPackingNumber: string + fromContainerNumber: string + fromBatch: string + fromLocationCode: string + fromLocationGroupCode: string + fromAreaCode: string + fromInventoryStatus: string + toOwnerCode: string + toPackingNumber: string + toContainerNumber: string + toBatch: string + toLocationCode: string + toLocationGroupCode: string + toAreaCode: string + toInventoryStatus: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + code: string + interfaceType: string + number: string + itemCode: string + remark: string + createTime: Date + creator: string + jobDetailId: string +} + +// 查询库存转移记录子列表 +export const getInventorymoveRecordDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/inventorymove-record-detail/senior', data }) + } else { + return await request.get({ url: `/wms/inventorymove-record-detail/page`, params }) + } +} + +// 查询库存转移记录子详情 +export const getInventorymoveRecordDetail = async (id: number) => { + return await request.get({ url: `/wms/inventorymove-record-detail/get?id=` + id }) +} + +// 新增库存转移记录子 +export const createInventorymoveRecordDetail = async (data: InventorymoveRecordDetailVO) => { + return await request.post({ url: `/wms/inventorymove-record-detail/create`, data }) +} + +// 修改库存转移记录子 +export const updateInventorymoveRecordDetail = async (data: InventorymoveRecordDetailVO) => { + return await request.put({ url: `/wms/inventorymove-record-detail/update`, data }) +} + +// 删除库存转移记录子 +export const deleteInventorymoveRecordDetail = async (id: number) => { + return await request.delete({ url: `/wms/inventorymove-record-detail/delete?id=` + id }) +} + +// 导出库存转移记录子 Excel +export const exportInventorymoveRecordDetail = async (params) => { + return await request.download({ url: `/wms/inventorymove-record-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/inventorymove-record-detail/get-import-template' }) +} + diff --git a/src/api/wms/inventorymoveRecordMain/index.ts b/src/api/wms/inventorymoveRecordMain/index.ts new file mode 100644 index 0000000..79e6afd --- /dev/null +++ b/src/api/wms/inventorymoveRecordMain/index.ts @@ -0,0 +1,173 @@ +import request from '@/config/axios' + +export interface InventorymoveRecordMainVO { + requestNumber: string + jobNumber: string + useOnTheWayLocation: string + outTransactionType: string + inTransactionType: string + executeTime: Date + activeDate: Date + requestTime: Date + dueTime: Date + departmentCode: string + interfaceType: string + code: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + fromWarehouseCode: string + fromAreaTypes: string + fromAreaCodes: string + toWarehouseCode: string + toAreaTypes: string + toAreaCodes: string + available: string +} + +// 查询库存转移记录主列表 +export const getInventorymoveRecordMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/inventorymove-record-main/senior', data }) + } else { + return await request.get({ url: `/wms/inventorymove-record-main/page`, params }) + } +} + +// 查询库存转移记录主详情 +export const getInventorymoveRecordMain = async (id: number) => { + return await request.get({ url: `/wms/inventorymove-record-main/get?id=` + id }) +} + +// 新增库存转移记录主 +export const createInventorymoveRecordMain = async (data: InventorymoveRecordMainVO) => { + return await request.post({ url: `/wms/inventorymove-record-main/createMove`, data }) +} + +// 修改库存转移记录主 +export const updateInventorymoveRecordMain = async (data: InventorymoveRecordMainVO) => { + return await request.put({ url: `/wms/inventorymove-record-main/update`, data }) +} + +// 删除库存转移记录主 +export const deleteInventorymoveRecordMain = async (id: number) => { + return await request.delete({ url: `/wms/inventorymove-record-main/delete?id=` + id }) +} + +// 导出库存转移记录主 Excel +export const exportInventorymoveRecordMain = async (params) => { + params.businessType = 'Move' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/inventorymove-record-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/inventorymove-record-main/export-excel`, params }) + } +} + +// 导出合格转隔离记录主 Excel +export const exportOkToHoldRecordMain = async (params) => { + params.businessType = 'OkToHold' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/inventorymove-record-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/inventorymove-record-main/export-excel`, params }) + } +} +// 导出合格转隔离记录主 Excel +export const exportNokToHoldRecordMain = async (params) => { + params.businessType = 'NokToHold' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/inventorymove-record-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/inventorymove-record-main/export-excel`, params }) + } +} +// 导出隔离转合格记录主 Excel +export const exportHoldToOkRecordMain = async (params) => { + params.businessType = 'HoldToOk' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/inventorymove-record-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/inventorymove-record-main/export-excel`, params }) + } +} + +// 导出隔离转线边记录主 Excel +export const exportHoldToWipRecordMain = async (params) => { + params.businessType = 'HoldToWip' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/inventorymove-record-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/inventorymove-record-main/export-excel`, params }) + } +} + +// 导出隔离转报废记录主 Excel +export const exportHoldToScrapRecordMain = async (params) => { + params.businessType = 'HoldToScrap' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/inventorymove-record-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/inventorymove-record-main/export-excel`, params }) + } +} + +// 导出合格转报废记录主 Excel +export const exportOkToScrapRecordMain = async (params) => { + params.businessType = 'OkToScrap' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/inventorymove-record-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/inventorymove-record-main/export-excel`, params }) + } +} + +// 导出报废转隔离记录主 Excel +export const exportScrapToHoldRecordMain = async (params) => { + params.businessType = 'ScrapToHold' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/inventorymove-record-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/inventorymove-record-main/export-excel`, params }) + } +} +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/inventorymove-record-main/get-import-template' }) +} + +// 下载用户导入模板(除库存移动外) +export const importTemplateExceptMove = () => { + return request.download({ url: '/wms/inventorymove-record-main/get-import-template-exceptMove' }) +} + + +// 接收隔离收货 +export const receive = (id) => { + return request.put({ url: '/wms/inventorymove-record-main/receive?id=' + id }) +} + +// 拒收隔离收货 +export const refuse = (id) => { + return request.put({ url: '/wms/inventorymove-record-main/refuse?id=' + id }) +} diff --git a/src/api/wms/inventorymoveRequestDetail/index.ts b/src/api/wms/inventorymoveRequestDetail/index.ts new file mode 100644 index 0000000..26ad3a1 --- /dev/null +++ b/src/api/wms/inventorymoveRequestDetail/index.ts @@ -0,0 +1,70 @@ +import request from '@/config/axios' + +export interface InventorymoveRequestDetailVO { + fromOwnerCode: string + fromPackingNumber: string + fromContainerNumber: string + fromBatch: string + fromLocationCode: string + fromInventoryStatus: string + toOwnerCode: string + toPackingNumber: string + toContainerNumber: string + toBatch: string + toLocationCode: string + toInventoryStatus: string + number: string + remark: string + createTime: Date + creator: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + updateTime: Date + updater: string + itemCode: string +} + +// 查询库存转移申请子列表 +export const getInventorymoveRequestDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/inventorymove-request-detail/senior', data }) + } else { + return await request.get({ url: `/wms/inventorymove-request-detail/page`, params }) + } +} + +// 查询库存转移申请子详情 +export const getInventorymoveRequestDetail = async (id: number) => { + return await request.get({ url: `/wms/inventorymove-request-detail/get?id=` + id }) +} + +// 新增库存转移申请子 +export const createInventorymoveRequestDetail = async (data: InventorymoveRequestDetailVO) => { + return await request.post({ url: `/wms/inventorymove-request-detail/create`, data }) +} + +// 修改库存转移申请子 +export const updateInventorymoveRequestDetail = async (data: InventorymoveRequestDetailVO) => { + return await request.put({ url: `/wms/inventorymove-request-detail/update`, data }) +} + +// 删除库存转移申请子 +export const deleteInventorymoveRequestDetail = async (id: number) => { + return await request.delete({ url: `/wms/inventorymove-request-detail/delete?id=` + id }) +} + +// 导出库存转移申请子 Excel +export const exportInventorymoveRequestDetail = async (params) => { + return await request.download({ url: `/wms/inventorymove-request-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/inventorymove-request-detail/get-import-template' }) +} diff --git a/src/api/wms/inventorymoveRequestMain/index.ts b/src/api/wms/inventorymoveRequestMain/index.ts new file mode 100644 index 0000000..2bcac86 --- /dev/null +++ b/src/api/wms/inventorymoveRequestMain/index.ts @@ -0,0 +1,182 @@ +import request from '@/config/axios' + +export interface InventorymoveRequestMainVO { + number: string + businessType: string + remark: string + createTime: Date + creator: string + requestTime: Date + dueTime: Date + departmentCode: string + status: string + updateTime: Date + updater: string + fromWarehouseOde: string + fromAreaTypes: string + fromAreaCodes: string + toWarehouseCode: string + toAreaTypes: string + toAreaCodes: string + useOnTheWayLocation: string + autoCommit: string + autoAgree: string + autoExecute: string + directCreateRecord: string +} + +// 查询库存转移申请主列表 +export const getInventorymoveRequestMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/inventorymove-request-main/senior', data }) + } else { + return await request.get({ url: `/wms/inventorymove-request-main/page`, params }) + } +} + +// 查询库存转移申请主详情 +export const getInventorymoveRequestMain = async (id: number) => { + return await request.get({ url: `/wms/inventorymove-request-main/get?id=` + id }) +} + +// 新增库存转移申请主 +export const createInventorymoveRequestMain = async (data: InventorymoveRequestMainVO) => { + return await request.post({ url: `/wms/inventorymove-request-main/create`, data }) +} + +// 修改库存转移申请主 +export const updateInventorymoveRequestMain = async (data: InventorymoveRequestMainVO) => { + return await request.put({ url: `/wms/inventorymove-request-main/update`, data }) +} + +// 删除库存转移申请主 +export const deleteInventorymoveRequestMain = async (id: number) => { + return await request.delete({ url: `/wms/inventorymove-request-main/delete?id=` + id }) +} + +// 导出库存转移申请主 Excel +export const exportInventorymoveRequestMain = async (params) => { + params.businessType = 'Move' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/inventorymove-request-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/inventorymove-request-main/export-excel`, params }) + } +} + +// 导出合格转隔离申请主 Excel +export const exportOkToHoldRequestMain = async (params) => { + params.businessType = 'OkToHold' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/inventorymove-request-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/inventorymove-request-main/export-excel`, params }) + } +} + +// 导出隔离转合格申请主 Excel +export const exportHoldToOkRequestMain = async (params) => { + params.businessType = 'HoldToOk' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/inventorymove-request-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/inventorymove-request-main/export-excel`, params }) + } +} + +export const exportHoldToWipRequestMain = async (params) => { + params.businessType = 'HoldToWip' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/inventorymove-request-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/inventorymove-request-main/export-excel`, params }) + } +} + +// 导出隔离转报废申请主 Excel +export const exportHoldToScrapRequestMain = async (params) => { + params.businessType = 'HoldToScrap' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/inventorymove-request-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/inventorymove-request-main/export-excel`, params }) + } +} + +// 导出合格转报废申请主 Excel +export const exportOkToScrapRequestMain = async (params) => { + params.businessType = 'OkToScrap' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/inventorymove-request-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/inventorymove-request-main/export-excel`, params }) + } +} + +// 导出报废转隔离申请主 Excel +export const exportScrapToHoldRequestMain = async (params) => { + params.businessType = 'ScrapToHold' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/inventorymove-request-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/inventorymove-request-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +// 下载用户导入模板(除库存移动外) +export const importTemplate = () => { + return request.download({ url: '/wms/inventorymove-request-main/get-import-template' }) +} +export const importTemplateHoldOk = () => { + return request.download({ url: '/wms/inventorymove-request-main/get-import-template-hold-ok' }) +} +export const importTemplateExceptMove = () => { + return request.download({ url: '/wms/inventorymove-request-main/get-import-template-exceptMove' }) +} + +// 关闭 +export const close = (id) => { + return request.put({ url: '/wms/inventorymove-request-main/close?id=' + id }) +} + +// 重新添加 +export const reAdd = (id) => { + return request.put({ url: '/wms/inventorymove-request-main/reAdd?id=' + id }) +} + +// 提交审批 +export const submit = (id) => { + return request.put({ url: '/wms/inventorymove-request-main/submit?id=' + id }) +} + +// 驳回 +export const refused = (id) => { + return request.put({ url: '/wms/inventorymove-request-main/refused?id=' + id }) +} + +// 审批通过 +export const agree = (id) => { + return request.put({ url: '/wms/inventorymove-request-main/agree?id=' + id }) +} + +// 处理 +export const handle = (id) => { + return request.put({ url: '/wms/inventorymove-request-main/handle?id=' + id }) +} diff --git a/src/api/wms/invoicingcalendar/index.ts b/src/api/wms/invoicingcalendar/index.ts new file mode 100644 index 0000000..fe8ee7e --- /dev/null +++ b/src/api/wms/invoicingcalendar/index.ts @@ -0,0 +1,54 @@ +import request from '@/config/axios' + +export interface InvoicingcalendarVO { + id: number + beginDay: string + endDay: string + descriiption: string + available: string + remark: string + extraProperties: string + concurrencyStamp: number + siteId: string +} + +// 查询开票日历列表 +export const getInvoicingcalendarPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/invoicingcalendar/senior', data }) + } else { + return await request.get({ url: `/wms/invoicingcalendar/page`, params }) + } +} + +// 查询开票日历详情 +export const getInvoicingcalendar = async (id: number) => { + return await request.get({ url: `/wms/invoicingcalendar/get?id=` + id }) +} + +// 新增开票日历 +export const createInvoicingcalendar = async (data: InvoicingcalendarVO) => { + return await request.post({ url: `/wms/invoicingcalendar/create`, data }) +} + +// 修改开票日历 +export const updateInvoicingcalendar = async (data: InvoicingcalendarVO) => { + return await request.put({ url: `/wms/invoicingcalendar/update`, data }) +} + +// 删除开票日历 +export const deleteInvoicingcalendar = async (id: number) => { + return await request.delete({ url: `/wms/invoicingcalendar/delete?id=` + id }) +} + +// 导出开票日历 Excel +export const exportInvoicingcalendar = async (params) => { + return await request.download({ url: `/wms/invoicingcalendar/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/invoicingcalendar/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/issueJobDetail/index.ts b/src/api/wms/issueJobDetail/index.ts new file mode 100644 index 0000000..ab43085 --- /dev/null +++ b/src/api/wms/issueJobDetail/index.ts @@ -0,0 +1,71 @@ +import request from '@/config/axios' + +export interface IssueJobDetailVO { + productionLineCode: string + workStationCode: string + inventoryStatus: string + onTheWayLocationCode: string + packingNumber: string + containerNumber: string + batch: string + fromLocationCode: string + toLocationCode: string + itemCode: string + itemName: string + itemDesc1: string + itemDesc2: string + packQty: number + packUnit: string + supplierQty: number + supplierUom: string + projectCode: string + qty: number + uom: string + number: string + remark: string + createTime: Date + creator: string + fromOwnerCode: string + toOwnerCode: string +} + +// 查询发料任务子列表 +export const getIssueJobDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/issue-job-detail/senior', data }) + } else { + return await request.get({ url: `/wms/issue-job-detail/page`, params }) + } +} + +// 查询发料任务子详情 +export const getIssueJobDetail = async (id: number) => { + return await request.get({ url: `/wms/issue-job-detail/get?id=` + id }) +} + +// 新增发料任务子 +export const createIssueJobDetail = async (data: IssueJobDetailVO) => { + return await request.post({ url: `/wms/issue-job-detail/create`, data }) +} + +// 修改发料任务子 +export const updateIssueJobDetail = async (data: IssueJobDetailVO) => { + return await request.put({ url: `/wms/issue-job-detail/update`, data }) +} + +// 删除发料任务子 +export const deleteIssueJobDetail = async (id: number) => { + return await request.delete({ url: `/wms/issue-job-detail/delete?id=` + id }) +} + +// 导出发料任务子 Excel +export const exportIssueJobDetail = async (params) => { + return await request.download({ url: `/wms/issue-job-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/issue-job-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/issueJobMain/index.ts b/src/api/wms/issueJobMain/index.ts new file mode 100644 index 0000000..0ae3e11 --- /dev/null +++ b/src/api/wms/issueJobMain/index.ts @@ -0,0 +1,110 @@ +import request from '@/config/axios' + +export interface IssueJobMainVO { + requestNumber: string + workShopCode: string + fromWarehouseCode: string + toWarehouseCode: string + requestTime: Date + requestDueTime: Date + status: string + expiredTime: Date + updateTime: Date + updater: string + jobStageStatus: string + priority: number + priorityIncrement: number + departmentCode: string + acceptUserId: string + acceptTime: Date + completeUserName: string + completeTime: Date + fromAreaTypes: string + toAreaTypes: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + fromAreaCodes: string + toAreaCodes: string + useOnTheWayLocation: string + autoComplete: string + allowModifyLocation: string + allowModifyQty: string + allowBiggerQty: string + allowSmallerQty: string + allowModifyInventoryStatus: string + allowContinuousScanning: string + allowPartialComplete: string + allowModifyPackingNumber: string + allowModifyBatch: string +} + +// 查询发料任务主列表 +export const getIssueJobMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/issue-job-main/senior', data }) + } else { + return await request.get({ url: `/wms/issue-job-main/page`, params }) + } +} + +// 查询发料任务主详情 +export const getIssueJobMain = async (id: number) => { + return await request.get({ url: `/wms/issue-job-main/get?id=` + id }) +} + +// 新增发料任务主 +export const createIssueJobMain = async (data: IssueJobMainVO) => { + return await request.post({ url: `/wms/issue-job-main/create`, data }) +} + +// 修改发料任务主 +export const updateIssueJobMain = async (data: IssueJobMainVO) => { + return await request.put({ url: `/wms/issue-job-main/update`, data }) +} + +// 删除发料任务主 +export const deleteIssueJobMain = async (id: number) => { + return await request.delete({ url: `/wms/issue-job-main/delete?id=` + id }) +} + +// 导出发料任务主 Excel +export const exportIssueJobMain = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/issue-job-main/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/issue-job-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/issue-job-main/get-import-template' }) +} + +// 承接发料任务 +export const acceptIssueMain = async (id) => { + return await request.put({ url: `/wms/issue-job-main/accept?id=` + id }) +} + +// 放弃发料任务 +export const abandonIssueMain = async (id) => { + return await request.put({ url: `/wms/issue-job-main/abandon?id=` + id }) +} + +// 关闭发料任务 +export const closeIssueMain = async (id) => { + return await request.put({ url: `/wms/issue-job-main/close?id=` + id }) +} + +// 执行发料任务 +export const executeIssueMain = async (data) => { + return await request.put({ url: `/wms/issue-job-main/execute`, data}) +} + + diff --git a/src/api/wms/issueRecordDetail/index.ts b/src/api/wms/issueRecordDetail/index.ts new file mode 100644 index 0000000..ba5498b --- /dev/null +++ b/src/api/wms/issueRecordDetail/index.ts @@ -0,0 +1,77 @@ +import request from '@/config/axios' + +export interface IssueRecordDetailVO { + productionLineCode: string + workStationCode: string + onTheWayLocationCode: string + inventoryStatus: string + fromOwnerCode: string + toOwnerCode: string + fromPackingNumber: string + toPackingNumber: string + fromContainerNumber: string + toContainerNumber: string + fromBatch: string + toBatch: string + fromLocationCode: string + toLocationCode: string + fromLocationGroupCode: string + toLocationGroupCode: string + fromAreaCode: string + toAreaCode: string + number: string + itemCode: string + remark: string + createTime: Date + creator: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + code: string + interfaceType: string + jobDetailId: string +} + +// 查询发料记录子列表 +export const getIssueRecordDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/issue-record-detail/senior', data }) + } else { + return await request.get({ url: `/wms/issue-record-detail/page`, params }) + } +} + +// 查询发料记录子详情 +export const getIssueRecordDetail = async (id: number) => { + return await request.get({ url: `/wms/issue-record-detail/get?id=` + id }) +} + +// 新增发料记录子 +export const createIssueRecordDetail = async (data: IssueRecordDetailVO) => { + return await request.post({ url: `/wms/issue-record-detail/create`, data }) +} + +// 修改发料记录子 +export const updateIssueRecordDetail = async (data: IssueRecordDetailVO) => { + return await request.put({ url: `/wms/issue-record-detail/update`, data }) +} + +// 删除发料记录子 +export const deleteIssueRecordDetail = async (id: number) => { + return await request.delete({ url: `/wms/issue-record-detail/delete?id=` + id }) +} + +// 导出发料记录子 Excel +export const exportIssueRecordDetail = async (params) => { + return await request.download({ url: `/wms/issue-record-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/issue-record-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/issueRecordMain/index.ts b/src/api/wms/issueRecordMain/index.ts new file mode 100644 index 0000000..6348932 --- /dev/null +++ b/src/api/wms/issueRecordMain/index.ts @@ -0,0 +1,75 @@ +import request from '@/config/axios' + +export interface IssueRecordMainVO { + requestNumber: string + jobNumber: string + workshopCode: string + outTransactionType: string + inTransactionType: string + executeTime: Date + activeDate: Date + requestTime: Date + dueTime: Date + departmentCode: string + interfaceType: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + code: string + fromWarehouseCode: string + fromAreaTypes: string + fromAreaCodes: string + toWarehouseCode: string + toAreaTypes: string + toAreaCodes: string + useOnTheWayLocation: string + available: string +} + +// 查询发料记录主列表 +export const getIssueRecordMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/issue-record-main/senior', data }) + } else { + return await request.get({ url: `/wms/issue-record-main/page`, params }) + } +} + +// 查询发料记录主详情 +export const getIssueRecordMain = async (id: number) => { + return await request.get({ url: `/wms/issue-record-main/get?id=` + id }) +} + +// 新增发料记录主 +export const createIssueRecordMain = async (data: IssueRecordMainVO) => { + return await request.post({ url: `/wms/issue-record-main/create`, data }) +} + +// 修改发料记录主 +export const updateIssueRecordMain = async (data: IssueRecordMainVO) => { + return await request.put({ url: `/wms/issue-record-main/update`, data }) +} + +// 删除发料记录主 +export const deleteIssueRecordMain = async (id: number) => { + return await request.delete({ url: `/wms/issue-record-main/delete?id=` + id }) +} + +// 导出发料记录主 Excel +export const exportIssueRecordMain = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/issue-record-main/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/issue-record-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/issue-record-main/get-import-template' }) +} diff --git a/src/api/wms/issueRequestDetail/index.ts b/src/api/wms/issueRequestDetail/index.ts new file mode 100644 index 0000000..19ce656 --- /dev/null +++ b/src/api/wms/issueRequestDetail/index.ts @@ -0,0 +1,67 @@ +import request from '@/config/axios' + +export interface IssueRequestDetailVO { + productionLineCode: string + workStationCode: string + inventoryStatus: string + packingNumber: string + containerNumber: string + batch: string + toLocationCode: string + number: string + itemCode: string + remark: string + createTime: Date + creator: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + updateTime: Date + updater: string + fromOwnerCode: string + toOwnerCode: string +} + +// 查询发料申请子列表 +export const getIssueRequestDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/issue-request-detail/senior', data }) + } else { + return await request.get({ url: `/wms/issue-request-detail/page`, params }) + } +} + +// 查询发料申请子详情 +export const getIssueRequestDetail = async (id: number) => { + return await request.get({ url: `/wms/issue-request-detail/get?id=` + id }) +} + +// 新增发料申请子 +export const createIssueRequestDetail = async (data: IssueRequestDetailVO) => { + return await request.post({ url: `/wms/issue-request-detail/create`, data }) +} + +// 修改发料申请子 +export const updateIssueRequestDetail = async (data: IssueRequestDetailVO) => { + return await request.put({ url: `/wms/issue-request-detail/update`, data }) +} + +// 删除发料申请子 +export const deleteIssueRequestDetail = async (id: number) => { + return await request.delete({ url: `/wms/issue-request-detail/delete?id=` + id }) +} + +// 导出发料申请子 Excel +export const exportIssueRequestDetail = async (params) => { + return await request.download({ url: `/wms/issue-request-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/issue-request-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/issueRequestMain/index.ts b/src/api/wms/issueRequestMain/index.ts new file mode 100644 index 0000000..b319da3 --- /dev/null +++ b/src/api/wms/issueRequestMain/index.ts @@ -0,0 +1,111 @@ +import request from '@/config/axios' + +export interface IssueRequestMainVO { + workshopCode: string + fromWarehouseCode: string + toWarehouseCode: string + fromAreaTypes: string + toAreaTypes: string + fromAreaCodes: string + toAreaCodes: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + requestTime: Date + dueTime: Date + departmentCode: string + status: string + updateTime: Date + updater: string + useOnTheWayLocation: string + autoCommit: string + autoAgree: string + autoExecute: string + directCreateRecord: string +} + +// 查询发料申请主列表 +export const getIssueRequestMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/issue-request-main/senior', data }) + } else { + return await request.get({ url: `/wms/issue-request-main/page`, params }) + } +} + +// 查询发料申请主详情 +export const getIssueRequestMain = async (id: number) => { + return await request.get({ url: `/wms/issue-request-main/get?id=` + id }) +} + +// 新增发料申请主 +export const createIssueRequestMain = async (data: IssueRequestMainVO) => { + return await request.post({ url: `/wms/issue-request-main/create`, data }) +} + +// 新增PDA发料申请主 +export const createIssueRequestMainSetInterval = async (data: IssueRequestMainVO) => { + return await request.post({ url: `/wms/issue-request-main/createPDA`, data }) +} + +// 修改发料申请主 +export const updateIssueRequestMain = async (data: IssueRequestMainVO) => { + return await request.put({ url: `/wms/issue-request-main/update`, data }) +} + +// 删除发料申请主 +export const deleteIssueRequestMain = async (id: number) => { + return await request.delete({ url: `/wms/issue-request-main/delete?id=` + id }) +} +// 获取默认包装规格 +export const getPackUnit = async (data) => { + return await request.post({ url: `/wms/issue-request-main/getPackUnit`, data }) +} +// 导出发料申请主 Excel +export const exportIssueRequestMain = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/issue-request-main/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/issue-request-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/issue-request-main/get-import-template' }) +} + +// 关闭 +export const close = (id) => { + return request.put({ url: '/wms/issue-request-main/close?id=' + id }) +} + +// 重新添加 +export const reAdd = (id) => { + return request.put({ url: '/wms/issue-request-main/reAdd?id=' + id }) +} + +// 提交审批 +export const submit = (id) => { + return request.put({ url: '/wms/issue-request-main/submit?id=' + id }) +} + +// 驳回 +export const refused = (id) => { + return request.put({ url: '/wms/issue-request-main/refused?id=' + id }) +} + +// 审批通过 +export const agree = (id) => { + return request.put({ url: '/wms/issue-request-main/agree?id=' + id }) +} + +// 处理 +export const handle = (id) => { + return request.put({ url: '/wms/issue-request-main/handle?id=' + id }) +} diff --git a/src/api/wms/itemarea/index.ts b/src/api/wms/itemarea/index.ts new file mode 100644 index 0000000..bf49737 --- /dev/null +++ b/src/api/wms/itemarea/index.ts @@ -0,0 +1,69 @@ +import request from '@/config/axios' + +export interface ItemareaVO { + id: number + itemCode: string + areaCode: string + inPackUnit: string + outPackUnit: string + maxQty: number + minQty: number + safeQty: number + autoRepleinsh: string + repleinshFromArea: string + repleinshQty: number + needReceive: string + available: string + activeTime: Date + expireTime: Date + remark: string + manageMode: string + newlyToOutpackunit: string + surplusToOutpackunit: string +} + +// 查询物料库区配置列表 +export const getItemareaPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/itemarea/senior', data }) + } else { + return await request.get({ url: `/wms/itemarea/page`, params }) + } +} + +// 查询物料库区配置详情 +export const getItemarea = async (id: number) => { + return await request.get({ url: `/wms/itemarea/get?id=` + id }) +} + +// 新增物料库区配置 +export const createItemarea = async (data: ItemareaVO) => { + return await request.post({ url: `/wms/itemarea/create`, data }) +} + +// 修改物料库区配置 +export const updateItemarea = async (data: ItemareaVO) => { + return await request.put({ url: `/wms/itemarea/update`, data }) +} + +// 删除物料库区配置 +export const deleteItemarea = async (id: number) => { + return await request.delete({ url: `/wms/itemarea/delete?id=` + id }) +} + +// 导出物料库区配置 Excel +export const exportItemarea = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/itemarea/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/itemarea/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/itemarea/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/itemareaDetail/index.ts b/src/api/wms/itemareaDetail/index.ts new file mode 100644 index 0000000..1b0cfcd --- /dev/null +++ b/src/api/wms/itemareaDetail/index.ts @@ -0,0 +1,50 @@ +import request from '@/config/axios' + +export interface ItemareaDetailVO { + id: number + masterId: number + remark: string + locationGroup: string + locationCode: string +} + +// 查询物料库区配置表子列表 +export const getItemareaDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/itemarea-detail/senior', data }) + } else { + return await request.get({ url: `/wms/itemarea-detail/page`, params }) + } +} + +// 查询物料库区配置表子详情 +export const getItemareaDetail = async (id: number) => { + return await request.get({ url: `/wms/itemarea-detail/get?id=` + id }) +} + +// 新增物料库区配置表子 +export const createItemareaDetail = async (data: ItemareaDetailVO) => { + return await request.post({ url: `/wms/itemarea-detail/create`, data }) +} + +// 修改物料库区配置表子 +export const updateItemareaDetail = async (data: ItemareaDetailVO) => { + return await request.put({ url: `/wms/itemarea-detail/update`, data }) +} + +// 删除物料库区配置表子 +export const deleteItemareaDetail = async (id: number) => { + return await request.delete({ url: `/wms/itemarea-detail/delete?id=` + id }) +} + +// 导出物料库区配置表子 Excel +export const exportItemareaDetail = async (params) => { + return await request.download({ url: `/wms/itemarea-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/itemarea-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/itembasic/index.ts b/src/api/wms/itembasic/index.ts new file mode 100644 index 0000000..5256121 --- /dev/null +++ b/src/api/wms/itembasic/index.ts @@ -0,0 +1,127 @@ +import request from '@/config/axios' + +export interface ItembasicVO { + code: string + name: string + desc1: string + desc2: string + status: string + uom: string + altUom: string + isStdPack: number + enableBuy: number + enableMake: number + enableOutsourcing: number + isRecycled: number + isPhantom: number + abcClass: string + type: string + category: string + itemGroup: string + color: string + configuration: string + project: string + eqLevel: string + validityDays: number + available: number + activeTime: Date + expireTime: Date + remark: string +} + +// 查询物料基本信息列表 +export const getItembasicPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/itembasic/senior', data }) + } else { + return await request.get({ url: `/wms/itembasic/page`, params }) + } +} +// 查询物料基本信息列表 +export const getItembasicList = async (params) => { + return await request.get({ url: `/wms/itembasic/list`, params }) +} +// 查询物料基本信息详情 +export const getItembasic = async (id: number) => { + return await request.get({ url: `/wms/itembasic/get?id=` + id }) +} + +// 新增物料基本信息 +export const createItembasic = async (data: ItembasicVO) => { + return await request.post({ url: `/wms/itembasic/create`, data }) +} + +// 修改物料基本信息 +export const updateItembasic = async (data: ItembasicVO) => { + return await request.put({ url: `/wms/itembasic/update`, data }) +} + +// 删除物料基本信息 +export const deleteItembasic = async (id: number) => { + return await request.delete({ url: `/wms/itembasic/delete?id=` + id }) +} + +// 导出物料基本信息 Excel +export const exportItembasic = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/itembasic/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/itembasic/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/itembasic/get-import-template' }) +} +// 导入地址 +export const importUrl = '/wms/itembasic/import' + +// 查询物料类型为成品/半成品的信息列表 +export const selectItembasicPageToFgAndSemibasicPage = async (params) => { + if (params.isSearch) { + const data = {...params} + return request.post({ url: '/wms/itembasic/itembasicPageToFgAndSemiSenior', data }) + } else { + return await request.get({ url: `/wms/itembasic/itembasicPageToFgAndSemi`, params }) + } +} + +// 查询物料类型为原料/半成品的信息列表 +export const selectTypeToItembasic = async (params) => { + if (params.isSearch) { + const data = {...params} + return request.post({ url: '/wms/itembasic/pageTypeToItembasicSenior', data }) + } else { + return await request.get({ url: `/wms/itembasic/pageTypeToItembasic`, params }) + } +} + +// 查询物料类型为器具的信息列表 +export const selectConfigToItembasic = async (params) => { + if (params.isSearch) { + const data = {...params} + return request.post({ url: '/wms/itembasic/pageConfigToItembasicSenior', data }) + } else { + return await request.get({ url: `/wms/itembasic/pageConfigToItembasic`, params }) + } +} + +// 根据物料代码查计量单位 +export const getQueryItemCodeInfo = async (data) => { + return await request.post({ url: 'wms/itembasic/queryItemCodeInfo', data }) +} +// 根据code获取数据列表 +export const getItemListByCodes = async (params) => { + return await request.get({ url: `/wms/itembasic/listByCodes`,params}) +} + +// 根据cood查询器具物料信息 +export const selectContainermanageItemCode = async (params) => { + const code = params.codes + console.log(2344,code) + return await request.get({ url: `/wms/itembasic/selectContainermanageItemCode?code=${code}`}) +} diff --git a/src/api/wms/itempackage/index.ts b/src/api/wms/itempackage/index.ts new file mode 100644 index 0000000..9fa24c8 --- /dev/null +++ b/src/api/wms/itempackage/index.ts @@ -0,0 +1,122 @@ +import request from '@/config/axios' + +export interface ItempackagingVO { + itemCode: string + uom: string + packUnit: string + packQty: number + altPackUnit1: string + altPackQty1: number + altPackUnit2: string + altPackQty2: number + altPackUnit3: string + altPackQty3: number + altPackUnit4: string + altPackQty4: number + available: number + activeTime: Date + expireTime: Date + remark: string +} + +// 查询物料包装信息 列表 +export const getItempackagingPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/itempackage/senior', data }) + } else { + return await request.get({ url: `/wms/itempackage/page`, params }) + } +} +// 查询物料包装信息树形列表 +export const getItempackagingPageTree = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/itempackage/seniorTree', data }) + } else { + return await request.get({ url: `/wms/itempackage/pageTree`, params }) + } +} +// 查询物料包装信息树形列表 +export const getItempackagingPageTreeSCP = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/itempackage/seniorTreeSCP', data }) + } else { + return await request.get({ url: `/wms/itempackage/pageTreeSCP`, params }) + } +} +// 查询物料包装信息 列表--供应商发货申请 +export const getItempackagingPageBySupplierdeliver = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/wms/itempackage/seniorBySupplierdeliver', data }) + } else { + return await request.get({ url: `/wms/itempackage/pageBySupplierdeliver`, params }) + } +} + +// 查询物料包装信息 列表--客户退货申请 +export const getItempackagingPageByCustomerreturn = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/wms/itempackage/seniorByCustomerreturn', data }) + } else { + return await request.get({ url: `/wms/itempackage/pageByCustomerreturn`, params }) + } +} + +// 查询物料包装信息 列表--制品收货申请 +export const getItempackagingPageByProductreceipt = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/wms/itempackage/seniorByProductreceipt', data }) + } else { + return await request.get({ url: `/wms/itempackage/pageByProductreceipt`, params }) + } +} + + +// 查询物料包装信息 详情 +export const getItempackaging = async (id: number) => { + return await request.get({ url: `/wms/itempackage/get?id=` + id }) +} + +// 新增物料包装信息 +export const createItempackaging = async (data: ItempackagingVO) => { + return await request.post({ url: `/wms/itempackage/create`, data }) +} + +// 修改物料包装信息 +export const updateItempackaging = async (data: ItempackagingVO) => { + return await request.put({ url: `/wms/itempackage/update`, data }) +} + +// 删除物料包装信息 +export const deleteItempackaging = async (id: number) => { + return await request.delete({ url: `/wms/itempackage/delete?id=` + id }) +} + +// 导出物料包装信息 Excel +export const exportItempackaging = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/itempackage/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/itempackage/export-excel`, params }) + } +} +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/itempackage/get-import-template' }) +} +// 根据code获取数据列表 +export const getItemPackageunitListByCodes = async (data) => { + return await request.get({ url: `/wms/itempackage/listByCodes?itemCode=` + data.itemCode + '&packUnit='+data.packUnit}) +} diff --git a/src/api/wms/itemwarehouse/index.ts b/src/api/wms/itemwarehouse/index.ts new file mode 100644 index 0000000..85ea4ba --- /dev/null +++ b/src/api/wms/itemwarehouse/index.ts @@ -0,0 +1,59 @@ +import request from '@/config/axios' + +export interface ItemwarehouseVO { + id: number + itemCode: string + warehouseCode: string + manageMode: string + packUnit: string + available: string + activeTime: Date + expireTime: Date + remark: string +} + +// 查询物料仓库默认配置列表 +export const getItemwarehousePage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/itemwarehouse/senior', data }) + } else { + return await request.get({ url: `/wms/itemwarehouse/page`, params }) + } +} + +// 查询物料仓库默认配置详情 +export const getItemwarehouse = async (id: number) => { + return await request.get({ url: `/wms/itemwarehouse/get?id=` + id }) +} + +// 新增物料仓库默认配置 +export const createItemwarehouse = async (data: ItemwarehouseVO) => { + return await request.post({ url: `/wms/itemwarehouse/create`, data }) +} + +// 修改物料仓库默认配置 +export const updateItemwarehouse = async (data: ItemwarehouseVO) => { + return await request.put({ url: `/wms/itemwarehouse/update`, data }) +} + +// 删除物料仓库默认配置 +export const deleteItemwarehouse = async (id: number) => { + return await request.delete({ url: `/wms/itemwarehouse/delete?id=` + id }) +} + +// 导出物料仓库默认配置 Excel +export const exportItemwarehouse = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/itemwarehouse/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/itemwarehouse/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/itemwarehouse/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/jobsetting/index.ts b/src/api/wms/jobsetting/index.ts new file mode 100644 index 0000000..c7807e0 --- /dev/null +++ b/src/api/wms/jobsetting/index.ts @@ -0,0 +1,62 @@ +import request from '@/config/axios' + +export interface JobsettingVO { + code: string + validMinutes: number + activeTime: Date + remark: string + autoComplete: string + allowModifyLocation: string + allowModifyQty: string + allowBiggerQty: string + allowSmallerQty: string + allowModifyInventoryStatus: string + allowContinuousScanning: string + allowPartialComplete: string + allowModifyBach: string + allowModifyPackingNumber: string + available: string + isSoftDeleted: string + expireTime: Date +} + +// 查询任务设置列表 +export const getJobsettingPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/wms/jobsetting/senior', data }) + } else { + return await request.get({ url: `/wms/jobsetting/page`, params }) + } +} + +// 查询任务设置详情 +export const getJobsetting = async (id: number) => { + return await request.get({ url: `/wms/jobsetting/get?id=` + id }) +} + +// 新增任务设置 +export const createJobsetting = async (data: JobsettingVO) => { + return await request.post({ url: `/wms/jobsetting/create`, data }) +} + +// 修改任务设置 +export const updateJobsetting = async (data: JobsettingVO) => { + return await request.put({ url: `/wms/jobsetting/update`, data }) +} + +// 删除任务设置 +export const deleteJobsetting = async (id: number) => { + return await request.delete({ url: `/wms/jobsetting/delete?id=` + id }) +} + +// 导出任务设置 Excel +export const exportJobsetting = async (params) => { + return await request.download({ url: `/wms/jobsetting/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/jobsetting/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/labeltype/index.ts b/src/api/wms/labeltype/index.ts new file mode 100644 index 0000000..148a1b9 --- /dev/null +++ b/src/api/wms/labeltype/index.ts @@ -0,0 +1,58 @@ +import request from '@/config/axios' + +export interface LabeltypeVO { + id: number + labelType: string + description: string + dataProtocol: string + splitMehod: string + header: string + version: string + separators: string + validateMethod: string + validateNumber: number + encyptEthod: string + compressMethod: string + templateName: string + templateFile: string + barcodeSegments: string + labelCode: string + isEncypt: string + isCompress: string +} + +// 查询标签定义列表 +export const getLabeltypePage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/labeltype/senior', data }) + } else { + return await request.get({ url: `/wms/labeltype/page`, params }) + } +} + +// 查询标签定义详情 +export const getLabeltype = async (id: number) => { + return await request.get({ url: `/wms/labeltype/get?id=` + id }) +} + +// 新增标签定义 +export const createLabeltype = async (data: LabeltypeVO) => { + return await request.post({ url: `/wms/labeltype/create`, data }) +} + +// 修改标签定义 +export const updateLabeltype = async (data: LabeltypeVO) => { + return await request.put({ url: `/wms/labeltype/update`, data }) +} + +// 删除标签定义 +export const deleteLabeltype = async (id: number) => { + return await request.delete({ url: `/wms/labeltype/delete?id=` + id }) +} + +// 导出标签定义 Excel +export const exportLabeltype = async (params) => { + return await request.download({ url: `/wms/labeltype/export-excel`, params }) +} diff --git a/src/api/wms/location/index.ts b/src/api/wms/location/index.ts new file mode 100644 index 0000000..4cde269 --- /dev/null +++ b/src/api/wms/location/index.ts @@ -0,0 +1,171 @@ +import request from '@/config/axios' + +export interface LocationVO { + code: string + name: string + description: string + warehouseCode: string + areaCode: string + locationGroupCode: string + erpLocationCode: string + type: string + aisle: string + shelf: string + locationRow: number + locationColum: number + pickPriority: number + maxWeight: number + maxArea: number + maxVolume: number + userGroupCode: string + available: number + activeTime: Date + expireTime: Date + remark: string +} + +// 查询库位列表 +export const getLocationPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/wms/location/senior', data }) + } else { + return await request.get({ url: `/wms/location/page`, params }) + } +} +// 校验库位 +export const verifyLocation = async (params) => { + return await request.get({ url: `/wms/location/listLocationByCode`, params }) +} +export const getLocationMPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/wms/location/Msenior', data }) + } else { + return await request.get({ url: `/wms/location/Mpage`, params }) + } +} + +export const getLocationPageRepleinsh = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/wms/location/getForRepleinshSenior', data }) + } else { + return await request.get({ url: `/wms/location/pageForRepleinsh`, params }) + } +} +// 查询库位所有列表 +export const getLocationList = async (params) => { + return await request.get({ url: `/wms/location/list`, params }) +} + +// 查询库位详情 +export const getLocation = async (id: number) => { + return await request.get({ url: `/wms/location/get?id=` + id }) +} + +// 新增库位 +export const createLocation = async (data: LocationVO) => { + return await request.post({ url: `/wms/location/create`, data }) +} + +// 修改库位 +export const updateLocation = async (data: LocationVO) => { + return await request.put({ url: `/wms/location/update`, data }) +} + +// 删除库位 +export const deleteLocation = async (id: number) => { + return await request.delete({ url: `/wms/location/delete?id=` + id }) +} + +// 根据业务类型以及库区查询库位列表 +export const getLocationListByAreaAndBusinesstype = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/wms/location/pageBusinessTypeToLocationSenior1', data }) + } else { + return await request.get({ url: `/wms/location/pageBusinessTypeToLocation1`, params }) + } +} + +// 导出库位 Excel +export const exportLocation = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/location/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/location/export-excel`, params }) + } + +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/location/get-import-template' }) +} + +export const selectBusinessTypeToLocation = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/location/pageBusinessTypeToLocationSenior', data }) + } else { + return request.get({ url: `/wms/location/pageBusinessTypeToLocation`, params }) + } +} + +export const selectBusinessTypeOutLocation = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/location/pageBusinessTypeOutLocationSenior', data }) + } else { + return request.get({ url: `/wms/location/pageBusinessTypeOutLocation`, params }) + } +} +export const selectBusinessTypeOutLocationAll = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/location/pageBusinessTypeOutLocationSeniorAll', data }) + } else { + return request.get({ url: `/wms/location/pageBusinessTypeOutLocationAll`, params }) + } +} + + +export const selectPageItemAreaToLocation = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/location/pageItemAreaToLocationSenior', data }) + } else { + return request.get({ url: `/wms/location/pageItemAreaToLocation`, params }) + } +} + + +export const selectConfigToLocation = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/location/pageConfigToLocationSenior', data }) + } else { + return request.get({ url: `/wms/location/pageConfigToLocation`, params }) + } +} +// 根据code获取数据列表 +export const getLocationByCodes = async (params) => { + return await request.get({ url: `/wms/location/listByCodes`, params }) +} + + +// 查询库位组列表 +export const getLocationByOverflowAreaTypeByConfig = async (params) => { + return await request.get({ url: `/wms/location/queryLocationByOverflowAreaTypeByConfig`, params }) +} \ No newline at end of file diff --git a/src/api/wms/locationcapacity/index.ts b/src/api/wms/locationcapacity/index.ts new file mode 100644 index 0000000..38d7039 --- /dev/null +++ b/src/api/wms/locationcapacity/index.ts @@ -0,0 +1,57 @@ +import request from '@/config/axios' + +export interface LocationcapacityVO { + locationCode: string + warehouseCode: string + usedCapacity: number + availableCapacity: number + bearableOverloadCapacity: number + isInfinity: string +} + +// 查询库位容量列表 +export const getLocationcapacityPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/locationcapacity/senior', data }) + } else { + return await request.get({ url: `/wms/locationcapacity/page`, params }) + } +} + +// 查询库位容量详情 +export const getLocationcapacity = async (id: number) => { + return await request.get({ url: `/wms/locationcapacity/get?id=` + id }) +} + +// 新增库位容量 +export const createLocationcapacity = async (data: LocationcapacityVO) => { + return await request.post({ url: `/wms/locationcapacity/create`, data }) +} + +// 修改库位容量 +export const updateLocationcapacity = async (data: LocationcapacityVO) => { + return await request.put({ url: `/wms/locationcapacity/update`, data }) +} + +// 删除库位容量 +export const deleteLocationcapacity = async (id: number) => { + return await request.delete({ url: `/wms/locationcapacity/delete?id=` + id }) +} + +// 导出库位容量 Excel +export const exportLocationcapacity = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/locationcapacity/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/locationcapacity/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/locationcapacity/get-import-template' }) +} diff --git a/src/api/wms/locationgroup/index.ts b/src/api/wms/locationgroup/index.ts new file mode 100644 index 0000000..7e84e6c --- /dev/null +++ b/src/api/wms/locationgroup/index.ts @@ -0,0 +1,72 @@ +import request from '@/config/axios' + +export interface LocationgroupVO { + code: string + name: string + description: string + warehouseCode: string + areaCode: string + available: number + activeTime: Date + expireTime: Date + remark: string +} + +// 查询库位组列表 +export const getLocationgroupPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/wms/locationgroup/senior', data }) + } else { + return await request.get({ url: `/wms/locationgroup/page`, params }) + } +} +// 校验库位组 +export const verifyLocationgroup = async (params) => { + return await request.get({ url: `/wms/locationgroup/ListByCode`, params }) +} +// 查询库位组列表 +export const getLocationgroupList = async (params) => { + return await request.get({ url: `/wms/locationgroup/list`, params }) +} + +// 查询库位组详情 +export const getLocationgroup = async (id: number) => { + return await request.get({ url: `/wms/locationgroup/get?id=` + id }) +} + +// 新增库位组 +export const createLocationgroup = async (data: LocationgroupVO) => { + return await request.post({ url: `/wms/locationgroup/create`, data }) +} + +// 修改库位组 +export const updateLocationgroup = async (data: LocationgroupVO) => { + return await request.put({ url: `/wms/locationgroup/update`, data }) +} + +// 删除库位组 +export const deleteLocationgroup = async (id: number) => { + return await request.delete({ url: `/wms/locationgroup/delete?id=` + id }) +} + +// 导出库位组 Excel +export const exportLocationgroup = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/locationgroup/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/locationgroup/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/locationgroup/get-import-template' }) +} + +// 根据code获取数据列表 +export const getLocationgroupByCodes = async (params) => { + return await request.get({ url: `/wms/locationgroup/listByCodes`, params }) +} diff --git a/src/api/wms/mesBarCode/index.ts b/src/api/wms/mesBarCode/index.ts new file mode 100644 index 0000000..4d1e9b9 --- /dev/null +++ b/src/api/wms/mesBarCode/index.ts @@ -0,0 +1,71 @@ +import request from '@/config/axios' + +export interface MesBarCodeVO { + id: number + plat: number + counter: string + sign: string + option: string + lowerLim: string + upperLimit: string + itac: string + type: string + lengthBc: number + posMat: string + lengthMat: number + posRevlv: string + partNumber: string + packLabel: string + oesLabel: string + checkRvl: string + days: number + available: string + remark: string +} + +// 查询生产条码清单列表 +export const getMesBarCodePage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/mes-bar-code/senior', data }) + } else { + return await request.get({ url: `/wms/mes-bar-code/page`, params }) + } +} + +// 查询生产条码清单详情 +export const getMesBarCode = async (id: number) => { + return await request.get({ url: `/wms/mes-bar-code/get?id=` + id }) +} + +// 新增生产条码清单 +export const createMesBarCode = async (data: MesBarCodeVO) => { + return await request.post({ url: `/wms/mes-bar-code/create`, data }) +} + +// 修改生产条码清单 +export const updateMesBarCode = async (data: MesBarCodeVO) => { + return await request.put({ url: `/wms/mes-bar-code/update`, data }) +} + +// 删除生产条码清单 +export const deleteMesBarCode = async (id: number) => { + return await request.delete({ url: `/wms/mes-bar-code/delete?id=` + id }) +} + +// 导出生产条码清单 Excel +export const exportMesBarCode = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/mes-bar-code/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/mes-bar-code/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/mes-bar-code/get-import-template' }) +} diff --git a/src/api/wms/mesRawMaterialConsumptionInfo/index.ts b/src/api/wms/mesRawMaterialConsumptionInfo/index.ts new file mode 100644 index 0000000..dac9236 --- /dev/null +++ b/src/api/wms/mesRawMaterialConsumptionInfo/index.ts @@ -0,0 +1,61 @@ +import request from '@/config/axios' + + +export const AssemblyFinishedMaterialConsumptionMesRespVO = { + finishPackingNumber: '', + finishBatch: '', + finishItemCode: '', + finishCreateTime: new Date(), + id: 0, + processCode: '', + bomVersion: '', + packingNumber: '', + batch: '', + inventoryStatus: '', + fromLocationCode: '', + fromLocationGroupCode: '', + fromAreaCode: '', + itemName: '', + itemDesc1: '', + itemDesc2: '', + projectCode: '', + qty: '', + uom: '', + number: '', + itemCode: '', + remark: '', + createTime: new Date(), + creator: '', + code: '', + interfaceType: '', + jobDetailId: '' +}; + + +// 查询QAD项目信息列表 +export const getMesRawMaterialConsumptionInfoPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productreceipt-detailb/getAssemblyMaterialUsageMesSenior', data }) + } else { + return await request.get({ url: `/wms/productreceipt-detailb/getAssemblyMaterialUsageMes`, params }) + } +} + + + +export const exportAssemblyMaterialUsageMes = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/productreceipt-detailb/getAssemblyMaterialUsageMesSeniorExport`, data }) + }else{ + return await request.download({ url: `/wms/productreceipt-detailb/assemblyMaterialUsageMesExport`, params }) + } +} + + + + + + diff --git a/src/api/wms/mstr/index.ts b/src/api/wms/mstr/index.ts new file mode 100644 index 0000000..f34bc2a --- /dev/null +++ b/src/api/wms/mstr/index.ts @@ -0,0 +1,56 @@ +import request from '@/config/axios' + +export interface MstrVO { + id: number + hflccHflcd: string + plProdLine: string + plDesc: string + plMvarAcct: string + plCchgAcct: string + type: string + remark: string + extraProperties: string + concurrencyStamp: number + siteId: string +} + +// 查询产品类信息列表 +export const getMstrPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/mstr/senior', data }) + } else { + return await request.get({ url: `/wms/mstr/page`, params }) + } +} + +// 查询产品类信息详情 +export const getMstr = async (id: number) => { + return await request.get({ url: `/wms/mstr/get?id=` + id }) +} + +// 新增产品类信息 +export const createMstr = async (data: MstrVO) => { + return await request.post({ url: `/wms/mstr/create`, data }) +} + +// 修改产品类信息 +export const updateMstr = async (data: MstrVO) => { + return await request.put({ url: `/wms/mstr/update`, data }) +} + +// 删除产品类信息 +export const deleteMstr = async (id: number) => { + return await request.delete({ url: `/wms/mstr/delete?id=` + id }) +} + +// 导出产品类信息 Excel +export const exportMstr = async (params) => { + return await request.download({ url: `/wms/mstr/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/mstr/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/offlinesettlementRecordDetail/index.ts b/src/api/wms/offlinesettlementRecordDetail/index.ts new file mode 100644 index 0000000..b19d564 --- /dev/null +++ b/src/api/wms/offlinesettlementRecordDetail/index.ts @@ -0,0 +1,64 @@ +import request from '@/config/axios' + +export interface OfflinesettlementRecordDetailVO { + packingNumber: string + containerNumber: string + batch: string + inventoryStatus: string + locationCode: string + locationGroupCode: string + areaCode: string + itemCode: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + number: string + remark: string + createTime: Date + creator: string + jobDetailId: string +} + +// 查询下线结算记录子列表 +export const getOfflinesettlementRecordDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/offlinesettlement-record-detail/senior', data }) + } else { + return await request.get({ url: `/wms/offlinesettlement-record-detail/page`, params }) + } +} + +// 查询下线结算记录子详情 +export const getOfflinesettlementRecordDetail = async (id: number) => { + return await request.get({ url: `/wms/offlinesettlement-record-detail/get?id=` + id }) +} + +// 新增下线结算记录子 +export const createOfflinesettlementRecordDetail = async (data: OfflinesettlementRecordDetailVO) => { + return await request.post({ url: `/wms/offlinesettlement-record-detail/create`, data }) +} + +// 修改下线结算记录子 +export const updateOfflinesettlementRecordDetail = async (data: OfflinesettlementRecordDetailVO) => { + return await request.put({ url: `/wms/offlinesettlement-record-detail/update`, data }) +} + +// 删除下线结算记录子 +export const deleteOfflinesettlementRecordDetail = async (id: number) => { + return await request.delete({ url: `/wms/offlinesettlement-record-detail/delete?id=` + id }) +} + +// 导出下线结算记录子 Excel +export const exportOfflinesettlementRecordDetail = async (params) => { + return await request.download({ url: `/wms/offlinesettlement-record-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/offlinesettlement-record-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/offlinesettlementRecordMain/index.ts b/src/api/wms/offlinesettlementRecordMain/index.ts new file mode 100644 index 0000000..da771ba --- /dev/null +++ b/src/api/wms/offlinesettlementRecordMain/index.ts @@ -0,0 +1,68 @@ +import request from '@/config/axios' + +export interface OfflinesettlementRecordMainVO { + requestNumber: string + productReceiptRecordNumber: string + warehouseCode: string + outTransactionType: string + inTransactionType: string + executeTime: Date + activeDate: Date + requestTime: Date + dueTime: Date + departmentCode: string + interfaceType: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + available: string +} + +// 查询下线结算记录主列表 +export const getOfflinesettlementRecordMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/offlinesettlement-record-main/senior', data }) + } else { + return await request.get({ url: `/wms/offlinesettlement-record-main/page`, params }) + } +} + +// 查询下线结算记录主详情 +export const getOfflinesettlementRecordMain = async (id: number) => { + return await request.get({ url: `/wms/offlinesettlement-record-main/get?id=` + id }) +} + +// 新增下线结算记录主 +export const createOfflinesettlementRecordMain = async (data: OfflinesettlementRecordMainVO) => { + return await request.post({ url: `/wms/offlinesettlement-record-main/create`, data }) +} + +// 修改下线结算记录主 +export const updateOfflinesettlementRecordMain = async (data: OfflinesettlementRecordMainVO) => { + return await request.put({ url: `/wms/offlinesettlement-record-main/update`, data }) +} + +// 删除下线结算记录主 +export const deleteOfflinesettlementRecordMain = async (id: number) => { + return await request.delete({ url: `/wms/offlinesettlement-record-main/delete?id=` + id }) +} + +// 导出下线结算记录主 Excel +export const exportOfflinesettlementRecordMain = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/offlinesettlement-record-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/offlinesettlement-record-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/offlinesettlement-record-main/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/offlinesettlementRequestDetail/index.ts b/src/api/wms/offlinesettlementRequestDetail/index.ts new file mode 100644 index 0000000..c4561b4 --- /dev/null +++ b/src/api/wms/offlinesettlementRequestDetail/index.ts @@ -0,0 +1,63 @@ +import request from '@/config/axios' + +export interface OfflinesettlementRequestDetailVO { + packingNumber: string + containerNumber: string + batch: string + inventoryStatus: string + locationCode: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + updateTime: Date + updater: string + number: string + itemCode: string + remark: string + createTime: Date + creator: string +} + +// 查询下线结算申请子列表 +export const getOfflinesettlementRequestDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/offlinesettlement-request-detail/senior', data }) + } else { + return await request.get({ url: `/wms/offlinesettlement-request-detail/page`, params }) + } +} + +// 查询下线结算申请子详情 +export const getOfflinesettlementRequestDetail = async (id: number) => { + return await request.get({ url: `/wms/offlinesettlement-request-detail/get?id=` + id }) +} + +// 新增下线结算申请子 +export const createOfflinesettlementRequestDetail = async (data: OfflinesettlementRequestDetailVO) => { + return await request.post({ url: `/wms/offlinesettlement-request-detail/create`, data }) +} + +// 修改下线结算申请子 +export const updateOfflinesettlementRequestDetail = async (data: OfflinesettlementRequestDetailVO) => { + return await request.put({ url: `/wms/offlinesettlement-request-detail/update`, data }) +} + +// 删除下线结算申请子 +export const deleteOfflinesettlementRequestDetail = async (id: number) => { + return await request.delete({ url: `/wms/offlinesettlement-request-detail/delete?id=` + id }) +} + +// 导出下线结算申请子 Excel +export const exportOfflinesettlementRequestDetail = async (params) => { + return await request.download({ url: `/wms/offlinesettlement-request-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/offlinesettlement-request-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/offlinesettlementRequestMain/index.ts b/src/api/wms/offlinesettlementRequestMain/index.ts new file mode 100644 index 0000000..0dcbb20 --- /dev/null +++ b/src/api/wms/offlinesettlementRequestMain/index.ts @@ -0,0 +1,68 @@ +import request from '@/config/axios' + +export interface OfflinesettlementRequestMainVO { + productReceiptRecordNumber: string + warehouseCode: string + requestTime: Date + dueTime: Date + departmentCode: string + status: string + updateTime: Date + updater: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + autoCommit: string + autoAgree: string + autoExecute: string + directCreateRecord: string +} + +// 查询下线结算申请主列表 +export const getOfflinesettlementRequestMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/offlinesettlement-request-main/senior', data }) + } else { + return await request.get({ url: `/wms/offlinesettlement-request-main/page`, params }) + } +} + +// 查询下线结算申请主详情 +export const getOfflinesettlementRequestMain = async (id: number) => { + return await request.get({ url: `/wms/offlinesettlement-request-main/get?id=` + id }) +} + +// 新增下线结算申请主 +export const createOfflinesettlementRequestMain = async (data: OfflinesettlementRequestMainVO) => { + return await request.post({ url: `/wms/offlinesettlement-request-main/create`, data }) +} + +// 修改下线结算申请主 +export const updateOfflinesettlementRequestMain = async (data: OfflinesettlementRequestMainVO) => { + return await request.put({ url: `/wms/offlinesettlement-request-main/update`, data }) +} + +// 删除下线结算申请主 +export const deleteOfflinesettlementRequestMain = async (id: number) => { + return await request.delete({ url: `/wms/offlinesettlement-request-main/delete?id=` + id }) +} + +// 导出下线结算申请主 Excel +export const exportOfflinesettlementRequestMain = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/offlinesettlement-request-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/offlinesettlement-request-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/offlinesettlement-request-main/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/onlinesettlementRecordDetail/index.ts b/src/api/wms/onlinesettlementRecordDetail/index.ts new file mode 100644 index 0000000..08eb9d6 --- /dev/null +++ b/src/api/wms/onlinesettlementRecordDetail/index.ts @@ -0,0 +1,64 @@ +import request from '@/config/axios' + +export interface OnlinesettlementRecordDetailVO { + packingNumber: string + containerNumber: string + batch: string + inventoryStatus: string + locationCode: string + locationGroupCode: string + areaCode: string + itemCode: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + number: string + remark: string + createTime: Date + creator: string + jobDetailId: string +} + +// 查询上线结算记录子列表 +export const getOnlinesettlementRecordDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/onlinesettlement-record-detail/senior', data }) + } else { + return await request.get({ url: `/wms/onlinesettlement-record-detail/page`, params }) + } +} + +// 查询上线结算记录子详情 +export const getOnlinesettlementRecordDetail = async (id: number) => { + return await request.get({ url: `/wms/onlinesettlement-record-detail/get?id=` + id }) +} + +// 新增上线结算记录子 +export const createOnlinesettlementRecordDetail = async (data: OnlinesettlementRecordDetailVO) => { + return await request.post({ url: `/wms/onlinesettlement-record-detail/create`, data }) +} + +// 修改上线结算记录子 +export const updateOnlinesettlementRecordDetail = async (data: OnlinesettlementRecordDetailVO) => { + return await request.put({ url: `/wms/onlinesettlement-record-detail/update`, data }) +} + +// 删除上线结算记录子 +export const deleteOnlinesettlementRecordDetail = async (id: number) => { + return await request.delete({ url: `/wms/onlinesettlement-record-detail/delete?id=` + id }) +} + +// 导出上线结算记录子 Excel +export const exportOnlinesettlementRecordDetail = async (params) => { + return await request.download({ url: `/wms/onlinesettlement-record-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/onlinesettlement-record-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/onlinesettlementRecordMain/index.ts b/src/api/wms/onlinesettlementRecordMain/index.ts new file mode 100644 index 0000000..31018c0 --- /dev/null +++ b/src/api/wms/onlinesettlementRecordMain/index.ts @@ -0,0 +1,68 @@ +import request from '@/config/axios' + +export interface OnlinesettlementRecordMainVO { + requestNumber: string + issueRecordNumber: string + warehouseCode: string + outTransactionType: string + inTransactionType: string + executeTime: Date + activeDate: Date + requestTime: Date + dueTime: Date + departmentCode: string + interfaceType: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + available: string +} + +// 查询上线结算记录主列表 +export const getOnlinesettlementRecordMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/onlinesettlement-record-main/senior', data }) + } else { + return await request.get({ url: `/wms/onlinesettlement-record-main/page`, params }) + } +} + +// 查询上线结算记录主详情 +export const getOnlinesettlementRecordMain = async (id: number) => { + return await request.get({ url: `/wms/onlinesettlement-record-main/get?id=` + id }) +} + +// 新增上线结算记录主 +export const createOnlinesettlementRecordMain = async (data: OnlinesettlementRecordMainVO) => { + return await request.post({ url: `/wms/onlinesettlement-record-main/create`, data }) +} + +// 修改上线结算记录主 +export const updateOnlinesettlementRecordMain = async (data: OnlinesettlementRecordMainVO) => { + return await request.put({ url: `/wms/onlinesettlement-record-main/update`, data }) +} + +// 删除上线结算记录主 +export const deleteOnlinesettlementRecordMain = async (id: number) => { + return await request.delete({ url: `/wms/onlinesettlement-record-main/delete?id=` + id }) +} + +// 导出上线结算记录主 Excel +export const exportOnlinesettlementRecordMain = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/onlinesettlement-record-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/onlinesettlement-record-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/onlinesettlement-record-main/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/onlinesettlementRequestDetail/index.ts b/src/api/wms/onlinesettlementRequestDetail/index.ts new file mode 100644 index 0000000..b6ccf22 --- /dev/null +++ b/src/api/wms/onlinesettlementRequestDetail/index.ts @@ -0,0 +1,63 @@ +import request from '@/config/axios' + +export interface OnlinesettlementRequestDetailVO { + packingNumber: string + containerNumber: string + batch: string + inventoryStatus: string + locationCode: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + updateTime: Date + updater: string + number: string + itemCode: string + remark: string + createTime: Date + creator: string +} + +// 查询上线结算申请子列表 +export const getOnlinesettlementRequestDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/onlinesettlement-request-detail/senior', data }) + } else { + return await request.get({ url: `/wms/onlinesettlement-request-detail/page`, params }) + } +} + +// 查询上线结算申请子详情 +export const getOnlinesettlementRequestDetail = async (id: number) => { + return await request.get({ url: `/wms/onlinesettlement-request-detail/get?id=` + id }) +} + +// 新增上线结算申请子 +export const createOnlinesettlementRequestDetail = async (data: OnlinesettlementRequestDetailVO) => { + return await request.post({ url: `/wms/onlinesettlement-request-detail/create`, data }) +} + +// 修改上线结算申请子 +export const updateOnlinesettlementRequestDetail = async (data: OnlinesettlementRequestDetailVO) => { + return await request.put({ url: `/wms/onlinesettlement-request-detail/update`, data }) +} + +// 删除上线结算申请子 +export const deleteOnlinesettlementRequestDetail = async (id: number) => { + return await request.delete({ url: `/wms/onlinesettlement-request-detail/delete?id=` + id }) +} + +// 导出上线结算申请子 Excel +export const exportOnlinesettlementRequestDetail = async (params) => { + return await request.download({ url: `/wms/onlinesettlement-request-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/onlinesettlement-request-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/onlinesettlementRequestMain/index.ts b/src/api/wms/onlinesettlementRequestMain/index.ts new file mode 100644 index 0000000..6f6238f --- /dev/null +++ b/src/api/wms/onlinesettlementRequestMain/index.ts @@ -0,0 +1,68 @@ +import request from '@/config/axios' + +export interface OnlinesettlementRequestMainVO { + issueRecordNumber: string + warehouseCode: string + requestTime: Date + dueTime: Date + departmentCode: string + status: string + updateTime: Date + updater: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + autoCommit: string + autoAgree: string + autoExecute: string + directCreateRecord: string +} + +// 查询上线结算申请主列表 +export const getOnlinesettlementRequestMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/onlinesettlement-request-main/senior', data }) + } else { + return await request.get({ url: `/wms/onlinesettlement-request-main/page`, params }) + } +} + +// 查询上线结算申请主详情 +export const getOnlinesettlementRequestMain = async (id: number) => { + return await request.get({ url: `/wms/onlinesettlement-request-main/get?id=` + id }) +} + +// 新增上线结算申请主 +export const createOnlinesettlementRequestMain = async (data: OnlinesettlementRequestMainVO) => { + return await request.post({ url: `/wms/onlinesettlement-request-main/create`, data }) +} + +// 修改上线结算申请主 +export const updateOnlinesettlementRequestMain = async (data: OnlinesettlementRequestMainVO) => { + return await request.put({ url: `/wms/onlinesettlement-request-main/update`, data }) +} + +// 删除上线结算申请主 +export const deleteOnlinesettlementRequestMain = async (id: number) => { + return await request.delete({ url: `/wms/onlinesettlement-request-main/delete?id=` + id }) +} + +// 导出上线结算申请主 Excel +export const exportOnlinesettlementRequestMain = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/onlinesettlement-request-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/onlinesettlement-request-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/onlinesettlement-request-main/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/owner/index.ts b/src/api/wms/owner/index.ts new file mode 100644 index 0000000..e3e8761 --- /dev/null +++ b/src/api/wms/owner/index.ts @@ -0,0 +1,76 @@ +import request from '@/config/axios' + +export interface OwnerVO { + code: string + name: string + shortName: string + address: string + country: string + city: string + phone: string + fax: string + postId: string + contacts: string + bank: string + currency: string + taxRate: number + type: string + activeTime: Date + expireTime: Date + remark: string + available: string +} + +// 查询货主列表 +export const getOwnerPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/wms/owner/senior', data }) + } else { + return await request.get({ url: `/wms/owner/page`, params }) + } +} +// 查询所有货主列表 +export const getOwnerList = async (params) => { + return await request.get({ url: `/wms/owner/list`, params }) +} +// 查询货主详情 +export const getOwner = async (id: number) => { + return await request.get({ url: `/wms/owner/get?id=` + id }) +} + +// 新增货主 +export const createOwner = async (data: OwnerVO) => { + return await request.post({ url: `/wms/owner/create`, data }) +} + +// 修改货主 +export const updateOwner = async (data: OwnerVO) => { + return await request.put({ url: `/wms/owner/update`, data }) +} + +// 删除货主 +export const deleteOwner = async (id: number) => { + return await request.delete({ url: `/wms/owner/delete?id=` + id }) +} + +// 导出货主 Excel +export const exportOwner = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/owner/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/owner/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/owner/get-import-template' }) +} + +// 根据code获取数据列表 +export const getOwnerByCodes = async (params) => { + return await request.get({ url: `/wms/owner/listByCodes`, params }) +} \ No newline at end of file diff --git a/src/api/wms/package/index.ts b/src/api/wms/package/index.ts new file mode 100644 index 0000000..8854a8b --- /dev/null +++ b/src/api/wms/package/index.ts @@ -0,0 +1,138 @@ +import request from '@/config/axios' + +export interface PackageVO { + number: string + itemCode: string + itemName: string + itemDesc1: string + itemDesc2: string + batch: string + altBatch: string + produceDate: Date + validityDays: number + expireDate: Date + uom: string + qty: number + altUom: string + altQty: number + convertRate: number + packQty: number + packUnit: string + toWarehouseCode: string + toDockCode: string + toLocationCode: string + supplierCode: string + supplierItemCode: string + poNumber: string + poLine: string + rpNumber: string + asnNumber: string + woNumber: string + woLine: string + productionLineCode: string + teamCode: string + shiftCode: string + customerCode: string + customerDockCode: string + customerItemCode: string + soNumber: string + soLine: string + eqLevel: string + ownerCode: string + weight: string + area: string + volume: string +} + +// 查询包装列表 +export const getPackagePage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/package/senior', data }) + } else { + return await request.get({ url: `/wms/package/page`, params }) + } +} + +// 查询包装详情 +export const getPackage = async (id: number) => { + return await request.get({ url: `/wms/package/get?id=` + id }) +} + +// 新增包装 +export const createPackage = async (data: PackageVO) => { + return await request.post({ url: `/wms/package/create`, data }) +} + +// 修改包装 +export const updatePackage = async (data: PackageVO) => { + return await request.put({ url: `/wms/package/update`, data }) +} + +// 删除包装 +export const deletePackage = async (id: number) => { + return await request.delete({ url: `/wms/package/delete?id=` + id }) +} + +// 导出包装 Excel +export const exportPackage = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/package/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/package/export-excel`, params }) + } + } + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/package/get-import-template' }) +} + +// 创建标签 +export const createPackageLabel = async (data: PackageVO) => { + return await request.post({ url: `/wms/package/createLabel`, data }) +} + + +// 批量打印标签 +export const batchPrintingLable = async (data: any) => { + return await request.post({ url: `/wms/package/batchPrintingLable`, data }) +} + + +// 批量打印标签多选 +export const batchPrintingLables = async (data: any) => { + return await request.post({ url: `/wms/package/batchPrintingLables`, data }) +} + +// 打印标签获取包装列表 +export const getLabel = async (id: number) => { + return await request.get({ url: `/wms/package/getLabel?id=` + id }) +} + +// 打印标签获取包装列表 + +export const getLabelDetailPage = async (params) => { + return await request.get({ url: `/wms/package/getLabelDetailPage`,params}) +} +export const getLabelDetailPageByRecordId = async (params) => { + return await request.get({ url: `/wms/package/getLabelDetailPageByRecordId`,params}) +} + +// 打印标签获取包装列表(装配报工专用) + +export const getProductreceiptLabelDetailPage = async (params) => { + return await request.get({ url: `/wms/package/getProductreceiptLabelDetailPage`,params}) +} + +// 根据库存余额获取包装信息进行打印标签 +export const getBalanceToPackage = async (packingNumber: String) => { + return await request.get({ url: `/wms/package/getBalanceToPackage?packingNumber=` + packingNumber}) +} + +// 根据库存余额获取包装信息进行打印标签--批量打印 +export const getBalanceToPackageSelection = async (data: any) => { + return await request.post({ url: `/wms/balance/batchPrintLabel` ,data}) +} diff --git a/src/api/wms/packagemergeDetail/index.ts b/src/api/wms/packagemergeDetail/index.ts new file mode 100644 index 0000000..3322cfe --- /dev/null +++ b/src/api/wms/packagemergeDetail/index.ts @@ -0,0 +1,67 @@ +import request from '@/config/axios' + +export interface PackagemergeDetailVO { + id: number + locationCode: string + locationGroupCode: string + areaCode: string + fromPackingNumber: string + toPackingNumber: string + fromBatch: string + toBatch: string + fromInventoryStatus: string + toInventoryStatus: string + fromContainerNumber: string + toContainerNumber: string + fromOwnerCode: string + toOwnerCode: string + masterId: number + number: string + itemCode: string + remark: string + siteId: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + toQty: number + fromQty: number + uom: string + interfaceType: string +} + +// 查询合包记录子列表 +export const getPackagemergeDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/packagemerge-detail/senior', data }) + } else { + return await request.get({ url: `/wms/packagemerge-detail/page`, params }) + } +} + +// 查询合包记录子详情 +export const getPackagemergeDetail = async (id: number) => { + return await request.get({ url: '/wms/packagemerge-detail/get?id=' + id }) +} + +// 新增合包记录子 +export const createPackagemergeDetail = async (data: PackagemergeDetailVO) => { + return await request.post({ url: '/wms/packagemerge-detail/create', data }) +} + +// 修改合包记录子 +export const updatePackagemergeDetail = async (data: PackagemergeDetailVO) => { + return await request.put({ url: '/wms/packagemerge-detail/update', data }) +} + +// 删除合包记录子 +export const deletePackagemergeDetail = async (id: number) => { + return await request.delete({ url: '/wms/packagemerge-detail/delete?id=' + id }) +} + +// 导出合包记录子 Excel +export const exportPackagemergeDetailApi = async (params) => { + return await request.download({ url: '/wms/packagemerge-detail/export-excel', params }) +} diff --git a/src/api/wms/packagemergeMain/index.ts b/src/api/wms/packagemergeMain/index.ts new file mode 100644 index 0000000..2638292 --- /dev/null +++ b/src/api/wms/packagemergeMain/index.ts @@ -0,0 +1,68 @@ +import request from '@/config/axios' + +export interface PackagemergeMainVO { + id: number + warehouseCode: string + details: string + outTransactionType: string + inTransactionType: string + executeTime: Date + activeDate: Date + available: string + requestTime: Date + dueTime: Date + departmentCode: string + userGroupCode: string + interfaceType: string + number: string + businessType: string + remark: string + extraProperties: string + siteId: string +} + +// 查询合包记录主列表 +export const getPackagemergeMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/packagemerge-main/senior', data }) + } else { + return await request.get({ url: `/wms/packagemerge-main/page`, params }) + } +} + +// 查询合包记录主详情 +export const getPackagemergeMain = async (id: number) => { + return await request.get({ url: `/wms/packagemerge-main/get?id=` + id }) +} + +// 新增合包记录主 +export const createPackagemergeMain = async (data: PackagemergeMainVO) => { + return await request.post({ url: `/wms/packagemerge-main/create`, data }) +} + +// 修改合包记录主 +export const updatePackagemergeMain = async (data: PackagemergeMainVO) => { + return await request.put({ url: `/wms/packagemerge-main/update`, data }) +} + +// 删除合包记录主 +export const deletePackagemergeMain = async (id: number) => { + return await request.delete({ url: `/wms/packagemerge-main/delete?id=` + id }) +} + +// 导出合包记录主 Excel +export const exportPackagemergeMain = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/packagemerge-main/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/packagemerge-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/packagemerge-main/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/packageoverJobDetail/index.ts b/src/api/wms/packageoverJobDetail/index.ts new file mode 100644 index 0000000..41043f0 --- /dev/null +++ b/src/api/wms/packageoverJobDetail/index.ts @@ -0,0 +1,71 @@ +import request from '@/config/axios' + +export interface PackageoverJobDetailVO { + id: number + number: string + batch: string + itemCode: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + fromPackingNumber: string + toPackingNumber: string + fromPackUnit: string + toPackUnit: string + fromPackQty: number + toPackQty: number + fromLocationGroupCode: string + toLocationGroupCode: string + fromAreaCode: string + toAreaCode: string + fromLocationCode: string + toLocationCode: string + fromOwnerCode: string + toOwnerCode: string + inventoryStatus: string + remark: string +} + +// 查询翻包任务子列表 +export const getPackageoverJobDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/packageover-job-detail/senior', data }) + } else { + return await request.get({ url: `/wms/packageover-job-detail/page`, params }) + } +} + +// 查询翻包任务子详情 +export const getPackageoverJobDetail = async (id: number) => { + return await request.get({ url: `/wms/packageover-job-detail/get?id=` + id }) +} + +// 新增翻包任务子 +export const createPackageoverJobDetail = async (data: PackageoverJobDetailVO) => { + return await request.post({ url: `/wms/packageover-job-detail/create`, data }) +} + +// 修改翻包任务子 +export const updatePackageoverJobDetail = async (data: PackageoverJobDetailVO) => { + return await request.put({ url: `/wms/packageover-job-detail/update`, data }) +} + +// 删除翻包任务子 +export const deletePackageoverJobDetail = async (id: number) => { + return await request.delete({ url: `/wms/packageover-job-detail/delete?id=` + id }) +} + +// 导出翻包任务子 Excel +export const exportPackageoverJobDetail = async (params) => { + return await request.download({ url: `/wms/packageover-job-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/packageover-job-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/packageoverJobMain/index.ts b/src/api/wms/packageoverJobMain/index.ts new file mode 100644 index 0000000..5aa7fa0 --- /dev/null +++ b/src/api/wms/packageoverJobMain/index.ts @@ -0,0 +1,87 @@ +import request from '@/config/axios' + +export interface PackageoverJobMainVO { + id: number + requestNumber: string + status: string + requestTime: Date + requestDueTime: Date + expiredTime: Date + number: string + priority: number + priorityIncrement: number + acceptUserId: string + acceptUserName: string + acceptTime: Date + completeUserId: string + completeUserName: string + completeTime: Date + autoComplete: string + allowModifyLocation: string + allowModifyQty: string + allowBiggerQty: string + allowSmallerQty: string + allowModifyInventoryStatus: string + allowContinuousScanning: string + allowPartialComplete: string + allowModifyBatch: string + allowModifyPackingNumber: string + fromWarehouseCode: string + toWarehouseCode: string + fromAreaCodes: string + toAreaCodes: string + fromAreaTypes: string + toAreaTypes: string + inInventoryStatuses: string + outInventoryStatuses: string + businessType: string + departmentCode: string + remark: string +} + +// 查询翻包任务主列表 +export const getPackageoverJobMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/packageover-job-main/senior', data }) + } else { + return await request.get({ url: `/wms/packageover-job-main/page`, params }) + } +} + +// 查询翻包任务主详情 +export const getPackageoverJobMain = async (id: number) => { + return await request.get({ url: `/wms/packageover-job-main/get?id=` + id }) +} + +// 新增翻包任务主 +export const createPackageoverJobMain = async (data: PackageoverJobMainVO) => { + return await request.post({ url: `/wms/packageover-job-main/create`, data }) +} + +// 修改翻包任务主 +export const updatePackageoverJobMain = async (data: PackageoverJobMainVO) => { + return await request.put({ url: `/wms/packageover-job-main/update`, data }) +} +// 承接翻包任务主 +export const acceptPackageoverJobMain = async (id: number) => { + return await request.put({ url: `/wms/packageover-job-main/accept?id=` + id }) +} +// 放弃翻包任务主 +export const abandonPackageoverJobMain = async (id: number) => { + return await request.put({ url: `/wms/packageover-job-main/abandon?id=` + id }) +} +// 删除翻包任务主 +export const deletePackageoverJobMain = async (id: number) => { + return await request.delete({ url: `/wms/packageover-job-main/delete?id=` + id }) +} +// 关闭翻包任务主 +export const closePackageoverJobMain = async (id: number) => { + return await request.put({ url: `/wms/packageover-job-main/close?id=` + id }) +} + +// 导出翻包任务主 Excel +export const exportPackageoverJobMain = async (params) => { + return await request.download({ url: `/wms/packageover-job-main/export-excel`, params }) +} diff --git a/src/api/wms/packageoverRecordDetail/index.ts b/src/api/wms/packageoverRecordDetail/index.ts new file mode 100644 index 0000000..3286e82 --- /dev/null +++ b/src/api/wms/packageoverRecordDetail/index.ts @@ -0,0 +1,67 @@ +import request from '@/config/axios' + +export interface PackageoverDetailVO { + id: number + locationCode: string + locationGroupCode: string + areaCode: string + fromPackingNumber: string + toPackingNumber: string + fromBatch: string + toBatch: string + fromInventoryStatus: string + toInventoryStatus: string + fromContainerNumber: string + toContainerNumber: string + fromOwnerCode: string + toOwnerCode: string + masterId: number + number: string + itemCode: string + remark: string + siteId: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + toQty: number + fromQty: number + uom: string + interfaceType: string +} + +// 查询翻包记录子列表 +export const getPackageoverDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/packageover-record-detail/senior', data }) + } else { + return await request.get({ url: `/wms/packageover-record-detail/page`, params }) + } +} + +// 查询翻包记录子详情 +export const getPackageoverDetail = async (id: number) => { + return await request.get({ url: '/wms/packageover-record-detail/get?id=' + id }) +} + +// 新增翻包记录子 +export const createPackageoverDetail = async (data: PackageoverDetailVO) => { + return await request.post({ url: '/wms/packageover-record-detail/create', data }) +} + +// 修改翻包记录子 +export const updatePackageoverDetail = async (data: PackageoverDetailVO) => { + return await request.put({ url: '/wms/packageover-record-detail/update', data }) +} + +// 删除翻包记录子 +export const deletePackageoverDetail = async (id: number) => { + return await request.delete({ url: '/wms/packageover-record-detail/delete?id=' + id }) +} + +// 导出翻包记录子 Excel +export const exportPackageoverDetailApi = async (params) => { + return await request.download({ url: '/wms/packageover-record-detail/export-excel', params }) +} diff --git a/src/api/wms/packageoverRecordMain/index.ts b/src/api/wms/packageoverRecordMain/index.ts new file mode 100644 index 0000000..398cdea --- /dev/null +++ b/src/api/wms/packageoverRecordMain/index.ts @@ -0,0 +1,66 @@ +import request from '@/config/axios' + +export interface PackageoverMainVO { + id: number + number: string + status: string + requestTime: Date + dueTime: Date + fromWarehouseCode: string + toWarehouseCode: string + fromAreaTypes: string + toAreaTypes: string + fromAreaCodes: string + toAreaCodes: string + inInventoryStatuses: string + outInventoryStatuses: string + autoCommit: string + autoAgree: string + autoExecute: string + directCreateRecord: string + departmentCode: string + remark: string + businessType: string + concurrencyStamp: number +} + +// 查询翻包申请主列表 +export const getPackageoverMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/packageover-record-main/senior', data }) + } else { + return await request.get({ url: `/wms/packageover-record-main/page`, params }) + } +} + +// 查询翻包申请主详情 +export const getPackageoverMain = async (id: number) => { + return await request.get({ url: `/wms/packageover-record-main/get?id=` + id }) +} + +// 新增翻包申请主 +export const createPackageoverMain = async (data: PackageoverMainVO) => { + return await request.post({ url: `/wms/packageover-record-main/create`, data }) +} + +// 修改翻包申请主 +export const updatePackageoverMain = async (data: PackageoverMainVO) => { + return await request.put({ url: `/wms/packageover-record-main/update`, data }) +} + +// 删除翻包申请主 +export const deletePackageoverMain = async (id: number) => { + return await request.delete({ url: `/wms/packageover-record-main/delete?id=` + id }) +} + +// 导出翻包申请主 Excel +export const exportPackageoverMain = async (params) => { + return await request.download({ url: `/wms/packageover-record-main/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/packageover-record-main/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/packageoverRequestDetail/index.ts b/src/api/wms/packageoverRequestDetail/index.ts new file mode 100644 index 0000000..0be9818 --- /dev/null +++ b/src/api/wms/packageoverRequestDetail/index.ts @@ -0,0 +1,70 @@ +import request from '@/config/axios' + +export interface PackageoverRequestDetailVO { + id: number + number: string + batch: string + itemCode: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + fromPackUnit: string + toPackUnit: string + fromPackQty: number + toPackQty: number + fromLocationCode: string + toLocationCode: string + fromLocationGroupCode: string + toLocationGroupCode: string + fromAreaCode: string + toAreaCode: string + inventoryStatus: string + remark: string + masterId: number + fromOwnerCode: string + toOwnerCode: string +} + +// 查询翻包申请子列表 +export const getPackageoverRequestDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/packageover-request-detail/senior', data }) + } else { + return await request.get({ url: `/wms/packageover-request-detail/page`, params }) + } +} + +// 查询翻包申请子详情 +export const getPackageoverRequestDetail = async (id: number) => { + return await request.get({ url: `/wms/packageover-request-detail/get?id=` + id }) +} + +// 新增翻包申请子 +export const createPackageoverRequestDetail = async (data: PackageoverRequestDetailVO) => { + return await request.post({ url: `/wms/packageover-request-detail/create`, data }) +} + +// 修改翻包申请子 +export const updatePackageoverRequestDetail = async (data: PackageoverRequestDetailVO) => { + return await request.put({ url: `/wms/packageover-request-detail/update`, data }) +} + +// 删除翻包申请子 +export const deletePackageoverRequestDetail = async (id: number) => { + return await request.delete({ url: `/wms/packageover-request-detail/delete?id=` + id }) +} + +// 导出翻包申请子 Excel +export const exportPackageoverRequestDetail = async (params) => { + return await request.download({ url: `/wms/packageover-request-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/packageover-request-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/packageoverRequestMain/index.ts b/src/api/wms/packageoverRequestMain/index.ts new file mode 100644 index 0000000..94b376b --- /dev/null +++ b/src/api/wms/packageoverRequestMain/index.ts @@ -0,0 +1,96 @@ +import request from '@/config/axios' + +export interface PackageoverRequestMainVO { + id: number + number: string + status: string + requestTime: Date + dueTime: Date + fromWarehouseCode: string + toWarehouseCode: string + fromAreaTypes: string + toAreaTypes: string + fromAreaCodes: string + toAreaCodes: string + inInventoryStatuses: string + outInventoryStatuses: string + autoCommit: string + autoAgree: string + autoExecute: string + directCreateRecord: string + departmentCode: string + remark: string + businessType: string + concurrencyStamp: number +} + +// 查询翻包申请主列表 +export const getPackageoverRequestMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/packageover-request-main/senior', data }) + } else { + return await request.get({ url: `/wms/packageover-request-main/page`, params }) + } +} + +// 查询翻包申请主详情 +export const getPackageoverRequestMain = async (id: number) => { + return await request.get({ url: `/wms/packageover-request-main/get?id=` + id }) +} + +// 新增翻包申请主 +export const createPackageoverRequestMain = async (data: PackageoverRequestMainVO) => { + return await request.post({ url: `/wms/packageover-request-main/create`, data }) +} + +// 修改翻包申请主 +export const updatePackageoverRequestMain = async (data: PackageoverRequestMainVO) => { + return await request.put({ url: `/wms/packageover-request-main/update`, data }) +} + +// 删除翻包申请主 +export const deletePackageoverRequestMain = async (id: number) => { + return await request.delete({ url: `/wms/packageover-request-main/delete?id=` + id }) +} + +// 导出翻包申请主 Excel +export const exportPackageoverRequestMain = async (params) => { + return await request.download({ url: `/wms/packageover-request-main/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/packageover-request-main/get-import-template' }) +} + +// 关闭 +export const close = (id) => { + return request.put({ url: '/wms/packageover-request-main/close?id=' + id }) +} + +// 重新添加 +export const reAdd = (id) => { + return request.put({ url: '/wms/packageover-request-main/reAdd?id=' + id }) +} + +// 提交审批 +export const submit = (id) => { + return request.put({ url: '/wms/packageover-request-main/submit?id=' + id }) +} + +// 驳回 +export const refused = (id) => { + return request.put({ url: '/wms/packageover-request-main/refused?id=' + id }) +} + +// 审批通过 +export const agree = (id) => { + return request.put({ url: '/wms/packageover-request-main/agree?id=' + id }) +} + +// 处理 +export const handle = (id) => { + return request.put({ url: '/wms/packageover-request-main/handle?id=' + id }) +} \ No newline at end of file diff --git a/src/api/wms/packageoverRetrospect/index.ts b/src/api/wms/packageoverRetrospect/index.ts new file mode 100644 index 0000000..9641a14 --- /dev/null +++ b/src/api/wms/packageoverRetrospect/index.ts @@ -0,0 +1,83 @@ +import request from '@/config/axios' + +export interface PackageoverRetrospectVO { + id: number + number: string + jobNumber: string + warehouseCode: string + areaCode: string + locationGroupCode: string + locationCode: string + itemCode: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + requestTime: Date + dueTime: Date + fromPackingNumber: string + toPackingNumber: string + fromBatch: string + toBatch: string + fromPackUnit: string + toPackUnit: string + fromPackQty: number + toPackQty: number + fromInventoryStatus: string + toInventoryStatus: string + fromContainerNumber: string + toContainerNumber: string + businessType: string + departmentCode: string + outTransactionType: string + inTransactionType: string + executeTime: Date + activeDate: Date + fromOwnerCode: string + toOwnerCode: string + remark: string + available: string +} + +// 查询翻包记录主列表 +export const getPackageoverRetrospectPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/packageover-retrospect/senior', data }) + } else { + return await request.get({ url: `/wms/packageover-retrospect/page`, params }) + } +} + +// 查询翻包记录主详情 +export const getPackageoverRetrospect = async (id: number) => { + return await request.get({ url: `/wms/packageover-retrospect/get?id=` + id }) +} + +// 新增翻包记录主 +export const createPackageoverRetrospect = async (data: PackageoverRetrospectVO) => { + return await request.post({ url: `/wms/packageover-retrospect/create`, data }) +} + +// 修改翻包记录主 +export const updatePackageoverRetrospect = async (data: PackageoverRetrospectVO) => { + return await request.put({ url: `/wms/packageover-retrospect/update`, data }) +} + +// 删除翻包记录主 +export const deletePackageoverRetrospect = async (id: number) => { + return await request.delete({ url: `/wms/packageover-retrospect/delete?id=` + id }) +} + +// 导出翻包记录主 Excel +export const exportPackageoverRetrospect = async (params) => { + return await request.download({ url: `/wms/packageover-retrospect/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/packageover-retrospect/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/packagesplitDetail/index.ts b/src/api/wms/packagesplitDetail/index.ts new file mode 100644 index 0000000..23f7876 --- /dev/null +++ b/src/api/wms/packagesplitDetail/index.ts @@ -0,0 +1,67 @@ +import request from '@/config/axios' + +export interface PackagesplitDetailVO { + id: number + locationCode: string + locationGroupCode: string + areaCode: string + fromPackingNumber: string + toPackingNumber: string + fromBatch: string + toBatch: string + fromInventoryStatus: string + toInventoryStatus: string + fromContainerNumber: string + toContainerNumber: string + fromOwnerCode: string + toOwnerCode: string + masterId: number + number: string + itemCode: string + remark: string + siteId: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + toQty: number + fromQty: number + uom: string + interfaceType: string +} + +// 查询拆包记录子列表 +export const getPackagesplitDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/packagesplit-detail/senior', data }) + } else { + return await request.get({ url: `/wms/packagesplit-detail/page`, params }) + } +} + +// 查询拆包记录子详情 +export const getPackagesplitDetail = async (id: number) => { + return await request.get({ url: '/wms/packagesplit-detail/get?id=' + id }) +} + +// 新增拆包记录子 +export const createPackagesplitDetail = async (data: PackagesplitDetailVO) => { + return await request.post({ url: '/wms/packagesplit-detail/create', data }) +} + +// 修改拆包记录子 +export const updatePackagesplitDetail = async (data: PackagesplitDetailVO) => { + return await request.put({ url: '/wms/packagesplit-detail/update', data }) +} + +// 删除拆包记录子 +export const deletePackagesplitDetail = async (id: number) => { + return await request.delete({ url: '/wms/packagesplit-detail/delete?id=' + id }) +} + +// 导出拆包记录子 Excel +export const exportPackagesplitDetailApi = async (params) => { + return await request.download({ url: '/wms/packagesplit-detail/export-excel', params }) +} diff --git a/src/api/wms/packagesplitMain/index.ts b/src/api/wms/packagesplitMain/index.ts new file mode 100644 index 0000000..37fbedd --- /dev/null +++ b/src/api/wms/packagesplitMain/index.ts @@ -0,0 +1,63 @@ +import request from '@/config/axios' + +export interface PackagesplitMainVO { + id: number + warehouseCode: string + details: string + outTransactionType: string + inTransactionType: string + executeTime: Date + activeDate: Date + available: string + requestTime: Date + dueTime: Date + departmentCode: string + userGroupCode: string + interfaceType: string + number: string + businessType: string + remark: string + extraProperties: string + siteId: string +} + +// 查询拆包记录主列表 +export const getPackagesplitMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/packagesplit-main/senior', data }) + } else { + return await request.get({ url: `/wms/packagesplit-main/page`, params }) + } +} + +// 查询拆包记录主详情 +export const getPackagesplitMain = async (id: number) => { + return await request.get({ url: '/wms/packagesplit-main/get?id=' + id }) +} + +// 新增拆包记录主 +export const createPackagesplitMain = async (data: PackagesplitMainVO) => { + return await request.post({ url: '/wms/packagesplit-main/create', data }) +} + +// 修改拆包记录主 +export const updatePackagesplitMain = async (data: PackagesplitMainVO) => { + return await request.put({ url: '/wms/packagesplit-main/update', data }) +} + +// 删除拆包记录主 +export const deletePackagesplitMain = async (id: number) => { + return await request.delete({ url: '/wms/packagesplit-main/delete?id=' + id }) +} + +// 导出拆包记录主 Excel +export const exportPackagesplitMainApi = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/packagesplit-main/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/packagesplit-main/export-excel`, params }) + } +} diff --git a/src/api/wms/packageunit/index.ts b/src/api/wms/packageunit/index.ts new file mode 100644 index 0000000..94f053f --- /dev/null +++ b/src/api/wms/packageunit/index.ts @@ -0,0 +1,95 @@ +import request from '@/config/axios' + +export interface PackageunitVO { + id: number + code: string + name: string + length: number + width: number + height: number + weight: number + unit: string + available: string + activeTime: Date + expireTime: Date + remark: string + deletionTime: Date + deleterId: string + extraProperties: string + concurrencyStamp: number + siteId: string + desc: string + reuse: string + manageBalance: string +} + +// 查询物品包装规格信息 列表 +export const getPackageunitPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/packageunit/senior', data }) + } else { + return await request.get({ url: `/wms/packageunit/page`, params }) + } +} +// 查询物品包装规格信息 列表树状图 +export const getPackageunitPageTree = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/packageunit/seniorTree', data }) + } else { + return await request.get({ url: `/wms/packageunit/pageTree`, params }) + } +} +// 查询物品父级包装规格信息 +export const getPackageunitPageParent = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/packageunit/seniorParent', data }) + } else { + return await request.get({ url: `/wms/packageunit/pageParent`, params }) + } +} +// 查询物品包装规格信息 详情 +export const getPackageunit = async (id: number) => { + return await request.get({ url: `/wms/packageunit/get?id=` + id }) +} + +// 新增物品包装规格信息 +export const createPackageunit = async (data: PackageunitVO) => { + return await request.post({ url: `/wms/packageunit/create`, data }) +} + +// 修改物品包装规格信息 +export const updatePackageunit = async (data: PackageunitVO) => { + return await request.put({ url: `/wms/packageunit/update`, data }) +} + +// 删除物品包装规格信息 +export const deletePackageunit = async (id: number) => { + return await request.delete({ url: `/wms/packageunit/delete?id=` + id }) +} + +// 导出物品包装规格信息 Excel +export const exportPackageunit = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/packageunit/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/packageunit/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/packageunit/get-import-template' }) +} + +// 根据code获取数据列表 +export const getPackageunitListByCodes = async (codes: string) => { + return await request.get({ url: `/wms/packageunit/listByCodes?codes=` + codes }) +} diff --git a/src/api/wms/paramsetting/index.ts b/src/api/wms/paramsetting/index.ts new file mode 100644 index 0000000..c4549f2 --- /dev/null +++ b/src/api/wms/paramsetting/index.ts @@ -0,0 +1,59 @@ +import request from '@/config/axios' + +export interface ParamsettingVO { + strategyType: string + paramCode: string + paramName: string + usableOpeartors: string + dataType: string + valueScope: string + relatedTo: string + description: string + isRequired: string +} + +// 查询参数设置列表 +export const getParamsettingPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/wms/paramsetting/senior', data }) + } else { + return await request.get({ url: `/wms/paramsetting/page`, params }) + } +} + +// 查询参数设置详情 +export const getParamsetting = async (id: number) => { + return await request.get({ url: `/wms/paramsetting/get?id=` + id }) +} + +// 新增参数设置 +export const createParamsetting = async (data: ParamsettingVO) => { + return await request.post({ url: `/wms/paramsetting/create`, data }) +} + +// 修改参数设置 +export const updateParamsetting = async (data: ParamsettingVO) => { + return await request.put({ url: `/wms/paramsetting/update`, data }) +} + +// 删除参数设置 +export const deleteParamsetting = async (id: number) => { + return await request.delete({ url: `/wms/paramsetting/delete?id=` + id }) +} + +// 导出参数设置 Excel +export const exportParamsetting = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/paramsetting/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/paramsetting/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/paramsetting/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/pickJobDetail/index.ts b/src/api/wms/pickJobDetail/index.ts new file mode 100644 index 0000000..b150455 --- /dev/null +++ b/src/api/wms/pickJobDetail/index.ts @@ -0,0 +1,64 @@ +import request from '@/config/axios' + +export interface PickJobDetailVO { + packingNumber: string + batch: string + inventoryStatus: string + containerNumber: string + fromLocationCode: string + toLocationCode: string + itemCode: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + number: string + remark: string + createTime: Date + creatorId: string + fromOwnerCode: string + toOwnerCode: string +} + +// 查询备货任务子列表 +export const getPickJobDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/pick-job-detail/senior', data }) + } else { + return await request.get({ url: `/wms/pick-job-detail/page`, params }) + } +} + +// 查询备货任务子详情 +export const getPickJobDetail = async (id: number) => { + return await request.get({ url: `/wms/pick-job-detail/get?id=` + id }) +} + +// 新增备货任务子 +export const createPickJobDetail = async (data: PickJobDetailVO) => { + return await request.post({ url: `/wms/pick-job-detail/create`, data }) +} + +// 修改备货任务子 +export const updatePickJobDetail = async (data: PickJobDetailVO) => { + return await request.put({ url: `/wms/pick-job-detail/update`, data }) +} + +// 删除备货任务子 +export const deletePickJobDetail = async (id: number) => { + return await request.delete({ url: `/wms/pick-job-detail/delete?id=` + id }) +} + +// 导出备货任务子 Excel +export const exportPickJobDetail = async (params) => { + return await request.download({ url: `/wms/pick-job-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/pick-job-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/pickJobMain/index.ts b/src/api/wms/pickJobMain/index.ts new file mode 100644 index 0000000..3cf2aa4 --- /dev/null +++ b/src/api/wms/pickJobMain/index.ts @@ -0,0 +1,87 @@ +import request from '@/config/axios' + +export interface PickJobMainVO { + requestNumber: string + requestTime: Date + requestDueTime: Date + status: string + expiredTime: Date + updateTime: Date + updater: string + jobStageStatus: string + priority: number + priorityIncrement: number + departmentCode: string + acceptUserId: string + acceptTime: Date + completeUserId: string + completeTime: Date + fromAreaTypes: string + toAreaTypes: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + fromWarehouseCode: string + fromAreaCodes: string + toWarehouseCode: string + toAreaCodes: string + autoComplete: string + allowModifyLocation: string + allowModifyQty: string + allowBiggerQty: string + allowSmallerQty: string + allowModifyInventoryStatus: string + allowContinuousScanning: string + allowPartialComplete: string + allowModifyBatch: string + allowModifyPackingNumber: string +} + +// 查询备货任务主列表 +export const getPickJobMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/pick-job-main/senior', data }) + } else { + return await request.get({ url: `/wms/pick-job-main/page`, params }) + } +} + +// 查询备货任务主详情 +export const getPickJobMain = async (id: number) => { + return await request.get({ url: `/wms/pick-job-main/get?id=` + id }) +} + +// 新增备货任务主 +export const createPickJobMain = async (data: PickJobMainVO) => { + return await request.post({ url: `/wms/pick-job-main/create`, data }) +} + +// 修改备货任务主 +export const updatePickJobMain = async (data: PickJobMainVO) => { + return await request.put({ url: `/wms/pick-job-main/update`, data }) +} + +// 删除备货任务主 +export const deletePickJobMain = async (id: number) => { + return await request.delete({ url: `/wms/pick-job-main/delete?id=` + id }) +} + +// 导出备货任务主 Excel +export const exportPickJobMain = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/pick-job-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/pick-job-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/pick-job-main/get-import-template' }) +} diff --git a/src/api/wms/pickRecordDetail/index.ts b/src/api/wms/pickRecordDetail/index.ts new file mode 100644 index 0000000..7bec033 --- /dev/null +++ b/src/api/wms/pickRecordDetail/index.ts @@ -0,0 +1,74 @@ +import request from '@/config/axios' + +export interface PickRecordDetailVO { + fromPackingNumber: string + fromBatch: string + inventoryStatus: string + fromOwnerCode: string + fromContainerNumber: string + fromLocationCode: string + fromLocationGroupCode: string + fromAreaCode: string + toOwnerCode: string + toContainerNumber: string + toLocationCode: string + toLocationGroupCode: string + toAreaCode: string + number: string + itemCode: string + remark: string + createTime: Date + creator: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + code: string + interfaceType: string + jobDetailId: string + toPackingNumber: string + toBatch: string +} + +// 查询备货记录子列表 +export const getPickRecordDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/pick-record-detail/senior', data }) + } else { + return await request.get({ url: `/wms/pick-record-detail/page`, params }) + } +} + +// 查询备货记录子详情 +export const getPickRecordDetail = async (id: number) => { + return await request.get({ url: `/wms/pick-record-detail/get?id=` + id }) +} + +// 新增备货记录子 +export const createPickRecordDetail = async (data: PickRecordDetailVO) => { + return await request.post({ url: `/wms/pick-record-detail/create`, data }) +} + +// 修改备货记录子 +export const updatePickRecordDetail = async (data: PickRecordDetailVO) => { + return await request.put({ url: `/wms/pick-record-detail/update`, data }) +} + +// 删除备货记录子 +export const deletePickRecordDetail = async (id: number) => { + return await request.delete({ url: `/wms/pick-record-detail/delete?id=` + id }) +} + +// 导出备货记录子 Excel +export const exportPickRecordDetail = async (params) => { + return await request.download({ url: `/wms/pick-record-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/pick-record-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/pickRecordMain/index.ts b/src/api/wms/pickRecordMain/index.ts new file mode 100644 index 0000000..78e8391 --- /dev/null +++ b/src/api/wms/pickRecordMain/index.ts @@ -0,0 +1,74 @@ +import request from '@/config/axios' + +export interface PickRecordMainVO { + requestNumber: string + jobNumber: string + outTransactionType: string + inTransactionType: string + executeTime: Date + activeDate: Date + requestTime: Date + dueTime: Date + departmentCode: string + interfaceType: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + code: string + fromWarehouseCode: string + fromAreaTypes: string + fromAreaCodes: string + toWarehouseCode: string + toAreaTypes: string + toAreaCodes: string + available: string +} + +// 查询备货记录主列表 +export const getPickRecordMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/pick-record-main/senior', data }) + } else { + return await request.get({ url: `/wms/pick-record-main/page`, params }) + } +} + +// 查询备货记录主详情 +export const getPickRecordMain = async (id: number) => { + return await request.get({ url: `/wms/pick-record-main/get?id=` + id }) +} + +// 新增备货记录主 +export const createPickRecordMain = async (data: PickRecordMainVO) => { + return await request.post({ url: `/wms/pick-record-main/create`, data }) +} + +// 修改备货记录主 +export const updatePickRecordMain = async (data: PickRecordMainVO) => { + return await request.put({ url: `/wms/pick-record-main/update`, data }) +} + +// 删除备货记录主 +export const deletePickRecordMain = async (id: number) => { + return await request.delete({ url: `/wms/pick-record-main/delete?id=` + id }) +} + +// 导出备货记录主 Excel +export const exportPickRecordMain = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/pick-record-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/pick-record-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/pick-record-main/get-import-template' }) +} diff --git a/src/api/wms/pickRequestDetail/index.ts b/src/api/wms/pickRequestDetail/index.ts new file mode 100644 index 0000000..4f41d5e --- /dev/null +++ b/src/api/wms/pickRequestDetail/index.ts @@ -0,0 +1,62 @@ +import request from '@/config/axios' + +export interface PickRequestDetailVO { + inventoryStatus: string + toLocationCode: string + number: string + itemCode: string + remark: string + createTime: Date + creator: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + updateTime: Date + updater: string + fromOwnerCode: string + toOwnerCode: string +} + +// 查询备货申请子列表 +export const getPickRequestDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/pick-request-detail/senior', data }) + } else { + return await request.get({ url: `/wms/pick-request-detail/page`, params }) + } +} + +// 查询备货申请子详情 +export const getPickRequestDetail = async (id: number) => { + return await request.get({ url: `/wms/pick-request-detail/get?id=` + id }) +} + +// 新增备货申请子 +export const createPickRequestDetail = async (data: PickRequestDetailVO) => { + return await request.post({ url: `/wms/pick-request-detail/create`, data }) +} + +// 修改备货申请子 +export const updatePickRequestDetail = async (data: PickRequestDetailVO) => { + return await request.put({ url: `/wms/pick-request-detail/update`, data }) +} + +// 删除备货申请子 +export const deletePickRequestDetail = async (id: number) => { + return await request.delete({ url: `/wms/pick-request-detail/delete?id=` + id }) +} + +// 导出备货申请子 Excel +export const exportPickRequestDetail = async (params) => { + return await request.download({ url: `/wms/pick-request-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/pick-request-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/pickRequestMain/index.ts b/src/api/wms/pickRequestMain/index.ts new file mode 100644 index 0000000..b11d559 --- /dev/null +++ b/src/api/wms/pickRequestMain/index.ts @@ -0,0 +1,72 @@ +import request from '@/config/axios' + +export interface PickRequestMainVO { + fromWarehouseCode: string + fromAreaTypes: string + fromAreas: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + requestTime: Date + dueTime: Date + departmentCode: string + status: string + updateTime: Date + updater: string + toWarehouseCode: string + toAreaTypes: string + toAreaCodes: string + autoCommit: string + autoAgree: string + autoExecute: string + directCreateRecord: string +} + +// 查询备货申请主列表 +export const getPickRequestMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/pick-request-main/senior', data }) + } else { + return await request.get({ url: `/wms/pick-request-main/page`, params }) + } +} + +// 查询备货申请主详情 +export const getPickRequestMain = async (id: number) => { + return await request.get({ url: `/wms/pick-request-main/get?id=` + id }) +} + +// 新增备货申请主 +export const createPickRequestMain = async (data: PickRequestMainVO) => { + return await request.post({ url: `/wms/pick-request-main/create`, data }) +} + +// 修改备货申请主 +export const updatePickRequestMain = async (data: PickRequestMainVO) => { + return await request.put({ url: `/wms/pick-request-main/update`, data }) +} + +// 删除备货申请主 +export const deletePickRequestMain = async (id: number) => { + return await request.delete({ url: `/wms/pick-request-main/delete?id=` + id }) +} + +// 导出备货申请主 Excel +export const exportPickRequestMain = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/pick-request-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/pick-request-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/pick-request-main/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/plansetting/index.ts b/src/api/wms/plansetting/index.ts new file mode 100644 index 0000000..07badf2 --- /dev/null +++ b/src/api/wms/plansetting/index.ts @@ -0,0 +1,63 @@ +import request from '@/config/axios' + +export interface PlansettingVO { + id: number + code: string + requestMode: string + autoCommit: string + autoAgree: string + autoExecute: string + directCreateRecord: string + available: string + activeTime: Date + expireTime: Date + remark: string + concurrencyStamp: number +} + +// 查询计划设置列表 +export const getPlansettingPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/plansetting/senior', data }) + } else { + return await request.get({ url: `/wms/plansetting/page`, params }) + } +} + +// 查询计划设置详情 +export const getPlansetting = async (id: number) => { + return await request.get({ url: `/wms/plansetting/get?id=` + id }) +} + +// 新增计划设置 +export const createPlansetting = async (data: PlansettingVO) => { + return await request.post({ url: `/wms/plansetting/create`, data }) +} + +// 修改计划设置 +export const updatePlansetting = async (data: PlansettingVO) => { + return await request.put({ url: `/wms/plansetting/update`, data }) +} + +// 删除计划设置 +export const deletePlansetting = async (id: number) => { + return await request.delete({ url: `/wms/plansetting/delete?id=` + id }) +} + +// 导出计划设置 Excel +export const exportPlansetting = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/plansetting/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/plansetting/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/plansetting/get-import-template' }) +} diff --git a/src/api/wms/preparetoissueDetail/index.ts b/src/api/wms/preparetoissueDetail/index.ts new file mode 100644 index 0000000..c9b0fdd --- /dev/null +++ b/src/api/wms/preparetoissueDetail/index.ts @@ -0,0 +1,54 @@ +import request from '@/config/axios' + +export interface PreparetoissueDetailVO { + toLocationCode: string + workStation: string + dueTime: Date + number: string + itemCode: string + remark: string + createTime: Date + creator: string + planQty: number + uom: string + updateTime: Date + updater: string + available: string +} + +// 查询备料计划子列表 +export const getPreparetoissueDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/preparetoissue-detail/senior', data }) + } else { + return await request.get({ url: `/wms/preparetoissue-detail/page`, params }) + } + +} + +// 查询备料计划子详情 +export const getPreparetoissueDetail = async (id: number) => { + return await request.get({ url: `/wms/preparetoissue-detail/get?id=` + id }) +} + +// 新增备料计划子 +export const createPreparetoissueDetail = async (data: PreparetoissueDetailVO) => { + return await request.post({ url: `/wms/preparetoissue-detail/create`, data }) +} + +// 修改备料计划子 +export const updatePreparetoissueDetail = async (data: PreparetoissueDetailVO) => { + return await request.put({ url: `/wms/preparetoissue-detail/update`, data }) +} + +// 删除备料计划子 +export const deletePreparetoissueDetail = async (id: number) => { + return await request.delete({ url: `/wms/preparetoissue-detail/delete?id=` + id }) +} + +// 导出备料计划子 Excel +export const exportPreparetoissueDetail = async (params) => { + return await request.download({ url: `/wms/preparetoissue-detail/export-excel`, params }) +} diff --git a/src/api/wms/preparetoissueMain/index.ts b/src/api/wms/preparetoissueMain/index.ts new file mode 100644 index 0000000..2dd0c8d --- /dev/null +++ b/src/api/wms/preparetoissueMain/index.ts @@ -0,0 +1,115 @@ +import request from '@/config/axios' + +export interface PreparetoissueMainVO { + productionPlanNumber: string + workshop: string + prodLine: string + shift: string + team: string + planDate: Date + number: string + businessType: string + remark: string + createTime: Date + creator: string + beginTime: Date + endTime: Date + status: string + updateTime: Date + updater: string + available: string +} + +// 查询备料计划主列表 +export const getPreparetoissueMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/preparetoissue-main/senior', data }) + } else { + return await request.get({ url: `/wms/preparetoissue-main/page`, params }) + } +} + +// 查询备料计划主详情 +export const getPreparetoissueMain = async (id: number) => { + return await request.get({ url: `/wms/preparetoissue-main/get?id=` + id }) +} + +// 新增备料计划主 +export const createPreparetoissueMain = async (data: PreparetoissueMainVO) => { + return await request.post({ url: `/wms/preparetoissue-main/create`, data }) +} + +// 修改备料计划主 +export const updatePreparetoissueMain = async (data: PreparetoissueMainVO) => { + return await request.put({ url: `/wms/preparetoissue-main/update`, data }) +} + +// 删除备料计划主 +export const deletePreparetoissueMain = async (id: number) => { + return await request.delete({ url: `/wms/preparetoissue-main/delete?id=` + id }) +} + +// 导出备料计划主 Excel +export const exportPreparetoissueMain = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/preparetoissue-main/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/preparetoissue-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/preparetoissue-main/get-import-template' }) +} + +// bom拆解 +export const getBomDisassemble = async (id: number) => { + return await request.get({ url: `/wms/preparetoissue-main/getBomDisassemble?id=` + id }) +} + + + +// 关闭 +export const close = (id) => { + return request.put({ url: '/wms/preparetoissue-main/close?id=' + id }) +} + +// 提交审批 +export const submit = (id) => { + return request.put({ url: '/wms/preparetoissue-main/submit?id=' + id }) +} + +// 打开 +export const open = (id) => { + return request.put({ url: '/wms/preparetoissue-main/open?id=' + id }) +} + +// 驳回 +export const reject = (id) => { + return request.put({ url: '/wms/preparetoissue-main/reject?id=' + id }) +} + +// 驳回 +export const agree = (id) => { + return request.put({ url: '/wms/preparetoissue-main/agree?id=' + id }) +} + +// 发布 +export const publish = (id) => { + return request.put({ url: '/wms/preparetoissue-main/publish?id=' + id }) +} + +// 重置 +export const resetting = (id) => { + return request.put({ url: '/wms/preparetoissue-main/resetting?id=' + id }) +} + + +// 创建发料申请 +export const generateIssueRequest = (number) => { + return request.post({ url: '/wms/preparetoissue-main/generateIssueRequest?number=' + number }) +} \ No newline at end of file diff --git a/src/api/wms/printBusinesstypeTemplate/index.ts b/src/api/wms/printBusinesstypeTemplate/index.ts new file mode 100644 index 0000000..0ae7cbc --- /dev/null +++ b/src/api/wms/printBusinesstypeTemplate/index.ts @@ -0,0 +1,49 @@ +import request from '@/config/axios' + +export interface PrintBusinesstypeTemplateVO { + id: number + businesstypeCode: string + templateCode: string + remark: string +} + +// 查询打印服务业务类型和打印模板关系列表 +export const getPrintBusinesstypeTemplatePage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/print-businesstype-template/senior', data }) + } else { + return await request.get({ url: `/wms/print-businesstype-template/page`, params }) + } +} + +// 查询打印服务业务类型和打印模板关系详情 +export const getPrintBusinesstypeTemplate = async (id: number) => { + return await request.get({ url: `/wms/print-businesstype-template/get?id=` + id }) +} + +// 新增打印服务业务类型和打印模板关系 +export const createPrintBusinesstypeTemplate = async (data: PrintBusinesstypeTemplateVO) => { + return await request.post({ url: `/wms/print-businesstype-template/create`, data }) +} + +// 修改打印服务业务类型和打印模板关系 +export const updatePrintBusinesstypeTemplate = async (data: PrintBusinesstypeTemplateVO) => { + return await request.put({ url: `/wms/print-businesstype-template/update`, data }) +} + +// 删除打印服务业务类型和打印模板关系 +export const deletePrintBusinesstypeTemplate = async (id: number) => { + return await request.delete({ url: `/wms/print-businesstype-template/delete?id=` + id }) +} + +// 导出打印服务业务类型和打印模板关系 Excel +export const exportPrintBusinesstypeTemplate = async (params) => { + return await request.download({ url: `/wms/print-businesstype-template/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/print-businesstype-template/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/printClientPrinter/index.ts b/src/api/wms/printClientPrinter/index.ts new file mode 100644 index 0000000..d930471 --- /dev/null +++ b/src/api/wms/printClientPrinter/index.ts @@ -0,0 +1,49 @@ +import request from '@/config/axios' + +export interface PrintClientPrinterVO { + id: number + clientCode: string + printerName: string + remark: string +} + +// 查询打印服务客户端与打印机名称关系列表 +export const getPrintClientPrinterPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/print-client-printer/senior', data }) + } else { + return await request.get({ url: `/wms/print-client-printer/page`, params }) + } +} + +// 查询打印服务客户端与打印机名称关系详情 +export const getPrintClientPrinter = async (id: number) => { + return await request.get({ url: `/wms/print-client-printer/get?id=` + id }) +} + +// 新增打印服务客户端与打印机名称关系 +export const createPrintClientPrinter = async (data: PrintClientPrinterVO) => { + return await request.post({ url: `/wms/print-client-printer/create`, data }) +} + +// 修改打印服务客户端与打印机名称关系 +export const updatePrintClientPrinter = async (data: PrintClientPrinterVO) => { + return await request.put({ url: `/wms/print-client-printer/update`, data }) +} + +// 删除打印服务客户端与打印机名称关系 +export const deletePrintClientPrinter = async (id: number) => { + return await request.delete({ url: `/wms/print-client-printer/delete?id=` + id }) +} + +// 导出打印服务客户端与打印机名称关系 Excel +export const exportPrintClientPrinter = async (params) => { + return await request.download({ url: `/wms/print-client-printer/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/print-client-printer/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/printLabelCorrelation/index.ts b/src/api/wms/printLabelCorrelation/index.ts new file mode 100644 index 0000000..a5370b8 --- /dev/null +++ b/src/api/wms/printLabelCorrelation/index.ts @@ -0,0 +1,50 @@ +import request from '@/config/axios' + +export interface PrintCorrelationVO { + id: number + number: string + labelId: string + labelType: string + available: string +} + +// 查询打印标签关联列表 +export const getPrintCorrelationPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/print-correlation/senior', data }) + } else { + return await request.get({ url: `/wms/print-correlation/page`, params }) + } +} + +// 查询打印标签关联详情 +export const getPrintCorrelation = async (id: number) => { + return await request.get({ url: `/wms/print-correlation/get?id=` + id }) +} + +// 新增打印标签关联 +export const createPrintCorrelation = async (data: PrintCorrelationVO) => { + return await request.post({ url: `/wms/print-correlation/create`, data }) +} + +// 修改打印标签关联 +export const updatePrintCorrelation = async (data: PrintCorrelationVO) => { + return await request.put({ url: `/wms/print-correlation/update`, data }) +} + +// 删除打印标签关联 +export const deletePrintCorrelation = async (id: number) => { + return await request.delete({ url: `/wms/print-correlation/delete?id=` + id }) +} + +// 导出打印标签关联 Excel +export const exportPrintCorrelation = async (params) => { + return await request.download({ url: `/wms/print-correlation/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/print-correlation/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/process/index.ts b/src/api/wms/process/index.ts new file mode 100644 index 0000000..dda9c6d --- /dev/null +++ b/src/api/wms/process/index.ts @@ -0,0 +1,70 @@ +import request from '@/config/axios' + +export interface ProcessVO { + code: string + name: string + description: string + type: string + workshopCode: string + productionLineCode: string + available: number + activeTime: Date + expireTime: Date + remark: string +} + +// 查询工序列表 +export const getProcessPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/wms/process/senior', data }) + } else { + return await request.get({ url: `/wms/process/page`, params }) + } +} + +// 查询工序详情 +export const getProcess = async (id: number) => { + return await request.get({ url: `/wms/process/get?id=` + id }) +} + +// 新增工序 +export const createProcess = async (data: ProcessVO) => { + return await request.post({ url: `/wms/process/create`, data }) +} + +// 修改工序 +export const updateProcess = async (data: ProcessVO) => { + return await request.put({ url: `/wms/process/update`, data }) +} + +// 删除工序 +export const deleteProcess = async (id: number) => { + return await request.delete({ url: `/wms/process/delete?id=` + id }) +} + +// 导出工序 Excel +export const exportProcess = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/process/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/process/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/process/get-import-template' }) +} + +// 查询工序列表 +export const getProcessNoPage = async (params) => { + return await request.get({ url: `/wms/process/noPage`, params }) +} + +// 根据code获取数据列表 +export const getProcessByCodes = async (params) => { + return await request.get({ url: `/wms/process/listByCodes`, params }) +} \ No newline at end of file diff --git a/src/api/wms/processproductionRecordDetail/index.ts b/src/api/wms/processproductionRecordDetail/index.ts new file mode 100644 index 0000000..0d8a4d0 --- /dev/null +++ b/src/api/wms/processproductionRecordDetail/index.ts @@ -0,0 +1,61 @@ +import request from '@/config/axios' + +export interface ProcessproductionRecordDetailVO { + masterId: number + number: string + processCode: string + productionLine: string + locationCode: string + componentItemCode: string + batch: string + componentItemcodeQty: number + effectiveDate: Date + available: string + remark: string + deletionTime: Date + deleterId: string + extraProperties: string + concurrencyStamp: number + siteId: string +} + +// 查询工序报产记录子列表 +export const getProcessproductionRecordDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/processproduction-record-detail/senior', data }) + } else { + return await request.get({ url: `/wms/processproduction-record-detail/page`, params }) + } +} + +// 查询工序报产记录子详情 +export const getProcessproductionRecordDetail = async (id: number) => { + return await request.get({ url: `/wms/processproduction-record-detail/get?id=` + id }) +} + +// 新增工序报产记录子 +export const createProcessproductionRecordDetail = async (data: ProcessproductionRecordDetailVO) => { + return await request.post({ url: `/wms/processproduction-record-detail/create`, data }) +} + +// 修改工序报产记录子 +export const updateProcessproductionRecordDetail = async (data: ProcessproductionRecordDetailVO) => { + return await request.put({ url: `/wms/processproduction-record-detail/update`, data }) +} + +// 删除工序报产记录子 +export const deleteProcessproductionRecordDetail = async (id: number) => { + return await request.delete({ url: `/wms/processproduction-record-detail/delete?id=` + id }) +} + +// 导出工序报产记录子 Excel +export const exportProcessproductionRecordDetail = async (params) => { + return await request.download({ url: `/wms/processproduction-record-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/processproduction-record-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/processproductionRecordMain/index.ts b/src/api/wms/processproductionRecordMain/index.ts new file mode 100644 index 0000000..7470d2a --- /dev/null +++ b/src/api/wms/processproductionRecordMain/index.ts @@ -0,0 +1,62 @@ +import request from '@/config/axios' + +export interface ProcessproductionRecordMainVO { + number: string + requestNumber: string + itemCode: string + completedQuantity: number + scrapQuantity: number + available: string + remark: string + deletionTime: Date + deleterId: string + extraProperties: string + concurrencyStamp: number + siteId: string +} + +// 查询工序报产记录主列表 +export const getProcessproductionRecordMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/processproduction-record-main/senior', data }) + } else { + return await request.get({ url: `/wms/processproduction-record-main/page`, params }) + } +} + +// 查询工序报产记录主详情 +export const getProcessproductionRecordMain = async (id: number) => { + return await request.get({ url: `/wms/processproduction-record-main/get?id=` + id }) +} + +// 新增工序报产记录主 +export const createProcessproductionRecordMain = async (data: ProcessproductionRecordMainVO) => { + return await request.post({ url: `/wms/processproduction-record-main/create`, data }) +} + +// 修改工序报产记录主 +export const updateProcessproductionRecordMain = async (data: ProcessproductionRecordMainVO) => { + return await request.put({ url: `/wms/processproduction-record-main/update`, data }) +} + +// 删除工序报产记录主 +export const deleteProcessproductionRecordMain = async (id: number) => { + return await request.delete({ url: `/wms/processproduction-record-main/delete?id=` + id }) +} + +// 导出工序报产记录主 Excel +export const exportProcessproductionRecordMain = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/processproduction-record-main/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/processproduction-record-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/processproduction-record-main/get-import-template' }) +} diff --git a/src/api/wms/processproductionRequestDetail/index.ts b/src/api/wms/processproductionRequestDetail/index.ts new file mode 100644 index 0000000..0ea781d --- /dev/null +++ b/src/api/wms/processproductionRequestDetail/index.ts @@ -0,0 +1,62 @@ +import request from '@/config/axios' + +export interface ProcessproductionRequestDetailVO { + id: number + masterId: number + number: string + processCode: string + productionLine: string + locationCode: string + componentItemCode: string + batch: string + componentItemcodeQty: number + effectiveDate: Date + available: string + remark: string + deletionTime: Date + deleterId: string + extraProperties: string + concurrencyStamp: number + siteId: string +} + +// 查询工序报产申请子列表 +export const getProcessproductionRequestDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/processproduction-request-detail/senior', data }) + } else { + return await request.get({ url: `/wms/processproduction-request-detail/page`, params }) + } +} + +// 查询工序报产申请子详情 +export const getProcessproductionRequestDetail = async (id: number) => { + return await request.get({ url: `/wms/processproduction-request-detail/get?id=` + id }) +} + +// 新增工序报产申请子 +export const createProcessproductionRequestDetail = async (data: ProcessproductionRequestDetailVO) => { + return await request.post({ url: `/wms/processproduction-request-detail/create`, data }) +} + +// 修改工序报产申请子 +export const updateProcessproductionRequestDetail = async (data: ProcessproductionRequestDetailVO) => { + return await request.put({ url: `/wms/processproduction-request-detail/update`, data }) +} + +// 删除工序报产申请子 +export const deleteProcessproductionRequestDetail = async (id: number) => { + return await request.delete({ url: `/wms/processproduction-request-detail/delete?id=` + id }) +} + +// 导出工序报产申请子 Excel +export const exportProcessproductionRequestDetail = async (params) => { + return await request.download({ url: `/wms/processproduction-request-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/processproduction-request-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/processproductionRequestMain/index.ts b/src/api/wms/processproductionRequestMain/index.ts new file mode 100644 index 0000000..d21a240 --- /dev/null +++ b/src/api/wms/processproductionRequestMain/index.ts @@ -0,0 +1,104 @@ +import request from '@/config/axios' + +export interface ProcessproductionRequestMainVO { + id: number + number: string + itemCode: string + completedQuantity: number + scrapQuantity: number + available: string + remark: string + deletionTime: Date + deleterId: string + extraProperties: string + concurrencyStamp: number + siteId: string +} + +// 查询工序报产申请主列表 +export const getProcessproductionRequestMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/processproduction-request-main/senior', data }) + } else { + return await request.get({ url: `/wms/processproduction-request-main/page`, params }) + } +} + + +// 查询工序报产子物料 +export const getProcessproductionChildBomPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/processproduction-request-main/queryChildItemByParentCodeSenior', data }) + } else { + return await request.get({ url: `/wms/processproduction-request-main/queryChildItemByParentCodePage`, params }) + } +} + +// 查询工序报产申请主详情 +export const getProcessproductionRequestMain = async (id: number) => { + return await request.get({ url: `/wms/processproduction-request-main/get?id=` + id }) +} + +// 新增工序报产申请主 +export const createProcessproductionRequestMain = async (data: ProcessproductionRequestMainVO) => { + return await request.post({ url: `/wms/processproduction-request-main/create`, data }) +} + +// 修改工序报产申请主 +export const updateProcessproductionRequestMain = async (data: ProcessproductionRequestMainVO) => { + return await request.put({ url: `/wms/processproduction-request-main/update`, data }) +} + +// 删除工序报产申请主 +export const deleteProcessproductionRequestMain = async (id: number) => { + return await request.delete({ url: `/wms/processproduction-request-main/delete?id=` + id }) +} + +// 导出工序报产申请主 Excel +export const exportProcessproductionRequestMain = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/processproduction-request-main/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/processproduction-request-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/processproduction-request-main/get-import-template' }) +} + +// 关闭 +export const closeProcessproductionRequestMain = async (id) => { + return await request.put({ url: `/wms/processproduction-request-main/close?id=` + id }) +} + +// 重新添加 +export const reAddProcessproductionRequestMain = async (id) => { + return await request.put({ url: `/wms/processproduction-request-main/reAdd?id=` + id }) +} + +// 提交审批 +export const submitProcessproductionRequestMain = async (id) => { + return await request.put({ url: `/wms/processproduction-request-main/submit?id=` + id }) +} + +// 审批驳回 +export const refusedProcessproductionRequestMain = async (id) => { + return await request.put({ url: `/wms/processproduction-request-main/refused?id=` + id }) +} + +// 审批通过 +export const agreeProcessproductionRequestMain = async (id) => { + return await request.put({ url: `/wms/processproduction-request-main/agree?id=` + id }) +} + +// 处理 +export const handleProcessproductionRequestMain = async (id) => { + return await request.put({ url: `/wms/processproduction-request-main/handle?id=` + id }) +} diff --git a/src/api/wms/productdismantleJobDetail/index.ts b/src/api/wms/productdismantleJobDetail/index.ts new file mode 100644 index 0000000..bdd27c6 --- /dev/null +++ b/src/api/wms/productdismantleJobDetail/index.ts @@ -0,0 +1,70 @@ +import request from '@/config/axios' + +export interface ProductdismantleJobDetailVO { + productionLineCode: string + workStationCode: string + processCode: string + packingNumber: string + containerNumber: string + batch: string + produceDate: Date + expireDate: Date + inventoryStatus: string + packQty: number + packUnit: string + itemCode: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + number: string + remark: string + createTime: Date + creator: string + fromLocationCode: string + ownerCode: string + fromOwnerCode: string +} + +// 查询制品拆解任务子列表 +export const getProductdismantleJobDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productdismantle-job-detail/senior', data }) + } else { + return await request.get({ url: `/wms/productdismantle-job-detail/page`, params }) + } +} + +// 查询制品拆解任务子详情 +export const getProductdismantleJobDetail = async (id: number) => { + return await request.get({ url: `/wms/productdismantle-job-detail/get?id=` + id }) +} + +// 新增制品拆解任务子 +export const createProductdismantleJobDetail = async (data: ProductdismantleJobDetailVO) => { + return await request.post({ url: `/wms/productdismantle-job-detail/create`, data }) +} + +// 修改制品拆解任务子 +export const updateProductdismantleJobDetail = async (data: ProductdismantleJobDetailVO) => { + return await request.put({ url: `/wms/productdismantle-job-detail/update`, data }) +} + +// 删除制品拆解任务子 +export const deleteProductdismantleJobDetail = async (id: number) => { + return await request.delete({ url: `/wms/productdismantle-job-detail/delete?id=` + id }) +} + +// 导出制品拆解任务子 Excel +export const exportProductdismantleJobDetail = async (params) => { + return await request.download({ url: `/wms/productdismantle-job-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/productdismantle-job-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/productdismantleJobMain/index.ts b/src/api/wms/productdismantleJobMain/index.ts new file mode 100644 index 0000000..0459b0d --- /dev/null +++ b/src/api/wms/productdismantleJobMain/index.ts @@ -0,0 +1,88 @@ +import request from '@/config/axios' + +export interface ProductdismantleJobMainVO { + requestNumber: string + workshopCode: string + team: string + shift: string + fromWarehouseCode: string + requestTime: Date + requestDueTime: Date + status: string + expiredTime: Date + updateTime: Date + updater: string + jobStageStatus: string + priority: number + priorityIncrement: number + departmentCode: string + acceptUserId: string + acceptTime: Date + completeUserId: string + completeTime: Date + fromAreaTypes: string + toAreaTypes: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + fromAreaCodes: string + autoComplete: string + allowModifyLocation: string + allowModifyQty: string + allowBiggerQty: string + allowSmallerQty: string + allowModifyInventoryStatus: string + allowContinuousScanning: string + allowPartialComplete: string + allowModifyBatch: string + allowModifyPackingNumber: string +} + +// 查询制品拆解任务主列表 +export const getProductdismantleJobMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productdismantle-job-main/senior', data }) + } else { + return await request.get({ url: `/wms/productdismantle-job-main/page`, params }) + } +} + +// 查询制品拆解任务主详情 +export const getProductdismantleJobMain = async (id: number) => { + return await request.get({ url: `/wms/productdismantle-job-main/get?id=` + id }) +} + +// 新增制品拆解任务主 +export const createProductdismantleJobMain = async (data: ProductdismantleJobMainVO) => { + return await request.post({ url: `/wms/productdismantle-job-main/create`, data }) +} + +// 修改制品拆解任务主 +export const updateProductdismantleJobMain = async (data: ProductdismantleJobMainVO) => { + return await request.put({ url: `/wms/productdismantle-job-main/update`, data }) +} + +// 删除制品拆解任务主 +export const deleteProductdismantleJobMain = async (id: number) => { + return await request.delete({ url: `/wms/productdismantle-job-main/delete?id=` + id }) +} + +// 导出制品拆解任务主 Excel +export const exportProductdismantleJobMain = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productdismantle-job-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/productdismantle-job-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/productdismantle-job-main/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/productdismantleRecordDetaila/index.ts b/src/api/wms/productdismantleRecordDetaila/index.ts new file mode 100644 index 0000000..da0a502 --- /dev/null +++ b/src/api/wms/productdismantleRecordDetaila/index.ts @@ -0,0 +1,72 @@ +import request from '@/config/axios' + +export interface ProductdismantleRecordDetailaVO { + fromOwnerCode: string + productionLineCode: string + workStationCode: string + processCode: string + packingNumber: string + containerNumber: string + batch: string + produceDate: Date + expireDate: Date + fromLocationCode: string + fromLocationGroupCode: string + fromAreaCode: string + inventoryStatus: string + number: string + itemCode: string + remark: string + createTime: Date + creator: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + code: string + interfaceType: string + jobDetailId: string +} + +// 查询制品拆解记录子列表 +export const getProductdismantleRecordDetailaPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productdismantle-record-detaila/senior', data }) + } else { + return await request.get({ url: `/wms/productdismantle-record-detaila/page`, params }) + } +} + +// 查询制品拆解记录子详情 +export const getProductdismantleRecordDetaila = async (id: number) => { + return await request.get({ url: `/wms/productdismantle-record-detaila/get?id=` + id }) +} + +// 新增制品拆解记录子 +export const createProductdismantleRecordDetaila = async (data: ProductdismantleRecordDetailaVO) => { + return await request.post({ url: `/wms/productdismantle-record-detaila/create`, data }) +} + +// 修改制品拆解记录子 +export const updateProductdismantleRecordDetaila = async (data: ProductdismantleRecordDetailaVO) => { + return await request.put({ url: `/wms/productdismantle-record-detaila/update`, data }) +} + +// 删除制品拆解记录子 +export const deleteProductdismantleRecordDetaila = async (id: number) => { + return await request.delete({ url: `/wms/productdismantle-record-detaila/delete?id=` + id }) +} + +// 导出制品拆解记录子 Excel +export const exportProductdismantleRecordDetaila = async (params) => { + return await request.download({ url: `/wms/productdismantle-record-detaila/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/productdismantle-record-detaila/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/productdismantleRecordMain/index.ts b/src/api/wms/productdismantleRecordMain/index.ts new file mode 100644 index 0000000..6cf740a --- /dev/null +++ b/src/api/wms/productdismantleRecordMain/index.ts @@ -0,0 +1,73 @@ +import request from '@/config/axios' + +export interface ProductdismantleRecordMainVO { + requestNumber: string + workshopCode: string + team: string + shift: string + outTransactionType: string + inTransactionType: string + executeTime: Date + activeDate: Date + requestTime: Date + dueTime: Date + departmentCode: string + interfaceType: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + code: string + fromWarehouseCode: string + fromAreaTypes: string + fromAreaCodes: string + available: string +} + +// 查询制品拆解记录主列表 +export const getProductdismantleRecordMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productdismantle-record-main/senior', data }) + } else { + return await request.get({ url: `/wms/productdismantle-record-main/page`, params }) + } +} + +// 查询制品拆解记录主详情 +export const getProductdismantleRecordMain = async (id: number) => { + return await request.get({ url: `/wms/productdismantle-record-main/get?id=` + id }) +} + +// 新增制品拆解记录主 +export const createProductdismantleRecordMain = async (data: ProductdismantleRecordMainVO) => { + return await request.post({ url: `/wms/productdismantle-record-main/create`, data }) +} + +// 修改制品拆解记录主 +export const updateProductdismantleRecordMain = async (data: ProductdismantleRecordMainVO) => { + return await request.put({ url: `/wms/productdismantle-record-main/update`, data }) +} + +// 删除制品拆解记录主 +export const deleteProductdismantleRecordMain = async (id: number) => { + return await request.delete({ url: `/wms/productdismantle-record-main/delete?id=` + id }) +} + +// 导出制品拆解记录主 Excel +export const exportProductdismantleRecordMain = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productdismantle-record-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/productdismantle-record-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/productdismantle-record-main/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/productdismantleRequestDetaila/index.ts b/src/api/wms/productdismantleRequestDetaila/index.ts new file mode 100644 index 0000000..edb9652 --- /dev/null +++ b/src/api/wms/productdismantleRequestDetaila/index.ts @@ -0,0 +1,71 @@ +import request from '@/config/axios' + +export interface ProductdismantleRequestDetailaVO { + productionLineCode: string + workStationCode: string + processCode: string + packingNumber: string + containerNumber: string + batch: string + produceDate: Date + expireDate: Date + inventoryStatus: string + packQty: number + packUnit: string + number: string + itemCode: string + remark: string + createTime: Date + creator: string + itemName: string + itemDesc1: string + itemDesc2: string + projectOde: string + qty: number + uom: string + updateTime: Date + updater: string + fromLocationCode: string + fromOwnerCode: string +} + +// 查询制品拆解申请子列表 +export const getProductdismantleRequestDetailaPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productdismantle-request-detaila/senior', data }) + } else { + return await request.get({ url: `/wms/productdismantle-request-detaila/page`, params }) + } +} + +// 查询制品拆解申请子详情 +export const getProductdismantleRequestDetaila = async (id: number) => { + return await request.get({ url: `/wms/productdismantle-request-detaila/get?id=` + id }) +} + +// 新增制品拆解申请子 +export const createProductdismantleRequestDetaila = async (data: ProductdismantleRequestDetailaVO) => { + return await request.post({ url: `/wms/productdismantle-request-detaila/create`, data }) +} + +// 修改制品拆解申请子 +export const updateProductdismantleRequestDetaila = async (data: ProductdismantleRequestDetailaVO) => { + return await request.put({ url: `/wms/productdismantle-request-detaila/update`, data }) +} + +// 删除制品拆解申请子 +export const deleteProductdismantleRequestDetaila = async (id: number) => { + return await request.delete({ url: `/wms/productdismantle-request-detaila/delete?id=` + id }) +} + +// 导出制品拆解申请子 Excel +export const exportProductdismantleRequestDetaila = async (params) => { + return await request.download({ url: `/wms/productdismantle-request-detaila/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/productdismantle-request-detaila/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/productdismantleRequestMain/index.ts b/src/api/wms/productdismantleRequestMain/index.ts new file mode 100644 index 0000000..e4af1dd --- /dev/null +++ b/src/api/wms/productdismantleRequestMain/index.ts @@ -0,0 +1,101 @@ +import request from '@/config/axios' + +export interface ProductdismantleRequestMainVO { + workshopCode: string + team: string + shift: string + fromWarehouseCode: string + fromAreaTypes: string + fromAreaCodes: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + requestTime: Date + dueTime: Date + departmentCode: string + status: string + updateTime: Date + updater: string + autoCommit: string + autoAgree: string + autoExecute: string + directCreateRecord: string +} + +// 查询制品拆解申请主列表 +export const getProductdismantleRequestMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productdismantle-request-main/senior', data }) + } else { + return await request.get({ url: `/wms/productdismantle-request-main/page`, params }) + } +} + +// 查询制品拆解申请主详情 +export const getProductdismantleRequestMain = async (id: number) => { + return await request.get({ url: `/wms/productdismantle-request-main/get?id=` + id }) +} + +// 新增制品拆解申请主 +export const createProductdismantleRequestMain = async (data: ProductdismantleRequestMainVO) => { + return await request.post({ url: `/wms/productdismantle-request-main/create`, data }) +} + +// 修改制品拆解申请主 +export const updateProductdismantleRequestMain = async (data: ProductdismantleRequestMainVO) => { + return await request.put({ url: `/wms/productdismantle-request-main/update`, data }) +} + +// 删除制品拆解申请主 +export const deleteProductdismantleRequestMain = async (id: number) => { + return await request.delete({ url: `/wms/productdismantle-request-main/delete?id=` + id }) +} + +// 导出制品拆解申请主 Excel +export const exportProductdismantleRequestMain = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/productdismantle-request-main/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/productdismantle-request-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/productdismantle-request-main/get-import-template' }) +} + +// 关闭 +export const close = (id) => { + return request.put({ url: '/wms/productdismantle-request-main/close?id=' + id }) +} + +// 重新添加 +export const reAdd = (id) => { + return request.put({ url: '/wms/productdismantle-request-main/reAdd?id=' + id }) +} + +// 提交审批 +export const submit = (id) => { + return request.put({ url: '/wms/productdismantle-request-main/submit?id=' + id }) +} + +// 驳回 +export const refused = (id) => { + return request.put({ url: '/wms/productdismantle-request-main/refused?id=' + id }) +} + +// 审批通过 +export const agree = (id) => { + return request.put({ url: '/wms/productdismantle-request-main/agree?id=' + id }) +} + +// 处理 +export const handle = (id) => { + return request.put({ url: '/wms/productdismantle-request-main/handle?id=' + id }) +} \ No newline at end of file diff --git a/src/api/wms/productionDetail/index.ts b/src/api/wms/productionDetail/index.ts new file mode 100644 index 0000000..b9c7674 --- /dev/null +++ b/src/api/wms/productionDetail/index.ts @@ -0,0 +1,53 @@ +import request from '@/config/axios' + +export interface ProductionDetailVO { + bomVersion: string + goodQty: number + notGoodQty: number + number: string + itemCode: string + remark: string + createTime: Date + creator: string + planQty: number + uom: string + updateTime: Date + updater: string + available: string +} + +// 查询生产计划子列表 +export const getProductionDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/production-detail/senior', data }) + } else { + return await request.get({ url: `/wms/production-detail/page`, params }) + } +} + +// 查询生产计划子详情 +export const getProductionDetail = async (id: number) => { + return await request.get({ url: `/wms/production-detail/get?id=` + id }) +} + +// 新增生产计划子 +export const createProductionDetail = async (data: ProductionDetailVO) => { + return await request.post({ url: `/wms/production-detail/create`, data }) +} + +// 修改生产计划子 +export const updateProductionDetail = async (data: ProductionDetailVO) => { + return await request.put({ url: `/wms/production-detail/update`, data }) +} + +// 删除生产计划子 +export const deleteProductionDetail = async (id: number) => { + return await request.delete({ url: `/wms/production-detail/delete?id=` + id }) +} + +// 导出生产计划子 Excel +export const exportProductionDetail = async (params) => { + return await request.download({ url: `/wms/production-detail/export-excel`, params }) +} diff --git a/src/api/wms/productionMain/index.ts b/src/api/wms/productionMain/index.ts new file mode 100644 index 0000000..372b1c8 --- /dev/null +++ b/src/api/wms/productionMain/index.ts @@ -0,0 +1,201 @@ +import request from '@/config/axios' + +export interface ProductionMainVO { + displayOrder: number + workshop: string + productionLine: string + shift: string + team: string + planDate: Date + number: string + businessType: string + remark: string + createTime: Date + creator: string + beginTime: Date + endTime: Date + status: string + updateTime: Date + updater: string + available: string + woNumber: string + woLine: string +} + +// 查询生产计划主列表 +export const getProductionMainPage = async (params) => { + params.planType = 'predict' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/production-main/senior', data }) + } else { + return await request.get({ url: `/wms/production-main/page`, params }) + } +} + +// 查询 —— 装配 主列表 +export const getProductionMainAssemblePage = async (params) => { + params.planType = 'assemble' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/production-main/senior', data }) + } else { + return await request.get({ url: `/wms/production-main/page`, params }) + } +} + +// 查询 —— 预生产备件 主列表 +export const getProductionMainPredictSparePartPage = async (params) => { + params.planType = 'predictSparePart' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/production-main/senior', data }) + } else { + return await request.get({ url: `/wms/production-main/page`, params }) + } +} + +// 查询 —— 装配备件 主列表 +export const getProductionMainASparePartPage = async (params) => { + params.planType = 'assembleSparePart' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/production-main/senior', data }) + } else { + return await request.get({ url: `/wms/production-main/page`, params }) + } +} + +// 查询生产计划子表数据不可用物料 +export const getProductionDetail = async (id: number) => { + return await request.get({ url: `/wms/production-main/getDetailByAvailable?id=` + id }) +} + +// 查询生产计划主详情 +export const getProductionMain = async (id: number) => { + return await request.get({ url: `/wms/production-main/get?id=` + id }) +} + +// 新增生产计划主 +export const createProductionMain = async (data: ProductionMainVO) => { + return await request.post({ url: `/wms/production-main/create`, data }) +} + +// 修改生产计划主 +export const updateProductionMain = async (data: ProductionMainVO) => { + return await request.put({ url: `/wms/production-main/update`, data }) +} + +// 删除生产计划主 +export const deleteProductionMain = async (id: number) => { + return await request.delete({ url: `/wms/production-main/delete?id=` + id }) +} + +// 导出预生产计划主 Excel +export const exportProductionMain = async (params) => { + params.planType = 'predict' + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/production-main/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/production-main/export-excel`, params }) + } +} + +// 导出装配计划主 Excel +export const exportProductionMainAssemble = async (params) => { + params.planType = 'assemble' + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/production-main/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/production-main/export-excel`, params }) + } +} + +// 导出装配备件计划主 Excel +export const exportProductionMainPredictSparePart = async (params) => { + params.planType = 'predictSparePart' + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/production-main/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/production-main/export-excel`, params }) + } +} + +// 导出预生产备件计划主 Excel +export const exportProductionMainAssembleSparePart = async (params) => { + params.planType = 'assembleSparePart' + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/production-main/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/production-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/production-main/get-import-template' }) +} + +// 关闭 +export const close = (id) => { + return request.put({ url: '/wms/production-main/close?id=' + id }) +} + +// 提交审批 +export const submit = (id) => { + return request.put({ url: '/wms/production-main/submit?id=' + id }) +} + +// 打开 +export const open = (id) => { + return request.put({ url: '/wms/production-main/open?id=' + id }) +} + +// 驳回 +export const reject = (id) => { + return request.put({ url: '/wms/production-main/reject?id=' + id }) +} + +// 驳回 +export const agree = (id) => { + return request.put({ url: '/wms/production-main/agree?id=' + id }) +} + +// 发布 +export const publish = (id) => { + return request.put({ url: '/wms/production-main/publish?id=' + id }) +} + +// 重置 +export const resetting = (id) => { + return request.put({ url: '/wms/production-main/resetting?id=' + id }) +} + +// 创建备料计划 +export const generatePreparetoissue = (number) => { + return request.post({ url: '/wms/production-main/generatePreparetoissue?number=' + number }) +} + +// 创建制品收货申请 +export const generateProductreceiptRequest = (number) => { + return request.post({ url: '/wms/production-main/generateProductreceiptRequest?number=' + number }) +} + +// 创建发料申请 +export const generateIssueRequest = (number) => { + return request.post({ url: '/wms/preparetoissue-main/generateIssueRequest?number=' + number }) +} + + + + + + diff --git a/src/api/wms/productionitemcodeSpareitemcode/index.ts b/src/api/wms/productionitemcodeSpareitemcode/index.ts new file mode 100644 index 0000000..69a32a0 --- /dev/null +++ b/src/api/wms/productionitemcodeSpareitemcode/index.ts @@ -0,0 +1,61 @@ +import request from '@/config/axios' + +export interface ProductionitemcodeSpareitemcodeVO { + id: number + productionItemCode: string + spareItemCode: string + available: string + remark: string +} + +// 查询量产件备件关系列表 +export const getProductionitemcodeSpareitemcodePage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productionitemcode-spareitemcode/senior', data }) + } else { + return await request.get({ url: `/wms/productionitemcode-spareitemcode/page`, params }) + } +} + +// 查询量产件备件关系列表 +export const getProductionitemcodeSpareitemcodeRelation = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productionitemcode-spareitemcode/getRelationSenior', data }) + } else { + return await request.get({ url: `/wms/productionitemcode-spareitemcode/getRelation`, params }) + } +} + +// 查询量产件备件关系详情 +export const getProductionitemcodeSpareitemcode = async (id: number) => { + return await request.get({ url: `/wms/productionitemcode-spareitemcode/get?id=` + id }) +} + +// 新增量产件备件关系 +export const createProductionitemcodeSpareitemcode = async (data: ProductionitemcodeSpareitemcodeVO) => { + return await request.post({ url: `/wms/productionitemcode-spareitemcode/create`, data }) +} + +// 修改量产件备件关系 +export const updateProductionitemcodeSpareitemcode = async (data: ProductionitemcodeSpareitemcodeVO) => { + return await request.put({ url: `/wms/productionitemcode-spareitemcode/update`, data }) +} + +// 删除量产件备件关系 +export const deleteProductionitemcodeSpareitemcode = async (id: number) => { + return await request.delete({ url: `/wms/productionitemcode-spareitemcode/delete?id=` + id }) +} + +// 导出量产件备件关系 Excel +export const exportProductionitemcodeSpareitemcode = async (params) => { + return await request.download({ url: `/wms/productionitemcode-spareitemcode/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/productionitemcode-spareitemcode/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/productionline/index.ts b/src/api/wms/productionline/index.ts new file mode 100644 index 0000000..3a0176b --- /dev/null +++ b/src/api/wms/productionline/index.ts @@ -0,0 +1,72 @@ +import request from '@/config/axios' + +export interface ProductionlineVO { + code: string + name: string + description: string + type: string + workshopCode: string + rawLocationCode: string + fgLocationCode: string + available: number + activeTime: Date + expireTime: Date + remark: string +} + +// 查询生产线列表 +export const getProductionlinePage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/wms/productionline/senior', data }) + } else { + return await request.get({ url: `/wms/productionline/page`, params }) + } +} + +// 查询生产线详情 +export const getProductionline = async (id: number) => { + return await request.get({ url: `/wms/productionline/get?id=` + id }) +} + +// 新增生产线 +export const createProductionline = async (data: ProductionlineVO) => { + return await request.post({ url: `/wms/productionline/create`, data }) +} + +// 修改生产线 +export const updateProductionline = async (data: ProductionlineVO) => { + return await request.put({ url: `/wms/productionline/update`, data }) +} + +// 删除生产线 +export const deleteProductionline = async (id: number) => { + return await request.delete({ url: `/wms/productionline/delete?id=` + id }) +} + +// 导出生产线 Excel +export const exportProductionline = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/productionline/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/productionline/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/productionline/get-import-template' }) +} + + +// 查询生产线列表 +export const getProductionlineNoPage = async (params) => { + return await request.get({ url: `/wms/productionline/noPage`, params }) +} + +// 根据code获取数据列表 +export const getProductionlineByCodes = async (params) => { + return await request.get({ url: `/wms/productionline/listByCodes`, params }) +} \ No newline at end of file diff --git a/src/api/wms/productionlineitem/index.ts b/src/api/wms/productionlineitem/index.ts new file mode 100644 index 0000000..29715b3 --- /dev/null +++ b/src/api/wms/productionlineitem/index.ts @@ -0,0 +1,90 @@ +import request from '@/config/axios' + +export interface ProductionlineitemVO { + fgLocationCode: string + productionLineCode: string + itemCode: string + available: number + activeTime: Date + expireTime: Date + remark: string +} + +// 查询生产线物料关系列表 +export const getProductionlineitemPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/wms/productionlineitem/senior', data }) + } else { + return await request.get({ url: `/wms/productionlineitem/page`, params }) + } +} + +// 查询生产线物料关系列表 +export const getProductionlineitemPageBom = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/wms/productionlineitem/seniorBom', data }) + } else { + return await request.get({ url: `/wms/productionlineitem/pageBom`, params }) + } +} + + +// 查询生产线物料关系列表——根据 生产线 物料类型为原料和半成品 +export const getProductionlineitemPageByItemtype = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productionlineitem/pageByItemtypeSenior', data }) + } else { + return await request.get({ url: `/wms/productionlineitem/pageByItemtype`, params }) + } + +} + +// 查询生产线物料关系详情 +export const getProductionlineitem = async (id: number) => { + return await request.get({ url: `/wms/productionlineitem/get?id=` + id }) +} + +// 新增生产线物料关系 +export const createProductionlineitem = async (data: ProductionlineitemVO) => { + return await request.post({ url: `/wms/productionlineitem/create`, data }) +} + +// 修改生产线物料关系 +export const updateProductionlineitem = async (data: ProductionlineitemVO) => { + return await request.put({ url: `/wms/productionlineitem/update`, data }) +} + +// 删除生产线物料关系 +export const deleteProductionlineitem = async (id: number) => { + return await request.delete({ url: `/wms/productionlineitem/delete?id=` + id }) +} + +// 导出生产线物料关系 Excel +export const exportProductionlineitem = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/productionlineitem/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/productionlineitem/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/productionlineitem/get-import-template' }) +} + + +export const getProductionLineCodelistByCodes = async (params) => { + return await request.get({ url: `/wms/productionlineitem/listByCodes`, params }) +} + +export const selectItemCodeToProductionLineCode = async (itemCode: String) => { + return await request.get({ url: `/wms/productionlineitem/selectItemCodeToProductionLineCode?itemCode=` + itemCode }) +} \ No newline at end of file diff --git a/src/api/wms/productionreceiptJobDetail/index.ts b/src/api/wms/productionreceiptJobDetail/index.ts new file mode 100644 index 0000000..9300b16 --- /dev/null +++ b/src/api/wms/productionreceiptJobDetail/index.ts @@ -0,0 +1,67 @@ +import request from '@/config/axios' + +export interface ProductionreceiptJobDetailVO { + productionLineCode: string + workStationCode: string + onTheWayLocationCode: string + packingNumber: string + containerNumber: string + batch: string + inventoryStatus: string + fromLocationCode: string + toLocationCode: string + itemCode: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + number: string + remark: string + createTime: Date + creator: string + fromOwnerCode: string + toOwnerCode: string +} + +// 查询生产收料任务子列表 +export const getProductionreceiptJobDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productionreceipt-job-detail/senior', data }) + } else { + return await request.get({ url: `/wms/productionreceipt-job-detail/page`, params }) + } +} + +// 查询生产收料任务子详情 +export const getProductionreceiptJobDetail = async (id: number) => { + return await request.get({ url: `/wms/productionreceipt-job-detail/get?id=` + id }) +} + +// 新增生产收料任务子 +export const createProductionreceiptJobDetail = async (data: ProductionreceiptJobDetailVO) => { + return await request.post({ url: `/wms/productionreceipt-job-detail/create`, data }) +} + +// 修改生产收料任务子 +export const updateProductionreceiptJobDetail = async (data: ProductionreceiptJobDetailVO) => { + return await request.put({ url: `/wms/productionreceipt-job-detail/update`, data }) +} + +// 删除生产收料任务子 +export const deleteProductionreceiptJobDetail = async (id: number) => { + return await request.delete({ url: `/wms/productionreceipt-job-detail/delete?id=` + id }) +} + +// 导出生产收料任务子 Excel +export const exportProductionreceiptJobDetail = async (params) => { + return await request.download({ url: `/wms/productionreceipt-job-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/productionreceipt-job-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/productionreceiptJobMain/index.ts b/src/api/wms/productionreceiptJobMain/index.ts new file mode 100644 index 0000000..34c3e07 --- /dev/null +++ b/src/api/wms/productionreceiptJobMain/index.ts @@ -0,0 +1,108 @@ +import request from '@/config/axios' + +export interface ProductionreceiptJobMainVO { + issueJobNumber: string + workshopCode: string + fromWarehouseCode: string + toWarehouseCode: string + requestTime: Date + requestDueTime: Date + status: string + expiredTime: Date + updateTime: Date + update: string + jobStageStatus: string + priority: number + priorityIncrement: number + departmentCode: string + acceptUserId: string + acceptTime: Date + completeUserId: string + completeTime: Date + fromAreaTypes: string + toAreaTypes: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + fromAreaCodes: string + toAreaCodes: string + useOnTheWayLocation: string + autoComplete: string + allowModifyLocation: string + allowModifyQty: string + allowBiggerQty: string + allowSmallerQty: string + allowModifyInventoryStatus: string + allowContinuousScanning: string + allowPartialComplete: string + allowModifyBatch: string + allowModifyPackingNumber: string +} + +// 查询生产收料任务主列表 +export const getProductionreceiptJobMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productionreceipt-job-main/senior', data }) + } else { + return await request.get({ url: `/wms/productionreceipt-job-main/page`, params }) + } +} + +// 查询生产收料任务主详情 +export const getProductionreceiptJobMain = async (id: number) => { + return await request.get({ url: `/wms/productionreceipt-job-main/get?id=` + id }) +} + +// 新增生产收料任务主 +export const createProductionreceiptJobMain = async (data: ProductionreceiptJobMainVO) => { + return await request.post({ url: `/wms/productionreceipt-job-main/create`, data }) +} + +// 修改生产收料任务主 +export const updateProductionreceiptJobMain = async (data: ProductionreceiptJobMainVO) => { + return await request.put({ url: `/wms/productionreceipt-job-main/update`, data }) +} + +// 删除生产收料任务主 +export const deleteProductionreceiptJobMain = async (id: number) => { + return await request.delete({ url: `/wms/productionreceipt-job-main/delete?id=` + id }) +} + +// 导出生产收料任务主 Excel +export const exportProductionreceiptJobMain = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/productionreceipt-job-main/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/productionreceipt-job-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/productionreceipt-job-main/get-import-template' }) +} + +// 承接发料任务 +export const acceptIssueMain = async (id) => { + return await request.put({ url: `/wms/productionreceipt-job-main/accept?id=` + id }) +} + +// 放弃发料任务 +export const abandonIssueMain = async (id) => { + return await request.put({ url: `/wms/productionreceipt-job-main/abandon?id=` + id }) +} + +// 关闭发料任务 +export const closeIssueMain = async (id) => { + return await request.put({ url: `/wms/productionreceipt-job-main/close?id=` + id }) +} + +// 执行发料任务 +export const executeIssueMain = async (data) => { + return await request.put({ url: `/wms/productionreceipt-job-main/execute`, data}) +} \ No newline at end of file diff --git a/src/api/wms/productionreceiptRecordDetail/index.ts b/src/api/wms/productionreceiptRecordDetail/index.ts new file mode 100644 index 0000000..1afb5f5 --- /dev/null +++ b/src/api/wms/productionreceiptRecordDetail/index.ts @@ -0,0 +1,77 @@ +import request from '@/config/axios' + +export interface ProductionreceiptRecordDetailVO { + productionLineCode: string + workStationCode: string + onTheWayLocationCode: string + fromPackingNumber: string + toPackingNumber: string + fromBatch: string + toBatch: string + inventoryStatus: string + fromLocationCode: string + fromLocationGroupCode: string + fromAreaCode: string + toLocationCode: string + toLocationGroupCode: string + toAreaCode: string + number: string + itemCode: string + remark: string + createTime: Date + creator: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + code: string + interfaceType: string + jobDetailId: string + fromContainerNumber: string + toContainerNumber: string + fromOwnerCode: string + toOwnerCode: string +} + +// 查询生产收料记录子列表 +export const getProductionreceiptRecordDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productionreceipt-record-detail/senior', data }) + } else { + return await request.get({ url: `/wms/productionreceipt-record-detail/page`, params }) + } +} + +// 查询生产收料记录子详情 +export const getProductionreceiptRecordDetail = async (id: number) => { + return await request.get({ url: `/wms/productionreceipt-record-detail/get?id=` + id }) +} + +// 新增生产收料记录子 +export const createProductionreceiptRecordDetail = async (data: ProductionreceiptRecordDetailVO) => { + return await request.post({ url: `/wms/productionreceipt-record-detail/create`, data }) +} + +// 修改生产收料记录子 +export const updateProductionreceiptRecordDetail = async (data: ProductionreceiptRecordDetailVO) => { + return await request.put({ url: `/wms/productionreceipt-record-detail/update`, data }) +} + +// 删除生产收料记录子 +export const deleteProductionreceiptRecordDetail = async (id: number) => { + return await request.delete({ url: `/wms/productionreceipt-record-detail/delete?id=` + id }) +} + +// 导出生产收料记录子 Excel +export const exportProductionreceiptRecordDetail = async (params) => { + return await request.download({ url: `/wms/productionreceipt-record-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/productionreceipt-record-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/productionreceiptRecordMain/index.ts b/src/api/wms/productionreceiptRecordMain/index.ts new file mode 100644 index 0000000..c17a65c --- /dev/null +++ b/src/api/wms/productionreceiptRecordMain/index.ts @@ -0,0 +1,76 @@ +import request from '@/config/axios' + +export interface ProductionreceiptRecordMainVO { + issueJobNumber: string + jobNumber: string + workshopCode: string + outTransactionType: string + inTransactionType: string + executeTime: Date + activeDate: Date + requestTime: Date + dueTime: Date + departmentCode: string + interfaceType: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + code: string + fromWarehouseCode: string + fromAreaTypes: string + fromAreaCodes: string + toWarehouseCode: string + toAreaTypes: string + toAreaCodes: string + useOnTheWayLocation: string + available: string +} + +// 查询生产收料记录主列表 +export const getProductionreceiptRecordMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productionreceipt-record-main/senior', data }) + } else { + return await request.get({ url: `/wms/productionreceipt-record-main/page`, params }) + } +} + +// 查询生产收料记录主详情 +export const getProductionreceiptRecordMain = async (id: number) => { + return await request.get({ url: `/wms/productionreceipt-record-main/get?id=` + id }) +} + +// 新增生产收料记录主 +export const createProductionreceiptRecordMain = async (data: ProductionreceiptRecordMainVO) => { + return await request.post({ url: `/wms/productionreceipt-record-main/create`, data }) +} + +// 修改生产收料记录主 +export const updateProductionreceiptRecordMain = async (data: ProductionreceiptRecordMainVO) => { + return await request.put({ url: `/wms/productionreceipt-record-main/update`, data }) +} + +// 删除生产收料记录主 +export const deleteProductionreceiptRecordMain = async (id: number) => { + return await request.delete({ url: `/wms/productionreceipt-record-main/delete?id=` + id }) +} + +// 导出生产收料记录主 Excel +export const exportProductionreceiptRecordMain = async (params) => { + if (params.isSearch){ + const data = {...params} + return await request.downloadPost({ url: `/wms/productionreceipt-record-main/export-excel-senior`, data }) + }else { + return await request.download({ url: `/wms/productionreceipt-record-main/export-excel`, params }) + } + +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/productionreceipt-record-main/get-import-template' }) +} diff --git a/src/api/wms/productionreturnJobDetail/index.ts b/src/api/wms/productionreturnJobDetail/index.ts new file mode 100644 index 0000000..50b6257 --- /dev/null +++ b/src/api/wms/productionreturnJobDetail/index.ts @@ -0,0 +1,87 @@ +import request from '@/config/axios' + +export interface ProductionreturnJobDetailVO { + productionLineCode: string + workStationCode: string + packingNumber: string + containerNumber: string + batch: string + inventoryStatus: string + fromLocationCode: string + toLocationCode: string + itemCode: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + number: string + remark: string + createTime: Date + creator: string + fromOwnerCode: string + toOwnerCode: string +} + +// 查询生产退料任务子列表 +export const getProductionreturnJobDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productionreturn-job-detail/senior', data }) + } else { + return await request.get({ url: `/wms/productionreturn-job-detail/page`, params }) + } +} +// 查询生产退料任务子列表 +export const getProductionreturnJobDetailPageStore = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productionreturn-job-detail-store/senior', data }) + } else { + return await request.get({ url: `/wms/productionreturn-job-detail-store/page`, params }) + } +} + +// 查询隔离退料任务子列表 +export const getProductionreturnJobDetailPageHold = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productionreturn-job-detail-hold/senior', data }) + } else { + return await request.get({ url: `/wms/productionreturn-job-detail-hold/page`, params }) + } +} + +// 查询生产退料任务子详情 +export const getProductionreturnJobDetail = async (id: number) => { + return await request.get({ url: `/wms/productionreturn-job-detail/get?id=` + id }) +} + +// 新增生产退料任务子 +export const createProductionreturnJobDetail = async (data: ProductionreturnJobDetailVO) => { + return await request.post({ url: `/wms/productionreturn-job-detail/create`, data }) +} + +// 修改生产退料任务子 +export const updateProductionreturnJobDetail = async (data: ProductionreturnJobDetailVO) => { + return await request.put({ url: `/wms/productionreturn-job-detail/update`, data }) +} + +// 删除生产退料任务子 +export const deleteProductionreturnJobDetail = async (id: number) => { + return await request.delete({ url: `/wms/productionreturn-job-detail/delete?id=` + id }) +} + +// 导出生产退料任务子 Excel +export const exportProductionreturnJobDetail = async (params) => { + return await request.download({ url: `/wms/productionreturn-job-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/productionreturn-job-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/productionreturnJobMain/index.ts b/src/api/wms/productionreturnJobMain/index.ts new file mode 100644 index 0000000..74bd69d --- /dev/null +++ b/src/api/wms/productionreturnJobMain/index.ts @@ -0,0 +1,128 @@ +import request from '@/config/axios' + +export interface ProductionreturnJobMainVO { + requestNumber: string + workshopCode: string + fromWarehouseCode: string + toWarehouseCode: string + requestTime: Date + requestDueTime: Date + status: string + expiredTime: Date + updateTime: Date + updater: string + jobStageStatus: string + priority: number + priorityIncrement: number + departmentCode: string + acceptUserId: string + acceptTime: Date + completeUserId: string + completeTime: Date + fromAreaTypes: string + toAreaTypes: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + fromAreaCodes: string + toAreaCodes: string + autoComplete: string + allowModifyLocation: string + allowModifyQty: string + allowBiggerQty: string + allowSmallerQty: string + allowModifyInventoryStatus: string + allowContinuousScanning: string + allowPartialComplete: string + allowModifyBatch: string + allowModifyPackingNumber: string +} + +// 查询生产退料任务主列表 +export const getProductionreturnJobMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productionreturn-job-main/senior', data }) + } else { + return await request.get({ url: `/wms/productionreturn-job-main/page`, params }) + } +} + +// 查询生产退料任务主详情 +export const getProductionreturnJobMain = async (id: number) => { + return await request.get({ url: `/wms/productionreturn-job-main/get?id=` + id }) +} + +// 新增生产退料任务主 +export const createProductionreturnJobMain = async (data: ProductionreturnJobMainVO) => { + return await request.post({ url: `/wms/productionreturn-job-main/create`, data }) +} + +// 修改生产退料任务主 +export const updateProductionreturnJobMain = async (data: ProductionreturnJobMainVO) => { + return await request.put({ url: `/wms/productionreturn-job-main/update`, data }) +} + +// 删除生产退料任务主 +export const deleteProductionreturnJobMain = async (id: number) => { + return await request.delete({ url: `/wms/productionreturn-job-main/delete?id=` + id }) +} + +// 导出生产退料任务主 Excel +export const exportProductionreturnJobMain = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/productionreturn-job-main/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/productionreturn-job-main/export-excel`, params }) + } +} + +// 导出生产退料任务主 Excel -store +export const exportProductionreturnJobMainStore = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/productionreturn-job-detail-store/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/productionreturn-job-detail-store/export-excel`, params }) + } +} + +// 导出隔离退料任务主 Excel -hold +export const exportProductionreturnJobMainHold = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/productionreturn-job-detail-hold/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/productionreturn-job-detail-hold/export-excel`, params }) + } +} + + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/productionreturn-job-main/get-import-template' }) +} + +// 承接发料任务 +export const acceptProductionreturnMain = async (id) => { + return await request.put({ url: `/wms/productionreturn-job-main/accept?id=` + id }) +} + +// 放弃发料任务 +export const abandonProductionreturnMain = async (id) => { + return await request.put({ url: `/wms/productionreturn-job-main/abandon?id=` + id }) +} + +// 关闭发料任务 +export const closeProductionreturnMain = async (id) => { + return await request.put({ url: `/wms/productionreturn-job-main/close?id=` + id }) +} + +// 执行发料任务 +export const executeProductionreturnMain = async (data) => { + return await request.put({ url: `/wms/productionreturn-job-main/execute`, data}) +} \ No newline at end of file diff --git a/src/api/wms/productionreturnRecordDetail/index.ts b/src/api/wms/productionreturnRecordDetail/index.ts new file mode 100644 index 0000000..910cb94 --- /dev/null +++ b/src/api/wms/productionreturnRecordDetail/index.ts @@ -0,0 +1,96 @@ +import request from '@/config/axios' + +export interface ProductionreturnRecordDetailVO { + productionLineCode: string + workStationCode: string + inventoryStatus: string + fromOwnerCode: string + fromPackingNumber: string + fromContainerNumber: string + fromBatch: string + fromLocationCode: string + fromLocationGroupCode: string + fromAreaCode: string + toOwnerCode: string + toPackingNumber: string + toContainerNumber: string + toBatch: string + toLocationCode: string + toLocationGroupCode: string + toAreaCode: string + number: string + itemCode: string + remark: string + createTime: Date + creator: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + code: string + interfaceType: string + jobDetailId: string +} + +// 查询生产退料记录子列表 +export const getProductionreturnRecordDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productionreturn-record-detail/senior', data }) + } else { + return await request.get({ url: `/wms/productionreturn-record-detail/page`, params }) + } +} +// 查询生产退料记录子列表 +export const getProductionreturnRecordDetailPageStore = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productionreturn-record-detail-store/senior', data }) + } else { + return await request.get({ url: `/wms/productionreturn-record-detail-store/page`, params }) + } +} +// 查询隔离退料记录子列表 +export const getProductionreturnRecordDetailPageHold = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productionreturn-record-detail-hold/senior', data }) + } else { + return await request.get({ url: `/wms/productionreturn-record-detail-hold/page`, params }) + } +} + +// 查询生产退料记录子详情 +export const getProductionreturnRecordDetail = async (id: number) => { + return await request.get({ url: `/wms/productionreturn-record-detail/get?id=` + id }) +} + +// 新增生产退料记录子 +export const createProductionreturnRecordDetail = async (data: ProductionreturnRecordDetailVO) => { + return await request.post({ url: `/wms/productionreturn-record-detail/create`, data }) +} + +// 修改生产退料记录子 +export const updateProductionreturnRecordDetail = async (data: ProductionreturnRecordDetailVO) => { + return await request.put({ url: `/wms/productionreturn-record-detail/update`, data }) +} + +// 删除生产退料记录子 +export const deleteProductionreturnRecordDetail = async (id: number) => { + return await request.delete({ url: `/wms/productionreturn-record-detail/delete?id=` + id }) +} + +// 导出生产退料记录子 Excel +export const exportProductionreturnRecordDetail = async (params) => { + return await request.download({ url: `/wms/productionreturn-record-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/productionreturn-record-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/productionreturnRecordMain/index.ts b/src/api/wms/productionreturnRecordMain/index.ts new file mode 100644 index 0000000..5515c4b --- /dev/null +++ b/src/api/wms/productionreturnRecordMain/index.ts @@ -0,0 +1,103 @@ +import request from '@/config/axios' + +export interface ProductionreturnRecordMainVO { + requestNumber: string + jobNumber: string + workshopCode: string + outTransactionType: string + inTransactionType: string + executeTime: Date + activeDate: Date + requestTime: Date + dueTime: Date + departmentCode: string + interfaceType: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + code: string + fromWarehouseCode: string + fromAreaTypes: string + fromAreaCodes: string + toWarehouseCode: string + toAreaTypes: string + toAreaCodes: string + available: string +} + +// 查询生产退料记录主列表 +export const getProductionreturnRecordMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productionreturn-record-main/senior', data }) + } else { + return await request.get({ url: `/wms/productionreturn-record-main/page`, params }) + } +} + +// 查询生产退料记录主详情 +export const getProductionreturnRecordMain = async (id: number) => { + return await request.get({ url: `/wms/productionreturn-record-main/get?id=` + id }) +} + +// 新增生产退料记录主 +export const createProductionreturnRecordMain = async (data: ProductionreturnRecordMainVO) => { + return await request.post({ url: `/wms/productionreturn-record-main/create`, data }) +} + +// 修改生产退料记录主 +export const updateProductionreturnRecordMain = async (data: ProductionreturnRecordMainVO) => { + return await request.put({ url: `/wms/productionreturn-record-main/update`, data }) +} + +// 删除生产退料记录主 +export const deleteProductionreturnRecordMain = async (id: number) => { + return await request.delete({ url: `/wms/productionreturn-record-main/delete?id=` + id }) +} + +// 导出生产退料记录主 Excel +export const exportProductionreturnRecordMain = async (params) => { + if (params.isSearch){ + const data = {...params} + return await request.downloadPost({ url: `/wms/productionreturn-record-main/export-excel-senior`, data }) + }else { + return await request.download({ url: `/wms/productionreturn-record-main/export-excel`, params }) + } +} +// 导出生产退料记录主 Excel -store +export const exportProductionreturnRecordMainStore = async (params) => { + if (params.isSearch){ + const data = {...params} + return await request.downloadPost({ url: `/wms/productionreturn-record-detail-store/export-excel-senior`, data }) + }else { + return await request.download({ url: `/wms/productionreturn-record-detail-store/export-excel`, params }) + } +} +// 导出隔离退料记录主 Excel -hold +export const exportProductionreturnRecordMainHold = async (params) => { + if (params.isSearch){ + const data = {...params} + return await request.downloadPost({ url: `/wms/productionreturn-record-detail-hold/export-excel-senior`, data }) + }else { + return await request.download({ url: `/wms/productionreturn-record-detail-hold/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/productionreturn-record-main/get-import-template' }) +} + + +// 接收隔离收货 +export const receive = (id) => { + return request.put({ url: '/wms/productionreturn-record-main/receive?id=' + id }) +} + +// 拒收隔离收货 +export const refuse = (id) => { + return request.put({ url: '/wms/productionreturn-record-main/refuse?id=' + id }) +} diff --git a/src/api/wms/productionreturnRequestDetail/index.ts b/src/api/wms/productionreturnRequestDetail/index.ts new file mode 100644 index 0000000..c47890e --- /dev/null +++ b/src/api/wms/productionreturnRequestDetail/index.ts @@ -0,0 +1,73 @@ +import request from '@/config/axios' + +export interface ProductionreturnRequestDetailVO { + productionLineCode: string + workStationCode: string + inventoryStatus: string + fromOwnerCode: string + packingNumber: string + containerNumber: string + batch: string + fromLocationCode: string + number: string + itemCode: string + remark: string + createTime: Date + creator: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + updateTime: Date + updater: string + toOwnerCode: string +} + +// 查询生产退料申请子列表 +export const getProductionreturnRequestDetailPage = async (params) => { + params.businessType = 'ReturnToStore' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productionreturn-request-detail/senior', data }) + } else { + return await request.get({ url: `/wms/productionreturn-request-detail/page`, params }) + } +} + +// 查询生产退料申请子详情 +export const getProductionreturnRequestDetail = async (id: number) => { + return await request.get({ url: `/wms/productionreturn-request-detail/get?id=` + id }) +} + +// 新增生产退料申请子 +export const createProductionreturnRequestDetail = async (data: ProductionreturnRequestDetailVO) => { + return await request.post({ url: `/wms/productionreturn-request-detail/create`, data }) +} + +// 修改生产退料申请子 +export const updateProductionreturnRequestDetail = async (data: ProductionreturnRequestDetailVO) => { + return await request.put({ url: `/wms/productionreturn-request-detail/update`, data }) +} + +// 删除生产退料申请子 +export const deleteProductionreturnRequestDetail = async (id: number) => { + return await request.delete({ url: `/wms/productionreturn-request-detail/delete?id=` + id }) +} + +// 导出生产退料申请子 Excel +export const exportProductionreturnRequestDetail = async (params) => { + return await request.download({ url: `/wms/productionreturn-request-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/productionreturn-request-detail/get-import-template' }) +} + +// 创建包装信息后更新子表数据packingNumber +export const updateDetailPackingNumber = async (id: number, number) => { + return await request.put({ url: '/wms/productionreturn-request-detail/updateDetailPackingNumber?id=' + id + '&number=' + number }) +} \ No newline at end of file diff --git a/src/api/wms/productionreturnRequestDetailNo/index.ts b/src/api/wms/productionreturnRequestDetailNo/index.ts new file mode 100644 index 0000000..7b9ca63 --- /dev/null +++ b/src/api/wms/productionreturnRequestDetailNo/index.ts @@ -0,0 +1,68 @@ +import request from '@/config/axios' + +export interface ProductionreturnRequestDetailVO { + productionLineCode: string + workStationCode: string + inventoryStatus: string + fromOwnerCode: string + packingNumber: string + containerNumber: string + batch: string + fromLocationCode: string + number: string + itemCode: string + remark: string + createTime: Date + creator: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + updateTime: Date + updater: string + toOwnerCode: string +} + +// 查询生产退料申请子列表 +export const getProductionreturnRequestDetailPage = async (params) => { + params.businessType = 'ReturnToHold' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productionreturn-request-detail/senior', data }) + } else { + return await request.get({ url: `/wms/productionreturn-request-detail/page`, params }) + } +} + +// 查询生产退料申请子详情 +export const getProductionreturnRequestDetail = async (id: number) => { + return await request.get({ url: `/wms/productionreturn-request-detail/get?id=` + id }) +} + +// 新增生产退料申请子 +export const createProductionreturnRequestDetail = async (data: ProductionreturnRequestDetailVO) => { + return await request.post({ url: `/wms/productionreturn-request-detail/create`, data }) +} + +// 修改生产退料申请子 +export const updateProductionreturnRequestDetail = async (data: ProductionreturnRequestDetailVO) => { + return await request.put({ url: `/wms/productionreturn-request-detail/update`, data }) +} + +// 删除生产退料申请子 +export const deleteProductionreturnRequestDetail = async (id: number) => { + return await request.delete({ url: `/wms/productionreturn-request-detail/delete?id=` + id }) +} + +// 导出生产退料申请子 Excel +export const exportProductionreturnRequestDetail = async (params) => { + return await request.download({ url: `/wms/productionreturn-request-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/productionreturn-request-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/productionreturnRequestMain/index.ts b/src/api/wms/productionreturnRequestMain/index.ts new file mode 100644 index 0000000..04a6c8a --- /dev/null +++ b/src/api/wms/productionreturnRequestMain/index.ts @@ -0,0 +1,104 @@ +import request from '@/config/axios' + +export interface ProductionreturnRequestMainVO { + workshopCode: string + fromWarehouseCode: string + fromAreaTypes: string + fromAreaCodes: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + requestTime: Date + dueTime: Date + departmentCode: string + status: string + updateTime: Date + updater: string + toWarehouseCode: string + toAreaTypes: string + toAreaCodes: string + autoCommit: string + autoAgree: string + autoExecute: string + directCreateRecord: string +} + +// 查询生产退料申请主列表 +export const getProductionreturnRequestMainPage = async (params) => { + params.businessType = 'ReturnToStore' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productionreturn-request-main/senior', data }) + } else { + return await request.get({ url: `/wms/productionreturn-request-main/page`, params }) + } +} + +// 查询生产退料申请主详情 +export const getProductionreturnRequestMain = async (id: number) => { + return await request.get({ url: `/wms/productionreturn-request-main/get?id=` + id }) +} + +// 新增生产退料申请主 +export const createProductionreturnRequestMain = async (data: ProductionreturnRequestMainVO) => { + return await request.post({ url: `/wms/productionreturn-request-main/create`, data }) +} + +// 修改生产退料申请主 +export const updateProductionreturnRequestMain = async (data: ProductionreturnRequestMainVO) => { + return await request.put({ url: `/wms/productionreturn-request-main/update`, data }) +} + +// 删除生产退料申请主 +export const deleteProductionreturnRequestMain = async (id: number) => { + return await request.delete({ url: `/wms/productionreturn-request-main/delete?id=` + id }) +} + +// 导出生产退料申请主 Excel +export const exportProductionreturnRequestMain = async (params) => { + params.businessType = 'ReturnToStore' + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/productionreturn-request-main/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/productionreturn-request-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/productionreturn-request-main/get-import-template' }) +} + +// 关闭 +export const close = (id) => { + return request.put({ url: '/wms/productionreturn-request-main/close?id=' + id }) +} + +// 重新添加 +export const reAdd = (id) => { + return request.put({ url: '/wms/productionreturn-request-main/reAdd?id=' + id }) +} + +// 提交审批 +export const submit = (id) => { + return request.put({ url: '/wms/productionreturn-request-main/submit?id=' + id }) +} + +// 驳回 +export const refused = (id) => { + return request.put({ url: '/wms/productionreturn-request-main/refused?id=' + id }) +} + +// 审批通过 +export const agree = (id) => { + return request.put({ url: '/wms/productionreturn-request-main/agree?id=' + id }) +} + +// 处理 +export const handle = (id) => { + return request.put({ url: '/wms/productionreturn-request-main/handle?id=' + id }) +} \ No newline at end of file diff --git a/src/api/wms/productionreturnRequestMainNo/index.ts b/src/api/wms/productionreturnRequestMainNo/index.ts new file mode 100644 index 0000000..af389c5 --- /dev/null +++ b/src/api/wms/productionreturnRequestMainNo/index.ts @@ -0,0 +1,104 @@ +import request from '@/config/axios' + +export interface ProductionreturnRequestMainVO { + workshopCode: string + fromWarehouseCode: string + fromAreaTypes: string + fromAreaCodes: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + requestTime: Date + dueTime: Date + departmentCode: string + status: string + updateTime: Date + updater: string + toWarehouseCode: string + toAreaTypes: string + toAreaCodes: string + autoCommit: string + autoAgree: string + autoExecute: string + directCreateRecord: string +} + +// 查询不合格生产退料申请主列表 +export const getProductionreturnRequestMainPage = async (params) => { + params.businessType = 'ReturnToHold' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productionreturn-request-main/senior', data }) + } else { + return await request.get({ url: `/wms/productionreturn-request-main/page`, params }) + } +} + +// 查询不合格生产退料申请主详情 +export const getProductionreturnRequestMain = async (id: number) => { + return await request.get({ url: `/wms/productionreturn-request-main/get?id=` + id }) +} + +// 新增不合格生产退料申请主 +export const createProductionreturnRequestMain = async (data: ProductionreturnRequestMainVO) => { + return await request.post({ url: `/wms/productionreturn-request-main/create`, data }) +} + +// 修改不合格生产退料申请主 +export const updateProductionreturnRequestMain = async (data: ProductionreturnRequestMainVO) => { + return await request.put({ url: `/wms/productionreturn-request-main/update`, data }) +} + +// 删除不合格生产退料申请主 +export const deleteProductionreturnRequestMain = async (id: number) => { + return await request.delete({ url: `/wms/productionreturn-request-main/delete?id=` + id }) +} + +// 导出不合格生产退料申请主 Excel +export const exportProductionreturnRequestMain = async (params) => { + params.businessType = 'ReturnToHold' + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/productionreturn-request-main/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/productionreturn-request-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/productionreturn-request-main/get-import-template-hold' }) +} + +// 关闭 +export const close = (id) => { + return request.put({ url: '/wms/productionreturn-request-main/close?id=' + id }) +} + +// 重新添加 +export const reAdd = (id) => { + return request.put({ url: '/wms/productionreturn-request-main/reAdd?id=' + id }) +} + +// 提交审批 +export const submit = (id) => { + return request.put({ url: '/wms/productionreturn-request-main/submit?id=' + id }) +} + +// 驳回 +export const refused = (id) => { + return request.put({ url: '/wms/productionreturn-request-main/refused?id=' + id }) +} + +// 审批通过 +export const agree = (id) => { + return request.put({ url: '/wms/productionreturn-request-main/agree?id=' + id }) +} + +// 处理 +export const handle = (id) => { + return request.put({ url: '/wms/productionreturn-request-main/handle?id=' + id }) +} \ No newline at end of file diff --git a/src/api/wms/productionscrapRecordDetail/index.ts b/src/api/wms/productionscrapRecordDetail/index.ts new file mode 100644 index 0000000..1aa05cb --- /dev/null +++ b/src/api/wms/productionscrapRecordDetail/index.ts @@ -0,0 +1,77 @@ +import request from '@/config/axios' + +export interface ProductionscrapRecordDetailVO { + id: number + productionLineCode: string + workStationCode: string + inventoryStatus: string + fromOwnerCode: string + fromPackingNumber: string + fromContainerNumber: string + fromBatch: string + fromLocationCode: string + fromLocationGroupCode: string + fromAreaCode: string + toOwnerCode: string + toPackingNumber: string + toContainerNumber: string + toBatch: string + toLocationCode: string + toLocationGroupCode: string + toAreaCode: string + masterId: number + number: string + itemCode: string + remark: string + siteId: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + code: string + interfaceType: string + jobDetailId: string +} + +// 查询线边原料报废记录子列表 +export const getProductionscrapRecordDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productionscrap-record-detail/senior', data }) + } else { + return await request.get({ url: `/wms/productionscrap-record-detail/page`, params }) + } +} + +// 查询线边原料报废记录子详情 +export const getProductionscrapRecordDetail = async (id: number) => { + return await request.get({ url: `/wms/productionscrap-record-detail/get?id=` + id }) +} + +// 新增线边原料报废记录子 +export const createProductionscrapRecordDetail = async (data: ProductionscrapRecordDetailVO) => { + return await request.post({ url: `/wms/productionscrap-record-detail/create`, data }) +} + +// 修改线边原料报废记录子 +export const updateProductionscrapRecordDetail = async (data: ProductionscrapRecordDetailVO) => { + return await request.put({ url: `/wms/productionscrap-record-detail/update`, data }) +} + +// 删除线边原料报废记录子 +export const deleteProductionscrapRecordDetail = async (id: number) => { + return await request.delete({ url: `/wms/productionscrap-record-detail/delete?id=` + id }) +} + +// 导出线边原料报废记录子 Excel +export const exportProductionscrapRecordDetail = async (params) => { + return await request.download({ url: `/wms/productionscrap-record-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/productionscrap-record-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/productionscrapRecordMain/index.ts b/src/api/wms/productionscrapRecordMain/index.ts new file mode 100644 index 0000000..3db1ddd --- /dev/null +++ b/src/api/wms/productionscrapRecordMain/index.ts @@ -0,0 +1,82 @@ +import request from '@/config/axios' + +export interface ProductionscrapRecordMainVO { + id: number + requestNumber: string + jobNumber: string + workshopCode: string + details: string + outTransactionType: string + inTransactionType: string + executeTime: Date + activeDate: Date + available: string + requestTime: Date + dueTime: Date + departmentCode: string + userGroupCode: string + interfaceType: string + number: string + businessType: string + remark: string + extraProperties: string + siteId: string + code: string + fromWarehouseCode: string + fromAreaTypes: string + fromAreaCodes: string + toWarehouseCode: string + toAreaTypes: string + toAreaCodes: string +} + +// 查询线边原料报废记录主列表 +export const getProductionscrapRecordMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productionscrap-record-main/senior', data }) + } else { + return await request.get({ url: `/wms/productionscrap-record-main/page`, params }) + } +} + +// 查询线边原料报废记录主详情 +export const getProductionscrapRecordMain = async (id: number) => { + return await request.get({ url: `/wms/productionscrap-record-main/get?id=` + id }) +} + +// 新增线边原料报废记录主 +export const createProductionscrapRecordMain = async (data: ProductionscrapRecordMainVO) => { + return await request.post({ url: `/wms/productionscrap-record-main/create`, data }) +} + +// 修改线边原料报废记录主 +export const updateProductionscrapRecordMain = async (data: ProductionscrapRecordMainVO) => { + return await request.put({ url: `/wms/productionscrap-record-main/update`, data }) +} + +// 删除线边原料报废记录主 +export const deleteProductionscrapRecordMain = async (id: number) => { + return await request.delete({ url: `/wms/productionscrap-record-main/delete?id=` + id }) +} + +// 导出线边原料报废记录主 Excel +export const exportProductionscrapRecordMain = async (params) => { + if (params.isSearch){ + const data = {...params} + return await request.downloadPost({ url: `/wms/productionscrap-record-main/export-excel-senior`, data }) + }else { + return await request.download({ url: `/wms/productionscrap-record-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/productionscrap-record-main/get-import-template' }) +} + +// 撤销 +export const revoke = async (id: number) => { + return await request.get({ url: `/wms/productionscrap-record-main/revoke?id=` + id }) +} diff --git a/src/api/wms/productionscrapRequestDetail/index.ts b/src/api/wms/productionscrapRequestDetail/index.ts new file mode 100644 index 0000000..b5b5fd4 --- /dev/null +++ b/src/api/wms/productionscrapRequestDetail/index.ts @@ -0,0 +1,69 @@ +import request from '@/config/axios' + +export interface ProductionscrapRequestDetailVO { + id: number + productionLineCode: string + workStationCode: string + inventoryStatus: string + packingNumber: string + containerNumber: string + batch: string + fromLocationCode: string + masterId: number + number: string + itemCode: string + remark: string + siteId: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + packUnit: string + packQty: number + fromOwnerCode: string + toOwnerCode: string + concurrencyStamp: number +} + +// 查询线边原料报废子列表 +export const getProductionscrapRequestDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productionscrap-request-detail/senior', data }) + } else { + return await request.get({ url: `/wms/productionscrap-request-detail/page`, params }) + } +} + +// 查询线边原料报废子详情 +export const getProductionscrapRequestDetail = async (id: number) => { + return await request.get({ url: `/wms/productionscrap-request-detail/get?id=` + id }) +} + +// 新增线边原料报废子 +export const createProductionscrapRequestDetail = async (data: ProductionscrapRequestDetailVO) => { + return await request.post({ url: `/wms/productionscrap-request-detail/create`, data }) +} + +// 修改线边原料报废子 +export const updateProductionscrapRequestDetail = async (data: ProductionscrapRequestDetailVO) => { + return await request.put({ url: `/wms/productionscrap-request-detail/update`, data }) +} + +// 删除线边原料报废子 +export const deleteProductionscrapRequestDetail = async (id: number) => { + return await request.delete({ url: `/wms/productionscrap-request-detail/delete?id=` + id }) +} + +// 导出线边原料报废子 Excel +export const exportProductionscrapRequestDetail = async (params) => { + return await request.download({ url: `/wms/productionscrap-request-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/productionscrap-request-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/productionscrapRequestMain/index.ts b/src/api/wms/productionscrapRequestMain/index.ts new file mode 100644 index 0000000..0dbd971 --- /dev/null +++ b/src/api/wms/productionscrapRequestMain/index.ts @@ -0,0 +1,102 @@ +import request from '@/config/axios' + +export interface ProductionscrapRequestMainVO { + id: number + workshopCode: string + fromWarehouseCode: string + fromAreaTypes: string + fromAreaCodes: string + details: string + number: string + businessType: string + remark: string + extraProperties: string + siteId: string + requestTime: Date + dueTime: Date + departmentCode: string + status: string + autoCommit: string + autoAgree: string + autoExecute: string + directCreateRecord: string + concurrencyStamp: number + ruleUserId: number + toWarehouseCode: string + toAreaTypes: string + toAreaCodes: string + serialNumber: string + inInventoryStatuses: string + outInventoryStatuses: string +} + +// 查询线边原料报废主列表 +export const getProductionscrapRequestMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productionscrap-request-main/senior', data }) + } else { + return await request.get({ url: `/wms/productionscrap-request-main/page`, params }) + } +} + +// 查询线边原料报废主详情 +export const getProductionscrapRequestMain = async (id: number) => { + return await request.get({ url: `/wms/productionscrap-request-main/get?id=` + id }) +} + +// 新增线边原料报废主 +export const createProductionscrapRequestMain = async (data: ProductionscrapRequestMainVO) => { + return await request.post({ url: `/wms/productionscrap-request-main/create`, data }) +} + +// 修改线边原料报废主 +export const updateProductionscrapRequestMain = async (data: ProductionscrapRequestMainVO) => { + return await request.put({ url: `/wms/productionscrap-request-main/update`, data }) +} + +// 删除线边原料报废主 +export const deleteProductionscrapRequestMain = async (id: number) => { + return await request.delete({ url: `/wms/productionscrap-request-main/delete?id=` + id }) +} + +// 导出线边原料报废主 Excel +export const exportProductionscrapRequestMain = async (params) => { + return await request.download({ url: `/wms/productionscrap-request-main/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/productionscrap-request-main/get-import-template' }) +} + +// 关闭 +export const close = (id) => { + return request.put({ url: '/wms/productionscrap-request-main/close?id=' + id }) +} + +// 重新添加 +export const reAdd = (id) => { + return request.put({ url: '/wms/productionscrap-request-main/reAdd?id=' + id }) +} + +// 提交审批 +export const submit = (id) => { + return request.put({ url: '/wms/productionscrap-request-main/submit?id=' + id }) +} + +// 驳回 +export const refused = (id) => { + return request.put({ url: '/wms/productionscrap-request-main/refused?id=' + id }) +} + +// 审批通过 +export const agree = (id) => { + return request.put({ url: '/wms/productionscrap-request-main/agree?id=' + id }) +} + +// 处理 +export const handle = (id) => { + return request.put({ url: '/wms/productionscrap-request-main/handle?id=' + id }) +} \ No newline at end of file diff --git a/src/api/wms/productputawayJobDetail/index.ts b/src/api/wms/productputawayJobDetail/index.ts new file mode 100644 index 0000000..70cb9fc --- /dev/null +++ b/src/api/wms/productputawayJobDetail/index.ts @@ -0,0 +1,79 @@ +import request from '@/config/axios' + +export interface ProductputawayJobDetailVO { + packingNumber: string + containerNumber: string + batch: string + inventoryStatus: string + poNumber: string + poLine: string + fromLocationCode: string + toLocationCode: string + itemCode: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + number: string + remark: string + createTime: Date + creator: string + fromOwnerCode: string + toOwnerCode: string +} + +// 查询制品上架任务子列表 +export const getProductputawayJobDetailPage = async (params) => { + params.type = 'predict' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productputaway-job-detail/senior', data }) + } else { + return await request.get({ url: `/wms/productputaway-job-detail/page`, params }) + } +} + +// 查询制品上架任务子列表 +export const getProductputawayJobDetailPageAssemble = async (params) => { +   params.type = 'assemble' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productputaway-job-detail/senior', data }) + } else { + return await request.get({ url: `/wms/productputaway-job-detail/page`, params }) + } +} + +// 查询制品上架任务子详情 +export const getProductputawayJobDetail = async (id: number) => { + return await request.get({ url: `/wms/productputaway-job-detail/get?id=` + id }) +} + +// 新增制品上架任务子 +export const createProductputawayJobDetail = async (data: ProductputawayJobDetailVO) => { + return await request.post({ url: `/wms/productputaway-job-detail/create`, data }) +} + +// 修改制品上架任务子 +export const updateProductputawayJobDetail = async (data: ProductputawayJobDetailVO) => { + return await request.put({ url: `/wms/productputaway-job-detail/update`, data }) +} + +// 删除制品上架任务子 +export const deleteProductputawayJobDetail = async (id: number) => { + return await request.delete({ url: `/wms/productputaway-job-detail/delete?id=` + id }) +} + +// 导出制品上架任务子 Excel +export const exportProductputawayJobDetail = async (params) => { + return await request.download({ url: `/wms/productputaway-job-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/productputaway-job-detail/get-import-template' }) +} diff --git a/src/api/wms/productputawayJobMain/index.ts b/src/api/wms/productputawayJobMain/index.ts new file mode 100644 index 0000000..d937968 --- /dev/null +++ b/src/api/wms/productputawayJobMain/index.ts @@ -0,0 +1,132 @@ +import request from '@/config/axios' + +export interface ProductputawayJobMainVO { + requestNumber: string + supplierCode: string + fromWarehouseCode: string + toWarehouseCode: string + fromAreaCodes: string + toAreaCodes: string + fromAreaTypes: string + toAreaTypes: string + completetime: Date + requestTime: Date + requestDueTime: Date + status: string + expiredTime: Date + updateTime: Date + updater: string + jobStageStatus: string + priority: number + priorityIncrement: number + departmentCode: string + acceptUserId: string + acceptTime: Date + completeUserId: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + autoComplete: string + allowModifyLocation: string + allowModifyQty: string + allowBiggerQty: string + allowSmallerQty: string + allowModifyInventoryStatus: string + allowContinuousScanning: string + allowPartialComplete: string + allowModifyBatch: string + allowModifyPackingNumber: string +} + +// 查询制品上架任务主列表 +export const getProductputawayJobMainPage = async (params) => { + params.type = 'predict' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productputaway-job-main/senior', data }) + } else { + return await request.get({ url: `/wms/productputaway-job-main/page`, params }) + } +} + +// 查询制品上架任务主列表 +export const getProductputawayJobMainAssemblePage = async (params) => { + params.type = 'assemble' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productputaway-job-main/senior', data }) + } else { + return await request.get({ url: `/wms/productputaway-job-main/page`, params }) + } +} +// 查询制品上架任务主详情 +export const getProductputawayJobMain = async (id: number) => { + return await request.get({ url: `/wms/productputaway-job-main/get?id=` + id }) +} + +// 新增制品上架任务主 +export const createProductputawayJobMain = async (data: ProductputawayJobMainVO) => { + return await request.post({ url: `/wms/productputaway-job-main/create`, data }) +} + +// 修改制品上架任务主 +export const updateProductputawayJobMain = async (data: ProductputawayJobMainVO) => { + return await request.put({ url: `/wms/productputaway-job-main/update`, data }) +} + +// 删除制品上架任务主 +export const deleteProductputawayJobMain = async (id: number) => { + return await request.delete({ url: `/wms/productputaway-job-main/delete?id=` + id }) +} + +// 导出制品上架任务主 Excel +export const exportProductputawayJobMain = async (params) => { + params.type = 'predict' + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/productputaway-job-main/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/productputaway-job-main/export-excel`, params }) + } +} + + +// 导出制品上架任务主 Excel +export const exportProductputawayJobMainAssemble = async (params) => { + params.type = 'assemble' + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/productputaway-job-main/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/productputaway-job-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/productputaway-job-main/get-import-template' }) +} + +// 承接发料任务 +export const acceptProductputawayMain = async (id) => { + return await request.put({ url: `/wms/productputaway-job-main/accept?id=` + id }) +} + +// 放弃发料任务 +export const abandonProductputawayMain = async (id) => { + return await request.put({ url: `/wms/productputaway-job-main/abandon?id=` + id }) +} + +// 关闭发料任务 +export const closeProductputawayMain = async (id) => { + return await request.put({ url: `/wms/productputaway-job-main/close?id=` + id }) +} + +// 执行发料任务 +export const executeProductputawayMain = async (data) => { + return await request.put({ url: `/wms/productputaway-job-main/execute`, data}) +} \ No newline at end of file diff --git a/src/api/wms/productputawayRecordDetail/index.ts b/src/api/wms/productputawayRecordDetail/index.ts new file mode 100644 index 0000000..5b46db2 --- /dev/null +++ b/src/api/wms/productputawayRecordDetail/index.ts @@ -0,0 +1,100 @@ +import request from '@/config/axios' + +export interface ProductputawayRecordDetailVO { + fromPackingNumber: string + toPackingNumber: string + fromBatch: string + toBatch: string + fromContainerNumber: string + toContainerNumber: string + inventoryStatus: string + poNumber: string + poLine: string + fromOwnerCode: string + toOwnerCode: string + fromLocationCode: string + toLocationCode: string + fromLocationGroupCode: string + toLocationGroupCode: string + fromAreaCode: string + toAreaCode: string + number: string + itemCode: string + remark: string + createTime: Date + creator: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + code: string + interfaceType: string + jobDetailId: string +} + +// 查询制品上架记录子列表 +export const getProductputawayRecordDetailPage = async (params) => { + params.type = 'predict' + if (params.isSearch) { + const cmd = { + 'column':'type', + 'action':'==', + 'value':'predict' + } + params.filters.push(cmd) + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productputaway-record-detail/senior', data }) + } else { + return await request.get({ url: `/wms/productputaway-record-detail/page`, params }) + } +} + +// 查询制品上架记录子列表 +export const getProductputawayRecordDetailPageAssemble = async (params) => { + params.type = 'assemble' + if (params.isSearch) { + const cmd = { + 'column':'type', + 'action':'==', + 'value':'assemble' + } + params.filters.push(cmd) + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productputaway-record-detail/senior', data }) + } else { + return await request.get({ url: `/wms/productputaway-record-detail/page`, params }) + } +} +// 查询制品上架记录子详情 +export const getProductputawayRecordDetail = async (id: number) => { + return await request.get({ url: `/wms/productputaway-record-detail/get?id=` + id }) +} + +// 新增制品上架记录子 +export const createProductputawayRecordDetail = async (data: ProductputawayRecordDetailVO) => { + return await request.post({ url: `/wms/productputaway-record-detail/create`, data }) +} + +// 修改制品上架记录子 +export const updateProductputawayRecordDetail = async (data: ProductputawayRecordDetailVO) => { + return await request.put({ url: `/wms/productputaway-record-detail/update`, data }) +} + +// 删除制品上架记录子 +export const deleteProductputawayRecordDetail = async (id: number) => { + return await request.delete({ url: `/wms/productputaway-record-detail/delete?id=` + id }) +} + +// 导出制品上架记录子 Excel +export const exportProductputawayRecordDetail = async (params) => { + return await request.download({ url: `/wms/productputaway-record-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/productputaway-record-detail/get-import-template' }) +} diff --git a/src/api/wms/productputawayRecordMain/index.ts b/src/api/wms/productputawayRecordMain/index.ts new file mode 100644 index 0000000..f9a39d0 --- /dev/null +++ b/src/api/wms/productputawayRecordMain/index.ts @@ -0,0 +1,108 @@ +import request from '@/config/axios' + +export interface ProductputawayRecordMainVO { + requestNumber: string + jobNumber: string + supplierCode: string + outTransactionType: string + inTransactionType: string + executeTime: Date + activeDate: Date + requestTime: Date + dueTime: Date + departmentCode: string + interfaceType: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + code: string + fromWarehouseCode: string + fromAreaTypes: string + fromAreaCodes: string + toWarehouseCode: string + toAreaTypes: string + toAreaCodes: string + ruleUserId: number + available: string +} + +// 查询制品上架记录主列表 +export const getProductputawayRecordMainPage = async (params) => { + params.type = 'predict' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productputaway-record-main/senior', data }) + } else { + return await request.get({ url: `/wms/productputaway-record-main/page`, params }) + } +} + +// 查询制品上架记录主列表 +export const getProductputawayRecordMainAssemblePage = async (params) => { + params.type = 'assemble' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productputaway-record-main/senior', data }) + } else { + return await request.get({ url: `/wms/productputaway-record-main/page`, params }) + } +} + +// 查询制品上架记录主详情 +export const getProductputawayRecordMain = async (id: number) => { + return await request.get({ url: `/wms/productputaway-record-main/get?id=` + id }) +} + +// 新增制品上架记录主 +export const createProductputawayRecordMain = async (data: ProductputawayRecordMainVO) => { + return await request.post({ url: `/wms/productputaway-record-main/create`, data }) +} + +// 修改制品上架记录主 +export const updateProductputawayRecordMain = async (data: ProductputawayRecordMainVO) => { + return await request.put({ url: `/wms/productputaway-record-main/update`, data }) +} + +// 删除制品上架记录主 +export const deleteProductputawayRecordMain = async (id: number) => { + return await request.delete({ url: `/wms/productputaway-record-main/delete?id=` + id }) +} + +// 导出制品上架记录主 Excel +export const exportProductputawayRecordMain = async (params) => { + + if (params.isSearch) { + const cmd = { + 'column':'type', + 'action':'==', + 'value':params.type + } + params.filters.push(cmd) + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/productputaway-record-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/productputaway-record-main/export-excel`, params }) + } +} + +// 导出制品上架记录主 Excel +export const exportProductputawayRecordMainAssemble = async (params) => { + params.type = 'assemble' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/productputaway-record-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/productputaway-record-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/productputaway-record-main/get-import-template' }) +} diff --git a/src/api/wms/productputawayRequestDetail/index.ts b/src/api/wms/productputawayRequestDetail/index.ts new file mode 100644 index 0000000..d1cc153 --- /dev/null +++ b/src/api/wms/productputawayRequestDetail/index.ts @@ -0,0 +1,80 @@ +import request from '@/config/axios' + +export interface ProductputawayRequestDetailVO { + packingNumber: string + containerNumber: string + batch: string + inventoryStatus: string + poNumber: string + poLine: string + fromLocationCode: string + number: string + itemCode: string + remark: string + createTime: Date + creator: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + updateTime: Date + updater: string + fromOwnerCode: string + toOwnerCode: string +} + +// 查询制品上架申请子列表 +export const getProductputawayRequestDetailPage = async (params) => { + params.type = 'predict' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productputaway-request-detail/senior', data }) + } else { + return await request.get({ url: `/wms/productputaway-request-detail/page`, params }) + } +} + +// 查询制品上架申请子列表 +export const getProductputawayRequestDetailPageAssemble = async (params) => { +   params.type = 'assemble' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productputaway-request-detail/senior', data }) + } else { + return await request.get({ url: `/wms/productputaway-request-detail/page`, params }) + } +} + +// 查询制品上架申请子详情 +export const getProductputawayRequestDetail = async (id: number) => { + return await request.get({ url: `/wms/productputaway-request-detail/get?id=` + id }) +} + +// 新增制品上架申请子 +export const createProductputawayRequestDetail = async (data: ProductputawayRequestDetailVO) => { + return await request.post({ url: `/wms/productputaway-request-detail/create`, data }) +} + +// 修改制品上架申请子 +export const updateProductputawayRequestDetail = async (data: ProductputawayRequestDetailVO) => { + return await request.put({ url: `/wms/productputaway-request-detail/update`, data }) +} + +// 删除制品上架申请子 +export const deleteProductputawayRequestDetail = async (id: number) => { + return await request.delete({ url: `/wms/productputaway-request-detail/delete?id=` + id }) +} + +// 导出制品上架申请子 Excel +export const exportProductputawayRequestDetail = async (params) => { + return await request.download({ url: `/wms/productputaway-request-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/productputaway-request-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/productputawayRequestMain/index.ts b/src/api/wms/productputawayRequestMain/index.ts new file mode 100644 index 0000000..78b21d9 --- /dev/null +++ b/src/api/wms/productputawayRequestMain/index.ts @@ -0,0 +1,141 @@ +import request from '@/config/axios' + +export interface ProductputawayRequestMainVO { + id: number + supplierCode: string + fromWarehouseCode: string + toWarehouseCode: string + fromAreaTypes: string + toAreaTypes: string + fromAreaCodes: string + toAreaCodes: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + requestTime: Date + dueTime: Date + departmentCode: string + status: string + updateTime: Date + updater: string + autoCommit: string + autoAgree: string + autoExecute: string + directCreateRecord: string +} + +// 查询制品上架申请主列表 +export const getProductputawayRequestMainPage = async (params) => { + params.type = 'predict' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productputaway-request-main/senior', data }) + } else { + return await request.get({ url: `/wms/productputaway-request-main/page`, params }) + } +} + +// 查询制品上架申请主列表 +export const getProductputawayRequestMainAssemblePage = async (params) => { + params.type = 'assemble' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productputaway-request-main/senior', data }) + } else { + return await request.get({ url: `/wms/productputaway-request-main/page`, params }) + } +} + +// 查询制品上架申请主详情 +export const getProductputawayRequestMain = async (id: number) => { + return await request.get({ url: `/wms/productputaway-request-main/get?id=` + id }) +} + +// 新增制品上架申请主 +export const createProductputawayRequestMain = async (data: ProductputawayRequestMainVO) => { + return await request.post({ url: `/wms/productputaway-request-main/create`, data }) +} + +// 修改制品上架申请主 +export const updateProductputawayRequestMain = async (data: ProductputawayRequestMainVO) => { + return await request.put({ url: `/wms/productputaway-request-main/update`, data }) +} + +// 删除制品上架申请主 +export const deleteProductputawayRequestMain = async (id: number) => { + return await request.delete({ url: `/wms/productputaway-request-main/delete?id=` + id }) +} + +// 导出制品上架申请主 Excel +export const exportProductputawayRequestMain = async (params) => { + params.type = 'predict' + if (params.isSearch) { + const cmd = { + 'column':'type', + 'action':'==', + 'value':'predict' + } + params.filters.push(cmd) + const data = {...params} + return await request.downloadPost({ url: `/wms/productputaway-request-main/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/productputaway-request-main/export-excel`, params }) + } +} + +// 导出制品上架申请主 Excel +export const exportProductputawayRequestMainAssemble = async (params) => { + params.type = 'assemble' + if (params.isSearch) { + const cmd = { + 'column':'type', + 'action':'==', + 'value':'assemble' + } + params.filters.push(cmd) + const data = {...params} + return await request.downloadPost({ url: `/wms/productputaway-request-main/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/productputaway-request-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/productputaway-request-main/get-import-template' }) +} + + +// 关闭 +export const close = (id) => { + return request.put({ url: '/wms/productputaway-request-main/close?id=' + id }) +} + +// 重新添加 +export const reAdd = (id) => { + return request.put({ url: '/wms/productputaway-request-main/reAdd?id=' + id }) +} + +// 提交审批 +export const submit = (id) => { + return request.put({ url: '/wms/productputaway-request-main/submit?id=' + id }) +} + +// 驳回 +export const refused = (id) => { + return request.put({ url: '/wms/productputaway-request-main/refused?id=' + id }) +} + +// 审批通过 +export const agree = (id) => { + return request.put({ url: '/wms/productputaway-request-main/agree?id=' + id }) +} + +// 处理 +export const handle = (id) => { + return request.put({ url: '/wms/productputaway-request-main/handle?id=' + id }) +} diff --git a/src/api/wms/productreceiptDetailb/index.ts b/src/api/wms/productreceiptDetailb/index.ts new file mode 100644 index 0000000..15cfc93 --- /dev/null +++ b/src/api/wms/productreceiptDetailb/index.ts @@ -0,0 +1,51 @@ +import request from '@/config/axios' + +export interface ProductreceiptDetailbVO { + id: number + packingNumber: string + batch: string + masterId: number + number: string + itemCode: string + itemName: string + outsideItemCode: string + outsideProduceDate: string + outsideSerialNumber: string + remark: string +} + +// 查询制品收货记录子列表 +export const getProductreceiptDetailbPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productreceipt-detailb/senior', data }) + } else { + return await request.get({ url: `/wms/productreceipt-detailb/page`, params }) + } +} + +// 查询制品收货记录子详情 +export const getProductreceiptDetailb = async (id: number) => { + return await request.get({ url: `/wms/productreceipt-detailb/get?id=` + id }) +} + +// 新增制品收货记录子 +export const createProductreceiptDetailb = async (data: ProductreceiptDetailbVO) => { + return await request.post({ url: `/wms/productreceipt-detailb/create`, data }) +} + +// 修改制品收货记录子 +export const updateProductreceiptDetailb = async (data: ProductreceiptDetailbVO) => { + return await request.put({ url: `/wms/productreceipt-detailb/update`, data }) +} + +// 删除制品收货记录子 +export const deleteProductreceiptDetailb = async (id: number) => { + return await request.delete({ url: `/wms/productreceipt-detailb/delete?id=` + id }) +} + +// 导出制品收货记录子 Excel +export const exportProductreceiptDetailb = async (params) => { + return await request.download({ url: `/wms/productreceipt-detailb/export-excel`, params }) +} diff --git a/src/api/wms/productreceiptJobDetail/index.ts b/src/api/wms/productreceiptJobDetail/index.ts new file mode 100644 index 0000000..33606d2 --- /dev/null +++ b/src/api/wms/productreceiptJobDetail/index.ts @@ -0,0 +1,97 @@ +import request from '@/config/axios' + +export interface ProductreceiptJobDetailVO { + productionLineCode: string + workStationCode: string + processCode: string + packingNumber: string + containerNumber: string + batch: string + produceDate: Date + expireDate: Date + inventoryStatus: string + toLocationCode: string + woNumber: string + woLine: string + packQty: number + packUnit: string + itemCode: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + number: string + remark: string + createTime: Date + creator: string + toOwnerCode: string +} + +// 查询制品收货任务子列表 +export const getProductreceiptJobDetailPage = async (params) => { + params.type = 'predict' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productreceipt-job-detail/senior', data }) + } else { + return await request.get({ url: `/wms/productreceipt-job-detail/page`, params }) + } +} + +// 查询制品收货任务子列表 +export const getProductreceiptJobDetailPageAssemble = async (params) => { + params.type = 'assemble' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productreceipt-job-detail/senior', data }) + } else { + return await request.get({ url: `/wms/productreceipt-job-detail/page`, params }) + } +} + + +// 查询制品收货任务子列表 +export const getProductreceiptJobDetailPageScarp = async (params) => { + params.type = 'scrap' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productreceipt-job-detail/senior', data }) + } else { + return await request.get({ url: `/wms/productreceipt-job-detail/page`, params }) + } +} + +// 查询制品收货任务子详情 +export const getProductreceiptJobDetail = async (id: number) => { + return await request.get({ url: `/wms/productreceipt-job-detail/get?id=` + id }) +} + +// 新增制品收货任务子 +export const createProductreceiptJobDetail = async (data: ProductreceiptJobDetailVO) => { + return await request.post({ url: `/wms/productreceipt-job-detail/create`, data }) +} + +// 修改制品收货任务子 +export const updateProductreceiptJobDetail = async (data: ProductreceiptJobDetailVO) => { + return await request.put({ url: `/wms/productreceipt-job-detail/update`, data }) +} + +// 删除制品收货任务子 +export const deleteProductreceiptJobDetail = async (id: number) => { + return await request.delete({ url: `/wms/productreceipt-job-detail/delete?id=` + id }) +} + +// 导出制品收货任务子 Excel +export const exportProductreceiptJobDetail = async (params) => { + return await request.download({ url: `/wms/productreceipt-job-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/productreceipt-job-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/productreceiptJobMain/index.ts b/src/api/wms/productreceiptJobMain/index.ts new file mode 100644 index 0000000..91f9d4e --- /dev/null +++ b/src/api/wms/productreceiptJobMain/index.ts @@ -0,0 +1,165 @@ +import request from '@/config/axios' + +export interface ProductreceiptJobMainVO { + requestNumber: string + productionPlanNumber: string + workShopCode: string + team: string + shift: string + details: string + requestTime: Date + requestDueTime: Date + status: string + expiredTime: Date + updateTime: Date + updater: string + jobStageStatus: string + priority: number + priorityIncrement: number + departmentCode: string + acceptUserId: string + acceptTime: Date + completeUserId: string + completeTime: Date + toWarehouseCode: string + toAreaCodes: string + fromAreaTypes: string + toAreaTypes: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + autoComplete: string + allowModifyLocation: string + allowModifyQty: string + allowBiggerQty: string + allowSmallerQty: string + allowModifyInventoryStatus: string + allowContinuousScanning: string + allowPartialComplete: string + allowModifyBatch: string + allowModifyPackingNumber: string +} + +// 查询制品收货任务主列表 +export const getProductreceiptJobMainPage = async (params) => { + params.type = 'predict' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productreceipt-job-main/senior', data }) + } else { + return await request.get({ url: `/wms/productreceipt-job-main/page`, params }) + } +} + +// 查询装配收货任务主列表 +export const getProductreceiptJobMainAssemblePage = async (params) => { + params.type = 'assemble' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productreceipt-job-main/senior', data }) + } else { + return await request.get({ url: `/wms/productreceipt-job-main/page`, params }) + } +} + +// 查询报废收货货任务主列表 +export const getProductreceiptscapJobMainPage = async (params) => { + params.type = 'scrap' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productreceipt-job-main/senior', data }) + } else { + return await request.get({ url: `/wms/productreceipt-job-main/page`, params }) + } +} + + +// 查询制品收货任务主详情 +export const getProductreceiptJobMain = async (id: number) => { + return await request.get({ url: `/wms/productreceipt-job-main/get?id=` + id }) +} + +// 新增制品收货任务主 +export const createProductreceiptJobMain = async (data: ProductreceiptJobMainVO) => { + return await request.post({ url: `/wms/productreceipt-job-main/create`, data }) +} + +// 修改制品收货任务主 +export const updateProductreceiptJobMain = async (data: ProductreceiptJobMainVO) => { + return await request.put({ url: `/wms/productreceipt-job-main/update`, data }) +} + +// 删除制品收货任务主 +export const deleteProductreceiptJobMain = async (id: number) => { + return await request.delete({ url: `/wms/productreceipt-job-main/delete?id=` + id }) +} + +// 导出制品收货任务主 Excel +export const exportProductreceiptJobMain = async (params) => { + params.type = 'predict' + if (params.isSearch) { + const cmd = { + 'column':'type', + 'action':'==', + 'value':'predict' + } + params.filters.push(cmd) + const data = {...params} + return await request.downloadPost({ url: `/wms/productreceipt-job-main/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/productreceipt-job-main/export-excel`, params }) + } +} + + +// 导出装配收货任务主 Excel +export const exportProductreceiptJobMainAssemble = async (params) => { + params.type = 'assemble' + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/productreceipt-job-main/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/productreceipt-job-main/export-excel`, params }) + } +} + +// 导出装配收货任务主 Excel +export const exportProductreceiptJobMainScrap = async (params) => { + params.type = 'scrap' + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/productreceipt-job-main/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/productreceipt-job-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/productreceipt-job-main/get-import-template' }) +} + +// 承接发料任务 +export const acceptProductreceiptMain = async (id) => { + return await request.put({ url: `/wms/productreceipt-job-main/accept?id=` + id }) +} + +// 放弃发料任务 +export const abandonProductreceiptMain = async (id) => { + return await request.put({ url: `/wms/productreceipt-job-main/abandon?id=` + id }) +} + +// 关闭发料任务 +export const closeProductreceiptMain = async (id) => { + return await request.put({ url: `/wms/productreceipt-job-main/close?id=` + id }) +} + +// 执行发料任务 +export const executeProductreceiptMain = async (data) => { + return await request.put({ url: `/wms/productreceipt-job-main/execute`, data}) +} diff --git a/src/api/wms/productreceiptRecordDetail/index.ts b/src/api/wms/productreceiptRecordDetail/index.ts new file mode 100644 index 0000000..35ba579 --- /dev/null +++ b/src/api/wms/productreceiptRecordDetail/index.ts @@ -0,0 +1,101 @@ +import request from '@/config/axios' + +export interface ProductreceiptRecordDetailVO { + productionlineCode: string + workStationCode: string + processCode: string + packingNumber: string + containerNumber: string + batch: string + produceDate: Date + expireDate: Date + inventoryStatus: string + toLocationCode: string + toLocationGroupCode: string + toAreaCode: string + toOwnerCode: string + woNumber: string + woLine: string + packQty: number + packUnit: string + number: string + itemCode: string + remark: string + createTime: Date + creator: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + code: string + interfaceType: string + jobDetailId: string +} + +// 查询制品收货记录子列表 +export const getProductreceiptRecordDetailPage = async (params) => { + params.type = 'predict' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productreceipt-record-detail/senior', data }) + } else { + return await request.get({ url: `/wms/productreceipt-record-detail/page`, params }) + } +} + +// 查询制品收货记录子列表 +export const getProductreceiptRecordDetailPageAssemble = async (params) => { + params.type = 'assemble' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productreceipt-record-detail/senior', data }) + } else { + return await request.get({ url: `/wms/productreceipt-record-detail/page`, params }) + } +} + +// 查询制品收货记录子列表 +export const getProductreceiptRecordDetailPageScrap = async (params) => { + params.type = 'scrap' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productreceipt-record-detail/senior', data }) + } else { + return await request.get({ url: `/wms/productreceipt-record-detail/page`, params }) + } +} + +// 查询制品收货记录子详情 +export const getProductreceiptRecordDetail = async (id: number) => { + return await request.get({ url: `/wms/productreceipt-record-detail/get?id=` + id }) +} + +// 新增制品收货记录子 +export const createProductreceiptRecordDetail = async (data: ProductreceiptRecordDetailVO) => { + return await request.post({ url: `/wms/productreceipt-record-detail/create`, data }) +} + +// 修改制品收货记录子 +export const updateProductreceiptRecordDetail = async (data: ProductreceiptRecordDetailVO) => { + return await request.put({ url: `/wms/productreceipt-record-detail/update`, data }) +} + +// 删除制品收货记录子 +export const deleteProductreceiptRecordDetail = async (id: number) => { + return await request.delete({ url: `/wms/productreceipt-record-detail/delete?id=` + id }) +} + +// 导出制品收货记录子 Excel +export const exportProductreceiptRecordDetail = async (params) => { + return await request.download({ url: `/wms/productreceipt-record-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/productreceipt-record-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/productreceiptRecordMain/index.ts b/src/api/wms/productreceiptRecordMain/index.ts new file mode 100644 index 0000000..c3e96dc --- /dev/null +++ b/src/api/wms/productreceiptRecordMain/index.ts @@ -0,0 +1,170 @@ +import request from '@/config/axios' + +export interface ProductreceiptRecordMainVO { + requestNumber: string + jobNumber: string + productionPlanNumber: string + workshopCode: string + team: string + shift: string + outTransactionType: string + inTransactionType: string + executeTime: Date + activeDate: Date + requestTime: Date + dueTime: Date + departmentCode: string + interfaceType: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + code: string + toWarehouseCode: string + toAreaTypes: string + toAreaCodes: string + available: string + inventoryStatus:string +} + +// 查询制品收货记录主列表 +export const getProductreceiptRecordMainPage = async (params) => { + params.type = 'predict' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productreceipt-record-main/senior', data }) + } else { + return await request.get({ url: `/wms/productreceipt-record-main/page`, params }) + } +} + +// 查询装配收货记录主列表 +export const getProductreceiptRecordMainAssemblePage = async (params) => { + params.type = 'assemble' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productreceipt-record-main/senior', data }) + } else { + return await request.get({ url: `/wms/productreceipt-record-main/page`, params }) + } +} + +// 查询报废收货记录主列表 +export const getProductreceiptRecordMainScrapPage = async (params) => { + params.type = 'scrap' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productreceipt-record-main/senior', data }) + } else { + return await request.get({ url: `/wms/productreceipt-record-main/page`, params }) + } +} + +// 查询制品收货记录主详情 +export const getProductreceiptRecordMain = async (id: number) => { + return await request.get({ url: `/wms/productreceipt-record-main/get?id=` + id }) +} + +// 新增制品收货记录主 +export const createProductreceiptRecordMain = async (data: ProductreceiptRecordMainVO) => { + return await request.post({ url: `/wms/productreceipt-record-main/create`, data }) +} + +// 修改制品收货记录主 +export const updateProductreceiptRecordMain = async (data: ProductreceiptRecordMainVO) => { + return await request.put({ url: `/wms/productreceipt-record-main/update`, data }) +} + +// 删除制品收货记录主 +export const deleteProductreceiptRecordMain = async (id: number) => { + return await request.delete({ url: `/wms/productreceipt-record-main/delete?id=` + id }) +} + +// 导出制品收货记录主 Excel +export const exportProductreceiptRecordMain = async (params) => { + // params.type = 'predict' + if (params.isSearch) { + // const cmd = { + // 'column':'type', + // 'action':'==', + // 'value':'predict' + // } + // params.filters.push(cmd) + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/productreceipt-record-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/productreceipt-record-main/export-excel`, params }) + } +} + + +// 导出制品收货记录主 Excel +export const exportProductreceiptRecordScapMain = async (params) => { + // params.type = 'predict' + if (params.isSearch) { + // const cmd = { + // 'column':'type', + // 'action':'==', + // 'value':'predict' + // } + // params.filters.push(cmd) + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/productreceipt-record-main/export-excel-senior-scrap', data }) + } else { + return await request.download({ url: `/wms/productreceipt-record-main/export-excel-scrap`, params }) + } +} + + +// 导出装配收货记录主 Excel +export const exportProductreceiptRecordAssembleMain = async (params) => { + params.type = 'assemble' + if (params.isSearch) { + const cmd = { + 'column':'type', + 'action':'==', + 'value':'assemble' + } + params.filters.push(cmd) + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/productreceipt-record-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/productreceipt-record-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/productreceipt-record-main/get-import-template' }) +} +// 创建上架申请 +export const createPutawayRequest = async (number:string) => { + return await request.post({ url: `/wms/productreceipt-record-main/createPutawayRequest?number=`+number }) +} + +// 创建检验申请 +export const createInspectRequest = async (number:string) => { + return await request.post({ url: `/wms/productreceipt-record-main/createInspectRequest?number=`+number }) +} + +//制品收货记录子执行回收操作 +export const handleRecoveryProductreceiptRecord = async (data: ProductreceiptRecordMainVO) => { + return await request.put({ url: `/wms/productreceipt-record-main/handleRecovery`, data }) +} + +// 接收隔离收货 +export const receive = (id) => { + return request.put({ url: '/wms/productreceipt-record-main/receive?id=' + id }) +} + +// 拒收隔离收货 +export const refuse = (id) => { + return request.put({ url: '/wms/productreceipt-record-main/refuse?id=' + id }) +} \ No newline at end of file diff --git a/src/api/wms/productreceiptRequestDetail/index.ts b/src/api/wms/productreceiptRequestDetail/index.ts new file mode 100644 index 0000000..7b21ba1 --- /dev/null +++ b/src/api/wms/productreceiptRequestDetail/index.ts @@ -0,0 +1,103 @@ +import request from '@/config/axios' + +export interface ProductreceiptRequestDetailVO { + productionLineCode: string + workStationCode: string + processCode: string + packingNumber: string + containerNumber: string + batch: string + produceDate: Date + expireDate: Date + inventoryStatus: string + woNumber: string + woLine: string + packQty: number + packUnit: string + number: string + itemCode: string + remark: string + createTime: Date + creator: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + updateTime: Date + updater: string + toOwnerCode: string +} + +// 查询制品收货申请子列表 +export const getProductreceiptRequestDetailPage = async (params) => { + params.type = 'predict' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productreceipt-request-detail/senior', data }) + } else { + return await request.get({ url: `/wms/productreceipt-request-detail/page`, params }) + } +} + +// 查询制品收货申请子列表 +export const getProductreceiptRequestDetailPageAssemble = async (params) => { + params.type = 'assemble' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productreceipt-request-detail/senior', data }) + } else { + return await request.get({ url: `/wms/productreceipt-request-detail/page`, params }) + } +} + +// 查询报废收货申请子列表 +export const getProductreceiptRequestDetailPageScrap = async (params) => { + params.type = 'scrap' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productreceipt-request-detail/senior', data }) + } else { + return await request.get({ url: `/wms/productreceipt-request-detail/page`, params }) + } +} + + +// 查询制品收货申请子详情 +export const getProductreceiptRequestDetail = async (id: number) => { + return await request.get({ url: `/wms/productreceipt-request-detail/get?id=` + id }) +} + +// 新增制品收货申请子 +export const createProductreceiptRequestDetail = async (data: ProductreceiptRequestDetailVO) => { + return await request.post({ url: `/wms/productreceipt-request-detail/create`, data }) +} + +// 修改制品收货申请子 +export const updateProductreceiptRequestDetail = async (data: ProductreceiptRequestDetailVO) => { + return await request.put({ url: `/wms/productreceipt-request-detail/update`, data }) +} + +// 删除制品收货申请子 +export const deleteProductreceiptRequestDetail = async (id: number) => { + return await request.delete({ url: `/wms/productreceipt-request-detail/delete?id=` + id }) +} + +// 导出制品收货申请子 Excel +export const exportProductreceiptRequestDetail = async (params) => { + return await request.download({ url: `/wms/productreceipt-request-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/productreceipt-request-detail/get-import-template' }) +} + +// 创建包装信息后更新子表数据packingNumber +export const updateDetailPackingNumber = async (id: number, number) => { + return await request.put({ url: '/wms/productreceipt-request-detail/updateDetailPackingNumber?id=' + id + '&number=' + number }) +} diff --git a/src/api/wms/productreceiptRequestMain/index.ts b/src/api/wms/productreceiptRequestMain/index.ts new file mode 100644 index 0000000..d809c5e --- /dev/null +++ b/src/api/wms/productreceiptRequestMain/index.ts @@ -0,0 +1,146 @@ +import request from '@/config/axios' + +export interface ProductreceiptRequestMainVO { + productionPlanNumber: string + workshopCode: string + team: string + shift: string + toWarehouseCode: string + toAreaTypes: string + toAreaCodes: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + requestTime: Date + dueTime: Date + departmentCode: string + status: string + updateTime: Date + updater: string + autoCommit: string + autoAgree: string + autoExecute: string + directCreateRecord: string +} + +// 查询制品收货申请主列表 +export const getProductreceiptRequestMainPage = async (params) => { + params.type = 'predict' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productreceipt-request-main/senior', data }) + } else { + return await request.get({ url: `/wms/productreceipt-request-main/page`, params }) + } +} + +// 查询制品收货申请主列表 +export const getProductreceiptRequestMainAssemblePage = async (params) => { + params.type = 'assemble' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productreceipt-request-main/senior', data }) + } else { + return await request.get({ url: `/wms/productreceipt-request-main/page`, params }) + } +} + +// 查询报废收货申请主列表 +export const getProductreceiptRequestMainScrapPage = async (params) => { + params.type = 'scrap' + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productreceipt-request-main/senior', data }) + } else { + return await request.get({ url: `/wms/productreceipt-request-main/page`, params }) + } +} + + +// 查询制品收货申请主详情 +export const getProductreceiptRequestMain = async (id: number) => { + return await request.get({ url: `/wms/productreceipt-request-main/get?id=` + id }) +} + +// 新增制品收货申请主 +export const createProductreceiptRequestMain = async (data: ProductreceiptRequestMainVO) => { + return await request.post({ url: `/wms/productreceipt-request-main/create`, data }) +} + +// 修改制品收货申请主 +export const updateProductreceiptRequestMain = async (data: ProductreceiptRequestMainVO) => { + return await request.put({ url: `/wms/productreceipt-request-main/update`, data }) +} + +// 删除制品收货申请主 +export const deleteProductreceiptRequestMain = async (id: number) => { + return await request.delete({ url: `/wms/productreceipt-request-main/delete?id=` + id }) +} + +// 导出制品收货申请主 Excel +export const exportProductreceiptRequestMain = async (params) => { + params.type = 'predict' + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/productreceipt-request-main/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/productreceipt-request-main/export-excel`, params }) + } +} + +// 导出制品收货申请主 Excel +export const exportProductreceiptRequestMainAssemble = async (params) => { + params.type = 'assemble' + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/productreceipt-request-main/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/productreceipt-request-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/productreceipt-request-main/get-import-template' }) +} + +// 关闭 +export const close = (id) => { + return request.put({ url: '/wms/productreceipt-request-main/close?id=' + id }) +} + +// 重新添加 +export const reAdd = (id) => { + return request.put({ url: '/wms/productreceipt-request-main/reAdd?id=' + id }) +} + +// 提交审批 +export const submit = (id) => { + return request.put({ url: '/wms/productreceipt-request-main/submit?id=' + id }) +} + +// 驳回 +export const refused = (id) => { + return request.put({ url: '/wms/productreceipt-request-main/refused?id=' + id }) +} + +// 审批通过 +export const agree = (id) => { + return request.put({ url: '/wms/productreceipt-request-main/agree?id=' + id }) +} + +// 处理 +export const handle = (id) => { + return request.put({ url: '/wms/productreceipt-request-main/handle?id=' + id }) +} + + +// 创建标签 +export const productCreateLabel = async (data: ProductreceiptRequestMainVO) => { + return await request.post({ url: `/wms/productreceipt-request-main/productCreateLabel`, data }) +} \ No newline at end of file diff --git a/src/api/wms/productredressJobDetail/index.ts b/src/api/wms/productredressJobDetail/index.ts new file mode 100644 index 0000000..27dd360 --- /dev/null +++ b/src/api/wms/productredressJobDetail/index.ts @@ -0,0 +1,71 @@ +import request from '@/config/axios' + +export interface ProductredressJobDetailVO { + id: number + productionLineCode: string + workStationCode: string + processCode: string + packingNumber: string + containerNumber: string + batch: string + produceDate: Date + expireDate: Date + inventoryStatus: string + toLocationCode: string + woNumber: string + woLine: string + packQty: number + packUnit: string + itemCode: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + masterId: number + number: string + remark: string + toOwnerCode: string +} + +// 查询制品回收任务子列表 +export const getProductredressJobDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productredress-job-detail/senior', data }) + } else { + return await request.get({ url: `/wms/productredress-job-detail/page`, params }) + } +} + +// 查询制品回收任务子详情 +export const getProductredressJobDetail = async (id: number) => { + return await request.get({ url: `/wms/productredress-job-detail/get?id=` + id }) +} + +// 新增制品回收任务子 +export const createProductredressJobDetail = async (data: ProductredressJobDetailVO) => { + return await request.post({ url: `/wms/productredress-job-detail/create`, data }) +} + +// 修改制品回收任务子 +export const updateProductredressJobDetail = async (data: ProductredressJobDetailVO) => { + return await request.put({ url: `/wms/productredress-job-detail/update`, data }) +} + +// 删除制品回收任务子 +export const deleteProductredressJobDetail = async (id: number) => { + return await request.delete({ url: `/wms/productredress-job-detail/delete?id=` + id }) +} + +// 导出制品回收任务子 Excel +export const exportProductredressJobDetail = async (params) => { + return await request.download({ url: `/wms/productredress-job-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/productredress-job-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/productredressJobMain/index.ts b/src/api/wms/productredressJobMain/index.ts new file mode 100644 index 0000000..8e90c03 --- /dev/null +++ b/src/api/wms/productredressJobMain/index.ts @@ -0,0 +1,104 @@ +import request from '@/config/axios' + +export interface ProductredressJobMainVO { + id: number + requestNumber: string + productionPlanNumber: string + workShopCode: string + team: string + shift: string + details: string + requestTime: Date + requestDueTime: Date + status: string + expiredTime: Date + jobStageStatus: string + priority: number + priorityIncrement: number + departmentCode: string + userGroupCode: string + acceptUserId: string + acceptUserName: string + acceptTime: Date + completeUserId: string + completeUserName: string + completeTime: Date + toWarehouseCode: string + toAreaCodes: string + fromAreaTypes: string + toAreaTypes: string + number: string + type: string + businessType: string + remark: string + autoComplete: string + allowModifyLocation: string + allowModifyQty: string + allowBiggerQty: string + allowSmallerQty: string + allowModifyInventoryStatus: string + allowContinuousScanning: string + allowPartialComplete: string + allowModifyBatch: string + allowModifyPackingNumber: string + inInventoryStatuses: string + outInventoryStatuses: string +} + +// 查询制品回收任务主列表 +export const getProductredressJobMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productredress-job-main/senior', data }) + } else { + return await request.get({ url: `/wms/productredress-job-main/page`, params }) + } +} + +// 查询制品回收任务主详情 +export const getProductredressJobMain = async (id: number) => { + return await request.get({ url: `/wms/productredress-job-main/get?id=` + id }) +} + +// 新增制品回收任务主 +export const createProductredressJobMain = async (data: ProductredressJobMainVO) => { + return await request.post({ url: `/wms/productredress-job-main/create`, data }) +} + +// 修改制品回收任务主 +export const updateProductredressJobMain = async (data: ProductredressJobMainVO) => { + return await request.put({ url: `/wms/productredress-job-main/update`, data }) +} + +// 删除制品回收任务主 +export const deleteProductredressJobMain = async (id: number) => { + return await request.delete({ url: `/wms/productredress-job-main/delete?id=` + id }) +} +// 承接制品回收任务主 +export const acceptProductredressJobMain = async (id: number) => { + return await request.put({ url: `/wms/productredress-job-main/accept?id=` + id }) +} +// 关闭制品回收任务主 +export const closeProductredressJobMain = async (id: number) => { + return await request.put({ url: `/wms/productredress-job-main/close?id=` + id }) +} +// 取消承接制品回收任务主 +export const abandonProductredressJobMain = async (id: number) => { + return await request.put({ url: `/wms/productredress-job-main/abandon?id=` + id }) +} + +// 导出制品回收任务主 Excel +export const exportProductredressJobMain = async (params) => { + if (params.isSearch){ + const data = {...params} + return await request.downloadPost({ url: `/wms/productredress-job-main/export-excel-senior`, data }) + }else { + return await request.download({ url: `/wms/productredress-job-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/productredress-job-main/get-import-template' }) +} diff --git a/src/api/wms/productredressRecordDetail/index.ts b/src/api/wms/productredressRecordDetail/index.ts new file mode 100644 index 0000000..860b7d8 --- /dev/null +++ b/src/api/wms/productredressRecordDetail/index.ts @@ -0,0 +1,77 @@ +import request from '@/config/axios' + +export interface ProductredressRecordDetailVO { + id: number + productionlineCode: string + workStationCode: string + processCode: string + packingNumber: string + containerNumber: string + batch: string + produceDate: Date + expireDate: Date + inventoryStatus: string + toLocationCode: string + toLocationGroupCode: string + toAreaCode: string + toOwnerCode: string + woNumber: string + woLine: string + packQty: number + packUnit: string + bomVersion: string + backFlushDetails: string + masterId: number + number: string + itemCode: string + remark: string + siteId: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + interfaceType: string +} + +// 查询制品回收记录子列表 +export const getProductredressRecordDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productredress-record-detail/senior', data }) + } else { + return await request.get({ url: `/wms/productredress-record-detail/page`, params }) + } +} + +// 查询制品回收记录子详情 +export const getProductredressRecordDetail = async (id: number) => { + return await request.get({ url: `/wms/productredress-record-detail/get?id=` + id }) +} + +// 新增制品回收记录子 +export const createProductredressRecordDetail = async (data: ProductredressRecordDetailVO) => { + return await request.post({ url: `/wms/productredress-record-detail/create`, data }) +} + +// 修改制品回收记录子 +export const updateProductredressRecordDetail = async (data: ProductredressRecordDetailVO) => { + return await request.put({ url: `/wms/productredress-record-detail/update`, data }) +} + +// 删除制品回收记录子 +export const deleteProductredressRecordDetail = async (id: number) => { + return await request.delete({ url: `/wms/productredress-record-detail/delete?id=` + id }) +} + +// 导出制品回收记录子 Excel +export const exportProductredressRecordDetail = async (params) => { + return await request.download({ url: `/wms/productredress-record-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/productredress-record-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/productredressRecordMain/index.ts b/src/api/wms/productredressRecordMain/index.ts new file mode 100644 index 0000000..0761559 --- /dev/null +++ b/src/api/wms/productredressRecordMain/index.ts @@ -0,0 +1,75 @@ +import request from '@/config/axios' + +export interface ProductredressRecordMainVO { + id: number + requestNumber: string + jobNumber: string + productionPlanNumber: string + workshopCode: string + team: string + shift: string + details: string + outTransactionType: string + inTransactionType: string + executeTime: Date + activeDate: Date + available: string + requestTime: Date + dueTime: Date + departmentCode: string + interfaceType: string + number: string + type: string + businessType: string + remark: string + code: string + toWarehouseCode: string + toAreaTypes: string + toAreaCodes: string +} + +// 查询制品回收记录主列表 +export const getProductredressRecordMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productredress-record-main/senior', data }) + } else { + return await request.get({ url: `/wms/productredress-record-main/page`, params }) + } +} + +// 查询制品回收记录主详情 +export const getProductredressRecordMain = async (id: number) => { + return await request.get({ url: `/wms/productredress-record-main/get?id=` + id }) +} + +// 新增制品回收记录主 +export const createProductredressRecordMain = async (data: ProductredressRecordMainVO) => { + return await request.post({ url: `/wms/productredress-record-main/create`, data }) +} + +// 修改制品回收记录主 +export const updateProductredressRecordMain = async (data: ProductredressRecordMainVO) => { + return await request.put({ url: `/wms/productredress-record-main/update`, data }) +} + +// 删除制品回收记录主 +export const deleteProductredressRecordMain = async (id: number) => { + return await request.delete({ url: `/wms/productredress-record-main/delete?id=` + id }) +} + +// 导出制品回收记录主 Excel +export const exportProductredressRecordMain = async (params) => { + if (params.isSearch){ + const data = {...params} + return await request.downloadPost({ url: `/wms/productredress-record-main/export-excel-senior`, data }) + }else { + return await request.download({ url: `/wms/productredress-record-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/productredress-record-main/get-import-template' }) +} diff --git a/src/api/wms/productredressRequestDetail/index.ts b/src/api/wms/productredressRequestDetail/index.ts new file mode 100644 index 0000000..150891c --- /dev/null +++ b/src/api/wms/productredressRequestDetail/index.ts @@ -0,0 +1,73 @@ +import request from '@/config/axios' + +export interface ProductredressRequestDetailVO { + id: number + productionLineCode: string + workStationCode: string + toLocationCode: string + processCode: string + packingNumber: string + containerNumber: string + batch: string + produceDate: Date + expireDate: Date + inventoryStatus: string + woNumber: string + woLine: string + packQty: number + packUnit: string + bomVersion: string + backFlushDetails: string + masterId: number + number: string + itemCode: string + remark: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + toOwnerCode: string +} + +// 查询制品回收申请子列表 +export const getProductredressRequestDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productredress-request-detail/senior', data }) + } else { + return await request.get({ url: `/wms/productredress-request-detail/page`, params }) + } +} + +// 查询制品回收申请子详情 +export const getProductredressRequestDetail = async (id: number) => { + return await request.get({ url: `/wms/productredress-request-detail/get?id=` + id }) +} + +// 新增制品回收申请子 +export const createProductredressRequestDetail = async (data: ProductredressRequestDetailVO) => { + return await request.post({ url: `/wms/productredress-request-detail/create`, data }) +} + +// 修改制品回收申请子 +export const updateProductredressRequestDetail = async (data: ProductredressRequestDetailVO) => { + return await request.put({ url: `/wms/productredress-request-detail/update`, data }) +} + +// 删除制品回收申请子 +export const deleteProductredressRequestDetail = async (id: number) => { + return await request.delete({ url: `/wms/productredress-request-detail/delete?id=` + id }) +} + +// 导出制品回收申请子 Excel +export const exportProductredressRequestDetail = async (params) => { + return await request.download({ url: `/wms/productredress-request-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/productredress-request-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/productredressRequestMain/index.ts b/src/api/wms/productredressRequestMain/index.ts new file mode 100644 index 0000000..d5402d7 --- /dev/null +++ b/src/api/wms/productredressRequestMain/index.ts @@ -0,0 +1,105 @@ +import request from '@/config/axios' + +export interface ProductredressRequestMainVO { + id: number + productionPlanNumber: string + workshopCode: string + team: string + shift: string + toWarehouseCode: string + toAreaTypes: string + toAreaCodes: string + number: string + type: string + businessType: string + remark: string + extraProperties: string + siteId: string + requestTime: Date + dueTime: Date + departmentCode: string + status: string + autoCommit: string + autoAgree: string + autoExecute: string + directCreateRecord: string + inInventoryStatuses: string + outInventoryStatuses: string +} + +// 查询制品回收申请主列表 +export const getProductredressRequestMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productredress-request-main/senior', data }) + } else { + return await request.get({ url: `/wms/productredress-request-main/page`, params }) + } +} + +// 查询制品回收申请主详情 +export const getProductredressRequestMain = async (id: number) => { + return await request.get({ url: `/wms/productredress-request-main/get?id=` + id }) +} + +// 新增制品回收申请主 +export const createProductredressRequestMain = async (data: ProductredressRequestMainVO) => { + return await request.post({ url: `/wms/productredress-request-main/create`, data }) +} + +// 修改制品回收申请主 +export const updateProductredressRequestMain = async (data: ProductredressRequestMainVO) => { + return await request.put({ url: `/wms/productredress-request-main/update`, data }) +} + +// 删除制品回收申请主 +export const deleteProductredressRequestMain = async (id: number) => { + return await request.delete({ url: `/wms/productredress-request-main/delete?id=` + id }) +} + +// 导出制品回收申请主 Excel +export const exportProductredressRequestMain = async (params) => { + if (params.isSearch){ + const data = {...params} + return await request.downloadPost({ url: `/wms/productredress-request-main/export-excel-senior`, data }) + }else { + return await request.download({ url: `/wms/productredress-request-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/productredress-request-main/get-import-template' }) +} + + +// 关闭 +export const close = (id) => { + return request.put({ url: '/wms/productredress-request-main/close?id=' + id }) +} + +// 重新添加 +export const reAdd = (id) => { + return request.put({ url: '/wms/productredress-request-main/reAdd?id=' + id }) +} + +// 提交审批 +export const submit = (id) => { + return request.put({ url: '/wms/productredress-request-main/submit?id=' + id }) +} + +// 驳回 +export const refused = (id) => { + return request.put({ url: '/wms/productredress-request-main/refused?id=' + id }) +} + +// 审批通过 +export const agree = (id) => { + return request.put({ url: '/wms/productredress-request-main/agree?id=' + id }) +} + +// 处理 +export const handle = (id) => { + return request.put({ url: '/wms/productredress-request-main/handle?id=' + id }) +} diff --git a/src/api/wms/productrepairRecordDetail/index.ts b/src/api/wms/productrepairRecordDetail/index.ts new file mode 100644 index 0000000..20faa97 --- /dev/null +++ b/src/api/wms/productrepairRecordDetail/index.ts @@ -0,0 +1,72 @@ +import request from '@/config/axios' + +export interface ProductrepairRecordDetailVO { + fromOwnerCode: string + productionLineCode: string + workStationCode: string + processCode: string + packingNumber: string + containerNumber: string + batch: string + produceDate: Date + expireDate: Date + toLocationCode: string + toLocationGroupCode: string + toAreaCode: string + inventoryStatus: string + number: string + itemCode: string + remark: string + createTime: Date + creator: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + code: string + interfaceType: string + jobDetailId: string +} + +// 查询制品返修记录子列表 +export const getProductrepairRecordDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productrepair-record-detail/senior', data }) + } else { + return await request.get({ url: `/wms/productrepair-record-detail/page`, params }) + } +} + +// 查询制品返修记录子详情 +export const getProductrepairRecordDetail = async (id: number) => { + return await request.get({ url: `/wms/productrepair-record-detail/get?id=` + id }) +} + +// 新增制品返修记录子 +export const createProductrepairRecordDetail = async (data: ProductrepairRecordDetailVO) => { + return await request.post({ url: `/wms/productrepair-record-detail/create`, data }) +} + +// 修改制品返修记录子 +export const updateProductrepairRecordDetail = async (data: ProductrepairRecordDetailVO) => { + return await request.put({ url: `/wms/productrepair-record-detail/update`, data }) +} + +// 删除制品返修记录子 +export const deleteProductrepairRecordDetail = async (id: number) => { + return await request.delete({ url: `/wms/productrepair-record-detail/delete?id=` + id }) +} + +// 导出制品返修记录子 Excel +export const exportProductrepairRecordDetail = async (params) => { + return await request.download({ url: `/wms/productrepair-record-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/productrepair-record-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/productrepairRecordMain/index.ts b/src/api/wms/productrepairRecordMain/index.ts new file mode 100644 index 0000000..ecdfc47 --- /dev/null +++ b/src/api/wms/productrepairRecordMain/index.ts @@ -0,0 +1,73 @@ +import request from '@/config/axios' + +export interface ProductrepairRecordMainVO { + requestNumber: string + workshopCode: string + team: string + shift: string + outTransactionType: string + inTransactionType: string + executeTime: Date + activeDate: Date + requestTime: Date + dueTime: Date + departmentCode: string + interfaceType: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + code: string + fromWarehouseCode: string + fromAreaTypes: string + fromAreaCodes: string + available: string +} + +// 查询制品返修记录主列表 +export const getProductrepairRecordMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productrepair-record-main/senior', data }) + } else { + return await request.get({ url: `/wms/productrepair-record-main/page`, params }) + } +} + +// 查询制品返修记录主详情 +export const getProductrepairRecordMain = async (id: number) => { + return await request.get({ url: `/wms/productrepair-record-main/get?id=` + id }) +} + +// 新增制品返修记录主 +export const createProductrepairRecordMain = async (data: ProductrepairRecordMainVO) => { + return await request.post({ url: `/wms/productrepair-record-main/create`, data }) +} + +// 修改制品返修记录主 +export const updateProductrepairRecordMain = async (data: ProductrepairRecordMainVO) => { + return await request.put({ url: `/wms/productrepair-record-main/update`, data }) +} + +// 删除制品返修记录主 +export const deleteProductrepairRecordMain = async (id: number) => { + return await request.delete({ url: `/wms/productrepair-record-main/delete?id=` + id }) +} + +// 导出制品返修记录主 Excel +export const exportProductrepairRecordMain = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/productrepair-record-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/productrepair-record-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/productrepair-record-main/get-import-template' }) +} diff --git a/src/api/wms/productrepairRequestDetaila/index.ts b/src/api/wms/productrepairRequestDetaila/index.ts new file mode 100644 index 0000000..5b5adee --- /dev/null +++ b/src/api/wms/productrepairRequestDetaila/index.ts @@ -0,0 +1,67 @@ +import request from '@/config/axios' + +export interface ProductrepairRequestDetailaVO { + fromOwnerCode: string + productionlineCode: string + workStationCode: string + processCode: string + packingNumber: string + containerNumber: string + batch: string + fromLocationCode: string + inventoryStatus: string + number: string + itemCode: string + remark: string + createTime: Date + creator: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + updateTime: Date + updater: string +} + +// 查询制品返修申请子列表 +export const getProductrepairRequestDetailaPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productrepair-request-detaila/senior', data }) + } else { + return await request.get({ url: `/wms/productrepair-request-detaila/page`, params }) + } +} + +// 查询制品返修申请子详情 +export const getProductrepairRequestDetaila = async (id: number) => { + return await request.get({ url: `/wms/productrepair-request-detaila/get?id=` + id }) +} + +// 新增制品返修申请子 +export const createProductrepairRequestDetaila = async (data: ProductrepairRequestDetailaVO) => { + return await request.post({ url: `/wms/productrepair-request-detaila/create`, data }) +} + +// 修改制品返修申请子 +export const updateProductrepairRequestDetaila = async (data: ProductrepairRequestDetailaVO) => { + return await request.put({ url: `/wms/productrepair-request-detaila/update`, data }) +} + +// 删除制品返修申请子 +export const deleteProductrepairRequestDetaila = async (id: number) => { + return await request.delete({ url: `/wms/productrepair-request-detaila/delete?id=` + id }) +} + +// 导出制品返修申请子 Excel +export const exportProductrepairRequestDetaila = async (params) => { + return await request.download({ url: `/wms/productrepair-request-detaila/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/productrepair-request-detaila/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/productrepairRequestMain/index.ts b/src/api/wms/productrepairRequestMain/index.ts new file mode 100644 index 0000000..87ff80c --- /dev/null +++ b/src/api/wms/productrepairRequestMain/index.ts @@ -0,0 +1,107 @@ +import request from '@/config/axios' + +export interface ProductrepairRequestMainVO { + workshopCode: string + team: string + shift: string + fromWarehouseCode: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + requestTime: Date + dueTime: Date + departmentCode: string + status: string + updateTime: Date + updater: string + fromAreaTypes: string + fromAreaCodes: string + autoCommit: string + autoAgree: string + autoExecute: string + directCreateRecord: string +} + +// 查询制品返修申请主列表 +export const getProductrepairRequestMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productrepair-request-main/senior', data }) + } else { + return await request.get({ url: `/wms/productrepair-request-main/page`, params }) + } +} + +// 查询制品返修申请主详情 +export const getProductrepairRequestMain = async (id: number) => { + return await request.get({ url: `/wms/productrepair-request-main/get?id=` + id }) +} + +// 新增制品返修申请主 +export const createProductrepairRequestMain = async (data: ProductrepairRequestMainVO) => { + return await request.post({ url: `/wms/productrepair-request-main/create`, data }) +} + +// 修改制品返修申请主 +export const updateProductrepairRequestMain = async (data: ProductrepairRequestMainVO) => { + return await request.put({ url: `/wms/productrepair-request-main/update`, data }) +} + +// 删除制品返修申请主 +export const deleteProductrepairRequestMain = async (id: number) => { + return await request.delete({ url: `/wms/productrepair-request-main/delete?id=` + id }) +} + +// 导出制品返修申请主 Excel +export const exportProductrepairRequestMain = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/productrepair-request-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/productrepair-request-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/productrepair-request-main/get-import-template' }) +} + +// 关闭-制品返修申请 +export const closeProductrepairRequestMain = async (id) => { + return await request.put({ url: `/wms/productrepair-request-main/close?id=` + id }) +} + +// 重新添加-制品返修申请 +export const reAddProductrepairRequestMain = async (id) => { + return await request.put({ url: `/wms/productrepair-request-main/reAdd?id=` + id }) +} + +// 提交审批-制品返修申请 +export const submitProductrepairRequestMain = async (id) => { + return await request.put({ url: `/wms/productrepair-request-main/submit?id=` + id }) +} + +// 审批驳回-制品返修申请 +export const refusedProductrepairRequestMain = async (id) => { + return await request.put({ url: `/wms/productrepair-request-main/refused?id=` + id }) +} + +// 审批通过-制品返修申请 +export const agreeProductrepairRequestMain = async (id) => { + return await request.put({ url: `/wms/productrepair-request-main/agree?id=` + id }) +} + +// 处理-制品返修申请 +export const handleProductrepairRequestMain = async (id) => { + return await request.put({ url: `/wms/productrepair-request-main/handle?id=` + id }) +} + +// 修改制品返修BOM数据 +export const updateProductscrapDetailRequestBom = async (id, data) => { + return await request.post({ url: `/wms/productrepair-request-main/updateBom?id=`+id, data }) +} diff --git a/src/api/wms/productscrapJobDetail/index.ts b/src/api/wms/productscrapJobDetail/index.ts new file mode 100644 index 0000000..226fd56 --- /dev/null +++ b/src/api/wms/productscrapJobDetail/index.ts @@ -0,0 +1,63 @@ +import request from '@/config/axios' + +export interface ProductscrapJobDetailVO { + ownerCode: string + packingNumber: string + containerNumber: string + batch: string + fromLocationCode: string + inventoryStatus: string + reason: string + itemCode: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + number: string + remark: string + createTime: Date + creator: string +} + +// 查询制品报废任务子列表 +export const getProductscrapJobDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productscrap-job-detail/senior', data }) + } else { + return await request.get({ url: `/wms/productscrap-job-detail/page`, params }) + } +} + +// 查询制品报废任务子详情 +export const getProductscrapJobDetail = async (id: number) => { + return await request.get({ url: `/wms/productscrap-job-detail/get?id=` + id }) +} + +// 新增制品报废任务子 +export const createProductscrapJobDetail = async (data: ProductscrapJobDetailVO) => { + return await request.post({ url: `/wms/productscrap-job-detail/create`, data }) +} + +// 修改制品报废任务子 +export const updateProductscrapJobDetail = async (data: ProductscrapJobDetailVO) => { + return await request.put({ url: `/wms/productscrap-job-detail/update`, data }) +} + +// 删除制品报废任务子 +export const deleteProductscrapJobDetail = async (id: number) => { + return await request.delete({ url: `/wms/productscrap-job-detail/delete?id=` + id }) +} + +// 导出制品报废任务子 Excel +export const exportProductscrapJobDetail = async (params) => { + return await request.download({ url: `/wms/productscrap-job-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/productscrap-job-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/productscrapJobMain/index.ts b/src/api/wms/productscrapJobMain/index.ts new file mode 100644 index 0000000..d4c0941 --- /dev/null +++ b/src/api/wms/productscrapJobMain/index.ts @@ -0,0 +1,79 @@ +import request from '@/config/axios' + +export interface ProductscrapJobMainVO { + requestNumber: string + fromWarehouseCode: string + requestTime: Date + requestDueTime: Date + status: string + expiredTime: Date + updateTime: Date + updater: string + jobStageStatus: string + priority: number + priorityIncrement: number + departmentCode: string + acceptUserId: string + acceptTime: Date + completeUserId: string + completeTime: Date + fromAreaTypes: string + toAreaTypes: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + fromAreaCodes: string + autoComplete: string + allowModifyLocation: string + allowModifyQty: string + allowBiggerQty: string + allowSmallerQty: string + allowModifyInventoryStatus: string + allowContinuousScanning: string + allowPartialComplete: string + allowModifyBatch: string + allowModifyPackingNumber: string +} + +// 查询制品报废任务主列表 +export const getProductscrapJobMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productscrap-job-main/senior', data }) + } else { + return await request.get({ url: `/wms/productscrap-job-main/page`, params }) + } +} + +// 查询制品报废任务主详情 +export const getProductscrapJobMain = async (id: number) => { + return await request.get({ url: `/wms/productscrap-job-main/get?id=` + id }) +} + +// 新增制品报废任务主 +export const createProductscrapJobMain = async (data: ProductscrapJobMainVO) => { + return await request.post({ url: `/wms/productscrap-job-main/create`, data }) +} + +// 修改制品报废任务主 +export const updateProductscrapJobMain = async (data: ProductscrapJobMainVO) => { + return await request.put({ url: `/wms/productscrap-job-main/update`, data }) +} + +// 删除制品报废任务主 +export const deleteProductscrapJobMain = async (id: number) => { + return await request.delete({ url: `/wms/productscrap-job-main/delete?id=` + id }) +} + +// 导出制品报废任务主 Excel +export const exportProductscrapJobMain = async (params) => { + return await request.download({ url: `/wms/productscrap-job-main/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/productscrap-job-main/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/productscrapRecordDetail/index.ts b/src/api/wms/productscrapRecordDetail/index.ts new file mode 100644 index 0000000..ae2aae8 --- /dev/null +++ b/src/api/wms/productscrapRecordDetail/index.ts @@ -0,0 +1,70 @@ +import request from '@/config/axios' + +export interface ProductscrapRecordDetailVO { + fromOwnerCode: string + packingNumber: string + containerNumber: string + batch: string + fromLocationCode: string + fromLocationGroupCode: string + fromAreaCode: string + inventoryStatus: string + reason: string + singlePrice: number + amount: number + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + code: string + interfaceType: string + number: string + itemCode: string + remark: string + createTime: Date + creator: string + jobDetailId: string +} + +// 查询制品报废记录子列表 +export const getProductscrapRecordDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productscrap-record-detail/senior', data }) + } else { + return await request.get({ url: `/wms/productscrap-record-detail/page`, params }) + } +} + +// 查询制品报废记录子详情 +export const getProductscrapRecordDetail = async (id: number) => { + return await request.get({ url: `/wms/productscrap-record-detail/get?id=` + id }) +} + +// 新增制品报废记录子 +export const createProductscrapRecordDetail = async (data: ProductscrapRecordDetailVO) => { + return await request.post({ url: `/wms/productscrap-record-detail/create`, data }) +} + +// 修改制品报废记录子 +export const updateProductscrapRecordDetail = async (data: ProductscrapRecordDetailVO) => { + return await request.put({ url: `/wms/productscrap-record-detail/update`, data }) +} + +// 删除制品报废记录子 +export const deleteProductscrapRecordDetail = async (id: number) => { + return await request.delete({ url: `/wms/productscrap-record-detail/delete?id=` + id }) +} + +// 导出制品报废记录子 Excel +export const exportProductscrapRecordDetail = async (params) => { + return await request.download({ url: `/wms/productscrap-record-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/productscrap-record-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/productscrapRecordMain/index.ts b/src/api/wms/productscrapRecordMain/index.ts new file mode 100644 index 0000000..1d18efe --- /dev/null +++ b/src/api/wms/productscrapRecordMain/index.ts @@ -0,0 +1,77 @@ +import request from '@/config/axios' + +export interface ProductscrapRecordMainVO { + requestNumber: string + jobNumber: string + outTransactionType: string + inTransactionType: string + executeTime: Date + activeDate: Date + requestTime: Date + dueTime: Date + departmentCode: string + interfaceType: string + code: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + fromWarehouseCode: string + fromAreaTypes: string + fromAreaCodes: string + ruleUserId: number + available: string +} + +// 查询制品报废记录主列表 +export const getProductscrapRecordMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productscrap-record-main/senior', data }) + } else { + return await request.get({ url: `/wms/productscrap-record-main/page`, params }) + } +} + +// 查询制品报废记录主详情 +export const getProductscrapRecordMain = async (id: number) => { + return await request.get({ url: `/wms/productscrap-record-main/get?id=` + id }) +} + +// 新增制品报废记录主 +export const createProductscrapRecordMain = async (data: ProductscrapRecordMainVO) => { + return await request.post({ url: `/wms/productscrap-record-main/create`, data }) +} + +// 修改制品报废记录主 +export const updateProductscrapRecordMain = async (data: ProductscrapRecordMainVO) => { + return await request.put({ url: `/wms/productscrap-record-main/update`, data }) +} + +// 删除制品报废记录主 +export const deleteProductscrapRecordMain = async (id: number) => { + return await request.delete({ url: `/wms/productscrap-record-main/delete?id=` + id }) +} + +// 导出制品报废记录主 Excel +export const exportProductscrapRecordMain = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productscrap-record-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/productscrap-record-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/productscrap-record-main/get-import-template' }) +} + +// 撤销 +export const revoke = async (requestNumber: number, number: number) => { + return await request.get({ url: `/wms/productscrap-record-main/revoke?requestNumber=` + requestNumber + '&number=' + number}) +} \ No newline at end of file diff --git a/src/api/wms/productscrapRequestDetail/index.ts b/src/api/wms/productscrapRequestDetail/index.ts new file mode 100644 index 0000000..ffb2671 --- /dev/null +++ b/src/api/wms/productscrapRequestDetail/index.ts @@ -0,0 +1,65 @@ +import request from '@/config/axios' + +export interface ProductscrapRequestDetailVO { + fromOwnerCode: string + packingNumber: string + containerNumber: string + batch: string + fromLocationCode: string + inventoryStatus: string + reason: string + number: string + itemCode: string + remark: string + createTime: Date + creator: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + updateTime: Date + updater: string +} + +// 查询制品报废申请子列表 +export const getProductscrapRequestDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productscrap-request-detail/senior', data }) + } else { + return await request.get({ url: `/wms/productscrap-request-detail/page`, params }) + } +} + +// 查询制品报废申请子详情 +export const getProductscrapRequestDetail = async (id: number) => { + return await request.get({ url: `/wms/productscrap-request-detail/get?id=` + id }) +} + +// 新增制品报废申请子 +export const createProductscrapRequestDetail = async (data: ProductscrapRequestDetailVO) => { + return await request.post({ url: `/wms/productscrap-request-detail/create`, data }) +} + +// 修改制品报废申请子 +export const updateProductscrapRequestDetail = async (data: ProductscrapRequestDetailVO) => { + return await request.put({ url: `/wms/productscrap-request-detail/update`, data }) +} + +// 删除制品报废申请子 +export const deleteProductscrapRequestDetail = async (id: number) => { + return await request.delete({ url: `/wms/productscrap-request-detail/delete?id=` + id }) +} + +// 导出制品报废申请子 Excel +export const exportProductscrapRequestDetail = async (params) => { + return await request.download({ url: `/wms/productscrap-request-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/productscrap-request-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/productscrapRequestMain/index.ts b/src/api/wms/productscrapRequestMain/index.ts new file mode 100644 index 0000000..2a0a38e --- /dev/null +++ b/src/api/wms/productscrapRequestMain/index.ts @@ -0,0 +1,110 @@ +import request from '@/config/axios' + +export interface ProductscrapRequestMainVO { + fromWarehouseCode: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + requestTime: Date + dueTime: Date + departmentCode: string + status: string + updateTime: Date + updater: string + fromAreaTypes: string + fromAreaCodes: string + autoCommit: string + autoAgree: string + autoExecute: string + directCreateRecord: string +} + +// 查询制品报废申请主列表 +export const getProductscrapRequestMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/productscrap-request-main/senior', data }) + } else { + return await request.get({ url: `/wms/productscrap-request-main/page`, params }) + } +} + +// 查询制品报废申请主详情 +export const getProductscrapRequestMain = async (id: number) => { + return await request.get({ url: `/wms/productscrap-request-main/get?id=` + id }) +} + +// 新增制品报废申请主 +export const createProductscrapRequestMain = async (data: ProductscrapRequestMainVO) => { + return await request.post({ url: `/wms/productscrap-request-main/create`, data }) +} + +// 修改制品报废申请主 +export const updateProductscrapRequestMain = async (data: ProductscrapRequestMainVO) => { + return await request.put({ url: `/wms/productscrap-request-main/update`, data }) +} + +// 删除制品报废申请主 +export const deleteProductscrapRequestMain = async (id: number) => { + return await request.delete({ url: `/wms/productscrap-request-main/delete?id=` + id }) +} + +// 导出制品报废申请主 Excel +export const exportProductscrapRequestMain = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/productscrap-request-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/productscrap-request-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/productscrap-request-main/get-import-template' }) +} + +// 关闭-制品报废申请 +export const closeProductscrapRequestMain = async (id) => { + return await request.put({ url: `/wms/productscrap-request-main/close?id=` + id }) +} + +// 重新添加-制品报废申请 +export const reAddProductscrapRequestMain = async (id) => { + return await request.put({ url: `/wms/productscrap-request-main/reAdd?id=` + id }) +} + +// 提交审批-制品报废申请 +export const submitProductscrapRequestMain = async (id) => { + return await request.put({ url: `/wms/productscrap-request-main/submit?id=` + id }) +} + +// 审批驳回-制品报废申请 +export const refusedProductscrapRequestMain = async (id) => { + return await request.put({ url: `/wms/productscrap-request-main/refused?id=` + id }) +} + +// 审批通过-制品报废申请 +export const agreeProductscrapRequestMain = async (id) => { + return await request.put({ url: `/wms/productscrap-request-main/agree?id=` + id }) +} + +// 处理-制品报废申请 +export const handleProductscrapRequestMain = async (id) => { + return await request.put({ url: `/wms/productscrap-request-main/handle?id=` + id }) +} + +// 修改制品报废BOM数据 +export const updateProductscrapDetailRequestBom = async (id, data) => { + return await request.post({ url: `/wms/productscrap-request-main/updateBom?id=`+id, data }) +} + +// 编辑 +export const editReturnNew = async (params) => { + return await request.get({ url: `/wms/productscrap-request-main/editReturnNew`, params }) +} + diff --git a/src/api/wms/project/index.ts b/src/api/wms/project/index.ts new file mode 100644 index 0000000..2689abd --- /dev/null +++ b/src/api/wms/project/index.ts @@ -0,0 +1,58 @@ +import request from '@/config/axios' + +export interface ProjectVO { + code: string + name: string + description: string + customerCode: string + available: number + activeTime: Date + expireTime: Date + remark: string +} + +// 查询项目列表 +export const getProjectPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/wms/project/senior', data }) + } else { + return await request.get({ url: `/wms/project/page`, params }) + } +} + +// 查询项目详情 +export const getProject = async (id: number) => { + return await request.get({ url: `/wms/project/get?id=` + id }) +} + +// 新增项目 +export const createProject = async (data: ProjectVO) => { + return await request.post({ url: `/wms/project/create`, data }) +} + +// 修改项目 +export const updateProject = async (data: ProjectVO) => { + return await request.put({ url: `/wms/project/update`, data }) +} + +// 删除项目 +export const deleteProject = async (id: number) => { + return await request.delete({ url: `/wms/project/delete?id=` + id }) +} + +// 导出项目 Excel +export const exportProject = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/project/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/project/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/project/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/purchaseDetail/index.ts b/src/api/wms/purchaseDetail/index.ts new file mode 100644 index 0000000..4623e6f --- /dev/null +++ b/src/api/wms/purchaseDetail/index.ts @@ -0,0 +1,136 @@ +import request from '@/config/axios' + +export interface PurchaseDetailVO { + lineNumber: string + erpLocationCode: string + projectCode: string + packQty: number + packUnit: string + supplierQty: number + supplierUom: string + convertRate: number + shippedQty: number + receivedQty: number + returnedQty: number + putawayQty: number + overReceivingPercent: number + singlePrice: number + amount: number + number: string + itemCode: string + remark: string + createTime: Date + creator: string + orderQty: number + uom: string + updateTime: Date + updater: string + concurrencyStamp: string + status: string + available: string +} + +const message = useMessage() // 消息弹窗 + +// 查询采购订单子列表 +export const getPurchaseDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/purchase-detail/senior', data }) + } else { + return await request.get({ url: `/wms/purchase-detail/page`, params }) + } +} + + +// 查询采购订单子列表 +export const getPurchaseDetailPageWMS = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/purchase-detail/seniorWMS', data }) + } else { + return await request.get({ url: `/wms/purchase-detail/pageWMS`, params }) + } +} + + +// 查询M类型的采购订单子列表 +export const getPurchaseDetailPageWMSMOrderType = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/purchase-detail/seniorWMS-MOrderType', data }) + } else { + return await request.get({ url: `/wms/purchase-detail/pageWMS-MOrderType`, params }) + } +} + +export const getPurchaseDetailPageWMSTypeM = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/purchase-detail/seniorM', data }) + } else { + return await request.get({ url: `/wms/purchase-detail/pageM`, params }) + } +} + +// 查询采购订单子列表 +export const getPurchaseDetailPageWMSSpare = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/purchase-detail/seniorWMS-Spare', data }) + } else { + return await request.get({ url: `/wms/purchase-detail/pageWMS-Spare`, params }) + } +} + +// 校验子表数据 +export const getPurchaseDetailPageCheckData = async (params) => { + return await request.get({ url: `/wms/purchase-detail/pageCheckData`, params }) +} + +// 查询采购订单子列表 +export const getPurchaseDetailPagePoNumber = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/purchase-detail/senior', data }) + } else { + return await request.get({ url: `/wms/purchase-detail/page`, params }) + } +} + + +// 查询采购订单子详情 +export const getPurchaseDetail = async (id: number) => { + return await request.get({ url: `/wms/purchase-detail/get?id=` + id }) +} + +// 新增采购订单子 +export const createPurchaseDetail = async (data: PurchaseDetailVO) => { + return await request.post({ url: `/wms/purchase-detail/create`, data }) +} + +// 修改采购订单子 +export const updatePurchaseDetail = async (data: PurchaseDetailVO) => { + return await request.put({ url: `/wms/purchase-detail/update`, data }) +} + +// 删除采购订单子 +export const deletePurchaseDetail = async (id: number) => { + return await request.delete({ url: `/wms/purchase-detail/delete?id=` + id }) +} + +// 导出采购订单子 Excel +export const exportPurchaseDetail = async (params) => { + return await request.download({ url: `/wms/purchase-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/purchase-detail/get-import-template' }) +} diff --git a/src/api/wms/purchaseMain/index.ts b/src/api/wms/purchaseMain/index.ts new file mode 100644 index 0000000..164cf53 --- /dev/null +++ b/src/api/wms/purchaseMain/index.ts @@ -0,0 +1,86 @@ +import request from '@/config/axios' + +export interface PurchaseMainVO { + supplierCode: string + number: string + type: string + status: string + orderDate: Date + dueDate: Date + version: string + taxRate: number + contactName: string + contactPhone: string + contactEmail: string + isConsignment: string + businessType: string + remark: string + createTime: Date + creator: string + updateTime: Date + updater: string + currentStage: number + available: string +} + +// 查询采购订单主列表 +export const getPurchaseMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/purchase-main/senior', data }) + } else { + return await request.get({ url: `/wms/purchase-main/page`, params }) + } +} + +// 查询采购订单主详情 +export const getPurchaseMain = async (id: number) => { + return await request.get({ url: `/wms/purchase-main/get?id=` + id }) +} + +// 新增采购订单主 +export const createPurchaseMain = async (data: PurchaseMainVO) => { + return await request.post({ url: `/wms/purchase-main/create`, data }) +} + +// 修改采购订单主 +export const updatePurchaseMain = async (data: PurchaseMainVO) => { + return await request.put({ url: `/wms/purchase-main/update`, data }) +} + +// 删除采购订单主 +export const deletePurchaseMain = async (id: number) => { + return await request.delete({ url: `/wms/purchase-main/delete?id=` + id }) +} + +// 关闭采购订单主 +export const closePurchaseMain = async (id: number) => { + return await request.post({ url: `/wms/purchase-main/close?id=` + id }) +} +// 打开采购订单主 +export const openPurchaseMain = async (id: number) => { + return await request.post({ url: `/wms/purchase-main/open?id=` + id }) +} +// 发布采购订单主 +export const publishPurchaseMain = async (id: number) => { + return await request.post({ url: `/wms/purchase-main/publish?id=` + id }) +} +// 下架采购订单主 +export const witPurchaseMain = async (id: number) => { + return await request.post({ url: `/wms/purchase-main/wit?id=` + id }) +} +// 导出采购订单主 Excel +export const exportPurchaseMain = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/purchase-main/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/purchase-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/purchase-main/get-import-template' }) +} diff --git a/src/api/wms/purchaseMainWms/index.ts b/src/api/wms/purchaseMainWms/index.ts new file mode 100644 index 0000000..97ca9ed --- /dev/null +++ b/src/api/wms/purchaseMainWms/index.ts @@ -0,0 +1,86 @@ +import request from '@/config/axios' + +export interface PurchaseMainVO { + supplierCode: string + number: string + type: string + status: string + orderDate: Date + dueDate: Date + version: string + taxRate: number + contactName: string + contactPhone: string + contactEmail: string + isConsignment: string + businessType: string + remark: string + createTime: Date + creator: string + updateTime: Date + updater: string + currentStage: number + available: string +} + +// 查询采购订单主列表 +export const getPurchaseMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/purchase-main/seniorWMS', data }) + } else { + return await request.get({ url: `/wms/purchase-main/pageWMS`, params }) + } +} + +// 查询采购订单主详情 +export const getPurchaseMain = async (id: number) => { + return await request.get({ url: `/wms/purchase-main/get?id=` + id }) +} + +// 新增采购订单主 +export const createPurchaseMain = async (data: PurchaseMainVO) => { + return await request.post({ url: `/wms/purchase-main/create`, data }) +} + +// 修改采购订单主 +export const updatePurchaseMain = async (data: PurchaseMainVO) => { + return await request.put({ url: `/wms/purchase-main/update`, data }) +} + +// 删除采购订单主 +export const deletePurchaseMain = async (id: number) => { + return await request.delete({ url: `/wms/purchase-main/delete?id=` + id }) +} + +// 关闭采购订单主 +export const closePurchaseMain = async (id: number) => { + return await request.post({ url: `/wms/purchase-main/close?id=` + id }) +} +// 打开采购订单主 +export const openPurchaseMain = async (id: number) => { + return await request.post({ url: `/wms/purchase-main/open?id=` + id }) +} +// 发布采购订单主 +export const publishPurchaseMain = async (id: number) => { + return await request.post({ url: `/wms/purchase-main/publish?id=` + id }) +} +// 下架采购订单主 +export const witPurchaseMain = async (id: number) => { + return await request.post({ url: `/wms/purchase-main/wit?id=` + id }) +} +// 导出采购订单主 Excel +export const exportPurchaseMain = async (params) => { + if (params.isSearch) { + const data = { ...params } + return await request.downloadPost({ url: `/wms/purchase-main/export-excel-seniorWMS`, data }) + } else { + return await request.download({ url: `/wms/purchase-main/export-excelWMS`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/purchase-main/get-import-template' }) +} diff --git a/src/api/wms/purchasePlanDetail/index.ts b/src/api/wms/purchasePlanDetail/index.ts new file mode 100644 index 0000000..65cae26 --- /dev/null +++ b/src/api/wms/purchasePlanDetail/index.ts @@ -0,0 +1,94 @@ +import request from '@/config/axios' + +export interface PurchasePlanDetailVO { + poNumber: string + poLine: string + number: string + itemCode: string + remark: string + createTime: Date + creator: string + shippedQty: number + planQty: number + uom: string + updateTime: Date + updater: string + available: string +} +// 要货预测-列表和头部请求参数 +const getPageParams = (params)=>{ + + console.log('params.status',params.status) + // 状态 + if(Array.isArray(params.status)){ + if(params.status&¶ms.status.length>0){ + params.statuss = params.status.join(',') + } + params.status = '' + } + return params +} +// 查询要货计划子列表 +export const getPurchasePlanDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/purchase-plan-detail/senior', data }) + } else { + params = getPageParams(params) + return await request.get({ url: `/wms/purchase-plan-detail/page`, params }) + } +} + +// 查询要货计划子列表 -- 供应商发货申请添加明细 +export const getPurchasePlanDetailPageClcik = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/purchase-plan-detail/clickDetailsSenior', data }) + } else { + params = getPageParams(params) + return await request.get({ url: `/wms/purchase-plan-detail/clickDetailsPage`, params }) + } +} + +// 查询采购收货记录子列表 +export const getPurchasePlanDetailList = async (params) => { + return await request.get({ url: `/wms/purchase-plan-detail/allList`, params }) +} + +// 查询要货计划子详情 +export const getPurchasePlanDetail = async (id: number) => { + return await request.get({ url: `/wms/purchase-plan-detail/get?id=` + id }) +} + +// 新增要货计划子 +export const createPurchasePlanDetail = async (data: PurchasePlanDetailVO) => { + return await request.post({ url: `/wms/purchase-plan-detail/create`, data }) +} + +// 修改要货计划子 +export const updatePurchasePlanDetail = async (data: PurchasePlanDetailVO) => { + return await request.put({ url: `/wms/purchase-plan-detail/update`, data }) +} + +// 删除要货计划子 +export const deletePurchasePlanDetail = async (id: number) => { + return await request.delete({ url: `/wms/purchase-plan-detail/delete?id=` + id }) +} + +// 导出要货计划子 Excel +export const exportPurchasePlanDetail = async (params) => { + return await request.download({ url: `/wms/purchase-plan-detail/export-excel`, params }) +} + +// WMS查询要货计划子列表 +export const getPurchasePlanDetailPagewms = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/purchase-plan-detail/seniorWMS', data }) + } else { + return await request.get({ url: `/wms/purchase-plan-detail/pageWMS`, params }) + } +} diff --git a/src/api/wms/purchasePlanMain/index.ts b/src/api/wms/purchasePlanMain/index.ts new file mode 100644 index 0000000..9d5e422 --- /dev/null +++ b/src/api/wms/purchasePlanMain/index.ts @@ -0,0 +1,114 @@ +import request from '@/config/axios' + +export interface PurchasePlanMainVO { + supplierCode: string + timeWindow: string + warehouseCode: string + dockCode: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + beginTime: Date + endTime: Date + status: string + updateTime: Date + updater: string + available: string +} + +// 查询要货计划主列表 +export const getPurchasePlanMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/purchase-plan-main/senior', data }) + } else { + return await request.get({ url: `/wms/purchase-plan-main/page`, params }) + } +} + +// 查询要货计划主详情 +export const getPurchasePlanMain = async (id: number) => { + return await request.get({ url: `/wms/purchase-plan-main/get?id=` + id }) +} + +// 新增要货计划主 +export const createPurchasePlanMain = async (data: PurchasePlanMainVO) => { + return await request.post({ url: `/wms/purchase-plan-main/create`, data }) +} + +// 修改要货计划主 +export const updatePurchasePlanMain = async (data: PurchasePlanMainVO) => { + return await request.put({ url: `/wms/purchase-plan-main/update`, data }) +} + +// 删除要货计划主 +export const deletePurchasePlanMain = async (id: number) => { + return await request.delete({ url: `/wms/purchase-plan-main/delete?id=` + id }) +} + +// 关闭要货计划主 +export const closePurchasePlanMain = async (id: number) => { + return await request.post({ url: `/wms/purchase-plan-main/close?id=` + id }) +} +// 打开要货计划主 +export const openPurchasePlanMain = async (id: number) => { + return await request.post({ url: `/wms/purchase-plan-main/open?id=` + id }) +} +// 发布要货计划主 +export const publishPurchasePlanMain = async (id: number) => { + return await request.post({ url: `/wms/purchase-plan-main/publish?id=` + id }) +} +// 下架要货计划主 +export const witPurchasePlanMain = async (id: number) => { + return await request.post({ url: `/wms/purchase-plan-main/wit?id=` + id }) +} + +// 接受要货计划主 +export const accPurchasePlanMain = async (id: number) => { + return await request.post({ url: `/wms/purchase-plan-main/acc?id=` + id }) +} + +// 驳回要货计划主 +export const rejPurchasePlanMain = async (id: number) => { + return await request.post({ url: `/wms/purchase-plan-main/rej?id=` + id }) +} + +// 导出要货计划主 Excel +export const exportPurchasePlanMain = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/purchase-plan-main/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/purchase-plan-main/export-excel`, params }) + } +} +// 导出明细要货计划主 Excel +export const exportDetailsPurchasePlanMain = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/purchase-plan-main/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/purchase-plan-main/export-excel-detail`, params }) + } +} +// 导出要货计划二维表 Excel +export const exportTablePurchasePlanMain = async (params) => { + // if (params.isSearch) { + // const data = {...params} + // return await request.downloadPost({ url: `/wms/purchase-plan-main/export-excel-senior`, data }) + // } else { + return await request.download({ url: `/wms/purchase-plan-main/export-excel`, params }) + //} +} +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/purchase-plan-main/get-import-template' }) +} + +// 查询要货计划策略根据供应商 +export const queryPurchasePlan = async (supplierCode: string) => { + return await request.get({ url: `/wms/purchase-plan-main/queryPurchasePlan?supplierCode=` + supplierCode }) +} \ No newline at end of file diff --git a/src/api/wms/purchaseclaimRecordDetail/index.ts b/src/api/wms/purchaseclaimRecordDetail/index.ts new file mode 100644 index 0000000..89f1f53 --- /dev/null +++ b/src/api/wms/purchaseclaimRecordDetail/index.ts @@ -0,0 +1,66 @@ +import request from '@/config/axios' + +export interface PurchaseclaimRecordDetailVO { + batch: string + altBatch: string + poNumber: string + poLine: string + reason: string + singlePrice: number + amount: number + number: string + itemCode: string + remark: string + createTime: Date + creator: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + code: string + interfaceType: string + jobDetailId: string +} + +// 查询采购索赔记录子列表 +export const getPurchaseclaimRecordDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/purchaseclaim-record-detail/senior', data }) + } else { + return await request.get({ url: `/wms/purchaseclaim-record-detail/page`, params }) + } +} + +// 查询采购索赔记录子详情 +export const getPurchaseclaimRecordDetail = async (id: number) => { + return await request.get({ url: `/wms/purchaseclaim-record-detail/get?id=` + id }) +} + +// 新增采购索赔记录子 +export const createPurchaseclaimRecordDetail = async (data: PurchaseclaimRecordDetailVO) => { + return await request.post({ url: `/wms/purchaseclaim-record-detail/create`, data }) +} + +// 修改采购索赔记录子 +export const updatePurchaseclaimRecordDetail = async (data: PurchaseclaimRecordDetailVO) => { + return await request.put({ url: `/wms/purchaseclaim-record-detail/update`, data }) +} + +// 删除采购索赔记录子 +export const deletePurchaseclaimRecordDetail = async (id: number) => { + return await request.delete({ url: `/wms/purchaseclaim-record-detail/delete?id=` + id }) +} + +// 导出采购索赔记录子 Excel +export const exportPurchaseclaimRecordDetail = async (params) => { + return await request.download({ url: `/wms/purchaseclaim-record-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/purchaseclaim-record-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/purchaseclaimRecordMain/index.ts b/src/api/wms/purchaseclaimRecordMain/index.ts new file mode 100644 index 0000000..a4baa7d --- /dev/null +++ b/src/api/wms/purchaseclaimRecordMain/index.ts @@ -0,0 +1,64 @@ +import request from '@/config/axios' + +export interface PurchaseclaimRecordMainVO { + requestNumber: string + asnNumber: string + ppNumber: string + supplierCode: string + outTransactionType: string + inTransactionType: string + executeTime: Date + activeDate: Date + requestTime: Date + dueTime: Date + departmentCode: string + interfaceType: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + code: string + available: string +} + +// 查询采购索赔记录主列表 +export const getPurchaseclaimRecordMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/purchaseclaim-record-main/senior', data }) + } else { + return await request.get({ url: `/wms/purchaseclaim-record-main/page`, params }) + } +} + +// 查询采购索赔记录主详情 +export const getPurchaseclaimRecordMain = async (id: number) => { + return await request.get({ url: `/wms/purchaseclaim-record-main/get?id=` + id }) +} + +// 新增采购索赔记录主 +export const createPurchaseclaimRecordMain = async (data: PurchaseclaimRecordMainVO) => { + return await request.post({ url: `/wms/purchaseclaim-record-main/create`, data }) +} + +// 修改采购索赔记录主 +export const updatePurchaseclaimRecordMain = async (data: PurchaseclaimRecordMainVO) => { + return await request.put({ url: `/wms/purchaseclaim-record-main/update`, data }) +} + +// 删除采购索赔记录主 +export const deletePurchaseclaimRecordMain = async (id: number) => { + return await request.delete({ url: `/wms/purchaseclaim-record-main/delete?id=` + id }) +} + +// 导出采购索赔记录主 Excel +export const exportPurchaseclaimRecordMain = async (params) => { + return await request.download({ url: `/wms/purchaseclaim-record-main/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/purchaseclaim-record-main/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/purchaseclaimRequestDetail/index.ts b/src/api/wms/purchaseclaimRequestDetail/index.ts new file mode 100644 index 0000000..fed254b --- /dev/null +++ b/src/api/wms/purchaseclaimRequestDetail/index.ts @@ -0,0 +1,53 @@ +import request from '@/config/axios' + +export interface PurchaseclaimRequestDetailVO { + altBatch: string + amount: Number + batch: Number + id: string + itemCode: string + itemDesc1: string + itemDesc2: string + itemName: string + number: string + poLine: string + poNumber: string + projectCode: string + qty: Number + reason: string + remark: string + singlePrice: Number + uom: string +} + +// 查询采购索赔申请子列表 +export const getPurchaseclaimRequestDetailPage = async (params) => { + // return await request.get({ url: `/wms/purchaseclaim-request-detail/page`, params }) + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/wms/purchaseclaim-request-detail/senior', data }) + } else { + return await request.get({ url: `/wms/purchaseclaim-request-detail/page`, params }) + } +} + +// 查询采购索赔申请子详情 +export const getPurchaseclaimRequesDetail = async (id: number) => { + return await request.get({ url: `/wms/purchaseclaim-request-detail/get?id=` + id }) +} + +// 新增采购索赔申请子 +export const createPurchaseclaimRequestDetail = async (data: PurchaseclaimRequestDetailVO) => { + return await request.post({ url: `/wms/purchaseclaim-request-detail/create`, data }) +} + +// 修改采购索赔申请子 +export const updatePurchaseclaimRequestDetail = async (data: PurchaseclaimRequestDetailVO) => { + return await request.put({ url: `/wms/purchaseclaim-request-detail/update`, data }) +} + +// 删除采购索赔申请子 +export const deletePurchaseclaimRequestDetail = async (id: number) => { + return await request.delete({ url: `/wms/purchaseclaim-request-detail/delete?id=` + id }) +} diff --git a/src/api/wms/purchaseclaimRequestMain/index.ts b/src/api/wms/purchaseclaimRequestMain/index.ts new file mode 100644 index 0000000..b17dfb9 --- /dev/null +++ b/src/api/wms/purchaseclaimRequestMain/index.ts @@ -0,0 +1,92 @@ +import request from '@/config/axios' + +export interface PurchaseclaimRequestMainVO { + asnNumber: string + ppNumber: string + supplierCode: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + requestTime: Date + dueTime: Date + departmentCode: string + status: string + updateTime: Date + updater: string + autoCommit: string + autoAgree: string + autoExecute: string + directCreateRecord: string +} + +// 查询采购索赔申请主列表 +export const getPurchaseclaimRequestMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/wms/purchaseclaim-request-main/senior', data }) + } else { + return await request.get({ url: `/wms/purchaseclaim-request-main/page`, params }) + } +} +// 查询采购索赔申请主详情 +export const getPurchaseclaimRequestMain = async (id: number) => { + return await request.get({ url: `/wms/purchaseclaim-request-main/get?id=` + id }) +} + +// 新增采购索赔申请主 +export const createPurchaseclaimRequestMain = async (data: PurchaseclaimRequestMainVO) => { + return await request.post({ url: `/wms/purchaseclaim-request-main/create`, data }) +} + +// 修改采购索赔申请主 +export const updatePurchaseclaimRequestMain = async (data: PurchaseclaimRequestMainVO) => { + return await request.put({ url: `/wms/purchaseclaim-request-main/update`, data }) +} + +// 删除采购索赔申请主 +export const deletePurchaseclaimRequestMain = async (id: number) => { + return await request.delete({ url: `/wms/purchaseclaim-request-main/delete?id=` + id }) +} + +// 打开供应商发货申请主 +export const opePurchaseclaimRequestMain = async (id: number) => { + return await request.post({ url: `/wms/purchaseclaim-request-main/open?id=` + id }) +} +// 关闭供应商发货申请主 +export const cloPurchaseclaimRequestMain = async (id: number) => { + return await request.post({ url: `/wms/purchaseclaim-request-main/close?id=` + id }) +} +// 提交审批供应商发货申请主 +export const subPurchaseclaimRequestMain = async (id: number) => { + return await request.post({ url: `/wms/purchaseclaim-request-main/sub?id=` + id }) +} +// 审批通过供应商发货申请主 +export const appPurchaseclaimRequestMain = async (id: number) => { + return await request.post({ url: `/wms/purchaseclaim-request-main/app?id=` + id }) +} +// 驳回供应商发货申请主 +export const rejPurchaseclaimRequestMain = async (id: number) => { + return await request.post({ url: `/wms/purchaseclaim-request-main/rej?id=` + id }) +} +// 处理 +export const genRecordsPurchaseclaimRequestMain = async (id) => { + return await request.post({ url: `/wms/purchaseclaim-request-main/genRecords?id=` + id }) +} +// 导出采购索赔申请主 Excel +export const exportPurchaseclaimRequestMain = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = { ...params } + return await request.downloadPost({ url: `/wms/purchaseclaim-request-main/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/purchaseclaim-request-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/purchaseclaim-request-main/get-import-template' }) +} diff --git a/src/api/wms/purchaseprice/index.ts b/src/api/wms/purchaseprice/index.ts new file mode 100644 index 0000000..03c6af8 --- /dev/null +++ b/src/api/wms/purchaseprice/index.ts @@ -0,0 +1,79 @@ +import request from '@/config/axios' + +export interface PurchasepriceVO { + supplierCode: string + itemCode: string + currency: string + price: number + available: number + activeTime: Date + expireTime: Date + remark: string +} + +// 查询采购价格单列表 +export const getPurchasepricePage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/wms/purchaseprice/senior', data }) + } else { + return await request.get({ url: `/wms/purchaseprice/page`, params }) + } +} + +// 查询采购价格单列表 +export const getPurchasepricePageSCP = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/wms/purchaseprice/seniorSCP', data }) + } else { + return await request.get({ url: `/wms/purchaseprice/pageSCP`, params }) + } +} + +// 查询采购价格单详情 +export const getPurchaseprice = async (id: number) => { + return await request.get({ url: `/wms/purchaseprice/get?id=` + id }) +} + +// 新增采购价格单 +export const createPurchaseprice = async (data: PurchasepriceVO) => { + return await request.post({ url: `/wms/purchaseprice/create`, data }) +} + +// 修改采购价格单 +export const updatePurchaseprice = async (data: PurchasepriceVO) => { + return await request.put({ url: `/wms/purchaseprice/update`, data }) +} + +// 删除采购价格单 +export const deletePurchaseprice = async (id: number) => { + return await request.delete({ url: `/wms/purchaseprice/delete?id=` + id }) +} + +// 导出采购价格单 Excel +export const exportPurchaseprice = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/purchaseprice/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/purchaseprice/export-excel`, params }) + } +} + +// 导出采购价格单 Excel +export const exportPurchasepriceSCP = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/purchaseprice/export-excel-senior-SCP`, data }) + } else { + return await request.download({ url: `/wms/purchaseprice/export-excel-SCP`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/purchaseprice/get-import-template' }) +} diff --git a/src/api/wms/purchasereceiptJobDetail/index.ts b/src/api/wms/purchasereceiptJobDetail/index.ts new file mode 100644 index 0000000..c012a62 --- /dev/null +++ b/src/api/wms/purchasereceiptJobDetail/index.ts @@ -0,0 +1,109 @@ +import request from '@/config/axios' + +export interface PurchasereceiptJobDetailVO { + packingNumber: string + containerNumber: string + batch: string + altBatch: string + arriveDate: Date + produceDate: Date + expireDate: Date + inventoryStatus: string + fromLocationCode: string + toLocationCode: string + poNumber: string + poLine: string + packQty: number + packUnit: string + supplierQty: number + supplierUom: string + convertRate: number + itemCode: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + number: string + eemark: string + createTime: Date + creator: string + fromOwnerCode: string + toOwnerCode: string +} + +// 查询采购收货任务子列表 +export const getPurchasereceiptJobDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/purchasereceipt-job-detail/senior', data }) + } else { + return await request.get({ url: `/wms/purchasereceipt-job-detail/page`, params }) + } +} + +// 查询备件收货任务子列表 +export const getPurchasereceiptJobDetailPageSapre = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/purchasereceipt-job-detail/seniorSpare', data }) + } else { + return await request.get({ url: `/wms/purchasereceipt-job-detail/pageSpare`, params }) + } +} + +// 查询采购收货任务子列表 +export const getPurchasereceiptJobDetailPageSCP = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/purchasereceipt-job-detail/seniorSCP', data }) + } else { + return await request.get({ url: `/wms/purchasereceipt-job-detail/pageSCP`, params }) + } +} + + +// 查询采购收货任务子详情 +export const getPurchasereceiptJobDetail = async (id: number) => { + return await request.get({ url: `/wms/purchasereceipt-job-detail/get?id=` + id }) +} + +// 新增采购收货任务子 +export const createPurchasereceiptJobDetail = async (data: PurchasereceiptJobDetailVO) => { + return await request.post({ url: `/wms/purchasereceipt-job-detail/create`, data }) +} + +// 修改采购收货任务子 +export const updatePurchasereceiptJobDetail = async (data: PurchasereceiptJobDetailVO) => { + return await request.put({ url: `/wms/purchasereceipt-job-detail/update`, data }) +} + +// 删除采购收货任务子 +export const deletePurchasereceiptJobDetail = async (id: number) => { + return await request.delete({ url: `/wms/purchasereceipt-job-detail/delete?id=` + id }) +} + +// 导出采购收货任务子 Excel +export const exportPurchasereceiptJobDetail = async (params) => { + return await request.download({ url: `/wms/purchasereceipt-job-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/purchasereceipt-job-detail/get-import-template' }) +} + +// 查询采购收货任务子列表 +export const queryPurchaseceiptChildPackingNumber = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/purchasereceipt-job-detail/seniorPackingNumber', data }) + } else { + return await request.get({ url: `/wms/purchasereceipt-job-detail/pagePackingNumber`, params }) + } +} \ No newline at end of file diff --git a/src/api/wms/purchasereceiptJobMain/index.ts b/src/api/wms/purchasereceiptJobMain/index.ts new file mode 100644 index 0000000..79e5460 --- /dev/null +++ b/src/api/wms/purchasereceiptJobMain/index.ts @@ -0,0 +1,141 @@ +import request from '@/config/axios' + +export interface PurchasereceiptJobMainVO { + requestNumber: string + asnNumber: string + ppNumber: string + supplierCode: string + toDockCode: string + carrierCode: string + transferMode: string + vehiclePlateNumber: string + fromWarehouseCode: string + toWarehouseCode: string + requestTime: Date + requestDueTime: Date + status: string + expiredTime: Date + updateTime: Date + updater: string + jobStageStatus: string + priority: number + priorityIncrement: number + departmentCode: string + userPositionCode: string + acceptUserId: string + acceptTime: Date + completeUserId: string + completeTime: Date + fromAreaTypes: string + toAreaTypes: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + allowModifyBatch: string + fromAreaCodes: string + toAreaCodes: string + autoComplete: string + allowModifyLocation: string + allowModifyQty: string + allowBiggerQty: string + allowSmallerQty: string + allowModifyInventoryStatus: string + allowContinuousScanning: string + allowPartialComplete: string + allowModifyPackingNumber: string +} + +// 查询采购收货任务主列表 +export const getPurchasereceiptJobMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/purchasereceipt-job-main/senior', data }) + } else { + return await request.get({ url: `/wms/purchasereceipt-job-main/page`, params }) + } +} + +// 查询备件收货任务主列表 +export const getPurchasereceiptJobMainPageSpare = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/purchasereceipt-job-main/seniorSpare', data }) + } else { + return await request.get({ url: `/wms/purchasereceipt-job-main/pageSpare`, params }) + } +} + + +// 查询采购收货任务主详情 +export const getPurchasereceiptJobMain = async (id: number) => { + return await request.get({ url: `/wms/purchasereceipt-job-main/get?id=` + id }) +} + +// 新增采购收货任务主 +export const createPurchasereceiptJobMain = async (data: PurchasereceiptJobMainVO) => { + return await request.post({ url: `/wms/purchasereceipt-job-main/create`, data }) +} + +// 修改采购收货任务主 +export const updatePurchasereceiptJobMain = async (data: PurchasereceiptJobMainVO) => { + return await request.put({ url: `/wms/purchasereceipt-job-main/update`, data }) +} + +// 删除采购收货任务主 +export const deletePurchasereceiptJobMain = async (id: number) => { + return await request.delete({ url: `/wms/purchasereceipt-job-main/delete?id=` + id }) +} + +// 导出采购收货任务主 Excel +export const exportPurchasereceiptJobMain = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/purchasereceipt-job-main/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/purchasereceipt-job-main/export-excel`, params }) + } +} + + +// 导出备件收货任务 +export const exportSparereceiptJobMain = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/purchasereceipt-job-main/export-excel-spare-senior`, data }) + } else { + return await request.download({ url: `/wms/purchasereceipt-job-main/export-excel-spare`, params }) + } +} +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/purchasereceipt-job-main/get-import-template' }) +} + +// 关闭采购收货任务主 +export const closePurchasereceiptJobMain = (id: number) => { + return request.put({ url: '/wms/purchasereceipt-job-main/close?id=' + id }) +} + +// 执行备件收货任务主 +export const executePurchasereceiptJobMainSpare = (id: number) => { + return request.put({ url: '/wms/purchasereceipt-job-main/executeSpare?id=' + id }) +} + +// 放弃备件收货任务主 +export const abandonPurchasereceiptJobMainSpare = (id: number) => { + return request.put({ url: '/wms/purchasereceipt-job-main/abandon?id=' + id }) +} + +// 承接采购收货任务主 +export const acceptPurchasereceiptJobMain = (id: number) => { + return request.put({ url: '/wms/purchasereceipt-job-main/accept?id=' + id }) +} + +// 拒收采购收货任务主 +export const refusalPurchasereceiptJobMain = (data) => { + return request.post({ url: '/wms/purchasereceipt-job-main/refusal',data}) +} diff --git a/src/api/wms/purchasereceiptRecordDetail/index.ts b/src/api/wms/purchasereceiptRecordDetail/index.ts new file mode 100644 index 0000000..53d6cec --- /dev/null +++ b/src/api/wms/purchasereceiptRecordDetail/index.ts @@ -0,0 +1,194 @@ +import request from '@/config/axios' + +export interface PurchasereceiptRecordDetailVO { + fromPackingNumber: string + toPackingNumber: string + fromContainerNumber: string + toContainerNumber: string + fromBatch: string + altBatch: string + arriveDate: Date + produceDate: Date + expireDate: Date + inventoryStatus: string + fromLocationCode: string + toLocationCode: string + fromLocationGroupCode: string + toLocationGroupCode: string + fromAreaCodes: string + toAreaCodes: string + poNumber: string + poLine: string + packQty: number + packUnit: string + qty: number + uom: string + supplierQty: number + supplierUom: string + convertRate: number + visualInspectResult: string + visualInspectPhotos: string + failedReason: string + singlePrice: number + amount: number + jobDetailId: string + itemCode: string + itemName: string + itemDesc1: string + itemDesc2: string + number: string + remark: string + createTime: Date + creator: string + projectCode: string + code: string + interfaceType: string + fromOwnerCode: string + toOwnerCode: string + toBatch: string + parentPackingNumber: string + packingNumber: string +} + +// 查询采购收货记录子列表 +export const getPurchasereceiptRecordDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = { ...params } + return await request.post({ url: '/wms/purchasereceipt-record-detail/senior', data }) + } else { + return await request.get({ url: `/wms/purchasereceipt-record-detail/page`, params }) + } +} + +// 查询采购拒收记录 +export const getPurchasereceiptRecordDetailRefusePage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = { ...params } + return await request.post({ url: '/wms/purchasereceipt-record-detail/seniorRefuse', data }) + } else { + return await request.get({ url: `/wms/purchasereceipt-record-detail/pageRefuse`, params }) + } +} + +// 查询备件收货记录子列表 +export const getPurchasereceiptRecordDetailPageSpare = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = { ...params } + return await request.post({ url: '/wms/purchasereceipt-record-detail/seniorSpare', data }) + } else { + return await request.get({ url: `/wms/purchasereceipt-record-detail/pageSpare`, params }) + } +} + +// 查询采购收货记录--退货筛选列表 +export const getPurchasereceiptRecordDetailPageReturn = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = { ...params } + return await request.post({ url: '/wms/purchasereceipt-record-detail/seniorReturn', data }) + } else { + return await request.get({ url: `/wms/purchasereceipt-record-detail/pageReturn`, params }) + } +} + +export const getPurchasereceiptRecordDetailPageSCP = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = { ...params } + return await request.post({ url: '/wms/purchasereceipt-record-detail/seniorSCP', data }) + } else { + return await request.get({ url: `/wms/purchasereceipt-record-detail/pageSCP`, params }) + } +} + +// 查询采购收货记录子列表 +export const getPurchasereceiptRecordDetailPageBySupplierCode = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = { ...params } + return await request.post({ + url: '/wms/purchasereceipt-record-detail/seniorBySupplierCode', + data + }) + } else { + return await request.get({ + url: `/wms/purchasereceipt-record-detail/pageBySupplierCode`, + params + }) + } +} + +// 查询采购收货记录子列表 +export const getPurchasereceiptRecordDetailList = async (params) => { + return await request.get({ url: `/wms/purchasereceipt-record-detail/list`, params }) +} + +// 查询采购收货记录子列表 +export const getPurchasereceiptRecordDetailListToRepeat = async (params) => { + return await request.get({ + url: `/wms/purchasereceipt-record-detail/listToRepeatPurchaseReceipt`, + params + }) +} + +// 查询采购收货记录子详情 +export const getPurchasereceiptRecordDetail = async (id: number) => { + return await request.get({ url: `/wms/purchasereceipt-record-detail/get?id=` + id }) +} + +// 新增采购收货记录子 +export const createPurchasereceiptRecordDetail = async (data: PurchasereceiptRecordDetailVO) => { + return await request.post({ url: `/wms/purchasereceipt-record-detail/create`, data }) +} + +// 修改采购收货记录子 +export const updatePurchasereceiptRecordDetail = async (data: PurchasereceiptRecordDetailVO) => { + return await request.put({ url: `/wms/purchasereceipt-record-detail/update`, data }) +} + +// 删除采购收货记录子 +export const deletePurchasereceiptRecordDetail = async (id: number) => { + return await request.delete({ url: `/wms/purchasereceipt-record-detail/delete?id=` + id }) +} + +// 导出采购收货记录子 Excel +export const exportPurchasereceiptRecordDetail = async (params) => { + return await request.download({ url: `/wms/purchasereceipt-record-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/purchasereceipt-record-detail/get-import-template' }) +} +// 缺货明细 +export const getScarceGoodsDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = { ...params } + return await request.post({ url: '/wms/purchaseshortage-detail/senior', data }) + } else { + return await request.get({ url: `/wms/purchaseshortage-detail/page`, params }) + } +} + +// 查询采购收货记录子包装数据 +export const queryPurchaseceiptChildPackingNumber = async (params) => { + return await request.get({ + url: `/wms/purchasereceipt-record-detail/pageChildPackingNumber`, + params + }) +} + +// 查询采购收货缺货记录子包装数据 +export const queryPurchaseshortageChildPackingNumber = async (params) => { + return await request.get({ url: `/wms/purchaseshortage-detail/pageChildPackingNumber`, params }) +} + +// 查询采购收货缺货记录子包装数据 +export const pageForQ2 = async (params) => { + return await request.get({ url: `/wms/purchasereceipt-record-detail/pageForQ2`, params }) +} + diff --git a/src/api/wms/purchasereceiptRecordMain/index.ts b/src/api/wms/purchasereceiptRecordMain/index.ts new file mode 100644 index 0000000..13ff984 --- /dev/null +++ b/src/api/wms/purchasereceiptRecordMain/index.ts @@ -0,0 +1,141 @@ +import request from '@/config/axios' + +export interface PurchasereceiptRecordMainVO { + requestNumber: string + jobNumber: string + asnNumber: string + ppNumber: string + supplierCode: string + toDockCode: string + carrierCode: string + transferMode: string + vehiclePlateNumber: string + fromWarehouseCode: string + toWarehouseCode: string + outTransaction: string + inTransaction: string + executeTime: Date + activeDate: Date + requestTime: Date + dueTime: Date + departmentCode: string + interfaceType: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + code: string + fromAreaTypes: string + toAreaTypes: string + fromAreaCodes: string + toAreaCodes: string + available: string + putawayRequestFlag: boolean + putawayRequestNumber: string + inspectRequestFlag: boolean + inspectRequestNumber: string +} + +// 查询采购收货记录主列表 +export const getPurchasereceiptRecordMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/purchasereceipt-record-main/senior', data }) + } else { + return await request.get({ url: `/wms/purchasereceipt-record-main/page`, params }) + } +} + +// 查询备件收货记录主列表 +export const getPurchasereceiptRecordMainPageSpare = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/purchasereceipt-record-main/seniorSpare', data }) + } else { + return await request.get({ url: `/wms/purchasereceipt-record-main/pageSpare`, params }) + } +} + +// 查询采购收货记录主详情 +export const getPurchasereceiptRecordMain = async (id: number) => { + return await request.get({ url: `/wms/purchasereceipt-record-main/get?id=` + id }) +} + +// 新增采购收货记录主 +export const createPurchasereceiptRecordMain = async (data: PurchasereceiptRecordMainVO) => { + return await request.post({ url: `/wms/purchasereceipt-record-main/create`, data }) +} + +// 修改采购收货记录主 +export const updatePurchasereceiptRecordMain = async (data: PurchasereceiptRecordMainVO) => { + return await request.put({ url: `/wms/purchasereceipt-record-main/update`, data }) +} + +// 删除采购收货记录主 +export const deletePurchasereceiptRecordMain = async (id: number) => { + return await request.delete({ url: `/wms/purchasereceipt-record-main/delete?id=` + id }) +} + +// 导出采购收货记录主 Excel +export const exportPurchasereceiptRecordMain = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/purchasereceipt-record-main/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/purchasereceipt-record-main/export-excel`, params }) + } +} + +// 导出采购收货记录主 Excel +export const exportPurchasereceiptRecordRefuseMain = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/purchasereceipt-record-main/export-excel-senior-refuse`, data }) + } else { + return await request.download({ url: `/wms/purchasereceipt-record-main/export-excel-refuse`, params }) + } +} + + +// 导出备件收货记录 +export const exportSparereceiptRecordMain = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/purchasereceipt-record-main/export-excel-spare-senior`, data }) + } else { + return await request.download({ url: `/wms/purchasereceipt-record-main/export-excel-spare`, params }) + } +} + +// 导出采购收货记录主 Excel +export const exportPurchasereceiptRecordMainSCP = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/purchasereceipt-record-main/export-excel-senior-SCP`, data }) + } else { + return await request.download({ url: `/wms/purchasereceipt-record-main/export-excel-SCP`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/purchasereceipt-record-main/get-import-template' }) +} + +// 创建上架申请 +export const createPutawayRequest = async (number:string) => { + return await request.post({ url: `/wms/purchasereceipt-record-main/createPutawayRequest?number=`+number }) +} + +// 创建检验申请 +export const createInspectRequest = async (number:string) => { + return await request.post({ url: `/wms/purchasereceipt-record-main/createInspectRequest?number=`+number }) +} + +// 创建采购退货记录申请 +export const createPurchasereturnRecord = async (number:string) => { + return await request.post({ url: `/wms/purchasereceipt-record-main/createPurchasereturnRecord?number=`+number }) +} \ No newline at end of file diff --git a/src/api/wms/purchasereceiptRequestDetail/index.ts b/src/api/wms/purchasereceiptRequestDetail/index.ts new file mode 100644 index 0000000..34e7190 --- /dev/null +++ b/src/api/wms/purchasereceiptRequestDetail/index.ts @@ -0,0 +1,119 @@ +import request from '@/config/axios' + +export interface PurchasereceiptRequestDetailVO { + packingNumber: string + containerNumber: string + batch: string + altBatch: string + arriveDate: Date + produceDate: Date + expireDate: Date + inventoryStatus: string + fromLocationCode: string + poNumber: string + poLine: string + packQty: number + packUnit: string + supplierPackQty: number + supplierPackUnit: string + convertRate: number + number: string + itemCode: string + remark: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + updateTime: Date + updater: string + fromOwnerCode: string + toOwnerCode: string + createTime: Date + creator: string + labelStatus: string +} + +// 查询采购收货申请子列表 +export const getPurchasereceiptRequestDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/purchasereceipt-request-detail/senior', data }) + } else { + return await request.get({ url: `/wms/purchasereceipt-request-detail/page`, params }) + } +} + +// 查询采购收货申请子标签列表 +export const getPurchasereceiptRequestDetailLabelList = async (params) => { + return await request.get({ url: `/wms/purchasereceipt-request-detail/pageLabel`, params }) +} + + +// 查询备件收货申请子列表 +export const getPurchasereceiptRequestDetailPageSpare = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/purchasereceipt-request-detail/seniorSpare', data }) + } else { + return await request.get({ url: `/wms/purchasereceipt-request-detail/pageSpare`, params }) + } +} + + +// 查询M类型收货申请子列表 +export const getPurchasereceiptRequestDetailPageOrderMType = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/purchasereceipt-request-detail/seniorOrderMType', data }) + } else { + return await request.get({ url: `/wms/purchasereceipt-request-detail/pageOrderMType`, params }) + } +} + +// 查询采购收货申请子详情 +export const getPurchasereceiptRequestDetail = async (id: number) => { + return await request.get({ url: `/wms/purchasereceipt-request-detail/get?id=` + id }) +} + +// 新增采购收货申请子 +export const createPurchasereceiptRequestDetail = async (data: PurchasereceiptRequestDetailVO) => { + return await request.post({ url: `/wms/purchasereceipt-request-detail/create`, data }) +} + +// 修改采购收货申请子 +export const updatePurchasereceiptRequestDetail = async (data: PurchasereceiptRequestDetailVO) => { + return await request.put({ url: `/wms/purchasereceipt-request-detail/update`, data }) +} + +// 删除采购收货申请子 +export const deletePurchasereceiptRequestDetail = async (id: number) => { + return await request.delete({ url: `/wms/purchasereceipt-request-detail/delete?id=` + id }) +} + + + +// 导出采购收货申请子 Excel +export const exportPurchasereceiptRequestDetail = async (params) => { + return await request.download({ url: `/wms/purchasereceipt-request-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/purchasereceipt-request-detail/get-import-template' }) +} + +// 查询采购收货申请子列表 +export const queryPurchaseceiptChildPackingNumber = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/purchasereceipt-request-detail/queryPurchaseceiptChildPackingNumberSenior', data }) + } else { + return await request.get({ url: `/wms/purchasereceipt-request-detail/queryPurchaseceiptChildPackingNumberPage`, params }) + } +} \ No newline at end of file diff --git a/src/api/wms/purchasereceiptRequestMain/index.ts b/src/api/wms/purchasereceiptRequestMain/index.ts new file mode 100644 index 0000000..6b7c235 --- /dev/null +++ b/src/api/wms/purchasereceiptRequestMain/index.ts @@ -0,0 +1,160 @@ +import request from '@/config/axios' + +export interface PurchasereceiptRequestMainVO { + asnNumber: string + ppNumber: string + supplierCode: string + carrierCode: string + transferMode: string + fromWarehouseCode: string + toWarehouseCode: string + fromAreaTypes: string + toAreaTypes: string + fromAreaCodes: string + toAreaCodes: string + toDockCode: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + requestTime: Date + dueTime: Date + departmentCode: string + updateTime: Date + updater: string + status: string + autoCommit: string + autoAgree: string + autoExecute: string + directCreateRecord: string + vehiclePlateNumber: string +} + +// 查询采购收货申请主列表 +export const getPurchasereceiptRequestMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/purchasereceipt-request-main/senior', data }) + } else { + return await request.get({ url: `/wms/purchasereceipt-request-main/page`, params }) + } +} + +// 查询备件收货申请主列表 +export const getPurchasereceiptRequestMainPageSpare = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/purchasereceipt-request-main/seniorSpare', data }) + } else { + return await request.get({ url: `/wms/purchasereceipt-request-main/pageSpare`, params }) + } +} + +// 查询采购收货申请主详情 +export const getPurchasereceiptRequestMain = async (id: number) => { + return await request.get({ url: `/wms/purchasereceipt-request-main/get?id=` + id }) +} + +// 新增采购收货申请主 +export const createPurchasereceiptRequestMain = async (data: PurchasereceiptRequestMainVO) => { + return await request.post({ url: `/wms/purchasereceipt-request-main/create`, data }) +} + +// 新增备件收货申请主 +export const createPurchasereceiptRequestMainSpare = async (data: PurchasereceiptRequestMainVO) => { + return await request.post({ url: `/wms/purchasereceipt-request-main/createSpare`, data }) +} + +// 修改采购收货申请主 +export const updatePurchasereceiptRequestMain = async (data: PurchasereceiptRequestMainVO) => { + return await request.put({ url: `/wms/purchasereceipt-request-main/update`, data }) +} + +// 删除采购收货申请主 +export const deletePurchasereceiptRequestMain = async (id: number) => { + return await request.delete({ url: `/wms/purchasereceipt-request-main/delete?id=` + id }) +} + +// 导出采购收货申请主 Excel +export const exportPurchasereceiptRequestMain = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/purchasereceipt-request-main/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/purchasereceipt-request-main/export-excel`, params }) + } +} + + +// 导出采购M型收货申请主 Excel +export const exportPurchasereceiptRequestMainOrderTypeM = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/purchasereceipt-request-main/export-excel-senior-orderTypeM`, data }) + } else { + return await request.download({ url: `/wms/purchasereceipt-request-main/export-excel-orderTypeM`, params }) + } +} + +// 导出备件收货申请 +export const exportSparereceiptRequestMain = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/purchasereceipt-request-main/export-excel-spare-senior`, data }) + } else { + return await request.download({ url: `/wms/purchasereceipt-request-main/export-excel-spare`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/purchasereceipt-request-main/get-import-template' }) +} + +// 关闭采购收货申请主 Excel +export const closePurchasereceiptRequestMain = async (id) => { + return await request.put({ url: `/wms/purchasereceipt-request-main/close?id=` + id }) +} + +// 重新添加采购收货申请主 Excel +export const reAddPurchasereceiptRequestMain = async (id) => { + return await request.put({ url: `/wms/purchasereceipt-request-main/reAdd?id=` + id }) +} + +// 提交采购收货申请主 Excel +export const submitPurchasereceiptRequestMain = async (id) => { + return await request.put({ url: `/wms/purchasereceipt-request-main/submit?id=` + id }) +} + +// 审批通过采购收货申请主 Excel +export const agreePurchasereceiptRequestMain = async (id) => { + return await request.put({ url: `/wms/purchasereceipt-request-main/agree?id=` + id }) +} + +// 审批驳回采购收货申请主 Excel +export const refusedPurchasereceiptRequestMain = async (id) => { + return await request.put({ url: `/wms/purchasereceipt-request-main/refused?id=` + id }) +} + +// 处理采购收货申请主 Excel +export const handlePurchasereceiptRequestMain = async (id) => { + return await request.put({ url: `/wms/purchasereceipt-request-main/handle?id=` + id }) +} + +// 生成标签 +export const genLabel = async (data) => { + return await request.post({ url: `/wms/purchasereceipt-request-main/genLabel`, data }) +} + +// “到库位代码”默认为待检库 +export const queryPurchasePlan = async (data) => { + return await request.post({ url: `/wms/purchasereceipt-request-main/queryPurchasePlan`, data }) +} +// 重新生成标签前先删除标签 +export const deleteOldLabels = async (id) => { + return await request.post({ url: `/wms/purchasereceipt-request-main/deleteOldLabels?id=`+ id }) +} + diff --git a/src/api/wms/purchasereturnJobDetail/index.ts b/src/api/wms/purchasereturnJobDetail/index.ts new file mode 100644 index 0000000..2fadb78 --- /dev/null +++ b/src/api/wms/purchasereturnJobDetail/index.ts @@ -0,0 +1,68 @@ +import request from '@/config/axios' + +export interface PurchasereturnJobDetailVO { + fromOwnerCode: string + packingNumber: string + containerNumber: string + batch: string + altBatch: string + fromLocationCode: string + toLocationCode: string + inventoryStatus: string + poNumber: string + poLine: string + reason: string + itemCode: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + number: string + remark: string + createTime: Date + creator: number + toOwnerCode: string +} + +// 查询采购退货任务子列表 +export const getPurchasereturnJobDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/purchasereturn-job-detail/senior', data }) + } else { + return await request.get({ url: `/wms/purchasereturn-job-detail/page`, params }) + } +} + +// 查询采购退货任务子详情 +export const getPurchasereturnJobDetail = async (id: number) => { + return await request.get({ url: `/wms/purchasereturn-job-detail/get?id=` + id }) +} + +// 新增采购退货任务子 +export const createPurchasereturnJobDetail = async (data: PurchasereturnJobDetailVO) => { + return await request.post({ url: `/wms/purchasereturn-job-detail/create`, data }) +} + +// 修改采购退货任务子 +export const updatePurchasereturnJobDetail = async (data: PurchasereturnJobDetailVO) => { + return await request.put({ url: `/wms/purchasereturn-job-detail/update`, data }) +} + +// 删除采购退货任务子 +export const deletePurchasereturnJobDetail = async (id: number) => { + return await request.delete({ url: `/wms/purchasereturn-job-detail/delete?id=` + id }) +} + +// 导出采购退货任务子 Excel +export const exportPurchasereturnJobDetail = async (params) => { + return await request.download({ url: `/wms/purchasereturn-job-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/purchasereturn-job-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/purchasereturnJobMain/index.ts b/src/api/wms/purchasereturnJobMain/index.ts new file mode 100644 index 0000000..d452888 --- /dev/null +++ b/src/api/wms/purchasereturnJobMain/index.ts @@ -0,0 +1,108 @@ +import request from '@/config/axios' + +export interface PurchasereturnJobMainVO { + requestNumber: string + purchaseReceiptRecordNumber: string + asnNumber: string + ppNumber: string + supplierCode: string + deliverDock: string + carrierCode: string + transferMode: string + vehiclePlateNumber: string + fromWarehouseCode: string + toWarehouseCode: string + requestTime: Date + requestDueTime: Date + status: string + expiredTime: Date + updateTime: Date + updater: string + jobStageStatus: string + priority: number + priorityIncrement: number + departmentCode: string + acceptUserId: string + acceptTime: Date + completeUserId: string + completeTime: Date + fromAreaTypes: string + toAreaTypes: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + fromAreaCodes: string + toAreaCodes: string + fromDockCode: string + autoComplete: string + allowModifyLocation: string + allowModifyQty: string + allowBiggerQty: string + allowSmallerQty: string + allowModifyInventoryStatus: string + allowContinuousScanning: string + allowPartialComplete: string + allowModifyBatch: string + allowModifyPackingNumber: string +} + +// 查询采购退货任务主列表 +export const getPurchasereturnJobMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/purchasereturn-job-main/senior', data }) + } else { + return await request.get({ url: `/wms/purchasereturn-job-main/page`, params }) + } +} + +// 查询采购退货任务主详情 +export const getPurchasereturnJobMain = async (id: number) => { + return await request.get({ url: `/wms/purchasereturn-job-main/get?id=` + id }) +} + +// 新增采购退货任务主 +export const createPurchasereturnJobMain = async (data: PurchasereturnJobMainVO) => { + return await request.post({ url: `/wms/purchasereturn-job-main/create`, data }) +} + +// 修改采购退货任务主 +export const updatePurchasereturnJobMain = async (data: PurchasereturnJobMainVO) => { + return await request.put({ url: `/wms/purchasereturn-job-main/update`, data }) +} + +// 删除采购退货任务主 +export const deletePurchasereturnJobMain = async (id: number) => { + return await request.delete({ url: `/wms/purchasereturn-job-main/delete?id=` + id }) +} + +// 导出采购退货任务主 Excel +export const exportPurchasereturnJobMain = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/purchasereturn-job-main/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/purchasereturn-job-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/purchasereturn-job-main/get-import-template' }) +} + +// 关闭采购退货任务主 +export const closePurchasereturnJobMain = (id: number) => { + return request.put({ url: '/wms/purchasereturn-job-main/close?id=' + id }) +} +// 承接采购退货任务主 +export const acceptPurchasereturnJobMain = (id: number) => { + return request.put({ url: '/wms/purchasereturn-job-main/accept?id=' + id }) +} +// 取消承接采购退货任务主 +export const abandonPurchasereturnJobMain = (id: number) => { + return request.put({ url: '/wms/purchasereturn-job-main/abandon?id=' + id }) +} diff --git a/src/api/wms/purchasereturnRecordDetail/index.ts b/src/api/wms/purchasereturnRecordDetail/index.ts new file mode 100644 index 0000000..c734765 --- /dev/null +++ b/src/api/wms/purchasereturnRecordDetail/index.ts @@ -0,0 +1,112 @@ +import request from '@/config/axios' + +export interface PurchasereturnRecordDetailVO { + fromPackingNumber: string + toPackingNumber: string + fromContainerNumber: string + fromBatch: string + altBatch: string + fromLocationCode: string + fromLocationGroupCode: string + fromAreaCode: string + toLocationCode: string + toLocationGroupCode: string + toAreaCode: string + inventoryStatus: string + poNumber: string + poLine: string + reason: string + singlePrice: number + amount: number + number: string + itemCode: string + remark: string + createTime: Date + creator: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + code: string + interfaceType: string + jobDetailId: string + toContainerNumber: string + fromOwnerCode: string + toOwnerCode: string + toBatch: string +} + +// 查询采购退货记录子列表 +export const getPurchasereturnRecordDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/purchasereturn-record-detail/senior', data }) + } else { + return await request.get({ url: `/wms/purchasereturn-record-detail/page`, params }) + } +} + +// 查询采购退货记录子列表 +export const getPurchasereturnRecordDetailPageSpare = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/purchasereturn-record-detail/seniorSpare', data }) + } else { + return await request.get({ url: `/wms/purchasereturn-record-detail/pageSpare`, params }) + } +} + + +export const getPurchasereturnRecordDetailPageMorderType = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/purchasereturn-record-detail/seniorMorderType', data }) + } else { + return await request.get({ url: `/wms/purchasereturn-record-detail/pageMorderType`, params }) + } +} + +export const getPurchasereturnRecordDetailPageSCP = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/purchasereturn-record-detail/seniorSCP', data }) + } else { + return await request.get({ url: `/wms/purchasereturn-record-detail/pageSCP`, params }) + } +} + +// 查询采购退货记录子详情 +export const getPurchasereturnRecordDetail = async (id: number) => { + return await request.get({ url: `/wms/purchasereturn-record-detail/get?id=` + id }) +} + +// 新增采购退货记录子 +export const createPurchasereturnRecordDetail = async (data: PurchasereturnRecordDetailVO) => { + return await request.post({ url: `/wms/purchasereturn-record-detail/create`, data }) +} + +// 修改采购退货记录子 +export const updatePurchasereturnRecordDetail = async (data: PurchasereturnRecordDetailVO) => { + return await request.put({ url: `/wms/purchasereturn-record-detail/update`, data }) +} + +// 删除采购退货记录子 +export const deletePurchasereturnRecordDetail = async (id: number) => { + return await request.delete({ url: `/wms/purchasereturn-record-detail/delete?id=` + id }) +} + +// 导出采购退货记录子 Excel +export const exportPurchasereturnRecordDetail = async (params) => { + return await request.download({ url: `/wms/purchasereturn-record-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/purchasereturn-record-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/purchasereturnRecordMain/index.ts b/src/api/wms/purchasereturnRecordMain/index.ts new file mode 100644 index 0000000..6c799db --- /dev/null +++ b/src/api/wms/purchasereturnRecordMain/index.ts @@ -0,0 +1,112 @@ +import request from '@/config/axios' + +export interface PurchasereturnRecordMainVO { + requestNumber: string + jobNumber: string + purchaseReceiptRecordNumber: string + asnNumber: string + ppNumber: string + supplierCode: string + fromDockCode: string + carrierCode: string + transferMode: string + vehiclePlateNumber: string + fromWarehouseCode: string + toWarehouseCode: string + outTransactionType: string + inTransactionType: string + executeTime: Date + activeDate: Date + requestTime: Date + dueTime: Date + departmentCode: string + interfaceType: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + code: string + fromAreaTypes: string + toAreaTypes: string + fromAreaCodes: string + toAreaCodes: string + available: string +} + +// 查询采购退货记录主列表 +export const getPurchasereturnRecordMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/purchasereturn-record-main/senior', data }) + } else { + return await request.get({ url: `/wms/purchasereturn-record-main/page`, params }) + } +} + +// 查询采购退货记录主详情 +export const getPurchasereturnRecordMain = async (id: number) => { + return await request.get({ url: `/wms/purchasereturn-record-main/get?id=` + id }) +} + +// 新增采购退货记录主 +export const createPurchasereturnRecordMain = async (data: PurchasereturnRecordMainVO) => { + return await request.post({ url: `/wms/purchasereturn-record-main/create`, data }) +} + +// 修改采购退货记录主 +export const updatePurchasereturnRecordMain = async (data: PurchasereturnRecordMainVO) => { + return await request.put({ url: `/wms/purchasereturn-record-main/update`, data }) +} + +// 删除采购退货记录主 +export const deletePurchasereturnRecordMain = async (id: number) => { + return await request.delete({ url: `/wms/purchasereturn-record-main/delete?id=` + id }) +} + +// 导出采购退货记录主 Excel +export const exportPurchasereturnRecordMain = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/purchasereturn-record-main/export-excel-senior`, data }) + } else { + return await request.download({url: `/wms/purchasereturn-record-main/export-excel`, params}) + } +} + + +// 导出采购退货记录主 Excel +export const exportPurchasereturnRecordMainMorderType = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/purchasereturn-record-main/export-excel-senior-mordertype`, data }) + } else { + return await request.download({url: `/wms/purchasereturn-record-main/export-excel-mordertype`, params}) + } +} + +// 导出维修备件退货记录主 Excel +export const exportPurchasereturnRecordMainSpare = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/purchasereturn-record-main/export-excel-senior-spare`, data }) + } else { + return await request.download({url: `/wms/purchasereturn-record-main/export-excel-spare`, params}) + } +} + +// 导出采购退货记录主 Excel +export const exportPurchasereturnRecordMainSCP = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/purchasereturn-record-main/export-excel-senior-SCP`, data }) + } else { + return await request.download({url: `/wms/purchasereturn-record-main/export-excel-SCP`, params}) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/purchasereturn-record-main/get-import-template' }) +} diff --git a/src/api/wms/purchasereturnRequestDetail/index.ts b/src/api/wms/purchasereturnRequestDetail/index.ts new file mode 100644 index 0000000..6a75158 --- /dev/null +++ b/src/api/wms/purchasereturnRequestDetail/index.ts @@ -0,0 +1,131 @@ +import request from '@/config/axios' + +export interface PurchasereturnRequestDetailVO { + packingNumber: string + containerNumber: string + batch: string + altBatch: string + toLocationCode: string + inventoryStatus: string + poNumber: string + poLine: string + reason: string + number: string + itemCode: string + remark: string + createTime: Date + creator: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + updateTime: Date + updater: string + fromOwnerCode: string + toOwnerCode: string +} + +// 查询采购退货申请子列表 +export const getPurchasereturnRequestDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/purchasereturn-request-detail/senior', data }) + } else { + return await request.get({ url: `/wms/purchasereturn-request-detail/page`, params }) + } +} + +// 查询采购退货申请子列表 +export const getPurchasereturnRequestDetailEditData = async (params) => { + return await request.get({ url: `/wms/purchasereturn-request-main/editReturnNew`, params }) +} + +// 查询M类型采购退货申请子列表 +export const getPurchasereturnRequestDetailEditDataMOrderType = async (params) => { + return await request.get({ url: `/wms/purchasereturn-request-main/editReturnNewMtype`, params }) +} + +// 物料供应商查询 +export const getPurchasereturnSupplierByCode = async (params) => { + return await request.get({ url: `/wms/supplieritem/querySupplierByCode`, params }) +} +// 收货明细查询 +export const getPurchasereturnPurchasereceiptRecordByItemCode = async (params) => { + return await request.get({ url: `/wms/purchasereceipt-record-detail/queryPurchasereceiptRecordByItemCode`, params }) +} +// 选完退货库位 渲染子列表数据 +export const getBalancePurchaseReceiptReturn = async (params) => { + return await request.get({ url: `/wms/balance/queryBalancePurchaseReceiptReturn`, params }) +} + +// 查询采购退货申请子列表 +export const getPurchasereturnRequestDetailPageSpare = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/purchasereturn-request-detail/seniorSpare', data }) + } else { + return await request.get({ url: `/wms/purchasereturn-request-detail/pageSpare`, params }) + } +} + + +// 查询采购退货申请子列表--M类型退货 +export const getPurchasereturnRequestDetailPageMorderType = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/purchasereturn-request-detail/seniorMorderType', data }) + } else { + return await request.get({ url: `/wms/purchasereturn-request-detail/pageMorderType`, params }) + } +} + +// 查询采购退货申请子详情 +export const getPurchasereturnRequestDetail = async (id: number) => { + return await request.get({ url: `/wms/purchasereturn-request-detail/get?id=` + id }) +} + +// 新增采购退货申请子 +export const createPurchasereturnRequestDetail = async (data: PurchasereturnRequestDetailVO) => { + return await request.post({ url: `/wms/purchasereturn-request-detail/create`, data }) +} + +// 修改采购退货申请子 +export const updatePurchasereturnRequestDetail = async (data: PurchasereturnRequestDetailVO) => { + return await request.put({ url: `/wms/purchasereturn-request-detail/update`, data }) +} + +// 删除采购退货申请子 +export const deletePurchasereturnRequestDetail = async (id: number) => { + return await request.delete({ url: `/wms/purchasereturn-request-detail/delete?id=` + id }) +} + +// 导出采购退货申请子 Excel +export const exportPurchasereturnRequestDetail = async (params) => { + return await request.download({ url: `/wms/purchasereturn-request-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/purchasereturn-request-detail/get-import-template' }) +} + +// 选择收货单明细 +// 查询采购退货申请子列表 +export const queryPurchasereceiptSpareRecordBySupplier = async (params) => { + return await request.get({ url: `/wms/purchasereceipt-record-detail/queryPurchasereceiptSpareRecordBySupplier`, params }) +} + +// 维修退货申请子表数据 +export const queryBalancePurchaseReceiptSpareReturn = async (params) => { + return await request.get({ url: `/wms/purchasereturn-request-main/queryBalancePurchaseReceiptSpareReturn`, params }) +} + +// 查询采购退货申请子列表 +export const editReturnSpareNew = async (params) => { + return await request.get({ url: `/wms/purchasereturn-request-main/editReturnSpareNew`, params }) +} \ No newline at end of file diff --git a/src/api/wms/purchasereturnRequestMain/index.ts b/src/api/wms/purchasereturnRequestMain/index.ts new file mode 100644 index 0000000..509d295 --- /dev/null +++ b/src/api/wms/purchasereturnRequestMain/index.ts @@ -0,0 +1,179 @@ +import request from '@/config/axios' + +export interface PurchasereturnRequestMainVO { + purchaseReceiptRecordNumber: string + asnNumber: string + ppNumber: string + supplierCode: string + carrierCode: string + transferMode: string + vehiclePlateNumber: string + fromWarehouseCode: string + toWarehouseCode: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + requestTime: Date + dueTime: Date + departmentCode: string + status: string + updateTime: Date + updater: string + fromAreaTypes: string + fromAreaCodes: string + fromDockCode: string + toAreaTypes: string + toAreaCodes: string + autoCommit: string + autoAgree: string + autoExecute: string + directCreateRecord: string +} + +// 查询采购退货申请主列表 +export const getPurchasereturnRequestMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/purchasereturn-request-main/senior', data }) + } else { + return await request.get({ url: `/wms/purchasereturn-request-main/page`, params }) + } +} + +// 查询采购退货申请主详情 +export const getPurchasereturnRequestMain = async (id: number) => { + return await request.get({ url: `/wms/purchasereturn-request-main/get?id=` + id }) +} + +// 新增采购退货申请主 +export const createPurchasereturnRequestMain = async (data: PurchasereturnRequestMainVO) => { + return await request.post({ url: `/wms/purchasereturn-request-main/create`, data }) +} +// 新增采购退货申请主 --新版 +export const createPurchasereturnRequestMainNew = async (data: PurchasereturnRequestMainVO) => { + return await request.post({ url: `/wms/purchasereturn-request-main/createReturnNew`, data }) +} + +// 新增采购退货申请主 --M类型采购退货 +export const createPurchasereturnRequestMainMType = async (data: PurchasereturnRequestMainVO) => { + return await request.post({ url: `/wms/purchasereturn-request-main/createReturnNewMtype`, data }) +} + +// 修改采购退货申请主 +export const updatePurchasereturnRequestMain = async (data: PurchasereturnRequestMainVO) => { + return await request.put({ url: `/wms/purchasereturn-request-main/update`, data }) +} +// 修改采购退货申请主 --新版 +export const updatePurchasereturnRequestMainNew = async (data: PurchasereturnRequestMainVO) => { + return await request.post({ url: `/wms/purchasereturn-request-main/updateReturnNew`, data }) +} + +// 修改M类型采购收货申请主 +export const updatePurchasereturnRequestMainNewMType = async (data: PurchasereturnRequestMainVO) => { + return await request.post({ url: `/wms/purchasereturn-request-main/updateReturnNewMtype`, data }) +} + +// 删除采购退货申请主 +export const deletePurchasereturnRequestMain = async (id: number) => { + return await request.delete({ url: `/wms/purchasereturn-request-main/delete?id=` + id }) +} + +// 导出采购退货申请主 Excel +export const exportPurchasereturnRequestMain = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/purchasereturn-request-main/export-excel-senior`, data }) + } else { + return await request.download({url: `/wms/purchasereturn-request-main/export-excel`, params}) + } +} + +// 导出采购退货申请主 Excel +export const exportPurchasereturnRequestMainMorderType = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/purchasereturn-request-main/export-excel-senior-mordertype`, data }) + } else { + return await request.download({url: `/wms/purchasereturn-request-main/export-excel-mordertype`, params}) + } +} + +// 导出采购退货申请主 Excel +export const exportPurchasereturnRequestMainSpare = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/purchasereturn-request-main/export-excel-senior-spare`, data }) + } else { + return await request.download({url: `/wms/purchasereturn-request-main/export-excel-spare`, params}) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/purchasereturn-request-main/get-import-template' }) +} + +// 下载用户维修备件导入模板 +export const importTemplateSpare = () => { + return request.download({ url: '/wms/purchasereturn-request-main/get-import-template-spare' }) +} + +// 下载用户导入模板(新) +export const importTemplateNew = () => { + return request.download({ url: '/wms/purchasereturn-request-main/get-import-template-new' }) +} + +// 下载用户导入模板(新) +export const importTemplateMorderType = () => { + return request.download({ url: '/wms/purchasereturn-request-main/get-import-template-mordertype' }) +} + +// 关闭采购退货申请主 Excel +export const closePurchasereturnRequestMain = async (id) => { + return await request.put({ url: `/wms/purchasereturn-request-main/close?id=` + id }) +} + +// 重新添加采购退货申请主 Excel +export const reAddPurchasereturnRequestMain = async (id) => { + return await request.put({ url: `/wms/purchasereturn-request-main/reAdd?id=` + id }) +} + +// 提交采购退货申请主 Excel +export const submitPurchasereturnRequestMain = async (id) => { + return await request.put({ url: `/wms/purchasereturn-request-main/submit?id=` + id }) +} + +// 审批通过采购退货申请主 Excel +export const agreePurchasereturnRequestMain = async (id) => { + return await request.put({ url: `/wms/purchasereturn-request-main/agree?id=` + id }) +} + +// 审批驳回采购退货申请主 Excel +export const refusedPurchasereturnRequestMain = async (id) => { + return await request.put({ url: `/wms/purchasereturn-request-main/refused?id=` + id }) +} + +// 处理采购退货申请主 Excel +export const handlePurchasereturnRequestMain = async (id) => { + return await request.put({ url: `/wms/purchasereturn-request-main/handle?id=` + id }) +} + +// 处理采购退货申请主(新) +export const handlePurchasereturnRequestMainNew = async (id) => { + return await request.put({ url: `/wms/purchasereturn-request-main/handleNew?id=` + id }) +} + +// 生成标签 +export const genLabel = async (data) => { + return await request.post({ url: `/wms/purchasereturn-request-main/genLabel`, data }) +} + + +// 修改采购退货申请主 +export const updateReturnSpareNew = async (data) => { + return await request.post({ url: `/wms/purchasereturn-request-main/updateReturnSpareNew +`, data }) +} \ No newline at end of file diff --git a/src/api/wms/putawayJobDetail/index.ts b/src/api/wms/putawayJobDetail/index.ts new file mode 100644 index 0000000..2916d8d --- /dev/null +++ b/src/api/wms/putawayJobDetail/index.ts @@ -0,0 +1,71 @@ +import request from '@/config/axios' + +export interface PutawayJobDetailVO { + packingNumber: string + containerNumber: string + batch: string + inventoryStatus: string + poNumber: string + poLine: string + fromLocationCode: string + toLocationCode: string + itemCode: string + itemName: string + itemDesc1: string + itemdesc2: string + projectCode: string + qty: number + uom: string + number: string + remark: string + createTime: Date + creator: string + fromOwnerCode: string + toOwnerCode: string +} + +// 查询上架任务子列表 +export const getPutawayJobDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/putaway-job-detail/senior', data }) + } else { + return await request.get({ url: `/wms/putaway-job-detail/page`, params }) + } +} + +// 查询上架任务子详情 +export const getPutawayJobDetail = async (id: number) => { + return await request.get({ url: `/wms/putaway-job-detail/get?id=` + id }) +} + +// 新增上架任务子 +export const createPutawayJobDetail = async (data: PutawayJobDetailVO) => { + return await request.post({ url: `/wms/putaway-job-detail/create`, data }) +} + +// 修改上架任务子 +export const updatePutawayJobDetail = async (data: PutawayJobDetailVO) => { + return await request.put({ url: `/wms/putaway-job-detail/update`, data }) +} + +// 删除上架任务子 +export const deletePutawayJobDetail = async (id: number) => { + return await request.delete({ url: `/wms/putaway-job-detail/delete?id=` + id }) +} + +// 导出上架任务子 Excel +export const exportPutawayJobDetail = async (params) => { + return await request.download({ url: `/wms/putaway-job-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/putaway-job-detail/get-import-template' }) +} + +// 查询上架任务子列表--自包装数量 +export const getPutawayJobDetailPageChildPackingNumber = async (params) => { + return await request.get({ url: `/wms/putaway-job-detail/pageChildPackingNumber`, params }) +} \ No newline at end of file diff --git a/src/api/wms/putawayJobMain/index.ts b/src/api/wms/putawayJobMain/index.ts new file mode 100644 index 0000000..b6fb266 --- /dev/null +++ b/src/api/wms/putawayJobMain/index.ts @@ -0,0 +1,103 @@ +import request from '@/config/axios' + +export interface PutawayJobMainVO { + requestNumber: string + supplierCode: string + fromWarehouseCode: string + requestTime: Date + requestDueTime: Date + status: string + expiredTime: Date + updateTime: Date + updater: string + concurrencyStamp: string + jobStageStatus: string + priority: number + priorityIncrement: number + departmentCode: string + acceptUserId: string + acceptTime: Date + completeUserId: string + completeTime: Date + fromAreaTypes: string + toAreaTypes: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + toWarehouseCode: string + fromAreaCodes: string + toAreaCodes: string + autoComplete: string + allowModifyLocation: string + allowModifyQty: string + allowBiggerQty: string + allowSmallerQty: string + allowModifyInventoryStatus: string + allowContinuousScanning: string + allowPartialComplete: string + allowModifyBatch: string + allowModifyPackingNumber: string +} + +// 查询上架任务主列表 +export const getPutawayJobMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/putaway-job-main/senior', data }) + } else { + return await request.get({ url: `/wms/putaway-job-main/page`, params }) + } +} + +// 查询上架任务主详情 +export const getPutawayJobMain = async (id: number) => { + return await request.get({ url: `/wms/putaway-job-main/get?id=` + id }) +} + +// 新增上架任务主 +export const createPutawayJobMain = async (data: PutawayJobMainVO) => { + return await request.post({ url: `/wms/putaway-job-main/create`, data }) +} + +// 修改上架任务主 +export const updatePutawayJobMain = async (data: PutawayJobMainVO) => { + return await request.put({ url: `/wms/putaway-job-main/update`, data }) +} + +// 删除上架任务主 +export const deletePutawayJobMain = async (id: number) => { + return await request.delete({ url: `/wms/putaway-job-main/delete?id=` + id }) +} + +// 导出上架任务主 Excel +export const exportPutawayJobMain = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/putaway-job-main/export-excel-senior`, data }) + } else { + return await request.download({url: `/wms/putaway-job-main/export-excel`, params}) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/putaway-job-main/get-import-template' }) +} + +// 关闭上架任务主 +export const closePutawayJobMain = (id: number) => { + return request.put({ url: '/wms/putaway-job-main/close?id=' + id }) +} + +// 承接上架任务主 +export const acceptPutawayJobMain = (id: number) => { + return request.put({ url: '/wms/putaway-job-main/accept?id=' + id }) +} + +// 取消承接上架任务主 +export const abandonPutawayJobMain = (id: number) => { + return request.put({ url: '/wms/putaway-job-main/abandon?id=' + id }) +} diff --git a/src/api/wms/putawayRecordDetail/index.ts b/src/api/wms/putawayRecordDetail/index.ts new file mode 100644 index 0000000..2d98839 --- /dev/null +++ b/src/api/wms/putawayRecordDetail/index.ts @@ -0,0 +1,81 @@ +import request from '@/config/axios' + +export interface PutawayRecordDetailVO { + fromPackingNumber: string + toPackingNumber: string + fromBatch: string + inventoryStatus: string + poNumber: string + poLine: string + fromOwnerCode: string + fromLocationCode: string + fromLocationGroupCode: string + fromAreaCode: string + toOwnerCode: string + toLocationCode: string + toLocationGroupCode: string + toAreaCode: string + number: string + itemCode: string + remark: string + createTime: Date + creator: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + code: string + interfaceType: string + jobDetailId: string + fromContainerNumber: string + toContainerNumber: string + toBatch: string +} + +// 查询上架记录子列表 +export const getPutawayRecordDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/putaway-record-detail/senior', data }) + } else { + return await request.get({ url: `/wms/putaway-record-detail/page`, params }) + } +} + +// 查询上架记录子详情 +export const getPutawayRecordDetail = async (id: number) => { + return await request.get({ url: `/wms/putaway-record-detail/get?id=` + id }) +} + +// 新增上架记录子 +export const createPutawayRecordDetail = async (data: PutawayRecordDetailVO) => { + return await request.post({ url: `/wms/putaway-record-detail/create`, data }) +} + +// 修改上架记录子 +export const updatePutawayRecordDetail = async (data: PutawayRecordDetailVO) => { + return await request.put({ url: `/wms/putaway-record-detail/update`, data }) +} + +// 删除上架记录子 +export const deletePutawayRecordDetail = async (id: number) => { + return await request.delete({ url: `/wms/putaway-record-detail/delete?id=` + id }) +} + +// 导出上架记录子 Excel +export const exportPutawayRecordDetail = async (params) => { + return await request.download({ url: `/wms/putaway-record-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/putaway-record-detail/get-import-template' }) +} + +// 查询上架记录子列表--子包装数据 +export const getPutawayJobDetailPageChildPackingNumber = async (params) => { + return await request.get({ url: `/wms/putaway-record-detail/pageChildPackingNumber`, params }) +} \ No newline at end of file diff --git a/src/api/wms/putawayRecordMain/index.ts b/src/api/wms/putawayRecordMain/index.ts new file mode 100644 index 0000000..36507e3 --- /dev/null +++ b/src/api/wms/putawayRecordMain/index.ts @@ -0,0 +1,74 @@ +import request from '@/config/axios' + +export interface PutawayRecordMainVO { + requestNumber: string + jobNumber: string + supplierCode: string + outTransactionType: string + inTransactionType: string + executeTime: Date + activeDate: Date + requestTime: Date + dueTime: Date + departmentCode: string + interfaceType: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + code: string + fromWarehouseCode: string + fromAreaTypes: string + fromAreaCodes: string + toWarehouseCode: string + toAreaTypes: string + toAreaCodes: string + available: string +} + +// 查询上架记录主列表 +export const getPutawayRecordMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/putaway-record-main/senior', data }) + } else { + return await request.get({ url: `/wms/putaway-record-main/page`, params }) + } +} + +// 查询上架记录主详情 +export const getPutawayRecordMain = async (id: number) => { + return await request.get({ url: `/wms/putaway-record-main/get?id=` + id }) +} + +// 新增上架记录主 +export const createPutawayRecordMain = async (data: PutawayRecordMainVO) => { + return await request.post({ url: `/wms/putaway-record-main/create`, data }) +} + +// 修改上架记录主 +export const updatePutawayRecordMain = async (data: PutawayRecordMainVO) => { + return await request.put({ url: `/wms/putaway-record-main/update`, data }) +} + +// 删除上架记录主 +export const deletePutawayRecordMain = async (id: number) => { + return await request.delete({ url: `/wms/putaway-record-main/delete?id=` + id }) +} + +// 导出上架记录主 Excel +export const exportPutawayRecordMain = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/putaway-record-main/export-excel-senior`, data }) + } else { + return await request.download({url: `/wms/putaway-record-main/export-excel`, params}) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/putaway-record-main/get-import-template' }) +} diff --git a/src/api/wms/putawayRequestDetail/index.ts b/src/api/wms/putawayRequestDetail/index.ts new file mode 100644 index 0000000..a96a2d1 --- /dev/null +++ b/src/api/wms/putawayRequestDetail/index.ts @@ -0,0 +1,72 @@ +import request from '@/config/axios' + +export interface PutawayRequestDetailVO { + packingNumber: string + containerNumber: string + batch: string + inventoryStatus: string + poNumber: string + poLine: string + fromLocationCode: string + number: string + itemCode: string + remark: string + createTime: Date + creator: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + updateTime: Date + updater: string + fromOwnerCode: string + toOwnerCode: string +} + +// 查询上架申请子列表 +export const getPutawayRequestDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/putaway-request-detail/senior', data }) + } else { + return await request.get({ url: `/wms/putaway-request-detail/page`, params }) + } +} + +// 查询上架申请子详情 +export const getPutawayRequestDetail = async (id: number) => { + return await request.get({ url: `/wms/putaway-request-detail/get?id=` + id }) +} + +// 新增上架申请子 +export const createPutawayRequestDetail = async (data: PutawayRequestDetailVO) => { + return await request.post({ url: `/wms/putaway-request-detail/create`, data }) +} + +// 修改上架申请子 +export const updatePutawayRequestDetail = async (data: PutawayRequestDetailVO) => { + return await request.put({ url: `/wms/putaway-request-detail/update`, data }) +} + +// 删除上架申请子 +export const deletePutawayRequestDetail = async (id: number) => { + return await request.delete({ url: `/wms/putaway-request-detail/delete?id=` + id }) +} + +// 导出上架申请子 Excel +export const exportPutawayRequestDetail = async (params) => { + return await request.download({ url: `/wms/putaway-request-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/putaway-request-detail/get-import-template' }) +} + +// 查询上架申请子列表--子包装数据 +export const getPutawayRequestDetailPageChildPackingNumber = async (params) => { + return await request.get({ url: `/wms/putaway-request-detail/pageChildPackingNumber`, params }) +} \ No newline at end of file diff --git a/src/api/wms/putawayRequestMain/index.ts b/src/api/wms/putawayRequestMain/index.ts new file mode 100644 index 0000000..7db4cc0 --- /dev/null +++ b/src/api/wms/putawayRequestMain/index.ts @@ -0,0 +1,102 @@ +import request from '@/config/axios' + +export interface PutawayRequestMainVO { + supplierCode: string + fromWarehouseCode: string + fromAreaTypes: string + fromAreaCodes: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + requestTime: Date + dueTime: Date + departmentCode: string + status: string + updateTime: Date + updater: string + toWarehouseCode: string + toAreaTypes: string + toAreaCodes: string + autoCommit: string + autoAgree: string + autoExecute: string + directCreateRecord: string +} + +// 查询上架申请主列表 +export const getPutawayRequestMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/putaway-request-main/senior', data }) + } else { + return await request.get({ url: `/wms/putaway-request-main/page`, params }) + } +} + +// 查询上架申请主详情 +export const getPutawayRequestMain = async (id: number) => { + return await request.get({ url: `/wms/putaway-request-main/get?id=` + id }) +} + +// 新增上架申请主 +export const createPutawayRequestMain = async (data: PutawayRequestMainVO) => { + return await request.post({ url: `/wms/putaway-request-main/create`, data }) +} + +// 修改上架申请主 +export const updatePutawayRequestMain = async (data: PutawayRequestMainVO) => { + return await request.put({ url: `/wms/putaway-request-main/update`, data }) +} + +// 删除上架申请主 +export const deletePutawayRequestMain = async (id: number) => { + return await request.delete({ url: `/wms/putaway-request-main/delete?id=` + id }) +} + +// 导出上架申请主 Excel +export const exportPutawayRequestMain = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/putaway-request-main/export-excel-senior`, data }) + } else { + return await request.download({url: `/wms/putaway-request-main/export-excel`, params}) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/putaway-request-main/get-import-template' }) +} + +// 关闭上架申请主 Excel +export const closePutawayRequestMain = async (id) => { + return await request.put({ url: `/wms/putaway-request-main/close?id=` + id }) +} + +// 重新添加上架申请主 Excel +export const reAddPutawayRequestMain = async (id) => { + return await request.put({ url: `/wms/putaway-request-main/reAdd?id=` + id }) +} + +// 提交上架申请主 Excel +export const submitPutawayRequestMain = async (id) => { + return await request.put({ url: `/wms/putaway-request-main/submit?id=` + id }) +} + +// 审批通过上架申请主 Excel +export const agreePutawayRequestMain = async (id) => { + return await request.put({ url: `/wms/putaway-request-main/agree?id=` + id }) +} + +// 审批驳回上架申请主 Excel +export const refusedPutawayRequestMain = async (id) => { + return await request.put({ url: `/wms/putaway-request-main/refused?id=` + id }) +} + +// 处理上架申请主 Excel +export const handlePutawayRequestMain = async (id) => { + return await request.put({ url: `/wms/putaway-request-main/handle?id=` + id }) +} diff --git a/src/api/wms/qadCostcentre/index.ts b/src/api/wms/qadCostcentre/index.ts new file mode 100644 index 0000000..752e436 --- /dev/null +++ b/src/api/wms/qadCostcentre/index.ts @@ -0,0 +1,65 @@ +import request from '@/config/axios' + +export interface QadCostcentreVO { + id: number + code: string + usageDescription: string + costcentreId: string + costcentreCode: string + costcentreDescription: string + costcentreActive: string + costcentreType: string + available: string + remark: string + deletionTime: Date + deleterId: string + extraProperties: string + concurrencyStamp: number + siteId: string +} + +// 查询QAD成品中心列表 +export const getQadCostcentrePage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/qad-costcentre/senior', data }) + } else { + return await request.get({ url: `/wms/qad-costcentre/page`, params }) + } +} + +// 查询QAD成品中心详情 +export const getQadCostcentre = async (id: number) => { + return await request.get({ url: `/wms/qad-costcentre/get?id=` + id }) +} + +// 新增QAD成品中心 +export const createQadCostcentre = async (data: QadCostcentreVO) => { + return await request.post({ url: `/wms/qad-costcentre/create`, data }) +} + +// 修改QAD成品中心 +export const updateQadCostcentre = async (data: QadCostcentreVO) => { + return await request.put({ url: `/wms/qad-costcentre/update`, data }) +} + +// 删除QAD成品中心 +export const deleteQadCostcentre = async (id: number) => { + return await request.delete({ url: `/wms/qad-costcentre/delete?id=` + id }) +} + +// 导出QAD成品中心 Excel +export const exportQadCostcentre = async (params) => { + return await request.download({ url: `/wms/qad-costcentre/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/qad-costcentre/get-import-template' }) +} + +// 根据code获取数据列表 +export const getCostCenterByCodes = async (params) => { + return await request.get({ url: `/wms/qad-costcentre/listByCostcentreCode`, params }) +} diff --git a/src/api/wms/qadProject/index.ts b/src/api/wms/qadProject/index.ts new file mode 100644 index 0000000..1cf09d8 --- /dev/null +++ b/src/api/wms/qadProject/index.ts @@ -0,0 +1,64 @@ +import request from '@/config/axios' + +export interface QadProjectVO { + id: number + projectId: string + projectCode: string + projectDescription: string + projectStartDate: string + projectEndDate: string + statusCode: string + available: string + remark: string + deletionTime: Date + deleterId: string + extraProperties: string + concurrencyStamp: number + siteId: string +} + +// 查询QAD项目信息列表 +export const getQadProjectPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/qad-project/senior', data }) + } else { + return await request.get({ url: `/wms/qad-project/page`, params }) + } +} + +// 查询QAD项目信息详情 +export const getQadProject = async (id: number) => { + return await request.get({ url: `/wms/qad-project/get?id=` + id }) +} + +// 新增QAD项目信息 +export const createQadProject = async (data: QadProjectVO) => { + return await request.post({ url: `/wms/qad-project/create`, data }) +} + +// 修改QAD项目信息 +export const updateQadProject = async (data: QadProjectVO) => { + return await request.put({ url: `/wms/qad-project/update`, data }) +} + +// 删除QAD项目信息 +export const deleteQadProject = async (id: number) => { + return await request.delete({ url: `/wms/qad-project/delete?id=` + id }) +} + +// 导出QAD项目信息 Excel +export const exportQadProject = async (params) => { + return await request.download({ url: `/wms/qad-project/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/qad-project/get-import-template' }) +} + +export const getProjectType = async () => { + return await request.get({ url: `/wms/qad-costcentre/queryCostcentreType` }) +} + diff --git a/src/api/wms/qadproductionplan/index.ts b/src/api/wms/qadproductionplan/index.ts new file mode 100644 index 0000000..a54e226 --- /dev/null +++ b/src/api/wms/qadproductionplan/index.ts @@ -0,0 +1,74 @@ +import request from '@/config/axios' + +export interface QadProductionPlanMainVO { + displayOrder: number + workshop: string + productionLine: string + shift: string + team: string + planDate: Date + details: string + number: string + planType: string + businessType: string + remark: string + woNumber: string + woLine: string +} + +// 查询QAD生产计划主列表 +export const getQadProductionPlanMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/qad-production-plan-main/senior', data }) + } else { + return await request.get({ url: `/wms/qad-production-plan-main/page`, params }) + } +} +export const getQadProductionPlanDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/qad-production-plan-detail/senior', data }) + } else { + return await request.get({ url: `/wms/qad-production-plan-detail/page`, params }) + } +} + + + +// 查询QAD生产计划主详情 +export const getQadProductionPlanMain = async (id: number) => { + return await request.get({ url: `/wms/qad-production-plan-main/get?id=` + id }) +} + +// 新增QAD生产计划主 +export const createQadProductionPlanMain = async (data: QadProductionPlanMainVO) => { + return await request.post({ url: `/wms/qad-production-plan-main/create`, data }) +} + +// 修改QAD生产计划主 +export const updateQadProductionPlanMain = async (data: QadProductionPlanMainVO) => { + return await request.put({ url: `/wms/qad-production-plan-main/update`, data }) +} + +// 删除QAD生产计划主 +export const deleteQadProductionPlanMain = async (id: number) => { + return await request.delete({ url: `/wms/qad-production-plan-main/delete?id=` + id }) +} + +// 导出QAD生产计划主 Excel +export const exportQadProductionPlanMain = async (params) => { + if (params.isSearch){ + const data = {...params} + return await request.downloadPost({ url: `/wms/qad-production-plan-main/export-excel-senior`, data }) + }else { + return await request.download({ url: `/wms/qad-production-plan-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/qad-production-plan-main/get-import-template' }) +} diff --git a/src/api/wms/rawMaterialConsumptionInfo/index.ts b/src/api/wms/rawMaterialConsumptionInfo/index.ts new file mode 100644 index 0000000..6acc4fe --- /dev/null +++ b/src/api/wms/rawMaterialConsumptionInfo/index.ts @@ -0,0 +1,61 @@ +import request from '@/config/axios' + + +export const AssemblyFinishedMaterialConsumptionRespVO = { + finishPackingNumber: '', + finishBatch: '', + finishItemCode: '', + finishCreateTime: new Date(), + id: 0, + processCode: '', + bomVersion: '', + packingNumber: '', + batch: '', + inventoryStatus: '', + fromLocationCode: '', + fromLocationGroupCode: '', + fromAreaCode: '', + itemName: '', + itemDesc1: '', + itemDesc2: '', + projectCode: '', + qty: '', + uom: '', + number: '', + itemCode: '', + remark: '', + createTime: new Date(), + creator: '', + code: '', + interfaceType: '', + jobDetailId: '' +}; + + +// 查询QAD项目信息列表 +export const getRawMaterialConsumptionInfoPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/backflush-record-detailb/getAssemblyMaterialUsageSenior', data }) + } else { + return await request.get({ url: `/wms/backflush-record-detailb/getAssemblyMaterialUsage`, params }) + } +} + + +export const exportAssemblyMaterialUsage = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/backflush-record-detailb/getAssemblyMaterialUsageSeniorExport`, data }) + }else{ + return await request.download({ url: `/wms/backflush-record-detailb/assemblyMaterialUsageExport`, params }) + } +} + + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/backflush-record-detailb/get-import-template-error' }) +} + diff --git a/src/api/wms/recommendLocationHistory/index.ts b/src/api/wms/recommendLocationHistory/index.ts new file mode 100644 index 0000000..f19147d --- /dev/null +++ b/src/api/wms/recommendLocationHistory/index.ts @@ -0,0 +1,57 @@ +import request from '@/config/axios' + +export interface RecommendLocationHistoryVO { + id: number + businessNumber: string + businessId: number + toLocation: string + ruleName: string + priority: string + locationCollect: string + balanceLocationCollect: string + expectinLocationCollect: string + remark: string + extraProperties: string + concurrencyStamp: number +} + +// 查询推荐库位推荐记录列表 +export const getRecommendLocationHistoryPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/recommend-location-history/senior', data }) + } else { + return await request.get({ url: `/wms/recommend-location-history/page`, params }) + } +} + +// 查询推荐库位推荐记录详情 +export const getRecommendLocationHistory = async (id: number) => { + return await request.get({ url: `/wms/recommend-location-history/get?id=` + id }) +} + +// 新增推荐库位推荐记录 +export const createRecommendLocationHistory = async (data: RecommendLocationHistoryVO) => { + return await request.post({ url: `/wms/recommend-location-history/create`, data }) +} + +// 修改推荐库位推荐记录 +export const updateRecommendLocationHistory = async (data: RecommendLocationHistoryVO) => { + return await request.put({ url: `/wms/recommend-location-history/update`, data }) +} + +// 删除推荐库位推荐记录 +export const deleteRecommendLocationHistory = async (id: number) => { + return await request.delete({ url: `/wms/recommend-location-history/delete?id=` + id }) +} + +// 导出推荐库位推荐记录 Excel +export const exportRecommendLocationHistory = async (params) => { + return await request.download({ url: `/wms/recommend-location-history/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/recommend-location-history/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/recordsetting/index.ts b/src/api/wms/recordsetting/index.ts new file mode 100644 index 0000000..25f8d0d --- /dev/null +++ b/src/api/wms/recordsetting/index.ts @@ -0,0 +1,52 @@ +import request from '@/config/axios' + +export interface RecordsettingVO { + code: string + interfaceType: string + activeTime: Date + expireTime: Date + remark: string + available: string + isSoftDeleted: string +} + +// 查询记录设置列表 +export const getRecordsettingPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/wms/recordsetting/senior', data }) + } else { + return await request.get({ url: `/wms/recordsetting/page`, params }) + } +} + +// 查询记录设置详情 +export const getRecordsetting = async (id: number) => { + return await request.get({ url: `/wms/recordsetting/get?id=` + id }) +} + +// 新增记录设置 +export const createRecordsetting = async (data: RecordsettingVO) => { + return await request.post({ url: `/wms/recordsetting/create`, data }) +} + +// 修改记录设置 +export const updateRecordsetting = async (data: RecordsettingVO) => { + return await request.put({ url: `/wms/recordsetting/update`, data }) +} + +// 删除记录设置 +export const deleteRecordsetting = async (id: number) => { + return await request.delete({ url: `/wms/recordsetting/delete?id=` + id }) +} + +// 导出记录设置 Excel +export const exportRecordsetting = async (params) => { + return await request.download({ url: `/wms/recordsetting/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/recordsetting/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/relegateRecordDetail/index.ts b/src/api/wms/relegateRecordDetail/index.ts new file mode 100644 index 0000000..3127b99 --- /dev/null +++ b/src/api/wms/relegateRecordDetail/index.ts @@ -0,0 +1,74 @@ +import request from '@/config/axios' + +export interface RelegateRecordDetailVO { + id: number + masterId: number + itemCode: string + downItemCode: string + businessType: string + uom: string + qty: number + inventoryStatus: string + fromBatch: string + fromPackingNumber: string + fromLocationCode: string + fromAreaTypes: string + fromAreaCodes: string + toPackingNumber: string + toBatch: string + toLocationCode: string + toWarehouseCode: string + toAreaTypes: string + toAreaCodes: string + number: string + available: string + remark: string + departmentCode: string + siteId: number + extraProperties: string + status: string + concurrencyStamp: number + serialNumber: string + ruleUserId: number +} + +// 查询物料降级记录子列表 +export const getRelegateRecordDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/relegate-record-detail/senior', data }) + } else { + return await request.get({ url: `/wms/relegate-record-detail/page`, params }) + } +} + +// 查询物料降级记录子详情 +export const getRelegateRecordDetail = async (id: number) => { + return await request.get({ url: `/wms/relegate-record-detail/get?id=` + id }) +} + +// 新增物料降级记录子 +export const createRelegateRecordDetail = async (data: RelegateRecordDetailVO) => { + return await request.post({ url: `/wms/relegate-record-detail/create`, data }) +} + +// 修改物料降级记录子 +export const updateRelegateRecordDetail = async (data: RelegateRecordDetailVO) => { + return await request.put({ url: `/wms/relegate-record-detail/update`, data }) +} + +// 删除物料降级记录子 +export const deleteRelegateRecordDetail = async (id: number) => { + return await request.delete({ url: `/wms/relegate-record-detail/delete?id=` + id }) +} + +// 导出物料降级记录子 Excel +export const exportRelegateRecordDetail = async (params) => { + return await request.download({ url: `/wms/relegate-record-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/relegate-record-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/relegateRecordMain/index.ts b/src/api/wms/relegateRecordMain/index.ts new file mode 100644 index 0000000..78d63d8 --- /dev/null +++ b/src/api/wms/relegateRecordMain/index.ts @@ -0,0 +1,61 @@ +import request from '@/config/axios' + +export interface RelegateRecordMainVO { + id: number + requestNumber: string + executeTime: Date + activeDate: Date + available: string + requestTime: Date + dueTime: Date + departmentCode: string + userGroupCode: string + interfaceType: string + code: string + number: string + businessType: string + remark: string + extraProperties: string + siteId: string +} + +// 查询物料降级记录主列表 +export const getRelegateRecordMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/relegate-record-main/senior', data }) + } else { + return await request.get({ url: `/wms/relegate-record-main/page`, params }) + } +} + +// 查询物料降级记录主详情 +export const getRelegateRecordMain = async (id: number) => { + return await request.get({ url: `/wms/relegate-record-main/get?id=` + id }) +} + +// 新增物料降级记录主 +export const createRelegateRecordMain = async (data: RelegateRecordMainVO) => { + return await request.post({ url: `/wms/relegate-record-main/create`, data }) +} + +// 修改物料降级记录主 +export const updateRelegateRecordMain = async (data: RelegateRecordMainVO) => { + return await request.put({ url: `/wms/relegate-record-main/update`, data }) +} + +// 删除物料降级记录主 +export const deleteRelegateRecordMain = async (id: number) => { + return await request.delete({ url: `/wms/relegate-record-main/delete?id=` + id }) +} + +// 导出物料降级记录主 Excel +export const exportRelegateRecordMain = async (params) => { + return await request.download({ url: `/wms/relegate-record-main/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/relegate-record-main/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/relegateRequestDetail/index.ts b/src/api/wms/relegateRequestDetail/index.ts new file mode 100644 index 0000000..98aa10e --- /dev/null +++ b/src/api/wms/relegateRequestDetail/index.ts @@ -0,0 +1,73 @@ +import request from '@/config/axios' + +export interface RelegateRequestDetailVO { + id: number + itemCode: string + downItemCode: string + businessType: string + uom: string + qty: number + fromBatch: string + fromPackingNumber: string + fromLocationCode: string + fromAreaTypes: string + fromAreaCodes: string + fromWarehouseCode: string + toPackingNumber: string + toBatch: string + toLocationCode: string + toWarehouseCode: string + toAreaTypes: string + toAreaCodes: string + number: string + available: string + remark: string + departmentCode: string + siteId: number + extraProperties: string + status: string + concurrencyStamp: number + serialNumber: string + ruleUserId: number +} + +// 查询物料降级信息列表 +export const getRelegateRequestDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/relegate-request-detail/senior', data }) + } else { + return await request.get({ url: `/wms/relegate-request-detail/page`, params }) + } +} + +// 查询物料降级信息详情 +export const getRelegateRequestDetail = async (id: number) => { + return await request.get({ url: `/wms/relegate-request-detail/get?id=` + id }) +} + +// 新增物料降级信息 +export const createRelegateRequestDetail = async (data: RelegateRequestDetailVO) => { + return await request.post({ url: `/wms/relegate-request-detail/create`, data }) +} + +// 修改物料降级信息 +export const updateRelegateRequestDetail = async (data: RelegateRequestDetailVO) => { + return await request.put({ url: `/wms/relegate-request-detail/update`, data }) +} + +// 删除物料降级信息 +export const deleteRelegateRequestDetail = async (id: number) => { + return await request.delete({ url: `/wms/relegate-request-detail/delete?id=` + id }) +} + +// 导出物料降级信息 Excel +export const exportRelegateRequestDetail = async (params) => { + return await request.download({ url: `/wms/relegate-request-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/relegate-request/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/relegateRequestMain/index.ts b/src/api/wms/relegateRequestMain/index.ts new file mode 100644 index 0000000..84a8a9f --- /dev/null +++ b/src/api/wms/relegateRequestMain/index.ts @@ -0,0 +1,103 @@ +import request from '@/config/axios' + +export interface RelegateRequestMainVO { + id: number + fromWarehouseCode: string + number: string + businessType: string + remark: string + extraProperties: string + siteId: string + requestTime: Date + dueTime: Date + departmentCode: string + status: string + autoCommit: string + autoAgree: string + autoExecute: string + directCreateRecord: string + concurrencyStamp: number + ruleUserId: number + fromAreaTypes: string + fromAreaCodes: string + serialNumber: string + inInventoryStatuses: string + outInventoryStatuses: string + reason: string +} + +// 查询物料降级申请主列表 +export const getRelegateRequestMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/relegate-request-main/senior', data }) + } else { + return await request.get({ url: `/wms/relegate-request-main/page`, params }) + } +} + +// 查询物料降级申请主详情 +export const getRelegateRequestMain = async (id: number) => { + return await request.get({ url: `/wms/relegate-request-main/get?id=` + id }) +} + +// 新增物料降级申请主 +export const createRelegateRequestMain = async (data: RelegateRequestMainVO) => { + return await request.post({ url: `/wms/relegate-request-main/create`, data }) +} + +// 修改物料降级申请主 +export const updateRelegateRequestMain = async (data: RelegateRequestMainVO) => { + return await request.put({ url: `/wms/relegate-request-main/update`, data }) +} + +// 删除物料降级申请主 +export const deleteRelegateRequestMain = async (id: number) => { + return await request.delete({ url: `/wms/relegate-request-main/delete?id=` + id }) +} + +// 导出物料降级申请主 Excel +export const exportRelegateRequestMain = async (params) => { + return await request.download({ url: `/wms/relegate-request-main/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/relegate-request-main/get-import-template' }) +} + +// 关闭 +export const close = (id) => { + return request.put({ url: '/wms/relegate-request-main/close?id=' + id }) +} + +// 重新添加 +export const reAdd = (id) => { + return request.put({ url: '/wms/relegate-request-main/reAdd?id=' + id }) +} + +// 提交审批 +export const submit = (id) => { + return request.put({ url: '/wms/relegate-request-main/submit?id=' + id }) +} + +// 驳回 +export const refused = (id) => { + return request.put({ url: '/wms/relegate-request-main/refused?id=' + id }) +} + +// 审批通过 +export const agree = (id) => { + return request.put({ url: '/wms/relegate-request-main/agree?id=' + id }) +} + +// 处理 +export const handle = (id) => { + return request.put({ url: '/wms/relegate-request-main/handle?id=' + id }) +} + +// 创建标签 +export const relegateCreateLabel = async (data: RelegateRequestMainVO) => { + return await request.post({ url: `/wms/relegate-request-main/relegateCreateLabel`, data }) +} \ No newline at end of file diff --git a/src/api/wms/remark/index.ts b/src/api/wms/remark/index.ts new file mode 100644 index 0000000..b650d78 --- /dev/null +++ b/src/api/wms/remark/index.ts @@ -0,0 +1,30 @@ +import request from '@/config/axios' +// 查询备注列表 +export const getRemarkPage = async (params) => { + if (params.tableName){ + params.tableName = toSnakeCase(params.tableName) + } + return await request.get({ url: `/infra/remark/list`, params }) +} + +// 新增备注 +export const createRemark= async (data) => { + return await request.post({ url: `/infra/remark/create`, data }) +} +// 查询变更记录列表 +export const getChangeRecordPage = async (params) => { + params = handleParams(params); + return await request.get({ url: `/infra/trends/list`, params }) +} +const handleParams = (params) => { + if (params.tableName && params.tableName.trim() !== "") { + // 检查是否包含大写字母 + if (/[A-Z]/.test(params.tableName)) { + params.tableName = toSnakeCase(params.tableName); + } + } + return params; +} +const toSnakeCase = (str) => { + return str.replace(/[A-Z]/g, letter => `_${letter.toLowerCase()}`); +} diff --git a/src/api/wms/repleinshJobDetail/index.ts b/src/api/wms/repleinshJobDetail/index.ts new file mode 100644 index 0000000..86483e0 --- /dev/null +++ b/src/api/wms/repleinshJobDetail/index.ts @@ -0,0 +1,64 @@ +import request from '@/config/axios' + +export interface RepleinshJobDetailVO { + packingNumber: string + containerNumber: string + batch: string + inventoryStatus: string + fromLocationCode: string + toLocationCode: string + itemCode: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + number: string + remark: string + createTime: Date + creator: string + fromOwnerCode: string + toOwnerCode: string +} + +// 查询补料任务子列表 +export const getRepleinshJobDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/job/repleinsh-job-detail/senior', data }) + } else { + return await request.get({ url: `/job/repleinsh-job-detail/page`, params }) + } +} + +// 查询补料任务子详情 +export const getRepleinshJobDetail = async (id: number) => { + return await request.get({ url: `/job/repleinsh-job-detail/get?id=` + id }) +} + +// 新增补料任务子 +export const createRepleinshJobDetail = async (data: RepleinshJobDetailVO) => { + return await request.post({ url: `/job/repleinsh-job-detail/create`, data }) +} + +// 修改补料任务子 +export const updateRepleinshJobDetail = async (data: RepleinshJobDetailVO) => { + return await request.put({ url: `/job/repleinsh-job-detail/update`, data }) +} + +// 删除补料任务子 +export const deleteRepleinshJobDetail = async (id: number) => { + return await request.delete({ url: `/job/repleinsh-job-detail/delete?id=` + id }) +} + +// 导出补料任务子 Excel +export const exportRepleinshJobDetail = async (params) => { + return await request.download({ url: `/job/repleinsh-job-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/job/repleinsh-job-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/repleinshJobMain/index.ts b/src/api/wms/repleinshJobMain/index.ts new file mode 100644 index 0000000..2869a77 --- /dev/null +++ b/src/api/wms/repleinshJobMain/index.ts @@ -0,0 +1,106 @@ +import request from '@/config/axios' + +export interface RepleinshJobMainVO { + requestNumber: string + requestTime: Date + requestDueTime: Date + status: string + expiredTime: Date + updateTime: Date + updater: string + jobStageStatus: string + priority: number + priorityIncrement: number + departmentCode: string + acceptUserId: string + acceptTime: Date + completeUserId: string + completeTime: Date + fromAreaTypes: string + toAreaTypes: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + fromWarehouseCode: string + toWarehouseCode: string + fromAreaCodes: string + toAreaCodes: string + autoComplete: string + allowModifyLocation: string + allowModifyQty: string + allowBiggerQty: string + allowSmallerQty: string + allowModifyInventoryStatus: string + allowContinuousScanning: string + allowPartialComplete: string + allowModifyBatch: string + allowModifyPackingNumber: string +} + +// 查询补料任务主列表 +export const getRepleinshJobMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/repleinsh-job-main/senior', data }) + } else { + return await request.get({ url: `/wms/repleinsh-job-main/page`, params }) + } +} + +// 查询补料任务主详情 +export const getRepleinshJobMain = async (id: number) => { + return await request.get({ url: `/wms/repleinsh-job-main/get?id=` + id }) +} + +// 新增补料任务主 +export const createRepleinshJobMain = async (data: RepleinshJobMainVO) => { + return await request.post({ url: `/wms/repleinsh-job-main/create`, data }) +} + +// 修改补料任务主 +export const updateRepleinshJobMain = async (data: RepleinshJobMainVO) => { + return await request.put({ url: `/wms/repleinsh-job-main/update`, data }) +} + +// 删除补料任务主 +export const deleteRepleinshJobMain = async (id: number) => { + return await request.delete({ url: `/wms/repleinsh-job-main/delete?id=` + id }) +} + +// 导出补料任务主 Excel +export const exportRepleinshJobMain = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/repleinsh-job-main/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/repleinsh-job-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/repleinsh-job-main/get-import-template' }) +} + +// 承接发料任务 +export const acceptRepleinshMain = async (id) => { + return await request.put({ url: `/wms/repleinsh-job-main/accept?id=` + id }) +} + +// 放弃发料任务 +export const abandonRepleinshMain = async (id) => { + return await request.put({ url: `/wms/repleinsh-job-main/abandon?id=` + id }) +} + +// 关闭发料任务 +export const closeRepleinshMain = async (id) => { + return await request.put({ url: `/wms/repleinsh-job-main/close?id=` + id }) +} + +// 执行发料任务 +export const executeRepleinshMain = async (data) => { + return await request.put({ url: `/wms/repleinsh-job-main/execute`, data}) +} \ No newline at end of file diff --git a/src/api/wms/repleinshRecordDetail/index.ts b/src/api/wms/repleinshRecordDetail/index.ts new file mode 100644 index 0000000..2dc7060 --- /dev/null +++ b/src/api/wms/repleinshRecordDetail/index.ts @@ -0,0 +1,74 @@ +import request from '@/config/axios' + +export interface RepleinshRecordDetailVO { + fromPackingNumber: string + fromContainerNumber: string + fromBatch: string + inventoryStatus: string + fromOwnerCode: string + fromLocationCode: string + fromLocationGroupCode: string + fromAreaCode: string + toOwnerCode: string + toLocationCode: string + toLocationGroupCode: string + toAreaCode: string + number: string + itemCode: string + remark: string + createTime: Date + creator: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + code: string + interfaceType: string + jobDetailId: string + toPackingNumber: string + toContainerNumber: string + toBatch: string +} + +// 查询补料记录子列表 +export const getRepleinshRecordDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/repleinsh-record-detail/senior', data }) + } else { + return await request.get({ url: `/wms/repleinsh-record-detail/page`, params }) + } +} + +// 查询补料记录子详情 +export const getRepleinshRecordDetail = async (id: number) => { + return await request.get({ url: `/wms/repleinsh-record-detail/get?id=` + id }) +} + +// 新增补料记录子 +export const createRepleinshRecordDetail = async (data: RepleinshRecordDetailVO) => { + return await request.post({ url: `/wms/repleinsh-record-detail/create`, data }) +} + +// 修改补料记录子 +export const updateRepleinshRecordDetail = async (data: RepleinshRecordDetailVO) => { + return await request.put({ url: `/wms/repleinsh-record-detail/update`, data }) +} + +// 删除补料记录子 +export const deleteRepleinshRecordDetail = async (id: number) => { + return await request.delete({ url: `/wms/repleinsh-record-detail/delete?id=` + id }) +} + +// 导出补料记录子 Excel +export const exportRepleinshRecordDetail = async (params) => { + return await request.download({ url: `/wms/repleinsh-record-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/repleinsh-record-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/repleinshRecordMain/index.ts b/src/api/wms/repleinshRecordMain/index.ts new file mode 100644 index 0000000..f9b00a1 --- /dev/null +++ b/src/api/wms/repleinshRecordMain/index.ts @@ -0,0 +1,73 @@ +import request from '@/config/axios' + +export interface RepleinshRecordMainVO { + requestNumber: string + jobNumber: string + outTransactionType: string + inTransactionType: string + executeTime: Date + activeDate: Date + requestTime: Date + dueTime: Date + departmentCode: string + interfaceType: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + code: string + fromWarehouseCode: string + fromAreaTypes: string + fromAreaCodes: string + toWarehouseCode: string + toAreaTypes: string + toAreaCodes: string + available: string +} + +// 查询补料记录主列表 +export const getRepleinshRecordMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/repleinsh-record-main/senior', data }) + } else { + return await request.get({ url: `/wms/repleinsh-record-main/page`, params }) + } +} + +// 查询补料记录主详情 +export const getRepleinshRecordMain = async (id: number) => { + return await request.get({ url: `/wms/repleinsh-record-main/get?id=` + id }) +} + +// 新增补料记录主 +export const createRepleinshRecordMain = async (data: RepleinshRecordMainVO) => { + return await request.post({ url: `/wms/repleinsh-record-main/create`, data }) +} + +// 修改补料记录主 +export const updateRepleinshRecordMain = async (data: RepleinshRecordMainVO) => { + return await request.put({ url: `/wms/repleinsh-record-main/update`, data }) +} + +// 删除补料记录主 +export const deleteRepleinshRecordMain = async (id: number) => { + return await request.delete({ url: `/wms/repleinsh-record-main/delete?id=` + id }) +} + +// 导出补料记录主 Excel +export const exportRepleinshRecordMain = async (params) => { + if (params.isSearch){ + const data = {...params} + return await request.downloadPost({ url: `/wms/repleinsh-record-main/export-excel-senior`, data }) + }else { + return await request.download({ url: `/wms/repleinsh-record-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/repleinsh-record-main/get-import-template' }) +} diff --git a/src/api/wms/repleinshRequestDetail/index.ts b/src/api/wms/repleinshRequestDetail/index.ts new file mode 100644 index 0000000..9e15b37 --- /dev/null +++ b/src/api/wms/repleinshRequestDetail/index.ts @@ -0,0 +1,62 @@ +import request from '@/config/axios' + +export interface RepleinshRequestDetailVO { + inventoryStatus: string + toLocationCode: string + number: string + itemCode: string + remark: string + createTime: Date + creator: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + updateTime: Date + updater: string + fromOwnerCode: string + toOwnerCode: string +} + +// 查询补料申请子列表 +export const getRepleinshRequestDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/repleinsh-request-detail/senior', data }) + } else { + return await request.get({ url: `/wms/repleinsh-request-detail/page`, params }) + } +} + +// 查询补料申请子详情 +export const getRepleinshRequestDetail = async (id: number) => { + return await request.get({ url: `/wms/repleinsh-request-detail/get?id=` + id }) +} + +// 新增补料申请子 +export const createRepleinshRequestDetail = async (data: RepleinshRequestDetailVO) => { + return await request.post({ url: `/wms/repleinsh-request-detail/create`, data }) +} + +// 修改补料申请子 +export const updateRepleinshRequestDetail = async (data: RepleinshRequestDetailVO) => { + return await request.put({ url: `/wms/repleinsh-request-detail/update`, data }) +} + +// 删除补料申请子 +export const deleteRepleinshRequestDetail = async (id: number) => { + return await request.delete({ url: `/wms/repleinsh-request-detail/delete?id=` + id }) +} + +// 导出补料申请子 Excel +export const exportRepleinshRequestDetail = async (params) => { + return await request.download({ url: `/wms/repleinsh-request-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/repleinsh-request-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/repleinshRequestMain/index.ts b/src/api/wms/repleinshRequestMain/index.ts new file mode 100644 index 0000000..78ad4d4 --- /dev/null +++ b/src/api/wms/repleinshRequestMain/index.ts @@ -0,0 +1,102 @@ +import request from '@/config/axios' + +export interface RepleinshRequestMainVO { + fomWarehouseCode: string + fromAreaTypes: string + fromAreaCodes: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + requestTime: Date + dueTime: Date + departmentCode: string + status: string + updateTime: Date + updater: string + toWarehouseCode: string + toAreaTypes: string + toAreaCodes: string + autoCommit: string + autoAgree: string + autoExecute: string + directCreateRecord: string +} + +// 查询补料申请主列表 +export const getRepleinshRequestMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/repleinsh-request-main/senior', data }) + } else { + return await request.get({ url: `/wms/repleinsh-request-main/page`, params }) + } +} + +// 查询补料申请主详情 +export const getRepleinshRequestMain = async (id: number) => { + return await request.get({ url: `/wms/repleinsh-request-main/get?id=` + id }) +} + +// 新增补料申请主 +export const createRepleinshRequestMain = async (data: RepleinshRequestMainVO) => { + return await request.post({ url: `/wms/repleinsh-request-main/create`, data }) +} + +// 修改补料申请主 +export const updateRepleinshRequestMain = async (data: RepleinshRequestMainVO) => { + return await request.put({ url: `/wms/repleinsh-request-main/update`, data }) +} + +// 删除补料申请主 +export const deleteRepleinshRequestMain = async (id: number) => { + return await request.delete({ url: `/wms/repleinsh-request-main/delete?id=` + id }) +} + +// 导出补料申请主 Excel +export const exportRepleinshRequestMain = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/repleinsh-request-main/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/repleinsh-request-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/repleinsh-request-main/get-import-template' }) +} + + +// 关闭 +export const close = (id) => { + return request.put({ url: '/wms/repleinsh-request-main/close?id=' + id }) +} + +// 重新添加 +export const reAdd = (id) => { + return request.put({ url: '/wms/repleinsh-request-main/reAdd?id=' + id }) +} + +// 提交审批 +export const submit = (id) => { + return request.put({ url: '/wms/repleinsh-request-main/submit?id=' + id }) +} + +// 驳回 +export const refused = (id) => { + return request.put({ url: '/wms/repleinsh-request-main/refused?id=' + id }) +} + +// 审批通过 +export const agree = (id) => { + return request.put({ url: '/wms/repleinsh-request-main/agree?id=' + id }) +} + +// 处理 +export const handle = (id) => { + return request.put({ url: '/wms/repleinsh-request-main/handle?id=' + id }) +} \ No newline at end of file diff --git a/src/api/wms/requestsetting/index.ts b/src/api/wms/requestsetting/index.ts new file mode 100644 index 0000000..7c6ea88 --- /dev/null +++ b/src/api/wms/requestsetting/index.ts @@ -0,0 +1,56 @@ +import request from '@/config/axios' + +export interface RequestsettingVO { + code: string + requestMode: string + activeTime: Date + expireTime: Date + remark: string + autoCommit: string + autoAgree: string + autoExecute: string + directCreateRecord: string + available: string + isSoftDeleted: string +} + +// 查询申请设置列表 +export const getRequestsettingPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/wms/requestsetting/senior', data }) + } else { + return await request.get({ url: `/wms/requestsetting/page`, params }) + } +} + +// 查询申请设置详情 +export const getRequestsetting = async (id: number) => { + return await request.get({ url: `/wms/requestsetting/get?id=` + id }) +} + +// 新增申请设置 +export const createRequestsetting = async (data: RequestsettingVO) => { + return await request.post({ url: `/wms/requestsetting/create`, data }) +} + +// 修改申请设置 +export const updateRequestsetting = async (data: RequestsettingVO) => { + return await request.put({ url: `/wms/requestsetting/update`, data }) +} + +// 删除申请设置 +export const deleteRequestsetting = async (id: number) => { + return await request.delete({ url: `/wms/requestsetting/delete?id=` + id }) +} + +// 导出申请设置 Excel +export const exportRequestsetting = async (params) => { + return await request.download({ url: `/wms/requestsetting/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/requestsetting/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/rule/index.ts b/src/api/wms/rule/index.ts new file mode 100644 index 0000000..a6fe749 --- /dev/null +++ b/src/api/wms/rule/index.ts @@ -0,0 +1,58 @@ +import request from '@/config/axios' + +export interface RuleVO { + strategyCode: string + priority: number + code: string + name: string + description: string + status: number + condition: string + configuration: string +} + +// 查询规则列表 +export const getRulePage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/wms/rule/senior', data }) + } else { + return await request.get({ url: `/wms/rule/page`, params }) + } +} + +// 查询规则详情 +export const getRule = async (id: number) => { + return await request.get({ url: `/wms/rule/get?id=` + id }) +} + +// 新增规则 +export const createRule = async (data: RuleVO) => { + return await request.post({ url: `/wms/rule/create`, data }) +} + +// 修改规则 +export const updateRule = async (data: RuleVO) => { + return await request.put({ url: `/wms/rule/update`, data }) +} + +// 删除规则 +export const deleteRule = async (id: number) => { + return await request.delete({ url: `/wms/rule/delete?id=` + id }) +} + +// 导出规则 Excel +export const exportRule = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/rule/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/rule/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/rule/get-import-template' }) +} diff --git a/src/api/wms/saleDetail/index.ts b/src/api/wms/saleDetail/index.ts new file mode 100644 index 0000000..dcc17f2 --- /dev/null +++ b/src/api/wms/saleDetail/index.ts @@ -0,0 +1,66 @@ +import request from '@/config/axios' + +export interface SaleDetailVO { + lineNumber: string + projectCode: string + packQty: number + packUnit: string + customerPackQty: number + customerPackUnit: string + convertRate: number + shippedQty: number + receivedQty: number + returnedQty: number + singlePrice: number + amount: number + number: string + itemCode: string + remark: string + createTime: Date + creator: string + orderQty: number + uom: string + updateTime: Date + updater: string + available: string +} + +// 查询销售订单子列表 +export const getSaleDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/sale-detail/senior', data }) + } else { + return await request.get({ url: `/wms/sale-detail/page`, params }) + } +} + +// 查询销售订单子详情 +export const getSaleDetail = async (id: number) => { + return await request.get({ url: `/wms/sale-detail/get?id=` + id }) +} + +// 新增销售订单子 +export const createSaleDetail = async (data: SaleDetailVO) => { + return await request.post({ url: `/wms/sale-detail/create`, data }) +} + +// 修改销售订单子 +export const updateSaleDetail = async (data: SaleDetailVO) => { + return await request.put({ url: `/wms/sale-detail/update`, data }) +} + +// 删除销售订单子 +export const deleteSaleDetail = async (id: number) => { + return await request.delete({ url: `/wms/sale-detail/delete?id=` + id }) +} + +// 导出销售订单子 Excel +export const exportSaleDetail = async (params) => { + return await request.download({ url: `/wms/sale-detail/export-excel`, params }) +} + +export const getSaleDetailByCodes = async (params) => { + return await request.get({ url: `/wms/sale-detail/listByCodes`, params }) +} diff --git a/src/api/wms/saleMain/index.ts b/src/api/wms/saleMain/index.ts new file mode 100644 index 0000000..0fd80a7 --- /dev/null +++ b/src/api/wms/saleMain/index.ts @@ -0,0 +1,69 @@ +import request from '@/config/axios' + +export interface SaleMainVO { + customerCode: string + type: string + orderDate: Date + dueDate: Date + version: string + taxRate: number + contactName: string + contactPhone: string + contactEmail: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + updateTime: Date + updater: string + currentStage: number + available: string +} + +// 查询销售订单主列表 +export const getSaleMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/sale-main/senior', data }) + } else { + return await request.get({ url: `/wms/sale-main/page`, params }) + } +} + +// 查询销售订单主详情 +export const getSaleMain = async (id: number) => { + return await request.get({ url: `/wms/sale-main/get?id=` + id }) +} + +// 新增销售订单主 +export const createSaleMain = async (data: SaleMainVO) => { + return await request.post({ url: `/wms/sale-main/create`, data }) +} + +// 修改销售订单主 +export const updateSaleMain = async (data: SaleMainVO) => { + return await request.put({ url: `/wms/sale-main/update`, data }) +} + +// 删除销售订单主 +export const deleteSaleMain = async (id: number) => { + return await request.delete({ url: `/wms/sale-main/delete?id=` + id }) +} + +// 导出销售订单主 Excel +export const exportSaleMain = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/sale-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/sale-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/sale-main/get-import-template' }) +} diff --git a/src/api/wms/saleShipmentDetail/index.ts b/src/api/wms/saleShipmentDetail/index.ts new file mode 100644 index 0000000..5fd25f2 --- /dev/null +++ b/src/api/wms/saleShipmentDetail/index.ts @@ -0,0 +1,65 @@ +import request from '@/config/axios' + +export interface SaleShipmentDetailVO { + id: number + soNumber: string + soLine: string + fromOwnerCode: string + packingNumber: string + batch: string + inventoryStatus: string + fromLocationCode: string + masterId: number + number: string + itemCode: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + remark: string + concurrencyStamp: string + siteId: number +} + +// 查询结算出库申请子列表 +export const getSaleShipmentDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/sale-shipment-detail-request/senior', data }) + } else { + return await request.get({ url: `/wms/sale-shipment-detail-request/page`, params }) + } +} + +// 查询结算出库申请子详情 +export const getSaleShipmentDetail = async (id: number) => { + return await request.get({ url: `/wms/sale-shipment-detail-request/get?id=` + id }) +} + +// 新增结算出库申请子 +export const createSaleShipmentDetail = async (data: SaleShipmentDetailVO) => { + return await request.post({ url: `/wms/sale-shipment-detail-request/create`, data }) +} + +// 修改结算出库申请子 +export const updateSaleShipmentDetail = async (data: SaleShipmentDetailVO) => { + return await request.put({ url: `/wms/sale-shipment-detail-request/update`, data }) +} + +// 删除结算出库申请子 +export const deleteSaleShipmentDetail = async (id: number) => { + return await request.delete({ url: `/wms/sale-shipment-detail-request/delete?id=` + id }) +} + +// 导出结算出库申请子 Excel +export const exportSaleShipmentDetail = async (params) => { + return await request.download({ url: `/wms/sale-shipment-detail-request/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/sale-shipment-detail-request/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/saleShipmentDetailRecord/index.ts b/src/api/wms/saleShipmentDetailRecord/index.ts new file mode 100644 index 0000000..a87f477 --- /dev/null +++ b/src/api/wms/saleShipmentDetailRecord/index.ts @@ -0,0 +1,65 @@ +import request from '@/config/axios' + +export interface SaleShipmentDetailRecordVO { + id: number + soNumber: string + soLine: string + fromOwnerCode: string + packingNumber: string + batch: string + inventoryStatus: string + fromLocationCode: string + masterId: number + number: string + itemCode: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + remark: string + concurrencyStamp: string + siteId: number +} + +// 查询结算出库记录子列表 +export const getSaleShipmentDetailRecordPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/sale-shipment-detail-record/senior', data }) + } else { + return await request.get({ url: `/wms/sale-shipment-detail-record/page`, params }) + } +} + +// 查询结算出库记录子详情 +export const getSaleShipmentDetailRecord = async (id: number) => { + return await request.get({ url: `/wms/sale-shipment-detail-record/get?id=` + id }) +} + +// 新增结算出库记录子 +export const createSaleShipmentDetailRecord = async (data: SaleShipmentDetailRecordVO) => { + return await request.post({ url: `/wms/sale-shipment-detail-record/create`, data }) +} + +// 修改结算出库记录子 +export const updateSaleShipmentDetailRecord = async (data: SaleShipmentDetailRecordVO) => { + return await request.put({ url: `/wms/sale-shipment-detail-record/update`, data }) +} + +// 删除结算出库记录子 +export const deleteSaleShipmentDetailRecord = async (id: number) => { + return await request.delete({ url: `/wms/sale-shipment-detail-record/delete?id=` + id }) +} + +// 导出结算出库记录子 Excel +export const exportSaleShipmentDetailRecord = async (params) => { + return await request.download({ url: `/wms/sale-shipment-detail-record/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/sale-shipment-detail-record/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/saleShipmentMain/index.ts b/src/api/wms/saleShipmentMain/index.ts new file mode 100644 index 0000000..a3e3c94 --- /dev/null +++ b/src/api/wms/saleShipmentMain/index.ts @@ -0,0 +1,100 @@ +import request from '@/config/axios' + +export interface SaleShipmentMainVO { + id: number + customerCode: string + number: string + businessType: string + remark: string + extraProperties: string + siteId: number + invoiceTime: Date + requestTime: Date + dueTime: Date + departmentCode: string + status: string + autoCommit: string + autoAgree: string + autoExecute: string + directCreateRecord: string + concurrencyStamp: string + ruleUserId: number + serialNumber: string +} + +// 查询结算出库申请主列表 +export const getSaleShipmentMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/sale-shipment-main-request/senior', data }) + } else { + return await request.get({ url: `/wms/sale-shipment-main-request/page`, params }) + } +} + +// 查询结算出库申请主详情 +export const getSaleShipmentMain = async (id: number) => { + return await request.get({ url: `/wms/sale-shipment-main-request/get?id=` + id }) +} + +// 新增结算出库申请主 +export const createSaleShipmentMain = async (data: SaleShipmentMainVO) => { + return await request.post({ url: `/wms/sale-shipment-main-request/create`, data }) +} + +// 修改结算出库申请主 +export const updateSaleShipmentMain = async (data: SaleShipmentMainVO) => { + return await request.put({ url: `/wms/sale-shipment-main-request/update`, data }) +} + +// 删除结算出库申请主 +export const deleteSaleShipmentMain = async (id: number) => { + return await request.delete({ url: `/wms/sale-shipment-main-request/delete?id=` + id }) +} + +// 导出结算出库申请主 Excel +export const exportSaleShipmentMain = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/sale-shipment-main-request/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/sale-shipment-main-request/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/sale-shipment-main-request/get-import-template' }) +} + +// 关闭-结算出库申请 +export const close = async (id) => { + return await request.put({ url: `/wms/sale-shipment-main-request/close?id=` + id }) +} + +// 重新添加-结算出库申请 +export const reAdd = async (id) => { + return await request.put({ url: `/wms/sale-shipment-main-request/reAdd?id=` + id }) +} + +// 提交审批-结算出库申请 +export const submit = async (id) => { + return await request.put({ url: `/wms/sale-shipment-main-request/submit?id=` + id }) +} + +// 审批驳回-结算出库申请 +export const refused = async (id) => { + return await request.put({ url: `/wms/sale-shipment-main-request/refused?id=` + id }) +} + +// 审批通过-结算出库申请 +export const agree = async (id) => { + return await request.put({ url: `/wms/sale-shipment-main-request/agree?id=` + id }) +} + +// 处理-结算出库申请 +export const handle = async (id) => { + return await request.put({ url: `/wms/sale-shipment-main-request/handle?id=` + id }) +} diff --git a/src/api/wms/saleShipmentMainRecord/index.ts b/src/api/wms/saleShipmentMainRecord/index.ts new file mode 100644 index 0000000..dc193da --- /dev/null +++ b/src/api/wms/saleShipmentMainRecord/index.ts @@ -0,0 +1,66 @@ +import request from '@/config/axios' + +export interface SaleShipmentMainRecordVO { + id: number + requestNumber: string + customerCode: string + invoiceTime: Date + executeTime: Date + available: string + departmentCode: string + number: string + businessType: string + extraProperties: string + siteId: string +} + +// 查询结算出库记录主列表 +export const getSaleShipmentMainRecordPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/sale-shipment-main-record/senior', data }) + } else { + return await request.get({ url: `/wms/sale-shipment-main-record/page`, params }) + } +} + +// 查询结算出库记录主详情 +export const getSaleShipmentMainRecord = async (id: number) => { + return await request.get({ url: `/wms/sale-shipment-main-record/get?id=` + id }) +} + +// 新增结算出库记录主 +export const createSaleShipmentMainRecord = async (data: SaleShipmentMainRecordVO) => { + return await request.post({ url: `/wms/sale-shipment-main-record/create`, data }) +} + +// 修改结算出库记录主 +export const updateSaleShipmentMainRecord = async (data: SaleShipmentMainRecordVO) => { + return await request.put({ url: `/wms/sale-shipment-main-record/update`, data }) +} + +// 删除结算出库记录主 +export const deleteSaleShipmentMainRecord = async (id: number) => { + return await request.delete({ url: `/wms/sale-shipment-main-record/delete?id=` + id }) +} + +// 导出结算出库记录主 Excel +export const exportSaleShipmentMainRecord = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/sale-shipment-main-record/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/sale-shipment-main-record/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/sale-shipment-main-record/get-import-template' }) +} +// 处理-结算出库撤销 +export const abort = async (id) => { + return await request.put({ url: `/wms/sale-shipment-main-record/abort?id=` + id }) +} diff --git a/src/api/wms/saleprice/index.ts b/src/api/wms/saleprice/index.ts new file mode 100644 index 0000000..6ac634e --- /dev/null +++ b/src/api/wms/saleprice/index.ts @@ -0,0 +1,58 @@ +import request from '@/config/axios' + +export interface SalepriceVO { + customercode: string + itemcode: string + currency: string + price: number + available: number + activeTime: Date + expireTime: Date + remark: string +} + +// 查询销售价格单列表 +export const getSalepricePage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/wms/saleprice/senior', data }) + } else { + return await request.get({ url: `/wms/saleprice/page`, params }) + } +} + +// 查询销售价格单详情 +export const getSaleprice = async (id: number) => { + return await request.get({ url: `/wms/saleprice/get?id=` + id }) +} + +// 新增销售价格单 +export const createSaleprice = async (data: SalepriceVO) => { + return await request.post({ url: `/wms/saleprice/create`, data }) +} + +// 修改销售价格单 +export const updateSaleprice = async (data: SalepriceVO) => { + return await request.put({ url: `/wms/saleprice/update`, data }) +} + +// 删除销售价格单 +export const deleteSaleprice = async (id: number) => { + return await request.delete({ url: `/wms/saleprice/delete?id=` + id }) +} + +// 导出销售价格单 Excel +export const exportSaleprice = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/saleprice/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/saleprice/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/saleprice/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/scrapJobDetail/index.ts b/src/api/wms/scrapJobDetail/index.ts new file mode 100644 index 0000000..c333d80 --- /dev/null +++ b/src/api/wms/scrapJobDetail/index.ts @@ -0,0 +1,63 @@ +import request from '@/config/axios' + +export interface ScrapJobDetailVO { + ownerCode: string + packingNumber: string + containerNumber: string + batch: string + fromLocationCode: string + inventoryStatus: string + reason: string + itemCode: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + number: string + remark: string + createTime: Date + creator: string +} + +// 查询报废出库任务子列表 +export const getScrapJobDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/scrap-job-detail/senior', data }) + } else { + return await request.get({ url: `/wms/scrap-job-detail/page`, params }) + } +} + +// 查询报废出库任务子详情 +export const getScrapJobDetail = async (id: number) => { + return await request.get({ url: `/wms/scrap-job-detail/get?id=` + id }) +} + +// 新增报废出库任务子 +export const createScrapJobDetail = async (data: ScrapJobDetailVO) => { + return await request.post({ url: `/wms/scrap-job-detail/create`, data }) +} + +// 修改报废出库任务子 +export const updateScrapJobDetail = async (data: ScrapJobDetailVO) => { + return await request.put({ url: `/wms/scrap-job-detail/update`, data }) +} + +// 删除报废出库任务子 +export const deleteScrapJobDetail = async (id: number) => { + return await request.delete({ url: `/wms/scrap-job-detail/delete?id=` + id }) +} + +// 导出报废出库任务子 Excel +export const exportScrapJobDetail = async (params) => { + return await request.download({ url: `/wms/scrap-job-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/scrap-job-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/scrapJobMain/index.ts b/src/api/wms/scrapJobMain/index.ts new file mode 100644 index 0000000..61a448a --- /dev/null +++ b/src/api/wms/scrapJobMain/index.ts @@ -0,0 +1,97 @@ +import request from '@/config/axios' + +export interface ScrapJobMainVO { + requestNumber: string + fromWarehouseCode: string + requestTime: Date + requestDueTime: Date + status: string + expiredTime: Date + updateTime: Date + updater: string + jobStageStatus: string + priority: number + priorityIncrement: number + departmentCode: string + acceptUserId: string + acceptTime: Date + completeUserId: string + completeTime: Date + fromAreaTypes: string + toAreaTypes: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + fromAreaCodes: string + autoComplete: string + allowModifyLocation: string + allowModifyQty: string + allowBiggerQty: string + allowSmallerQty: string + allowModifyInventoryStatus: string + allowContinuousScanning: string + allowPartialComplete: string + allowModifyBatch: string + allowModifyPackingNumber: string +} + +// 查询报废出库任务主列表 +export const getScrapJobMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/scrap-job-main/senior', data }) + } else { + return await request.get({ url: `/wms/scrap-job-main/page`, params }) + } +} + +// 查询报废出库任务主详情 +export const getScrapJobMain = async (id: number) => { + return await request.get({ url: `/wms/scrap-job-main/get?id=` + id }) +} + +// 新增报废出库任务主 +export const createScrapJobMain = async (data: ScrapJobMainVO) => { + return await request.post({ url: `/wms/scrap-job-main/create`, data }) +} + +// 修改报废出库任务主 +export const updateScrapJobMain = async (data: ScrapJobMainVO) => { + return await request.put({ url: `/wms/scrap-job-main/update`, data }) +} + +// 删除报废出库任务主 +export const deleteScrapJobMain = async (id: number) => { + return await request.delete({ url: `/wms/scrap-job-main/delete?id=` + id }) +} +// 承接报废出库任务主 +export const acceptScrapJobMain = async (id: number) => { + return await request.put({ url: `/wms/scrap-job-main/accept?id=` + id }) +} +// 取消承接报废出库任务主 +export const abandonScrapJobMain = async (id: number) => { + return await request.put({ url: `/wms/scrap-job-main/abandon?id=` + id }) +} +// 关闭报废出库任务主 +export const closeScrapJobMain = async (id: number) => { + return await request.put({ url: `/wms/scrap-job-main/close?id=` + id }) +} + +// 导出报废出库任务主 Excel +export const exportScrapJobMain = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/scrap-job-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/scrap-job-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/scrap-job-main/get-import-template' }) +} diff --git a/src/api/wms/scrapRecordDetail/index.ts b/src/api/wms/scrapRecordDetail/index.ts new file mode 100644 index 0000000..4ff183b --- /dev/null +++ b/src/api/wms/scrapRecordDetail/index.ts @@ -0,0 +1,70 @@ +import request from '@/config/axios' + +export interface ScrapRecordDetailVO { + fromOwnerCode: string + packingNumber: string + containerNumber: string + batch: string + fromLocationCode: string + fromLocationGroupCode: string + fromAreaCode: string + inventoryStatus: string + reason: string + singlePrice: number + amount: number + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + code: string + interfaceType: string + number: string + itemCode: string + remark: string + createTime: Date + creator: string + jobDetailId: string +} + +// 查询报废出库记录子列表 +export const getScrapRecordDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/scrap-record-detail/senior', data }) + } else { + return await request.get({ url: `/wms/scrap-record-detail/page`, params }) + } +} + +// 查询报废出库记录子详情 +export const getScrapRecordDetail = async (id: number) => { + return await request.get({ url: `/wms/scrap-record-detail/get?id=` + id }) +} + +// 新增报废出库记录子 +export const createScrapRecordDetail = async (data: ScrapRecordDetailVO) => { + return await request.post({ url: `/wms/scrap-record-detail/create`, data }) +} + +// 修改报废出库记录子 +export const updateScrapRecordDetail = async (data: ScrapRecordDetailVO) => { + return await request.put({ url: `/wms/scrap-record-detail/update`, data }) +} + +// 删除报废出库记录子 +export const deleteScrapRecordDetail = async (id: number) => { + return await request.delete({ url: `/wms/scrap-record-detail/delete?id=` + id }) +} + +// 导出报废出库记录子 Excel +export const exportScrapRecordDetail = async (params) => { + return await request.download({ url: `/wms/scrap-record-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/scrap-record-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/scrapRecordMain/index.ts b/src/api/wms/scrapRecordMain/index.ts new file mode 100644 index 0000000..eb1d8aa --- /dev/null +++ b/src/api/wms/scrapRecordMain/index.ts @@ -0,0 +1,76 @@ +import request from '@/config/axios' + +export interface ScrapRecordMainVO { + requestNumber: string + jobNumber: string + outTransactionType: string + inTransactionType: string + executeTime: Date + activeDate: Date + requestTime: Date + dueTime: Date + departmentCode: string + interfaceType: string + code: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + fromWarehouseCode: string + fromAreaTypes: string + fromAreaCodes: string + available: string +} + +// 查询报废出库记录主列表 +export const getScrapRecordMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/scrap-record-main/senior', data }) + } else { + return await request.get({ url: `/wms/scrap-record-main/page`, params }) + } +} + +// 查询报废出库记录主详情 +export const getScrapRecordMain = async (id: number) => { + return await request.get({ url: `/wms/scrap-record-main/get?id=` + id }) +} + +// 新增报废出库记录主 +export const createScrapRecordMain = async (data: ScrapRecordMainVO) => { + return await request.post({ url: `/wms/scrap-record-main/create`, data }) +} + +// 修改报废出库记录主 +export const updateScrapRecordMain = async (data: ScrapRecordMainVO) => { + return await request.put({ url: `/wms/scrap-record-main/update`, data }) +} + +// 删除报废出库记录主 +export const deleteScrapRecordMain = async (id: number) => { + return await request.delete({ url: `/wms/scrap-record-main/delete?id=` + id }) +} + +// 导出报废出库记录主 Excel +export const exportScrapRecordMain = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/scrap-record-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/scrap-record-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/scrap-record-main/get-import-template' }) +} + +// 撤销 +export const revoke = async (id: number) => { + return await request.get({ url: `/wms/scrap-record-main/revoke?id=` + id }) +} diff --git a/src/api/wms/scrapRequestDetail/index.ts b/src/api/wms/scrapRequestDetail/index.ts new file mode 100644 index 0000000..99a15ec --- /dev/null +++ b/src/api/wms/scrapRequestDetail/index.ts @@ -0,0 +1,65 @@ +import request from '@/config/axios' + +export interface ScrapRequestDetailVO { + fromOwnerCode: string + packingNumber: string + containerNumber: string + batch: string + fromLocationCode: string + inventoryStatus: string + reason: string + number: string + itemCode: string + remark: string + createTime: Date + creator: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + updateTime: Date + updater: string +} + +// 查询报废出库申请子列表 +export const getScrapRequestDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/scrap-request-detail/senior', data }) + } else { + return await request.get({ url: `/wms/scrap-request-detail/page`, params }) + } +} + +// 查询报废出库申请子详情 +export const getScrapRequestDetail = async (id: number) => { + return await request.get({ url: `/wms/scrap-request-detail/get?id=` + id }) +} + +// 新增报废出库申请子 +export const createScrapRequestDetail = async (data: ScrapRequestDetailVO) => { + return await request.post({ url: `/wms/scrap-request-detail/create`, data }) +} + +// 修改报废出库申请子 +export const updateScrapRequestDetail = async (data: ScrapRequestDetailVO) => { + return await request.put({ url: `/wms/scrap-request-detail/update`, data }) +} + +// 删除报废出库申请子 +export const deleteScrapRequestDetail = async (id: number) => { + return await request.delete({ url: `/wms/scrap-request-detail/delete?id=` + id }) +} + +// 导出报废出库申请子 Excel +export const exportScrapRequestDetail = async (params) => { + return await request.download({ url: `/wms/scrap-request-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/scrap-request-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/scrapRequestMain/index.ts b/src/api/wms/scrapRequestMain/index.ts new file mode 100644 index 0000000..b4ca024 --- /dev/null +++ b/src/api/wms/scrapRequestMain/index.ts @@ -0,0 +1,98 @@ +import request from '@/config/axios' + +export interface ScrapRequestMainVO { + fromWarehouseCode: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + requestTime: Date + dueTime: Date + departmentCode: string + status: string + updateTime: Date + updater: string + fromAreaTypes: string + fromAreaCodes: string + autoCommit: string + autoAgree: string + autoExecute: string + directCreateRecord: string +} + +// 查询报废出库申请主列表 +export const getScrapRequestMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/scrap-request-main/senior', data }) + } else { + return await request.get({ url: `/wms/scrap-request-main/page`, params }) + } +} + +// 查询报废出库申请主详情 +export const getScrapRequestMain = async (id: number) => { + return await request.get({ url: `/wms/scrap-request-main/get?id=` + id }) +} + +// 新增报废出库申请主 +export const createScrapRequestMain = async (data: ScrapRequestMainVO) => { + return await request.post({ url: `/wms/scrap-request-main/create`, data }) +} + +// 修改报废出库申请主 +export const updateScrapRequestMain = async (data: ScrapRequestMainVO) => { + return await request.put({ url: `/wms/scrap-request-main/update`, data }) +} + +// 删除报废出库申请主 +export const deleteScrapRequestMain = async (id: number) => { + return await request.delete({ url: `/wms/scrap-request-main/delete?id=` + id }) +} + +// 导出报废出库申请主 Excel +export const exportScrapRequestMain = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/scrap-request-main/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/scrap-request-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/scrap-request-main/get-import-template' }) +} + +// 关闭-报废出库申请 +export const closeScrapRequestMain = async (id) => { + return await request.put({ url: `/wms/scrap-request-main/close?id=` + id }) +} + +// 重新添加-报废出库申请 +export const reAddScrapRequestMain = async (id) => { + return await request.put({ url: `/wms/scrap-request-main/reAdd?id=` + id }) +} + +// 提交审批-报废出库申请 +export const submitScrapRequestMain = async (id) => { + return await request.put({ url: `/wms/scrap-request-main/submit?id=` + id }) +} + +// 审批驳回-报废出库申请 +export const refusedScrapRequestMain = async (id) => { + return await request.put({ url: `/wms/scrap-request-main/refused?id=` + id }) +} + +// 审批通过-报废出库申请 +export const agreeScrapRequestMain = async (id) => { + return await request.put({ url: `/wms/scrap-request-main/agree?id=` + id }) +} + +// 处理-报废出库申请 +export const handleScrapRequestMain = async (id) => { + return await request.put({ url: `/wms/scrap-request-main/handle?id=` + id }) +} diff --git a/src/api/wms/shift/index.ts b/src/api/wms/shift/index.ts new file mode 100644 index 0000000..f663b79 --- /dev/null +++ b/src/api/wms/shift/index.ts @@ -0,0 +1,60 @@ +import request from '@/config/axios' + +export interface ShiftVO { + code: string + name: string + description: string + beginTime: Date + entTime: Date + activeTime: Date + expireTime: Date + remark: string + endAtNextDay: string + available: string +} + +// 查询班次列表 +export const getShiftPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/wms/shift/senior', data }) + } else { + return await request.get({ url: `/wms/shift/page`, params }) + } +} + +// 查询班次详情 +export const getShift = async (id: number) => { + return await request.get({ url: `/wms/shift/get?id=` + id }) +} + +// 新增班次 +export const createShift = async (data: ShiftVO) => { + return await request.post({ url: `/wms/shift/create`, data }) +} + +// 修改班次 +export const updateShift = async (data: ShiftVO) => { + return await request.put({ url: `/wms/shift/update`, data }) +} + +// 删除班次 +export const deleteShift = async (id: number) => { + return await request.delete({ url: `/wms/shift/delete?id=` + id }) +} + +// 导出班次 Excel +export const exportShift = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/shift/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/shift/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/shift/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/stdcostprice/index.ts b/src/api/wms/stdcostprice/index.ts new file mode 100644 index 0000000..171b6a9 --- /dev/null +++ b/src/api/wms/stdcostprice/index.ts @@ -0,0 +1,64 @@ +import request from '@/config/axios' + +export interface StdcostpriceVO { + supplierCode: string + itemCode: string + currency: string + price: number + available: number + activeTime: Date + expireTime: Date + remark: string +} + +// 查询标准成本价格单列表 +export const getStdcostpricePage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/wms/stdcostprice/senior', data }) + } else { + return await request.get({ url: `/wms/stdcostprice/page`, params }) + } +} + +// 查询标准成本价格单详情 +export const getStdcostprice = async (id: number) => { + return await request.get({ url: `/wms/stdcostprice/get?id=` + id }) +} + +// 新增标准成本价格单 +export const createStdcostprice = async (data: StdcostpriceVO) => { + return await request.post({ url: `/wms/stdcostprice/create`, data }) +} + +// 修改标准成本价格单 +export const updateStdcostprice = async (data: StdcostpriceVO) => { + return await request.put({ url: `/wms/stdcostprice/update`, data }) +} + +// 删除标准成本价格单 +export const deleteStdcostprice = async (id: number) => { + return await request.delete({ url: `/wms/stdcostprice/delete?id=` + id }) +} + +// 导出标准成本价格单 Excel +export const exportStdcostprice = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/stdcostprice/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/stdcostprice/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/stdcostprice/get-import-template' }) +} + + +// 查询标准成本价格单列表 +export const queryStdcostpriceByItemCode = async (data) => { + return await request.post({ url: `/wms/stdcostprice/queryStdcostpriceByItemCode`, data }) +} \ No newline at end of file diff --git a/src/api/wms/stockupDetailJob/index.ts b/src/api/wms/stockupDetailJob/index.ts new file mode 100644 index 0000000..0f0aedc --- /dev/null +++ b/src/api/wms/stockupDetailJob/index.ts @@ -0,0 +1,64 @@ +import request from '@/config/axios' + +export interface StockupDetailJobVO { + id: number + packingNumber: string + batch: string + inventoryStatus: string + ownerCode: string + containerNumber: string + fromLocationCode: string + toLocationCode: string + itemCode: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + masterId: number + number: string + remark: string + siteId: string +} + +// 查询备货任务子列表 +export const getStockupDetailJobPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/stockup-detail-job/senior', data }) + } else { + return await request.get({ url: `/wms/stockup-detail-job/page`, params }) + } +} + +// 查询备货任务子详情 +export const getStockupDetailJob = async (id: number) => { + return await request.get({ url: `/wms/stockup-detail-job/get?id=` + id }) +} + +// 新增备货任务子 +export const createStockupDetailJob = async (data: StockupDetailJobVO) => { + return await request.post({ url: `/wms/stockup-detail-job/create`, data }) +} + +// 修改备货任务子 +export const updateStockupDetailJob = async (data: StockupDetailJobVO) => { + return await request.put({ url: `/wms/stockup-detail-job/update`, data }) +} + +// 删除备货任务子 +export const deleteStockupDetailJob = async (id: number) => { + return await request.delete({ url: `/wms/stockup-detail-job/delete?id=` + id }) +} + +// 导出备货任务子 Excel +export const exportStockupDetailJob = async (params) => { + return await request.download({ url: `/wms/stockup-detail-job/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/stockup-detail-job/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/stockupDetailRecord/index.ts b/src/api/wms/stockupDetailRecord/index.ts new file mode 100644 index 0000000..1ec393e --- /dev/null +++ b/src/api/wms/stockupDetailRecord/index.ts @@ -0,0 +1,76 @@ +import request from '@/config/axios' + +export interface StockupDetailRecordVO { + id: number + packingNumber: string + batch: string + inventoryStatus: string + fromOwnerCode: string + fromContainerNumber: string + fromLocationCode: string + fromLocationGroupCode: string + fromAreaCode: string + toOwnerCode: string + toContainerNumber: string + toLocationCode: string + toLocationGroupCode: string + toAreaCode: string + singlePrice: number + amount: number + masterId: number + number: string + itemCode: string + remark: string + siteId: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + code: string + interfaceType: string + jobDetailId: string + available: string +} + +// 查询备货记录子列表 +export const getStockupDetailRecordPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/stockup-detail-record/senior', data }) + } else { + return await request.get({ url: `/wms/stockup-detail-record/page`, params }) + } +} + +// 查询备货记录子详情 +export const getStockupDetailRecord = async (id: number) => { + return await request.get({ url: `/wms/stockup-detail-record/get?id=` + id }) +} + +// 新增备货记录子 +export const createStockupDetailRecord = async (data: StockupDetailRecordVO) => { + return await request.post({ url: `/wms/stockup-detail-record/create`, data }) +} + +// 修改备货记录子 +export const updateStockupDetailRecord = async (data: StockupDetailRecordVO) => { + return await request.put({ url: `/wms/stockup-detail-record/update`, data }) +} + +// 删除备货记录子 +export const deleteStockupDetailRecord = async (id: number) => { + return await request.delete({ url: `/wms/stockup-detail-record/delete?id=` + id }) +} + +// 导出备货记录子 Excel +export const exportStockupDetailRecord = async (params) => { + return await request.download({ url: `/wms/stockup-detail-record/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/stockup-detail-record/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/stockupDetailRequest/index.ts b/src/api/wms/stockupDetailRequest/index.ts new file mode 100644 index 0000000..3335962 --- /dev/null +++ b/src/api/wms/stockupDetailRequest/index.ts @@ -0,0 +1,65 @@ +import request from '@/config/axios' + +export interface StockupDetailRequestVO { + id: number + packingNumber: string + containerNumber: string + batch: string + inventoryStatus: string + toOwnerCode: string + toLocationCode: string + masterId: number + number: string + remark: string + siteId: number + itemCode: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + concurrencyStamp: string + fromOwnerCode: string +} + +// 查询备货申请子列表 +export const getStockupDetailRequestPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/stockup-detail-request/senior', data }) + } else { + return await request.get({ url: `/wms/stockup-detail-request/page`, params }) + } +} + +// 查询备货申请子详情 +export const getStockupDetailRequest = async (id: number) => { + return await request.get({ url: `/wms/stockup-detail-request/get?id=` + id }) +} + +// 新增备货申请子 +export const createStockupDetailRequest = async (data: StockupDetailRequestVO) => { + return await request.post({ url: `/wms/stockup-detail-request/create`, data }) +} + +// 修改备货申请子 +export const updateStockupDetailRequest = async (data: StockupDetailRequestVO) => { + return await request.put({ url: `/wms/stockup-detail-request/update`, data }) +} + +// 删除备货申请子 +export const deleteStockupDetailRequest = async (id: number) => { + return await request.delete({ url: `/wms/stockup-detail-request/delete?id=` + id }) +} + +// 导出备货申请子 Excel +export const exportStockupDetailRequest = async (params) => { + return await request.download({ url: `/wms/stockup-detail-request/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/stockup-detail-request/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/stockupMainJob/index.ts b/src/api/wms/stockupMainJob/index.ts new file mode 100644 index 0000000..1506091 --- /dev/null +++ b/src/api/wms/stockupMainJob/index.ts @@ -0,0 +1,116 @@ +import request from '@/config/axios' + +export interface StockupMainJobVO { + id: number + requestNumber: string + deliverPlanNumber: string + fromWarehouseCode: string + toWarehouseCode: string + details: string + requestTime: Date + requestDueTime: Date + status: string + expiredTime: Date + concurrencyStamp: string + jobStageStatus: string + priority: number + priorityincrement: number + departmentCode: string + userGroupCode: string + acceptUserId: string + acceptUserName: string + acceptTime: Date + completeUserId: string + completeUserName: string + completeTime: Date + fromAreaTypes: string + toAreaTypes: string + number: string + businessType: string + remark: string + extraProperties: string + siteId: string + autoComplete: string + allowModifyLocation: string + allowModifyQty: string + allowBiggerQty: string + allowSmallerQty: string + allowModifyInventoryStatus: string + allowContinuousScanning: string + allowPartialComplete: string + ruleUserId: number + allowModifyBatch: string + allowModifyPackingNumber: string + fromAreaCodes: string + toAreaCodes: string + serialNumber: string + inInventoryStatuses: string + outInventoryStatuses: string +} + +// 查询备货任务主列表 +export const getStockupMainJobPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/stockup-main-job/senior', data }) + } else { + return await request.get({ url: `/wms/stockup-main-job/page`, params }) + } +} + +// 查询备货任务主详情 +export const getStockupMainJob = async (id: number) => { + return await request.get({ url: `/wms/stockup-main-job/get?id=` + id }) +} + +// 新增备货任务主 +export const createStockupMainJob = async (data: StockupMainJobVO) => { + return await request.post({ url: `/wms/stockup-main-job/create`, data }) +} + +// 修改备货任务主 +export const updateStockupMainJob = async (data: StockupMainJobVO) => { + return await request.put({ url: `/wms/stockup-main-job/update`, data }) +} + +// 删除备货任务主 +export const deleteStockupMainJob = async (id: number) => { + return await request.delete({ url: `/wms/stockup-main-job/delete?id=` + id }) +} + +// 导出备货任务主 Excel +export const exportStockupMainJob = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/stockup-main-job/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/stockup-main-job/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/stockup-main-job/get-import-template' }) +} + +// 承接发货任务 Excel +export const acceptStockupMainJob = async (id) => { + return await request.put({ url: `/wms/stockup-main-job/accept?id=` + id }) +} + +// 取消承接发货任务 Excel +export const abandonStockupMainJob = async (id) => { + return await request.put({ url: `/wms/stockup-main-job/abandon?id=` + id }) +} + +// 关闭发货任务主 Excel +export const closeStockupMainJob = async (id) => { + return await request.put({ url: `/wms/stockup-main-job/close?id=` + id }) +} + +// 执行发货任务主 +export const executeStockupMainJob = async (data: StockupMainJobVO) => { + return await request.put({ url: `/wms/stockup-main-job/execute`, data }) +} diff --git a/src/api/wms/stockupMainRecord/index.ts b/src/api/wms/stockupMainRecord/index.ts new file mode 100644 index 0000000..cc3952c --- /dev/null +++ b/src/api/wms/stockupMainRecord/index.ts @@ -0,0 +1,78 @@ +import request from '@/config/axios' + +export interface StockupMainRecordVO { + id: number + requestNumber: string + jobNumber: string + deliverPlanNumber: string + fromWarehouseCode: string + toWarehouseCode: string + details: string + outTransactionType: string + inTransactionType: string + executeTime: Date + activeDate: Date + available: string + requestTime: Date + dueTime: Date + departmentCode: string + userGroupCode: string + interfaceType: string + number: string + businessType: string + remark: string + extraProperties: string + siteId: string + code: string + fromAreaTypes: string + fromAreaCodes: string + toAreaTypes: string + toAreaCodes: string +} + +// 查询备货记录主列表 +export const getStockupMainRecordPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/stockup-main-record/senior', data }) + } else { + return await request.get({ url: `/wms/stockup-main-record/page`, params }) + } +} + +// 查询备货记录主详情 +export const getStockupMainRecord = async (id: number) => { + return await request.get({ url: `/wms/stockup-main-record/get?id=` + id }) +} + +// 新增备货记录主 +export const createStockupMainRecord = async (data: StockupMainRecordVO) => { + return await request.post({ url: `/wms/stockup-main-record/create`, data }) +} + +// 修改备货记录主 +export const updateStockupMainRecord = async (data: StockupMainRecordVO) => { + return await request.put({ url: `/wms/stockup-main-record/update`, data }) +} + +// 删除备货记录主 +export const deleteStockupMainRecord = async (id: number) => { + return await request.delete({ url: `/wms/stockup-main-record/delete?id=` + id }) +} + +// 导出备货记录主 Excel +export const exportStockupMainRecord = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/stockup-main-record/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/stockup-main-record/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/stockup-main-record/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/stockupMainRequest/index.ts b/src/api/wms/stockupMainRequest/index.ts new file mode 100644 index 0000000..a145390 --- /dev/null +++ b/src/api/wms/stockupMainRequest/index.ts @@ -0,0 +1,108 @@ +import request from '@/config/axios' + +export interface StockupMainRequestVO { + id: number + deliverPlanNumber: string + fromWarehouseCode: string + toWarehouseCode: string + fromAreaTypes: string + fromAreaCodes: string + details: string + number: string + businessType: string + remark: string + extraProperties: string + siteId: number + requestTime: Date + dueTime: Date + departmentCode: string + status: string + autoCommit: string + autoAgree: string + autoExecute: string + directCreateRecord: string + concurrencyStamp: string + ruleUserId: number + toAreaTypes: string + toAreaCodes: string + serialNumber: string + deliverDate: Date + inInventoryStatuses: string + outInventoryStatuses: string +} + +// 查询备货申请主列表 +export const getStockupMainRequestPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/stockup-main-request/senior', data }) + } else { + return await request.get({ url: `/wms/stockup-main-request/page`, params }) + } +} + +// 查询备货申请主详情 +export const getStockupMainRequest = async (id: number) => { + return await request.get({ url: `/wms/stockup-main-request/get?id=` + id }) +} + +// 新增备货申请主 +export const createStockupMainRequest = async (data: StockupMainRequestVO) => { + return await request.post({ url: `/wms/stockup-main-request/create`, data }) +} + +// 修改备货申请主 +export const updateStockupMainRequest = async (data: StockupMainRequestVO) => { + return await request.put({ url: `/wms/stockup-main-request/update`, data }) +} + +// 删除备货申请主 +export const deleteStockupMainRequest = async (id: number) => { + return await request.delete({ url: `/wms/stockup-main-request/delete?id=` + id }) +} + +// 导出备货申请主 Excel +export const exportStockupMainRequest = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/stockup-main-request/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/stockup-main-request/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/stockup-main-request/get-import-template' }) +} +// 关闭 +export const close = (id) => { + return request.put({ url: '/wms/stockup-main-request/close?id=' + id }) +} + +// 重新添加 +export const reAdd = (id) => { + return request.put({ url: '/wms/stockup-main-request/reAdd?id=' + id }) +} + +// 提交审批 +export const submit = (id) => { + return request.put({ url: '/wms/stockup-main-request/submit?id=' + id }) +} + +// 驳回 +export const refused = (id) => { + return request.put({ url: '/wms/stockup-main-request/refused?id=' + id }) +} + +// 审批通过 +export const agree = (id) => { + return request.put({ url: '/wms/stockup-main-request/agree?id=' + id }) +} + +// 处理 +export const handle = (id) => { + return request.put({ url: '/wms/stockup-main-request/handle?id=' + id }) +} \ No newline at end of file diff --git a/src/api/wms/strategy/index.ts b/src/api/wms/strategy/index.ts new file mode 100644 index 0000000..bd26f00 --- /dev/null +++ b/src/api/wms/strategy/index.ts @@ -0,0 +1,53 @@ +import request from '@/config/axios' + +export interface StrategyVO { + remark: string + code: string + name: string + description: string + type: string + priority: number + isActive: string +} + +// 查询策略列表 +export const getStrategyPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/strategy/senior', data }) + } else { + return await request.get({ url: `/wms/strategy/page`, params }) + } +} + +// 查询策略详情 +export const getStrategy = async (id: number) => { + return await request.get({ url: `/wms/strategy/get?id=` + id }) +} + +// 新增策略 +export const createStrategy = async (data: StrategyVO) => { + return await request.post({ url: `/wms/strategy/create`, data }) +} + +// 修改策略 +export const updateStrategy = async (data: StrategyVO) => { + return await request.put({ url: `/wms/strategy/update`, data }) +} + +// 删除策略 +export const deleteStrategy = async (id: number) => { + return await request.delete({ url: `/wms/strategy/delete?id=` + id }) +} + +// 导出策略 Excel +export const exportStrategy = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/strategy/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/strategy/export-excel`, params }) + } +} diff --git a/src/api/wms/subjectAccount/index.ts b/src/api/wms/subjectAccount/index.ts new file mode 100644 index 0000000..351203c --- /dev/null +++ b/src/api/wms/subjectAccount/index.ts @@ -0,0 +1,66 @@ +import request from '@/config/axios' + +export interface SubjectAccountVO { + id: number + code: string + usageDescription: string + costecentreId: string + costecentreCode: string + costecentreType: string + projectId: string + projectCode: string + address: string + available: string + remark: string + deletionTime: Date + deleterId: string + extraProperties: string + concurrencyStamp: number + siteId: string +} + +// 查询科目账户配置列表 +export const getSubjectAccountPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/subject-account/senior', data }) + } else { + return await request.get({ url: `/wms/subject-account/page`, params }) + } +} + +// 查询科目账户配置详情 +export const getSubjectAccount = async (id: number) => { + return await request.get({ url: `/wms/subject-account/get?id=` + id }) +} + +// 新增科目账户配置 +export const createSubjectAccount = async (data: SubjectAccountVO) => { + return await request.post({ url: `/wms/subject-account/create`, data }) +} + +// 修改科目账户配置 +export const updateSubjectAccount = async (data: SubjectAccountVO) => { + return await request.put({ url: `/wms/subject-account/update`, data }) +} + +// 删除科目账户配置 +export const deleteSubjectAccount = async (id: number) => { + return await request.delete({ url: `/wms/subject-account/delete?id=` + id }) +} + +// 导出科目账户配置 Excel +export const exportSubjectAccount = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/subject-account/export-excel-senior`, data }) + }else{ + return await request.download({ url: `/wms/subject-account/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/subject-account/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/supplier/index.ts b/src/api/wms/supplier/index.ts new file mode 100644 index 0000000..33bd05f --- /dev/null +++ b/src/api/wms/supplier/index.ts @@ -0,0 +1,101 @@ +import request from '@/config/axios' + +export interface SupplierVO { + code: string + name: string + shortName: string + address: string + country: string + city: string + phone: string + fax: string + postId: string + contacts: string + bank: string + currency: string + taxRate: number + type: string + available: number + activeTime: Date + expireTime: Date + remark: string +} + +// 查询供应商列表分页 +export const getSupplierPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/wms/supplier/senior', data }) + } else { + return await request.get({ url: `/wms/supplier/page`, params }) + } +} + +// 查询供应商列表分页 +export const getSupplierPageSCP = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/wms/supplier/seniorSCP', data }) + } else { + return await request.get({ url: `/wms/supplier/pageSCP`, params }) + } +} + +// 查询供应商列表 +export const getSupplierList = async (params) => { + return await request.get({ url: `/wms/supplier/list`, params }) +} + +// 查询供应商详情 +export const getSupplier = async (id: number) => { + return await request.get({ url: `/wms/supplier/get?id=` + id }) +} + +// 新增供应商 +export const createSupplier = async (data: SupplierVO) => { + return await request.post({ url: `/wms/supplier/create`, data }) +} + +// 修改供应商 +export const updateSupplier = async (data: SupplierVO) => { + return await request.put({ url: `/wms/supplier/update`, data }) +} + +// 删除供应商 +export const deleteSupplier = async (id: number) => { + return await request.delete({ url: `/wms/supplier/delete?id=` + id }) +} + +// 导出供应商 Excel +export const exportSupplier = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/supplier/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/supplier/export-excel`, params }) + } +} + + +// 导出供应商 Excel +export const exportSupplierSCP = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/supplier/export-excel-senior-SCP`, data }) + } else { + return await request.download({ url: `/wms/supplier/export-excel-SCP`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/supplier/get-import-template' }) +} + +// 根据code获取数据列表 +export const getSupplierListByCodes = async (params) => { + return await request.get({ url: `/wms/supplier/listByCodes`, params }) +} + diff --git a/src/api/wms/supplierApbalanceDetail/index.ts b/src/api/wms/supplierApbalanceDetail/index.ts new file mode 100644 index 0000000..66f6d73 --- /dev/null +++ b/src/api/wms/supplierApbalanceDetail/index.ts @@ -0,0 +1,70 @@ +import request from '@/config/axios' + +export interface SupplierApbalanceDetailVO { + id: number + ttSupplier: string + ttSupplierName: string + ttGlcode: string + ttYear: string + ttVoucher: string + ttReference: string + ttInvoiceno: string + ttTcAmt: number + ttBcAmt: number + ttTcbal: number + ttBcbal: number + ttCurr: string + ttDueDate: Date + ttInvDate: Date + ttEffDate: Date + ttCreditTerm: string + ttGltype: string + masterId: number + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询供应商余额明细子列表 +export const getSupplierApbalanceDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/supplier-apbalance-detail/senior', data }) + } else { + return await request.get({ url: `/wms/supplier-apbalance-detail/page`, params }) + } +} + +// 查询供应商余额明细子详情 +export const getSupplierApbalanceDetail = async (id: number) => { + return await request.get({ url: `/wms/supplier-apbalance-detail/get?id=` + id }) +} + +// 新增供应商余额明细子 +export const createSupplierApbalanceDetail = async (data: SupplierApbalanceDetailVO) => { + return await request.post({ url: `/wms/supplier-apbalance-detail/create`, data }) +} + +// 修改供应商余额明细子 +export const updateSupplierApbalanceDetail = async (data: SupplierApbalanceDetailVO) => { + return await request.put({ url: `/wms/supplier-apbalance-detail/update`, data }) +} + +// 删除供应商余额明细子 +export const deleteSupplierApbalanceDetail = async (id: number) => { + return await request.delete({ url: `/wms/supplier-apbalance-detail/delete?id=` + id }) +} + +// 导出供应商余额明细子 Excel +export const exportSupplierApbalanceDetail = async (params) => { + return await request.download({ url: `/wms/supplier-apbalance-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/supplier-apbalance-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/supplierApbalanceMain/index.ts b/src/api/wms/supplierApbalanceMain/index.ts new file mode 100644 index 0000000..ed7e2f6 --- /dev/null +++ b/src/api/wms/supplierApbalanceMain/index.ts @@ -0,0 +1,72 @@ +import request from '@/config/axios' + +export interface SupplierApbalanceMainVO { + id: number + ttCompany: string + ttSupplier: string + ttGltype: string + ttCustorsupp: string + ttSupplierType: string + ttName1: string + ttName2: string + ttName3: string + ttSupplierName: string + ttGenerateTime: Date + ttAccountAp: number + ttAccountOthap: number + ttAccountPrepay: number + ttCreditTerm: string + departmentCode: string + remark: string + siteId: string + available: string + deletionTime: Date + deleterId: byte[] + concurrencyStamp: number +} + +// 查询供应商余额明细主列表 +export const getSupplierApbalanceMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/supplier-apbalance-main/senior', data }) + } else { + return await request.get({ url: `/wms/supplier-apbalance-main/page`, params }) + } +} + +// 查询供应商余额明细主详情 +export const getSupplierApbalanceMain = async (id: number) => { + return await request.get({ url: `/wms/supplier-apbalance-main/get?id=` + id }) +} + +// 新增供应商余额明细主 +export const createSupplierApbalanceMain = async (data: SupplierApbalanceMainVO) => { + return await request.post({ url: `/wms/supplier-apbalance-main/create`, data }) +} + +// 修改供应商余额明细主 +export const updateSupplierApbalanceMain = async (data: any) => { + return await request.put({ url: `/wms/supplier-apbalance-main/update`, data }) +} + +// 删除供应商余额明细主 +export const deleteSupplierApbalanceMain = async (id: number) => { + return await request.delete({ url: `/wms/supplier-apbalance-main/delete?id=` + id }) +} + +// 导出供应商余额明细主 Excel +export const exportSupplierApbalanceMain = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/supplier-apbalance-main/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/supplier-apbalance-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/supplier-apbalance-main/get-import-template' }) +} diff --git a/src/api/wms/supplierCycle/index.ts b/src/api/wms/supplierCycle/index.ts new file mode 100644 index 0000000..ddaf201 --- /dev/null +++ b/src/api/wms/supplierCycle/index.ts @@ -0,0 +1,65 @@ +import request from '@/config/axios' + +export interface SupplierCycleVO { + id: number + supplierCode: string + monday: string + tuesday: string + wednesday: string + thursday: string + friday: string + saturday: string + sunday: string + version: string + remark: string + extraProperties: string + siteId: string + beginTime: Date + endTime: Date + available: string + status: string + concurrencyStamp: string + ruleUserId: number + departmentCode: string +} + +// 查询要货预测周期列表 +export const getSupplierCyclePage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/supplier-cycle/senior', data }) + } else { + return await request.get({ url: `/wms/supplier-cycle/page`, params }) + } +} + +// 查询要货预测周期详情 +export const getSupplierCycle = async (id: number) => { + return await request.get({ url: `/wms/supplier-cycle/get?id=` + id }) +} + +// 新增要货预测周期 +export const createSupplierCycle = async (data: SupplierCycleVO) => { + return await request.post({ url: `/wms/supplier-cycle/create`, data }) +} + +// 修改要货预测周期 +export const updateSupplierCycle = async (data: SupplierCycleVO) => { + return await request.put({ url: `/wms/supplier-cycle/update`, data }) +} + +// 删除要货预测周期 +export const deleteSupplierCycle = async (id: number) => { + return await request.delete({ url: `/wms/supplier-cycle/delete?id=` + id }) +} + +// 导出要货预测周期 Excel +export const exportSupplierCycle = async (params) => { + return await request.download({ url: `/wms/supplier-cycle/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/supplier-cycle/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/supplierUser/index.ts b/src/api/wms/supplierUser/index.ts new file mode 100644 index 0000000..a7d284e --- /dev/null +++ b/src/api/wms/supplierUser/index.ts @@ -0,0 +1,59 @@ +import request from '@/config/axios' + +export interface SupplierUserVO { + id: number + userId: number + supplierCode: string + status: string + deletionTime: Date + deleterId: string + extraProperties: string + concurrencyStamp: number + remark: string +} + +// 查询供应商用户关联信息列表 +export const getSupplierUserPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/supplier-user/senior', data }) + } else { + return await request.get({ url: `/wms/supplier-user/page`, params }) + } +} + +// 查询供应商用户关联信息详情 +export const getSupplierUser = async (id: number) => { + return await request.get({ url: `/wms/supplier-user/get?id=` + id }) +} + +// 新增供应商用户关联信息 +export const createSupplierUser = async (data: SupplierUserVO) => { + return await request.post({ url: `/wms/supplier-user/create`, data }) +} + +// 修改供应商用户关联信息 +export const updateSupplierUser = async (data: SupplierUserVO) => { + return await request.put({ url: `/wms/supplier-user/update`, data }) +} + +// 删除供应商用户关联信息 +export const deleteSupplierUser = async (id: number) => { + return await request.delete({ url: `/wms/supplier-user/delete?id=` + id }) +} + +// 导出供应商用户关联信息 Excel +export const exportSupplierUser = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/supplier-user/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/supplier-user/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/supplier-user/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/supplierdeliverInspectionDetail/index.ts b/src/api/wms/supplierdeliverInspectionDetail/index.ts new file mode 100644 index 0000000..4f5855e --- /dev/null +++ b/src/api/wms/supplierdeliverInspectionDetail/index.ts @@ -0,0 +1,63 @@ +import request from '@/config/axios' + +export interface SupplierdeliverInspectionDetailVO { + id: number + itemCode: string + uom: string + batch: string + planQty: number + remark: string + extraProperties: string + concurrencyStamp: number + siteId: string +} + +// 查询供应商发货申请质检信息子列表 +export const getSupplierdeliverInspectionDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/supplierdeliver-inspection-detail/senior', data }) + } else { + return await request.get({ url: `/wms/supplierdeliver-inspection-detail/page`, params }) + } +} + +// 查询供应商发货申请质检信息子详情 +export const getSupplierdeliverInspectionDetail = async (id: number) => { + return await request.get({ url: `/wms/supplierdeliver-inspection-detail/get?id=` + id }) +} + +// 查询供应商发货申请质子列表 +export const getSupplierdeliverDetailInfo = async (id: number) => { + return await request.get({ url: `/wms/supplierdeliver-inspection-detail/queryByMasterId?masterId=` + id }) +} + +// 新增供应商发货申请质检信息子 +export const createSupplierdeliverInspectionDetail = async (data: SupplierdeliverInspectionDetailVO) => { + return await request.post({ url: `/wms/supplierdeliver-inspection-detail/create`, data }) +} + +// 修改供应商发货申请质检信息子 +export const updateSupplierdeliverInspectionDetail = async (data: SupplierdeliverInspectionDetailVO) => { + return await request.put({ url: `/wms/supplierdeliver-inspection-detail/update`, data }) +} + +// 删除供应商发货申请质检信息子 +export const deleteSupplierdeliverInspectionDetail = async (id: number) => { + return await request.delete({ url: `/wms/supplierdeliver-inspection-detail/delete?id=` + id }) +} + +// 导出供应商发货申请质检信息子 Excel +export const exportSupplierdeliverInspectionDetail = async (params) => { + return await request.download({ url: `/wms/supplierdeliver-inspection-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/supplierdeliver-inspection-detail/get-import-template' }) +} +// 查看质检报告 +export const queryQualityInspection = (asnNumber:string) => { + return request.get({ url: `/wms/supplierdeliver-request-main/queryQualityInspection?asnNumber=` + asnNumber }) +} diff --git a/src/api/wms/supplierdeliverRecordDetail/index.ts b/src/api/wms/supplierdeliverRecordDetail/index.ts new file mode 100644 index 0000000..2efc8aa --- /dev/null +++ b/src/api/wms/supplierdeliverRecordDetail/index.ts @@ -0,0 +1,98 @@ +import request from '@/config/axios' + +export interface SupplierdeliverRecordDetailVO { + fromPackingNumber: string + toPackingNumber: string + fromBatch: string + altBatch: string + fromContainerNumber: string + toContainerNumber: string + arriveDate: Date + produceDate: Date + expireDate: Date + poNumber: string + poLine: string + packQty: number + packUnit: string + supplierQty: number + supplierUom: string + convertRate: number + fromLocationCode: string + toLocationCode: string + fromLocationGroupCode: string + toLocationGroupCode: string + fromAreaCode: string + toAreaCode: string + fromOwnerCode: string + toOwnerCode: string + projectCode: string + itemCode: string + itemName: string + itemDesc1: string + itemDesc2: string + qty: number + uom: string + number: string + remark: string + createTime: Date + creator: string + jobDetailId: string + toBatch: string +} + +// 查询供应商发货记录子列表 +export const getSupplierdeliverRecordDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/supplierdeliver-record-detail/senior', data }) + } else { + return await request.get({ url: `/wms/supplierdeliver-record-detail/page`, params }) + } +} + +// 查询采供应商发货记录子列表 +export const getSupplierdeliverRecordDetailList = async (params) => { + return await request.get({ url: `/wms/supplierdeliver-record-detail/allList`, params }) +} + +// 查询供应商发货记录子详情 +export const getSupplierdeliverRecordDetail = async (id: number) => { + return await request.get({ url: `/wms/supplierdeliver-record-detail/get?id=` + id }) +} + +// 新增供应商发货记录子 +export const createSupplierdeliverRecordDetail = async (data: SupplierdeliverRecordDetailVO) => { + return await request.post({ url: `/wms/supplierdeliver-record-detail/create`, data }) +} + +// 修改供应商发货记录子 +export const updateSupplierdeliverRecordDetail = async (data: SupplierdeliverRecordDetailVO) => { + return await request.put({ url: `/wms/supplierdeliver-record-detail/update`, data }) +} + +// 删除供应商发货记录子 +export const deleteSupplierdeliverRecordDetail = async (id: number) => { + return await request.delete({ url: `/wms/supplierdeliver-record-detail/delete?id=` + id }) +} + +// 导出供应商发货记录子 Excel +export const exportSupplierdeliverRecordDetail = async (params) => { + return await request.download({ url: `/wms/supplierdeliver-record-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/supplierdeliver-record-detail/get-import-template' }) +} + +// 查询供应商发货记录 +export const queryChildPickingNumber = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/supplierdeliver-record-detail/queryChildPickingNumberSenior', data }) + } else { + return await request.get({ url: `/wms/supplierdeliver-record-detail/queryChildPickingNumberPage`, params }) + } +} \ No newline at end of file diff --git a/src/api/wms/supplierdeliverRecordMain/index.ts b/src/api/wms/supplierdeliverRecordMain/index.ts new file mode 100644 index 0000000..659794f --- /dev/null +++ b/src/api/wms/supplierdeliverRecordMain/index.ts @@ -0,0 +1,88 @@ +import request from '@/config/axios' + +export interface SupplierdeliverRecordMainVO { + requestNumber: string + ppNumber: string + asnNumber: string + supplierCode: string + contactName: string + contactPhone: string + contactEmail: string + fromWarehouseCode: string + toWarehouseCode: string + toDockCode: string + timeWindow: string + planArriveTime: Date + carrierCode: string + transferMode: string + vehiclePlateNumber: string + outTransaction: string + inTransaction: string + executeTime: Date + activeDate: Date + requestTime: Date + dueTime: Date + departmentCode: number + interfaceType: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + serialNumber: string + available: string + purchasereceiptRequestFlag: boolean + purchasereceiptRequestNumber: string +} + +// 查询供应商发货记录主列表 +export const getSupplierdeliverRecordMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/supplierdeliver-record-main/senior', data }) + } else { + return await request.get({ url: `/wms/supplierdeliver-record-main/page`, params }) + } +} + +// 查询供应商发货记录主详情 +export const getSupplierdeliverRecordMain = async (id: number) => { + return await request.get({ url: `/wms/supplierdeliver-record-main/get?id=` + id }) +} + +// 新增供应商发货记录主 +export const createSupplierdeliverRecordMain = async (data: SupplierdeliverRecordMainVO) => { + return await request.post({ url: `/wms/supplierdeliver-record-main/create`, data }) +} + +// 修改供应商发货记录主 +export const updateSupplierdeliverRecordMain = async (data: SupplierdeliverRecordMainVO) => { + return await request.put({ url: `/wms/supplierdeliver-record-main/update`, data }) +} + +// 删除供应商发货记录主 +export const deleteSupplierdeliverRecordMain = async (id: number) => { + return await request.delete({ url: `/wms/supplierdeliver-record-main/delete?id=` + id }) +} + +// 导出供应商发货记录主 Excel +export const exportSupplierdeliverRecordMain = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/supplierdeliver-record-main/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/supplierdeliver-record-main/export-excel`, params }) + } + } + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/supplierdeliver-record-main/get-import-template' }) +} + +// 创建采购申请 +export const createPurchasereceiptRequest = async (number:string) => { + return await request.post({ url: `/wms/supplierdeliver-record-main/createPurchasereceiptRequest?number=`+number }) +} + diff --git a/src/api/wms/supplierdeliverRequestDetail/index.ts b/src/api/wms/supplierdeliverRequestDetail/index.ts new file mode 100644 index 0000000..f610cb2 --- /dev/null +++ b/src/api/wms/supplierdeliverRequestDetail/index.ts @@ -0,0 +1,86 @@ +import request from '@/config/axios' + +export interface SupplierdeliverRequestDetailVO { + packingNumber: string + containerNumber: string + batch: string + altBatch: string + arriveDate: Date + produceDate: Date + expireDate: Date + poNumber: string + poLine: string + packQty: number + packUnit: string + supplierPackQty: number + supplierPackUnit: string + convertRate: number + number: string + itemCode: string + remark: string + createTime: Date + creator: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + updateTime: Date + updater: string + fromOwnerCode: string + toOwnerCode: string +} + + +// 查询供应商发货申请子列表 +export const getSupplierdeliverRequestDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/supplierdeliver-request-detail/senior', data }) + } else { + return await request.get({ url: `/wms/supplierdeliver-request-detail/page`, params }) + } +} +// 查询供应商发货申请子列表 +export const getGenerateLabelList = async (params) => { + return await request.get({ url: `/wms/supplierdeliver-request-detail/generateLabelList`, params }) +} +// 上传履历表 +export const uploadCurriculumVitae = async (data) => { + return await request.post({ url: `/wms/supplierdeliver-inspection-detail1/create`, data }) +} +// 查询托规格列表 +export const getGenerateLabelParentList = async (params) => { + return await request.get({ url: `/wms/supplierdeliver-request-detail/generateLabelParentList`, params }) +} +// 查询供应商发货申请子详情 +export const getSupplierdeliverRequestDetail = async (id: number) => { + return await request.get({ url: `/wms/supplierdeliver-request-detail/get?id=` + id }) +} + +// 新增供应商发货申请子 +export const createSupplierdeliverRequestDetail = async (data: SupplierdeliverRequestDetailVO) => { + return await request.post({ url: `/wms/supplierdeliver-request-detail/create`, data }) +} + +// 修改供应商发货申请子 +export const updateSupplierdeliverRequestDetail = async (data: SupplierdeliverRequestDetailVO) => { + return await request.put({ url: `/wms/supplierdeliver-request-detail/update`, data }) +} + +// 删除供应商发货申请子 +export const deleteSupplierdeliverRequestDetail = async (id: number) => { + return await request.delete({ url: `/wms/supplierdeliver-request-detail/delete?id=` + id }) +} + +// 导出供应商发货申请子 Excel +export const exportSupplierdeliverRequestDetail = async (params) => { + return await request.download({ url: `/wms/supplierdeliver-request-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/supplierdeliver-request-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/supplierdeliverRequestMain/index.ts b/src/api/wms/supplierdeliverRequestMain/index.ts new file mode 100644 index 0000000..f4d4a7b --- /dev/null +++ b/src/api/wms/supplierdeliverRequestMain/index.ts @@ -0,0 +1,132 @@ +import request from '@/config/axios' +import { SupplierdeliverRequestDetailVO } from '../supplierdeliverRequestDetail' + +export interface SupplierdeliverRequestMainVO { + ppNumber: string + asnNumber: string + supplierCode: string + contactName: string + contactPhone: string + contactEmail: string + fromWarehouseCode: string + toWarehouseCode: string + toDockCode: string + timeWindow: string + planArriveTime: Date + carrierCode: string + transferMode: string + vehiclePlateNumber: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + requestTime: Date + dueTime: Date + departmentCode: string + status: string + updateTime: Date + updater: string + autoCommit: string + autoAgree: string + autoExecute: string + directCreateRecord: string + labelStatus: string +} + +// 查询供应商发货申请主列表 +export const getSupplierdeliverRequestMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/supplierdeliver-request-main/senior', data }) + } else { + return await request.get({ url: `/wms/supplierdeliver-request-main/page`, params }) + } +} + +// 查询供应商发货申请主详情 +export const getSupplierdeliverRequestMain = async (id: number) => { + return await request.get({ url: `/wms/supplierdeliver-request-main/get?id=` + id }) +} + +// 新增供应商发货申请主 +export const createSupplierdeliverRequestMain = async (data: SupplierdeliverRequestMainVO) => { + return await request.post({ url: `/wms/supplierdeliver-request-main/create`, data }) +} + +// 修改供应商发货申请主 +export const updateSupplierdeliverRequestMain = async (data: SupplierdeliverRequestMainVO) => { + return await request.put({ url: `/wms/supplierdeliver-request-main/update`, data }) +} + +// 删除供应商发货申请主 +export const deleteSupplierdeliverRequestMain = async (id: number) => { + return await request.delete({ url: `/wms/supplierdeliver-request-main/delete?id=` + id }) +} + +// 打开供应商发货申请主 +export const opeSupplierdeliverRequestMain = async (id: number) => { + return await request.post({ url: `/wms/supplierdeliver-request-main/open?id=` + id }) +} +// 关闭供应商发货申请主 +export const cloSupplierdeliverRequestMain = async (id: number) => { + return await request.post({ url: `/wms/supplierdeliver-request-main/close?id=` + id }) +} +// 提交审批供应商发货申请主 +export const subSupplierdeliverRequestMain = async (id: number) => { + return await request.post({ url: `/wms/supplierdeliver-request-main/sub?id=` + id }) +} +// 审批通过供应商发货申请主 +export const appSupplierdeliverRequestMain = async (id: number) => { + return await request.post({ url: `/wms/supplierdeliver-request-main/app?id=` + id }) +} +// 驳回供应商发货申请主 +export const rejSupplierdeliverRequestMain = async (id: number) => { + return await request.post({ url: `/wms/supplierdeliver-request-main/rej?id=` + id }) +} + +// 校验是否上传自检报告 +export const selfCheckReport = async (id) => { + return await request.post({ url: `/wms/supplierdeliver-request-main/selfCheckReport?id=` + id }) +} + +// 生成标签 +export const genLabel = async (data:SupplierdeliverRequestMainVO) => { + return await request.post({ url: `/wms/supplierdeliver-request-main/genLabel`,data }) +} + +// 校验是否修改了包装数量 +export const checkPackQty = async (data:SupplierdeliverRequestMainVO) => { + return await request.post({ url: `/wms/supplierdeliver-request-main/checkPackQty`,data }) +} + + +// 生成记录 +export const genRecordsSupplierdeliverRequestMain = async (id) => { + return await request.post({ url: `/wms/supplierdeliver-request-main/genRecords?id=` + id }) +} +// 导出供应商发货申请主 Excel +export const exportSupplierdeliverRequestMain = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: '/wms/supplierdeliver-request-main/export-excel-senior', data }) + } else { + return await request.download({url: `/wms/supplierdeliver-request-main/export-excel`, params}) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/supplierdeliver-request-main/get-import-template' }) +} + +// 删除之前的包装和标签 +export const deleteOldLabels = async (id) => { + return await request.post({ url: `/wms/supplierdeliver-request-main/deleteOldLabels?id=` + id }) +} + +// 查看履历表 +export const querySupplierResume = (asnNumber:string) => { + return request.get({ url: `/wms/supplierdeliver-request-main/querySupplierResume?asnNumber=` + asnNumber }) +} \ No newline at end of file diff --git a/src/api/wms/supplierinvoiceInvoiced/index.ts b/src/api/wms/supplierinvoiceInvoiced/index.ts new file mode 100644 index 0000000..2271cdf --- /dev/null +++ b/src/api/wms/supplierinvoiceInvoiced/index.ts @@ -0,0 +1,93 @@ +import request from '@/config/axios' + +export interface SupplierinvoiceInvoicedVO { + id: number + tax: number + projectCode: string + billType: string + recvBillNum: string + asnBillNum: string + supplierCode: string + poNumber: string + poLine: string + purchasePrice: number + invoicableQuantity: number + itemCode: string + uom: string + currency: string + remark: string + deletionTime: Date + deleterId: string + extraProperties: string + concurrencyStamp: number + siteId: string +} + +// 查询待开票列表--日程 +export const getSupplierinvoiceInvoicedPageSchedule = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/supplierinvoice-invoiced/senior', data }) + } else { + return await request.get({ url: `/wms/supplierinvoice-invoiced/page`, params }) + } +} + +// 查询待开票列表--离散 +export const getSupplierinvoiceInvoicedPageDiscrete = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/supplierinvoice-invoiced/seniorDiscrete', data }) + } else { + return await request.get({ url: `/wms/supplierinvoice-invoiced/pageDiscrete`, params }) + } +} + + +// 查询待开票详情 +export const getSupplierinvoiceInvoiced = async (id: number) => { + return await request.get({ url: `/wms/supplierinvoice-invoiced/get?id=` + id }) +} + +// 新增待开票 +export const createSupplierinvoiceInvoiced = async (data: SupplierinvoiceInvoicedVO) => { + return await request.post({ url: `/wms/supplierinvoice-invoiced/create`, data }) +} + +// 修改待开票 +export const updateSupplierinvoiceInvoiced = async (data: SupplierinvoiceInvoicedVO) => { + return await request.put({ url: `/wms/supplierinvoice-invoiced/update`, data }) +} + +// 删除待开票 +export const deleteSupplierinvoiceInvoiced = async (id: number) => { + return await request.delete({ url: `/wms/supplierinvoice-invoiced/delete?id=` + id }) +} + +// 导出待开票 Excel +export const exportSupplierinvoiceInvoicedSchedule = async (params) => { + return await request.download({ url: `/wms/supplierinvoice-invoiced/export-excel-schedule`, params }) +} + + +// 导出待开票 Excel +export const exportSupplierinvoiceInvoicedDiscrete = async (params) => { + return await request.download({ url: `/wms/supplierinvoice-invoiced/export-excel-discrete`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/supplierinvoice-invoiced/get-import-template' }) +} + +// 审批通过待开票 +export const agreeSupplierinvoiceInvoiced = async (id: number) => { + return await request.post({ url: `/wms/supplierinvoice-invoiced/agree?id=` + id }) +} + +// 审批拒绝待开票 +export const refuseSupplierinvoiceInvoiced = async (id: number) => { + return await request.post({ url: `/wms/supplierinvoice-invoiced/refuse?id=` + id }) +} \ No newline at end of file diff --git a/src/api/wms/supplierinvoiceRecordDeatil/index.ts b/src/api/wms/supplierinvoiceRecordDeatil/index.ts new file mode 100644 index 0000000..5c55d7a --- /dev/null +++ b/src/api/wms/supplierinvoiceRecordDeatil/index.ts @@ -0,0 +1,73 @@ +import request from '@/config/axios' + +export interface SupplierinvoiceRecordDeatilVO { + recordNumber: string + packingNumber: string + containerNumber: string + batch: string + altBatch: string + poNumber: string + poLine: string + packQty: number + packUnit: string + supplierQty: number + supplierUom: string + convertRate: number + singlePrice: number + amount: number + number: string + itemCode: string + remark: string + createTime: Date + creator: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + code: string + interfaceType: string + jobDetailId: string +} + +// 查询供应商发票记录子列表 +export const getSupplierinvoiceRecordDeatilPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/supplierinvoice-record-deatil/senior', data }) + } else { + return await request.get({ url: `/wms/supplierinvoice-record-deatil/page`, params }) + } +} + +// 查询供应商发票记录子详情 +export const getSupplierinvoiceRecordDeatil = async (id: number) => { + return await request.get({ url: `/wms/supplierinvoice-record-deatil/get?id=` + id }) +} + +// 新增供应商发票记录子 +export const createSupplierinvoiceRecordDeatil = async (data: SupplierinvoiceRecordDeatilVO) => { + return await request.post({ url: `/wms/supplierinvoice-record-deatil/create`, data }) +} + +// 修改供应商发票记录子 +export const updateSupplierinvoiceRecordDeatil = async (data: SupplierinvoiceRecordDeatilVO) => { + return await request.put({ url: `/wms/supplierinvoice-record-deatil/update`, data }) +} + +// 删除供应商发票记录子 +export const deleteSupplierinvoiceRecordDeatil = async (id: number) => { + return await request.delete({ url: `/wms/supplierinvoice-record-deatil/delete?id=` + id }) +} + +// 导出供应商发票记录子 Excel +export const exportSupplierinvoiceRecordDeatil = async (params) => { + return await request.download({ url: `/wms/supplierinvoice-record-deatil/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/supplierinvoice-record-deatil/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/supplierinvoiceRecordMain/index.ts b/src/api/wms/supplierinvoiceRecordMain/index.ts new file mode 100644 index 0000000..7442e6f --- /dev/null +++ b/src/api/wms/supplierinvoiceRecordMain/index.ts @@ -0,0 +1,89 @@ +import request from '@/config/axios' + +export interface SupplierinvoiceRecordMainVO { + requestNumber: string + supplierCode: string + adjustAmount: number + outTransactionType: string + inTransactionType: string + executeTime: Date + activeDate: Date + requestTime: Date + dueTime: Date + departmentCode: string + interfaceType: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + code: string + available: string +} + +// 查询供应商发票记录主列表 +export const getSupplierinvoiceRecordMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/supplierinvoice-record-main/senior', data }) + } else { + return await request.get({ url: `/wms/supplierinvoice-record-main/page`, params }) + } +} +// 查询供应商发票记录主列表 +export const getSupplierinvoiceRecordMainPageDiscrete = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/supplierinvoice-record-main/seniorDiscrete', data }) + } else { + return await request.get({ url: `/wms/supplierinvoice-record-main/pageDiscrete`, params }) + } +} + +// 查询供应商发票记录主详情 +export const getSupplierinvoiceRecordMain = async (id: number) => { + return await request.get({ url: `/wms/supplierinvoice-record-main/get?id=` + id }) +} + +// 新增供应商发票记录主 +export const createSupplierinvoiceRecordMain = async (data: SupplierinvoiceRecordMainVO) => { + return await request.post({ url: `/wms/supplierinvoice-record-main/create`, data }) +} + +// 修改供应商发票记录主 +export const updateSupplierinvoiceRecordMain = async (data: SupplierinvoiceRecordMainVO) => { + return await request.put({ url: `/wms/supplierinvoice-record-main/update`, data }) +} + +// 删除供应商发票记录主 +export const deleteSupplierinvoiceRecordMain = async (id: number) => { + return await request.delete({ url: `/wms/supplierinvoice-record-main/delete?id=` + id }) +} + +// 发票回转 +export const reverseSupplierinvoiceRecordMain = async (data: SupplierinvoiceRecordMainVO) => { + return await request.post({ url: `/wms/supplierinvoice-record-main/reverse`, data }) +} + + +// 导出供应商发票记录主 Excel +export const exportSupplierinvoiceRecordMain = async (params) => { + console.log(params) + if (params.isSearch) { + const data = { ...params } + return await request.downloadPost({ url: `/wms/supplierinvoice-record-main/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/supplierinvoice-record-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/supplierinvoice-record-main/get-import-template' }) +} + +export const exportSupplierinvoiceRecordDetail = async (params) => { + return await request.download({ url: `/wms/supplierinvoice-record-deatil/export-excel`, params }) +} diff --git a/src/api/wms/supplierinvoiceRequestDetail/index.ts b/src/api/wms/supplierinvoiceRequestDetail/index.ts new file mode 100644 index 0000000..cab62a1 --- /dev/null +++ b/src/api/wms/supplierinvoiceRequestDetail/index.ts @@ -0,0 +1,82 @@ +import request from '@/config/axios' + +export interface SupplierinvoiceRequestDetailVO { + recordNumber: string + ownerCode: string + packingNumber: string + containerNumber: string + batch: string + altBatch: string + poNumber: string + poLine: string + packQty: number + packUnit: string + supplierPackQty: number + supplierPackUnit: string + convertRate: number + singlePrice: number + amount: number + number: string + itemCode: string + remark: string + createTime: Date + creator: string +} + +// 查询供应商发票申请子列表 +export const getSupplierinvoiceRequestDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/supplierinvoice-request-detail/senior', data }) + } else { + return await request.get({ url: `/wms/supplierinvoice-request-detail/page`, params }) + } +} + +// 查询供应商发票申请主详情 +export const getPoNumber = async (params) => { + return await request.get({ url: `/wms/supplierinvoice-request-detail/getPoNumber`, params}) +} + +// 查询供应商发票明细数据 +export const getPoNumberPoLineInfo = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: `/wms/supplierinvoice-request-detail/getInvoicedSenior`, data}) + }else{ + return await request.get({ url: `/wms/supplierinvoice-request-detail/getInvoicedPage`, params}) + } +} + + +// 查询供应商发票申请子详情 +export const getSupplierinvoiceRequestDetail = async (id: number) => { + return await request.get({ url: `/wms/supplierinvoice-request-detail/get?id=` + id }) +} + +// 新增供应商发票申请子 +export const createSupplierinvoiceRequestDetail = async (data) => { + return await request.post({ url: `/wms/supplierinvoice-request-detail/create`, data }) +} + +// 修改供应商发票申请子 +export const updateSupplierinvoiceRequestDetail = async (data: SupplierinvoiceRequestDetailVO) => { + return await request.put({ url: `/wms/supplierinvoice-request-detail/update`, data }) +} + +// 删除供应商发票申请子 +export const deleteSupplierinvoiceRequestDetail = async (id: number) => { + return await request.delete({ url: `/wms/supplierinvoice-request-detail/delete?id=` + id }) +} + +// 导出供应商发票申请子 Excel +export const exportSupplierinvoiceRequestDetail = async (params) => { + return await request.download({ url: `/wms/supplierinvoice-request-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/supplierinvoice-request-detail/get-import-template' }) +} diff --git a/src/api/wms/supplierinvoiceRequestMain/index.ts b/src/api/wms/supplierinvoiceRequestMain/index.ts new file mode 100644 index 0000000..4330d5a --- /dev/null +++ b/src/api/wms/supplierinvoiceRequestMain/index.ts @@ -0,0 +1,159 @@ +import request from '@/config/axios' + +export interface SupplierinvoiceRequestMainVO { + supplierCode: string + adjustAmount: number + number: string + businessType: string + remark: string + createTime: Date + creator: string + requestTime: Date + dueTime: Date + departmentCode: string + status: string + updateTime: Date + updater: string + autoCommit: string + autoAgree: string + autoExecute: string + directCreateRecord: string +} + +// 查询供应商发票申请主列表 +export const getSupplierinvoiceRequestMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/supplierinvoice-request-main/senior', data }) + } else { + return await request.get({ url: `/wms/supplierinvoice-request-main/page`, params }) + } +} + +// 查询供应商发票申请主详情 +export const getSupplierinvoiceRequestMain = async (id: number) => { + return await request.get({ url: `/wms/supplierinvoice-request-main/get?id=` + id }) +} + +// 查询供应商发票申请主详情 +export const getNumber = async (params) => { + return await request.get({ url: `/wms/supplierinvoice-request-main/getNumber`, params}) +} + +// 新增供应商发票申请主 +export const createSupplierinvoiceRequestMain = async (data: SupplierinvoiceRequestMainVO) => { + return await request.post({ url: `/wms/supplierinvoice-request-main/create`, data }) +} + +// 修改供应商发票申请主 +export const updateSupplierinvoiceRequestMain = async (data: SupplierinvoiceRequestMainVO) => { + return await request.put({ url: `/wms/supplierinvoice-request-main/update`, data }) +} + +// 删除供应商发票申请主 +export const deleteSupplierinvoiceRequestMain = async (id: number) => { + return await request.delete({ url: `/wms/supplierinvoice-request-main/delete?id=` + id }) +} + +// 校验控制是否可以开票逻辑 +export const checkInvoicingCalendar = async (params) => { + return await request.get({ url: `/wms/supplierinvoice-request-main/checkInvoicingCalendar`, params }) +} + + +// 打开供应商发货申请主 +export const opeSupplierinvoiceRequestMain = async (id: number) => { + return await request.post({ url: `/wms/supplierinvoice-request-main/open?id=` + id }) +} +// 关闭供应商发货申请主 +export const cloSupplierinvoiceRequestMain = async (id: number) => { + return await request.post({ url: `/wms/supplierinvoice-request-main/close?id=` + id }) +} +// 提交审批供应商发货申请主 +export const subSupplierinvoiceRequestMain = async (id: number) => { + return await request.post({ url: `/wms/supplierinvoice-request-main/sub?id=` + id }) +} +// 采购--审批通过供应商发货申请主 +export const appSupplierinvoiceRequestMain = async (id: number,balanceStatement:any) => { + return await request.post({ url: `/wms/supplierinvoice-request-main/app?id=` + id+ (balanceStatement?'&balanceStatement=' + balanceStatement:'')}) +} +// 采购--驳回供应商发货申请主 +export const rejSupplierinvoiceRequestMain = async (data) => { + return await request.post({ url: `/wms/supplierinvoice-request-main/rej`,data }) +} + +// 供应商--发票寄出 +export const invoiceSentOutSupplierinvoiceRequestMain = async (id: number) => { + return await request.post({ url: `/wms/supplierinvoice-request-main/invoiceSentOut?id=` + id }) +} + +// 财务--审批通过供应商发货申请主 +export const financeappSupplierinvoiceRequestMain = async (data) => { + return await request.post({ url: `/wms/supplierinvoice-request-main/financeApp`, data }) +} +// 财务--驳回供应商发货申请主 +export const financerejSupplierinvoiceRequestMain = async (data) => { + return await request.post({ url: `/wms/supplierinvoice-request-main/financeRej`, data }) +} + +// 作废--供应商发货申请主 +export const repealSupplierinvoiceRequestMain = async (id: number) => { + return await request.post({ url: `/wms/supplierinvoice-request-main/repeal?id=` + id }) +} + +// 生成记录 +export const genRecordsSupplierinvoiceRequestMain = async (id) => { + return await request.post({ url: `/wms/supplierinvoice-request-main/genRecords?id=` + id }) +} + +// 打印单挑供应商发货记录 +export const printSupplierRecord = async (asnBillNum:string) => { + return await request.post({ url: `/wms/supplierinvoice-request-main/querySupplierRecord?asnBillNum=`+asnBillNum }) +} + +// 打印单挑供应商发货记录 +export const printSupplierRecordByMasterId = async (masterId:number) => { + return await request.post({ url: `/wms/supplierinvoice-request-main/querySupplierRecordByMasterId?masterId=`+masterId }) +} + +// 导出供应商发票申请主 Excel +export const exportSupplierinvoiceRequestMain = async (data) => { + if(data.isSearch){ + return await request.downloadPost({ url: `/wms/supplierinvoice-request-main/export-excel-senior`, data }) + }else { + return await request.downloadPost({ url: `/wms/supplierinvoice-request-main/export-excel`, data }) + } +} + +// 导出供应商发票申请明细 Excel +export const exportSupplierinvoiceRequestDetail = async (params) => { + return await request.download({ url: `/wms/supplierinvoice-request-main/export-excel-detail`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/supplierinvoice-request-main/get-import-template' }) +} + +// 根据角色编码获取用户列表 +export const queryUserInfoByRoleCode = async (params) => { + return await request.get({ url: `/wms/supplierinvoice-request-main/queryUserInfoByRoleCodePage`, params }) + +} +// 获取供应商角色 +export const getLoginUserRoleList = async () => { + return await request.get({ url: `/wms/supplierinvoice-request-main/getLoginUserRoleList`}) + +} + +// 编辑的时候计算主表系统税额 +export const getTaxAmount = async ({id,taxRate}) => { + return await request.get({ url: `/wms/supplierinvoice-request-main/computeById?id=${id}&taxRate=${taxRate}`}) + +} +// 采购离散订单查看-点击未读按钮 +export const getDiscreteIsRead = async ({id}) => { + return await request.get({ url: `/wms/supplierinvoice-record-main/discreteIsRead?id=${id}`}) + +} \ No newline at end of file diff --git a/src/api/wms/supplieritem/index.ts b/src/api/wms/supplieritem/index.ts new file mode 100644 index 0000000..2744693 --- /dev/null +++ b/src/api/wms/supplieritem/index.ts @@ -0,0 +1,119 @@ +import request from '@/config/axios' + +export interface SupplieritemVO { + supplierCode: string + itemCode: string + supplierItemCode: string + supplierUom: string + convertRate: number + packUnit: string + packQty: number + altPackUnit: string + altPackQty: number + packQtyOfContainer: number + defaultWarehouseCode: string + defaultLocationCode: string + settlementType: string + available: number + activeTime: Date + expireTime: Date + remark: string +} + +// 查询供应商物料列表 +export const getSupplieritemPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/wms/supplieritem/senior', data }) + } else { + return await request.get({ url: `/wms/supplieritem/page`, params }) + } +} + +// 查询供应商物料列表 +export const getSupplieritemPageSCP = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/wms/supplieritem/seniorSCP', data }) + } else { + return await request.get({ url: `/wms/supplieritem/pageSCP`, params }) + } +} + +// 查询供应商物料详情 +export const getSupplieritem = async (id: number) => { + return await request.get({ url: `/wms/supplieritem/get?id=` + id }) +} + +// 新增供应商物料 +export const createSupplieritem = async (data: SupplieritemVO) => { + return await request.post({ url: `/wms/supplieritem/create`, data }) +} +export const createSupplieritemSCP = async (data: SupplieritemVO) => { + return await request.post({ url: `/wms/supplieritem/createSCP`, data }) +} + +// 修改供应商物料 +export const updateSupplieritem = async (data: SupplieritemVO) => { + return await request.put({ url: `/wms/supplieritem/update`, data }) +} +// 修改供应商物料 +export const updateSupplieritemSCP = async (data: SupplieritemVO) => { + return await request.put({ url: `/wms/supplieritem/updateSCP`, data }) +} + +// 删除供应商物料 +export const deleteSupplieritem = async (id: number) => { + return await request.delete({ url: `/wms/supplieritem/delete?id=` + id }) +} +export const deleteSupplieritemSCP = async (id: number) => { + return await request.delete({ url: `/wms/supplieritem/deleteSCP?id=` + id }) +} + + +// 导出供应商物料 Excel +export const exportSupplieritem = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/supplieritem/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/supplieritem/export-excel`, params }) + } +} + +// 导出供应商物料 Excel +export const exportSupplieritemSCP = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/supplieritem/export-excel-senior-SCP`, data }) + } else { + return await request.download({ url: `/wms/supplieritem/export-excel-SCP`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/supplieritem/get-import-template' }) +} + +// 查询供应商物料列表 +export const selectItembasicTypeToSupplieritem = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.post({ url: `/wms/supplieritem/pageItembasicTypeToSupplieritemSenior`, data }) + } else { + return await request.get({ url: `/wms/supplieritem/pageItembasicTypeToSupplieritem`, params }) + } +} + +export const getDefaultLocationCode = async(data: SupplieritemVO)=> { + return await request.post({ url: `/wms/supplieritem/getDefaultLocationCode`, data }) +} + + +// 根据code获取数据列表 +export const getSupplierItemListByCodes = async (data) => { + return await request.get({ url: `/wms/supplieritem/listByCodes?supplierCode=`+data.supplierCode +'&itemCodes='+data.itemCodes }) +} diff --git a/src/api/wms/switch/index.ts b/src/api/wms/switch/index.ts new file mode 100644 index 0000000..fa520e9 --- /dev/null +++ b/src/api/wms/switch/index.ts @@ -0,0 +1,56 @@ +import request from '@/config/axios' + +export interface SwitchVO { + id: number + code: string + description: string + effectiveSetValue: string + available: string +} + +// 查询单据开关列表 +export const getSwitchPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/switch/senior', data }) + } else { + return await request.get({ url: `/wms/switch/page`, params }) + } +} + +// 查询单据开关详情 +export const getSwitch = async (id: number) => { + return await request.get({ url: `/wms/switch/get?id=` + id }) +} + +// 查询单据开关详情 +export const getByCode = async (code) => { + return await request.get({ url: `/wms/switch/getByCode?code=` + code }) +} + + +// 新增单据开关 +export const createSwitch = async (data: SwitchVO) => { + return await request.post({ url: `/wms/switch/create`, data }) +} + +// 修改单据开关 +export const updateSwitch = async (data: SwitchVO) => { + return await request.put({ url: `/wms/switch/update`, data }) +} + +// 删除单据开关 +export const deleteSwitch = async (id: number) => { + return await request.delete({ url: `/wms/switch/delete?id=` + id }) +} + +// 导出单据开关 Excel +export const exportSwitch = async (params) => { + return await request.download({ url: `/wms/switch/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/switch/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/systemInstallPackage/index.ts b/src/api/wms/systemInstallPackage/index.ts new file mode 100644 index 0000000..b92b096 --- /dev/null +++ b/src/api/wms/systemInstallPackage/index.ts @@ -0,0 +1,57 @@ +import request from '@/config/axios' + +export interface SystemInstallPackageVO { + id: number + installPackageName: string + installPackageVersion: number + installPackageUrl: string + isForcedUpdate: string + updateContent: string + remark: string +} + +// 查询安装包信息列表 +export const getSystemInstallPackagePage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/system-install-package/senior', data }) + } else { + return await request.get({ url: `/wms/system-install-package/page`, params }) + } +} + +// 查询安装包信息详情 +export const getSystemInstallPackage = async (id: number) => { + return await request.get({ url: `/wms/system-install-package/get?id=` + id }) +} + +// 新增安装包信息 +export const createSystemInstallPackage = async (data: SystemInstallPackageVO) => { + return await request.post({ url: `/wms/system-install-package/create`, data }) +} + +// 修改安装包信息 +export const updateSystemInstallPackage = async (data: SystemInstallPackageVO) => { + return await request.put({ url: `/wms/system-install-package/update`, data }) +} + +// 删除安装包信息 +export const deleteSystemInstallPackage = async (id: number) => { + return await request.delete({ url: `/wms/system-install-package/delete?id=` + id }) +} + +// 导出安装包信息 Excel +export const exportSystemInstallPackage = async (params) => { + return await request.download({ url: `/wms/system-install-package/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/system-install-package/get-import-template' }) +} + +// 返回最新版本安装包信息 +export const returnNewFileSystemInstallPackage = async (data: SystemInstallPackageVO) => { + return await request.post({ url: `/wms/system-install-package/returnNewFile`, data }) +} \ No newline at end of file diff --git a/src/api/wms/systemcalendar/index.ts b/src/api/wms/systemcalendar/index.ts new file mode 100644 index 0000000..0499f49 --- /dev/null +++ b/src/api/wms/systemcalendar/index.ts @@ -0,0 +1,57 @@ +import request from '@/config/axios' + +export interface SystemcalendarVO { + module: string + startTime: Date + stopTime: Date + available: number + activeTime: Date + expireTime: Date + remark: string +} + +// 查询系统日历列表 +export const getSystemcalendarPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/wms/systemcalendar/senior', data }) + } else { + return await request.get({ url: `/wms/systemcalendar/page`, params }) + } +} + +// 查询系统日历详情 +export const getSystemcalendar = async (id: number) => { + return await request.get({ url: `/wms/systemcalendar/get?id=` + id }) +} + +// 新增系统日历 +export const createSystemcalendar = async (data: SystemcalendarVO) => { + return await request.post({ url: `/wms/systemcalendar/create`, data }) +} + +// 修改系统日历 +export const updateSystemcalendar = async (data: SystemcalendarVO) => { + return await request.put({ url: `/wms/systemcalendar/update`, data }) +} + +// 删除系统日历 +export const deleteSystemcalendar = async (id: number) => { + return await request.delete({ url: `/wms/systemcalendar/delete?id=` + id }) +} + +// 导出系统日历 Excel +export const exportSystemcalendar = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/systemcalendar/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/systemcalendar/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/systemcalendar/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/team/index.ts b/src/api/wms/team/index.ts new file mode 100644 index 0000000..ea1ee0a --- /dev/null +++ b/src/api/wms/team/index.ts @@ -0,0 +1,74 @@ +import request from '@/config/axios' + +export interface TeamVO { + code: string + name: string + description: string + members: string + activeTime: Date + expireTime: Date + remark: string + available: string + teamGroup: string + workshopCode: string + productionLineCode: string + teamMonitorCode: string + teamMonitorName: string +} + +// 查询班组列表 +export const getTeamPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/wms/team/senior', data }) + } else { + return await request.get({ url: `/wms/team/page`, params }) + } +} + +export const geTeamUserByCode = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/wms/team/queryTeamUserByCode', data }) + } + // else { + // return await request.get({ url: `/wms/team/queryTeamUserByCode`, params }) + // } +} + +// 查询班组详情 +export const getTeam = async (id: number) => { + return await request.get({ url: `/wms/team/get?id=` + id }) +} + +// 新增班组 +export const createTeam = async (data: TeamVO) => { + return await request.post({ url: `/wms/team/create`, data }) +} + +// 修改班组 +export const updateTeam = async (data: TeamVO) => { + return await request.put({ url: `/wms/team/update`, data }) +} + +// 删除班组 +export const deleteTeam = async (id: number) => { + return await request.delete({ url: `/wms/team/delete?id=` + id }) +} + +// 导出班组 Excel +export const exportTeam = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/team/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/team/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/team/get-import-template' }) +} diff --git a/src/api/wms/transaction/index.ts b/src/api/wms/transaction/index.ts new file mode 100644 index 0000000..1581755 --- /dev/null +++ b/src/api/wms/transaction/index.ts @@ -0,0 +1,77 @@ +import request from '@/config/axios' + +export interface TransactionVO { + number: string + transactionType: string + inventoryAction: string + worker: string + businessType: string + recordNumber: string + activeTime: Date + itemCode: string + batch: string + inventoryStatus: string + uom: string + qty: number + singlePrice: number + amount: number + altBatch: string + arriveDate: Date + produceDate: Date + expireDate: Date + packingNumber: string + containerNumber: string + locationCode: string + warehouseCode: string + areaCode: string + locationGroupCode: string + erpLocationCode: string + ownerCode: string +} + +// 查询库存事务列表 +export const getTransactionPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/transaction/senior', data }) + } else { + return await request.get({ url: `/wms/transaction/page`, params }) + } +} + +// 查询库存事务详情 +export const getTransaction = async (id: number) => { + return await request.get({ url: `/wms/transaction/get?id=` + id }) +} + +// 新增库存事务 +export const createTransaction = async (data: TransactionVO) => { + return await request.post({ url: `/wms/transaction/create`, data }) +} + +// 修改库存事务 +export const updateTransaction = async (data: TransactionVO) => { + return await request.put({ url: `/wms/transaction/update`, data }) +} + +// 删除库存事务 +export const deleteTransaction = async (id: number) => { + return await request.delete({ url: `/wms/transaction/delete?id=` + id }) +} + +// 导出库存事务 Excel +export const exportTransaction = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/transaction/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/transaction/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/transaction/get-import-template' }) +} diff --git a/src/api/wms/transactiontype/index.ts b/src/api/wms/transactiontype/index.ts new file mode 100644 index 0000000..8b30d08 --- /dev/null +++ b/src/api/wms/transactiontype/index.ts @@ -0,0 +1,67 @@ +import request from '@/config/axios' + +export interface TransactiontypeVO { + code: string + name: string + description: string + inventoryAction: string + activeTime: Date + expireTime: Date + remark: string + allowNegative: string + available: string + isSoftDeleted: string +} + +// 查询事务类型列表 +export const getTransactiontypePage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/wms/transactiontype/senior', data }) + } else { + return await request.get({ url: `/wms/transactiontype/page`, params }) + } +} + +// 校验事务类型列表 +export const verifyTransactiontype = async (params) => { + return await request.get({ url: `/wms/transactiontype/ListByCode`, params }) +} + + +// 查询事务类型详情 +export const getTransactiontype = async (id: number) => { + return await request.get({ url: `/wms/transactiontype/get?id=` + id }) +} + +// 新增事务类型 +export const createTransactiontype = async (data: TransactiontypeVO) => { + return await request.post({ url: `/wms/transactiontype/create`, data }) +} + +// 修改事务类型 +export const updateTransactiontype = async (data: TransactiontypeVO) => { + return await request.put({ url: `/wms/transactiontype/update`, data }) +} + +// 删除事务类型 +export const deleteTransactiontype = async (id: number) => { + return await request.delete({ url: `/wms/transactiontype/delete?id=` + id }) +} + +// 导出事务类型 Excel +export const exportTransactiontype = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.downloadPost({ url: '/wms/transactiontype/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/transactiontype/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/transactiontype/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/transferissueJobDetail/index.ts b/src/api/wms/transferissueJobDetail/index.ts new file mode 100644 index 0000000..3837dcb --- /dev/null +++ b/src/api/wms/transferissueJobDetail/index.ts @@ -0,0 +1,64 @@ +import request from '@/config/axios' + +export interface TransferissueJobDetailVO { + packingNumber: string + containerNumber: string + batch: string + inventoryStatus: string + fromLocationCode: string + toLocationCode: string + itemCode: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + number: string + remark: string + createTime: Date + creator: string + fromOwnerCode: string + toOwnerCode: string +} + +// 查询调拨出库任务子列表 +export const getTransferissueJobDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/transferissue-job-detail/senior', data }) + } else { + return await request.get({ url: `/wms/transferissue-job-detail/page`, params }) + } +} + +// 查询调拨出库任务子详情 +export const getTransferissueJobDetail = async (id: number) => { + return await request.get({ url: `/wms/transferissue-job-detail/get?id=` + id }) +} + +// 新增调拨出库任务子 +export const createTransferissueJobDetail = async (data: TransferissueJobDetailVO) => { + return await request.post({ url: `/wms/transferissue-job-detail/create`, data }) +} + +// 修改调拨出库任务子 +export const updateTransferissueJobDetail = async (data: TransferissueJobDetailVO) => { + return await request.put({ url: `/wms/transferissue-job-detail/update`, data }) +} + +// 删除调拨出库任务子 +export const deleteTransferissueJobDetail = async (id: number) => { + return await request.delete({ url: `/wms/transferissue-job-detail/delete?id=` + id }) +} + +// 导出调拨出库任务子 Excel +export const exportTransferissueJobDetail = async (params) => { + return await request.download({ url: `/wms/transferissue-job-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/transferissue-job-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/transferissueJobMain/index.ts b/src/api/wms/transferissueJobMain/index.ts new file mode 100644 index 0000000..5646458 --- /dev/null +++ b/src/api/wms/transferissueJobMain/index.ts @@ -0,0 +1,107 @@ +import request from '@/config/axios' + +export interface TransferissueJobMainVO { + requestNumber: string + deliverDock: string + carrierCode: string + transferMode: string + vehiclePlateNumber: string + fromWarehouseCode: string + toWarehouseCode: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + requestTime: Date + requestDueTime: Date + status: string + expiredTime: Date + updateTime: Date + updater: string + jobStageStatus: string + priority: number + priorityIncrement: number + departmentCode: string + acceptUserId: string + acceptTime: Date + completeUserId: string + completeTime: Date + fromAreaTypes: string + toAreaTypes: string + fromAreaCodes: string + fromDockCode: string + toAreaCodes: string + autoComplete: string + allowModifyLocation: string + allowModifyQty: string + allowBiggerQty: string + allowSmallerQty: string + allowModifyInventoryStatus: string + allowContinuousScanning: string + allowPartialComplete: string + allowModifyBatch: string + allowModifyPackingNumber: string +} + +// 查询调拨出库任务主列表 +export const getTransferissueJobMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/transferissue-job-main/senior', data }) + } else { + return await request.get({ url: `/wms/transferissue-job-main/page`, params }) + } +} + +// 查询调拨出库任务主详情 +export const getTransferissueJobMain = async (id: number) => { + return await request.get({ url: `/wms/transferissue-job-main/get?id=` + id }) +} + +// 新增调拨出库任务主 +export const createTransferissueJobMain = async (data: TransferissueJobMainVO) => { + return await request.post({ url: `/wms/transferissue-job-main/create`, data }) +} + +// 修改调拨出库任务主 +export const updateTransferissueJobMain = async (data: TransferissueJobMainVO) => { + return await request.put({ url: `/wms/transferissue-job-main/update`, data }) +} + +// 删除调拨出库任务主 +export const deleteTransferissueJobMain = async (id: number) => { + return await request.delete({ url: `/wms/transferissue-job-main/delete?id=` + id }) +} + +// 导出调拨出库任务主 Excel +export const exportTransferissueJobMain = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/transferissue-job-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/transferissue-job-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/transferissue-job-main/get-import-template' }) +} + +// 关闭-调拨出库任务主 +export const closeTransferissueJobMain = (id: number) => { + return request.put({ url: '/wms/transferissue-job-main/close?id=' + id }) +} + +// 承接-调拨出库任务主 +export const acceptTransferissueJobMain = (id: number) => { + return request.put({ url: '/wms/transferissue-job-main/accept?id=' + id }) +} + +// 放弃-调拨出库任务主 +export const abandonTransferissueJobMain = (id: number) => { + return request.put({ url: '/wms/transferissue-job-main/abandon?id=' + id }) +} diff --git a/src/api/wms/transferissueRecordDetail/index.ts b/src/api/wms/transferissueRecordDetail/index.ts new file mode 100644 index 0000000..507b9aa --- /dev/null +++ b/src/api/wms/transferissueRecordDetail/index.ts @@ -0,0 +1,74 @@ +import request from '@/config/axios' + +export interface TransferissueRecordDetailVO { + fromBatch: string + inventoryStatus: string + fromOwnerCode: string + fromLocationCode: string + fromLocationGroupCode: string + fromAreaCode: string + toOwnerCode: string + toLocationCode: string + toLocationGroupCode: string + toAreaCode: string + code: string + interfaceType: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + number: string + itemCode: string + remark: string + createTime: Date + creator: string + jobDetailId: string + fromPackingNumber: string + toPackingNumber: string + fromContainerNumber: string + toContainerNumber: string + toBatch: string +} + +// 查询调拨出库记录子列表 +export const getTransferissueRecordDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/transferissue-record-detail/senior', data }) + } else { + return await request.get({ url: `/wms/transferissue-record-detail/page`, params }) + } +} + +// 查询调拨出库记录子详情 +export const getTransferissueRecordDetail = async (id: number) => { + return await request.get({ url: `/wms/transferissue-record-detail/get?id=` + id }) +} + +// 新增调拨出库记录子 +export const createTransferissueRecordDetail = async (data: TransferissueRecordDetailVO) => { + return await request.post({ url: `/wms/transferissue-record-detail/create`, data }) +} + +// 修改调拨出库记录子 +export const updateTransferissueRecordDetail = async (data: TransferissueRecordDetailVO) => { + return await request.put({ url: `/wms/transferissue-record-detail/update`, data }) +} + +// 删除调拨出库记录子 +export const deleteTransferissueRecordDetail = async (id: number) => { + return await request.delete({ url: `/wms/transferissue-record-detail/delete?id=` + id }) +} + +// 导出调拨出库记录子 Excel +export const exportTransferissueRecordDetail = async (params) => { + return await request.download({ url: `/wms/transferissue-record-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/transferissue-record-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/transferissueRecordMain/index.ts b/src/api/wms/transferissueRecordMain/index.ts new file mode 100644 index 0000000..fc41241 --- /dev/null +++ b/src/api/wms/transferissueRecordMain/index.ts @@ -0,0 +1,78 @@ +import request from '@/config/axios' + +export interface TransferissueRecordMainVO { + requestNumber: string + jobNumber: string + carrierCode: string + transferMode: string + vehiclePlateNumber: string + fromWarehouseCode: string + toWarehouseCode: string + code: string + interfaceType: string + outTransactionType: string + inTransactionType: string + executeTime: Date + activeDate: Date + requestTime: Date + dueTime: Date + departmentCode: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + fromDockCode: string + fromAreaTypes: string + fromAreaCodes: string + toAreaTypes: string + toAreaCodes: string + available: string +} + +// 查询调拨出库记录主列表 +export const getTransferissueRecordMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/transferissue-record-main/senior', data }) + } else { + return await request.get({ url: `/wms/transferissue-record-main/page`, params }) + } +} + +// 查询调拨出库记录主详情 +export const getTransferissueRecordMain = async (id: number) => { + return await request.get({ url: `/wms/transferissue-record-main/get?id=` + id }) +} + +// 新增调拨出库记录主 +export const createTransferissueRecordMain = async (data: TransferissueRecordMainVO) => { + return await request.post({ url: `/wms/transferissue-record-main/create`, data }) +} + +// 修改调拨出库记录主 +export const updateTransferissueRecordMain = async (data: TransferissueRecordMainVO) => { + return await request.put({ url: `/wms/transferissue-record-main/update`, data }) +} + +// 删除调拨出库记录主 +export const deleteTransferissueRecordMain = async (id: number) => { + return await request.delete({ url: `/wms/transferissue-record-main/delete?id=` + id }) +} + +// 导出调拨出库记录主 Excel +export const exportTransferissueRecordMain = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/transferissue-record-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/transferissue-record-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/transferissue-record-main/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/transferissueRequestDetail/index.ts b/src/api/wms/transferissueRequestDetail/index.ts new file mode 100644 index 0000000..fc8fde3 --- /dev/null +++ b/src/api/wms/transferissueRequestDetail/index.ts @@ -0,0 +1,67 @@ +import request from '@/config/axios' + +export interface TransferissueRequestDetailVO { + packingNumber: string + containerNumber: string + batch: string + inventoryStatus: string + toOwnerCode: string + toLocationCode: string + number: string + itemCode: string + remark: string + createTime: Date + creator: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + updateTime: Date + updater: string + fromOwnerCode: string + fromLocationCode: string + reason: string +} + +// 查询调拨出库申请子列表 +export const getTransferissueRequestDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/transferissue-request-detail/senior', data }) + } else { + return await request.get({ url: `/wms/transferissue-request-detail/page`, params }) + } +} + +// 查询调拨出库申请子详情 +export const getTransferissueRequestDetail = async (id: number) => { + return await request.get({ url: `/wms/transferissue-request-detail/get?id=` + id }) +} + +// 新增调拨出库申请子 +export const createTransferissueRequestDetail = async (data: TransferissueRequestDetailVO) => { + return await request.post({ url: `/wms/transferissue-request-detail/create`, data }) +} + +// 修改调拨出库申请子 +export const updateTransferissueRequestDetail = async (data: TransferissueRequestDetailVO) => { + return await request.put({ url: `/wms/transferissue-request-detail/update`, data }) +} + +// 删除调拨出库申请子 +export const deleteTransferissueRequestDetail = async (id: number) => { + return await request.delete({ url: `/wms/transferissue-request-detail/delete?id=` + id }) +} + +// 导出调拨出库申请子 Excel +export const exportTransferissueRequestDetail = async (params) => { + return await request.download({ url: `/wms/transferissue-request-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/transferissue-request-detail/get-import-template' }) +} diff --git a/src/api/wms/transferissueRequestMain/index.ts b/src/api/wms/transferissueRequestMain/index.ts new file mode 100644 index 0000000..5e08ee1 --- /dev/null +++ b/src/api/wms/transferissueRequestMain/index.ts @@ -0,0 +1,106 @@ +import request from '@/config/axios' + +export interface TransferissueRequestMainVO { + carrierCode: string + transferMode: string + vehiclePlateNumber: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + requestTime: Date + dueTime: Date + departmentCode: string + status: string + updateTime: Date + updater: string + fromWarehouseCode: string + fromDockCode: string + fromAreaTypes: string + fromAreaCodes: string + toWarehouseCode: string + toAreaTypes: string + toAreaCodes: string + autoCommit: string + autoAgree: string + autoExecute: string + directCreateRecord: string +} + +// 查询调拨出库申请主列表 +export const getTransferissueRequestMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/transferissue-request-main/senior', data }) + } else { + return await request.get({ url: `/wms/transferissue-request-main/page`, params }) + } +} + +// 查询调拨出库申请主详情 +export const getTransferissueRequestMain = async (id: number) => { + return await request.get({ url: `/wms/transferissue-request-main/get?id=` + id }) +} + +// 新增-调拨出库申请主 +export const createTransferissueRequestMain = async (data: TransferissueRequestMainVO) => { + return await request.post({ url: `/wms/transferissue-request-main/create`, data }) +} + +// 修改-调拨出库申请主 +export const updateTransferissueRequestMain = async (data: TransferissueRequestMainVO) => { + return await request.put({ url: `/wms/transferissue-request-main/update`, data }) +} + +// 删除-调拨出库申请主 +export const deleteTransferissueRequestMain = async (id: number) => { + return await request.delete({ url: `/wms/transferissue-request-main/delete?id=` + id }) +} + +// 导出-调拨出库申请主 Excel +export const exportTransferissueRequestMain = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/transferissue-request-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/transferissue-request-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/transferissue-request-main/get-import-template' }) +} + +// 关闭-调拨出库申请 +export const closeTransferissueRequestMain = async (id) => { + return await request.put({ url: `/wms/transferissue-request-main/close?id=` + id }) +} + +// 重新添加-调拨出库申请 +export const reAddTransferissueRequestMain = async (id) => { + return await request.put({ url: `/wms/transferissue-request-main/reAdd?id=` + id }) +} + +// 提交审批-调拨出库申请 +export const submitTransferissueRequestMain = async (id) => { + return await request.put({ url: `/wms/transferissue-request-main/submit?id=` + id }) +} + +// 审批驳回-调拨出库申请 +export const refusedTransferissueRequestMain = async (id) => { + return await request.put({ url: `/wms/transferissue-request-main/refused?id=` + id }) +} + +// 审批通过-调拨出库申请 +export const agreeTransferissueRequestMain = async (id) => { + return await request.put({ url: `/wms/transferissue-request-main/agree?id=` + id }) +} + +// 处理-调拨出库申请 +export const handleTransferissueRequestMain = async (id) => { + return await request.put({ url: `/wms/transferissue-request-main/handle?id=` + id }) +} diff --git a/src/api/wms/transferlog/index.ts b/src/api/wms/transferlog/index.ts new file mode 100644 index 0000000..8d13c84 --- /dev/null +++ b/src/api/wms/transferlog/index.ts @@ -0,0 +1,86 @@ +import request from '@/config/axios' + +export interface TransferlogVO { + number: string + transactionType: string + worker: string + businessType: string + recordNumber: string + activeTime: Date + itemCode: string + uom: string + qty: number + altBatch: string + arriveDate: Date + produceDate: Date + expireDate: Date + fomTransactionNumber: string + fromPackingNumber: string + fromBatch: string + fromInventoryStatus: string + fromContainerNumber: string + fromLocationCode: string + fromWarehouseCode: string + fromAreaCode: string + fromLocationGroupCode: string + fromErpLocationCode: string + fromOwnerCode: string + toTransactionNumber: string + toPackingNumber: string + toBatch: string + toInventoryStatus: string + toContainerNumber: string + toLocationCode: string + toWarehouseCode: string + toAreaCode: string + toLocationGroupCode: string + toErpLocationCode: string + toOwnerCode: string +} + +// 查询库存转移日志列表 +export const getTransferlogPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/transferlog/senior', data }) + } else { + return await request.get({ url: `/wms/transferlog/page`, params }) + } +} + +// 查询库存转移日志详情 +export const getTransferlog = async (id: number) => { + return await request.get({ url: `/wms/transferlog/get?id=` + id }) +} + +// 新增库存转移日志 +export const createTransferlog = async (data: TransferlogVO) => { + return await request.post({ url: `/wms/transferlog/create`, data }) +} + +// 修改库存转移日志 +export const updateTransferlog = async (data: TransferlogVO) => { + return await request.put({ url: `/wms/transferlog/update`, data }) +} + +// 删除库存转移日志 +export const deleteTransferlog = async (id: number) => { + return await request.delete({ url: `/wms/transferlog/delete?id=` + id }) +} + +// 导出库存转移日志 Excel +export const exportTransferlog = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/transferlog/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/transferlog/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/transferlog/get-import-template' }) +} diff --git a/src/api/wms/transferreceiptJobDetail/index.ts b/src/api/wms/transferreceiptJobDetail/index.ts new file mode 100644 index 0000000..f424cc4 --- /dev/null +++ b/src/api/wms/transferreceiptJobDetail/index.ts @@ -0,0 +1,64 @@ +import request from '@/config/axios' + +export interface TransferreceiptJobDetailVO { + packingNumber: string + containerNumber: string + batch: string + inventoryStatus: string + fromLocationCode: string + toLocationCode: string + itemCode: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + number: string + remark: string + createTime: Date + creator: string + fromOwnerCode: string + toOwnerCode: string +} + +// 查询调拨入库任务子列表 +export const getTransferreceiptJobDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/transferreceipt-job-detail/senior', data }) + } else { + return await request.get({ url: `/wms/transferreceipt-job-detail/page`, params }) + } +} + +// 查询调拨入库任务子详情 +export const getTransferreceiptJobDetail = async (id: number) => { + return await request.get({ url: `/wms/transferreceipt-job-detail/get?id=` + id }) +} + +// 新增调拨入库任务子 +export const createTransferreceiptJobDetail = async (data: TransferreceiptJobDetailVO) => { + return await request.post({ url: `/wms/transferreceipt-job-detail/create`, data }) +} + +// 修改调拨入库任务子 +export const updateTransferreceiptJobDetail = async (data: TransferreceiptJobDetailVO) => { + return await request.put({ url: `/wms/transferreceipt-job-detail/update`, data }) +} + +// 删除调拨入库任务子 +export const deleteTransferreceiptJobDetail = async (id: number) => { + return await request.delete({ url: `/wms/transferreceipt-job-detail/delete?id=` + id }) +} + +// 导出调拨入库任务子 Excel +export const exportTransferreceiptJobDetail = async (params) => { + return await request.download({ url: `/wms/transferreceipt-job-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/transferreceipt-job-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/transferreceiptJobMain/index.ts b/src/api/wms/transferreceiptJobMain/index.ts new file mode 100644 index 0000000..a86aa1f --- /dev/null +++ b/src/api/wms/transferreceiptJobMain/index.ts @@ -0,0 +1,103 @@ +import request from '@/config/axios' + +export interface TransferreceiptJobMainVO { + requestNumber: string + toDockCode: string + carrierCode: string + transferMode: string + vehiclePlateNumber: string + fromWarehouseCode: string + toWarehouseCode: string + requestTime: Date + requestDueTime: Date + status: string + expiredTime: Date + updateTime: Date + updater: string + jobStageStatus: string + priority: number + priorityIncrement: number + departmentCode: string + acceptUserId: string + acceptTime: Date + completeUserId: string + completeTime: Date + fromAreaTypes: string + toAreaTypes: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + fromAreaCodes: string + toAreaCodes: string + autoComplete: string + allowModifyLocation: string + allowModifyQty: string + allowBiggerQty: string + allowSmallerQty: string + allowModifyInventoryStatus: string + allowContinuousScanning: string + allowPartialComplete: string + allowModifyBatch: string + allowModifyPackingNumber: string +} + +// 查询调拨入库任务主列表 +export const getTransferreceiptJobMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/transferreceipt-job-main/senior', data }) + } else { + return await request.get({ url: `/wms/transferreceipt-job-main/page`, params }) + } +} + +// 查询调拨入库任务主详情 +export const getTransferreceiptJobMain = async (id: number) => { + return await request.get({ url: `/wms/transferreceipt-job-main/get?id=` + id }) +} + +// 新增调拨入库任务主 +export const createTransferreceiptJobMain = async (data: TransferreceiptJobMainVO) => { + return await request.post({ url: `/wms/transferreceipt-job-main/create`, data }) +} + +// 修改调拨入库任务主 +export const updateTransferreceiptJobMain = async (data: TransferreceiptJobMainVO) => { + return await request.put({ url: `/wms/transferreceipt-job-main/update`, data }) +} + +// 删除调拨入库任务主 +export const deleteTransferreceiptJobMain = async (id: number) => { + return await request.delete({ url: `/wms/transferreceipt-job-main/delete?id=` + id }) +} +// 承接调拨入库任务主 +export const acceptTransferreceiptJobMain = async (id: number) => { + return await request.put({ url: `/wms/transferreceipt-job-main/accept?id=` + id }) +} +// 取消承接调拨入库任务主 +export const abandonTransferreceiptJobMain = async (id: number) => { + return await request.put({ url: `/wms/transferreceipt-job-main/abandon?id=` + id }) +} +// 关闭调拨入库任务主 +export const closeTransferreceiptJobMain = async (id: number) => { + return await request.put({ url: `/wms/transferreceipt-job-main/close?id=` + id }) +} + +// 导出调拨入库任务主 Excel +export const exportTransferreceiptJobMain = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/transferreceipt-job-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/transferreceipt-job-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/transferreceipt-job-main/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/transferreceiptRecordDetail/index.ts b/src/api/wms/transferreceiptRecordDetail/index.ts new file mode 100644 index 0000000..869ea1e --- /dev/null +++ b/src/api/wms/transferreceiptRecordDetail/index.ts @@ -0,0 +1,74 @@ +import request from '@/config/axios' + +export interface TransferreceiptRecordDetailVO { + fromBatch: string + inventoryStatus: string + fromOwnerCode: string + fromLocationCode: string + fromLocationGroupCode: string + fromAreaCode: string + toOwnerCode: string + toLocationCode: string + toLocationGroupCode: string + toAreaCode: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + code: string + interfaceType: string + number: string + itemCode: string + remark: string + createTime: Date + creator: string + jobDetailId: string + fromPackingNumber: string + toPackingNumber: string + fromContainerNumber: string + toContainerNumber: string + toBatch: string +} + +// 查询调拨入库记录子列表 +export const getTransferreceiptRecordDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/transferreceipt-record-detail/senior', data }) + } else { + return await request.get({ url: `/wms/transferreceipt-record-detail/page`, params }) + } +} + +// 查询调拨入库记录子详情 +export const getTransferreceiptRecordDetail = async (id: number) => { + return await request.get({ url: `/wms/transferreceipt-record-detail/get?id=` + id }) +} + +// 新增调拨入库记录子 +export const createTransferreceiptRecordDetail = async (data: TransferreceiptRecordDetailVO) => { + return await request.post({ url: `/wms/transferreceipt-record-detail/create`, data }) +} + +// 修改调拨入库记录子 +export const updateTransferreceiptRecordDetail = async (data: TransferreceiptRecordDetailVO) => { + return await request.put({ url: `/wms/transferreceipt-record-detail/update`, data }) +} + +// 删除调拨入库记录子 +export const deleteTransferreceiptRecordDetail = async (id: number) => { + return await request.delete({ url: `/wms/transferreceipt-record-detail/delete?id=` + id }) +} + +// 导出调拨入库记录子 Excel +export const exportTransferreceiptRecordDetail = async (params) => { + return await request.download({ url: `/wms/transferreceipt-record-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/transferreceipt-record-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/transferreceiptRecordMain/index.ts b/src/api/wms/transferreceiptRecordMain/index.ts new file mode 100644 index 0000000..ad358f0 --- /dev/null +++ b/src/api/wms/transferreceiptRecordMain/index.ts @@ -0,0 +1,79 @@ +import request from '@/config/axios' + +export interface TransferreceiptRecordMainVO { + requestNumber: string + jobNumber: string + receiptDock: string + carrierCode: string + transferMode: string + vehiclePlateNumber: string + fromWarehouseCode: string + toWarehouseCode: string + outTransactionType: string + inTransactionType: string + executeTime: Date + activeDate: Date + requestTime: Date + dueTime: Date + departmentCode: string + code: string + interfaceType: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + fromAreaTypes: string + fromAreaCodes: string + toDockCode: string + toAreaTypes: string + toAreaCodes: string + available: string +} + +// 查询调拨入库记录主列表 +export const getTransferreceiptRecordMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/transferreceipt-record-main/senior', data }) + } else { + return await request.get({ url: `/wms/transferreceipt-record-main/page`, params }) + } +} + +// 查询调拨入库记录主详情 +export const getTransferreceiptRecordMain = async (id: number) => { + return await request.get({ url: `/wms/transferreceipt-record-main/get?id=` + id }) +} + +// 新增调拨入库记录主 +export const createTransferreceiptRecordMain = async (data: TransferreceiptRecordMainVO) => { + return await request.post({ url: `/wms/transferreceipt-record-main/create`, data }) +} + +// 修改调拨入库记录主 +export const updateTransferreceiptRecordMain = async (data: TransferreceiptRecordMainVO) => { + return await request.put({ url: `/wms/transferreceipt-record-main/update`, data }) +} + +// 删除调拨入库记录主 +export const deleteTransferreceiptRecordMain = async (id: number) => { + return await request.delete({ url: `/wms/transferreceipt-record-main/delete?id=` + id }) +} + +// 导出调拨入库记录主 Excel +export const exportTransferreceiptRecordMain = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/transferreceipt-record-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/transferreceipt-record-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/transferreceipt-record-main/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/transferreceiptRequestDetail/index.ts b/src/api/wms/transferreceiptRequestDetail/index.ts new file mode 100644 index 0000000..bcaa5b2 --- /dev/null +++ b/src/api/wms/transferreceiptRequestDetail/index.ts @@ -0,0 +1,65 @@ +import request from '@/config/axios' + +export interface TransferreceiptRequestDetailVO { + packingNumber: string + containerNumber: string + batch: string + inventoryStatus: string + fromOwnerCode: string + fromLocationCode: string + number: string + itemCode: string + remark: string + createTime: Date + creator: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + updateTime: Date + updater: string + toOwnerCode: string +} + +// 查询调拨入库申请子列表 +export const getTransferreceiptRequestDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/transferreceipt-request-detail/senior', data }) + } else { + return await request.get({ url: `/wms/transferreceipt-request-detail/page`, params }) + } +} + +// 查询调拨入库申请子详情 +export const getTransferreceiptRequestDetail = async (id: number) => { + return await request.get({ url: `/wms/transferreceipt-request-detail/get?id=` + id }) +} + +// 新增调拨入库申请子 +export const createTransferreceiptRequestDetail = async (data: TransferreceiptRequestDetailVO) => { + return await request.post({ url: `/wms/transferreceipt-request-detail/create`, data }) +} + +// 修改调拨入库申请子 +export const updateTransferreceiptRequestDetail = async (data: TransferreceiptRequestDetailVO) => { + return await request.put({ url: `/wms/transferreceipt-request-detail/update`, data }) +} + +// 删除调拨入库申请子 +export const deleteTransferreceiptRequestDetail = async (id: number) => { + return await request.delete({ url: `/wms/transferreceipt-request-detail/delete?id=` + id }) +} + +// 导出调拨入库申请子 Excel +export const exportTransferreceiptRequestDetail = async (params) => { + return await request.download({ url: `/wms/transferreceipt-request-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/transferreceipt-request-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/transferreceiptRequestMain/index.ts b/src/api/wms/transferreceiptRequestMain/index.ts new file mode 100644 index 0000000..69f1c51 --- /dev/null +++ b/src/api/wms/transferreceiptRequestMain/index.ts @@ -0,0 +1,106 @@ +import request from '@/config/axios' + +export interface TransferreceiptRequestMainVO { + carrierCode: string + transferMode: string + vehiclePlateNumber: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + requestTime: Date + dueTime: Date + departmentCode: string + status: string + updateTime: Date + updater: string + fromWarehouseCode: string + toDockCode: string + fromAreaTypes: string + fromAreaCodes: string + toWarehouseCode: string + toAreaTypes: string + toAreaCodes: string + autoCommit: string + autoAgree: string + autoExecute: string + directCreateRecord: string +} + +// 查询调拨入库申请主列表 +export const getTransferreceiptRequestMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/transferreceipt-request-main/senior', data }) + } else { + return await request.get({ url: `/wms/transferreceipt-request-main/page`, params }) + } +} + +// 查询调拨入库申请主详情 +export const getTransferreceiptRequestMain = async (id: number) => { + return await request.get({ url: `/wms/transferreceipt-request-main/get?id=` + id }) +} + +// 新增调拨入库申请主 +export const createTransferreceiptRequestMain = async (data: TransferreceiptRequestMainVO) => { + return await request.post({ url: `/wms/transferreceipt-request-main/create`, data }) +} + +// 修改调拨入库申请主 +export const updateTransferreceiptRequestMain = async (data: TransferreceiptRequestMainVO) => { + return await request.put({ url: `/wms/transferreceipt-request-main/update`, data }) +} + +// 删除调拨入库申请主 +export const deleteTransferreceiptRequestMain = async (id: number) => { + return await request.delete({ url: `/wms/transferreceipt-request-main/delete?id=` + id }) +} + +// 导出调拨入库申请主 Excel +export const exportTransferreceiptRequestMain = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/transferreceipt-request-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/transferreceipt-request-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + // return request.download({ url: '/wms/transferreceipt-request-main/get-import-template' }) +} + +// 关闭-调拨入库申请 +export const closeTransferreceiptRequestMain = async (id) => { + return await request.put({ url: `/wms/transferreceipt-request-main/close?id=` + id }) +} + +// 重新添加-调拨入库申请 +export const reAddTransferreceiptRequestMain = async (id) => { + return await request.put({ url: `/wms/transferreceipt-request-main/reAdd?id=` + id }) +} + +// 提交审批-调拨入库申请 +export const submitTransferreceiptRequestMain = async (id) => { + return await request.put({ url: `/wms/transferreceipt-request-main/submit?id=` + id }) +} + +// 审批驳回-调拨入库申请 +export const refusedTransferreceiptRequestMain = async (id) => { + return await request.put({ url: `/wms/transferreceipt-request-main/refused?id=` + id }) +} + +// 审批通过-调拨入库申请 +export const agreeTransferreceiptRequestMain = async (id) => { + return await request.put({ url: `/wms/transferreceipt-request-main/agree?id=` + id }) +} + +// 处理-调拨入库申请 +export const handleTransferreceiptRequestMain = async (id) => { + return await request.put({ url: `/wms/transferreceipt-request-main/handle?id=` + id }) +} diff --git a/src/api/wms/unplannedissueJobDetail/index.ts b/src/api/wms/unplannedissueJobDetail/index.ts new file mode 100644 index 0000000..62afa1f --- /dev/null +++ b/src/api/wms/unplannedissueJobDetail/index.ts @@ -0,0 +1,63 @@ +import request from '@/config/axios' + +export interface UnplannedissueJobDetailVO { + ownerCode: string + packingNumber: string + containerNumber: string + batch: string + fromLocationCode: string + inventoryStatus: string + reason: string + itemCode: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + number: string + remark: string + createTime: Date + creator: string +} + +// 查询计划外出库任务子列表 +export const getUnplannedissueJobDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/unplannedissue-job-detail/senior', data }) + } else { + return await request.get({ url: `/wms/unplannedissue-job-detail/page`, params }) + } +} + +// 查询计划外出库任务子详情 +export const getUnplannedissueJobDetail = async (id: number) => { + return await request.get({ url: `/wms/unplannedissue-job-detail/get?id=` + id }) +} + +// 新增计划外出库任务子 +export const createUnplannedissueJobDetail = async (data: UnplannedissueJobDetailVO) => { + return await request.post({ url: `/wms/unplannedissue-job-detail/create`, data }) +} + +// 修改计划外出库任务子 +export const updateUnplannedissueJobDetail = async (data: UnplannedissueJobDetailVO) => { + return await request.put({ url: `/wms/unplannedissue-job-detail/update`, data }) +} + +// 删除计划外出库任务子 +export const deleteUnplannedissueJobDetail = async (id: number) => { + return await request.delete({ url: `/wms/unplannedissue-job-detail/delete?id=` + id }) +} + +// 导出计划外出库任务子 Excel +export const exportUnplannedissueJobDetail = async (params) => { + return await request.download({ url: `/wms/unplannedissue-job-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/unplannedissue-job-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/unplannedissueJobMain/index.ts b/src/api/wms/unplannedissueJobMain/index.ts new file mode 100644 index 0000000..0415203 --- /dev/null +++ b/src/api/wms/unplannedissueJobMain/index.ts @@ -0,0 +1,97 @@ +import request from '@/config/axios' + +export interface UnplannedissueJobMainVO { + requestNumber: string + fromWarehouseCode: string + requestTime: Date + requestDueTime: Date + status: string + expiredTime: Date + updateTime: Date + updater: string + jobStageStatus: string + priority: number + priorityIncrement: number + departmentCode: string + acceptUserId: string + acceptTime: Date + completeUserId: string + completeTime: Date + fromAreaTypes: string + toAreaTypes: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + fromAreaCodes: string + autoComplete: string + allowModifyLocation: string + allowModifyQty: string + allowBiggerQty: string + allowSmallerQty: string + allowModifyInventoryStatus: string + allowContinuousScanning: string + allowPartialComplete: string + allowModifyBatch: string + allowModifyPackingNumber: string +} + +// 查询计划外出库任务主列表 +export const getUnplannedissueJobMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/unplannedissue-job-main/senior', data }) + } else { + return await request.get({ url: `/wms/unplannedissue-job-main/page`, params }) + } +} + +// 查询计划外出库任务主详情 +export const getUnplannedissueJobMain = async (id: number) => { + return await request.get({ url: `/wms/unplannedissue-job-main/get?id=` + id }) +} + +// 新增计划外出库任务主 +export const createUnplannedissueJobMain = async (data: UnplannedissueJobMainVO) => { + return await request.post({ url: `/wms/unplannedissue-job-main/create`, data }) +} + +// 修改计划外出库任务主 +export const updateUnplannedissueJobMain = async (data: UnplannedissueJobMainVO) => { + return await request.put({ url: `/wms/unplannedissue-job-main/update`, data }) +} + +// 删除计划外出库任务主 +export const deleteUnplannedissueJobMain = async (id: number) => { + return await request.delete({ url: `/wms/unplannedissue-job-main/delete?id=` + id }) +} +// 承接计划外出库任务主 +export const acceptUnplannedissueJobMain = async (id: number) => { + return await request.put({ url: `/wms/unplannedissue-job-main/accept?id=` + id }) +} +// 取消承接计划外出库任务主 +export const abandonUnplannedissueJobMain = async (id: number) => { + return await request.put({ url: `/wms/unplannedissue-job-main/abandon?id=` + id }) +} +// 关闭计划外出库任务主 +export const closeUnplannedissueJobMain = async (id: number) => { + return await request.put({ url: `/wms/unplannedissue-job-main/close?id=` + id }) +} + +// 导出计划外出库任务主 Excel +export const exportUnplannedissueJobMain = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/unplannedissue-job-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/unplannedissue-job-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/unplannedissue-job-main/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/unplannedissueRecordDetail/index.ts b/src/api/wms/unplannedissueRecordDetail/index.ts new file mode 100644 index 0000000..839ff3b --- /dev/null +++ b/src/api/wms/unplannedissueRecordDetail/index.ts @@ -0,0 +1,111 @@ +import request from '@/config/axios' + +export interface UnplannedissueRecordDetailVO { + ownerCode: string + packingNumber: string + containerNumber: string + batch: string + fromLocationCode: string + fromLocationGroupCode: string + fromAreaCode: string + inventoryStatus: string + reason: string + singlePrice: number + amount: number + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + code: string + interfaceType: string + number: string + itemCode: string + remark: string + createTime: Date + creator: string + jobDetailId: string +} + +// 查询计划外出库记录子列表 +export const getUnplannedissueRecordDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + const dataTypeCondition = { + 'column':'detailDataType', + 'action':'==', + 'value':'1' + } + const cmdExists = data.filters.some(filter => + filter.column === dataTypeCondition.column && + filter.action === dataTypeCondition.action && + filter.value === dataTypeCondition.value + ); + + if (!cmdExists) { + data.filters.push(dataTypeCondition) + } + return await request.post({ url: '/wms/unplannedissue-record-detail/senior', data }) + } else { + params.detailDataType='1' + return await request.get({ url: `/wms/unplannedissue-record-detail/page`, params }) + } +} + +// 查询备件领用出库记录子列表 +export const getUnplannedissueRecordDetailPageSpare = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + const dataTypeCondition = { + 'column':'detailDataType', + 'action':'==', + 'value':'2' + } + const cmdExists = data.filters.some(filter => + filter.column === dataTypeCondition.column && + filter.action === dataTypeCondition.action && + filter.value === dataTypeCondition.value + ); + + if (!cmdExists) { + data.filters.push(dataTypeCondition) + } + return await request.post({ url: '/wms/unplannedissue-record-detail/senior', data }) + } else { + params.detailDataType='2' + return await request.get({ url: `/wms/unplannedissue-record-detail/page`, params }) + } +} + +// 查询计划外出库记录子详情 +export const getUnplannedissueRecordDetail = async (id: number) => { + return await request.get({ url: `/wms/unplannedissue-record-detail/get?id=` + id }) +} + +// 新增计划外出库记录子 +export const createUnplannedissueRecordDetail = async (data: UnplannedissueRecordDetailVO) => { + return await request.post({ url: `/wms/unplannedissue-record-detail/create`, data }) +} + +// 修改计划外出库记录子 +export const updateUnplannedissueRecordDetail = async (data: UnplannedissueRecordDetailVO) => { + return await request.put({ url: `/wms/unplannedissue-record-detail/update`, data }) +} + +// 删除计划外出库记录子 +export const deleteUnplannedissueRecordDetail = async (id: number) => { + return await request.delete({ url: `/wms/unplannedissue-record-detail/delete?id=` + id }) +} + +// 导出计划外出库记录子 Excel +export const exportUnplannedissueRecordDetail = async (params) => { + return await request.download({ url: `/wms/unplannedissue-record-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/unplannedissue-record-detail/get-import-template' }) +} diff --git a/src/api/wms/unplannedissueRecordMain/index.ts b/src/api/wms/unplannedissueRecordMain/index.ts new file mode 100644 index 0000000..6aec7d2 --- /dev/null +++ b/src/api/wms/unplannedissueRecordMain/index.ts @@ -0,0 +1,66 @@ +import request from '@/config/axios' + +export interface UnplannedissueRecordMainVO { + requestNumber: string + jobNumber: string + outTransactionType: string + inTransactionType: string + executeTime: Date + activeDate: Date + requestTime: Date + dueTime: Date + departmentCode: string + interfaceType: string + code: string + number: string + businessType: string + remark: string + createTime: Date + creatorId: string + fromWarehouseCode: string + fromAreaTypes: string + fromAreaCodes: string + fromDockCode: string + available: string +} + +// 查询计划外出库记录主详情 +export const getUnplannedissueRecordMain = async (id: number) => { + return await request.get({ url: `/wms/unplannedissue-record-main/get?id=` + id }) +} + +// 新增计划外出库记录主 +export const createUnplannedissueRecordMain = async (data: UnplannedissueRecordMainVO) => { + return await request.post({ url: `/wms/unplannedissue-record-main/create`, data }) +} + +// 修改计划外出库记录主 +export const updateUnplannedissueRecordMain = async (data: UnplannedissueRecordMainVO) => { + return await request.put({ url: `/wms/unplannedissue-record-main/update`, data }) +} + +// 删除计划外出库记录主 +export const deleteUnplannedissueRecordMain = async (id: number) => { + return await request.delete({ url: `/wms/unplannedissue-record-main/delete?id=` + id }) +} + +// 导出计划外出库记录主 Excel +export const exportUnplannedissueRecordMain = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/unplannedissue-record-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/unplannedissue-record-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/unplannedissue-record-main/get-import-template' }) +} + +// 撤销 +export const revoke = async (id: number) => { + return await request.get({ url: `/wms/unplannedissue-record-main/revoke?id=` + id }) +} diff --git a/src/api/wms/unplannedissueRequestDetail/index.ts b/src/api/wms/unplannedissueRequestDetail/index.ts new file mode 100644 index 0000000..b8a444f --- /dev/null +++ b/src/api/wms/unplannedissueRequestDetail/index.ts @@ -0,0 +1,106 @@ +import request from '@/config/axios' + +export interface UnplannedissueRequestDetailVO { + fromOwnerCode: string + packingNumber: string + containerNumber: string + batch: string + fromLocationCode: string + inventoryStatus: string + reason: string + number: string + itemCode: string + remark: string + createTime: Date + creator: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + updateTime: Date + updater: string +} + +// 查询计划外出库申请子列表 +export const getUnplannedissueRequestDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + const dataTypeCondition = { + 'column':'detailDataType', + 'action':'==', + 'value':'1' + } + const cmdExists = data.filters.some(filter => + filter.column === dataTypeCondition.column && + filter.action === dataTypeCondition.action && + filter.value === dataTypeCondition.value + ); + + if (!cmdExists) { + data.filters.push(dataTypeCondition) + } + return await request.post({ url: '/wms/unplannedissue-request-detail/senior', data }) + } else { + params.detailDataType='1' + return await request.get({ url: `/wms/unplannedissue-request-detail/page`, params }) + } +} + +// 查询备件领用列表 +export const getUnplannedissueRequestDetailPageSpare = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + const dataTypeCondition = { + 'column':'detailDataType', + 'action':'==', + 'value':'2' + } + const cmdExists = data.filters.some(filter => + filter.column === dataTypeCondition.column && + filter.action === dataTypeCondition.action && + filter.value === dataTypeCondition.value + ); + + if (!cmdExists) { + data.filters.push(dataTypeCondition) + } + return await request.post({ url: '/wms/unplannedissue-request-detail/senior', data }) + } else { + params.detailDataType='2' + return await request.get({ url: `/wms/unplannedissue-request-detail/page`, params }) + } +} + +// 查询计划外出库申请子详情 +export const getUnplannedissueRequestDetail = async (id: number) => { + return await request.get({ url: `/wms/unplannedissue-request-detail/get?id=` + id }) +} + +// 新增计划外出库申请子 +export const createUnplannedissueRequestDetail = async (data: UnplannedissueRequestDetailVO) => { + return await request.post({ url: `/wms/unplannedissue-request-detail/create`, data }) +} + +// 修改计划外出库申请子 +export const updateUnplannedissueRequestDetail = async (data: UnplannedissueRequestDetailVO) => { + return await request.put({ url: `/wms/unplannedissue-request-detail/update`, data }) +} + +// 删除计划外出库申请子 +export const deleteUnplannedissueRequestDetail = async (id: number) => { + return await request.delete({ url: `/wms/unplannedissue-request-detail/delete?id=` + id }) +} + +// 导出计划外出库申请子 Excel +export const exportUnplannedissueRequestDetail = async (params) => { + return await request.download({ url: `/wms/unplannedissue-request-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/unplannedissue-request-detail/get-import-template' }) +} diff --git a/src/api/wms/unplannedissueRequestMain/index.ts b/src/api/wms/unplannedissueRequestMain/index.ts new file mode 100644 index 0000000..2137666 --- /dev/null +++ b/src/api/wms/unplannedissueRequestMain/index.ts @@ -0,0 +1,149 @@ +import request from '@/config/axios' + +export interface UnplannedissueRequestMainVO { + fromWarehouseCode: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + requestTime: Date + dueTime: Date + departmentCode: string + status: string + updateTime: Date + updater: string + concurrencyStamp: string + fromAreaTypes: string + fromAreaCodes: string + autoCommit: string + autoAgree: string + autoExecute: string + directCreateRecord: string +} + +// 查询计划外出库申请主列表 +export const getUnplannedissueRequestMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + const dataTypeCondition = { + 'column':'dataType', + 'action':'==', + 'value':'1' + } + const cmdExists = data.filters.some(filter => + filter.column === dataTypeCondition.column && + filter.action === dataTypeCondition.action && + filter.value === dataTypeCondition.value + ); + + if (!cmdExists) { + data.filters.push(dataTypeCondition) + } + return await request.post({ url: '/wms/unplannedissue-request-main/senior', data }) + } else { + params.dataType='1' + return await request.get({ url: `/wms/unplannedissue-request-main/page`, params }) + } +} + +// 查询计划外出库申请主详情 +export const getUnplannedissueRequestMain = async (id: number) => { + return await request.get({ url: `/wms/unplannedissue-request-main/get?id=` + id }) +} + +// 新增计划外出库申请主 +export const createUnplannedissueRequestMain = async (data: UnplannedissueRequestMainVO) => { + return await request.post({ url: `/wms/unplannedissue-request-main/create`, data }) +} + +// 修改计划外出库申请主 +export const updateUnplannedissueRequestMain = async (data: UnplannedissueRequestMainVO) => { + return await request.put({ url: `/wms/unplannedissue-request-main/update`, data }) +} + +// 删除计划外出库申请主 +export const deleteUnplannedissueRequestMain = async (id: number) => { + return await request.delete({ url: `/wms/unplannedissue-request-main/delete?id=` + id }) +} + +// 导出计划外出库申请主 Excel +export const exportUnplannedissueRequestMain = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/unplannedissue-request-main/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/unplannedissue-request-main/export-excel`, params }) + } +} + + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/unplannedissue-request-main/get-import-template' }) +} + + +// 关闭-计划外出库申请 +export const closeUnplannedissueRequestMain = async (id) => { + return await request.put({ url: `/wms/unplannedissue-request-main/close?id=` + id }) +} + +// 重新添加-计划外出库申请 +export const reAddUnplannedissueRequestMain = async (id) => { + return await request.put({ url: `/wms/unplannedissue-request-main/reAdd?id=` + id }) +} + +// 提交审批-计划外出库申请 +export const submitUnplannedissueRequestMain = async (id) => { + return await request.put({ url: `/wms/unplannedissue-request-main/submit?id=` + id }) +} + +// 审批驳回-计划外出库申请 +export const refusedUnplannedissueRequestMain = async (id) => { + return await request.put({ url: `/wms/unplannedissue-request-main/refused?id=` + id }) +} + +// 审批通过-计划外出库申请 +export const agreeUnplannedissueRequestMain = async (id) => { + return await request.put({ url: `/wms/unplannedissue-request-main/agree?id=` + id }) +} + +// 处理-计划外出库申请 +export const handleUnplannedissueRequestMain = async (id) => { + return await request.put({ url: `/wms/unplannedissue-request-main/handle?id=` + id }) +} + + +// 查询备件领用主列表 +export const getUnplannedissueRequestMainPageSpare = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + const dataTypeCondition = { + 'column':'detailDataType', + 'action':'==', + 'value':'2' + } + const cmdExists = data.filters.some(filter => + filter.column === dataTypeCondition.column && + filter.action === dataTypeCondition.action && + filter.value === dataTypeCondition.value + ); + + if (!cmdExists) { + data.filters.push(dataTypeCondition) + } + return await request.post({ url: '/wms/unplannedissue-request-main/senior', data }) + } else { + params.detailDataType='2' + return await request.get({ url: `/wms/unplannedissue-request-main/page`, params }) + } +} + + +// 备件领用下载用户导入模板 +export const spareImportTemplate = () => { + return request.download({ url: '/wms/unplannedissue-request-main/get-import-template-spare' }) +} diff --git a/src/api/wms/unplannedreceiptJobDetail/index.ts b/src/api/wms/unplannedreceiptJobDetail/index.ts new file mode 100644 index 0000000..450f813 --- /dev/null +++ b/src/api/wms/unplannedreceiptJobDetail/index.ts @@ -0,0 +1,67 @@ +import request from '@/config/axios' + +export interface UnplannedreceiptJobDetailVO { + ownerCode: string + packingNumber: string + containerNumber: string + batch: string + altBatch: string + arriveDate: Date + produceDate: Date + expireDate: Date + toLocationCode: string + inventoryStatus: string + reason: string + itemCode: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + number: string + remark: string + createTime: Date + creator: string +} + +// 查询计划外入库任务子列表 +export const getUnplannedreceiptJobDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/unplannedreceipt-job-detail/senior', data }) + } else { + return await request.get({ url: `/wms/unplannedreceipt-job-detail/page`, params }) + } +} + +// 查询计划外入库任务子详情 +export const getUnplannedreceiptJobDetail = async (id: number) => { + return await request.get({ url: `/wms/unplannedreceipt-job-detail/get?id=` + id }) +} + +// 新增计划外入库任务子 +export const createUnplannedreceiptJobDetail = async (data: UnplannedreceiptJobDetailVO) => { + return await request.post({ url: `/wms/unplannedreceipt-job-detail/create`, data }) +} + +// 修改计划外入库任务子 +export const updateUnplannedreceiptJobDetail = async (data: UnplannedreceiptJobDetailVO) => { + return await request.put({ url: `/wms/unplannedreceipt-job-detail/update`, data }) +} + +// 删除计划外入库任务子 +export const deleteUnplannedreceiptJobDetail = async (id: number) => { + return await request.delete({ url: `/wms/unplannedreceipt-job-detail/delete?id=` + id }) +} + +// 导出计划外入库任务子 Excel +export const exportUnplannedreceiptJobDetail = async (params) => { + return await request.download({ url: `/wms/unplannedreceipt-job-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/unplannedreceipt-job-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/unplannedreceiptJobMain/index.ts b/src/api/wms/unplannedreceiptJobMain/index.ts new file mode 100644 index 0000000..fd2c917 --- /dev/null +++ b/src/api/wms/unplannedreceiptJobMain/index.ts @@ -0,0 +1,98 @@ +import request from '@/config/axios' + +export interface UnplannedreceiptJobMainVO { + requestNumber: string + toWarehouseCode: string + requestTime: Date + requestDueTime: Date + status: string + expiredTime: Date + updateTime: Date + updater: string + jobStageStatus: string + priority: number + priorityIncrement: number + departmentCode: string + acceptUserId: string + acceptTime: Date + completeUserId: string + completeTime: Date + fromAreaTypes: string + toAreaTypes: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + toAreaCodes: string + autoComplete: string + allowModifyLocation: string + allowModifyQty: string + allowBiggerQty: string + allowSmallerQty: string + allowModifyInventoryStatus: string + allowContinuousScanning: string + allowPartialComplete: string + allowModifyBatch: string + allowModifyPackingNumber: string +} + +// 查询计划外入库任务主列表 +export const getUnplannedreceiptJobMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/unplannedreceipt-job-main/senior', data }) + } else { + return await request.get({ url: `/wms/unplannedreceipt-job-main/page`, params }) + } +} + +// 查询计划外入库任务主详情 +export const getUnplannedreceiptJobMain = async (id: number) => { + return await request.get({ url: `/wms/unplannedreceipt-job-main/get?id=` + id }) +} + +// 新增计划外入库任务主 +export const createUnplannedreceiptJobMain = async (data: UnplannedreceiptJobMainVO) => { + return await request.post({ url: `/wms/unplannedreceipt-job-main/create`, data }) +} + +// 修改计划外入库任务主 +export const updateUnplannedreceiptJobMain = async (data: UnplannedreceiptJobMainVO) => { + return await request.put({ url: `/wms/unplannedreceipt-job-main/update`, data }) +} + +// 删除计划外入库任务主 +export const deleteUnplannedreceiptJobMain = async (id: number) => { + return await request.delete({ url: `/wms/unplannedreceipt-job-main/delete?id=` + id }) +} + +// 承接计划外入库任务主 +export const acceptUnplannedreceiptJobMain = async (id: number) => { + return await request.put({ url: `/wms/unplannedreceipt-job-main/accept?id=` + id }) +} +// 取消承接计划外入库任务主 +export const abandonUnplannedreceiptJobMain = async (id: number) => { + return await request.put({ url: `/wms/unplannedreceipt-job-main/abandon?id=` + id }) +} +// 关闭计划外入库任务主 +export const closeUnplannedreceiptJobMain = async (id: number) => { + return await request.put({ url: `/wms/unplannedreceipt-job-main/close?id=` + id }) +} + +// 导出计划外入库任务主 Excel +export const exportUnplannedreceiptJobMain = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/unplannedreceipt-job-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/unplannedreceipt-job-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/unplannedreceipt-job-main/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/unplannedreceiptRecordDetail/index.ts b/src/api/wms/unplannedreceiptRecordDetail/index.ts new file mode 100644 index 0000000..28905fb --- /dev/null +++ b/src/api/wms/unplannedreceiptRecordDetail/index.ts @@ -0,0 +1,116 @@ +import request from '@/config/axios' + +export interface UnplannedreceiptRecordDetailVO { + ownerCode: string + packingNumber: string + containerNumber: string + batch: string + altBatch: string + arriveDate: Date + produceDate: Date + expireDate: Date + toLocationCode: string + toLocationGroupCode: string + toAreaCode: string + inventoryStatus: string + reason: string + singlePrice: number + amount: number + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + code: string + interfaceType: string + number: string + itemCode: string + remark: string + createTime: Date + creator: string + jobDetailId: string +} + +// 查询计划外入库记录子列表 +export const getUnplannedreceiptRecordDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + const dataTypeCondition = { + 'column':'detailDataType', + 'action':'==', + 'value':'1' + } + const cmdExists = data.filters.some(filter => + filter.column === dataTypeCondition.column && + filter.action === dataTypeCondition.action && + filter.value === dataTypeCondition.value + ); + + if (!cmdExists) { + data.filters.push(dataTypeCondition) + } + return await request.post({ url: '/wms/unplannedreceipt-record-detail/senior', data }) + } else { + params.detailDataType='1' + return await request.get({ url: `/wms/unplannedreceipt-record-detail/page`, params }) + } +} + + +// 查询备件退库记录子列表 +export const getUnplannedreceiptRecordDetailPageSpare = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + const dataTypeCondition = { + 'column':'detailDataType', + 'action':'==', + 'value':'2' + } + const cmdExists = data.filters.some(filter => + filter.column === dataTypeCondition.column && + filter.action === dataTypeCondition.action && + filter.value === dataTypeCondition.value + ); + + if (!cmdExists) { + data.filters.push(dataTypeCondition) + } + return await request.post({ url: '/wms/unplannedreceipt-record-detail/senior', data }) + } else { + params.detailDataType='2' + return await request.get({ url: `/wms/unplannedreceipt-record-detail/page`, params }) + } +} + +// 查询计划外入库记录子详情 +export const getUnplannedreceiptRecordDetail = async (id: number) => { + return await request.get({ url: `/wms/unplannedreceipt-record-detail/get?id=` + id }) +} + +// 新增计划外入库记录子 +export const createUnplannedreceiptRecordDetail = async (data: UnplannedreceiptRecordDetailVO) => { + return await request.post({ url: `/wms/unplannedreceipt-record-detail/create`, data }) +} + +// 修改计划外入库记录子 +export const updateUnplannedreceiptRecordDetail = async (data: UnplannedreceiptRecordDetailVO) => { + return await request.put({ url: `/wms/unplannedreceipt-record-detail/update`, data }) +} + +// 删除计划外入库记录子 +export const deleteUnplannedreceiptRecordDetail = async (id: number) => { + return await request.delete({ url: `/wms/unplannedreceipt-record-detail/delete?id=` + id }) +} + +// 导出计划外入库记录子 Excel +export const exportUnplannedreceiptRecordDetail = async (params) => { + return await request.download({ url: `/wms/unplannedreceipt-record-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/unplannedreceipt-record-detail/get-import-template' }) +} diff --git a/src/api/wms/unplannedreceiptRecordMain/index.ts b/src/api/wms/unplannedreceiptRecordMain/index.ts new file mode 100644 index 0000000..482b65e --- /dev/null +++ b/src/api/wms/unplannedreceiptRecordMain/index.ts @@ -0,0 +1,76 @@ +import request from '@/config/axios' + +export interface UnplannedreceiptRecordMainVO { + requestNumber: string + jobNumber: string + outTransactionType: string + inTransactionType: string + executeTime: Date + activeDate: Date + requestTime: Date + dueTime: Date + departmentCode: string + interfaceType: string + code: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + toWarehouseCode: string + toAreaTypes: string + toAreaCodes: string + available: string +} + +// 查询计划外入库记录主列表 +export const getUnplannedreceiptRecordMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/unplannedreceipt-record-main/senior', data }) + } else { + return await request.get({ url: `/wms/unplannedreceipt-record-main/page`, params }) + } +} + +// 查询计划外入库记录主详情 +export const getUnplannedreceiptRecordMain = async (id: number) => { + return await request.get({ url: `/wms/unplannedreceipt-record-main/get?id=` + id }) +} + +// 新增计划外入库记录主 +export const createUnplannedreceiptRecordMain = async (data: UnplannedreceiptRecordMainVO) => { + return await request.post({ url: `/wms/unplannedreceipt-record-main/create`, data }) +} + +// 修改计划外入库记录主 +export const updateUnplannedreceiptRecordMain = async (data: UnplannedreceiptRecordMainVO) => { + return await request.put({ url: `/wms/unplannedreceipt-record-main/update`, data }) +} + +// 删除计划外入库记录主 +export const deleteUnplannedreceiptRecordMain = async (id: number) => { + return await request.delete({ url: `/wms/unplannedreceipt-record-main/delete?id=` + id }) +} + +// 导出计划外入库记录主 Excel +export const exportUnplannedreceiptRecordMain = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.downloadPost({ url: '/wms/unplannedreceipt-record-main/export-excel-senior', data }) + } else { + return await request.download({ url: `/wms/unplannedreceipt-record-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/unplannedreceipt-record-main/get-import-template' }) +} + +// 撤销 +export const revoke = async (id: number) => { + return await request.get({ url: `/wms/unplannedreceipt-record-main/revoke?id=` + id }) +} \ No newline at end of file diff --git a/src/api/wms/unplannedreceiptRequestDetail/index.ts b/src/api/wms/unplannedreceiptRequestDetail/index.ts new file mode 100644 index 0000000..f9268af --- /dev/null +++ b/src/api/wms/unplannedreceiptRequestDetail/index.ts @@ -0,0 +1,120 @@ +import request from '@/config/axios' + +export interface UnplannedreceiptRequestDetailVO { + toOwnerCode: string + packingNumber: string + containerNumber: string + batch: string + altBatch: string + arriveDate: Date + produceDate: Date + expireDate: Date + toLocationCode: string + inventoryStatus: string + reason: string + number: string + itemCode: string + remark: string + createTime: Date + creator: string + itemName: string + itemDesc1: string + itemDesc2: string + projectCode: string + qty: number + uom: string + updateTime: Date + updater: string +} + +// 查询计划外入库申请子列表 +export const getUnplannedreceiptRequestDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + const dataTypeCondition = { + 'column':'detailDataType', + 'action':'==', + 'value':'1' + } + const cmdExists = data.filters.some(filter => + filter.column === dataTypeCondition.column && + filter.action === dataTypeCondition.action && + filter.value === dataTypeCondition.value + ); + + if (!cmdExists) { + data.filters.push(dataTypeCondition) + } + return await request.post({ url: '/wms/unplannedreceipt-request-detail/senior', data }) + } else { + params.detailDataType='1' + return await request.get({ url: `/wms/unplannedreceipt-request-detail/page`, params }) + } +} + +// 查询维修备件退库列表 +export const getUnplannedreceiptRequestDetailPageSpare = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + const dataTypeCondition = { + 'column':'detailDataType', + 'action':'==', + 'value':'2' + } + const cmdExists = data.filters.some(filter => + filter.column === dataTypeCondition.column && + filter.action === dataTypeCondition.action && + filter.value === dataTypeCondition.value + ); + + if (!cmdExists) { + data.filters.push(dataTypeCondition) + } + return await request.post({ url: '/wms/unplannedreceipt-request-detail/senior', data }) + } else { + params.detailDataType='2' + return await request.get({ url: `/wms/unplannedreceipt-request-detail/page`, params }) + } +} + +// 查询计划外入库申请子打印标签 +export const getUnplannedreceiptRequestDetailPageCreateLabel = async (params) => { + return await request.get({ url: `/wms/unplannedreceipt-request-detail/pageCreateLabel`, params }) +} + +// 查询计划外入库申请子详情 +export const getUnplannedreceiptRequestDetail = async (id: number) => { + return await request.get({ url: `/wms/unplannedreceipt-request-detail/get?id=` + id }) +} + +// 新增计划外入库申请子 +export const createUnplannedreceiptRequestDetail = async (data: UnplannedreceiptRequestDetailVO) => { + return await request.post({ url: `/wms/unplannedreceipt-request-detail/create`, data }) +} + +// 修改计划外入库申请子 +export const updateUnplannedreceiptRequestDetail = async (data: UnplannedreceiptRequestDetailVO) => { + return await request.put({ url: `/wms/unplannedreceipt-request-detail/update`, data }) +} + +// 删除计划外入库申请子 +export const deleteUnplannedreceiptRequestDetail = async (id: number) => { + return await request.delete({ url: `/wms/unplannedreceipt-request-detail/delete?id=` + id }) +} + +// 导出计划外入库申请子 Excel +export const exportUnplannedreceiptRequestDetail = async (params) => { + return await request.download({ url: `/wms/unplannedreceipt-request-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/unplannedreceipt-request-detail/get-import-template' }) +} + +// 创建包装信息后更新子表数据packingNumber +export const updateDetailPackingNumber = async (id: number, number) => { + return await request.put({ url: '/wms/unplannedreceipt-request-detail/updateDetailPackingNumber?id=' + id + '&number=' + number }) +} diff --git a/src/api/wms/unplannedreceiptRequestMain/index.ts b/src/api/wms/unplannedreceiptRequestMain/index.ts new file mode 100644 index 0000000..23f034a --- /dev/null +++ b/src/api/wms/unplannedreceiptRequestMain/index.ts @@ -0,0 +1,102 @@ +import request from '@/config/axios' + +export interface UnplannedreceiptRequestMainVO { + toWarehouseCode: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + requestTime: Date + dueTime: Date + departmentCode: string + status: string + updateTime: Date + updater: string + toAreaTypes: string + toAreaCodes: string + autoCommit: string + autoAgree: string + autoExecute: string + directCreateRecord: string +} + +// 查询计划外入库申请主列表 +export const getUnplannedreceiptRequestMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/unplannedreceipt-request-main/senior', data }) + } else { + return await request.get({ url: `/wms/unplannedreceipt-request-main/page`, params }) + } +} + +// 查询计划外入库申请主详情 +export const getUnplannedreceiptRequestMain = async (id: number) => { + return await request.get({ url: `/wms/unplannedreceipt-request-main/get?id=` + id }) +} + +// 新增计划外入库申请主 +export const createUnplannedreceiptRequestMain = async (data: UnplannedreceiptRequestMainVO) => { + return await request.post({ url: `/wms/unplannedreceipt-request-main/create`, data }) +} + +// 修改计划外入库申请主 +export const updateUnplannedreceiptRequestMain = async (data: UnplannedreceiptRequestMainVO) => { + return await request.put({ url: `/wms/unplannedreceipt-request-main/update`, data }) +} + +// 删除计划外入库申请主 +export const deleteUnplannedreceiptRequestMain = async (id: number) => { + return await request.delete({ url: `/wms/unplannedreceipt-request-main/delete?id=` + id }) +} + +// 导出计划外入库申请主 Excel +export const exportUnplannedreceiptRequestMain = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/unplannedreceipt-request-main/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/unplannedreceipt-request-main/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/unplannedreceipt-request-main/get-import-template' }) +} + +// 关闭-计划外入库申请 +export const closeUnplannedreceiptRequestMain = async (id) => { + return await request.put({ url: `/wms/unplannedreceipt-request-main/close?id=` + id }) +} + +// 重新添加-计划外入库申请 +export const reAddUnplannedreceiptRequestMain = async (id) => { + return await request.put({ url: `/wms/unplannedreceipt-request-main/reAdd?id=` + id }) +} + +// 提交审批-计划外入库申请 +export const submitUnplannedreceiptRequestMain = async (id) => { + return await request.put({ url: `/wms/unplannedreceipt-request-main/submit?id=` + id }) +} + +// 审批驳回-计划外入库申请 +export const refusedUnplannedreceiptRequestMain = async (id) => { + return await request.put({ url: `/wms/unplannedreceipt-request-main/refused?id=` + id }) +} + +// 审批通过-计划外入库申请 +export const agreeUnplannedreceiptRequestMain = async (id) => { + return await request.put({ url: `/wms/unplannedreceipt-request-main/agree?id=` + id }) +} + +// 处理-计划外入库申请 +export const handleUnplannedreceiptRequestMain = async (id) => { + return await request.put({ url: `/wms/unplannedreceipt-request-main/handle?id=` + id }) +} + +export const handleSparepartReturnRequestMain = async (id) => { + return await request.put({ url: `/wms/unplannedreceipt-request-main/handleBack?id=` + id }) +} diff --git a/src/api/wms/warehouse/index.ts b/src/api/wms/warehouse/index.ts new file mode 100644 index 0000000..51e6eb7 --- /dev/null +++ b/src/api/wms/warehouse/index.ts @@ -0,0 +1,83 @@ +import request from '@/config/axios' + +export interface WarehouseVO { + code: string + name: string + description: string + type: string + available: number + activeTime: Date + expireTime: Date + remark: string +} + +// 查询仓库列表 +export const getWarehousePage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/wms/warehouse/senior', data }) + } else { + return await request.get({ url: `/wms/warehouse/page`, params }) + } +} + +// 校验仓库 +export const verifyWarehouse = async (params) => { + return await request.get({ url: `/wms/warehouse/ListByCode`, params }) +} + + +// 查询仓库所有列表 +export const getWarehouseList = async (params) => { + return await request.get({ url: `/wms/warehouse/list`, params }) +} +// 查询仓库详情 +export const getWarehouse = async (id: number) => { + return await request.get({ url: `/wms/warehouse/get?id=` + id }) +} + +// 新增仓库 +export const createWarehouse = async (data: WarehouseVO) => { + return await request.post({ url: `/wms/warehouse/create`, data }) +} + +// 修改仓库 +export const updateWarehouse = async (data: WarehouseVO) => { + return await request.put({ url: `/wms/warehouse/update`, data }) +} + +// 删除仓库 +export const deleteWarehouse = async (id: number) => { + return await request.delete({ url: `/wms/warehouse/delete?id=` + id }) +} + +// 导出仓库 Excel +export const exportWarehouse = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/warehouse/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/warehouse/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/warehouse/get-import-template' }) +} + +// 查询仓库列表 +export const pageBusinessTypeToWarehouse = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/wms/warehouse/pageBusinessTypeToWarehouseSenior', data }) + } else { + return await request.get({ url: `/wms/warehouse/pageBusinessTypeToWarehouse`, params }) + } +} +// 根据code获取数据列表 +export const getWarehouseByCodes = async (params) => { + return await request.get({ url: `/wms/warehouse/listByCodes`, params }) +} \ No newline at end of file diff --git a/src/api/wms/workDetail/index.ts b/src/api/wms/workDetail/index.ts new file mode 100644 index 0000000..2c5a1c8 --- /dev/null +++ b/src/api/wms/workDetail/index.ts @@ -0,0 +1,47 @@ +import request from '@/config/axios' + +export interface WorkDetailVO { + lineNumber: string + projectCode: string + finishedQty: number + number: string + itemCode: string + remark: string + createTime: Date + creator: string + orderQty: number + uom: string + updateTime: Date + updater: string + available: string +} + +// 查询生产订单子列表 +export const getWorkDetailPage = async (params) => { + return await request.get({ url: `/wms/work-detail/page`, params }) +} + +// 查询生产订单子详情 +export const getWorkDetail = async (id: number) => { + return await request.get({ url: `/wms/work-detail/get?id=` + id }) +} + +// 新增生产订单子 +export const createWorkDetail = async (data: WorkDetailVO) => { + return await request.post({ url: `/wms/work-detail/create`, data }) +} + +// 修改生产订单子 +export const updateWorkDetail = async (data: WorkDetailVO) => { + return await request.put({ url: `/wms/work-detail/update`, data }) +} + +// 删除生产订单子 +export const deleteWorkDetail = async (id: number) => { + return await request.delete({ url: `/wms/work-detail/delete?id=` + id }) +} + +// 导出生产订单子 Excel +export const exportWorkDetail = async (params) => { + return await request.download({ url: `/wms/work-detail/export-excel`, params }) +} diff --git a/src/api/wms/workMain/index.ts b/src/api/wms/workMain/index.ts new file mode 100644 index 0000000..6465bc7 --- /dev/null +++ b/src/api/wms/workMain/index.ts @@ -0,0 +1,59 @@ +import request from '@/config/axios' + +export interface WorkMainVO { + customerCode: string + type: string + orderDate: Date + dueDate: Date + version: string + number: string + businessType: string + remark: string + createTime: Date + creator: string + updateTime: Date + updater: string + currentStage: number + available: string +} + +// 查询生产订单主列表 +export const getWorkMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/work-main/senior', data }) + } else { + return await request.get({ url: `/wms/work-main/page`, params }) + } +} + +// 查询生产订单主详情 +export const getWorkMain = async (id: number) => { + return await request.get({ url: `/wms/work-main/get?id=` + id }) +} + +// 新增生产订单主 +export const createWorkMain = async (data: WorkMainVO) => { + return await request.post({ url: `/wms/work-main/create`, data }) +} + +// 修改生产订单主 +export const updateWorkMain = async (data: WorkMainVO) => { + return await request.put({ url: `/wms/work-main/update`, data }) +} + +// 删除生产订单主 +export const deleteWorkMain = async (id: number) => { + return await request.delete({ url: `/wms/work-main/delete?id=` + id }) +} + +// 导出生产订单主 Excel +export const exportWorkMain = async (params) => { + return await request.download({ url: `/wms/work-main/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/work-main/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/workshop/index.ts b/src/api/wms/workshop/index.ts new file mode 100644 index 0000000..e2a2328 --- /dev/null +++ b/src/api/wms/workshop/index.ts @@ -0,0 +1,63 @@ +import request from '@/config/axios' + +export interface WorkshopVO { + code: string + name: string + description: string + type: string + available: number + activeTime: Date + expireTime: Date + remark: string +} + +// 查询车间列表 +export const getWorkshopPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/wms/workshop/senior', data }) + } else { + return await request.get({ url: `/wms/workshop/page`, params }) + } +} + +// 查询车间详情 +export const getWorkshop = async (id: number) => { + return await request.get({ url: `/wms/workshop/get?id=` + id }) +} + +// 新增车间 +export const createWorkshop = async (data: WorkshopVO) => { + return await request.post({ url: `/wms/workshop/create`, data }) +} + +// 修改车间 +export const updateWorkshop = async (data: WorkshopVO) => { + return await request.put({ url: `/wms/workshop/update`, data }) +} + +// 删除车间 +export const deleteWorkshop = async (id: number) => { + return await request.delete({ url: `/wms/workshop/delete?id=` + id }) +} + +// 导出车间 Excel +export const exportWorkshop = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/workshop/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/workshop/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/workshop/get-import-template' }) +} + +// 查询车间列表 +export const getWorkshopNoPage = async (params) => { + return await request.get({ url: `/wms/workshop/noPage`, params }) +} \ No newline at end of file diff --git a/src/api/wms/workstation/index.ts b/src/api/wms/workstation/index.ts new file mode 100644 index 0000000..499cf69 --- /dev/null +++ b/src/api/wms/workstation/index.ts @@ -0,0 +1,84 @@ +import request from '@/config/axios' + +export interface WorkstationVO { + code: string + name: string + description: string + type: string + workshopCode: string + productionLineCode: string + rawLocationCode: string + fgLocationCode: string + available: number + activeTime: Date + expireTime: Date + remark: string +} + +// 查询工位列表 +export const getWorkstationPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/wms/workstation/senior', data }) + } else { + return await request.get({ url: `/wms/workstation/page`, params }) + } +} + +// 查询工位详情 +export const getWorkstation = async (id: number) => { + return await request.get({ url: `/wms/workstation/get?id=` + id }) +} + +// 新增工位 +export const createWorkstation = async (data: WorkstationVO) => { + return await request.post({ url: `/wms/workstation/create`, data }) +} + +// 修改工位 +export const updateWorkstation = async (data: WorkstationVO) => { + return await request.put({ url: `/wms/workstation/update`, data }) +} + +// 删除工位 +export const deleteWorkstation = async (id: number) => { + return await request.delete({ url: `/wms/workstation/delete?id=` + id }) +} + +// 导出工位 Excel +export const exportWorkstation = async (params) => { + if (params.isSearch) { + const data = {...params} + return await request.downloadPost({ url: `/wms/workstation/export-excel-senior`, data }) + } else { + return await request.download({ url: `/wms/workstation/export-excel`, params }) + } +} + +// 下载用户导入模板 +export const importWorkstationTemplate = () => { + return request.download({ url: '/wms/workstation/get-import-template' }) +} + +// 根据库区筛选出的库位分页 +export const selectAreaTypeToLocation = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return request.post({ url: '/wms/workstation/pageAreaToLocationSenior', data }) + } else { + return await request.get({ url: `/wms/workstation/pageAreaToLocation`, params }) + } +} + + +// 查询工位列表 +export const getWorkstationNoPage = async (params) => { + return await request.get({ url: `/wms/workstation/noPage`, params }) +} + +// 根据code获取数据列表 +export const getWorkstationByCodes = async (params) => { + return await request.get({ url: `/wms/workstation/listByCodes`, params }) +} \ No newline at end of file diff --git a/src/assets/imgs/Eyes-closed.png b/src/assets/imgs/Eyes-closed.png new file mode 100644 index 0000000000000000000000000000000000000000..450f114645d1ce69dd4e9bbce541cd392b4024ee GIT binary patch literal 6454 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 literal 0 HcmV?d00001 diff --git a/src/assets/imgs/avatar.jpg b/src/assets/imgs/avatar.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d46a70a46430e31744420865138cc7eedb8b77e1 GIT binary patch literal 6264 zcmbuDWmMGNx5t0O&^aUB-GkEIDM;r~(j~)yH1YsLHwXesHv>qAlqeFC(jYM)4I&{S zWpMHN-*xZ0ukYUH)p>E&=dAr*`<(r~UASEXAX@60>Hr7?0HC`BZkK^5fZ#3&2?&Xa z3CSR&5Hd=Nd-o_PS*U66l0}G_gZXX=!NmA^_{CtlauO19x)$0GwJnhL_Q-_DgqD_5 z(Es;<+g<>Q58MDZU=SOC1qFejpxb_c9ssbgz;}@U8z3wkFg7mU?Gk|h_X+@TAqs#X zia80nZ-z*uFcD zP)Y!!L(=9e+rcumPh+2YXE(J-QejRVpO0I!gpo~}BLMlcHz=;JP-D~&6C7Ho@}#Q6+@<03;Kb8wmX_-jgx(e>OVud(P*XF^Vl16sN3 zL9VSB`M_g%o1P)BrQX9$svj~GgHrVO^-|)7rKENg&rc-;oC!k)8e~5)HYqtZ2DASDJ8VEC2{_$OcaQB$S8L5D^GQ? z+s$*j6EqD70RKm}|D$LS78v_qHDf{U_Uv61dt8A`-ZyYSRaJk{$HGGBBjlXX+YC8V zKwC6zGPAqf`cyz$pIyrm(T+CDOVQ!GC`}aSwxBW1ad%G@#B25L_H>uJj_SdwyELe? z%Fe*gzZu@k_u1M3aj&S$SqNz`-S2$GASYKgNd~J_^|UX_DG1h-kMkwvwcS#nMa04V7ZUszQk&4N$!hAgCTqpAQhQTk8ON*f0ofdV2=AQy@IIWQN=Pws^DCr*gw;EVeJmQO)u{x?i}GaVh_sL#~;X+7GB*sV+YkAKOH z1g^{+L!LhAjVPHKFZ{%Zl7;fP!+=RU0=KZEB1ma_T2b`3fZ#yb9jF2X0D-ZvvGBpT z*tl5WJ1!7#2MWcx$0`I-!X;-DHZZh%$`YQ&E-0d0{DFeQJ6%-8$i8tZqKVR{uM@jzyiT0o z7c1-kPHi_&7&CHY^{doMimEv}v39dY#&Lgi=@(n{fNjE>B(JpcOwknSb2+tX++3cg z32t~n^3u%`AtMKa_^FzDw{tyaj}mT_SWwV&0ibLN*!>>|Owa%LbKvT4stf0)h_`1JuTz zwF(^utK=XF|Ct&@jJM8u8IOb7jQc*V9HTkqI4CC2!JgUU0{6MLFg9yAHpz3dDZx!@ z%o`8A+h+QIWx*?}R6xxZ68zM4BDx4){0`?SOX0o-f_=pGF+*6D2_s#3Xv5In#4PWP zm^HIklb(YU7j;~7_apAK8Th|gPZ1_+9E4lGMe)LS?_tSUeYcu}830qZ-I%ywSJLBQCSZ*o5 zCo0nC;jboG#KEqAdOUJ=+8r_QQkfjYgT#Y^(;!X6g@~ z_AifVbfl{4(J4zV*gr{36(ao(#RMe|fy1^js-iSUeI6-0np|F+Dw&E=9G_ecKU^vA zWN}f?U8B~?+h<|4H%<+0JW1%?Uve+}TEc~Fp?(8cl~Ve?ztZD{ z{~Twy!MMdpLAL%yl|zp!)gkn3(ZRQbSoH%#jIxSu*UBhKF_KY*!St}JmGuYDa}dV@ z_oh&%3MK5Gv1|}-V*SUam&DxL^F$R6P_Yf^%0k_9LI(d(DHl zPM&QTmtZpFK!M%pmuP3^N0zjRnhP%sU!^J~xher`D*M--%wWo?s)K_BH}(j((H1w? z7Z*GPd{)eY%@U4bUG2<~q*Uc((k`5%BAC@?DR(L0zLv)#<0>7~;bCt|0bO7%Ianpn zDn!%zLBCUU+O+z^aS_=Pt+MKzoWSkmc^{qLsu%`6;^r1aV{6ZqkAcYR77qj>|qEPS9${R0!P!M8cHKDuKPmO5kT`Ds^pNeal!XZCTLU=7b z{t^W-SpZzaE=Oecj8B7_iQm%=1)|lV(V(*nM^=yN!W*P~prKXZr*1bYLCYGHz^*?%h;PzP7OMlZ4Qx z{1%wAwuzq9MLM?!Mov+J?XDQ(a>oiy-+x zA5mNxTAM+pK^nSlVjC!DnfL{tR3swA>jL(F3!ReXLiLOu(mk)1Ad}H`k zDvyCLitK~}eGA+p|MqP!|JQHE(p$h(&Y~nosuYpdE>*XXA_t3$HF`8MP?;7g$AtFT z>28_cZ~Zc6)KBIYJ-A!6ezqZLJ0&`AJUW~N-q~jDs>2y!A+bVs>7Em=xlUaQHOtgA z)_5}rgeQT{prumS(l!aZ9s5J4+i-OWokXFjcY=$+q2NBgNtz7!HKOs$6>q+a$j}x8 z0|<95@%!M{&R^n|q_h5kYKUA9Y7M*SMm(G6<~Ls}3dg@m+*lS}DJj;lW>r*&VtU8t}8EzuB{!;QTLJr)#bnPeko9@_>%zJS|VkP zq(@GhDofDSCE1DSSyHNOve6_Tsc)O;jy!WK4{C5AfYY#(MCD_wj;l7OhwS&Owz;OQ z+Av;ow)s^N=-F9Ggp)!MI8FhVfZd9(Xa_%RD3J~3ahc1ri>JYDXehfQdP2SdhX6zX z06!G{F*%?|ff9Uo`jcl9VbGXN<*o?c9%Qcl!`HD!-*kV}U_C0F#y85{Nsrl#h%Ny0 zGhdHH-|}^l3G5c=HPMhdy0rPtsXd8UuT=QQhu-{%>ElrAU^o9n`5$7#;`4Lwj$|$k ze>h$|+(tcL=ESL?%JG zB%dfqN0c6Y{fo;V%L4S2J|Xw6vghC7DJdXikfoOoh5Z4nW!a5_)5XG&Jjql|qKKS|h#jfwPynLJ0 zBOycm3`flAZyQCqTfhJlF+<%mk4!n4g5%jj9OIo>Cr?ftGlPeo#N|c#7JhEmd z`*~xLs-WF2tr3RF9Z4y)J;@b>0iOk8DKtUaiRQ|+r4*)Ynp((I%| z6GaeKR9BXVY(8(q^c;0<6%VonVwDK@?IMeXA8xq@Gcn9G;@$#KYDGYlNZ?Z9+#(rJ z{`sQUY@6Y51Lq*;;-wYd(C_F0lm<*`M(e~&Octe=J*S6=E>mCK)cZ4l6~1}49`nAc zqVi>Keg?C8G^{SIKfT!5yNCo`Ap&)g_1B0rKJ7Focn>aKTVsHkx`_JMX{3tj$u>at zI0SBi$RkQF5%Pnj@VTx}*IL*ReCd#}IepcO#$zDEDdF=sdQab9>X{W|0q|qoCly&* zkrz3ljI^UWbrCq$Sal5;xgXQ{kL=wJWiAMvHHi4wlFVzedxwrHzxLmKU{l?0foUp! zxs?pYcFW}F(iw0GI%Y^X`%^z1YcYW+WS4A;aeK0y4$9x`n(=-AWoz<%9~9WzM3?tf zj8V%)_)lfghSRHxQx>3V&6H;~!$G~2k*)vyL+9h* zF6tK8_*R@WV+r44X30-hd~o-uDVBfaW4`imz^iwyWd5xC*;sP8E_^wJiksZA2vHjN z(CcFN<1gh-98!wbr?ZBtJBdz6GcqjloM9Rz&?okNLYl{Jqr7DcD~r*66j?E82c+Dv zRP0|fKL;#R`73fS-iECsC9$!Z+WMf)OGS(!6lwWBLZ5D;DR17`1pgDTscFN>6RZMW zIDEKJt(k8`A*6gX<>`7&e+#%B$D}~!7w)&!#?;>e4TY6BG8#Lqa1JL=OEVb(lY&hgHWmo}y^l9rQ@Ia0(-S;V1<%xVLlB}X8-sNxJojf$ zmiR_6G!Fs-?|u#=7(|?!Wprj1WZMv^t^#Mo{+YX41afAvNKDTy4qiJ#XO=Dwsu-*` z4Cq|_=(+NizBhTbH|&-)wGpvEpEMElu6=K6YU(XqYU(#nZ&KMM2{@=jDWN}zMHThr zGM5myaXMubt-3?=qw2uD`RkyMKOPa+ysoID^4sW=lUbRI15*91B2 zo6JX@O}Y1=6{<}TV}obhs!^(S1I1>71e{dFL_8$L8>!SV6_|+{nL|xI|rrLlSfjLJ4vr?#bx-ADLXnY zgilc@@O6GI!CNlI4s3moX%|TAUTsLKDDDg-)F{@VF+QmbF@Gg0^hGGjNuP~Jbxdt+ zd__@chTr1@HQmc4p09MYbO zez$-+ME&*W8Y&h_W&^6ePb80sWE(HDAh^ zi4~Lruc+lyf@zd+`#r0mg>i9E1YaGvm^(YcAKZ}u!yy2)i(^i{M->%1R<$YCVFrlXzFW1YXmrAb z)KGK^FX!mv^4#>o<|N&HW%_2uUyNKAuMMnSznr=&F${X=!u$>Fe=V55CBE}-!H_!> zMv2A14qNysIh$cP4!ekQ+J6kBzZGs_q2k1)JRjdyJZfZsyvu>XDZ}BE5g+WSz)jH! z{;YURbaD4rY^gw4mRqpF4Skk_XHWHujU|&Mcx!hSuHl)9T@*@G0!lNbZELl9Eukai zbh-8=6Z2KyBTXZ1-}`fraU%Ux)$%yF+9gRskBo9GIqpgGF<5AS>jg8XM;hx+BK&r! zE;rJg*Y;rabcZV?9Sw-Hcu8E@-LpjYEWy&GXL~VkR^a(MJgtdG{ojJ?4>5}t-j+P^+(<;A4L=tRZB~w^*Ys`;%i8B)xY+a}hH{7crjc+B=^6+Oo zH*Y&-{z2Uk)}URh-CaU3r=g>zo-K#=y=+}n#QG_*Ta{ap?J75@#D9$knHK|BvqUI^ z_46Fh)wAfUx!fAAsP2QLMmc}Qr)mFM_MdRY_n8)#DArG~RSr>3R@QnToH%m3_+J|q BLq7lj literal 0 HcmV?d00001 diff --git a/src/assets/imgs/code.png b/src/assets/imgs/code.png new file mode 100644 index 0000000000000000000000000000000000000000..ac4c16f913928a6490c26c7b0b96c05c55f8a9c1 GIT binary patch literal 4871 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 literal 0 HcmV?d00001 diff --git a/src/assets/imgs/eye.png b/src/assets/imgs/eye.png new file mode 100644 index 0000000000000000000000000000000000000000..e149f7cba7a8e287485690484717c5f7a108e5a3 GIT binary patch literal 8173 zcmdU!Ra6}9lg5ESa2o;yw}D{6-DQwLgA5)t1Hs)LhF}4LySux?1cm^~;2K;)AUFgF z1Yf@If6ngS@6}#(zZYHIr%rd*TTeZ|=rHOaM+4Cjl!NSNExqef9oIIRV&DOiV>8H-gfx!Q6vSKN0om=X_=Mhe<}MBt;v_ zmoW4xCzH#s{0xxwnz!wMZ|Cz{5|^E=S4OQJE8SODe}ixH12v9%KWn;-F>DYilcItl z-8#oaE?67NyDXvd^iXtaY#o9Sof9G#poe=O!zVtpco-XIU!^ye2%t;!=@tr9B}B@z zjal)h$W>|=tdfr*OcqE~mwlS2NGAdjbZy1HM4oLFkv{~eN^-)O)M#u>8_F4OC^>$S zAxwqY&j>>t1BR{-w+-IAMhw;MvcLe>+YZJC~Gc2X1fp77uevoy_;`4g`ZB}^cS7B!Q(b%^B zn>X+y{g39Lf-N)OyuD6p3`p5CB_;ZK6=EF1*wcb}3bA*=v|WyE4vo{3cof^p3l$|^OT4E6@i$f72RLuPZ*Qx^hS+KcT?PVwZlqj;Dj{RxH`$uL8i9yuOj>4-LK??s(_>=l6TatPghi51r-=_I?wIUYz&?kmetob&!?4qcDV~0ik6x-7yF|K9p8NtR{@3iCM4tNQ z-kDr^ke~2@tb=tD7D**PF;x3)1}l#i%)5%OQ)f{xP6vLzKf-zQ>wKF~Z*eY+Hf1CeG;nFHX|4R8z~FP2S$IHjI%x>$1APMlbBdH6WCv+w*tp7ZkU0DMYogNc5Mi4^ zuMH{^Q%fy9f+(9X*bZMU0ucJS&6knYfw-bTf)UXbkO+xY*cVz}iE)f2x33e+ti&0% zXu_6}H8tZ zjd)rf{jt`dp%nFe7}bk>!BuzD^i}WnUc;*%5)5QEc_&`GJ+!NqL+I+rC$hXNsx8N8uRZ_h$v_UWT1diArj|uL%j%3n_H~bd;8@ z@Cj%J*+r;R@K`Q|(9XTeDRZGj09DoM*f=Y0+*+A01x6d}m@m-oF*nduQT#xge#A~- zcieserLrSKKR9~wxf zBF)3CfD*)w?6lo!2gkv#n}Q5d{I$^^y+W(m;kr64h0Jr!PP5NUeRHj}2$22#SeTjl zb9Z={sM$Pb^xF%{x$4Gai#iJ(^Xb9PU|D1?PUw#3U!0{^(|igkxa{|5wE`FAa&q-0 zHuNhQ9|o}OL54=Zw~uu%+6yjr?L7`rtujp`_e6QhBi3dR4Xd8KzLHch-R;{zq-6N{ z&rAa7pi~Xft`fu`gpbJ!+O0*86y~_Mtoy>e1bAgpSVLZQ)(YyS*1P0~aUhB^t~Bkl z$#*?@rSl{$u_}>v#_c9OP2&pJ5-#tiLjkP%0l$-HvstmvL)U;Ven|vE9@y)sY40qm zE&K|sF-($)6r~k>P@r*+Hk@Pg&l|ARH@mW2oDEVEfG@&-USjvksGAbG*RXxN@FIccs=?&?; zYMg?h@x2#I5qSk$$Mpm8V`Fq-cxO^-_=tO;3EVpVj_WxoO|(FD(Pbm(h5MdJA`4PsGJHV?qNOUVT8yP~g5oOFzCDus9R zFCDjyS;0;hgfRGM0tZ=R;w0{D0EH!dQ>CQRMXQz7OdVv1rqa`t7vrXiR;8$0hzJ+m zl*^{oI)~oJu#zXd5AdL=!wQUMF4y9G+G{WD8BJd1KKiG=(_Vj#7uYGu5Exy-hVEAr zCRy$S`&GIoVwkjp8cWk~g(jGNYaK3`sGDA8@>G+b6a3IX8i)YH&p;$pi>eFLmvGj6 z)5t6+@e};ZYz|L>^J30G)>Y$CJnpXug=@2DRNk8 z6xg*)EShY}^J8#YUpoh!Q%z3aNUTTZF>bTiR!@)^Zp0P?VN=3k?$wJ}SX=hOl8KWO zF+)^@0Vw|Y*wK6b#e5FvqUZ8v&jHh^S(Myw&PDtj?4BPgH1^Grnn_tDJ4Pg#)*$qg z8rU$E2yf1kSv?fw5IeSiJ+)p6B;i%Mn=I*TDmL*}efDR*$3Tb|Cy}>ON036yq)1y= zoPPR-22pktQc={#*WyMJl5R)q-JWb$)`=6Zh0rR-<9x|OY-HBfyUt1nDh93R4lYt0 zVcaAgfqm4Qs;jswsXNwmfC=1t#%7WE!cN&=7GcA;L;O}_duPi|vmUL0@g7CO6|po- zfX_P|c{7|=r4fsPCixRW}u$Gs)W-Fr2~3K4Ye>Md79my1pux-4%d zHqP~(_o=pm3^$T?EtX|1H35_KZ&(j(bgzdqe#dDCI3h&W+#bu1IKC#K6O(e)+)Phl zm&Yp`7?kn1jPJ8Dbx;{fs>*~%kXL+5$o$IofVH(S7eiD?(;cM}7L{aW4XtYl#IJP( z1QnFrCX6&1rCtqT8EKNZ*cD)2g^E7fDIL!Vp{X~XvNqh4qIfn1Bkz)_^D9PM4@`du(f7(ks%d2} zgg_p657XOJ+S(PKgvo@qg|7oapR=6VgMi|7CecyqAKDZ`8^ppY)wN0O(0WZS_krU@ zKgS*kR^%Wwo7J8D-Yu~D%$TK6fBrLw>Lk>)^i@D@eF9i$)y$ss3+pX&z!|H`jQ1yI z#I%amc!Ihtc~~!L7ajMR1S05d)Z+3R9Ysb2kruxqB6wY)rfa&d+fRiyIUZ z`(2vNTWn71(BX_zVi(60xid1exMOmvJd1&s9ikKSO#4ishVBlX(kz|uu>4wc*xkgHcS9a?4=O>Ee90FWh z$bpginH&ix>VKnvqnJ06p^L5tSYN!1MOpl|9LJzXweK?hiJL`GL9<=tk+coNfOx#(#kRHa;bJb$ z44R|>CdXC21aUA$!ymE1cPt$#fCnJ1ahMu}13& zh`H~m(qj?72o4w_ZoDcSEBCgX&r-4$_`+Ks7fKGuYA&?Ga94d;%@u1Jc10#Nn2{-Q z2|o`tHGB*>hu?XvI`|5*|BlPaG!{{UT~kh21?iS4a+R;@028SuKgiUV#3m~4-&ZVe z)pMMzUpwq^0XfnA66G%Z#SvKztl;lOyDz_3Pgg~hS@*_o-<;0mrbCXQXO4t2m^SR< z1g7ZEdYkIvi$U3aMKRpsKUG&lVR6N_r##5un7)J~M)bB%R(?>YE@<@f@5(pR2apfz z(WDQrF@*~`>n}zoj1y;+4OvGShdCkE*gd7GuEnhhofdD{Vp74?UXi{QnL#09;W%52 zana_}&3AvO=*GN(76sPg2nSWrGG7P735Ff~o8PTdh>v2b4N(v?;<0o*nX%^$IZG^` zp+!^Q&yE>(5LLmu67`qEp+e3pCm-cLmSWXm2a0-U!;gR;tGV(JgjMjI6t#@vnI9Nc zQ(*TbJT$addI7wm(R?#!p>;3*W>?^k_kWZ%d!F5a7yHy=MCH|wCs~(clZwrC@Wb_T z?AKmiLpcK9<_i&hog{Z(?qTPgDQ;c+%F+=`mDe`?2R@lTo;l0i4g&#W|Zm2WgP zxyy9d-oWabJ7T~1(M#M9DoMV*?={@{z{L0|`W}(ndy2flNO4ZseVa|wGHy8M>n0x# zJXdD0>SO=aj=P6lMv}Lba*@p&^{-tYFY8!s>?vJ8+GShDwV}6_!)MJ{(r|vWi z=`0==NrH7h@?UIofLUX-l^8KQvemrxGqV!yONxDR&6FsVU*YOr`?Q)Jj{?Y|-$MBc zI#heRYd$QQ@gwXgj+LdhET9Es4o5#kT6Koq)kX zUJ`uRW+a-&8$GyG zCd&KiUPIhpXZ$Hsyd$>IGHvcl>&-G(puBS=>k8wE>$Y+&m2VH^QnWMEqgAM7$C@#~ ze`_nybKsHmag!H95bdFNnbz<iHS>+VSGr%BGdd~1tVpY7mqChNV4e*}uJVemLqXw~(98Ss~~E zD4?{IGS~M-58Zq6S1VkKr8bl4^MSd;p*#-reLZ`e_W*n$H4Y7d-3TGXfMq;4(|9Mu;4YJ+fR3E(PS9n*5=f$%y9N*X`)sAEDr_ z+Er=M*LL^WXsCl7LS4E``+$N8DRNX`%>IE^4h{5VVt+vBw%* zvb;KH=+I;Uui;&dy=j4b-|Pb3K>?@FGEl%qb$HvL7U^&0j*gg2ui)4KSvtXM=*YJ7 zlwoml42(HiY{)U8t|y(hkLTyQXsr_FT*-f47{uGEX5{3U-0<6=OU>qe@9&_OHqGf# zp(yZej|2A9lckvEi@4EKYBS}FAFv{Jbjf}8{vd!>sd1^TF0kJYu6eK zxIYUe!w3U<7?#RkTP|>?FTYDB-z^UX?OV-93`EA9f!ZIG=vqkQ*LfDGPZxkIQdk>G<3+aF zoLUsnKCszMLnew%1>)TM4(i}hk-uWJXKLWN*uI2aw3e_G2F|8AL|4q5RGfFZE9^esmj-JsGu%R#!XO5F`c~Y(_vO!&)rZQjV+*pA; z9D=r?3IaT>ZNFOgy~%)UDCU3_MH2UcKB!ZKY_pr(Phoe2{Kq6Y6?QhLhaiJIa?{`7 zyK`-v#pV+K_VpK!_=5LFhU^;?1?kNZT+Rk35=xojZ zd4Bz@kh`(hc}PWW3shJmT=FL%a7zMn5p`mUI^&87+mQcj4ljU^K1e<)fd#`vK0)B@11EOu z8C~=~jcg`)g)d(R%3sy&!zJrj#MOZ(ywNM~?km|XW$Oq*v18lW)-I2nl!$fkOibntLt3{w;&?F6MUC_TB#x^Tr<|sV1Pwm`k88 z`!JY@z11RivHch5!J;U)r6x6*4f{!}-u~?UUX_SrCoQv}#tR8k-Nz>7mk!aau9f0gHiFZ4VFGk!7wfCm>8mg zf3X4I?BzOdF~_19{(k(KWc&7K$3a1$Vc@a@?@7?SV0}#)8S(qL6%8l2#-{mD3*g%TJN z;N0>j-9a3YAU?v1expT7RxlbR|DepLaBW>`_TW_#r1dCC3J{`IpV1_7?e2q+npJ6q zQAv-GtL1*AEyvdy;X=>)zDc5JeJ+{Gg2YG- z;-z|wZl6_NFd(kiN#I?H8cI`aB$dG=QnApYwJmKvAfZ7sH5@z2egIu1c?&*X73CQ3 zrISwi&gYfrg5Rs<((d~2o3G83wb=N5>5VY1Y+SkQ!Y205jS+E{(JV<2#dhvE8UK#2 z{i~;?eyCIfu@fT_O|437xt>hnI*%>wkTjLWpTxA3lSr@@lD7mjyTK$&>8@y|&*9FV z{xE?9aC+9?gy2ZXXfkD7v0VNTyp&uvF&-n1L@eY=p`%wae|fM}Yr+vR+~JzXqgd^|Pd18yak?lW699 zbNsXz7ast9OW~Ff#HsRfB-iodUS-{XyiS?n#o-?)YX7>OLS!^eNicjyu9^1l2XUmX zdepLe+B?N))uhjRZ75874EEn5M-ER1V+F}Ith@R=Xr$h|e2f@h$scJncd5&e)H%p% z1+IM1U3+l&K7oZdf1rCa#3v%6l-JCKB&HGw?9`~~9ltP%4My>-V>E(kk|!a6up(0iSBSf6CwTCHJSg>Ws)h>?>u z&uML@eB)zauC=SWvQ63bfq?`lU^?EVJ^ZH)4)uH#{l?UKYOx~)mOR4L zA2fD1dN3L~D(!bXex#*@aMU0}lQiBu{1_CwwD^Lix0sfsW4`T%T&rKw?uos;oO=O= zj90L%3%yg4#HOLpVb&@~`iBKbD#A)X(m786u1^(J5KYgt#|ArHVhVl>lu2PqIyiFWJ3%04n+iZ*%_ z5$S$*bv?Fe__M1<^8>~>yyz5{4q`x7LvXXuMv~-_h*(iMJpAOPlz;QVyMOv2MOYct+LXkLcsAM$+UvPm(HwB+7z!sPc49X5@JpReLP;o<-9L4O}( XP-B+mvrlZE_&o|(K?77LXCC%nXl$K0 literal 0 HcmV?d00001 diff --git a/src/assets/imgs/icon1.png b/src/assets/imgs/icon1.png new file mode 100644 index 0000000000000000000000000000000000000000..8fb718a352c41ee3a5878c902de2e9603d7e0e77 GIT binary patch literal 4141 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 SrC#L!0rJ5k#8P|Owf_J|?UUBUC6|rdC8S70 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 G68k^BKaHUP literal 0 HcmV?d00001 diff --git a/src/assets/imgs/icon6.png b/src/assets/imgs/icon6.png new file mode 100644 index 0000000000000000000000000000000000000000..976d00b74d6d9c696b11761d864a99eb72f0c9e1 GIT binary patch literal 5382 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
  • L^dVWp0de@7l+A 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ÞKz5YuIlndR^-?IVs z+wfG_`C}4TlA)R4u%T@3n~0N7Yxx~xW$6;6c$FcdU>;EmN)2@R>vyjH+9cnEx_QTi zE42Js>=JxA;PT3>zBFE=-Zv$5(-XBbGzd4ZyIfidjO3v-*0i_XUvygB?AAt3?Fk3O zImk!s;vCWZ6i0^}htoMd4a`N^R+#9G>^WY3E(%oEEM~~X#z;YUFPgeW9I8y3GC~qs zk+iJY`9yAwxfrC3Hz0yB|C`l{>APt$+nD*r3N>R5#mp^=` zE%{wRzbZbWN}fd=Q+V6y*y}BDg~d6UIcXWEFPVpN?G3j0v}wG{gY|jk)7N11v)`{1 zs~1llXpg*yomYU}$Gcrmcm*r}74Co``Z33j`B>q zn>cHPhUOihErh9oj}o-qN9r#6#XN#6G$>rnlqmAEl6|CBAB3MsrCX5tQI~9TCV?%%8?l5e!!}{^;RZ_PQv@t~O)Ws^v zu@vcfAItHG-FI&~tv^vO6G0=!xVYCL1=-R>FRW18P0`bFZ&nujC3ZJ9%v*bj7j_AV zIy6UuHQ8QHCZ^MIV$b@P=dcY4k%Wn~JSlovV;qDw(t`K>OgtqSdW9^t- zRNQ`bcv$$1Jt~^q?jsQP%6GMP3PRAdW-M>u#L|Y+g?y!0`;3{=*B|+53bgHBY*Z#e z%j;J42X7?AE6icGP-LXR_GZlichz#>r@;H;tuHgs?HxhezBodZRYf=FT4C=ra}k)t zK|Iwy1=YhFxHh(dT`_7(L93c1td{D;C=$!KUd+Cineq#<*eZecUCZw z8%KH0RhY|yD4M~4tVO_@5BPKL_qvoEV_58k$bq-iOy`67&wdB;OgmA)xN_35He98L zk6s6F01|nGcRam=bBqS2esF%R^=&H!STZypoZ07{^m6_QBNle+h4pfd`3U1dpT4D5 z59Y)4#jZAn!^3HwH;codLaY(`7v&m4FPnekSoB?MJgF;@*&sgdwUqzVqW)RcrbU^S z2JI|)m*fYcR^=vHQ7^cE4T0Kib#DzNOio`U-sT+qYtW)8#)S?vm7{Ah^=C^7IYwD| zKCM?!wh@LE`MhByhHVcZ>sRE2WPgJ24~3c==%>(1hbSAijHJ?yXqJo%WvA20V2egA zJy3c5v$y)oD+;OCPv+4LREh#%-Nviq6{99gYdfk6g>jaKtLGR3hc$!Qv(y>sqKw5~ zu`;tY+nPwrHXU)LkQQ9-xCk3@0winTFljU!GLUQauvVurb5o?*~?xf zU330FRJ!^zQ@(1ihM-Hf&W?MNX?S;MjwIY|-+S2IBJ;QVL!F<&xUa|N|Gkwe>!%rC z0?IRXm__?kuk@bafbNA3liODh=Fd4sy~CIXa`3(X0m|p@dlpVRysJr60$9sV42y$I zdXv8q9=8CxSuWNYmv~)`iRdVyV)Apns4(aLw`sItv{>7;$+WzgKQX+7!nw0LJ~SPDy#Fa6 zfwMDa7*pmD2hR-gqZHMk;Y82ww9VqKM(&54A6*+>IaF*+vF3o&y|QTlrP4Ljt#P3r z`co;vg&#hUt{oKQhr?)9r@0a7K7Am=4a|J!Ov060-D039)6lxPd-JXUYGEIsNPxuZ za2$oYYSCS-_PeDqeMCtYj9&YofQl! z;!0`rAvu3*hq12F>E?@RABoyAx(75uo6T7Y+v$8ex%*{LdKxeh}uRQOge$Fts4LU}E8-u_3#33@3{xT<0+P66< zuG41~eH$Sk5tmcKm5I7mnfmb5B!Rn{htw1}Rti{{@t#?~_n`rnrel zAk&KKre&0=;f??#Evp_8a4HdeP9-pnZ0SUYlB)?;R01O}JZP*LF3C$>RFVs7-rtt^ z^?htb^Yk=7YhUZPc;7JUS?KcWmAErjpyuH&V=UX}gp9o@H`pbvo?=mY2&MxrClQ(w zVyz{M6O|I=a?-FDP91yus`J*&kpL}5(~4ZW@**_y!5f!P^<1sHI!2FE)_5Rq#_Y@c zH=}&`9Vam$>Mj_0@0ym|RCXG9AB)}LM-xWO)Co=a!IRN>@O!Y@aZ|^j(@ODWB1No! zyq&?cCZGM1Q|njk^qB%5*o3tSe9ODd>WQC*$i^4~-RohdBG&`lBJfe)%WyuaX8*sZ z_{{i!o8s^}_o$j0!alAqjat*o)V-$DT81WHH+5Q0GO#K7(|pJU$O=|{eYwHKZc?Wm z!LSAppCA3c&!$DVh9|19iFXq6(JzM_m#az?82l9uob5|)rd zkoV>T>jq>(*YD=N4FPok@64RkS-GoW*z+}){?jAJ4{8$Ym9u6Bq|c3a1F(7G-u}l6 zF>=2XVOmDMm(z4U_{D9#!;AFz^Cn+OH!K4+?=fC@ipOuCqejm_Qo#Ws`nG+*@$usC zBo&{GyJaMYfqzcMG$Uh9pHp&6FUGAdwz6D` zsM4@PZ65LhkdHU8+PXk{Mm_4u5v4u~vuRZ2AKci)lz>TZtm<)fJIlIF?1in&HeorZWJ3cEC$_;Bjq;AmuD^t4$afb4Zl2AQqiQN8qY?~~QTF7In%FJt$~yjR?M z&ZpCt2q}H)*^wb2Th-h`+!}O?gO^6-V(ah0{ZZCE{)z_ap6RNycax=h^OQZ83u# zwhY516IDm+Ek;WaPZW~`Atf)b8p@ZARcbtmGRF~wSQU~GK;xdL^oGE|<#)Ty??1p7 zeWgk_i-mIEtM<##@bwtIbE_fvuQ{QE*R`J=BW9&lv@N5T>*gF~r?&RxbB|XM7oKA^ zzB=qKM3ehJe&4)Z^3NcCxvKuvJNn>vhu;mK|FHRZ5Z%tS$EMyjxm43UV5r&Sk-H$f zl&Ph=b*12&Gk8lmV(MKdc@;W3?dow-Eq(5(B!!$(TBq#^-BXhSWa@+pi@9#UL7!OtLq51`o(07(YGazj28Nd#8 z{sXjk4}MA*o|I7cwQ^jB<*H`~UkWq7Q_8tr86Aw!_tHhoyUGm!MikY*L|ezbK#pAf z9@g}pH^a@~V@G^x7{fJR65Hm=#g9VpG&6LzzI6?kma26=eU;HLns1Rj!a4BwD3cIk zsOqJc-6z-43ZFXQEuol7e88Lbv4wfP<{&Xd&Cl5l6NC;*X3?T0Q|6#HwEXgni)Bs> z^12!Q75*KmGQTU3sFX~rn2AD~d|MYc54O-C!Ckb3T}hBbyfaorb7;nQsvdMp-561O zx#&gJN;Zl%Es%3dox+6<*84FW@R?=&7!K8(amwlY-q$zYA3E4RpU@>xjf^$Eo>8N_ zJw8twiZPm4f;NqzE~d}Fnpg-BqQL@lRjOY(#Vd>A4M%v$KwqaY?K;C&)5HC^Wzxp( zl3dBFdn894lQ|qTo-SWA9W)sN=@MLMB#n>tsXm+U1rQS<{ z)!zL~*2Lzyt<%vaoV?d&oF06hJM;ly1sU$z-&H5MD2(gdK6xRV*$B?P*=dUgzL0=V z5_r;=ctMX&UDYD&>GHr=|ppY}OQHj--DH;TGXa?9`O?AnZ@ptR+sHq(d^d}t2t23XLC z6#*PJFV^8cCGlRRhi?rYZ%p-lp0MxwvHh{74zPD5Gz!^x1}tKg^X&RY^ZidD-REZM znJb99go#`WTNVy)--GdON3;BtLffvlAMXqO44Vf$sWDv`7mJfTQxW%LgJ>6PuG!~l zjr>{(kIM)q7$HndE}FU-g-Vy|Rv^i1jMygNv-k31u@TunH8}%JY8Rcv@???{Clbt7 z3Uw?!Q4>@niBwb$CB;c;I*+P{ZmujhQe4ZyBk%aFx>6tTs>{|^T!B-_fyC*@4i3PG z(;)J7t^L2>M!5wyK(*h4g$1L7EK-T3HJ4y40n6~0+9fnk@4*H;#Wxxc*i|N#$DgMz z1zD=C#j?E0mBa;FY4_Fmd%M`yVe*CF7-BuP*O&6am(g_>L)gBrw4pHb=c}2++`dS; zow?cBHpEbmc)Jfo*wb6lmy5?;@9qXT+(ANukAH4q>-PR^0Jmn*oWU}*a?le=_~ykM zgNIm=LiZoYJRms)l9M9=`1o?TfXkUto{0h_? z3|0>{5WTgulZr4R=ac`m|}4BCp85eb8moE`C6y}tDfm?L@qh3+S~;d3{Xm4~ z*C4b%Fg#mMY2yodK<=l;EPZvunnGLrPEUuAI@SzT_17a-#$oZOf1dW5+TiLjhMad?t4o2a? z%|a!NqI1zRRQ6GsWI&Oa$*759H z!xH^bT}b!||MGv;9RJyg$^7SmZiq*%0?ACYmGc=__U7?i{*ODH@rpvPG#2ReuIw5F zx#{xNVPqYF$1w}+U*FyZpu{-7WqI|frEh&D1xo}fB@ogzV9C>6*r|Yvl+kPUSH1o~ z{ca$FUN6*?0=`l2qNUFD2MTzNaJb@_tT!NnxA&gH?7Cvx^%T(ob z2jLriR!fnuM_x@d<8pQ}9#&rB$R@p#2Yz6 z1i9nY+!lzEKswxHx)!Kol^2%;pSs@^l?n43NBIU0@P#{P6*09L__EwosB+B$USsNT zE6F?FNkPuNcICB6LLzTc2TP_=Fgd5UFZw1L#jW)i{81jr{(a}UHLQTCVI6BLY*qM2 za|6h+g;~Xj1LlzZp34Dl}cbzhZ z)z4bu4pyCKp607)t`Vn8KkNLR`tb=P>Xol0PJPN>t#{XAzp?e=T{hE{?rb*y=Tn+` zzYk`1dv7&s|RK{<=n>|NPkz2x8Uqs*yj z8SKp>p#IuyIkx=uSLP?@Y>+@q*zh3Rh?a~1DYA9|02^-Rdlr$*s`M$!WCyU9q^7Op z6~8A+pp)aAs^X~mRxqzvaqP0cxB2}{xgVv|GylcVViH)wLGS@jLvFfpRq?RV>odCi zZ%qjsW=IdFc=8bSOTDTQ2)M8pilY_1m{r5{V>hG`!1iiTXHS#z%Tw{U4xy5I;cl*b z_tmQB>t?g?9g0Oc20dEE$S$Sq91B7iT0M9c4zpBMgda#qYs*c}Io=`KkM>vg89e8a zu3fD4-+jm);(3LFm+IC84%i1We?y60r|q7TJQZJxnDYZQR|ol#JAJo=+?#O6UK7SH zCJ>!DUOEu&9-Ui)YR9|g0=u~E*%7Gca+|otb9MF#?8UY+6mUiSzx|m#TN&0CL)kLQ zm8`_UV1UBi?~1a9xc!*ilwkD=iZ^Zf#qM3$pOLvb>3UmwTJ9GGUag*>WqjVyf*w<( z^IGQOhwAK#9c4bzVX-iqB%W53Aa)gg7&0?=;C$B4txSzt*fHFclD}bW z^wm8lWwofPADV6eCsOEh%Jn=Jf-ZgjYZjO6N$BGsg3f=T&&I)RW^cwf>a|tE`xiusRwx=?ix?_eeNHU%d2b?XA_h$ zXR+-d4x?b$&kCRZ2d!Uv zw3Zr_z*ew1XGa~<6^KDGDm2~WX&G;43J#Y1RX|<~*%IWXi8HgGJ=WZ_%HQix7QEPn zZnf0;WM5m$W{fqGDbz=7T_#Om@W~5auxjY@N!{u&rf4~s0rflk*AvAA?=R>(?q5|P zLN8yqBM0`9Y)NBy>xhBg8pi)jdaM-%Bczk|1Eo-nF)eGa&$ zU)L+-Hr9UdzGqzF`^{vg>DH`#pJ%#JC~!axrQx#qixd$5FnVV&98<*ar=y_SRKbo6 z)iWFt2d%-#B&K;^#*gAlUm^*EmA{W?0bq%9K0V2T*`NFSI;S%sA4nxgt8H13N(=BU zznataU0oAC@4KtR1wifzFDH5wizzgWtscMEZ4=HPV`v7q-!)CTDcdo*cl0*Oh%hqb zRwMTgCjaoMk4k7;Yw)D9nvw)Q+PwLHz5vZ@xVf1Tsm}+V0hRw6c961FJ)yEvjFCz* ziOX9Kz`EhBM)LJ4?l0ehKQ*O}Ts4vxa~2H_eF6{eu@`e~T67by0#p3-KjP&{BdNJy zmPP;zp@N~eE~^YrOelezt$VyQ)@(%%rr#MO56$^FfJ8lh^16KDe`yQz3AgWPqS;?9 zUKKl!XE%3;n;I8iu{K;O4L-k_9$Lp}CQ!CCpQJTE^Y97`e0baC0uuyeF%LP$un~bn z)CIm5DlIf=TT-**PKPJJ61iNw`J|1%6D*R_m>d#H6d%eN%jxr{%=0>KzyHBNLnhn; z`QxmGdx_@F@@sl7iixo&2d>Wkc+aNvw#`}KcxO3I!7b4SY`pR~_0sBmRi(4*D)jkM zkHHfn)~nY$SB3Upl=(f+v#$?*)y%jZe8Uiee)@y$(M|Ao!-S!L->B`zFMQs%v0MDo zkn`EUkFT&o|7xq;Z1n*hx5z!jz^2TZ zFk1fh9DFzG(&;7U^SWJDH`v)hI~ELj*Jx_%aQ;JauGMDjx;%BDiXU_DZiPG;!IZN) z^!$oZ!*lx@1TGi3wrkGXZ8CU5w$>tHwbwwSYY8~)%ne6grQKsEget8DqnL_zO_oth zRY>u2;t!0t;SFDN&GdhWwU9U(RMIX6?(dH!WH?f2lEh4{gwyGTN7a``rAQ$-)v|hnq7&~gB^FzqW*Ko0%v6j` zcscuiw1ENPFsku_Rh5%Zsw7-i1oiF}!@=W=Jkth=-!l%j46i@Mt$Xz}y2R3Ww7X*x z{4VC>45t{Fn+3W4INGwndT4pgbFN*n>#UF6&Qsu=aTC3^2E2sV?m z{m3(OUQ6`=&;WJ+Ua-%XNU#zeA$m_kZT0q56Ts4wt!|x1EPP9-+xLx3Z=V#&abUhf zR=3Y3@h_E6j=Rtm+qBO%q}^_APkF-yMiX(H0nc#vyZqFBV{Wj$P$xKQ0Ea%CkcWMy zeDD)1I1xx140jOT8R!r>u=m@ceqJ-U`@X|VZo*LCcybpG-ZGwHGa+ojS$Y?WQoIFL zAnS!DShcRXpO=yihzNbc@m3Z>n@jDGq&MP50Ip1h(l}-)C-m7fc=T78Q>c zHL0jQAf;Uk?}Ks@bL8s2W@BwOT-J1%ZYQ-zzg1*F-6bTNzIx zszh97{hPzP2251LfXsfw*0xRWt_LRgt_$e&lmq(y+ohjU2CVn?>U3@5=*)S#&L0H* z6SB|I^C!~$ZF=o+eX1*#oYg%UgE>|GTK^K-Fj4-tC@vM zES0FuIt-Af_UWSLUzT`vzQh1V*({Q%B3h2H7X5e}#0~XvD|^Kk{cj#peJ%v0rcaZD z>rOkUQpEPf6}2K{n&`L-;*SA!g7=7OT1xN$RrEp=`~C$Y0vVMF9mdX6!Fx7qi8{bh zv(q99og_oh8|GJ=1+QQP;KDf)HxwZ>mVHLp!wLBPcgun>MlL3Tt`4+md0J8O{V9tR z@FU^@EJQjqopkBJg7n5@K=^|7L_rQYs!RmimDt+Z4<_W*2F^Cy!+UToT$y3(bqzcH z%I@H<#hq~g`mtP@X+LZLFolik^9fv3PS{RNK#_F09~$uc3Z3dkUE6&6>ZJqx53mIX zF*zn#Uk^c022y}|h7lEOJpwV}Vl>$$;_4q03+2n`DWMp*Do`Y}Xx-`|59+i_Hg2r4 z8Pnx9GkkV;n4Nw3#I$RNmJ_dBA4!B+^GPWx&~;B+xs${&g<6JJgYp+gLyIhG=^@ge zzLzH!r`u@un!g$Rr;|&RQcv^A8FyN0o=M_(s41o9wWY^s5RaO${>z4|@Qa40ZF$|= zW~Hhdhop}|AJu}!kxTGA7=Mr$N`$FX>UajRyWS+xDo)rg`1L7^=WiAg*GKd*LU7y3 zz21tQBiJGWRp;exa<;AuDS=Cw1J`AYXuEh2Smto}-1CqLfg();$&_watU9xkiKb3l z@wW!-AD=Agl8BJgM&z$CACRe$WH8iOfUwC=#7dG%DRk4F9_-j8vBcc0DV}kZJ;po3 zF&QfutVx!3jlQG4LD_v|`Gx^F1FR8@r6pD5GJlM=sxEG9y8}nlZ4q=Fb>3ZAg$B@K z2))7TGQXIgJ*A`$A<0mWr1qFe7rA?#%{-IV`kwUFXAF#vPMq7v?NV&8wsOTw)${(LAH7rXdt}@j?OMM%PFJkC()2svyVqF4(T+v97v9P( zcD4zGt4OhppJ)2NyhWB}?0$TBMkcq%_2QAb>Dt^Nu^E7M3J}AGLHCw%ao4>w*jqC! zp3jfQF&Wd=Y>)a!TbeZOw-tNzc64P4|6KDsPT=Rxd3CkkjXxE^Y9luITW3Vw&k+Zw zqmq5sCoNI8zK*dk56RU`gmJ~W6$3a3m^NFQI!+x>>4im}kJv5uk{kM=hOdbu9gDjg zFK)jkatz%Ban*TxE|-bsi5`m zvsUy!klNN$FNZS!Sbg_d1Tf5g`7&J5Ii&+;l^i{BdmAb3z+Hyb(iDP zUaab~C{0)SCBEVTt!VmnNr4=UUP>!rdDN`Dc#mXhRlk||nJwBNJ3uw*<8PGjXjv>GvVLZM~$`4*Jp1dh@r1P&!FjO({~m`VK)RjRaY^AnB0Ju4i{0 z4sQ1`%}l13Pb#zhhRqCc6P;{NB^V}6PfKg}+Q$+B{_M# zfEk5Ox7#BwBfW2PCHR?h1DTXCQBdyqnb<{#A^1ygJA1_!JYb^e{5YO2b7s%-A4ocC zL9<$l-{%`wiM{I4vpko&S-l~{d-+EA!gD#TJ6&ISZcl7mO|tBBcif$2*ti0g zqoN`E*=f7Qp?@OgI6*i{oq>l7^44on*s^R~e(RNfeRs>)r>XuusXAus+~8l;2ZDNi z20rO@U3)Y1cI{8lvh|&3zGqR;Pa?0d4`vxguSa|4f6Bx*GH#O}(qQd#Ejw?e6fqg3 z?eaYLAl6{FB>e0%-P#3E$isand97*f$!|MFEV7fKmkfK;mQUwGX~mGfmm&*Rfe27T z2@(}l%B<}XmcS&HM%WbSb|0!~tDnl^5k(FB!C5&srkt>locc7LoP9`PRq~N7i84-H zHU+00rw0-3?XmQ%s;mq~;h$b>GdIaTv>a9_IbP|zl<=;*UZ26=6 zlK9AefLkWfkFuQTuY4MeEw0q}S60%qI6E&u`GJ8P8jc{2nKR~ZB7@U70W!3$_V9W7 zyq!yY*_79hjPPk83BpsmA&_Fl?lh|4WTUcsIT5>e30Sk=<&HbsFT^_gY4*b1+rxHF z4#{yIbmbB5!wKu(cN`K3->MLaN23c0kVq_rhcSs$(|!3-o7eGsykmlC-6`g;y$9ja zwBFv%Cj~6J>|ksU^6<0nP@S{hWas$2?GtmV0b-(Dx-}|6YQ@O1_QvVI`FnZx9^j{LTKXHchWcx?<1 zVUWOH3?{^>_)VnSDYR8H7x|ZA@FES;QR#H=z#iz6>0?90MY;jji=#JQkcVNOr8?vdiG3FG$9gl3aNA&C*D*&|Fib+bxDCu@zVW!vVn<;94{1_r?8M&A>L=uFv zXBh=^q?#BvPNCE{kS?nK`ma<92_yJD6bQQ zv*W2lmeOq92TGf}=Chjyr=Xl`O8K@ujrJJc^M<`+94zzU)y>+m`7?NSC-=o2y4|Jn zCl7x9L*9Yg@}mky%tCnO{nXmvAqLsBwZ-(oSID67g2LnMm4^%1tLzx=1vG!Szqe$q z0X<%>YKmlTiIhbkWvBe5yn0X(S?xkosi1)H7~hj6b7i+cbB_mApVChKiLbd4Ylu1g zxBgo&GPcW%h~DHGg+atW-L7M@NE!`oqzEvJP&#DkzNq_`H^XcX1u>ba-I*XQi!ZvC3G-)dJGFO)U6h%qS4Fz}BUC1U1Cj*)m|o`1uqF}sht z>%eik^ZfR)#Eja#nIpdGEzjf?MT^oOkJeJdLPCz;VN2?$u8K>=AqA=BC7#n4XMz*e z?|euoyrJ(Fk>z{a<-B2<6POQgsFC>9as-?sS)MOULU0tdB_fR&&V!FC^Mga3WBcqe z|9y@utnuZow%U8Q!L-!e<_Oxvk({5qXi{=;-=nG-*~=;JZmxd%NhWP6l9su0_nxOB zXs5&*Pa;$bcTfqT^c&gK2m{BrfPZ)fd|&-fKjeAeTgvwxrRH=)1>gfH!clrGN|KJy zuHM{!?Rb{QX(?79=Xm3pM3Cmlx0U04YbL$!p-2r-fA-7t?ZuM+ozx_S@W9c7!JqP% zeX2%o&5;tcFKk;(EM99Hhn)TCJW|>1S8Ttp-J!GHPZ=2*(S7wcaH;t3`$8RfVk-x4 zYSbJW>F!FGELOd)=!my&^U)t~Jf-Y*o?0WJ+SnS^zZEu(?#^^RmrGFf?Y$Bdm@f{U zCnn2-YOqMc-!Q&jgFpF?%Z~c)3fa*bh4w=AaJfJDn$C8IEQ0SDKFT64dFA=v{HcDN zf2VP`<*jgWzot@q^R!gT`(r3SsqDS5X5ktEXH;ZYUk zh)!Pati2jJg*)NjQZC!Yez;_kkTj<7HzlIxH9iDQXnHg37s=l8PotrQ&XMVdZMxNQ zl`jy7O{w@z@!f8+um2xcZyD8A*mY}D++B-PD8aS3yR^k!g1fuBy96l`C{o<5xVu9O z6n7~_f?MFr^StA{=Zx>q{*{bmjAY+?t+}o>CkLYDQtBaD%(3~}c=~bZKhb;<^FUR& zFfTh@N$4up(;Gi3%nCnTn)eBH8JrN;+5IB%3;$&xM{oe zjIdfmyrefkvt1(lUe=PWwYj>c26DWY%(a}qH$$=|-3#2|OLcNCjjB4G%nQ6xlQ7Fq zHttoDw{`rGs=gCBq>$)YsHsV=d)&;#98HLi1Bzsv{PK_GH#(h=+6{&>3r_^xsjMQS zvMViTIqUTq;JQl)aC~@j`C@29?NXlpF6Fp9qA>Th{{DtpUicHu2#<6{R<77&I%Ut9 z6brxpd3^N6*V2_d{EPp7%s zJmdWKmclIqxxg)lOPhez%kif~rkh0+lk}%p^?xp8o4Qarr0R{|7ra5D$4@)7_N~ri zZFO4$V&KZH5UBH(@Neg(SBDT)Ys6WL@36+?e=3mhAyzn8&*DGSJbMA_r_X_cP+4^<9&@E>cGkoYlsJYmp1-BJEwH+BO&*x~KWp%>P=zsk0{Ka+FrA5+zUd7Q+g4_0N(mIT0g39!FTwN4E}r!4fflYC>=A?L}Tst_>eni9CwTF6*Ok!-}fC zz$mNoF&&P>G}VQGN&rgLJ|~6_@3-fcf9~m})-_e#zEIAGH4DN{E)HATq3nygK0%#H z+3+;{3j}p;P()(mJh9}>#>@%NtPp%O`Nc1w;rwf6PV}D6uo^;lkY`s^Q)mq@M%qc^c$+v|O+YCkzuWP*Co^qqt@yW*f$*}L! z``}DvvGc%`)b&p+1w#|{De_=Rc2Fg7QbhbYlij`M!CVVUH*1w5fhU*txF(5yY?U^F z)N{%YK72kuy|%^$B(WX=*P z42t;&Rpoyj^l9nkl)K_9;cC&RJh`>~k!*{&VoX(i9`dM9e>0VagrtQ10wAhs8~^5T z8p7Q9>7k~zAN#%XLa|13k%QIO4xlVAta6M~c|6PZX;U~X9YDn65nm)T=JT&lLumGD z^*xU06ODZG`apm;6%#LF3i?yH*sNhdoU%?PL`=*)V*!<^h_GqNh6re;NRWsVrk%MX zC84NijXqlF%fc@J+#)Zf`JE%F^}U2%#Z%LU#tLrqwW2KJycVtdgSlAHSN@&B80o>m*UKNkCZyg+svd{Q+&#{T zv5mN<2JxR;0gF|TTmplZ-MTEdm9nkSCM0TOaW3+k)D==0Vs*}_ABAvNWv&B?hSKaTnXe?x(a+Ph>uLTpu%HqL_<8@(G?QkU`7mQL1o5iF+s@h2qd;^aGUn z(*Y+H4pR~DHPhA;hB}LbU8ZFVb4Nl9*P9;X%UklAhURP;EQA=pV9MgT1c6FV3{9No z=Vm^gdGHO0qoOi###$V-e*(W;HHkcr5mn!3d(cDvNGM76ivO%=VoRs$fi!(A$C!J# zjCv9ZBdxcE@0fO*_BL~AYae-u_`CP8HGT24gF)l=^Lz!&5dD?CagJH{bzQogm9c!B zbq-fVZ)uh0t&2!1M!nn}Bbq7mNmIvdvM{cU%ZRMM~8oGet_}=FrO(z!=Qn*&C2{>m%!mitt{ex(E zPi2OeP2X7rWpE2~y^Y-c)qu1?pRkI}riZ2r9eLozwQ?v95LKl4{hZrp*it-=jO_{R zGgMk6ubT0@4c~fV10h!a^)gbciDye zFEpC_duIqJZIMH0#?Kkd5xk2JHEuEe)?9N;5jR*xpYD-Nnz@XU4hx^_x08KV4fv|H zRFom9V0YprsVC@BBtQFJt`$FVV8SP4^7&ysxgYpNPj5j+1B9&yJSv_cQWYmbfc#m% zA*a!&KxN`$o?~H+rSj*R^lOwc4Wv=Ql0AW`6O3q7oU0OnDt5*x>fAkzg`S`^KK<_m zgYN^Ie+ld<<`n@6=|^ZXWEi3vD{&Wgy354N1-y4`C)|kG2vE7;0v=aCJ;}F)*7DDqkoamL1R#L}Xw%cvYaA-yk=fHw{y zhL?IVRESL}!lqDeT-|ExS^QuTxL~n?QYCzl5&!q&m!(Umd5`$AM+WVw&N<>+r7H{tH^-EBcg`s)-W)$f1MW$teK%RQJehusBn$uEf^+7(+#W6FZ(DEK zUG#8w!XDS24(tf(6-ZxU>HQ{fdDolkHVF0d?&`M^iFlyfo}%{oKLUgR>J)q*&s04| zLSxWq6ydGKsy3BO=d}Rru8)NkC;?{v{C*E#m&Ki_x=kmFz3aYp{mbM>XvRxk3FFyK zm!9f2eaba}q_CQ&3sID`{yVyuWBGp~6?Xfndloie)Lr`bq+IV$ejsN)XFh)33A13+oT@-9 z?!%DP^H~!Acjk!faeY> z4cVsU@jR@rZqq`{^owhs`s(*IZ=s6ZjBBB%)VWcbOMinQUk4$>x^l1P6a1)S%&F_3b5tNGD{BAST z7+9PBdDqgu$B@4BpS&JvHWLd={j|V~>ynb@>+Q&qdmT=o@Sx+Cmw4SPM{tBn_k}cO zrncG$CNSr+pP(~Q7*P%3XCs~P!hz@3qc+(0#uWT?$}xKSFK>TLv<S}us_Sh zfvu`IwX`wk6Wr!qDL`D&;A-n(*!oZwkJ}l|L8g|E@9W z5}x=c=Q$Ma#=(RuX&>Kn!yeN2m{S_b3DBmAyHUPQ8Q%{7$}Yg5xN$eQ!?k&Qqo^vd{QC7Aiw1=iSfg8oj zkN4+ENSG87tXh`k6=V70iri2c6f;Z$RSQ8$V*5(6e@=}{y0W z9Vs*282Z1B0(9`djl!CV2~uRbIYMDRH+R`&&0ys7^~hf=p9l2pyX}o*-{x5P3y*dU zC>Cfr|6SKnTE*5{DE~@d`#Ij_ZFBU3P(s=bOMEIm6N4{)lXHh&*e$j>{ie{B<{~v= z3(mP`54;W zQUdXm?Kn?XmhKec@)H%Rh--VY+B*$-z`l=!K59e?Dy^Ok#_G2?^%XY|v{8g}%9_vk zgIlxF=Aa=|@YkPSPxSiC6ox3TOm_!Yu<`8TsSZK9q0+!hL&C7;c?a86J--6OCA-Vn zIzI4mCB2&MUQN!Cg@ZN1#4*qXx;)@nG(MD{>EL8hkXz`iku)hdnq5O3w29~{uQzN) zdg=I@>DGMi3N*n5FkH^KRSJdkpp)<7OV zKU&e5(&Si3hX~s!@S51sSs!_67z}vA5mV6h1{B*`O%^;4Xc+oliQM-bto?L55y_$s ziZUyWR&`r*Ck~+5KA|w$UxMikk#*n$jNk{Z&zVKdcGw@`bq$ywrkn#qo_mfQDLUVr z4Bwu*X4}FUCq!rM``4U#UZxES6~Sl10&C&-`K}`B$U^1>zU(sNy=!j$;y$s5;Kz9} z;OQVq7Hh936*4>Qbl_P-RzU39N!cw^K^jR6hw0z4uLWB{AzP0tFsY8f zUf)*Z+q7x%3QOh4B~|C$be04ne zk%S8LN-PQU0_3Xdw2|-?s_@JhdYSkl``^A-?@j_62_t!8MLwi{eVw`Gbl<&3M~oh7c<2cni_agBPMS$l^O559G0$oO_PlqM*X-1i&oMunB2X8-8m&Vvknu#L@C2eaQgYz0oe7Y4Qr4g-r#;v z!?U=MOy@QbC@j!{c{hR6<$(Q%IPY|yp8z;})+>ptI&Av)|0x+(NdBi}K>HCGWXh|% zVlN1Vc3;8d(O(zmY5bM}?moO0wmz6IXBoXIu%Rm851TXg_MP+`=X5SvO3h3`$b?Wc zp@q;B#E-;frZ}U}g_x~~&>bcPKdZIw+*-h)gsS2b&_~|V3t8doQ!9W<%A0;5|E||Ek&Z{y4rWea0z(U1-5hvYqo=Y)P3Z*7^L*RP~#?gaob)Uu>)-!xx|v~Xrbg}{#m zso-q`$Nj3bOb|Mvv)JpE(S#!wg}zZivxK@S7@KG;YCLWlu`&S4ET~t{x zI7w}F8 z8bbkz78R6WN3K6=@{tbtx<&f|H@x7Cw-lK1Kr{DoRn2EdA)#L{UK_pilRk4b8y*<2 z#R^YHv`rtIc7uYXXy(EvmYzYFO)trkm}U|PN2rMZ{HW)Na){)2OF zoIv~ep#D1b{TDSoX8ZAl`R+*}6xyNf)=Vx9GD(*Cn@M!ZscnwxVE~$>x_&%?DBy&*-s#jWfQe9gq-=_&(M4F9z$5hW6<-8L`hIA ze_P~dhxm^JR^0zZ8w|z&s}^Jr^bK!cC_LFmr*-u97{Ce$GPtfe(bU$76vq)p1Irbs za%$vM@9kn|r-}Qfgw7V8Eu-;USFX%d(L3J*5n7oy(RY~4@tItMzwkJv%ve-%$e!5! z7VnU$$ffeh46HL8J_&5m7t*~;C#%em5Z3T4R80FACV6sfWw-0!Jut6`#V)h88A8ub zMP8Vz=%+>VyRbw8?fCb?jC+NJ?>49UoV%+*L`>sisJ>hdU~hezsC!_Cg2Kq5skuX& zg9BA+RMAqcVdWi@s1!Q<7hJs*dM*SzOPcJ-9Eoosepi7HVbU?tlfLp+m^D)_<%`28 zkuBg*O2tVb5{1sFVk6nKseLdGB7Acy{kNm0-ry+fg08qGs?z-^%n>#nT105kN^=c0 zeU8M1kA&L|*&v)#dD9lT82gzB8;+5dlhk2*YL?UA8c$cjQ&*d$2aJ7F%H+N#F5OK9 zCh_YG`FU&gq=KFd{(!em-z%2n`ltO;wDH4jgxd1sE}zuJx*(z>D&fI{S@57gVpdtlXlc`V6G0Gg@edQjnR__Ux0;%h1U0rL_(bM_NdXQp}{Ix1g6 zPk}GxzZi&uYpsU8bh+N=nai*xxG9Alafz~vmFMNGbNenYHe|I}wV@R##TtRp9$lJpt^&y8C1nFhKk>0rr zK~WJELREbg0zhmhzUk_9`g4>|BQu43_wIG8t{U=P-mmMKh^hDT&cJnIv1v`Dz?kM| z2X~=IQh+p^uFKy$*-Y&vKz?zHjRLn~Felj`?7?6pb^&}!9;b{1vFd(lFry~BRoMGt zSm3B(`RoyZz^BXOc2c+2$$e?$-`lYYdAB2m{Yk4EIypjC4XfWHGaIK;lQ!X03%8%8 zRB7@d%cZg zz8n7A<7g|YuaH;Wouu^-r5aP|@XBH(nTNSjvn1AZ!9NS2RwEy9?dCqac?cGsZu<)9 z6g-GnnB+4w=5 z3+fb@&e;3LkCIuT*?1z?D6skD|I90ENt)m;F?oK)==FyEXxp%mceo+PAi4DQzN?Dl6Kabx30kk4_~A~ z6F2WF5Ha#8YIqs3r<)oN87%_3lSlW*8WJ9tFl?C*$#K*b*}oZ{r;`ATkV+j@BevZSgZ@he#=AQh!PEK9exG3UI$<*O0Ab}I?q!L+ z&gU8$a3T#eL)cR>X+&%o{Fhb7oCMb2pScgfIGA`<5P!xk&DAJ=MDa#5?&P%Nj|`92 z*(ngU!;>L99$8zA1Q2y^6THsb!(%8yyHK>N`krTz#9TJHorhF=dcGYKzz1EH9Qvz7 z2%Mr2mL3dP&f>fd0{2ehkucoJ&ZcnTPK)?G+VU@hq3dgpGyI!G%OvnRSJ zPhN;jw1LlYMRe~6G9ouwD@5QL*?g~0frEeCXRn4dW?fF|Wlv8ck*b!L`n=Kl_wq~d zi7N=9lA-ExteyB0_h454U`TCvXTNM@ zdXV1yv_{;5y5FcFSX~?YLKM2doyB-l6(^!reUE`(tg5~+Z6=|Es{5CSwUuXSGR~_q z`reZSULPH~#Uj}5rXKpQ1~d2SM=|g8pS0)=NUrAj=Ad_3n&|aTYTmX3cVV`^NwwJL z-_Bw|q=BY`zF5ZD2La<3US95HGkUIjHzQP{g!= zZ}2HO@9l@4K&ag3VDm<+rn_#9!0gJcMkuw5sK)KTMsURwn>7XEXGNONwE?+)asApuyaUbLDe}wnX>LHUn}k<)K)QNgg#3lBC~9^s zNdj`y8YGYvMs!SyK^h1eD4pw*1H8{n>ke+<#8g491FbuyiTEI;zCIy*CZ_5S8u*U% zOM(*<^GaCV{cvh^EE6+HvFb^V)wn53X^~1wAovS8M~476)fhQDt{*=<7msfR4fA8D zdIppcd%zlatQMG-E;wy)^iqiGj79tIA)iN2luPNC!qwiL%6%i3l;QY-SD0Us9r^(Y zH#yo9GUiK*OM4!Tp8}ZetK4}CH*pAKMLrOUP3{+DnydJ}X2-Ss6|z*{EOK~#iXf%D z`pp8OAjM6d0^4XJWX%Uklg9SUz}4cybF>v~3Ze3HPo*zRQPB=@jNzIlzp{va%K9(~r%7j8r#e!oKKg^ijI2L+HSbzMG7Zz2A`re61bPk@Dh(eKGJ``cSwHCm}C`&u-dB_ z9W*2dWm?n@Pj21Gc__QwwpRt*0DExiL>0k~f(3jcJ(k0}XKgMQ!B3(fdoX!M(4E9d zp*iA~7i!NQasSRC-F>JETmMm=&+C&C&3t<3R%m!RfVAb$ukxlNM~)FRv7eG{-8RxKcFa5^ zPBtfuASJgY6(Tko7u-@A5zxZXDm2S5wTz1)Rx+D_V8XRN8Z$}+Zc~eT{}atzMT^4n zbCOqWIWwo+9EWHHF`?xPS7|XyIpD859sG2{?IqID)AjcETp7JN8A)3tHcC-^0)(Yu zzV!E!YLaw&e$@o@%-H2dg){6wGHVmWX=SI};{5?BW*#EiC}B>2ZL4EMal>G|Uk&fh z$^eBW6B9D_QPs~RTo>#^90m_}#mp(*cBhX+SW`Zzv@V-!*b})z?sSp#F>0#nOnTO5 zN#~P$SJM*tiUz=M=KWI-8;akoFN%NJYw1r+>_!}x2qgEP=RrEz;Pu;5rRoFD@&5$G z8vy-DYMtA!hLE&pjO56$-c@df5ZrI{51blH-H!!eTKHZrX#j-?6b`vzxPflKNj#vg zroqjXto_%~zhYo%Fob&)2vI+OJm-gu6$GFk{mX2eg{y6xq86W;?0q`}P+s!ee6&Z< z%-HsawJ`3wE*--z>gR^ym(;UDJsrfN_B=c}FQ=UnwG405XD)7EUFmCdju8re{(GD& z?fcUbqMfpwHpAXmi3Q`u9v~#jPP0hUYzMmwpI)?FDQQBYR=k`lcVT)3-8aQTr-lrfs4!Y|~YrBq{yLY2}?@3(W%X!;OvuJ zz;K_wer&8>zZh~_K92OaBN3kJTl9zskxzsfq;T5|m=rHPfgd9t z(#YZQ`Z^`j6#Zl)Gr1&004!-jgV}K3)NUPv4cVgEM7?ol2D2P}-8IN9_nn5LH#+8* z?{brk#2p5DzttZ>Mlh<^Ih|I+VCY0oxX|?A-AknE|3xP-H1M|Sm8raTXEnyzADt!- zgHB^+85zi!$Nn!w;Si|@=M&|ugjrp9d1WG!Iil@x30B;VdN}9tD4Q_FeS8uyxctv@ zN79ez*4^}IPew7LbIo38#P2AQa>lX4b(>h+Fl{q9-4mjz7IoM(+~XQCvLwAs;0RDX zDoicYxdpSHZ-zm0_(`ZPx?6AWPu2P15TT_bV4)$*%hA_u(ki^-(8 ztU>Qxws3k9IRdx$RQ=AMcD!A7Hx23oqrHQUWg)`LJ%?J? zzp-OF?{}}eZreanvN2S8Ze|KzPXv?;0nnwnH#g=sa$i)RxbN8YLyq+fXV)ll;U(k% z^mf9Krb9vH%PoB5d->h^aW-ft+|Yo@_6W@vzxOy`dn!Dcr!6Q}1zI5f75r`IUfVD5 z^$7T;9CXbu)^7$o!&6b^74ZG;d$L&arC;itIbWdOl<&`)qEWzXj}>p1tY=Gdz~fvr zS~FsgS)`zA7W^2$BeAb5|5ka1y<97&EynQ zZYJWibLPh4<6?vI%bU`W^wDHgvt=4KS<0)C5I4N!)byIuNK4BNBSG*r4CKvSPyLK6Cv&bv1%L{$Xf2dXN?@ti--ZdA$N&LIhNwC%6 zFmn>*{;@$Ph^JxgPHg(Vg>ZS4++lq9@a43ILPz0}RzG#><^RrA&p0vQW-q@)%ANaC zm{xJiwDRMW)`$eO9nLPZRD6*;=iTxgck<k8Z-IHPenGPP+{X)ec>Gg^zD*wH0MCKg4B-cHl;)Ra)1xrzkzvXm^`lr6WjiwwAKqLGOY;nZcdD%& z+e?7NHZ>zws!n3>+Ye9hNz+}a6vbh~;LZL$?%71d<`nd^Cy8yF3$ogvW3=-Z@;dV! z**4e5*d{~4XTz!Ypw0qHblUCw4;Nknca0?OH@_T3ppVgd{^!gc8ML^D55LR}{f=#o zVXJo%6g%$`LeiVzTqwLZarPor^KxV`t=Ch1&TxMTS*#cSBADA{MqfxB zGkvrsnZUVBKkP!Z+UGZ9UZ~)#A82&@ve{G^X1@800}BZNKc(yg4H!tyi_+fsa6v*; z;Qyc(bkHU~iX#5V8}Ck*uibTIa73m%%W{!-6dinJ@Hp?i#edV=6X2OYTX6mI!tutQ z9PnsQG0u=Cp|DEWwyx}RQ1w`Az##tIDtIpX9$};(Ni5K*k2=695g6d|4N>wA{+lEr z{A%pb-#+oz^vQtB{!g#321h=NY;0Y`noj$n{?aRElq^-5N421AIcwKlmZZ|#_|MjG z!l&(frO{;m&IqSFN&YHVeWP_L-n*_U>cfv^nYuu7lQcxdkp`sc(gREFXM|?edGod{ z#!oPtGI$2qj#yDaZ347-PGL}`R75KSWyeJ}Kv1Tt{9&F$DestN($%k_z6xzz_>J{?F~B&!v=!oMIDRRj63pq!Jb^Ak!m=0~3QC(0(zgw} z4qc}gI2upOre*yr2O=dBP4VnLiydiSQJKJ(whZi|LEt6prj5w{WGJU%Q9(axA9%Rx z3OqDWyx}5Ni#4r1501p09WQJ|eAhnjp&@NaSs4^cvusD&V8hUHo;kYZ%#cXpQm$eh zCh(In?X)6s$P<7aYPUkI^%5fT0uR{3c5QyLaW*(E`3BpgC_`>VNeQ za<2a#Euo=AgkO#2g9GZw3e64cV@Kz;4KW!b_&_jlOu~1Atk0kQ+fz5CPdHZIDb+jR z#lzXiL?Tts9>K_Bz$qogv^K07slFcUv&Y09cG&tgwo1(jdn~5~ogBB~YcHb=-Xb0K zp@oHI%kJ-8eWbdek6p_n<+`D~6`SKr+b&`)NpYQYh-r-eqH)_JcI27sNH3iHk*c`p za|VLGzUm6VD1%(GH%t>r8-@lIdbl>WS?DYWiD}G72XEA&p5vIOd{_5ybkLO0y+7xl3O@4uC zY030{_9qI{ZTa+^(pj6ZMY1A9d&>B0go&ccYanywMD5jU{(Dxe>-Eol>{?Gr zSNBP6>ctnIc8bH{jS1Go);5|@sjAGnyw{=L{9K+(d^0`!@OM4?Zd5OS^F0bg6OxK| z{JV+sJVCxQ!^_6gQ|FWvzK3x40k2g6#$y5fD_QyH7tt|6G-l<7;aEod+f8%#_!1_P z-e;nJz6V4Ue#dIyZYWn=yI^a9H?1)H${;~oQ2L4JQPcfF78i6EgUc;o28ct5jXvLH z&EMq}ZRX9#{C4+lmJvr=WPw2G;^fzi#L;(aQIb{|N-ht%qLf;A_{uU`hJ(saRsWCN z2cL-I39b}lrxa#%xr?<%m^Gc01ONxy6bZEZATs36nf2th9d2%9~^2l6oNuBB7oW3nD~TLxFQ z3V6fw?4H&l^&C%k(N0to?GCO`HYhe+4q@9VTF#S&P_u9kbf#NG^}Y@Y``&<|UDqVF zJB}Q^m<%}%g?hR-KGqfJDmf#%_FVeW6m6CdosCH=$7unT^>b06cx$DYIUhL@Zmv=wZ5utv9Q;U8KKa(d37;&aV}w2Fyx-0rXVy z#X6c6iZYgiP<%YyMx!y3f2W2WTp8}5%>^e0Ojv*t5!h}#j6|L=ciTbh`|Msm!xyZ0 zXqrGR$^A+_C-RY+5}=wPj(16@c|oQDEije$N9Cz%<`9TahF_6jP^zvleHfHcoDt>4 z6Uz%N8XzSi{?5BxBGCnp_Vtl>3010&H5Rrg*EG7w;h_2y_x_f^@-fEjOApflJEpKW zT*e*Vi9Y1LkK>L&BfEl!{*v@-A0gMu2~ z-?;&kKFu6lTf0vtsy%#w@r>SX_w8-BAj*IQvAzbC_N5jzR&6NN)N2hhR{1Y(Ua`w;BIj{+6Ty%4afPSPVd_%zH3F~>eYYG{ z<8OcJ)4IqkWWBqe3*d^gze$oTX02V|)in#hV;r&xb zyTw6yk>2}y%YI4LlwbE#{<_s7!s^3sUKOS)*o*;`hq1!KOwAMNs|R>7o+;A+djRI_atChVj?;@|sKP`YP|qWeO`D%AM&vP+v?67!fA+^&KY(qS`Wv$UAuE)(X&Sde6h0vbkmy(0^^$MctRt9W=~KS7=| zkg+if$X`&6a6wg*_(%E^6+KscI6fP$d{mGc9>b5<8j=Kb^fh&s5hf7U%Jzm}2O=ida}Q zrbf~SEg(>)66>~tbD5koonero@AT+cln z)E=@p^7NlWq?(G@h@-#u*FQ_FVMY{*R}WJ(LfG1UNIS5PFP;v zBX69xVjQbMU`(%{``>c|l>p@uan=CS0rh_UvxEr0pr6WAZD|Un&ac|-=}$QA4hhL@ z43tL(wu6>6v;0t;w?HB_(eVRh`eMai|p$*pms?rZTtsV5LSE~ zD<7s(v^y=m#{qM~JdEH;jRl~`7p^!x6SgxtB9(rx(E19Ml?VMw+GiD*3q$W)ylCGk z8TFuC(nHt?EzP&x)rD;ooynw@Dg>3LRI{!hPNocCHt!ZVQH}r(Ii#b zePN5sD;R{(pzI}}4`P21v zU`(>wvtEk`WV?jXFl+l<+zcI`t%2HsiN*FlFq)2Yg#8(-m1A9l|Rbbvw@_T0A=6UTEtkt&si!=Jj#O7}TP% z`B5gl{QH1v79yDMxRH655J}ys>bl`Y_9Gn3vU4stTOewBqMf9f9K^4L5=&fbH~2hD zGIKKK60CAB`c}Vn{fGemT$q$5KE>3|mwkpu$! z)G%oru^E#d<(+p7hMo}2w>|#aqf!nrZ=Y8cF`n5nXTOx-dwF0{PJ#Kyr5No8fUHpv z+xeBwRX+<|(CHb^pd-a)sXX$_NEWvHAT+*NL$(SV&FOR)+20xyhmze^w(Kb3J1#Mf z9@5+6kHMGuHtg%*?lTHwe>FL?U#^jn#;2z`hO0XbWymW+N<-@M_1vDFpYB!}90$u@ zZ`QglJKTLX3^>Zh*p>uqyZTgZNv=Ezg2Hp!#E6Fz3wjGq#OJy$0y$*L^A~2)E#BKp zi>egGG*+q>Nv$}GPl$I{Q|ow}$wo-3Mfn*Z9k{d=r2h&;F8&mW)t)F^6A@&b#(>ul zeNGc$GgE~Q0ZVG7GH?||XyXq^k}NF+N7qkYL-W4AUsN)eiKt*5-qWK1HK*a)3GQJ&jfGn>+CdRD7s z-9-{zoQsMlSm+@2&n@b(!-1ZA$X2F}x^`Arg&)T^bEt5$I4fk$U)VczDoA< zbQZ3vAl|<#6Q9smE;ouQ2fhxg0m9=>13DfG>93^L?I?P}*eKEfUG4&*KOt5=mvjoE z!oRY)9e`Q-xX)k?PIgGnb+4EO~tP+ zVX$TQJ_D+kCm!kOW3&rxL>lxpsRoxp#P8I|0!Os}k)u5%p9DD3gFBsVxzp4~dT4me0Luf6mj zlxC1~G8H23v0u8bJj>}`+!0t3a(X@73%KF&hMeS57Zcg;c2Zj%$&xf4<**32`J@`j z7wq_NLCrR=J21XY=)+ND8|=@Dds7F$Mf(3dOOm&h&tz495U_Mzj_33@?z`m>j}G?p z9H^S1W;1+T)j$e{BnrOn&mj4=TMPa61R1Ir`?NAf0RskEoqK)`E59y&D62vE8A_b3 zM5MLzc%pJ~gmq;7GUvJG^9;@wqZPlD+Ya@q;gi~4H)7fVmu49}Z7>VaBTcMB{_$MH z9v}_e$GX1-TO%8tA60ri5jcJxI<%@x@8%6^=Xk#k9jpY&tZG|4v09a(l(-JHY7Y@{ z2p3G&Zbq(9sfhc7g7jzrupiVGe=n~Xh#m8#cz}f2J~pHF17gCe&_y_RD}cp=@ai0W zZXe(IYLEGo5`?qd9YSm=tETs(iT8%>?;gxrT21e20WY@@TbmgWlCHo5Q2Mcu5>A5m zWT~hg4LL5EuctPvk&Z76d{_hYE7-hUEiA-g`KqPL<#bi|p{HV>P=2PorBB4t$}e6y zt~dF@Bx^wkEuvrA;rCYs?HFdHEDMHYD7Xm7OJ+Dg08$1ls$23n5h+WG)#LGT^b4L; z=0^7kgJB}46h(v?Ek1RsbT*}b{n=x#bV+)suj>4(5t^loA5N3&EZ3>7)jhy}IGWRa{0qICN3Obm&Pu=;orLPPZxvlxqP(Y0uKiEi z#_ZyiAFmi|7DFyYRe-NVDeSB?Arb}`S=&#LSATwV|96!^x@G1&Zg=b7eTB9BmTm}p z6FIAOb-*-P)LeG*L^RPc;$+qzED$wM#K7vo_YI1Sx>|s-UeEfIX$fa)%Ig>p8iwfq zbS{WnX@p=-=P)~L6QP`eF5#T~162b?0B1p34mOjYxgzhNob>Nv#t_cBWLN|%HH zMb3#d9VucabZb|b59xPJ-5Xz86B>&t)1l3SENV#s9A z5TZ%7xmn1S=M@r?;xXf;#XM0I)>GB|?XST}uiZo{%}|fyjfF)Vo-H;3)HF-Wbn(yI zE8Ld^t!9<}Y%Wwqy@`Ay#rg6Y5Uwuuix@fi?(qt^KJ)$mW9u!0;)=Rv;e_Ds5Zv7% zWboht65L%vfZ)#H?(VJug1ZGDG{|5<0t6o>=-@Euo#&N%>#O>HovKsk=h=I$)!nOm z2#dA$6=@3JFDbSI@O7A_+SW>%{R}r^SI*jb7ui-uvYQzfd{z)U;j5|BJanqKEqr`u zf=M8)NC5OsL38R!101=`*_(pkyg>vhDn5HlYdPJQf%(^i7Cp+4+a*Q<SQ6wxbXbdv}htHSw0dhT7$o zna}TYXcSjHxGQsM%>Z_wdv-`2d3&mHJbh>Y7|=Vj>W8yC^##y^{o30Ww!{At-AYWP z;Ym(7Kd*bA-`F=;k2%=;JbQ0?2N%H$X3oaL)Cgm2M7{2+%^&I~J8vVLcXBU{9+$*y zIxTJFYE0#{L}p&Fj9tZ?>~cyAx>rPK2P-6u4jlCPo|dcwC}< zGyk5MtfIrqNE5Bco9h+_m>d_W)0=PRX3#7%>XZ=2gy)V26|azM#BR))x8VzEG$#R4BRH$NTBP(fFk`HK$z%Ug zVQ0;*29pBKMM!2`ds4o(qtepN{EdA5qmE1N`l9;YMm8NgXbAboA&TXytxzoC`>Apx z(oEgVSzb&;w2G`OE7bj*_AD-F0bq*h-GiGy1sfDL;pcML72BCqCbc zk~h=`EO_1vC10<~x!cF;)WxLN%q99Ru#VCj2F|mhmX${DCN8XQcZ%{Z_K_8L7b0o9 z{UIn5e%!Mt<}JbyCm2ugUE#r`aFV22&m@h>DcAZkAlysvO^8{$^fp0OxJ^=*RSY`LXl9DDHM@e0yy@w`t}rr<6q>)h=y=PoRCl z2IlGeu`FKxO?}mNE0>gF{JA!|WukP(0+z~x@UwiNPKtaa+_Wf1SGga7`;?^RCeM&6 zawZ^DM0HG-_3w)d5inpL)FRpgXk{#lIB z?UjZ)Z3<>cb87lXVOl_fKcb;2ek<0)G+??GbO*q~eE$GHeaZgDJk`GD(fsxv$Umhe zZW=>XnA0NQ)vD%d>vx(rOQzLxu}>*=wXzsJI~lyi-kWt()UG8FfWgB9adetB-d|t6EXyn* zTwCAN3lWQXD55zaokdZzz|-w2)?TXo1;W4w%#q_%?+0^SvlZCgl^`i2jn+&wu=s+$ zdZ60|XY&QgHgHV^4UgCN`3}RU$7oJd;9HjeS&>(2bkR@j`og!)SLL&K?J1>WoptGuQ{OPXTzM89~ZWBqJ- z4-Xbn{kVW`b0lxbmK)83erI@6_Ueeb{))IwQy2fD`OD9=IZ9&L%ChUk9xkQ$uT5DC zU_#%p&>SvY0s(D(zBy`QkNIpl>!nx9XhIl5F|vjd`Wk+uq~MB`lV z?z;;EO;earY$ks}1neV8;dSvqrvgB}Un8PEn=dxs71e-XHY^ z!$0)@K}(Vr5oTa5J3kvA-Mpy8vu`fRok^d+#Z+`3=U19;cE~lg zF-18q1lc=Wp6j|No+RC?f(&=#{xfjwCrw|VPP=?XxgFcD40EivY4KO#W{q(s8NK%n z3|ns)QzM$B@GtZ7963=AG;aSht?NFz>fFDs*xTB3P)U&!9`S##1g8JG66VOYWln#` z;=<28?({m`Wc(fFPer}{$w^9rDf~GdJE!LUS&Eo-`@ks}H?BUttALf-E z=16U75T%Prpr!#R{h{%EFS=Knyhu-Nv-WmL#L_WzUj8j6r3|@EiZni|4hcwP6*IkY z1#g?2Y?81}QRLuaK6N;kO%oBdd(CN>Q^H2Q!O8H3L8hBomf5irX7PnOPlFUtCTl>7 z1x8_YHx-?q`mJh10#Y}yWks@0_i05xLFVAJ4f)8~qaNjP<-zb)bjbX;3yT~XO8*Xd z>}{D+4BI>+dAp)A$F9wV$Fd}=g@t$u%;Hc423J9u;n#amg8=4f0e1A*> z*)aLBwIniAS=1~pcJ`ejJ^ZHDV~bw!n}&(}$Es}t^m-m+OGEB784 zXk)c~vKI0Flp>%^qZg^_P1X?EYcXv?7)-C7$@&Fq1vKMzV|1$YtbxufDiK9fiV$5T`k=*jZ26C#19 zEog9LcJ=qvEa+L1#qYQqExYBBbEspC4qsDpWSBC#PMhGA&KWQ|{;>E#S*X}N2l zcgR-Oj$1iOUPE~??&$W zqFRqXh_RixFo+1}j@xqJ6>tp_kP-u6N>*WY5;H9Y#77`#if($l45O!%qRWz|h$2nO&7KwsAq1D-cq-@SI7J7?($DTUAmP8wsO!F%fjHneY=@W(w z<^M>SxvA%TcE#+*)2I%LA3Zm$WTJ{@Us{+Zuz^O`#DbUY(#`7)tHy6HxUCvo11^nV6L$))F#)2 zQw9XsY=tnnW?Gqq2$nq#q~!kiUua`X?6u84*9`LJIXMJwA|Q9M-G5HiU+I{*ah=|S z;7Q)JwgCs&Dq)BI?&L)jt87vR2zaB(dgTngukZ`eDDeRHWq3q#a9?3DPFnHbo?;S3 zwsQb0b~O@XTbY;otTJQu1i?YE+qC89j;u6hRH#sxKm)6y!kAWD+FKCQ7plBu#$`09 z6DO7hWdepLV`APa!A*(wN|9%>oVxa8*q3EJQIDljjWin{p)`Cu5OSMOe5itjqYS21 zb7xg}O~2&`(5lz0-LTiyX_vZAH_zS1hP_UmnC3mrDG;M4s+C%Bt#I%0FGn=# z4sv1V^(*hd?brLb+zbi?tgN%wKaS2V`)ADiYDrvVzA#i*Q*b;{ly|$A^>iB^8G3R? zw;8!am%e#UV&1iirvgmZGy zoRlS?LS0vzjvSXm=k68&pBm9H$z;}hU;IZnJ2<~)?!g0GHZJEB#UHBiPl|Q)6rmPd zTh)%a-pAU;l0+<{bbtt{76kekkO>D7aYi4#Z2gDY38ocl5E5KU;&jwlQVK(^Xa(BkfxdQ}@p5a3|1H==0RKS-)LW|(tZ+c)& zG%q*YV*0c6&2n#G#RY|ZaRIHm$CCDx%HdB@q%z}str9M_TMR*y_#cr4U6IxPhdRBa z_zwqSLyVe{yjGl#LA`oTrD%UX`kJ{6)OJU@ntU(6Tw?4mv1KD-`iC|U+cfK{dVTMIW*al5)t=Y8Mh$OrVbB|D)A*|)M(N{Y-h_j`=jU3T}qpsb_atGMjT4&$GPbt zvQp9SmoBsHGQ78~g7m!MLK;IJsU@pXen;}^AAN8}kMvIBM<0qg>W^$KLrYhFe`B?m z(D=@#LOX#;mOm~DDCAue9O+tX7hIlpeO>`7_u?)8^vg4SzGDUOATRP}gD#R@;CbTD zXRlLri7$i;2PEZRp()~euscL(mSJiy#{Mo>U35jOG1g8K){1{PK6{jS$&PDdHGy}&G(QhaX}V8vCj!Abo0p;$ zHip_G?z`ff=p1-mm&T&yaL8qNC(&ulWinY}&`UD(v@G+0ZI8e?w|hdi|Kf2LCGyBS z>C_6cl@kKh>whiDZf8edRnv4i2=BJx*stUX{cCr(?#HG)6ZNvs`FJGN8R1wUwD+-Y z6499HWzq(0E2; zt(Z~U?JLhHCtRdqLpBNje>W&j{~&@0zw63K z(SfF^74)&7=FHk{70Fu~WvHz+J0gaJD$2O0SA6f;6KvJXN-B*nnzQ|HC-^`&KH9Qg z%)C7fsjzD#--|*^Uy;I2)BwG_whc3Y43X&iBX6)Ik8d&74#DyZp^D2(?AFR}yAWqs zRg>)YCa(#EYc0t%{AdL8I}(1Xvn>2J;_-ku(rjTitL)0*@aJHr*hX;52!`U%08u+a z;+avGRxkCLW#}TWvZw(l#VP5J7a}e6*UnZxDM8{5>eMj10rp?%5$y_Fd4k^3fq%%z z7p0aQSWw5-%Cez0R)vMDV6w=kpA}LlWr1{Ml4IF_1xEgKLRKJ+{LjWW8LHEFJID@y zp{5D%S$k-tdU;(IhKdq6!_|HZcR1i6{FSv3j>j*E(zUa_C+mM z=1z`#j3;Wbixm+1|9FipcwEdIpHM+m#zp6WJ4^@Ramw(Fp)z`vp)inF%cBQ)t~=7Y z%-?5h)M=-w%WQD$c;)o{l%9S+7y@r1__k%w;Wl=6&dICWu@zP-_ug|wLpO1pZB;3} zp&$dOu@f*(QiMU+&nI;n%91RxbYw-R4jXBVLj2|~;7-^)k^FX}A(jDywvPIhD4Hu3 zh{iYk004+{=loO&lA$?`(ltLCAy>eX*9qDer%|KA078_kGMUza`A9_J(O8Vt@UoZzBxI%ZBmwrkGsMm!dY7@(WzBCy*8RsX zb8NUG!W_@p+7Qca<>B_;=(Ot?zfzM2yr)E*5CFq!KC2yki;qQ)xe*tv6tR3PWZduP zQR~#OvtSkw9&~pT>@20}^1M;7hZVOil9kA%(Q}h4@%V^V4`I#<$0@j7hmW^Bo@AXu zZ>4TL1=v?oe22xf=f4I*<5v7m-t|B(NTnVoNNr{!>mU42JGZxA_XCGsJNb3eO%m6M zZaUaWl;8GPdrwFO?Q+3-O9eenC4D-#V9vB>u)d!~vT=NAIV?Jy?Yc>lW-Kpq=Aydd zd_|X7W}*WPy$8o<$0!vk=q#}=V9Q?CITo%{0eau@dGQ_m zTvO?Pc&M^bO_zzfR4HWi+;ZPO*$SduP%$v>m5=;L?(b+u7|F-?JBNo-<%F~z`KJ+n16x>OREP*eRX4!^0qwSQl1q{)mgt;KhahG z)D@tA2R>JbeLCeq!KjB4*noWA({=lXQ_{GtvdI%F4=|36BH zPeUEUg~>bZe;jJyohD`ecT-E-GbH(VFRh<0-u&NskMo~;UnzmAJI*=c!VGi8CD(1S zXaBOS^;@{$>NBFS8_9@*)hckZx+Km1Hp}}v3@}c@W9McJ{o{^f8n$rsTHl`beyF>n z*6HEXZv}4~XZxcJ#*O$Tj4g`z1Z=e_3n#pjhq&zg!ct+a8Dj8NS5APcX? zB+5JYz>@M#*R6I1<1JcdxPP%zr`V-eQGjc&<*?MapFo7e6~pl{SFzY6egc)zm^HL+ zWzi?_16P5z^4pgm(QIU^ElSWkdZ|&MvKlCgDx8Eag&!l_t5M?8No+ADn7IpW$AoO! z#MCi>7VPrez%BbBkr^;Gf2AwatRRvoDVxM?&^G@md|&Gd?-rk%+|#n!tUP>BX5SnW-n%g#1-)%9ZlW0Em9%(1+n3IdrDxsqC53lc^w48L6a~OHwRYZ zrF_urhh~JqCoU`4r}JhOjK$v}43?Z<(FUQO0xW-Vw|dw%h)bK)stk4WhU+=&sI+--FKrc>gs9_+H^YZ<-lx4Vj67p3pE`2@HRYTNnezx_J-J-s5o# z6o>~=$Pw7S-PZEH?R+kM-O$fgc2Vea;z?Rb-7K`f-eLp1ItU|P($FQL`M3j+TOxmc zoM;T&v1pwwYqujtjKuc7@=AnnIgVx(KKwd+Fd!CW<4}gq5niM!vam&+*PBk^gJ^bT z)fx&$wU@R-^lN5$>GG3ErR6_2&|l&8_*BdzF z^W({6gG%CT+;-oO0#O+`W7$Y!CrUDs6$q3+aL^|bm)AYm5Q1z~{+emEE%>tQDM!Z- ziYEPj$ZFh3^qL0%v#w6dyL9_eZzti^UI(@oU1PTSvV^EJuHby8_(*DJwIc)ZA7Urm37o9Nxye`y|(iNwwLTwkfV ztTM0#Mr`9liFqwd-be9L&J1?Pw~(5x3F{}(V(n^4+n;M$FN-E=MV=Epib94+#yC68 zMw4>D*qHLdQYXE>*@iiUerZPGKO-^%S zMY4zC6p-OqG1o`NAxl8d3yJTZ z=1b*MMq{0vlo;dG$pNbKFKe9A_bSif~pvFIZve4_wg4cTU|0wJ0m}AywvxnrOb%F01*8A<5CQ{3k6e+i)xo>;MWQfRo zE+0}ze=Z@8ne^Lve3YIc8(_)TKM?kQQ;EXc2a;qmGpC5h_pUb~sxN?b^ZqDkn2A8y zUic_3YxQ+nK}W&TA2AomLHRRx0joF2@78vs%_xNj5!PpRPKk$=*a7HviFZ$+tD_|-{4ceYxQUdIX!VaYwD{{Ff3+-FpmbaW z2+y6hh&}u8`|+yC(DTsc)jhK);YI0yA0k26J}R5GD){Z<9817(G25$XPju;0dHlM6 zh$zu5QAJY&hO#s8oU)?n#fWr>YN(aZPw;^lLiV?&9J!tG*+irFcIwu>;%IhkL$<$` zPnjTZ&XOw0ro`;GNN9vEH7<1sx;!sl?AlOVKzrNaBB?T)i8^s*3a+EJ!+@-Ja!XyB zr4UsvEK1&WNsx^*JR4*%ArPK-imQy!!CB6KT%b(<9z!1&h6F4z6If9F$nb{nrXxTU z%jy-5JOorKV*MlEN?p5k0UcUwhTsMk`U%gePWK&P-#HnErfxASjLs=itb~^u#QUiF zcFo9j$fb1qeES1h2M?bfzlOIcchPd*8fl-7P4sfD&GL$+WI*CGE)gzGjL8~ZTz~fT zA(L-7xMQMGYE~Att{gmpVdW>(HR%n*cchalx;2|e8P1*0MSE_e6MxJ_tRVJaKJ<8| zPOhpCtonUZPQ{NtOr1ks?%I7nOMR^2ZfkODfHufb<$@gi$Bf_fMH>y2fAyteonW7u z#iHbY#7kT7kpDFK3%Fs*jix^`vBksQ$IhAG==)=xjJn?;io53|z`5SHE<`PC`hr>C zv!~roOfqpPSM+JM8b}Y)pkt%QC?Klc#FP|x0J6v89m1O_nM5O9LWQ&nf|*E0eJa_Fk>mC2oyYEDS7))Q6TC z+j5r#e(1_C*ryMV+{az_Za1_miq0?esj89OHCFA{W8v<{U8kCIM*cvV$}Z+JkmKAH+xv8Kb1-rd{<5YJ4cGRmSfxS(wK7YJ3%sS^}fR0=cug`IB40pU`eSSa<))6paL$@_r-O zVFSIcZ&lr_6Yyzw#|1A#}_>D#|3P;SnSX;dFU~l;}>7oAvv5nK*m6xJ~2{U6_vE zHBIW77RR5vavot@sn+^iBiANmIQu{PrcUG;36sivgWUN5;S=XDeK=099)VL)w zJp5XG&@SR!ygvb}@j0zrHW?z~KjwatIFZDv2s__DlPDJn$fGw9tlAp8^MU{L7a5hh z+4Xunv(J2(K5xqJW$atWbw8{hQj2f|AL)zl?Kw)~;TjvGcfYll7vo=<*!EX%<02J_ zL9l#mT>eKn;cK)v9^JqdQlCeDpPQWMUa|13eCJNv%DT%k4pP6c;`_k`O5*G9ft|~x zC`1@B!dGZItQ@pr81cnUkx4oTdl#6@4Z+1^L$`<4)+ z(jCYApUPFtB7uv1;vT!NOb;I&+ldHVB8w}<;ponV`0)J90vqR=kwh%sVh=H&y9%R5 z(~?$$puT_%YB9>+;4ITyO>I*C+o=}+%ajZ>i=F2&+K z5U%MXu!iw0#mVIc%8bn|@H7`8CawDMD+RMF%3W~82uy0)60pa2vvG+q8BCLcANQ_b z&(a&($%$bpCzN^sY~Y2-0SC26O~_ zj$+dfxUPzBsH^T~m-pe9eq_MofndPWcMjv_Vi%t`Qow2Kmn&fw%Yl z!a!OgY8r;~E8!7RENn#u?%Vh2vr1MM%?vTv2oix%-t*Zs!5z0sR`$I}q69vr1hKjS zG)8EUyJy89|eKy zi@iJkm*l%HAnc+KeqTRM-6G3+fjT(`us?6hDlKfp$?7Gw8P7^;N#s?8`L+*Mkf}ST zJI~@~v>mw^WEEvwQ=i&HoG-g{2MxAHthCYF$YmB#pc$9AjG>;HVuh-m*Cp9ye*;gZ z3?;2n$e8g?hzcbL1>FgHU_FvMoD6kr_aaNOxpG$zBA=bi(8~;=60TeppboDI((>{& zJ303BU~h|54?}r2N~*D5(7ZAOYPozc3wFkM^IB4rb?coRXh&g7H@sxi|Jt=612!7#vIgsB5d%w!rywBTZ<_%W#E= z_LB_Fs+5{(CNjzD#Gi;#awYWyeuSpS;|>V`ofQQzW(MN^#*JfkPO3hXCt&rCWeN8b zKITJPags0v-bnp{3=lp1@!EFUxNngfHYw^$U_I^0Lj;B#7hi)l_EE%mR)0c|dnr2mR>%iQjH z4~q0Ov5-iNs0`clcJxL&Wj&B+XcBGJzhxq=U#X4LSmjXWHS8D52AiMdk%ti@gwMwq zV|uuYB|{|Pui(jI08QWLN_TAMo)7%i3T=Cw-V&o~&tsGar?Api%b(Q0{lI?v-6C2x zZSbd}KqBYPdzoerk0PlXz0JLsyWNIeQamCnex)fenek|eZ0s0sS0tXP@W@QRePmn* zZx~4J5|EN!%BjiRqRvQ;a6-P3~v5nUUbJze{N98apA?(0Acise@3#svD+A@Ce zbZ|H_58U!OVs;F?_49K1)gH}+sh62m7 zs83rS$!jV{NE$BKm@rTi4lFvFTT}0ZS9wj)@w&=7e=c~Vuh730){LpT6sVf1z@|am z{ylA&u24JTvD*;Tga#zZZwl6=Nuaq2V<-Y2I>6DD@J(%AB2!lm4ZOg;1Pshto9l0%3d5}s%`$gFGU8dn5iVbszpWDE^A#aJk`v2zWUvt~= zEcr=MsjL1!$nGuL!F3JPOV>FRW*bl3pGRx?PQ+t*m(?k+tbY2<(k_t$W**gGLszIz z?W6X}IYw1;t3FIAzQQfD2YVZDa^A9a_Jr(vilwW1D1aCwQ_^)1675&ixFuZCM?~Br z$luWQWdPWM5;|h2VqH^Qf1b!B{CGeeaO(3VQ9sHhVY@Iw$$UoBCW-d+kDt#rI6E`; zn|C`G5INM{6QG1#CKElPN};g>T!f(NXp0Nu$Mb2&Vipe*m91=m?_U1+!2n%}N8no{ zo%f!%pJrZ#eMBZic4rx3(j;a^RZLXr-cVOqsUXiul`5{4hZ&3 zzF(>{>Zn#NaNp5psHLlvPPGwoOJGHQlFoTnj<^_jRU*8%>4j@5@BZ$B9v zu3=S$DILW0_D8gxXEBC7Hv^`K-E@=9zfK!k|9~jRw}Z=>*ghzv~9W%IV8Z)p@I_BRjPNiDfyNRL4-bS9VVAL7e3P_8z?YxC4NRBPY}v`#A* z8ky+1gvdTVeNH;-$}3{Req%F5DDQMNg&z?c^mN(+znd}HSY=gpI}JEye!hdzZdHwW z^L-4}#I(mT%s5vQN%|Msa+hbnd^TElVqDV@Z!h_9##Gb;C#e-km%%GRCY7duYEMc+ z8@SKaXidhny>p0X>c4514utHG)VVxHQRI%9 zPQl0ZZUizR>9X+Lg4uZ(lu8DGoZE2))76RXx$cRMpj8WwQC&1HJ4vK#`cRy zh?@dfXn|X8gJqNg<4rmK00fCA3hQ(~X}J=%d^Io<+RhVnE|)(~i$ZREMNKblzbjrE zcQS8GbRTQTSf+Vl6j`Tm7{3TS1({P?8O2?;@`p!gtgL>ez@FP#CC@4>+e(vXJFKFy zqWcP?-Dz(KAN0TzSev8j!23OPgpEb@%;j>`)6*OiaX~{G494Wk3aq-*NS!>S_y67u zTy@%gLBfKJ9bwH+;;qZ#NnFj!;*H_?(hNxSa74Sm7s;?SAfJ+(D>Kc`4@%r%%%I9# z_=Po95cVU?dx!5{&)t8iujfF-k4y?>R-VTt#$PXK9rwv?@&Jl9lZII6jnV8pi&~PY zcK@y}7s3P$s?x4bPl^93qKmF+^{25! z=5O$@reG$C@~o{bs_e-3rYq`wNE7N3Hn{%C0!|-(NmZXz`TOv#QZC&-p9>cKk3|aY z2hNrC2w~?)|3V7fpLXW&BJ_IsQ8zDVKi)qeUq_Z0>(Wg(lMDS#rByOuPG1PqZYFT! zl=fOLdUfC@w}?68fBU-nNVn-ARBP4%%&FEtz8Av(z0y!nZb>xEb;WFZ*j-g2latEl zh8ee~m9k1EUCJ+jRC7m>V7EJ}>&V^AW&x!VF(L9=TE5WVNZyMp*nW3&{80F%R^o(7 zx7KWMrO)D%SF*T4+f{@R-j}5S6CUdDxJYpxgFj2X`eAF4?{0gLx`eRrPIM*bc;YX` zmVAwSF?C727FPz^!(5gnr)A&Cj)b|Le{7BTjR~#?<>_(qP!S_Xgm~O;X!O0TlXpl3 zM6Wsjl_qBMp8<*qr{-(Ek_z~n<9}6PpD1VA+X3rxC1w zL^3wlRYKKS;?zc!Y_}j_`~LFkYsHF!G~*;YoJKMgFdc(*%LD16=jzjt`B44Nnpw#` z0mgo>a)Lrtzp~agrJsd6oF^c=LDtsce6no7Z#EK(;B0vJnNdt6BJ;?^$)wtyT?U7W z;C|?|RSu*EWMBsPoLtA46q!`T_iR)Df)NoxRv1@ABY9x@UNaE!(cYP_K2=f6V-o$R z0IB#q-4C&*`u}Kr|CL11_yU&Z1Yg~{{GPkI_oNBxCQWF>)hudVf&1}aAEb-c z3X?zmzGQ%ISenm?T0cnss+Xl_ZNTfi7$$i9kosL@l^pR`{rtF%?fTg&Cl!i3i`Zvx~#!eJ3PonCKRoEbd(OByTIt#W7aw`2WOqtYm z0f8LS2Sg~mvD_B}IS0GnykcVQ z2^x^$r|PPALX___?+($_%qMe$Gvo_50TKP30r5fpKH(;5xdUW!^6^JZ9m8oNw4MIU zLH^fttaw17W&LAv@ZDX1{KY^YM)Nu$vZLDQx*=1j0Yf8g2Y&EkCJrZ(Zaw!**VB3E zb&Z~S(rp?O1qoZTaamJ(52(|2KsoG#xeK916Kecy`cN{{B*BMF8@axuQN;gOKF&Ic zLrNAY@{S_U$e*M*`~!!EM^60Y5Vw4dl)jpqa)=B=kt_pGK;GW;uElH2pE<_ywmv*>1}$l?bp>1+8PC&N<);~KedU7G9Bu$F-C}O z_H(jp!nMi2YStR?SM-Dd?msp*W~92I3Y4R1pZ=Sf>pj79za*F!cH8JPbwgo~W!N1p zA>q9Bzo%OGzfU#3y>zOIA!lSBkyvOBP5X%C<@B$$9cq=2Nd;8Bj*{J9VtmGe6+c1U z>-kQ+{M-+^#~IC~Lw1W|j#o<)^bKPdkSNpU5|F=(q8=3xF|1ihxjAiDvU6CO|E9Eryy71tUEmO5Q3 zlcFR2nGo}<9g6+hE80gN>($9$FCrv~y9Ay*6Z3pAl&EN!7v2KMx^z2Sh&z8?&5ET; zdJ{l1s!tI^Kgs>(3G5Pl6B1t@+{ROSn!80;KFYbLYo4ON?=0`$l}^&OO%V9l25Y(A ziR*m64J<_KyLq$o2CefrOKM;*gn*_Gj#ixC(V~roZNY=A$==KaDUT|$gr&{6o=4S} zNs9j3x?fzs`P0CEGhv#p>CkiP@OVhaBB*G+G_|veQ$G>KN55kh=a4aVSjf~pI;5@@$KC)&UqaMnR-0}b0872LV~U~ zzI-S!y9=ZIbMpw`tRX026=}4RdMN6S5Nrq{at1)LpBG0doP#Fcp00BLrhI!Ve$Dm% zan237sz4E`wjl%x3UHBv;Fp3TKzq4N z*ytV;v^_R&`rQ}lKCfx#8{x)(3%tPMz1$m&?@KM!=5m-tZC-boFWymk*=GWq(6&!l z2`#PPnNKrAGZw`_{&b~*8a_bQT0m>d>OqM!6@GX(Dq$`Y~%-Go{; z7w3uyL8X{#5Efpv*XF-k*ayEGA=B|j>_*rtvxtTCy z6sy}|ZwKdU2JUp-owJaggsl00Rhfpe8!$=bW;+MK_OMbdfj%u;rVS##WXJT~+C5rc zbAoDtTvp&)=~=@ofsBsBBTHaqzKT@b)F)mpkNtYtW#rR})0lfwi_IAKBT`DuFHn!SC*r8`~R- z217FLqz5*d3?G1Gp7g42EG+KL>yQZ#j*tuFAvB6twWd0t%YxSd5pD|q+6uo^7wv2x z_MjkLuTHxIYo&<=ZS3;-CFkj;FBzmDAlhJ<-$#f{HV5^esn3$&!BbI|nwbjdt+vXW5g+>6l2r zn;{9S+!Lb6j1b#iSQiRCGW1Giqg%SUygz`O_gG|nx$lGu4A7J$`29g<@N3rOVMcto`AjbX1dwo^iX@n^LC7IuPwRAwMgS=i@sP*wiX zM2P?CnAIc1B#nx^=u2^Jer0il(0lC6fWV7Z$-tx7*IS_3O#6&tGoglZXN2* z=HB19FWzG=N(G{tzCks&;$rD=ptwvJckutr0Z&kXmYzF>I&I z?uM0L+eDYM#EJ@S`xY_qC3ip%@tXWj{@F-RfpqyL$AL+ElHi&P<;|kzhYD^@jQd`E zN9-=)s|^3!!ab1`SjwJAN#(~2Y%_MKhUrxls`9o_TcRtGe(NmZqN*ZE(*i;Qtgk84t``@FmFu6!?m7ig)LDOawEaE2HNFQfzgRCVl-Lyd zie8!Y%TK>v^}lX0#3m~#Vu`z{vPU_n_dfY%B-O2W{^`l%fHcPIJ%A^v@7g0bPCM@C zv>J8;Ae(*mwgle}dHsW~1gR#MMiU_ zY;^nh?BXCTONMS%v!k6R` zUooT}=NOO4Cw3x6e*4GC@-Rjj`Auo=BaQ~$kCDs)qVHXK#~zVZ{N)=z z2VED~73hpC6q-oGm@lvw8;Aeo>0ORD4qz%tQ~4HW6Sy|pm0h&rhNYPDx` z%I*#+Epj_Dy|MTubWV{=N9XU_C(vI;r-)?eni)V2*5<8lVc!#dv+tV&Al5~(6GPll zIw~q~2(97EG7)dn(_qwFDS(W2RpWL#xAEg83^K4V!|$=AJ0-C9u@KXdzCH93m1((w zD1UWXcxOp-vj13MUC_zaHX6xrvtF+IagTPL4LGDch*4fj#U(EJtrJc%Bv`fu%>2O@ z{1(d-CvP&8QdQfb4qaK^h-B<-(0N-_*LD5L@rs}{u@3@G!(u{=!uc2HN%>>l^`Zst z9kn1%U$7d?KZ4hpO#EV;o~93GFu@?bkATjPz|sZhsLu=6_CCuZ1T~W|EPfyO-Ckg&|W^3i$Kp$Cdc(BnaeE-u$(XXPMR@Ob({7S%11lLyhK*Q29&26 zN1dw+Zb+;o5rz4Y)4n@`Bh|_*;#+==Zi~Ao0D`OJ!cuTpX8L4_A&C?|DD_E$g(A1v zO>@3mBS8j5UtZ!HZ?OkR%^9uu7!4HXvml{Zs+R815v$Z4`)Ls+TwNoDdw5Vv^R}*F zCEScl!LZA%(hU{2teWayLXzS37fGIha|?pt767j|WZAvjO)zR@snBC*O_9ndkC)JZ zHgEb`IIrSX?xW zUV1rd^jxm~W}5UY+VG62$GO=nW+`M|dOjU=S0)AAe|Y*U6BA++DB9ECLVkYX-YfD< z-)$0F)qe+DM9QKJgq^M`xr8iKo7zF!3Aj#S&c1Io_PjUy|LOQmyl>G4MOjeyj8g3s z)@dFDe(nnEE*cR`Rh5Hnd({63^%@ghy2TaqA{JC0Vha-j@86X|(n03AcC8Fj#{I@| zya;Lv4)*b*)U|Xi**UU~K~JE-u9Guwqu|LXt1h+d!_6PFy8n2)^-M7Q zFw$MhTi9$LD~*~i0?Ju>xUaB!R9EcNU{17&A#O!!Tu!&Xx~W(AMEa~pC0_6pbC-z& z6PkwE7UM7FpMJe7w2#ZH?x6viQav!hg%fi>yOD`0Rm(ogEK7y<(ChV8r}Te(n7wOo z6Qn}?L9uMG*bPFZlh_df9I{{-fWshVOgd}k&-=l4c)}gd`-gHAN8|&q4T3%Hg1#ZI zH3#<5H&Fi$z_Ni?c6m?=KlB#j_xgVI{w6yR`4hGzlB~->$!F5&&VSJl*Q@8gEf3X% zSLIlObNcv>EJ@eU!n^hw{ZP=~pa*uKN;>Ha2W2dE;__M09uvjDK1IllZwS5ydgFCk ztGK5T=4>jYpg@#OkNq3;wH$leR0J{YcckLHQG+>)vct5(?=Pl6;^k^|u2A zzS`>cIcwIEx99zro`EMS4KdkmaiAfaXo)UGZ;HV8=C{m}ot1jgFtxshKFq<{g~F1j zJ+X^G^Fjyx_vM#am^;04W(wcepY&|N9xmqrc2Pc1Lx^>*fWlu=7HoJF^@BAoeg48O z)th~_!YOTVW<9Cc{as(st{m?(bNnDKT<4f@(#9gu^wR*)4d!j-GjwV8ZYPWgn{0sF zdrj{j`V6t5l$h6M+}U&;s;e_gb(mxH=(`_JCEnAm4Apy@k2F7dmI0+(3)20$ZFPPC z*SfLh@{xSBGKj#p@>euvqF%|TovzM=S=7!jP%@J+l%nCwEdOFes+o~78a<>azr(~b z3%jy6OXwF)yF_$aR>C7%TT$3d*<=@5q|rX(Xs`O+DlJ`7IYEzWX16wjaIxUVBrD;i ze`bEhVQM4=#W?hr3C9Be;pG_hl?n8rYW>lIEu?nh2!ML1!V?3_-6<*pB(MU95KQH0 zH!JtzCY)RRbZK$`_!MvW+;m01$tiHDZK=#&xC`@_J3C+vp_9=9;v zADh|;=j>~o|DV_V%Ax!}uek#Darh`+1|Xb?IZ@bZ!TA#O7u3TpBWm#%fpSxTRV=u$ zt&^Z)P6#yxQ&?fahJA})Xc2gw8xc3$_80A8MEf@@}?A9+ti&QFf0zEgk=K^}II zhi2Ndw(YT4Qct1S0YSINujB4I(PLnIR4@7%IXr#bN@dCP4tsFbPqi&{cf|_ZZy4tU zA>szhgfE()9`!Khqb#Y*Yl2$Kb>dRjOZlbkwpL0@AjE|P7gt`*oA-;MV-rZ7;>_0W zlwPM!e+-s?Q_|9_u(9FS8arcD;u+vDd2V}Rxn|aOW*PU-+b>m&v#s;q^=>~h(z>)_ zE4L9W+dimbwC}}ELFlVJp+ombxr)D-2^JPcR+ADSDTJgoYza|&{n3#nC254Ufrx^b z_m+8`Yx!ia(gYVd#C?AMCh2@X@!Qo->@G+Y%QnCCD|BWCEfd~}80~QaVLDF6?yoW_ zMW_p~1d`+YveZ#xZr3Q?29(|zUI29+9iZcj-4}B|wUva>n3&HC@@(zwGCY78OnVC$ zinm5m71bBbWTXB6YUl+|@)ibeMZG*1DD~Qx*N`p`YC&-O!SezGp_f!Iqm5;1ysmjX zylCitFT-?FFU!2ldZxc-0-QP>eSey63QqX~098iUC+z;KJT%;?r2@WEgA8oOV=-*C z?ae9!0{NcDV01BW2$Ha@rjCwiq}%b7hms&x@9{63w{2mamH-vV6R?-zu;wA<>Te7~ z^7PBV8eN19^f{H^q%-^*3>A;bnqe|9x=&f4Y66vxgyr3HNi8 zIjsNUyatQ_gdK`(xR!tyu9zxUrR_6-&oRb1*+2`JM(S8wgFmFzs^e6T>!CRYlA2?LcDTomc`en9XDuI*vwS*UEyBlP zt+SGeuDh`D)nsCPgTP8x^GSR;mP2{sUh()rm+KH7*as z^m3)x+BsioOs|A^i7UPnV;&Ih9*Y#Ir}S>|IwHb9JcOM@BgY`Mg;>^NM9FRk2NbCk zLt9ELoZ)yiXO_xPN=g;9VuoBBhN9y`eG!C1Mmo{x28Kohi_zPQ4DIwrBa3ZRc8+FW zc7{T4oMR(T{PIB4gFg@onSiatfNIYq96<(SAMAcYx2sA~C&=|aC7ub#rU2?!5llz) zxs7YeEd0;QPJ(IP$1X=vh$R*`SrOj{U5S}$+i2U|mtFo$Pj$9ef*OIfYwg5QjbO{agzdq52)t!v<* zDi6lao%^Xfv(S8F^c74-rmAVyU!K#}Qt=)2c!e$L%h2THUr*rB?vzWhtK(8O-v4R= za1iAzmm7Y}|AbwU_k5nB7`Q41ckME$nuGH{*PZsA?~(@{fyVuJ7IIP*iasug6Gae& zTY<+4Ll<cclpO3{AX*3jOk zQIAt2wSmGb+YZ1E$ku@f7K$ImLxKxGx{pk{9R0FY5Z!ry%f*1v9Y9nS%`VC{L`adp zGen3x{NYp7sn-uycc-T~&*#U=1c={ywny4Ac`+~(47{M&|8~xMPo{_*zRwKoZcD9* zo?*s6F78kNU8U2gh|O@GGqW=s`nD)EsgQLsE<{0vimBhI2aAv(oo<+<8)@E-P|G7z zvex>%tg(Yj__VmsGnRw$7x|xpY$zSAf=7PWm!w7>oE$=a^$;-wL^&j;8A#;a&>7=YnhM<5TR7$@Tpu>pgI)3QHzCLv~+3!1@o%)hy(z)WE?D<#{<%z|bsy0+3DCTIobz9h%Ffhb+gCuH`LoatZeCUO_ zbHvIYYRXc=2H&a`>+P`?WKcZ|VukB3qhMg9N*$(lpX1{PscfkRTS=N_jVJfv_O?Q> zXV;oDnAt*T(k?S9o@%!S6&0V$V-ZdKBG1!*))O=A;9agdOTP<@AU`^r&^v`e3@RiLF2(&VuUJ(d(Qe9tL&`QDE{>B`Zx3Lx=H zMbY}XP7^gnpZ*{$CYg0J{7h{7O;O#VFnBErX;0CnL0D-WA%xFty;eh;Nk%BOQJQPqF0F)5&7-F~n@=u2MUWD?aCUS(rm;EJ0Y z&rv*B7yJbDV~73Scz7o)Mgi`5I}8ju9tw_i%A{1o)>AG{*Xg*r(RV#$Z!jF0GuAI- zPpxz8gxTM}6FOrc_xeB~MVBeyKdybs7fL~Y z3Apqu)zhOsQBA4y6@CSTjy_204t~Z+eYgm#0!Om?tHOLC%4b`4hJJbs*%0k`_*KW_$mPgUd-K z7mHg=5cROdyp@1kFU~+@a>JtU3W>(hi`3NXMpuQvIOdNZ7>01lbdxlnDQ8CNQQo>` zqT7vN($tfxe6K{Ua%#@xbmkUu#7coKD$xL1lmbc?Sfq*De=++iskaFpDk zdqPnRfV|^{LEEe%HM^!D_rN*2aZ=>0d4?O&L{3_J*>uv#-$a((CNcP_Ok?fjmLe^u z>%C9mtWKhT@gi?0lTcAvD+jg07p~1O{2vAHlfU^D)1nj+=3FKW`#B;>#Q{D=wvI)z z`c1(rpo!Xc3aoO}#%@?7r>!=>J4ho`G?IN+h_pL8X{!sw8`fl#b23ZEY14E}QR#F4fxztK|oQL2k8JNBMY{%kpp~ zI`&wa8&(>tIG|QctmFDU)izp|waRtS)`MpZOebN^s7fMODVCCkJYx1+Dj%-bW<-db zAda1fPI%I+eZ0@r;^PB-BzT!OTQ1a%kli&fd^+@RaN>nu-lm#JN@~1TLuc$DX4lgk zFaZ$7c*y$Q1%(Q$n7W!YZ=keg|n4lUl#PR7vO&TmOJFW&{*lV<+*di?5=~<`ns}7<7Hb zZ3f@aaD_jp5wyAP14b-)qN1Upxjk$v3qi%fZrF}OC05Yr~e#V`p7nPr}6maG1=W%zDjIFZx)R>l?je2+`Sq6y{m zm|hxT8n~W;ZuE$L)6}U8nq2EVw)oj3Ol9l7^{R-%_gU%XWv+NIp|~>5z;_=WjScQm z7CE$6#!d36ZT;#&R|F#|{1?vV&y3;o_!}Ueo(7IUzN#if#;vSs^Aro8U5|Azc87;stbdW%1J!tk-MU3s*~+An zbQ7KviRN5wG2~3Bm3Dg5b(rS|Poju|#|KHZh68cU0FSF3r85fR{V`F9g2#}0sJP7_ ziPDJ@&UyV<=QMT3h09rH9DZaJweN))tsyQ+M4B|Il1nYv3{0hsVk(g?vD0-mCpjqI z7EgekL|b}re4t5PQK4B+8TIY18auqnK(rIk`2CHQG!rS@hOY2SxnWjP< zCjn61jMd+Tb8QcjF2b#i0K>8apRQS=7A#W!>$qGJlO_mZIKnTZJo7Y=2zi!W^~CI> zIbD`l?vMOIe)L3j8Bt?_NIW==(bY%VZAi_W=WE-F+h5`BF!CF}=RnNnw=P2DsY<4& z210iXI*nn=xJL+?cIPEqQu~JE_ zV7G-Sa&v3aA9QLNbO;f?PO`T98i_Sa$@52EFc6Hg^|Y+@bk$b%UU7W-ki@e~`f#>W zGVsLHA^HOId2Zg-vI_h>f7dYTF4G`i=A^49vxDU(MCzt zkLJX(jn*`KoT*v9UQj|5u=X~0Z*v1{m2cdZBbWv{z&P^4TIcNZ@Ml+)cKIodHW>9s zKNOnUM|sur?lfGIAC`0^fmcg2HGfMfgw3Eg!2|h&ZZ{-Co)$mll#sPgy`+(ImW0@a zyNU=-`q_Nf(VjNjkVmhoz3JNR4SBr^L?mWmPbzg}GEbyaMLTv)UiDi0P{8+a4Fh7u zvv+|VC5UF}wa(g^`8*^(f0x>ToLPnxHb|5-DCZb){3L_nEKz*?7zW&g?K~;rO)5*G zrMbd05Vo{uLaXMrh-AOcGJK@0bR~bMnsnvpM&J zv9uDiv~F3MO#1HM+8%=&JI6{SZ~q^9*I4);sGrOKKD0NS|7M7>ebF4(^|(7P_3o0gCj?|q0 zDT(D(=GQbUMwVp<3+KF36)Z`!$i1gvUK5Itd=+LB3oz)Ti5Q2fi@0J6;|I$^b7{sf zzMVLqSnH2=yR%jw2N>VPOu32;tUUR~)X^w5i~JT3A?U$j?ShJMnJ`M(QYWZE=6a%7 zY05{D{c3c-6Jsb2d8&>&Jm*n93h^r||4NXLjihGVR_WRUP6 z#PI>vs!MhSjXGZ}&AmchQ4^p<1ZYSzv=tZF!*Om`Nn+~7U6!1TI#O98WA~!4_b+3@ zgd^K9ta6o+Uz|WzqA;)co?%n69X#Rf)wPPrlX{&!%$~`cx+|mc#KyK zNV3kNHav}O=P%^9F6<;G%pFE9sqQTZU(mC>3+?{oA)!M|R>J@Y34C7*j55CM8{L%p zaw{K;)pgjXq&Y@7c^onQzoR$rdtza@|t*|xfYF+|;HZDOmQbi!-ym6DO?HfUY&{TcDT?%S=fNYg2nPf#R2j&!zVI>PlgW@4c? z5wW}C&qg60aSp%4RtPT(4uB!9z>zz$L%Hv^011~(lq@cVA5YaS2v2>!7;ew`n#|kJ zb~9I(Z!63%;1KjFIqIL-!1&t94gM5h>U z$ibIv5BLMgq!7$dt@5a_qDkvb)mqyl)!FJkYH5D96;B_5Jfpc9)ahvj1h?Lq?^tpW z!Ri;6*2di6tsymwP@zcHvOXIwiG&SVT!~_8`HevOhY!MK)5|g?6(#D5xmHcf(yUy{ zbVwylsZwW0bUQ<0*zt>TltF@7!;fTs&A;ag`+x#U12`Ke!>Z2BHv7)7KG#~~A4blx z{90P;hNDDFx@#^cmtW6KzUB^B$*-4oC{=Wj2MG5RV?fVfv+T)NSF-=VNZ%W~=1g0Z zJRrHhKiId3>5I@p@P?W2ZBfasOTat8GkD9YrUwJV6+qC$>8rmoY`gKwC&~ z#eY7!_&T67fVtcaAE!9zRC4}5V!xB!iTQU8F9-W*7bR!&Z-9%iS3HJT&)G%;X^Ayl zFNYX>OY%4Yi!kB|c>jF5;6iF+GRJsUV@D}tq~m|Ueyip@h2hVg)~DKLEug8GOt^Dh zf00u~rc}x`ZPgj_@Nlg4m$<|yDHI%LfmJ&W4k{)@3dvTmsw%DE?}@7HBW)NN(H10g zCJ4oTQXZJy(X zo}t<9l~XiL4kOpbc5R#X-UZYsFh>j78c;%11zYQeAFvx{ZZWlO+<~i}vhXgMG#pNs zWDElYST)(WsUT}~Mj1Hf5h?sN{S1TJHmUGq64lQimU*KL&XUft&)j5Er;MZaO1Ao! zPt$RT3bbpy>j-yXu-IAc=Ah^y9mKS#h1zZE$SO_`Rc&ezw1@pbr-|q@F#rgmt8~~6EmO7UfKI$=5;Y&ZbXxfD1b}_`b@<3Bby_@ zXkP4nIO4Xy=y8PR3 z34Nqku62)o|93<=(w7l_z+sA*C(scAw$}?SY{*WELi>8Qrx>$$-|Ka+=(i5JipO+I zpr_c&!`#hFaiU_Ibn21z#f!)Y;yraSGNbV`_H6%^_Ul1k&7V$9bJoOPyd5G7J5>X{ zG3tkzurfP6aSbdTL@c@`z2O5PZ=c$0-HV6w+IzW5pMLSnK3!s>YavtKz-3Av;}_`b zWWkF0|8@}bu{NEaFiJr0!LSZG06bis*{RZLO7}BPjaZ-=^{yR*0oy+nqI7Ti)2u^I zP`|*pwlgAEH86vheT&351sayB{X@JtQ%+XkLVf7bWE&bvlTK~*D!fXY$_E*y(abB5 zf-!%ebtl|=wSSeF;OfAt!9yT&#DbCBrkUo|&wjV`R{n*nXg=uIHzY1tmUb9fEXO*D zBpRiOqo(ja5j6cZ%Wa~@O}z~Zr;xpmzus0K$T#Vws=M_x;sn1$-fU@|QrHyy05x7w z{V)6v`~SiJBJzK#f|yWqS2OeHypf_mcVNH(TSmV=tx9l$TCliQ{XiV?{x(K1!_gwZ z#9t2@boy4KF>w6(&0H3)q3hPOogMr;0Rx)2eOyII{+vfK+Hxur)9)zUtNedg0012> zW9&LEoy885zn!eVTs>DhZKJ0;Q%&x8&Zo55+pmXXYZqs8=H2k9yzTEtPQp-L&*yfl8a9r~eX%Itf5&4v1e?X7 z45n;(4pLtW<#a3YQY(nF=4s|U)0H!9W?lx2KV6xdMSY;sP)xVJAd(apd}qQ~{%o|C z-^G!l__F&aXfO(oGl%@=^ae>JY^b!u`v*1W;OXXw!<53f+arrn&js?ww6%9;V`LOg zdlNCvzp?+=ql=d6kCDJSLa=7d^C+IcZ7MB8OEN0sl;@%LdsYhm)ha7&{Q6O-=GXe!WHTj^ltt;|g2J0S?AXny;OV)4fh<7` zr<76LtrQDm_*|f_^BIWS`&m8-MumUGm9HNnQ7`pLmExX_U34wKwo;G&!q}lhBvQmQ zuhbc44Un_aG=MeFk49}p>-LRpA)W4 zTQ*2g<$l(!vv^HB>vPe91e&7(pK~soEWik=?`Gl-<-GTz9TCr~ zaQ`@tIs9d_M{9wO%&?9tTuq^w1+PoC^GM;E)t~##yGDnk%HIVBZ`oRGz!GpnD06w> z!_^|q-22_z#KOU;2mPi}Omo}NhHMg$dTpm$)K`6ElOKi@!0%o5t8JzD+bUed zl)P9>Lv1y?tfz3NsO&~{=p7qivhB`G;{K3hmruoIYsZp+<24QwrLMLcnN6C+aVFT$074_ebiI}zWu33J zVj&N#%!2M&D?(eCC2Eg*(Dx>)i8H*ptf2x6ue4HY`f~yGmbXq;im^_mwsf4BfcayI znhK6|L;phqA3@Y%<{dU+(Li_@uQfgQ{>?I9$43iTLlM96)SVlxu~ROuui)lpwxAX+ zD}(a))P}&kxnh74hJ{o4&1;>76|qHJ;h%ea742H5B_*69O1d&GJVi63k>!wXJj=?v zvS@8>c>O1FvUgg!;0({lEWtljFz7vCL ztGxeA6F5sYEq;rgiFBPGc%r|hq+6x+GTA30Lx&N&mkpVitT8;qq&WY&Z7>t|x|@P!{+QoIQq*7j%TOrP{Y|F%)F(F(ep7xO>BjCDVDx6r|DYfBOWs zq4Gt*GMxJ8dcgdiMZa&1_GH31vbYyw2c!$|${QB`T3Z%BX|xm5Lk(j{)!d6q=FlIr z$!PjEaDboDA(kY)PiSsa`DKvMjs^<{2JRc<(mZSg9ZNq3+o!S*haxtaAJp{Isl9(x z?HukR|H#Vy?n++ctvVC_$)$RZs4;!*fWuH1lOumrIT0lq9F3}x#OeWsL9%^u*2&RN z9QZKA0y1@^nnV8`ma4@s%O-ciqVukD4*AB*621_JP@@Qy@&6fWN+s@}zOYN;UYO>X zbn>&jlSsaBSC{aO;F&QJoc_CuJ73{&*k=kUQ&Vr3>J);+@IV6=g5mJUru{0pQ(1nC zk4lwmL6)sZRcUqH&aevEP+fL0m^lPMncBCZSUtr-9`~s;%Ta*@FtY;}4$sfajo>DT z|NU4D$J$N|Rhb>^hsexFjfuy8sEDY@&z*el!hqjnzvMvgRYN&Zsj$ZbN^_@#y$m2{ z^Ge6(#g9;J%bz_d4!Pn+y@e<-tEzGN=Ip(0CaG;UKb76`8&SJHVD$x0DG6VffB)?x z9gP1&%8{^7-K>;@KqopKRkwZmx*ay#^^zBjpCv4^G530sl{RmO{FFAQo}f^t^f$qU zu)rk4+l5QW)ehUoD+7mnevQ$;PVC2cF5z0K+-p0;3c`OuKU*8 zfbCJ{db>i8WDP>PI6QKgINlOxJEu#h*k2josc=pKM>1mfmmSxSg^ox^b5wb)SfEk! zTGafXMlqrN-4XnSo1=x&l_IbA7bg90C!9XF@Olabt+>aU=#nZSgU3ZVGlv;DKX-fK zUHm<2t1!hp*0K4>e|r8*n6P4rjGY!HB+93IndBw!4K>c6U7o_)DR%Z33)Tg!_jp>F z$ig=AAoSPo%?W1_WjTxZIN-w=Qr&CA|D ziRj6~GCPU2Oid(=HuQ)od$~MrRheVh-8T!!s)l3mcclYl-9ZO;!ym?@Z(1vHX`Mc! zomXEEBguvB>m8s_)ThIl%Yz7LaoDDCM(RDz64Hh_a#0zHhY~-2CPBxy)ls~3bX*)p zl2~i{AeB)=#MrH7FI7k?PsCMUfi=pY*v*m44)_s-?oMHu$~6lR)W)J^iC9Kp$D*x^ z4eI|=vK_VZN5Xa-=2z3l0E4B9fR=8HXcz-Df zax8vE3d;`#*UTb7sLcbC8yiu&h4VLhKo{SBz=_IUH>KXHHmZv0mZptWMBLKJDm zrBMHTzHKoMEm*x>y4<11ZQ|6Q%s*tXE~IHW-jV3`IX9o|vh}!zY){d2ypRD+83X?v zAz-xJw>6Xo|KKUkd(=*nZ;7 zb}n~9WzGQQ@nc%5DnHu79(uEH!jAyN=&v@vwBlr*rL2vb43vhw1-6eZYFociCU)L! z9Y3C!x>T?prh7T#B(wbEkrFIXV$+`(2-*9zR$v%E&iyDc`u4n`_V_e{Xs<$=E;TN$ zs7#dJMlNt%^a4en?tBfZDuf6oq6OXu7(D}oiHQ~~xY;hu*v~q1S`#fUJp^9_M-x0) z)~!#6s9av&`eifUHA&7@=RcVl3xn~C3DuE!O1jD-)CQbg{MG8r4b=u+UwjGGE&yNY ztoOgMT)}z`m(G{S@d=AuU0W9p{LrM7uzEbw3J$tK+_W=HZ{6c~Yht@6*m4U9?{PIy zo@7`eI=SHQyL4k;4qfqM~iDyhfpFw|sY*(6l_>K_9__mF~xs$EhD1RR2f? zKT{0{?Sf$%r#gOWt;j(7%6_^~LDtJbyO^JNnhxGCB(Ps$V^^G{1?hc(%|hO<-T>o0 zRa6S9_WpZ6;-(v4*p5gv9;YUe&4CR}%k_bV5{*o0VJS5c zD=y=eDopMgfs1r#;j=J1kU0izDOz!IH zw>HoNY$hIF_=i@|gJ?56X4H}61H~cmQb5~BoF(e)ld1TVTEs%risdkNt$wZ~QjZ7> zz$8Hmy*=Fyw`OF*Odn@m6}(V`2Z^D6hQ$rsL6NA~$Bij9S6!svrA2C`M1r|7FQ$wi z;h6E=*psg%66+>n<6DeoTtq4#lJ2aZVNzkWTAX>5H_)Q0Ki|Q>c`Q}pVsfjH8}bzt z$+T{yyjIb>XN*Vf_c9IlZ|B}XP?xPhN0w_e3&~$jlq_4=Uu{U_TxE)pIdAbjUy?Gu z+80IW&;#Tbz?ZxgT`st)Z7!N8N=Qd9x1;$;j`^F(ok)--Et8xN?Wnht!Fa9thbYlJ z1Zk-5yV1`VHuok;4vn|7v@XkAhuvQz1a@7W(dQF*-7KO83N%AyMCRmvJbOGWi*zhM z!l#Tm>UciO)cjq$#$gxj$QtUGSRJXKGTcFWP=Dz8boaeKp2q;8x zNR)`7iaVm$=|6Hph`Ax#Y(o62R~RtsV6xU!P?X{%X`qwkdv#D+9!qIz_Vjd`HxR-U z(|&e%)v|79@N38s2r+z&;xys;NKZPp+(9g9Wu_tPZnNe#Zk|-SN`bu&k%aXm8;bIz zU12B4{FJ=lHa;T!bd*xO8#WVTuekQz;yaY%7bCKxuFq8|f8ivrZarhk<$T&lmp)%% z)0c~-6DNWg7%sGV16+Ep))IFNLL)D}&?}H23tIpkq||(=Si}_io2vieCstf0_3p#S zR*oB_!;FP+bd+1e{lr*iZWk8s88Y$n{2(9meeb2u@?#Eb@`z{wQt{tUS6~&`po?o0 zC)0fb^tCjE?G!yO_DRTc+tsy_q22W8Tqt8hm!oSkJCI|rPq>9P1EnSx%o~fQfppC3 z{?vzR*y&=dKrsG}$odDgyIP7>Qk zoDOLR)-Wh%qp?|DEyBOQ^}mB%Cs1tibuB-^#u5)RKV9c=;O;jekPxA=Lmtcv??Vl? zW6T-y&nbqNva;>`{u{yKeYt%tJLrWRqy8cAhsB>a6+9H>@+7sO>~j>(TNaI#fVqv0g(cl znm6SuAWEiXXGK_Hg-_PIt7RvwWadn9@0uysNQtj)AJMWiR~0Sv>2wukMHmbtG|TjW za2jy!bg|NKl3XkCCwH{6pz-!f%2KpC@|jg0OMSjD8YMVM)k_$V?ueGUeZkxur}3N^z8#G?M~D>z=Q@wBU7GWH}IM`r0>vp%j{`yI!Rh>({!$pDKf)=v1@z!6~+t{u41n z6cPDe=S2p=+hOeKL~Oei0wumbJ9S1V^0crlHJQb+hXS`HL(F26OkWY8P^r%9U#%V-N|kPlO!v+q#Sy|j%{xEw3m=vpV~==n zleVqq7%RTi_nL2iWsCMsfL(ef38Lz{#~Z3V50{yo>e~W8y7WKo*NHTpW5Js)rTbu0 z&q73V!TLhLF@~*BD%VacL6z#VmC|VTH#1z|Kq$N61I5q{c!C3!p1K(a&8u({vEF#H z!MH6GUFlPCd|)?>Sm<#GpUZGtd2gNxN1eQu%0`adW#&{oc0T~KA}n!2XoGu zZf{Sk-5+2_r6w|CkD-jHqqWkq(UC2=CV0}<4W})M*vgQ)5+eJMgx|Jh;Ck* zk6mX`Cl>stQU z{#9-8U9qZe$W{qsD{pGSP)T(fwxhKxAdnTR>@IuH`0o&1nL;ag##TB1?{)q*EVo$6 zcW5YGFaQQOg@(kul=OcW*>+|(e%>?T{2Val;1`Uyav?d_s1(*}Eua{CX{K&%;y=|b z?I*m-T-t_-$JuXla#P)&x2oB?qH%eX3x=T>+nS}SqjH!_(Uve!Z3aDhMpYWheIZIT zWF>PBfo!V@a8m_sqGUKFwYedj#1||W{n`gf6eC0PFBOJ`#NwmJM0~?dj7QH)-!$b^ z4!PiAw335a)lm|$V=XL9SmD-2i+z$8dD6^YUzQpZQ!WMI^iwzzQ(=tAj@n98&9_xG z6<|roP^nqx4RE3nQb<$FxD33{{C&7 zB!ojHX!Fpy;gCzF`@@N6#w=)~sukP!Vz7?Gl2<}o%CkmP*0d2Z9&kWya&_|~D%Mjp z&|FUoNW*yebeH#s_|wNH$uAibUlAX;**i+)#}i0W`4q$Xb1la$4OhVj7;OG4r1~L~ zLKiP9m#OkXdhMd;fq0TT$6z@6y;kt@)o?_Cey0n*As_&Ss3@hU-%@FKu!@6cFbmL? z#&~=^GWSY;j(P;X7=Xf&zCl%eTms1Wcd5Ufd^GAtG}o6lAKj`dwp<6rbY9GbG^EEv z;KV=3I-Xe&N|O>L?kLM$HF4v!s){thrar*Do=p3KBZPg^yjYzouVXlBc9ytcPjv$;w9`Cln)rh&=pDUW>`LUwcUXA-pwmMExNz)8sFp zW7iSjL%;@s0++_kGw-df)NL4#&IRCca~<*s0+q{S?^ZZVFM>Wq&0|Gg zQD87BZl5Q*l2Y;EI2hq)8!9TGM4}>1bQ%wa z?V}2^OWyIWl6MkpnVFmncjD8%NAMs^P~afbkJoI3xyi z5zNJkS?&HrYxP&s3d#z#}=Z1(t*|Z z>F?g&|Hh>S-^$zHGN&)>?lx+W(8W-IqP59spn6@yp2d%#Xxfp^(lkKld-MCB;QS{+ z19w}4hu^S`@GVjEvIPOaJ6O&8b!QY^-6rY1vNqxW7C1b)ss5ceJ5h=nl(9~gtU1;g z&yhKo(d;Zq&Xvk)hAhQ)NhLkX5BRr__&`CwRB;8Sl0>OMm)N4LTUDokkKTP1Z4duk z#FU;ax)&g0KP2tWp^LOXUo2>v;f4Q4-D9be@BP*!e`{_=D+jfd5(K8Ta`GW?q9Tb0 zfi>PgS}I90qm@>}Ja(v5B7BhHGQxR`!XcX{5?kJj)613&!(cVsQ`K1ESR|&Ed3AfA zd*1XbQ`)!yIhHl2khp;7$t7u7pA1bM9;Bz)D+XKEk#^p^D{{@uF#eveKn85ox=gdx zFe#40Xg6t}U}QpH)q(6TA}LSGu>&{Tzp#E5F!1 zxjb|5jDXer>8zRv2rBWk@vYmF+qBObbp{!gIS?)^ zwof5ydKkUom|T~2zoQ}1GaB~Rns<)k{^>UK@@U~A_9*g;WcGVvz>bjPm@0eU9Znnq zOD$H@u9$SEvj_j1Ssjy=a~z>5c)0G^?#?lNIWcd=-|J*bKkg4}3}yl~3ABwJ`I@c_ z#mr7;ru^Y1a)-22y}sO=+~3>SE3V5Mn!lvZH_OWp{TSmj4TOqhvwI}0d=yT3e1T}` zzh2k76t)fr=iR)J;Ko$Wu7-P8RsC@@K@3*JLMM$TvY5kI86?K&t&-vxs9w+|$6WWJ z_}WvIBQH-jEh!&mxsJpnPiw?tAC_r`rU`Qxl~p!1qHD$!rI}8d=;nmVjx<4wYlSMN ziIiSHqCPaDgMz%;{;A5gF*C6|{DTyH$x)=1O9>6^^7lV~;)MLrp-#WYe}5|j^!OSX zoCx;ZX7$vle$)=`Xz6&d?K2S{8}q?=<{V$rnomis40DG*`-vDYq?~h#7yvc%u@jt4 z*r4B^zAP?re?}#c>!bWFto#)arEdfzect~O+SQMl{ef3${QkXB{ZF^bK{|i+Atb95 z3q?fq=c(^)tY45AS_Vm|3S*71TgHCYH0fU{qnVVRLNkTF??ZBv?st`(%Ljs%H+fkw z92q;7ir*$2CvarJ|KcwGO^N7>_5Vs^`WBwp@F^aRk%J_XLr)W1x@ni;aP=`PB@@P+ zR>3~Co%R>P-%lJ(Vd7n5Bmk1y1CA7vK}{HQCMTvVYAG@bBkCz;l)ddWMJ!@@Arwor z6uX$2xm3`?H+?S+QaNEw25?FNP;rKG7Mg(NaWzc|`IHzONl z$mMNsDLW#?bkp^jfAOGmcIG2@<|F2xWfk~*GO=?=Q+RupMB_mJI(ZgO$@lU+7RoK~ zfgcHrPhm+V_Y!oz6iG$I8S)?_A6KC4;ReCLxLBRM@my)XXw#kFUYSdV0A%H(TIuUy zK}6KRuhn%~m87$DX|1b}7mRM-fmrQ$X?hiNw=aPMuTn=P{pneR#$PV+S3@o%9z$ZA zSsh3V;6X%^>`IUuEqlY}FR%3xB0i@n*L^T?UML@`X{VZ3gN~s;^;ahsTXZa)1!9a- zL}wOY5jB!Ut>-K)(bA4H^p>S_OP&LH@gGSH$S1SN!ju-(NC*wpa%ZeFB z0R#Yluzv4huj;G`(WMoSNT>6c(BLZ~;D*VdY$`H>JYX$uC6Gw@i^d&m{}nXViRvJl zzi6zdVRP_w&d>;L1=G;S8*JJkHsl-HmFHA1KHgj@EfE&vlX@21ky_GH%pUTJu;o5v zq*{Pmq6@pdDKf$O0N784`jb`KDSS#zr~Ktty0=(~0T3QYa-37nXx!^|d(<1;7TX%% zEbw$XMV;g^WG{$$pFUYJb_N8K))gTe2xZ(#)B9{QQgeN!5fDbt;X$5tF5N@e5?8S! z$BD$As=qz2Ok5W)r{d6X3gWGNwYjz(1ETG$5`Nq75<8 z1Ze=B-mAUyXwGO!tUUvQ8HF5q($-~nmmPV_$$$6l_bo|tv_Bq4pVK_b76z{ua@Zz_ zG{(kPQu-w{#%c~}Z}+zbZ*R*KfkKpN-w`eMfPR^0_~NXx>vdyDGuGg=iJ|1)Tog$y;%cXVbe%S;Y&_3fFlu-fiE<)G`at zyt6p&zqmUrGDUN@q z5xUSnpWP7v2%sBb;msWCf{V`D?egE#8=}KKUB94g#{=JU8h=8oF59@&+ICoDd2!G=JCzo|)rHW&4}ZY7H#eeT5*g~t25$Kll!Y5lpGV}{<1F~u0$#Q8 z=J#U$mfN)(TayCj@F`%j6uGO6G7Srl0|d5Vecjv$11E-$Lk>&mHp4ROkg(qO6A4p5NJV_>2FSlkiJdxScKq zIu}l?s0s_M(6g??K{B_b!7ieRT9-oN*mY5mPkmv43?sdXsEA+jBZZ})9+gUF!O zx9}QTP37umEp2vhDETi=+}>dvH5esZ=@wiH__sdO@9kU;T@M(SZrIFh9)kmd_^nLCw=ahnM>K?0-?LVp;JR3!Wn>avk^oA+$))MiPg}(AK9^tu2Qds|yjq+Ln$% z34J>&iN=N;KD##Ak^27KFT|8qtopz&u2g0f3ltvWOvES)gIgOj*nHt#@c4A0=<4q> z@L7?G$6WYti+FhY`E`v(9>|TFuQKkmzm#F^-sJU7)pwQd!>m0sBA;X&!&5fy%88#f zKZW6nOWQZM>s{dwFL|fMQdi)(>7Uv=xa40xLPs~^D$DOg3VjyE3|lJ_J`D@X2=I*m zpKz*>8vN#yWa^Q(<59rYoYQ3*Gdq$>sld}$siByrq!MS)uiG_1$8>)DC~JMYF56Bu z7vFEe6z*_#ntW0!Ml^2W(WfgI$OgqUvcH&6gGo)xv7YegtJ*Rx(ocS%g+n`r1Z9@Q z6-d1M0N`i&vScm+KFJozEKP+|l`H6BD@ z3kx3}W*M)+k!@XynXxpyRe5+9*29xELJ+SDVjR7bWMBYSTB~kIVkQ5k3nQ%2+)C4# zR7Hi=Aoa{6fAJB{iu+2-X`S0*H<0$bA~b4e6KQH}+6OK;#liT`V|*T27;|mYR^uWw*f0ow;Qf`- z2YPxB@G7Un9#`q}-QfNM!fD2S-*MJBqtxXQZ^m!2-S$2GtMF|O^-{tlWv>-abtF{K zwJM#z_f=m*&lR=zX)XTt6zD&^=L^G{C?&^fFAj~%?YZa%N<6ICUX0{{| zV_Au0ei*A~5N`YM{5;->AI)2e`^ok06*!_A)N0^{XZZRLpMG>MjM2N}dBC0MAP>f{ zh|<^?Dj1d!#Y+5;WBw_N`#%0gFq%6*o8e|9eewN1)70nQ8|DlvsHs>6=zd`PhAE{3 z5^s-dT2~|b;mn)S`<f*i$2mSyJM>=&%E_ytt;Av@hZu)|@#(Vr z95C+;;4>Q_fzs}ll8>Z;0+Yn=Z;K%ohLUW?g)vfZq=Dv%V_sdRTY5duPj1JYqa&Qc z9G4gHFT%pYBh1{uWI0;ZX8 zp%_mHbh32d-ACe;aX+&10$CKt`ZGliq}cZmjKl9>XC>(2%#1}3d9tWL;Q^Us=I5hO z+x8%0Zxn1pxRsW>L6FGr@+iB`WcL0uN7`nBk}a$yh2KPvB?D+F*OB^ZGQP{U=%eM{ zW+1d-M!5Cy`uex@L};-q%q+==t8n?&SgN!_O<2}oK!VrLqLV<-AfF&#S+%@JQIT=x z`8_q{Kim+!RLq*xl7rLx`d4My7@t)Saw%Kwqi@B+EKYurSyGn)4&6)O)reN_{~+Ul zFtFzmDau)gO?c)<(8XB-ozJSk1CE=o2~G10vex5#dD3DI!UNijan_Pt?$Nj*XB>bk zsW*+Atb}`HL0vXP)BPN16vBulCxF`Sd!xEVvUnW@+x>Yy+lHE55cyb}+$i(D1gz_?ioPz9g- zQE-L8SR-NiqZ!@K2-5AY{o+}p4ho~GFEy3era*hdxU_LSfh)`NjAJ^}90AGI<#vp9 zfP`WpNZp2=?%!~r=F(WoLMJwBd1)-kcNtz>vT7A7X*16GB#zYwn^HEbJ6e!Y`i=siJiBW7ZBWk^_ zLQ%iRqnmn5v1y}S#SkjBKrhSzd#T4#_QY0hYczy7F-j2xg*g4r~fBhYOx*g=t zKL~fX8{x`wwINvGkK*8EHk-az^!w;|^f}bWr<>jG^Z$C#?s1+(7ihI&_w)~V*fq|< zJW06F3ojo&yPu@M7SxW{pB~?tJmlVbzh5){ zWUMLiw}U*8jU-(6I>SH%lDZU03`v?o7M%pSRq~i#N*wf)+s7c3m6luaST1Pc2unq5 zmv7kq_~)>J5sxY%l$42FO(l9_cDDlwDW>RWZ9o%QQ7TmLfo$Uw*ISLK|J4HUGj&;$ zs51MPj#+sJIORNJn8Bgnp-1W*q-jP~^<1m?WF4Gjy+e*4fO6(@%wM$sjaw|jvl$Dr zn_m1#^&5GiIFkMHrTNg_FN@N=i1zOxxcZW42&vTYhj>=GMBLPR*!ph*_%9(M#I0;Z z(n@UrYIiX@uMmBq+syVv+W7A~>#<6vMCN;0kfX(zcLAc!b+YtI?TEZIV4c^i@)os} zPv1aXLwH)J%TN7ApBVcm6m^(9*nmPFJ}Q22DTaABi2v%Rm!PnXWQ{5e3bz?eZjb;s zmqmjMoin1XvkgRpo{X|U_@k);JQ35QJ<#ivGOAocLz^g>GFN-ZZ=13z9 zSDbmdE3y9_Nkf;nE~jqmm4@@88_FM z9|0go1iy}x(qt)%s-ytl>cLoc$;zunL&zA#@d5QiI@g%iaEYdSPMZ#jS3FtCDbFxG zg*RxcmGH{^%u6GAYh~h|6Z>{X_>~5~_fZY$#uIE&=z|Z{`&{nHer>8hm;Y3+CFHNL zv!L$vnu5G{)I-jTt^WfmG%~TcP4E@fxlnilnmPYNmuo~%4LOZw-QHuZ`5iy=(fkJS z{y6^)^^`XcoP~4PQT+@lWSS{DB&zPUUx1kn`{a!FYy%>_=L3v;GBHjc-7!pD5$siX zmG>1?Q%*+)qr33XZlb~W;NYt6casrcSqoV31h>ugE{{TcZadch8H- zHt-dc)BAfOcC98aK*{%p@_KDv8b_9ZT=v=va^9ci6G>iH5R(s<92(|(*UNdc&p9{q z!PF5UMRZ>GTl@nkx~3xkQbH{OM=mUIp44@`BT=zoVdRS`?nf4Y3 z=S@s`=kA&K-Oh>Y053rLLdne%-FyD;pSc-PoV|4}u^@~fmVdCckqRLf|2~hcOd}S# zW%kLjv0HzFB>4-?W1gh4D+9>;%5%Y<`K|+0#-l1|B@sa4sW%R6@xuH%Cz(xOyySGI z5(A;*NU8;5Y0pi8kaBu?Nj6!*;81L8HPSckMX&@pK#G_vjSy+2OZNX_Wsa zsTsbsK^O9-Z_?U`RWxO z@8Af?GrH?!Q5(@+s|VG$&nJt=KMCj8dA;R(qdm=s?HPr1T^^SE{~kpkUEl7_sXzaF z5>jz)Sot~NL`)J#E|1M+(jR1e$o!{mIjoB~!R_ESs)x8R(lJDGqJG>pq{8o< z9p0403irOS;6^6!sqDcvPdrl)rEj;c*W#fMjg;UR)30B7nVKPNCsmG(gJtXh-+v_T z2V>XABC+XCvF_UYZZa(9Neh9XxW;Vd!F!(yO5NKTBf)w{{KeP4|6=Exq~9I!S8yap z+675@qnX}N`f8&)%t`MVVcE_gHNQSb*WR9gU4M;K(@2x1iouFr>?^wZsx)8pN>M7O z6`aTrZ}fb^H+1{Tj7rHw+F`n^;EDIgj~#;xee3~Vo)NLrfXHIg$^7njWx{RQu9h+# zckNYA)k?&Wwh=R=D_SWBYd`7n1LTgxa5%%U2X?T=oN0pa`kcJ{K9aZ`y|3 zS{JJqt-M$FkG=lfD+WD9dWZmnvBB&or^OTdVt1nig$2sQy66?+J#W(Ve1E>3=VFJV&_BCT_GZ)a}dY2$$`YhBS!j_%x01?k2gqT{_N5* z9JUB%*plw0fSfne zX+xH)FY`LVzJZbp(6F!1nl#(RklWnQ-DLir(~UkApuiEVdUMS@Yns8T{XLQpL!6AP z51A~5;do9Bt*H#<`IKe|C>}EZZhi61-4=g9Bg{ugL`D>42#)uMQ;4O)C8h?D4sU6jC-Po>OPk>{VSLx@P`B-gN|+sWNz%Nyf>ZgOsHdzCYqF ztYy-H_XD_=+?+3kQpY$|ZbN1=YBCoUu>%gewCr4Bp-azn&eWw2%%d{)yJbA7it9gX zdn}(%_a5n9yZq;9)SSn~1QOY@fiJK8O74%9 zIDLZE2ErYHN}35>m{BojAu)@)3N`$4o~XPoz0$`a)54XDw%*C`(Q4kA7rmMF1v`yrDM2&tYPlJsEs~KQwh&p-z z1wAasbIE*4e=d@nCt|}I@St>4{G~zQJ=l<$`lYQXNHI#0otdFH>S?(CH`S|5`|Im7h&_LG1NQSh&N2y48L& z685`HuJ|*N3eGM!quE(j^ZWXRCSZPLn(+o517XLnD&D{6?b|FNf=mb2vJvwA9F|@$ z4Ea^oqaA~#9nCW-{CalVLsH}OV)jgFV>M!c59w|oHSjKe$2%kz=s>xc#DL!%%rX!U ziCtxP^5M{t0Mz%!nuwb1to@t6akDle>~o`nL?k3dbwpM|6P~6>slV;ECg=Ay60O}> z1rfmV&(`PuoACR1w~wzp8n6j-)kW82u$GdPj*2_p_5CvpPtRtAdV$1Veo&d+A#Sp= zd{xhR&nM1G+*0Ai$BkrcJxl`9f_g8v9QK&1{EJoVB{6$)WD_}$-S7F>K?u|ocMO1J z)a;YRjCvi$i2m>M_-+1+Sl`?#IZeILm9PZEJ3Zg;MtL?}QjT4-JOTXLzT2TwvPAg~ z3O5C1wY4H#-VxV53~3E2X=2(~aSaJ+L(K#+C^EFB#Wl+`@>tnZ#@+ozU?VLUeg(2r zw(l%rvf2g_RtP2f>0&5FDI^gbSWbr0bdl8*piFNzA-@@9Szasyl)d#R)r}0s=Mwap z5Tc)rTZ7gU4I!DwOCCqaw-Y>>VaSv@67l7M+F^20f62=K5T&iJWFE7VD81f@!i{!* z2uHH6-H3A5rpYPz6?*?iAPH)ca}YB0*>@2C#ah?yOnjlsTiAGCgomR3%+HnGjH8jDSU7nEs!VNwwJzDH%nc%ofn4IsG!s9yio7&cnIbUzVJx3-S zH4q&5Nzg)9#!XIUJS)k|x|Rfb3>ex3U(m$NYpEK`jnXeCR%F1hv`{22P!LAiz{yd0 znXnCaIW=+CYN6EC<)k|h)uLL9z81*eYIMAzZK^K79uJ_muWQExgByR z_9O&gnC(E&Wn-V~L(5JhX&8oz}76nKdaAAfvI73WgIPCH7n zwIQQ997lXev=$DPu)+70_LlDH9oe19^_*2Eg`7zB&|Y;v33e51gkesXUXOHkg^0i& zNALu5*s2S`-|5Z+Xik&w4Lus~>Z+=qe7V;Fbd@hzx2Iy zoo#ZZwP@yj5h^|1AMtm#14W3cF{<4{);r-Ex@E{>oTc?07(qx+^wC*}*kdKs=d{B` z+y9q^c5mYaO8)CUxxmWVR7QE7P>&)%E&XAp+n zFty!qf;FdS%Y+;d!I4D3B&+GZM*x|aU-W!G8yfmOSS|o3U-$HW9;K`|V(S?fXq#4Yv9P%?(9mq*az%*^NR0PQQE*Z7<>n~Epp>hpC1Cmd8Y2U?R7d0Fz;XB&lGs8L(W_Mxl^Uz((m+TYtl^#H;goq^8VT!Ui zn=6l>f(BgU6qjV!Kzm3Kcbn(u;&3dGj6cpM{NjM-vVd{L`M1liEj+MoIbYtK`9b2 zAJ!kFG}6q9qfml-FJMc1HhUzy5%pK7d?|0rd*Nx zp2pc;!tk?4!iwxYj*>xMGGy??Ec^%TiSM+79!I*Mvyn&=`wrzJyn7Gq%}!HW z*nCXQhVyX{JE)w;>)ow)y`r1x+_Mw-tp3^?*6(!M;*mIaJf$JK^#P5VNj3eR@%-LT zzNA(@#d*ffVp0B}5lSLFy18uK_$O?NB;~&!2pffrv>Ygpx*Ri#AxAe8c$2=FDQ1px z688pH3wOs`T<=JbC5!!eHN-JR5G@qB7=Y^9D{}{|y88`WUv(zPp+cjsykEy=_@u?| zytC3ony($c!L(i5iQ8(^gDEXvx6A4ewF60H*x6<8l>9t`ZIYjfiZ+TiQ84 zujd;~c3=Wj2JuSXh}NbZzNT|A$nb|rtSwO>LwZK%|B==B0Dk)b%3e6A>7sR@;lq@C zY>>Y`KpO$iAZg``fP(S9hn~ucThPkYoW38P8Vvelc7{I4(OAtXwXEMc4WHK`-j6h| zDUzL>2>$x`=MgV#un)b}^k#fLPwCdBFc=<0OUK=oDZR&Z^SjM&rbLm8qX>5vR!R3- zv^~~t4{jLrT1$9tz9*kNKhAyyq(D`MM5{*8d_TM4l~5l`&TNErS$iuKg!+I;a3sAM z-YYm@k3mrjQ@54JJd9+!Ua|m9atV>1#ybE#M8>$#>BDSN2Qb-?s3F zD}1Y4EtpCCR&TFci62Al&g!kV`1B3}(W=;D5vRG3wz#9a19LP#zib=RpY!ge5oMY~ z?RpPZ{Cv;2mcuC@8!z~*U>E^5+Ueas*)7X{5_C{j&jdiQ=2cC^smO3A z?8Puf9`2S4K5`$Okq@;}+G5=hA!qlvLkR9)7Q@dMn4Cg3MjEEey~Km-Kx>1J0$N{U zy!&TPk;bk-G>!qW|F%Uq-WMBx^9waD8NGqbs3dxqcrB`;hnaIqE4|2a9xFgIFeY4G z3qfZW$+-j%tAB|xhy=4UiQitpJn|vd)bHx@paoT7Cplsm7)9MA{nAzoYNDiHG3NNSZGuI`L0L`!2D%0oByCKD=H8EO z)<-$MrGNe#Ho={YTP}-2Z);BLg1`w@Ps+>lvHjLUQO=xM3T*_DMy|!S)1OOe-^Uyc z20F4H5N6RnBT?c>3Nl5TD4ClOhrY4OGbxJ7Y~L?=TB6_k zzKO+ha9LNQj?A$+AeGx`#b5O$gHBW*P&rMKvACW!Yz(CGiH|>?ZBxOxS~G zrjqsm$V_vX&{Fi0LN(K|kH@vsotUd67?>=RBA6VCQjE}-`u3ePO6#k|Mz%Eh((BR+ z>1M;wC!LBbDcj_FMnM|CyoN9OI207Uenr$}i)B74b=TGMtOlkiLK&Z|HIkjFEk~)x8*?Qmm1$ex60{O{SS|Sd z?(3408Us##7l9!3Luo%lKx+6!hB}&N0pmNEJhuC7pnKk=^v-Xh$o)6>66#6x4W#=} z(3xY`MNY7nOBp^(0oo*z3?(Q(FZ< z95?@JJ8oD4@yj)g+?6UNYtKVOpL=idjQn+}`@#PD{f)PKmk`y5I=n{Dl?!e!53${kKqDof!1hI_>;4YParF{Aw=`>w&WE|u_T}N z^Lt`4VXczYyTQ6$!z-UB96H~e#vRDKNT*n~(i@We`jH{!%_K31viaY`?eS=BHp-no z3D{;5wp}aU>i`Rkk-VME49&^N2T59~yM0UzCl&5mCDmXh9X3|%2os(ok8k@U#pD<)svW^ai9rjGnxmq-M+j$C7r>5 zz0)@D6H86sic`jk7VZYPyxPA&RIMSHXoOV9@nM0{5LB`~qwjv&X+{bJ)@!Ousitls zu&@Gy^Tk5&CrUyLm$Fb`7!kx?kWS-Gwzi_w@EA;M8$o=hza#o$8|lezhDO~+1r*H1X^#({cNP3B_SOvv5a zdD5Pj;_|kuJVsD+A7QpW++v5Id<*W}GyL_^=T+1Bt~bNq*tiMwwD!i{dA=UpeCmS- zxn!$x-PL{Bq)fGus$EVF-aNZ}(l*l!6SjB4cy40n+BrUX{uDX+e;+Y4?ThCiq#ggm zSzV>OHe|H^Yi@-?Akbk{cp*^)qV@+Y(^Y`lA~jc@0b}ts%*r6K|6>|zFa9L^a|3ei zUPJBnfT7>fub$iZmB!rxd@aX$L=elR^i|YCx{5P6la938!PKrdHW268bvEr#W;ZT& zA0BsC>i?#>P>E4#7Igyb8v8&Nn!>N`aMb~>^P{A_u~0?L6*BeyiZd^i+@y^nkFrDo zr#+BVl3fwQS35IR^8%RKL`kGPs^A#Y%WeY_8%!Kg!GmZFT$AKhG2RnO=;vR*EN;37 zulW9Se$7tVmv7b>Fm5F29okRokDx@s53d@5Go!$w$cg!p28P^HF;l`NKn~z1p(LlH ziLtCc7$HEL;)8@sG7S`y4Yt4ax9GRLChXY(Z>BTt-8=MWayd7EQ*9lK>+MG1W#*dA zll!vHQ(Ml7Y7}}yPq^b%iO%G=cRN9;99B2V4f zRF$)Cyn8_L$4r8=7yqavm4~$ur#E4>j4$d!dQ)>oVMj#Hf6C&B)OgmAw@v|to_^B_ z_l2)9#zk1GG+tle!w3t~v;F*eLLUU(;*V!z^Ulv2+Ovhc?$RrnZ9)~1;pZ_GO1QqW ziVCu=)AJ5V#BT)M2N!C|PfwlEsEE98fm=AiCp@Xn;soUss=IQcO0*Owybl=U4S7R} zK^-xDE(NS7-|(udM-4J?d|--{*T%Y}5=b0Nhg?DsvGpsJU`6$q(4Jlo@y{!gS%-(h zB4@qpdP#0WMQyZ%M$O*}Q()y!pAvglowyUS0CXQeAp)0oEhWZD0??A3>*%>A4*o6JhPbkIg4fx|e>=lEq^Pp@}=!Fk-*9YR;s`eX5K zpIy)EK)3C-Bf9+nuv4H#w+}riTRpyHI<6LDypo)~+HDL^KO>mV?f(?K37Fk61_C;H zPL7xlax`B0uikX%hwcs|SV$?w#NK8En{GDc4+cE-9^>#=p8#*Xzqe8^w;vFC zKcB8joMK${2^{VvvQfa9Z)u;f)||hJVONeCc6>R@4eP^TdVf>P+31xE!_;eVyJb1JVV*>y9Z&6MXl_~{N~A%#-J7e-Y!Do<|ohaqGv(5D%u6e&5~NC*tS3V zxe2yFky0$A^O)EI7GMKUWaWl4dcR&F-hs?{qfYuc73m~Q>n}?9NEV7G%-b%QH{M5L zSuTo(c{S6WV%skcv$wXQ`_D{)>4O5mZw9MjsNjs$Ctg`)S>m}+26s`-K4)K@Sx53& z2@rbU41oPNx6ftR391VT@N`d+g#=VGh+ja{+LMv=Tt!pyvYQN;R@;Ls;_mG286<&~ z!kYf10UaAJFY)EPmXull%jPO=LF}C?huYrvcjlMb{2FP>?>p{ezodGxgZnK*FQ7dT z!4RhbmKy+p&t%|Uw-2cqTSD2ccgsx(93;9;wmSazqm*>U+LQP6nQ|PShZ5*s$o1e= z?h=vOu*TB8Zh1sR-bnA1^7(RU5v|4Q7>)y=8O_4uujN9g18oZLri30T0z#>VpWgv(;QA+-X8g+EC}QH+|7=XwMe zJ62d0Tz^x-LW;qvXQ7R#>|o^4gt`)>fU{80G-M+DL~FyLI%G2#{&kxFiWn4gq7r8k z!g|OCCTlHt(-(3-bi#sc-(Q5|O z^w1ms<0+iCP0cIzs?2Nf0^1N(_&Pu2agnBdzbc)2pzq$?AAYW&DJ*v%;RQ=b}~?$B?v;Yzo@G)XBDdTpbr;bz~EF4E|pZn zt^98vlb4jvrA$GOYC$LbLpylp`S+z)4*s};Dl{yH@1P1pEsJ2?($I@3L(5agTx2W> z?Vc7A6!u94+SM)t2c4q&B>E$qhjTU6E)y5<3>7H4k1Dnqxb}iGGHw(yf&0?$`3KharUm|EgTsL4p=!@EIK*PU)0# z=-3={tN>#DyD~Lv^w%`q>Wcf2{hL$czX19rQi;>g>Mj){^&OD2iUUSoWRj|*?s z;lY0=jcw?0*$%~JIMuWm9ilRuO#vKm>yT;hP;Wl$+ikPj_$(uHm;645vGhF3H*@HC z5+-wKWV1bgC!n!pJXZ9y_%#)6N9|AI4Z6ePyKj>F#)g<#rr145mi3#$ z2>qXBC&&+B{2V`iZ99EtiTZ!VX&OYarfVFZ$N{Wx!QbLEm+EdtZueWN7du9S1*6pA zOPaFNeUyq*q{!Z0e{tO^Pweub?L0;#LrU}Q@*J|~J>FL5)Xv&-pp38vUL?@`z!~7o4&cBmwE~{y1FGCsOFoU@7xf-0n$pJelG~q+|2lF^N z|6odEF(vNN(XdW|&PZJJpAG^i;Glp%ruP#qc`>~C(ehO#NqS2B8FrG6>TmqUXCo{+ zA+h))ZgP?TXI_;-cLC}n7-nuA(Ez*P*KEp+(bWF6zxtcEwFurD=x;%;fcgc_e~w+n zQr~999z5T_8;Mjb7siD@oc$8>`ik3{e;D^(pJ@uW&u?-U5a;`NB~j2I#zz<2m`^I! zm&TO#3FHZ@GFbI^EinAkftpO8-x7ZFyrAyVl$5BAmxbpTBd^0y2-OxiJ1(C#x1=`Yj;4$XjZd`gB1*y{ zl~fUd?cOEg>q`hY;c6%`K#%^0o(>jVsrOd-14$14>8Z?B(yc}|h6Lpa!l?pEbeMnj zTRoWJ9P$0yZnLuwmm`J&zCK^8 zUf}XzJeZH1HOpwdOsw|K z0ebh~Dg>sR3=qPku(WXZyzB1QhcNzck~6(-gp(_JN*gs>w!XV66^Ath=^~iqhE0g! zIdcuRtn?u6<3qOE(^38tnIqyVr_?b6>EMv*F*fYc07a-M?5j9+(=X~EM3fYPYp&xf+`!dU08 zu&Eh^Z?Nrf7YqkpQtNWxIW7iYptSW!=L9+ap+y+s9YMv>T=>{DKoV$4UB2oBb8Jk8 zFTCapI(bT+w~{dkIjupHqyK&_VBq|s-F3a**tXZjYetXMT%F4*>`@iWyyG5lrJsNZ z`OvaQycvj32st_&v%oDCw7_KxNRnjq**%u`IN-Ek?;SqIL>f$~-D*zF-)znc&)@vP zbdl(y$1hApTWT^u4_aWk(|ZSA)9#bHl>>IUy3()N)0#)T)t&hiXK+0I_lEpv!dOgS zXz*s+5zPOoOkS&@uIEO_?`ap{b5gG4bOJG(^qa!K*M0y<8bTpUwqK#3PFJu9S;$$X z7e3A@mNR#fluh?mgafrMf?=aEoycIgG*C%@VI^HOfmhi-A0)FX(EA&Dc^b9rk1UG? zbkT`sAA5%VU1F#nRDIELWbvtabba)tFa<0D>sq0R3M&*1Kyvv0R! zF~yij`{yYbGhT3Ez4^>3Hy09Lr-@hRPs-Au+#Y?+HRV}fLnkOJN|^eZ!`)OdvJw%S z*qVo>KrZc{K>c*}vxzT4wAB4KCgUVBIzypJS+U)9g8rJ6p~?X#3K{V#j2iMtbV+fp zI^KZT{=e^Oh-P01rqGebVb=N5OUhd@)gY63cmDW!a+3IlT@if1**W^~9Mp)%k+>_n z=oZ3~MWk7j*U$g>%wGX>JJR&|w7LCdOJx#m#1H8tYi+2ZJGRg>;;}=3}GlUP{BlcW+_ydQrMdTfNlyy6~Le}|Bq z@WWOo!b)5!3;RPM`bDq>`P!#JsYGro2eU%v_05`Tujdr=D%)->A&HqZAuif}BPGz2 zR-?mQ^CuxYvB+p`%Hv?s0-uh9G{3~rTi#`%#%yw@bj90pH(a`%RiDYm31)_*QXvVU z^bhQFr=b#jXt^nD?L;TVuqTNaobSA;4`NMyBf9TIQI11=g&C zL#`IgqTxI|;U=X|w(cp-3xjgu{kJ}{$H+g2^XBBo0Isb5`G_=U@r`TNp)YE)v59as znu2WL7~~umBbXh;nSKSuR%@nPEJxDr}Z?raX- zbba~PALWgDKEt@9U`3DVrPahC5p`W5WnoR96xkR|w%b$pzQ%*L|FFiL{Fo%yf(^Xz zOo^f-YQM73yDQ7)Iq66bO4)o1{TkgH)Q4P~;hNUseNK&u)in4}drA3>4;^E=@19ehi zh|SIRG|SMS8;uvx{?`W3!QzfGZR`s8+U+^yq9HE!wJm8QMd=@oHq!0Qz1ZpQl3#uc zals7?O(yzITN$E96bI1Eor$OaawiOjpXK#G6efVll@zy;7Jh**XxdXI9fGy$cBQWc zOU4T!cOrzb7(l6irP_D26#a>);@D zHo?Gdwea1eizc`-2#gL-<)EUU7|84>+Y*6j6AmA(=Q%vr2aI_k2)t7KE;&k zZ$_06#zCsmE2P>|_~bk+00f5;mM-v=h_y9X^?hA4z#vLn2~^VW=<|f3i#fYXBdTsR z21MuwSVnN(`ad!u%>5e66$~sJ*rGS)WJKhW);p8Svi>T~VI6AWV9KISRl-|Nd4(7w zR})f3c*({Rk{g3-YpN+;>X*nJ@E}dQ96K*c0_NI+Yj7{yoGD#XAeo<5ef-6(+S=oA zMA(Aqq1yWjyFWbF*Vko!M`=K>VCwmvK}pE^1u=TKCR&T~>({hkg8R(o>89llVV2=>|r$5~RTrVPF4bV{Eb?dEh?{pZ1% z{DHcwZY$)ro`<3(C&*-pKeJ4dQsj4BA$~+--QIHhi#RBq;1G?vU5*-OI!n{rIC!vA z8`cF7`#;${Jh;VYbZY%gsna^F`ptZ>k6&}NUF#eD!7KpMAD_vDBs5JKMlBb!NRo3Z z9etkTAK%_1cjpo!SDi%WZ%X^dLfxMk^O|uwKAFh>WIAQHl_`X zEs0qO)4!s<`I_y1x1J=uM-=LzX6-~)c7HZbxfO|1+6Qj^t%uZ1vQ{(@ig)mP0ttA9 zW|vDja=TFtKb{UikmHRvc3L|~ZuM6&qKf(8B)@$}Qm^+8=5y-YluFgX;Q}Y)+fJ%-B8x!T1TP~CR;!#tnY^VFeHG5C-|2cm7hW73Tn)Y_iVfF8Z;Y$Jf$e3S)C|#&5+?e! zZVP-BYexd?6;Nh^xUZ0O5}n>`zl*?||4L(aG;~`{1el?4Y`+wwBf)~YDGOJQD^&pj zrI~LwH;)|VON>$xhxSfkIfhz3V!}dMeS+A-#u+AmRVT)L#s$bZ=+Es7;dy@4^7MJ1 zSl#;vR62fp+D^RP*jrBI*H2O}3N_z5O+Y<#?y||jWQo0yXzSxB_4=5_@9iB0m;SI~ zfA#uUO#uoLF6KL142^PL1~^TG8)E@`bzV>zYrBa@?DNrke82&%ePzuRo)G_oQUnU6 zz7d;-$f3|*Bw9>IR-)*Qc2=2mygsnZug8T|nFs)WYnc9tcS##d6wW|MSDxOoaXEOY zk+2b`jk_xeCI{8RCY2#s>v24UQkoI;x(mmFmS8whHz8Gt63e0?7$wmn5v#Em4Dlb` z7A(d=X+$p0NH2Z;l^*_XKnxXQnC{^O_28;0;t}O`Bk`mG`Pn}f^EsaXmX^@V5y*oG z!Ae&hc@|vL5ox(L6T$9P6Hr(A1jQ|+VY>C-5~wKRIPnmn1vDLB|DN~5g;WK0T~2^tQb19u1Susr8e4rGiwB!F9iHVJ934c zjc5&PGeJMWwJ2F-b69RlN~?IhImyNv&f?x+lhLke3|gh|lX%L^?cvMyec`%u^$9%O zs0rVYcA@=_aO7)3y9G<=j#6A!>Mk$UR__i0AWXB;)}BMDBOS;JjX7%8=vm`)K_BT2 z;pVV4R)eV9?~>VR`4T}iHCX#Ic?ixWoq4Z>U4yLAvtRM;4=u5(?KvBc|sru(&ftYvxZ_tyB-|FNY{X$NU6az~r%9&s&qe3l+cg zxRqU?8F~Cb-SAL=jf|A9XbXv$z^RUKj&3`jSoCS(uw>2W4T;1MHIXS^ZpgL{*-R5aCvQ2BPQ^V)F_3kU7q!MkTu}MvqHVFsjP=do;Jp*M1rg? zg{5tvA3$N8gyz9Sw?xwSoA82`z$3&-j>_>(Ot~|z%7>*HQ9TCjUfe}x7Om4kV~mcf zQzWBCD3~X2`im~k7_j6RWV#$5f6nI)+3h8oycGY^CuCrT+34Yy&-Bapi&$JkWeMu3 zbG!tCbm_mQ7|MgJBC+3uq+r#uTiKT&7{X+A$j~V(;zFtnMpFcx|MJ8kuA0Uco01@J z8S}YHpRK;ub1%hrRiRaki2T7&3>8pb515B7z!=4`W6?pCVy(fbP!9|l>uh!^h3HP5{j<~Rd)RMZ4A{nF=DTSh`8n83avu= z_yXrpOCOEdGtz^Bq)>o%!zo2f+K~9BacCWJlzgJG|M(o?+MCXyJlZVzHJ=FYd4c+A z^I>lNY>!+-C+zW*-Cm5^G71%KBjN#SU%;c^J=7!?6pu8^vYNCgpwhdu-NHLk3^tJe zDb9q{_H;#ymJg{3{l-QTF5)0W0zZOGCUhFWZwe@<^wU>uIQkJ$60BYdOKR~4wS8J~ZF(~sFvTBqRB#y21RX&Jj=roI{HWky7U~JCfv|%mML~C5 zTh<{jDe;^aP}KG&5=-~Irv?@`iNeY%ZTO|-`*LA-e}3oMe!<{xwJlLU9sa!qS9=?~ zT%t0xSt_sPyQXuT(-aZjb0_ZTL*Nj@(mUcs@0~Xpy3(7X1#95r1F`kC!5SoLFg=3f z`Um#>|MB#dL2WhAwz#{yJH;u5;_gmyrxbVB;8xt-wYU{`_u|DRK=2^N?d7}oy*HCz z`I9r5vu*9Q*E-b=e0C+s4P+3c^a~;U;zT?C9cy;np=cqMKNdpPt{$JMwRoXD(+j-M z%Dq`plvngD$BOTtLPg2JXxe-6ntzud{i%~T9HYoyYG*2~{L;VgT`Q%lxnMbZ*mi3WiQC--^m81Ah<}JhsXH zz28(BV8I<^-)B3Br3oD8RM&o96rv>ignH89xv3M!!|af(KNrpk zc`Mb6t1!{(yUe+^H=$BIsNjpx6(kaoe1$>@N$YYLI|`xG56VSn8712D@3%Mf{HxwR zw2(|8z#wEha&IQ({JHOH5%EX-W32@9RNKSA!1_2#+1(R)i-)`Oo@IuLEl`SU<=jD8 zEt;4hj^;|p_ov_S@%bRq*~yvKO(kOfPjM`7XoS!+KRzkmHwrh{`XQq6M+&oKDlBW* ze7hHqU%b7b;#7t!Bi|{mxDK>KI%;4CzLS~SXd+YG3rvO8ATmSM~d06qJ33w=Z%UP}}P9 zB-;OhnUGwNA`Qs{2vMn28a$Ttu~x1sS_J{FM-o^%b6-6IifaX!(LM)_v3{^|7LFx{ ziezd5D8vg^5ECIQjh4o@k}e|1t_zBDGC|rbAf( zrY*SkML{Tlb2KfjyICC@XoXD_^OZr)JXZ;phJ}XfyvoVk#*1+~mw==bm55m$HiH+K zB&yY)vO70*a~1K%`zXvr`}`c8&d&H5PksSuE(tDw=-1+`sY-9S22sLaa$#fz#e8d3 zycVe*ln(S8Glqkr7}B3mOi{!0vN zqQ5g#5Lll=kIqgEI5#zfl0XvLu>cjRbmsqsGmE`Kz)BenB2Y6&=m{LyZD4xB7Z!$( zO_5Yu1bTI^FYrUNc^~?1k1%H#_OHHQ(WWXG9ndtES&TQW$! zVpL1p4Vp)%fsDqbow_3^1Mf|a*MBFi0`^sz?*|h^ULGE2l)dvYQ>Yvemd$w88>Iq< zgtnib`u5iRF0B@OFn1r{Id7J%mC0nLO_~xtz&@;JeQu19f?akWp2d&!sopX`R0ZW&yT%N2PX-+=NsqS|o zlYTs{+INFjy*r>z_#cCR@)B#;bp=7ha&ML#J|wHGCB+kDY>`i}#(KstF*YK;iht%1 z%XP(2%HfO08$*a9$a@{3%4M)6wch{ zgt?Q8AdQ+PX9~o{(Pi{f3a`Qz6_RcId@xkJhxrcs;_dA7bUox*6g+fG zmqfS(FCapmvtKz;)8-k*4`tQv12bqek4 zj@p_Yl1<$d)h`qI3Oh_~uEl3HrKx_=-~9O*nBSBhu9ww@tTXQ)D{Ew}3=4wJbJ`fI z3OJi$XoWut`uX#>5yv)O#AEaWcmD^%B>BMsVM(YDHwg7<8U<@D#{`RNiKbKZ%Q_6G zkGS+fWj@1i934Al0>8+Dy_;fAP9?dFpB{;bMAnET4Ut<<EPn~ zAB12yLKWbuG|o@>>>Ynz?;9(XQv?ko389g6B}T;^|2$_!vo55Tx7JOhzKDTTs;b*) z%=9aLZlv04TxBo)!Z&9|GrW@4ez^pE^d35v2!;2W8t}rx=6KV{l*`uFRE^`w0A%Vb z!)OJI$vrdA^KDhUic$pwCn@TP$Yfr=a|?#VT)-?zG850I>3@w8SZXQ^d{=ReA0(tk zN1p{B7Y)~{3g5mf*B1oPyGcP>&(u!SeQKT7CJ2m4`DCTAIUHJ@y?)yEU<`@ ziUjl$SlUWb&A9V3HG@~OOAUWqzDgUuz0@D}-{&3VWb8drlV1Afa>hCvIg#A9k!wPL zfThoT*V%oqw5|;MjgSk+646I4NA^&l3fJ5PRwb`=c?|3JKi{UA+qGs7o=C6X$-_zX zUadtw6GG_)9uyrv22wf(c@+51l1w*Pzpp_!f;TbEYaiz-_fFd~Rc%qJArbJm zdW}cC-Q~Xd?`u7D^rY+tcFMEJ?R$QdJbGTfgZ6iNtDC(xquCpJWvEnOrfh-DVRf6xBqrrwiGb0e z+h6&E*_`URJ~uGicj>L&cWG8Yok0$;=-;VOQqSuuj;*0>Sn`A0&|8fJ2$NHv)mLyM z8pvITCD)gKequMz$}z0wBJg?i=wBSJAf=qmmU^`rnTGP|S8oIY$Uk#h%)pI$hJ+iJ zgOu9R?1fLNRQ>+3_&RDMj`=2$D#!x=(ShwXID+XzFf*3TzDJzOCld~ z7($#mcIP%-1u<)Orft3ixT@(MZ};SMxNINUr1X8Wwvc-`59j>_u5$~ATj^+rZmFFv^)b*wxfhh6Larm^3?L%>I;5s#VUdnI!`$6^_$ud6j|*P z1iZAF2CIy~)ffHmK4UG61lk|ZR5%d6dFY=I&VS)V(8gmH&BITUvp!nzpSIDV`;AQFpm;9o(;qtho4!Qjv$i==={5+eg zz#tP6^J)y!MzDa>K*7RchUY_TaGmbVC<%YCkjdo}^1blereJe;F)RrPy~ zJv^tyD>`*Z&E5JPI|zT5v%xSgo5*;$+PSv5gtF@N9@wBBe% zTy?8BSdQhgE^~ejvb3r(y=*%CcmHqS7l%;(EFYH4|57>;c2J&FvZ}iOGvH49_xr&Y zGH*x11vdmACLQEmrQgIk0NoS@8& zWezG3(%00`czpHZEQ5lg0UaSfPU@7ILJUf()h=>k&$YnM(VjZ`noJ{**`5pVdi1m7 z#L_Bx?!iy&;@AtmNQUvHvc7q(beAOd|AE=nlpibuxlx* zuwf$QjwMAy_9Pkl&BA!o8GKGF=9cM5UWzMj?v>jwDkq9$b?EIlC1^rcswB!wcGz2A8B+d)Ni=W-zm_Y#vMBP3gj z7AdIV>#GrqMT&*$iIH8XT#6LY&*2z{B>Tp;~1&B#A)n#8Vvnc>O zAFR%2Y3k8{K{Wk~Xm15RAS2Z?gG(ZDs>3_~dmSDbH$qXP836rX2dWN|?J9PA>G}HB z=%69TahPlFU(7xmeV<~4u_WGuW+b|WMky&G`qYwP&P;ny{<)i3KurYI2fjQvwPsiX^7cT)onus(p1=&teq(y_yY~fNtmX zNFMk)!O`RdLPet1_1POSygthDJ|^8Mci0gRvF9{vYFT%}1n)?T`S!XvV=DeQ{*>}GfQ#|b@Ts3DQA9j&p;)Rtz((0#+>VC#* zHgyF?Yw%$ca;niih9yIb?h0Q-oEW+75wcjAQib{Q#j-f2Hl7It*rm~ z#In(K7a#(I2n_)z_LBPw_T6-bPZJ>>P?(#ua4&C-AafN8JbhZ>7{2pS+j z_leQ)W5DTpDc$I?SFlK}?;8>|1bc6+2sJMvZIO|sC#d27x!_YD+-)c97b&AjWc}*H z&V=5pNLHRo12GC{2s=6=gU3Aer5}kMRS%)UcDMXohE?Z8(CwH+1ycHuT-NmoTs3O> zF}&H$nR)#7U!xvZQRr1bZ&M$zH4{3kCk)n-_@Xl;p~|=eRwF8Gf6q7oTv>+cAU3vu z_k-6k>HegduH^rG48_D0l*P02yg-+q`HKw^KgCHGv=;3y&kMDSbCq4g32WRO&TIcS!WkKv1`0b`FMcPNQDF_(&Dh?^cWk1bjH4{9Yn z^oW;h>Tne^Q&I)Zn#;L~z?wf_o0eOF^Tmj4^W$|yG@p@a5-JfL?;5gJvbJq&BS;ux zaBX}m_rpjiTc6(k_E7#3O(;y@0|*uq5On_E0v!w~&|#d{LVduj!bPJSasgDEBZzC1 zjy6}X$ZvQdI37!}1f9T;@e`79S&M-$DU~>V%MB&*c#ucsEZ?Uu!6rIdIXpR6k&}`8 z$_huuLX3fj7az9tmk+tMaF%NrK?BaGia8CB2AE_{S~CJ|$%`_MG%hdR#my@h%(~bA zPJ>E#$c50EO6}Z_?60px>QGxdtZ&gm-ylt|l2nzv2t$VxhmPwYiKPg)^0J!TkAI`} z&ksjiI4Etwx_11T9hH#1NMMI||BX^nX&u!Yss$nX$96Fqdhhq)mVAV-F)>}975)cZ zh>3Nwd0(Ih^^i(wqkmFg--G^kyl}!@mJV9c@SDRq<0HuP(K`F`?bAm(>=gWPG_A$c zKsx%AJ-4pY7jn7cdHHm7;eB@(VC-On(`Xwn=CDVqJG;LEt;E5wvy7I`(Z;j((b=UY`_$Z-A9;PaBC7EFeluSv;z8#8_Bic!SK+{%Bf$XA$>de1hM#K z6Sok?^gqlwIGP5=v>6R;&-ks~{gav8f)Ar*G#s;rbG{?524+?+Ne^{PACS0_1-g8> zt7d1IUTPL}(Gwfr8y}ee#Z9^KBvrxOjEx2z# z%j!Y1U~ZS+leR!3z00SSFa>rruVU9!>t`o z+R2GXm^yR3yUSVjM4lJh{Jv#WyFFuGaN@%IQAc9wu3sh-^|$O;TD?}Gp-xtUc})=Y z6arg6(v^nz01u=c@3{K?V_<@95um8TFb7t1+6Y&tsq5 z_>%NCDLYVrSl2QPmVKxWV^lrRLDGPJez!ukRY2VESL}Lo7}FhP5*A!EGKNu9Bg~c1Uo>5ifnEwlqJ5r$7slj za1`Q`x|$>TuQ%}Pw*Z8Lejg9+XBXP)Oq-qvk)>@+Mh4rbU^@s)h{TqE1wt?8i52$= z9Mc<6@_}~4BV=mc4k4Q>&iy?ipvjuM=X#HI{I>eJm8|z0gxnm+$@}1xS^5}%{_q}$ z1B0l43abDwo*S@8E+E1?(A=FR{Stg=)!13beIT-P%u4{eY=(7rko!A2Ev0!3A(;r zi$UF{%{I=->67bN3OvPH!L9&~ z7n$P})Pl=+4o#P5i<|QcJC^yraUU!-|2`b&Up*9|qeq9-PRxCJKXqT%BENz7BHnnt z26K2T<3IryjUO-171kRas9w4hh8uGsO2UkJJrQLUc}jS8#{LH`zNq2i0H>Z6`onEU zwU|YA(Ui_3P5u@T@o(XKv?^`B*nifmc+xGO3WG$8P(HlKBr0P-ji&Cls0Qr66oW-+kU;52I01C|aC;iNZxJ+;A*> zaaOJ0S)D0!bd%Gx+!35BVfr-5Eqy4|4%Tbi!jQJ<}j?!D(*{@c`!08sZ? z5vb!ff94frl!IK#P#M-%mi;mvwRfxKh@ly1TfhyMd};8VX$zW)!( zj@VU@nUKi2Og3F~)F6&aRZxrqoU)>eY9CRLcN+RheMH!t7hUPfR7Po^l1=DJNb{`q zLCc6oOU*Ry2$rH`qS$^=3QA1;o;zioHJ0K0cOozIY^Z$4aLl(FlX_o}qjmU(2-jD6 zgS$~9|B0CZ>VkoYP!X@a~@JD#LbwM?gN2n|+C{5z}66}8AZ1(}7VMLLzW@j#k zNQ=&x2;O85T@o=&&JBT!6#aiFL%`CgAK3|LbGOwXd|C40j)Q*`XcMEqQ*WKZ_Xj9l(kQ9 zL^B^2X{i19K&80XBR&y20P8T-J!K&XuZJRW} zIk)~gHNjkpOkb84Pgt1tpkF?ooBX>~_DxT??pMXS^XP(*fv0^r(P)}qMtdC`oXsyN zmM~;F+1;-gHowMy@JP8x?84JcMr5RFB$kuxct!8y?YJ>TVh>s;YbBL4>&+b=95PZ{ z{`eD-u@)kQS`N%L?5X%V*I=)gKI2F8{x6@;^Y>S4i>usgQD|$rp9V1Nd`?!N-@>Ul z4s9r^9^p*>b_?jWyiUaend+dn+x=h?RZzV^Pq9+NM@ zI{8|N6FZM|LPM63gy6Sa{o7?*h`r<5HxWbhBjZDiABF>Iw6BjB@}q~7ImTlPx2so6 za}U7~!KuMEgn=O|*qd*Ex>1p)&y~ zz?U%+)6=Ylf?!q;0)r18DhhxibQ-S-9~y5btn80ZxK4?bph&|~>1>ea7m;Pm_OZN{ zzy0|WLJRNLnqUw!4{M->6bl57<{bwZAQul29h5$|^F?R~6qm8jReYT58+$xe@h)4v zOgg=d$cVg;be&wX@A))=^HUex?;;FulNTSWA9{1$RI+rkZXw(h|6?#zQ` z+xES_jro^d@XiBwUBCnj!A$L0_1U%6{dLjYYgla;=AIzTm+#}1ZKA?|O5Fi!JU;@6)_P8Bqua{(1yjOrXGaZ)-p_s$EM|n4e zH~hm?dHZ7);?@Caw(Gs@%L6B}MUwA3NgXMqP$U8QJ8rBu-O?)?Uc64GL>noOx{@~N zJI@BWP88h}H__4&lU? z9g%#fG*BDs3jd5wMh@$9jImfGs4%vY&{Gx2d*H45z4-Znb7d{Iu{U8oGX_*66LJ^0 zJQ*=0y_kv_C2>a0gHsyxyVwk%t{1ZM_lYj?cexy@p_wz>us&7z0DdA7=}m|Dx?T3M zku5B!ZoJ9ng>N#=e^`7McMN$j39e2yxm=FfSvZnYNi0U;T``!p)Z>yD<^%~Y**4Py zwo>bxoC^eq=SNEBH9IL5;9cRMAs@kg)|D`&{i4)bA!n9%oQl2qEJbJ%$iM&+fWwW# zvk#*>Q_y#hzVi~5)=3Te(t6bwO2t13$uY*!*m~ØN97cUNU)|O+#`-iL@_YkRA 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