diff --git a/src/api/base/factory.js b/src/api/base/factory.js index d9ed54d..6097eb0 100644 --- a/src/api/base/factory.js +++ b/src/api/base/factory.js @@ -11,8 +11,13 @@ export function listFactory(query) { // 查询工厂下拉框列表 export function findFactoryList(query) { + return listAllFactory(query) +} + +// 查询工厂全量列表(不分页) +export function listAllFactory(query) { return request({ - url: '/base/factory/findFactoryList', + url: '/base/factory/all', method: 'get', params: query }) diff --git a/src/api/base/materialInfo.js b/src/api/base/materialInfo.js index 52e4da3..34a759d 100644 --- a/src/api/base/materialInfo.js +++ b/src/api/base/materialInfo.js @@ -9,6 +9,15 @@ export function listMaterialInfo(query) { }) } +// 查询全部物料信息列表 +export function listAllMaterialInfo(query) { + return request({ + url: '/base/materialInfo/all', + method: 'get', + params: query + }) +} + // 查询物料信息详细 export function getMaterialInfo(objId) { return request({ diff --git a/src/api/base/orderInfo.js b/src/api/base/orderInfo.js index ca250d1..aefe528 100644 --- a/src/api/base/orderInfo.js +++ b/src/api/base/orderInfo.js @@ -44,7 +44,6 @@ export function releaseOrderPlan(data) { }) } - // 删除工单信息 export function delOrderInfo(objId) { return request({ @@ -139,3 +138,21 @@ export function batchCompleteProduction(data) { data: data }) } + +// PDA按物料关键字查询订单 +export function listPdaOrdersByMaterial(keyword) { + return request({ + url: '/dms/mobile/order/listByMaterial', + method: 'get', + params: { keyword } + }) +} + +// PDA维护订单状态与数量 +export function updatePdaOrderStatusAndQty(data) { + return request({ + url: '/dms/mobile/order/updateStatusAndQty', + method: 'post', + data: data + }) +} diff --git a/src/api/production/baseBomInfo.js b/src/api/production/baseBomInfo.js index b192410..a653451 100644 --- a/src/api/production/baseBomInfo.js +++ b/src/api/production/baseBomInfo.js @@ -10,14 +10,15 @@ export function listBaseBomInfo(query) { } // 自动同步生产BOM -export function addAutomaticSynchronizationBOM(query) { - return request({ - url: '/production/baseBomInfo/addAutomaticSynchronizationBOM', - method: 'get', - params: query, - timeout: 60000 - }) -} +// 当前业务已经改为全部手动维护树形BOM,这里注释掉历史同步接口定义,避免前端继续调用。 +// export function addAutomaticSynchronizationBOM(query) { +// return request({ +// url: '/production/baseBomInfo/addAutomaticSynchronizationBOM', +// method: 'get', +// params: query, +// timeout: 60000 +// }) +// } // 查询生产BOM列表 export function listTreeBaseBomInfo(query) { return request({ diff --git a/src/views/base/materialInfo/index.vue b/src/views/base/materialInfo/index.vue index 6f0d774..7bcf6d6 100644 --- a/src/views/base/materialInfo/index.vue +++ b/src/views/base/materialInfo/index.vue @@ -128,6 +128,16 @@ v-hasPermi="['base:materialInfo:export']" >导出 + + 导入 + @@ -305,6 +315,47 @@ 取 消 + + + + +
将文件拖到此处,或点击上传
+
+
+ 更新已存在物料 +
+
+ + + +
+
仅允许导入xls、xlsx格式文件。
+ 下载模板 +
+
+ +
@@ -312,6 +363,7 @@ import { listMaterialInfo, getMaterialInfo, delMaterialInfo, addMaterialInfo, updateMaterialInfo } from "@/api/base/materialInfo"; import { findFactoryList } from "@/api/base/factory"; import { findProductLineList } from "@/api/base/productLine"; +import { getToken } from "@/utils/auth"; export default { name: "MaterialInfo", @@ -389,12 +441,26 @@ export default { factoryList: [], // 产线选项 productLineList: [], + // 物料导入参数 + upload: { + open: false, + title: "", + isUploading: false, + updateSupport: false, + plantCode: null, + headers: { Authorization: "Bearer " + getToken() }, + url: process.env.VUE_APP_BASE_API + "/base/materialInfo/importData" + } }; }, created() { this.getList(); findFactoryList().then(response => { this.factoryList = response.data; + if (!this.upload.plantCode && this.factoryList.length > 0) { + const defaultFactory = this.factoryList.find(item => item.factoryCode === '2010') || this.factoryList[0]; + this.upload.plantCode = defaultFactory.factoryCode; + } }); findProductLineList().then(response => { this.productLineList = response.data; @@ -507,6 +573,46 @@ export default { this.download('base/materialInfo/export', { ...this.queryParams }, `materialInfo_${new Date().getTime()}.xlsx`) + }, + /** 导入按钮操作 */ + handleImport() { + this.upload.title = "物料导入"; + this.upload.open = true; + }, + /** 下载模板 */ + importTemplate() { + this.download('base/materialInfo/importTemplate', {}, `materialInfo_template_${new Date().getTime()}.xlsx`) + }, + // 文件上传中处理 + handleFileUploadProgress() { + this.upload.isUploading = true; + }, + // 文件上传成功处理 + handleFileSuccess(response) { + this.upload.open = false; + this.upload.isUploading = false; + this.$refs.upload.clearFiles(); + if (response.code === 200) { + this.$alert("
" + response.msg + "
", "导入结果", { dangerouslyUseHTMLString: true }); + this.getList(); + } else { + this.$modal.msgError(response.msg || "导入失败"); + } + }, + // 文件上传失败处理 + handleFileError() { + this.upload.open = false; + this.upload.isUploading = false; + this.$refs.upload.clearFiles(); + this.$modal.msgError("文件上传失败,请重试"); + }, + // 提交上传文件 + submitFileForm() { + if (!this.upload.plantCode) { + this.$modal.msgWarning("请选择所属工厂"); + return; + } + this.$refs.upload.submit(); } } }; diff --git a/src/views/base/orderBomInfo/childIndex.vue b/src/views/base/orderBomInfo/childIndex.vue index db88fb1..81a4708 100644 --- a/src/views/base/orderBomInfo/childIndex.vue +++ b/src/views/base/orderBomInfo/childIndex.vue @@ -131,13 +131,26 @@ - + + + - + - + - + @@ -187,6 +200,7 @@ import { updateOrderBomInfo, findOrderBomList } from '@/api/base/orderBomInfo' +import { listAllMaterialInfo } from '@/api/base/materialInfo' import Treeselect from "@riophae/vue-treeselect"; import "@riophae/vue-treeselect/dist/vue-treeselect.css"; @@ -206,6 +220,8 @@ export default { orderBomInfoList: [], // 订单BOM树选项 orderBomInfoOptions: [], + // 物料下拉选项 + materialOptions: [], // 弹出层标题 title: "", // 是否显示弹出层 @@ -242,7 +258,7 @@ export default { }, created() { this.queryParams.ancestors = this.$route.params && this.$route.params.materialCode; - console.log( this.queryParams.ancestors) + this.loadMaterialOptions(); this.getList(); }, methods: { @@ -274,6 +290,30 @@ export default { this.orderBomInfoOptions.push(data); }); }, + /** 加载全部物料下拉数据 */ + loadMaterialOptions() { + listAllMaterialInfo({ isFlag: 0 }).then(response => { + this.materialOptions = response.data || []; + }); + }, + /** 选择物料后自动回填展示字段 */ + handleMaterialChange(materialCode) { + const selectedMaterial = this.materialOptions.find(item => item.materialCode === materialCode); + if (!selectedMaterial) { + this.form.materialName = null; + this.form.materialType = null; + this.form.factoryCode = null; + return; + } + // 物料名称和分类统一以物料主数据为准,避免手工录入后树列表左连接查不到展示字段。 + this.form.materialName = selectedMaterial.materialName; + this.form.materialType = selectedMaterial.materialSubclass; + this.form.factoryCode = selectedMaterial.plantCode; + if (!this.form.bomCode) { + // 手工维护场景下默认用物料编码作为BOM编号,避免新增时出现空BOM编号。 + this.form.bomCode = selectedMaterial.materialCode; + } + }, // 取消按钮 cancel() { this.open = false; @@ -345,6 +385,7 @@ export default { } getOrderBomInfo(row.objId).then(response => { this.form = response.data; + this.handleMaterialChange(this.form.materialCode); this.open = true; this.title = "修改订单BOM"; }); diff --git a/src/views/base/orderInfo/execution.vue b/src/views/base/orderInfo/execution.vue index f527fc7..73595a4 100644 --- a/src/views/base/orderInfo/execution.vue +++ b/src/views/base/orderInfo/execution.vue @@ -1,7 +1,7 @@ diff --git a/src/views/base/orderInfo/index.vue b/src/views/base/orderInfo/index.vue index fa1204b..0bb6de5 100644 --- a/src/views/base/orderInfo/index.vue +++ b/src/views/base/orderInfo/index.vue @@ -249,7 +249,7 @@ /> - + @@ -271,14 +271,16 @@ - + + 选择物料 + - + + + + - - - @@ -370,6 +372,12 @@ + + @@ -384,9 +392,13 @@ import { } from '@/api/base/orderInfo' import { findProductLineList } from '@/api/base/productLine' import { addSAPCalendar } from '@/api/production/calendarInfo' +import MaterialSelector from '@/components/MaterialSelector' export default { name: 'OrderInfo', + components: { + MaterialSelector + }, dicts: ['order_status', 'order_type', 'is_flag', 'is_release'], data() { return { @@ -441,7 +453,20 @@ export default { // 表单参数 form: {}, // 表单校验 - rules: {}, + rules: { + orderCode: [ + { required: true, message: 'SAP计划编号不能为空', trigger: 'blur' } + ], + workCenterCode: [ + { required: true, message: '请选择工作中心', trigger: 'change' } + ], + materialCode: [ + { required: true, message: '请选择物料', trigger: 'change' } + ], + orderAmount: [ + { required: true, message: '请输入订单计划数量', trigger: 'blur' } + ] + }, columns: [ { key: 0, label: `主键标识`, visible: false }, { key: 1, label: `SAP计划编号`, visible: true }, @@ -467,7 +492,10 @@ export default { { key: 21, label: `工作中心编号`, visible: true } ], // 产线选项 - productLineList: [] + productLineList: [], + materialSelector: { + open: false + } } }, created() { @@ -569,6 +597,17 @@ export default { this.title = '修改工单信息' }) }, + openMaterialSelector() { + this.materialSelector.open = true + }, + handleMaterialSelected(material) { + this.form.materialCode = material.materialCode + this.form.materialName = material.materialName + this.form.matkl = material.materialMatkl + if (this.$refs.form) { + this.$refs.form.clearValidate(['materialCode']) + } + }, /** 修改按钮操作 */ ReplaceProductionLine(row) { this.reset() diff --git a/src/views/baseDeviceParamVal/trace/index.vue b/src/views/baseDeviceParamVal/trace/index.vue index efdb1f6..52fc95b 100644 --- a/src/views/baseDeviceParamVal/trace/index.vue +++ b/src/views/baseDeviceParamVal/trace/index.vue @@ -1,318 +1,89 @@ diff --git a/src/views/dms/DmsBaseMaintStation/index.vue b/src/views/dms/DmsBaseMaintStation/index.vue index 8ed6e06..a6446b0 100644 --- a/src/views/dms/DmsBaseMaintStation/index.vue +++ b/src/views/dms/DmsBaseMaintStation/index.vue @@ -331,6 +331,7 @@ export default { createTime: null, updateBy: null, updateTime: null, + productIds: [], baseStationProjectList: [], }; this.resetForm("form"); @@ -385,15 +386,16 @@ export default { submitForm() { this.$refs["form"].validate(valid => { if (valid) { + const checkedProjectIds = this.getMenuAllCheckedKeys(); + // 显式传空数组给后端,保证“取消全部勾选”会清空关联关系,而不是落成 null。 + this.form.productIds = Array.isArray(checkedProjectIds) ? checkedProjectIds : []; if (this.form.maintStationId != null) { - this.form.productIds = this.getMenuAllCheckedKeys(); updateStation(this.form).then(response => { this.$modal.msgSuccess("修改成功"); this.open = false; this.getList(); }); } else { - this.form.productIds = this.getMenuAllCheckedKeys(); addStation(this.form).then(response => { this.$modal.msgSuccess("新增成功"); this.open = false; diff --git a/src/views/dms/dmsBillsMaintInstance/index.vue b/src/views/dms/dmsBillsMaintInstance/index.vue index 2890470..f100cd0 100644 --- a/src/views/dms/dmsBillsMaintInstance/index.vue +++ b/src/views/dms/dmsBillsMaintInstance/index.vue @@ -129,7 +129,6 @@ -