Browse Source

2026-06-11

优化加工中心管理
master
fengyuan_yang 4 days ago
parent
commit
c83e203570
  1. 394
      src/views/modules/base/workCenter.vue

394
src/views/modules/base/workCenter.vue

@ -1,19 +1,15 @@
<template> <template>
<div class="mod-config"> <div class="mod-config">
<el-form :inline="true" label-position="top" label-width="100px" style="margin-top: -5px;">
<el-form :inline="true" label-position="top" label-width="100px">
<el-form-item :label="labels.workCenterNo"> <el-form-item :label="labels.workCenterNo">
<el-input v-model="modelData.workCenterNo" readonly style="width: 130px"></el-input>
<el-button @click="getData()" type="primary" style="margin-left: 2px;margin-top: 0px">{{buttons.search}}</el-button>
<el-input v-model="searchData.workCenterNo" clearable style="width: 130px"></el-input>
</el-form-item> </el-form-item>
<el-form-item :label="labels.workCenterDesc"> <el-form-item :label="labels.workCenterDesc">
<el-input v-model="modelData.workCenterDesc" readonly style="width: 130px"></el-input>
<el-input v-model="searchData.workCenterDesc" clearable style="width: 130px"></el-input>
</el-form-item> </el-form-item>
<el-form-item :label="labels.site">
<el-input v-model="modelData.site" readonly style="width: 130px"></el-input>
</el-form-item>
<el-form-item :label="labels.active">
<el-input v-model="modelData.active" readonly style="width: 40px"></el-input>
<el-button @click="addModal()" type="primary" :disabled="authAdd" style="margin-left: 2px">{{buttons.add}}</el-button>
<el-form-item :label="' '">
<el-button @click="getData()" type="primary" style="margin-left: 2px">{{buttons.search}}</el-button>
<el-button @click="addModal()" type="primary" :disabled="authAdd" style="margin-left: 5px">{{buttons.add}}</el-button>
<download-excel <download-excel
:fields="fields()" :fields="fields()"
:data="exportData" :data="exportData"
@ -45,48 +41,63 @@
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-tabs v-model="activeName" >
<el-tab-pane :label="labels.base" name="first">
<el-form :inline="true" label-position="top" label-width="100px" style="margin-top: 0px;">
<el-form-item :label="labels.workCenterType">
<el-input v-model="modelData.workCenterType" readonly style="width: 130px"></el-input>
</el-form-item>
<el-form-item :label="labels.proLineNo">
<el-input v-model="modelData.proLineNo" readonly style="width: 130px"></el-input>
</el-form-item>
<el-form-item :label="labels.productionLineDesc">
<el-input v-model="modelData.productionLineDesc" readonly style="width: 130px"></el-input>
</el-form-item>
<el-form-item :label="labels.canCreateNewRollFlag">
<el-input v-model="modelData.canCreateNewRollFlag" readonly style="width: 40px"></el-input>
</el-form-item>
</el-form>
<el-form :inline="true" label-position="top" label-width="100px" style="margin-top: -5px;">
<el-form-item :label="labels.createdDate">
<el-input v-model="modelData.createdDate" readonly style="width: 130px"></el-input>
</el-form-item>
<el-form-item :label="labels.remark">
<el-input v-model="modelData.remark" readonly style="width: 130px"></el-input>
</el-form-item>
<el-form-item :label="labels.needSetupFlag">
<el-input v-model="modelData.needSetupFlag" readonly style="width: 40px"></el-input>
</el-form-item>
</el-form>
</el-tab-pane>
<el-tab-pane :label="labels.partInvolved" name="second">
<el-table
ref="workCenterTable"
:height="mainTableHeight"
:data="dataList3"
border
@row-click="selectWorkCenter"
highlight-current-row
v-loading="dataListLoading"
style="width: 100%;">
<el-table-column
v-for="(item,index) in columnList3" :key="index"
:sortable="item.columnSortable"
:prop="item.columnProp"
:header-align="item.headerAlign"
:show-overflow-tooltip="item.showOverflowTooltip"
:align="item.align"
:fixed="item.fixed==''?false:item.fixed"
:min-width="item.columnWidth"
:label="item.columnLabel">
<template slot-scope="scope">
<span v-if="!item.columnHidden"> {{scope.row[item.columnProp]}}</span>
<span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
</template>
</el-table-column>
<el-table-column
fixed="right"
header-align="center"
align="center"
width="100"
:label="labels.do">
<template slot-scope="scope">
<el-link style="cursor: pointer; margin-right: 8px" v-if="!authEdit" @click.stop="editModel(scope.row)">{{buttons.update}}</el-link>
<el-link style="cursor: pointer" v-if="!authDelete" @click.stop="deleteData(scope.row)">{{buttons.delete}}</el-link>
</template>
</el-table-column>
</el-table>
<el-tabs v-model="activeName">
<el-tab-pane :label="labels.resource2" name="resource">
<el-form :inline="true" label-position="top" label-width="100px" style="margin-top: 0px;"> <el-form :inline="true" label-position="top" label-width="100px" style="margin-top: 0px;">
<el-button @click="getPartDetail()" type="primary" style="margin-left: 2px;margin-top: 0px">{{buttons.partInfo}}</el-button>
<el-button @click="jumpCalendar()" type="primary" style="margin-left: 2px;margin-top: 0px">{{buttons.jumpCalendar}}</el-button>
<el-button @click="addResource()" v-if="!authAdd" type="primary" style="margin-left: 2px;margin-top: 0px">{{buttons.add}}</el-button>
<el-button @click="editResource()" v-if="!authEdit" type="primary" style="margin-left: 2px;margin-top: 0px">{{buttons.update}}</el-button>
<el-button @click="deleteCalendar()" v-if="!authDelete" type="primary" style="margin-left: 2px;margin-top: 0px">{{buttons.delete}}</el-button>
<el-button @click="setResource()" type="primary" style="margin-left: 2px;margin-top: 0px">{{buttons.setResource}}</el-button>
<el-button @click="uploadSOP()" type="primary" style="margin-left: 2px;margin-top: 0px">上传SOP</el-button>
</el-form> </el-form>
<el-table <el-table
:height="height"
:data="dataList"
:height="detailTableHeight"
:data="dataList2"
border border
@row-click="clickData"
@row-click="clickData2"
highlight-current-row highlight-current-row
v-loading="dataListLoading" v-loading="dataListLoading"
style="width: 100%;"> style="width: 100%;">
<el-table-column <el-table-column
v-for="(item,index) in columnList" :key="index"
v-for="(item,index) in columnList2" :key="index"
:sortable="item.columnSortable" :sortable="item.columnSortable"
:prop="item.columnProp" :prop="item.columnProp"
:header-align="item.headerAlign" :header-align="item.headerAlign"
@ -97,31 +108,25 @@
:label="item.columnLabel"> :label="item.columnLabel">
<template slot-scope="scope"> <template slot-scope="scope">
<span v-if="!item.columnHidden"> {{scope.row[item.columnProp]}}</span> <span v-if="!item.columnHidden"> {{scope.row[item.columnProp]}}</span>
<span v-if="item.columnImage"><img :src="scope.row[item.columnProp]"
style="width: 100px; height: 80px"/></span>
<span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
</el-tab-pane> </el-tab-pane>
<el-tab-pane :label="labels.resource2" name="third">
<el-tab-pane :label="labels.partInvolved" name="part">
<el-form :inline="true" label-position="top" label-width="100px" style="margin-top: 0px;"> <el-form :inline="true" label-position="top" label-width="100px" style="margin-top: 0px;">
<el-button @click="jumpCalendar()" type="primary" style="margin-left: 2px;margin-top: 0px">{{buttons.jumpCalendar}}</el-button>
<el-button @click="addResource()" v-if="!authAdd" type="primary" style="margin-left: 2px;margin-top: 0px">{{buttons.add}}</el-button>
<el-button @click="editResource()" v-if="!authEdit" type="primary" style="margin-left: 2px;margin-top: 0px">{{buttons.update}}</el-button>
<el-button @click="deleteCalendar()" v-if="!authDelete" type="primary" style="margin-left: 2px;margin-top: 0px">{{buttons.delete}}</el-button>
<el-button @click="setResource()" type="primary" style="margin-left: 2px;margin-top: 0px">{{buttons.setResource}}</el-button>
<el-button @click="uploadSOP()" type="primary" style="margin-left: 2px;margin-top: 0px">上传SOP</el-button>
<el-button @click="getPartDetail()" type="primary" style="margin-left: 2px;margin-top: 0px">{{buttons.partInfo}}</el-button>
</el-form> </el-form>
<el-table <el-table
:height="height"
:data="dataList2"
:height="detailTableHeight"
:data="dataList"
border border
@row-click="clickData2"
@row-click="clickData"
highlight-current-row highlight-current-row
v-loading="dataListLoading" v-loading="dataListLoading"
style="width: 100%;"> style="width: 100%;">
<el-table-column <el-table-column
v-for="(item,index) in columnList2" :key="index"
v-for="(item,index) in columnList" :key="index"
:sortable="item.columnSortable" :sortable="item.columnSortable"
:prop="item.columnProp" :prop="item.columnProp"
:header-align="item.headerAlign" :header-align="item.headerAlign"
@ -132,52 +137,14 @@
:label="item.columnLabel"> :label="item.columnLabel">
<template slot-scope="scope"> <template slot-scope="scope">
<span v-if="!item.columnHidden"> {{scope.row[item.columnProp]}}</span> <span v-if="!item.columnHidden"> {{scope.row[item.columnProp]}}</span>
<span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
<span v-if="item.columnImage"><img :src="scope.row[item.columnProp]"
style="width: 100px; height: 80px"/></span>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
<el-dialog :title="labels.dataList" :close-on-click-modal="false" v-drag :visible.sync="modelFlag2" width="680px" >
<el-table
height="400"
:data="dataList3"
border
@row-dblclick="tableHanddle"
v-loading="dataListLoading"
style="width: 100%;">
<el-table-column
header-align="center"
align="center"
width="80"
:label="labels.do">
<template slot-scope="scope">
<a type="text" size="small" v-if="!authEdit" @click="editModel(scope.row)">{{buttons.update}}</a>
<a type="text" size="small" v-if="!authDelete" @click="deleteData(scope.row)">{{buttons.delete}}</a>
</template>
</el-table-column>
<el-table-column
v-for="(item,index) in columnList3" :key="index"
:sortable="item.columnSortable"
:prop="item.columnProp"
:header-align="item.headerAlign"
:show-overflow-tooltip="item.showOverflowTooltip"
:align="item.align"
:fixed="item.fixed==''?false:item.fixed"
:width="item.columnWidth"
:label="item.columnLabel">
<template slot-scope="scope">
<span v-if="!item.columnHidden"> {{scope.row[item.columnProp]}}</span>
<span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
</template>
</el-table-column>
</el-table>
<el-footer style="height:40px;margin-top: 20px;text-align:center">
<el-button type="primary" @click="modelFlag2 = false">{{buttons.close}}</el-button>
</el-footer>
</el-dialog>
<el-dialog :title="labels.workCenter" :close-on-click-modal="false" v-drag :visible.sync="modelFlag" width="619px" > <el-dialog :title="labels.workCenter" :close-on-click-modal="false" v-drag :visible.sync="modelFlag" width="619px" >
<el-form :inline="true" label-position="top" style="margin-left: 7px;margin-top: -5px;"> <el-form :inline="true" label-position="top" style="margin-left: 7px;margin-top: -5px;">
<el-form-item label="BU" prop="bu"> <el-form-item label="BU" prop="bu">
@ -654,10 +621,15 @@ export default {
exportHeader2: ["加工中心机台"], exportHeader2: ["加工中心机台"],
exportFooter2: [], exportFooter2: [],
// end // end
activeName:'first',
searchData: {
workCenterNo: '',
workCenterDesc: ''
},
activeName:'resource',
height: 200, height: 200,
mainTableHeight: 260,
detailTableHeight: 220,
modelFlag3:false, modelFlag3:false,
modelFlag2:false,
modelFlag: false, modelFlag: false,
modelInputFlag: true, modelInputFlag: true,
fileName:'', fileName:'',
@ -1162,20 +1134,20 @@ export default {
{ {
userId: this.$store.state.user.name, userId: this.$store.state.user.name,
functionId: 103004, functionId: 103004,
serialNumber: '103004Table3WorkCenterType',
serialNumber: '103004Table3Site',
tableId: "103004Table3", tableId: "103004Table3",
tableName: "加工中心表", tableName: "加工中心表",
columnProp: "workCenterType",
columnProp: "site",
headerAlign: "center", headerAlign: "center",
align: "left", align: "left",
columnLabel: "加工中心类型",
columnLabel: "工厂编号",
columnHidden: false, columnHidden: false,
columnImage: false, columnImage: false,
columnSortable: false, columnSortable: false,
sortLv: 0, sortLv: 0,
status: true, status: true,
fixed: '', fixed: '',
columnWidth: 100
columnWidth: 80
}, },
{ {
userId: this.$store.state.user.name, userId: this.$store.state.user.name,
@ -1198,13 +1170,103 @@ export default {
{ {
userId: this.$store.state.user.name, userId: this.$store.state.user.name,
functionId: 103004, functionId: 103004,
serialNumber: '103004Table3Site',
serialNumber: '103004Table3WorkCenterType',
tableId: "103004Table3", tableId: "103004Table3",
tableName: "加工中心表", tableName: "加工中心表",
columnProp: "site",
columnProp: "workCenterType",
headerAlign: "center", headerAlign: "center",
align: "left", align: "left",
columnLabel: "工厂编号",
columnLabel: "加工中心类型",
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 100
},
{
userId: this.$store.state.user.name,
functionId: 103004,
serialNumber: '103004Table3ProLineNo',
tableId: "103004Table3",
tableName: "加工中心表",
columnProp: "proLineNo",
headerAlign: "center",
align: "left",
columnLabel: "生产线编码",
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 110
},
{
userId: this.$store.state.user.name,
functionId: 103004,
serialNumber: '103004Table3ProductionLineDesc',
tableId: "103004Table3",
tableName: "加工中心表",
columnProp: "productionLineDesc",
headerAlign: "center",
align: "left",
columnLabel: "生产线名称",
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 140
},
{
userId: this.$store.state.user.name,
functionId: 103004,
serialNumber: '103004Table3CanCreateNewRollFlag',
tableId: "103004Table3",
tableName: "加工中心表",
columnProp: "canCreateNewRollFlag",
headerAlign: "center",
align: "left",
columnLabel: "可创建新卷",
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 110
},
{
userId: this.$store.state.user.name,
functionId: 103004,
serialNumber: '103004Table3CreatedDate',
tableId: "103004Table3",
tableName: "加工中心表",
columnProp: "createdDate",
headerAlign: "center",
align: "left",
columnLabel: "新增日期",
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 120
},
{
userId: this.$store.state.user.name,
functionId: 103004,
serialNumber: '103004Table3NeedSetupFlag',
tableId: "103004Table3",
tableName: "加工中心表",
columnProp: "needSetupFlag",
headerAlign: "center",
align: "left",
columnLabel: "需调机",
columnHidden: false, columnHidden: false,
columnImage: false, columnImage: false,
columnSortable: false, columnSortable: false,
@ -1212,6 +1274,24 @@ export default {
status: true, status: true,
fixed: '', fixed: '',
columnWidth: 80 columnWidth: 80
},
{
userId: this.$store.state.user.name,
functionId: 103004,
serialNumber: '103004Table3Remark',
tableId: "103004Table3",
tableName: "加工中心表",
columnProp: "remark",
headerAlign: "center",
align: "left",
columnLabel: "备注",
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 200
} }
], ],
columnSopFileList:[ columnSopFileList:[
@ -1352,6 +1432,8 @@ export default {
mounted() { mounted() {
this.$nextTick(() => { this.$nextTick(() => {
this.height = window.innerHeight - 225; this.height = window.innerHeight - 225;
this.mainTableHeight = Math.max(180, Math.floor(window.innerHeight * 0.28))
this.detailTableHeight = Math.max(180, window.innerHeight - this.mainTableHeight - 220)
}) })
}, },
@ -1381,6 +1463,51 @@ export default {
}, },
methods: { methods: {
clearCurrentSelection () {
this.modelData = {
add:'',
workCenterNo:'',
workCenterDesc:'',
site:'',
active:'',
workCenterType:'',
proLineNo:'',
productionLineDesc:'',
canCreateNewRollFlag:'',
createdDate:'',
remark:'',
needSetupFlag:'',
user:this.$store.state.user.name,
}
this.dataList = []
this.dataList2 = []
this.currentRow = null
this.currentRow2 = null
this.$nextTick(() => {
if (this.$refs.workCenterTable) {
this.$refs.workCenterTable.setCurrentRow(null)
}
})
},
selectWorkCenter (row) {
if (!row) {
this.clearCurrentSelection()
return
}
this.modelData = JSON.parse(JSON.stringify(row))
this.currentRow = null
this.currentRow2 = null
this.$nextTick(() => {
if (this.$refs.workCenterTable) {
this.$refs.workCenterTable.setCurrentRow(row)
}
})
getWorkCenterDataDetail(this.modelData).then(({data}) => {
this.dataList2 = data.rows2 || []
this.dataList = data.rows1 || []
})
},
// bu // bu
getSiteAndBuByUserName () { getSiteAndBuByUserName () {
@ -1810,31 +1937,53 @@ export default {
}, },
first () { first () {
if (localStorage.getItem('workCenterNo') !== undefined) {
if (localStorage.getItem('workCenterNo')) {
this.jump() this.jump()
} else {
this.getData()
} }
}, },
getData () { getData () {
let inData = { let inData = {
user: this.$store.state.user.name
user: this.$store.state.user.name,
workCenterNo: this.searchData.workCenterNo
} }
getWorkCenterData(inData).then(({data}) => { getWorkCenterData(inData).then(({data}) => {
this.dataList3 = data.rows
this.modelFlag2 = true
let rows = data.rows || []
if (this.searchData.workCenterDesc) {
let keyword = this.searchData.workCenterDesc.toLowerCase()
rows = rows.filter(item => (item.workCenterDesc || '').toLowerCase().indexOf(keyword) !== -1)
}
this.dataList3 = rows
if (rows.length > 0) {
this.selectWorkCenter(rows[0])
} else {
this.clearCurrentSelection()
}
}) })
}, },
jump () { jump () {
let data = JSON.parse(localStorage.getItem('workCenterNo'))
let data = JSON.parse(localStorage.getItem('workCenterNo') || '{}') || {}
localStorage.removeItem('workCenterNo') localStorage.removeItem('workCenterNo')
getWorkCenterData(data).then(({data}) => {
this.dataList3 = data.rows
this.modelData = data.rows[0]
getWorkCenterDataDetail(this.modelData).then(({data}) => {
this.dataList2 = data.rows2
this.dataList = data.rows1
})
this.searchData.workCenterNo = data.workCenterNo || ''
this.searchData.workCenterDesc = data.workCenterDesc || ''
let inData = {
user: this.$store.state.user.name,
workCenterNo: this.searchData.workCenterNo
}
getWorkCenterData(inData).then(({data: resultData}) => {
this.dataList3 = resultData.rows || []
let targetRow = this.dataList3.find(item => item.site === data.site && item.workCenterNo === data.workCenterNo)
if (!targetRow) {
targetRow = this.dataList3[0]
}
if (targetRow) {
this.selectWorkCenter(targetRow)
} else {
this.clearCurrentSelection()
}
}) })
}, },
@ -1933,15 +2082,6 @@ export default {
}) })
}, },
tableHanddle(row){
this.modelData=row;
this.modelFlag2=false;
getWorkCenterDataDetail(this.modelData).then(({data}) => {
this.dataList2 = data.rows2;
this.dataList = data.rows1;
})
},
// 线 // 线
proLineChange (tagNo) { proLineChange (tagNo) {
let tempData = { let tempData = {

Loading…
Cancel
Save