Browse Source

2026-03-18

Inventory Part和项目信息页面增加【获取编码】【编码详情】功能
master
fengyuan_yang 4 weeks ago
parent
commit
67ad1864f8
  1. 32
      src/views/modules/code/generation.vue
  2. 97
      src/views/modules/part/partInformation.vue
  3. 94
      src/views/modules/project/projectInfo/com_project_info_part.vue

32
src/views/modules/code/generation.vue

@ -8,6 +8,12 @@ import itemValue from "./item/itemValue.vue";
export default { export default {
name: "CodeGeneration", name: "CodeGeneration",
props: {
dialogMode: {
type: Boolean,
default: false
}
},
computed: { computed: {
itemValue() { itemValue() {
return itemValue return itemValue
@ -232,17 +238,23 @@ export default {
this.saveCodeLoading = true; this.saveCodeLoading = true;
saveDrawing(params).then(({data})=>{ saveDrawing(params).then(({data})=>{
if (data && data.code === 0){ if (data && data.code === 0){
this.$alert(`成功获取并保存了编码${this.searchModel.drawingNo}`, '提示', {
confirmButtonText: '确定',
});
Object.keys(this.searchModel).forEach(key => {
this.$set(this.searchModel, key, '')
})
for (let i = 0; i < this.codeItemDefs.length; i++) {
this.$set(this.codeItemValues, i, undefined)
if (this.dialogMode) {
this.saveCodeLoading = false;
const savedDrawingNo = this.searchModel.drawingNo;
this.$emit('code-saved', savedDrawingNo);
} else {
this.$alert(`成功获取并保存了编码${this.searchModel.drawingNo}`, '提示', {
confirmButtonText: '确定',
});
Object.keys(this.searchModel).forEach(key => {
this.$set(this.searchModel, key, '')
})
for (let i = 0; i < this.codeItemDefs.length; i++) {
this.$set(this.codeItemValues, i, undefined)
}
this.saveCodeLoading = false;
this.searchCodeItemDefs();
} }
this.saveCodeLoading = false;
this.searchCodeItemDefs();
}else { }else {
this.saveCodeLoading = false; this.saveCodeLoading = false;
this.$message.warning(data.msg) this.$message.warning(data.msg)

97
src/views/modules/part/partInformation.vue

@ -8,6 +8,9 @@
<el-form-item label="IFS物料编码"> <el-form-item label="IFS物料编码">
<el-input v-model="searchData.ifsPartNo" clearable style="width: 120px"></el-input> <el-input v-model="searchData.ifsPartNo" clearable style="width: 120px"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="编码">
<el-input v-model="searchData.drawingNo" clearable style="width: 120px"></el-input>
</el-form-item>
<el-form-item label="物料名称"> <el-form-item label="物料名称">
<el-input v-model="searchData.partDesc" clearable style="width: 210px"></el-input> <el-input v-model="searchData.partDesc" clearable style="width: 210px"></el-input>
</el-form-item> </el-form-item>
@ -134,6 +137,7 @@
<el-dropdown-item v-if="scope.row.ifHasPeifang === 'Y'" @click.native="toMenu('Recipe', scope.row)">配方BOM</el-dropdown-item> <el-dropdown-item v-if="scope.row.ifHasPeifang === 'Y'" @click.native="toMenu('Recipe', scope.row)">配方BOM</el-dropdown-item>
<el-dropdown-item @click.native="toMenu('Routing', scope.row)">Routing</el-dropdown-item> <el-dropdown-item @click.native="toMenu('Routing', scope.row)">Routing</el-dropdown-item>
<el-dropdown-item v-if="scope.row.temporaryPartFlag === 'Y' && scope.row.status === 'N'" @click.native="toBecomeOfficialPartModal(scope.row)">转正式物料</el-dropdown-item> <el-dropdown-item v-if="scope.row.temporaryPartFlag === 'Y' && scope.row.status === 'N'" @click.native="toBecomeOfficialPartModal(scope.row)">转正式物料</el-dropdown-item>
<el-dropdown-item v-if="scope.row.drawingNo" @click.native="handlePartDrawingDetail(scope.row)">编码详情</el-dropdown-item>
</el-dropdown-menu> </el-dropdown-menu>
</el-dropdown> </el-dropdown>
</template> </template>
@ -165,6 +169,12 @@
<el-form-item label="物料名称 / Part Desc." prop="partDesc" :rules="rules.partDesc" style="margin-left: -10px"> <el-form-item label="物料名称 / Part Desc." prop="partDesc" :rules="rules.partDesc" style="margin-left: -10px">
<el-input v-model="modalData.partDesc" clearable style="width: 330px"></el-input> <el-input v-model="modalData.partDesc" clearable style="width: 330px"></el-input>
</el-form-item> </el-form-item>
<el-form-item v-if="modalData.flag === '2' && !copyFlag2" label="编码">
<el-input v-model="modalData.drawingNo" readonly style="width: 150px" placeholder="获取编码后填入"></el-input>
</el-form-item>
<el-form-item v-if="modalData.flag === '2' && !copyFlag2" :label="' '">
<el-button type="primary" @click="drawingNoDialogVisible = true">获取编码</el-button>
</el-form-item>
<el-form-item v-if="modalData.flag === '2' && !copyFlag2" :label="' '"> <el-form-item v-if="modalData.flag === '2' && !copyFlag2" :label="' '">
<el-button type="primary" @click="toCopyPartModal">Copy Part</el-button> <el-button type="primary" @click="toCopyPartModal">Copy Part</el-button>
</el-form-item> </el-form-item>
@ -1419,6 +1429,26 @@
<upload-file-list folder="Inventory Part" title="物料附件上传" :label="'物料编码:'" :no="partCurrentRow.partNo" :file-list.sync="fileList" :upload-dialog.sync="uploadDialog" path="/upload/test"></upload-file-list> <upload-file-list folder="Inventory Part" title="物料附件上传" :label="'物料编码:'" :no="partCurrentRow.partNo" :file-list.sync="fileList" :upload-dialog.sync="uploadDialog" path="/upload/test"></upload-file-list>
<filter-search :visible.sync="filterVisible" @search="queryByAnyField"></filter-search> <filter-search :visible.sync="filterVisible" @search="queryByAnyField"></filter-search>
<!-- 获取编码对话框 -->
<el-dialog title="获取编码" :close-on-click-modal="false" top="5vh" v-drag :visible.sync="drawingNoDialogVisible" width="1100px" @close="drawingNoDialogVisible = false">
<code-generation :dialog-mode="true" @code-saved="handleCodeGenerated"></code-generation>
</el-dialog>
<!-- 编码详情对话框 -->
<el-dialog title="编码详情" :close-on-click-modal="false" v-drag :visible.sync="partDrawingDetailDialogVisible" v-loading="partDrawingDetailLoading">
<el-table :data="partDrawingDetailList" height="400" border style="width: 100%">
<el-table-column prop="itemNo" header-align="center" width="140" align="right" label="序号"></el-table-column>
<el-table-column prop="itemDesc" header-align="center" width="140" align="left" label="描述"></el-table-column>
<el-table-column prop="itemName" header-align="center" width="140" align="left" label="元素名称"></el-table-column>
<el-table-column prop="itemType" show-overflow-tooltip header-align="center" align="left" label="类型"></el-table-column>
<el-table-column prop="itemLabel" show-overflow-tooltip header-align="center" align="left" label="选中项描述"></el-table-column>
<el-table-column prop="itemValue" show-overflow-tooltip header-align="center" align="left" label="选中项值"></el-table-column>
</el-table>
<el-footer style="height:30px;margin-top:10px;text-align:center">
<el-button type="primary" @click="partDrawingDetailDialogVisible = false">关闭</el-button>
</el-footer>
</el-dialog>
</div> </div>
</template> </template>
@ -1489,6 +1519,8 @@
import FilterSearch from "../../common/filterSearch.vue"; import FilterSearch from "../../common/filterSearch.vue";
import {masterPartSearchAny} from "../../../api/part/masterPartInformation"; import {masterPartSearchAny} from "../../../api/part/masterPartInformation";
import {partInformationSearchAny} from "../../../api/part/partInformation"; import {partInformationSearchAny} from "../../../api/part/partInformation";
import {searchDrawingDetailList} from "../../../api/code/codeDrawing";
import CodeGeneration from "../code/generation.vue";
export default { export default {
components: { components: {
FilterSearch, FilterSearch,
@ -1496,7 +1528,8 @@
UploadFileList, UploadFileList,
DictDataSelect, DictDataSelect,
Chooselist, Chooselist,
partUploadFile
partUploadFile,
CodeGeneration
}, },
watch: { watch: {
searchData: { searchData: {
@ -1603,7 +1636,8 @@
status: '', status: '',
ifsPartNo: '', ifsPartNo: '',
plmPartNo: '', plmPartNo: '',
partType: ''
partType: '',
drawingNo: ''
}, },
// //
loading: false, loading: false,
@ -1725,7 +1759,8 @@
manufacturingInfoFlag: false, // Manufacturing manufacturingInfoFlag: false, // Manufacturing
planningInfoFlag: false, // planning planningInfoFlag: false, // planning
partItemInfoFlag: false, // partItemInfoFlag: false, //
copyPartNo: ''
copyPartNo: '',
drawingNo: ''
}, },
revisionData: { revisionData: {
flag: '', flag: '',
@ -1882,6 +1917,22 @@
fixed: '', fixed: '',
columnWidth: 120 columnWidth: 120
}, },
{
userId: this.$store.state.user.name,
functionId: 104001,
serialNumber: '104001Table1DrawingNo',
tableId: '104001Table1',
tableName: '物料信息表',
columnProp: 'drawingNo',
headerAlign: 'center',
align: 'left',
columnLabel: '编码',
columnHidden: false,
columnImage: false,
status: true,
fixed: '',
columnWidth: 120
},
{ {
userId: this.$store.state.user.name, userId: this.$store.state.user.name,
functionId: 104001, functionId: 104001,
@ -3408,7 +3459,11 @@
filterVisible: false, filterVisible: false,
isFilterSearch: false, isFilterSearch: false,
filterSearchData: {}, filterSearchData: {},
copyFlag2: false
copyFlag2: false,
drawingNoDialogVisible: false,
partDrawingDetailList: [],
partDrawingDetailDialogVisible: false,
partDrawingDetailLoading: false
} }
}, },
@ -4111,7 +4166,8 @@
manufacturingInfoFlag: false, // Manufacturing manufacturingInfoFlag: false, // Manufacturing
planningInfoFlag: false, // planning planningInfoFlag: false, // planning
partItemInfoFlag: false, // partItemInfoFlag: false, //
copyPartNo: ''
copyPartNo: '',
drawingNo: ''
} }
this.partItemList = [] this.partItemList = []
this.inventoryPartTable = 'General' this.inventoryPartTable = 'General'
@ -4237,7 +4293,8 @@
manufacturingInfoFlag: false, // Manufacturing manufacturingInfoFlag: false, // Manufacturing
planningInfoFlag: false, // planning planningInfoFlag: false, // planning
partItemInfoFlag: false, // partItemInfoFlag: false, //
copyPartNo: ''
copyPartNo: '',
drawingNo: row.drawingNo || ''
} }
this.resetFlags() // this.resetFlags() //
this.setupWatchers() // this.setupWatchers() //
@ -4361,7 +4418,8 @@
manufacturingInfoFlag: false, // Manufacturing manufacturingInfoFlag: false, // Manufacturing
planningInfoFlag: false, // planning planningInfoFlag: false, // planning
partItemInfoFlag: false, // partItemInfoFlag: false, //
copyPartNo: ''
copyPartNo: '',
drawingNo: row.drawingNo || ''
} }
this.getPartCharacteristicList() this.getPartCharacteristicList()
this.inventoryPartTable = 'General' this.inventoryPartTable = 'General'
@ -4484,7 +4542,8 @@
manufacturingInfoFlag: false, // Manufacturing manufacturingInfoFlag: false, // Manufacturing
planningInfoFlag: false, // planning planningInfoFlag: false, // planning
partItemInfoFlag: false, // partItemInfoFlag: false, //
copyPartNo: ''
copyPartNo: '',
drawingNo: row.drawingNo || ''
} }
this.getPartCharacteristicList() this.getPartCharacteristicList()
// BOMrouting // BOMrouting
@ -6133,6 +6192,28 @@
this.isFilterSearch = true this.isFilterSearch = true
this.filterVisible = false this.filterVisible = false
}, },
handleCodeGenerated(drawingNo) {
this.modalData.drawingNo = drawingNo;
this.drawingNoDialogVisible = false;
},
handlePartDrawingDetail(row) {
this.partDrawingDetailLoading = true;
this.partDrawingDetailList = [];
this.partDrawingDetailDialogVisible = true;
searchDrawingDetailList({ drawingNo: row.drawingNo }).then(({data}) => {
if (data && data.code === 0) {
this.partDrawingDetailList = data.rows;
} else {
this.$message.warning(data.msg);
}
this.partDrawingDetailLoading = false;
}).catch((error) => {
this.$message.error(error);
this.partDrawingDetailLoading = false;
});
},
} }
} }
</script> </script>

94
src/views/modules/project/projectInfo/com_project_info_part.vue

@ -10,6 +10,9 @@
<el-form-item label="PLM物料编码"> <el-form-item label="PLM物料编码">
<el-input v-model="searchData.plmPartNo" clearable placeholder="请输入PLM物料编码" style="width: 140px"></el-input> <el-input v-model="searchData.plmPartNo" clearable placeholder="请输入PLM物料编码" style="width: 140px"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="编码">
<el-input v-model="searchData.drawingNo" clearable placeholder="请输入编码" style="width: 140px"></el-input>
</el-form-item>
<el-form-item label="物料名称"> <el-form-item label="物料名称">
<el-input v-model="searchData.partDesc" clearable placeholder="请输入物料名称" style="width: 140px"></el-input> <el-input v-model="searchData.partDesc" clearable placeholder="请输入物料名称" style="width: 140px"></el-input>
</el-form-item> </el-form-item>
@ -69,12 +72,13 @@
fixed="right" fixed="right"
header-align="center" header-align="center"
align="center" align="center"
width="100"
width="160"
label="操作"> label="操作">
<template slot-scope="scope"> <template slot-scope="scope">
<el-link style="cursor: pointer" @click="updateModal(scope.row)">编辑</el-link> <el-link style="cursor: pointer" @click="updateModal(scope.row)">编辑</el-link>
<el-link style="cursor: pointer" @click="deleteModal(scope.row)">删除</el-link> <el-link style="cursor: pointer" @click="deleteModal(scope.row)">删除</el-link>
<el-link style="cursor: pointer" @click="copyProjectPartModal(scope.row)">复制</el-link> <el-link style="cursor: pointer" @click="copyProjectPartModal(scope.row)">复制</el-link>
<el-link v-if="scope.row.drawingNo" style="cursor: pointer" @click="handlePartDrawingDetail(scope.row)">编码详情</el-link>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -95,20 +99,26 @@
<el-dialog :title="modalData.title" :close-on-click-modal="false" v-drag :visible.sync="modalFlag" @close="handleDialogClose" width="1000px"> <el-dialog :title="modalData.title" :close-on-click-modal="false" v-drag :visible.sync="modalFlag" @close="handleDialogClose" width="1000px">
<el-form :inline="true" label-position="top" :model="modalData" :rules="rules" style="margin-top: -5px;"> <el-form :inline="true" label-position="top" :model="modalData" :rules="rules" style="margin-top: -5px;">
<el-form-item label="Site"> <el-form-item label="Site">
<el-input v-model="modalData.site" disabled style="width: 60px"></el-input>
<el-input v-model="modalData.site" disabled style="width: 50px"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="物料编码 / Part No." prop="partNo" :rules="rules.partNo" style="margin-left: -10px"> <el-form-item label="物料编码 / Part No." prop="partNo" :rules="rules.partNo" style="margin-left: -10px">
<el-input v-model="modalData.partNo" disabled style="width: 128px"></el-input>
<el-input v-model="modalData.partNo" disabled style="width: 120px"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="物料名称 / Part Desc." prop="partDesc" :rules="rules.partDesc" style="margin-left: -10px"> <el-form-item label="物料名称 / Part Desc." prop="partDesc" :rules="rules.partDesc" style="margin-left: -10px">
<el-input v-model="modalData.partDesc" clearable style="width: 347px"></el-input>
<el-input v-model="modalData.partDesc" clearable style="width: 300px"></el-input>
</el-form-item>
<el-form-item v-if="modalData.flag === '2'" label="编码">
<el-input v-model="modalData.drawingNo" readonly style="width: 150px" placeholder="获取编码后填入"></el-input>
</el-form-item>
<el-form-item v-if="modalData.flag === '2'" :label="' '">
<el-button type="primary" @click="drawingNoDialogVisible = true">获取编码</el-button>
</el-form-item> </el-form-item>
<el-form-item label="客户料号" prop="customerPartNo" :rules="rules.customerPartNo"> <el-form-item label="客户料号" prop="customerPartNo" :rules="rules.customerPartNo">
<el-input v-model="modalData.customerPartNo" clearable style="width: 140px"></el-input>
<el-input v-model="modalData.customerPartNo" clearable style="width: 120px"></el-input>
</el-form-item> </el-form-item>
<el-form-item prop="buDesc" :rules="rules.buDesc"> <el-form-item prop="buDesc" :rules="rules.buDesc">
<span slot="label" style="" @click="getBaseList(106,1)"><a herf="#">BU</a></span>
<el-input v-model="modalData.buDesc" readonly ></el-input>
<span slot="label" @click="getBaseList(106,1)"><a herf="#">BU</a></span>
<el-input v-model="modalData.buDesc" readonly style="width: 80px"></el-input>
</el-form-item> </el-form-item>
<el-tabs v-model="inventoryPartTable" style="width: 100%;height: 465px;" type="border-card" @tab-click="inventoryPartClick"> <el-tabs v-model="inventoryPartTable" style="width: 100%;height: 465px;" type="border-card" @tab-click="inventoryPartClick">
<el-tab-pane label="General" name="General"> <el-tab-pane label="General" name="General">
@ -964,6 +974,26 @@
<project-part-upload ref="projectPartUpload" @refreshPageTables="searchTable" v-drag></project-part-upload> <project-part-upload ref="projectPartUpload" @refreshPageTables="searchTable" v-drag></project-part-upload>
<Chooselist ref="baseList" @getBaseData="getBaseData"></Chooselist> <Chooselist ref="baseList" @getBaseData="getBaseData"></Chooselist>
<!-- 获取编码对话框 -->
<el-dialog title="获取编码" :close-on-click-modal="false" top="5vh" v-drag :visible.sync="drawingNoDialogVisible" width="1100px" @close="drawingNoDialogVisible = false">
<code-generation :dialog-mode="true" @code-saved="handleCodeGenerated"></code-generation>
</el-dialog>
<!-- 编码详情对话框 -->
<el-dialog title="编码详情" :close-on-click-modal="false" v-drag :visible.sync="partDrawingDetailDialogVisible" v-loading="partDrawingDetailLoading">
<el-table :data="partDrawingDetailList" height="400" border style="width: 100%">
<el-table-column prop="itemNo" header-align="center" width="140" align="right" label="序号"></el-table-column>
<el-table-column prop="itemDesc" header-align="center" width="140" align="left" label="描述"></el-table-column>
<el-table-column prop="itemName" header-align="center" width="140" align="left" label="元素名称"></el-table-column>
<el-table-column prop="itemType" show-overflow-tooltip header-align="center" align="left" label="类型"></el-table-column>
<el-table-column prop="itemLabel" show-overflow-tooltip header-align="center" align="left" label="选中项描述"></el-table-column>
<el-table-column prop="itemValue" show-overflow-tooltip header-align="center" align="left" label="选中项值"></el-table-column>
</el-table>
<el-footer style="height:30px;margin-top:10px;text-align:center">
<el-button type="primary" @click="partDrawingDetailDialogVisible = false">关闭</el-button>
</el-footer>
</el-dialog>
</div> </div>
</template> </template>
@ -1007,12 +1037,15 @@ import {
import DictDataSelect from "../../sys/dict-data-select.vue" import DictDataSelect from "../../sys/dict-data-select.vue"
import ProjectPartUpload from "./project_part_upload.vue"; import ProjectPartUpload from "./project_part_upload.vue";
import {downLoadFile, queryFileId, readPartFromFile} from "../../../../api/part/partInformation"; import {downLoadFile, queryFileId, readPartFromFile} from "../../../../api/part/partInformation";
import {searchDrawingDetailList} from "../../../../api/code/codeDrawing";
import CodeGeneration from "../../code/generation.vue";
export default { export default {
components: { components: {
ProjectPartUpload, ProjectPartUpload,
DictDataSelect, DictDataSelect,
Chooselist, Chooselist,
CodeGeneration,
}, },
watch: { watch: {
modalData: { modalData: {
@ -1077,6 +1110,7 @@ import {downLoadFile, queryFileId, readPartFromFile} from "../../../../api/part/
plmPartNo: '', plmPartNo: '',
finalPartNo: '', finalPartNo: '',
customerPartNo: '', customerPartNo: '',
drawingNo: '',
page: 1, page: 1,
limit: 10, limit: 10,
page2: 1, page2: 1,
@ -1156,6 +1190,22 @@ import {downLoadFile, queryFileId, readPartFromFile} from "../../../../api/part/
fixed: '', fixed: '',
columnWidth: 120 columnWidth: 120
}, },
{
userId: this.$store.state.user.name,
functionId: 101002001,
serialNumber: '101002001Table4DrawingNo',
tableId: "101002001Table4",
tableName: "项目物料",
columnProp: "drawingNo",
headerAlign: "center",
align: "left",
columnLabel: "编码",
columnHidden: false,
columnImage: false,
status: true,
fixed: '',
columnWidth: 130
},
{ {
userId: this.$store.state.user.name, userId: this.$store.state.user.name,
functionId: 101002001, functionId: 101002001,
@ -1532,6 +1582,10 @@ import {downLoadFile, queryFileId, readPartFromFile} from "../../../../api/part/
}, },
modalFlag: false, modalFlag: false,
modalDisableFlag: false, modalDisableFlag: false,
drawingNoDialogVisible: false,
partDrawingDetailList: [],
partDrawingDetailDialogVisible: false,
partDrawingDetailLoading: false,
rules: { rules: {
partNo: [ partNo: [
{ {
@ -2107,6 +2161,7 @@ import {downLoadFile, queryFileId, readPartFromFile} from "../../../../api/part/
this.searchData.finalPartNo = '' this.searchData.finalPartNo = ''
this.searchData.customerPartNo = '' this.searchData.customerPartNo = ''
this.searchData.partDesc = '' this.searchData.partDesc = ''
this.searchData.drawingNo = ''
this.pageIndex2 = 1 this.pageIndex2 = 1
this.searchTable() this.searchTable()
}, },
@ -2382,7 +2437,8 @@ import {downLoadFile, queryFileId, readPartFromFile} from "../../../../api/part/
costsInfoFlag: false, // costs costsInfoFlag: false, // costs
manufacturingInfoFlag: false, // Manufacturing manufacturingInfoFlag: false, // Manufacturing
planningInfoFlag: false, // planning planningInfoFlag: false, // planning
partItemInfoFlag: false //
partItemInfoFlag: false, //
drawingNo: data.rows.drawingNo || ''
} }
this.resetFlags() // this.resetFlags() //
this.setupWatchers() // this.setupWatchers() //
@ -3778,6 +3834,28 @@ import {downLoadFile, queryFileId, readPartFromFile} from "../../../../api/part/
} }
}) })
}, },
handleCodeGenerated(drawingNo) {
this.modalData.drawingNo = drawingNo;
this.drawingNoDialogVisible = false;
},
handlePartDrawingDetail(row) {
this.partDrawingDetailLoading = true;
this.partDrawingDetailList = [];
this.partDrawingDetailDialogVisible = true;
searchDrawingDetailList({ drawingNo: row.drawingNo }).then(({data}) => {
if (data && data.code === 0) {
this.partDrawingDetailList = data.rows;
} else {
this.$message.warning(data.msg);
}
this.partDrawingDetailLoading = false;
}).catch((error) => {
this.$message.error(error);
this.partDrawingDetailLoading = false;
});
},
}, },
} }
</script> </script>

Loading…
Cancel
Save