ruanqi 2 years ago
parent
commit
9f5b2f0278
  1. 4
      src/api/knifemold/tool-info.js
  2. 5
      src/api/production/board.js
  3. 2
      src/router/index.js
  4. 75
      src/views/modules/autoPrint/autoPrintStock.vue
  5. 188
      src/views/modules/board/AbnormalBoard.vue
  6. 209
      src/views/modules/board/SORoutingBoard.vue
  7. 316
      src/views/modules/knifemold/tool-info.vue
  8. 5
      src/views/modules/print/label/print_stock_label_preview.js

4
src/api/knifemold/tool-info.js

@ -50,6 +50,10 @@ export const queryToolOperatorRecord = data => createAPI(`toolInfo/queryToolOper
export const saveToolUseQtyAssess = data => createAPI(`toolInfo/saveToolUseQtyAssess`, 'POST', data)
export const getToolUseQtyAssessList = data => createAPI(`toolInfo/getToolUseQtyAssessList`, 'POST', data)
export const getItemModal = data => createAPI(`toolInfo/getItemModal`, 'POST', data)
export const itemSaveData = data => createAPI(`toolInfo/itemSaveData`, 'POST', data)
export const getItemData = data => createAPI(`toolInfo/getItemData`, 'POST', data)
export const deleteItemModal = data => createAPI(`toolInfo/deleteItemModal`, 'POST', data)

5
src/api/production/board.js

@ -0,0 +1,5 @@
import { createAPI } from "@/utils/httpRequest.js";
export const SORoutingBoard=data => createAPI(`board/SORoutingBoard`, 'post', data);
export const abnormalBoardList=data => createAPI(`board/abnormalBoardList`, 'post', data);
export const getStockPrintList= data => createAPI(`board/getStockPrintList/${data}`,'get',data)

2
src/router/index.js

@ -20,6 +20,8 @@ const _import = require('./import-' + process.env.NODE_ENV)
const globalRoutes = [
{ path: '/404', component: _import('common/404'), name: '404', meta: { title: '404未找到' } },
{ path: '/login', component: _import('common/login'), name: 'login', meta: { title: '登录' } },
{ path: '/SORoutingBoard', component: _import('modules/board/SORoutingBoard'), name: 'SORoutingBoard', meta: { title: '生产看板' } },
{ path: '/AbnormalBoard', component: _import('modules/board/AbnormalBoard'), name: 'AbnormalBoard', meta: { title: '异常反馈看板' } },
]
// 主入口路由(需嵌套上左右整体布局)

75
src/views/modules/autoPrint/autoPrintStock.vue

@ -0,0 +1,75 @@
<template>
<div class="mod-config">
<h1>自动打印库存标签</h1>
</div>
</template>
<script>
let autoPrint = '' //
import {
getStockPrintList,
updateStockPrintFlag
} from '@/api/production/board.js'
import {
printMaterialLabelPreview,
} from "@/views/modules/print/label/print_stock_label_preview.js"
export default {
name: 'autoPrintStock',
data () {
return {
ip:this.$route.query.ip
}
},
mounted () {
this.refreshTable ()
},
methods: {
refreshTable () {
autoPrint = setInterval(() => {
this.printStock()
}, 3000)
},
printStock(){
let ipp='no'
if(this.ip){
ipp=this.ip
}
getStockPrintList(ipp).then(({data}) => {
if (data.code == 0) {
if(data.rows.length>0){
let array=[];
for (let i = 0; i < data.rows.length; i++) {
for (let j = 0; j <data.rows[i].printQty ; j++) {
array.push(data.rows[i])
}
}
printMaterialLabelPreview(array);
}
}
})
},
},
}
</script>
<style >
.board2 .el-table .cell {
line-height: 13px;
font-size: 12px;
height: 13px;
padding: 0px;
}
.board2 .el-table .success-row {
background: #1bb61b;
}
.board2 .el-table .false-row {
/*background: #cbcb14;*/
background: #db1212;
}
.board2 .el-table .yellow-row{
background: #ffff00;
}
</style>

188
src/views/modules/board/AbnormalBoard.vue

@ -0,0 +1,188 @@
<template>
<div class="mod-config">
<div style="text-align: center">
<h1>异常处理看板</h1>
</div>
<div class="board2">
<!-- @mouseenter.native="mouseEnter"-->
<!-- @mouseleave.native="mouseLeave"-->
<el-table
cell-style="cc"
:height="height"
:data="tableData"
ref="wt_table"
border
:row-class-name="tableRowClassName"
style="width: 100%;">
<el-table-column
prop="seqNo"
header-align="center"
align="left"
width="60"
label="派工单号">
</el-table-column>
<el-table-column
prop="orderNo"
header-align="center"
align="left"
width="100"
label="生产订单">
</el-table-column>
<el-table-column
prop="partNo"
header-align="center"
align="left"
width="100"
label="物料编码">
</el-table-column>
<el-table-column
prop="productionLineDesc"
header-align="center"
align="left"
width="60"
label="生产线">
</el-table-column>
<el-table-column
prop="feedbackDate"
header-align="center"
align="left"
width="80"
label="反馈时间">
</el-table-column>
<el-table-column
prop="status"
header-align="center"
align="left"
width="60"
label="状态">
</el-table-column>
<el-table-column
prop="abnormalDesc"
header-align="center"
align="left"
width="100"
label="异常原因">
</el-table-column>
<el-table-column
prop="abnormalRemark"
header-align="center"
align="left"
min-width="200"
label="异常描述">
</el-table-column>
</el-table>
</div>
</div>
</template>
<script>
let rollstop = ''
let rolltimer = ''//
let refresher = '' //
import {
abnormalBoardList,
} from '@/api/production/board.js'
export default {
name: 'AbnormalBoard',
data () {
return {
pageIndex: 1,
totalPage: 1,
height: 200,
tableData: [],
//
// refreshTime: 5,
// rollTime: 5,
// rollPx: 1,
}
},
mounted () {
this.$nextTick(() => {
this.height = window.innerHeight - 80
})
// this.autoRoll()
},
methods: {
tableRowClassName ({row, rowIndex}) {
return ''
},
search () {
let inData= {number:this.pageIndex};
abnormalBoardList(inData).then(({data}) => {
this.tableData = data.rows;
this.totalPage= data.maxPage;
if(this.pageIndex+1>data.maxPage){
this.pageIndex=1
}else {
this.pageIndex=this.pageIndex+1
}
})
},
//
// mouseEnter (time) {
// //
// this.autoRoll(true)
// },
//
// mouseLeave () {
// //
// this.autoRoll()
// },
//
// autoRoll (stop) {
// if (stop) {
// clearInterval(rolltimer)
// return
// }
// // DOM
// const table = this.$refs.wt_table
// // div
// const divData = table.bodyWrapper
// //
// rolltimer = setInterval(() => {
// //
// divData.scrollTop = this.decimalUtil.add(Number(divData.scrollTop), Number(this.rollPx))
// // (+=)
// if (divData.clientHeight + divData.scrollTop +1>= divData.scrollHeight) {
// // table
// divData.scrollTop = 0
// }
// }, this.rollTime * 10)
// },
refreshTable () {
refresher = setInterval(() => {
this.search()
}, 30000)
}
},
created () {
this.search()
this.refreshTable()
}
}
</script>
<style >
.board2 .el-table .cell {
line-height: 13px;
font-size: 12px;
height: 13px;
padding: 0px;
}
.board2 .el-table .success-row {
background: #1bb61b;
}
.board2 .el-table .false-row {
/*background: #cbcb14;*/
background: #db1212;
}
.board2 .el-table .yellow-row{
background: #ffff00;
}
</style>

209
src/views/modules/board/SORoutingBoard.vue

@ -0,0 +1,209 @@
<template>
<div class="mod-config">
<div style="text-align: center">
<h1>{{lineName}}生产看板</h1>
</div>
<div class="board2">
<!-- @mouseenter.native="mouseEnter"-->
<!-- @mouseleave.native="mouseLeave"-->
<el-table
cell-style="cc"
:height="height"
:data="tableData"
ref="wt_table"
border
:row-class-name="tableRowClassName"
style="width: 100%;">
<el-table-column
prop="site"
header-align="center"
align="left"
min-width="25"
style="font-size: 20px"
label="工厂">
</el-table-column>
<el-table-column
prop="seqNo"
header-align="center"
align="left"
min-width="25"
style="font-size: 20px"
label="派工单号">
</el-table-column>
<el-table-column
prop="orderNo"
header-align="center"
align="left"
min-width="50"
style="font-size: 20px"
label="生产订单号">
</el-table-column>
<el-table-column
prop="partNo"
header-align="center"
align="left"
min-width="50"
label="产品编号">
</el-table-column>
<el-table-column
prop="sScheduledDate"
header-align="center"
align="left"
min-width="70"
label="派工日期">
</el-table-column>
<el-table-column
prop="qtyRequired"
header-align="center"
align="right"
min-width="30"
label="需求数量">
</el-table-column>
<el-table-column
prop="qtyReported"
header-align="center"
align="right"
min-width="30"
label="报工数量">
</el-table-column>
<el-table-column
prop="lastLineName"
header-align="center"
align="left"
min-width="40"
label="上道生产线">
</el-table-column>
<el-table-column
prop="lastRequireQty"
header-align="center"
align="right"
min-width="40"
label="上工序需求数量">
</el-table-column>
<el-table-column
prop="lastReportQty"
header-align="center"
align="right"
min-width="40"
label="上工序完成数量">
</el-table-column>
</el-table>
</div>
</div>
</template>
<script>
let rollstop = ''
let rolltimer = ''//
let refresher = '' //
import {
SORoutingBoard,
} from '@/api/production/board.js'
export default {
name: 'SORoutingBoard',
data () {
return {
lineNo:this.$route.query.lineNo?this.$route.query.lineNo:'',
lineName:this.$route.query.lineName?this.$route.query.lineName:'',
pageIndex: 1,
totalPage: 1,
height: 200,
tableData: [],
//
// refreshTime: 5,
// rollTime: 5,
// rollPx: 1,
}
},
mounted () {
this.$nextTick(() => {
this.height = window.innerHeight - 80
})
// this.autoRoll()
},
methods: {
tableRowClassName ({row, rowIndex}) {
if (row.outWorkFlag == 'N') {
return 'success-row'
}
return ''
},
search () {
let inData= {number:this.pageIndex};
SORoutingBoard(inData).then(({data}) => {
this.tableData = data.rows;
this.totalPage= data.maxPage;
if(this.pageIndex+1>data.maxPage){
this.pageIndex=1
}else {
this.pageIndex=this.pageIndex+1
}
})
},
//
// mouseEnter (time) {
// //
// this.autoRoll(true)
// },
//
// mouseLeave () {
// //
// this.autoRoll()
// },
//
// autoRoll (stop) {
// if (stop) {
// clearInterval(rolltimer)
// return
// }
// // DOM
// const table = this.$refs.wt_table
// // div
// const divData = table.bodyWrapper
// //
// rolltimer = setInterval(() => {
// //
// divData.scrollTop = this.decimalUtil.add(Number(divData.scrollTop), Number(this.rollPx))
// // (+=)
// if (divData.clientHeight + divData.scrollTop +1>= divData.scrollHeight) {
// // table
// divData.scrollTop = 0
// }
// }, this.rollTime * 10)
// },
refreshTable () {
refresher = setInterval(() => {
this.search()
}, 30000)
}
},
created () {
this.search()
this.refreshTable()
}
}
</script>
<style >
.board2 .el-table .cell {
line-height: 13px;
font-size: 12px;
height: 13px;
padding: 0px;
}
.board2 .el-table .success-row {
background: #1bb61b;
}
.board2 .el-table .false-row {
/*background: #cbcb14;*/
background: #db1212;
}
.board2 .el-table .yellow-row{
background: #ffff00;
}
</style>

316
src/views/modules/knifemold/tool-info.vue

@ -6,6 +6,7 @@
<el-button @click="initToolHeaderModel('Y')" type="primary">新增</el-button>
<el-button @click="initToolHeaderModel('N')" type="primary">编辑</el-button>
<el-button @click="deleteToolHeader()" type="primary">删除</el-button>
<el-button @click="itemModal()" type="primary">属性</el-button>
</el-col>
</el-row>
<el-row>
@ -501,6 +502,75 @@
<el-button type="primary" @click="saveAndUpdateToolDetail()">确定</el-button>
<el-button type="primary" @click="setUp.toolEditFlag = false">取消</el-button>
</span>
</el-dialog>
<el-dialog title="工具属性清单" :close-on-click-modal="false" v-drag :visible.sync="toolItemModelFlag" width="830px">
<el-form :inline="true" label-position="top" >
<el-form-item >
<el-button type="primary" @click="addItemModal()">新增</el-button>
</el-form-item>
</el-form>
<el-table
:height="300"
:data="itemModalList"
border
v-loading="dataListLoading"
style="width: 100%;">
<el-table-column
v-for="(item,index) in columnDetailList" :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="130"
label="操作">
<template slot-scope="scope">
<a type="text" size="small" @click="updateItemModal(scope.row)">编辑</a>
<a type="text" size="small" @click="deleteItemModal(scope.row)">删除</a>
</template>
</el-table-column>
</el-table>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="toolItemModelFlag = false">关闭</el-button>
</span>
</el-dialog>
<el-dialog title="属性项目" :close-on-click-modal="false" v-drag :visible.sync="itemModalFlag" width="430px">
<el-form :inline="true" label-position="top" style="margin-left: 7px;margin-top: -5px;">
<el-form-item >
<el-link slot="label" @click="getBaseList(1004)">属性编码</el-link>
<el-input v-model="itemData.toolItemNo" :disabled="itemModalDisableFlag" style="width: 120px" @change="changeItemDisable()" ></el-input>
</el-form-item>
<el-form-item label="属性名称:">
<el-input v-model="itemData.toolItemDesc" disabled style="width: 120px"></el-input>
</el-form-item>
</el-form>
<el-form :inline="true" label-position="top" style="margin-left: 7px;margin-top: -5px;">
<el-form-item label="文本值:">
<el-input v-model="itemData.textValue" :disabled="itemTextDisableFlag" type="text" style="width: 120px"></el-input>
</el-form-item>
<el-form-item label="数字值:">
<el-input v-model="itemData.numValue" :disabled="itemNumberDisableFlag" type="number" style="width: 120px"></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="itemSaveData()">保存</el-button>
<el-button type="primary" @click="itemModalFlag = false">关闭</el-button>
</span>
</el-dialog>
<Chooselist ref="baseList" @getBaseData="getBaseData"></Chooselist>
@ -523,7 +593,11 @@ import {
editToolHeader,
saveToolHeader,
deleteToolHeader,
queryToolOperatorRecord
queryToolOperatorRecord,
getItemModal,
itemSaveData,
getItemData,
deleteItemModal,
} from '@/api/knifemold/tool-info.js'
import {printToolData} from '@/api/knifemold/receive.js'
import {searchProcessRouteTool} from '@/api/base/productProcessRoute.js'
@ -1800,7 +1874,119 @@ export default {
fixed: false
}
],
myTable: 0
myTable: 0,
//
itemModalData:{
site:'',
toolID:'',
},
itemModalList:[],
itemModalFlag:false,
toolItemModelFlag:false,
itemModalDisableFlag:false,
itemNumberDisableFlag:false,
itemTextDisableFlag:false,
columnDetailList: [
{
userId: this.$store.state.user.name,
functionId: 101013,
serialNumber: '101013Table2EamPropertiesItemID',
tableId: "101013Table2",
tableName: "点检项目表",
columnProp: 'toolItemNo',
headerAlign: "center",
align: "left",
columnLabel: '属性编码',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 90,
},
{
userId: this.$store.state.user.name,
functionId: 101013,
serialNumber: '101013Table2EamPropertiesItemDesc',
tableId: "101013Table2",
tableName: "点检项目表",
columnProp: 'toolItemDesc',
headerAlign: "center",
align: "left",
columnLabel: '属性名称',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 90,
},
{
userId: this.$store.state.user.name,
functionId: 101013,
serialNumber: '101013Table2ValueType',
tableId: "101013Table2",
tableName: "点检项目表",
columnProp: 'valueType',
headerAlign: "center",
align: "left",
columnLabel: '属性类型',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 70,
},
{
userId: this.$store.state.user.name,
functionId: 101013,
serialNumber: '101013TableValueChooseFlag',
tableId: "101013Table",
tableName: "common",
columnProp: 'textValue',
headerAlign: "center",
align: "left",
columnLabel: '文本值',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 70,
},
{
userId: this.$store.state.user.name,
functionId: 101013,
serialNumber: '101013TableValueChooseFlag',
tableId: "101013Table",
tableName: "common",
columnProp: 'numValue',
headerAlign: "center",
align: "left",
columnLabel: '数字值',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 70,
},
],
itemData:{
id:0,
site:'',
toolID:'',
toolItemNo:'',
toolItemDesc:'',
textValue:'',
numValue:'',
},
}
},
watch: {
@ -1989,6 +2175,11 @@ export default {
if (this.tagNo === 7) {
this.editHeaderData.umid = val.UMID
}
if (this.tagNo === 1004) {
this.itemData.toolItemNo = val.ItemNo
this.itemData.toolItemDesc = val.ItemDesc
this.changeItemDisable();
}
},
//
getBaseList(val, number) {
@ -2002,6 +2193,12 @@ export default {
if (val === 70) {
strVal = this.headerData.toolId
}
if (val === 1004) {
if(this.itemModalDisableFlag){
return false
}
strVal = this.itemData.toolItemNo
}
if (val === 23) {
strVal = this.editHeaderData.familyId
}
@ -2234,7 +2431,120 @@ export default {
json += '}'
let s = eval('(' + json + ')')
return s
}
},
//
searchItemList(){
debugger
this.itemModalData.site=this.headerData.site
this.itemModalData.toolID=this.headerData.toolId
getItemModal(this.itemModalData).then(({data}) => {
this.itemModalList = data.rows
})
},
itemModal(){
this.searchItemList();
this.toolItemModelFlag=true;
},
addItemModal(){
this.itemData={
id:0,
site:this.headerData.site,
toolID:this.headerData.toolId,
toolItemNo:'',
toolItemDesc:'',
textValue:'',
numValue:null,
}
this.itemTextDisableFlag=true
this.itemNumberDisableFlag=true
this.itemModalDisableFlag=false
this.itemModalFlag=true;
},
itemSaveData(){
if(this.itemData.toolID==''||this.itemData.toolID==null){
this.$alert('未选择工具!', '错误', {
confirmButtonText: '确定'
})
return false
}
if(this.itemData.toolItemNo==''||this.itemData.toolItemNo==null){
this.$alert('未选择属性!', '错误', {
confirmButtonText: '确定'
})
return false
}
itemSaveData(this.itemData).then(({data}) => {
if (data && data.code === 0) {
this.itemModalFlag = false
this.searchItemList();
this.$message({
message: '操作成功',
type: 'success',
duration: 1500,
onClose: () => {
}
})
} else {
this.$alert(data.msg, '错误', {
confirmButtonText: '确定'
})
}
})
},
updateItemModal(row){
this.itemData={
id:1,
site:row.site,
toolID:row.toolID,
toolItemNo:row.toolItemNo,
toolItemDesc:row.toolItemDesc,
textValue:row.textValue,
numValue:row.numValue,
}
this.itemTextDisableFlag=true
this.itemNumberDisableFlag=true
if(row.valueTypeDb=="N"){
this.itemNumberDisableFlag=false
}else {
this.itemTextDisableFlag=false
}
this.itemModalDisableFlag=true
this.itemModalFlag=true;
},
deleteItemModal(row){
this.$confirm('确定进行删除操作?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
//
deleteItemModal(row).then(({data}) => {
if (data.code === 0) {
this.searchItemList();
this.$message.success(data.msg)
} else {
this.$message.warning(data.msg)
}
})
})
},
changeItemDisable(){
let inData={
toolItemNo:this.itemData.toolItemNo
}
getItemData(inData).then(({data}) => {
if (data && data.code === 0) {
if(data.rows[0].valueTypeDb=="N"){
this.itemNumberDisableFlag=false
this.itemTextDisableFlag=true
}else {
this.itemTextDisableFlag=false
this.itemNumberDisableFlag=true
}
}
})
},
}
}
</script>

5
src/views/modules/print/label/print_stock_label_preview.js

@ -52,10 +52,7 @@ export function printMaterialLabelPreview(printList) {
LODOP.ADD_PRINT_TEXT(194,8,113,25,"Trans Date:");
LODOP.SET_PRINT_STYLEA(0,"FontSize",10);
LODOP.SET_PRINT_STYLEA(0,"Bold",1);
LODOP.ADD_PRINT_TEXT(194,110,244,25,printData.transDate);
LODOP.SET_PRINT_STYLEA(0,"FontSize",10);
LODOP.SET_PRINT_STYLEA(0,"Bold",1);
LODOP.ADD_PRINT_TEXT(224,5,256,24,"Manufactured by A&M Polymer");
LODOP.ADD_PRINT_TEXT(224,5,256,24,"Manufactured by Jtem");
LODOP.SET_PRINT_STYLEA(0,"FontSize",10);
LODOP.ADD_PRINT_TEXT(224,212,156,25,"IATF:16949 Certified");
LODOP.SET_PRINT_STYLEA(0,"FontSize",10);

Loading…
Cancel
Save