This commit is contained in:
2023-05-22 17:36:13 +08:00
41 changed files with 1285 additions and 186 deletions

View File

@@ -6,6 +6,7 @@ import green from '../../../image/green.svg'
import yellow from '../../../image/yellow.svg'
import grey from '../../../image/grey.svg'
import blue from '../../../image/blue.svg'
import red from '../../../image/red.svg'
class ButtonNodeModel extends HtmlResize.model {
initNodeData(data) {
@@ -47,6 +48,9 @@ class ButtonNode extends HtmlResize.view {
case 4:
imageUrl = grey
break
case 5:
imageUrl = red
break
default:
break
}

View File

@@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1681192570476" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2046" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M891.050667 248.149333A101.888 101.888 0 0 0 820.352 213.333333H205.056a114.773333 114.773333 0 0 0-73.088 33.536C112.426667 266.410667 0 447.914667 0 486.144v244.053333c0.170667 18.432 7.68 36.053333 20.821333 48.896 13.397333 12.970667 31.317333 20.181333 49.92 20.053334h882.56c18.56 0.128 36.522667-7.082667 49.877334-20.096 13.141333-12.885333 20.650667-30.378667 20.821333-48.810667v-244.053333c0-38.272-132.992-238.037333-132.992-238.037334z m-227.669334 216.362667a32.981333 32.981333 0 0 0-33.792 23.765333v4.992a115.285333 115.285333 0 0 1-230.4-6.570666 36.437333 36.437333 0 0 0-32.682666-22.442667H76.288l98.901333-167.253333s19.797333-32.426667 38.613334-32.213334h616.021333c13.866667 7.296 25.344 18.346667 33.237333 31.914667l97.066667 167.808h-296.874667 0.128z" fill="#FF0000" p-id="2047"></path></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -30,3 +30,11 @@ export function autoWeb() { // 查询立库监控数据
method: 'post'
})
}
export function queryNum(data) { // 获取个数
return request({
url: 'api/autoWeb/queryNum',
method: 'post',
data
})
}

View File

@@ -33,7 +33,7 @@
<!-- <div v-if="agvObj.car_no === '' || agvObj.car_no == null" class="grid-content bg-purple" style="height: 250px;background-color: white;border-bottom:3px solid rgb(240, 242, 245)">-->
<!-- 请添加更多AGV设备-->
<!-- </div>-->
<div v-if="agvObj.car_no !== '' && agvObj.car_no != null" class="grid-content bg-purple" style="height: 350px;background-color: white;border-bottom:0px solid rgb(240, 242, 245)">
<div v-if="agvObj.car_no !== '' && agvObj.car_no != null" class="grid-content bg-purple" style="height: 400px;background-color: white;border-bottom:0px solid rgb(240, 242, 245)">
<el-row>
<el-col :span="8">
<img
@@ -91,6 +91,16 @@
</el-col>
</div>
</el-row>
<el-row>
<div class="grid-content bg-purple" style="height: 50px;">
<el-col :span="8" style="line-height: 40px; text-align: center">
运行时长
</el-col>
<el-col :span="16" style="line-height: 40px; text-align: center">
{{ agvObj.run_time }}
</el-col>
</div>
</el-row>
<el-row>
<div v-if="form.flag === '5'" class="grid-content bg-purple" style="padding-left: 400px; padding-top: 30px">
<el-button

View File

@@ -146,6 +146,7 @@ export default {
}
},
mounted() {
this.query.is_fault = '1'
this.init()
},
beforeDestroy() {

View File

@@ -9,18 +9,24 @@
@open="open"
>
<!-- 搜索 -->
<el-row>
<el-col :span="6">
<el-form
:inline="true"
class="demo-form-inline"
label-position="right"
label-width="80px"
label-suffix=":"
>
<el-form-item label="库区">
<el-cascader
v-model="query.sect"
v-model="defaultList"
placeholder="所属库区"
:options="sects"
:props="{ checkStrictly: true }"
clearable
@change="sectQueryChange"
/>
</el-col>
<el-col :span="6">
</el-form-item>
<el-form-item label="货位">
<el-input
v-model="query.search"
clearable
@@ -29,12 +35,11 @@
placeholder="输入货位编码、名称"
prefix-icon="el-icon-search"
class="filter-item"
/> </el-col>
/>
</el-form-item>
<el-col :span="6">
<rrOperation />
</el-col>
</el-row>
<rrOperation />
</el-form>
<!--表格渲染-->
<el-table
ref="table"
@@ -94,7 +99,11 @@ export default {
},
storId: {
type: String,
default: null
default: String
},
layerNum: {
type: String,
default: String
}
},
data() {
@@ -106,7 +115,8 @@ export default {
checkrow: {},
rows: [],
dialogDis: true,
lock: ''
lock: '',
defaultList: ['1582991156504039424', '1645705331612979200']
}
},
watch: {
@@ -117,7 +127,6 @@ export default {
},
sectProp: {
handler(newValue, oldValue) {
debugger
this.sect = newValue
}
}
@@ -132,33 +141,21 @@ export default {
this.lock = '1'
},
[CRUD.HOOK.beforeRefresh]() {
this.crud.query.stor_id = this.storId
this.crud.query.layer_num = this.layerNum
this.query.lock_type = this.lock
if (this.storId === this.defaultList[0]) {
this.crud.query.sect_id = this.defaultList[1]
}
return true
},
open() {
crudUserStor.getSect({ 'stor_id': this.storId }).then(res => {
this.sects = res.content
})
if (this.sect) {
this.query.sect = this.sect
if (this.sect.length === 1) {
this.query.stor_id = this.sect[0]
this.query.stor_id = this.storId
}
if (this.sect.length === 0) {
this.query.sect_id = ''
this.query.stor_id = ''
}
if (this.sect.length === 2) {
this.query.stor_id = this.sect[0]
this.query.sect_id = this.sect[1]
}
}
this.query.is_lock = '1'
this.query.lock_type = this.lock
this.query.is_used = '1'
debugger
this.query.stor_id = this.storId
this.crud.toQuery()
},
handleSelectionChange(val, row) {
@@ -182,6 +179,7 @@ export default {
this.crud.query.stor_id = val[0]
this.crud.query.sect_id = val[1]
}
this.crud.toQuery()
},
onSelectAll() {
this.$refs.table.clearSelection()

View File

@@ -1,5 +1,31 @@
<template>
<div>
<el-row style="padding-top: 10px;padding-left: 10px;padding-bottom: 30px">
<el-form
:inline="true"
class="demo-form-inline"
label-position="right"
label-width="80px"
label-suffix=":"
>
<el-form-item label="立库层数">
<el-select
v-model="stageParam"
size="mini"
placeholder="请选择"
class="filter-item"
@change="changeStage"
>
<el-option
v-for="item in layerList"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-form>
</el-row>
<el-row>
<div id="container" className="container" />
</el-row>
@@ -70,7 +96,12 @@ export default {
},
allStructMsg: [],
msgTop: '200px',
msgLeft: '200px'
msgLeft: '200px',
layerList: [
{ 'label': '立库1层', 'value': 'AS_1' },
{ 'label': '立库2层', 'value': 'AS_2' },
{ 'label': '立库3层', 'value': 'AS_3' }
]
}
},
mounted() {
@@ -188,8 +219,13 @@ export default {
// 以下是设置参数显示值
for (const val in data1) {
if (val === 'storagevehicle_code' && data1.storagevehicle_code) {
const obj = { name: '木箱号', value: data1[val] }
this.arr.push(obj)
if (data1.sect_code === 'KTP01') {
const obj = { name: '托盘号', value: data1[val] }
this.arr.push(obj)
} else {
const obj = { name: '木箱号', value: data1[val] }
this.arr.push(obj)
}
}
if (val === 'quanlity_in_box' && data1.quanlity_in_box) {
const obj = { name: '子卷数', value: data1[val] }
@@ -207,6 +243,10 @@ export default {
const obj = { name: '木箱总重', value: data1[val] }
this.arr.push(obj)
}
if (val === 'container_weight' && data1.container_weight) {
const obj = { name: '子卷净重', value: data1[val] }
this.arr.push(obj)
}
}
if (data.length > 1) { // 显示子卷
for (let i = 0; i < data.length; i++) {
@@ -227,6 +267,9 @@ export default {
}
}
}
},
changeStage() {
this.initStageData()
}
}
}

View File

@@ -66,6 +66,9 @@ export default {
title: {
text: this.chartData.name,
subtext: this.chartData.pieSubTest,
subtextStyle: {
'color': '#333'
},
left: 'center'
},
tooltip: {
@@ -83,6 +86,13 @@ export default {
type: 'pie',
radius: '70%',
center: ['50%', '58%'],
avoidLabelOverlap: true,
label: {
show: true,
position: 'outside',
formatter: `{b}:{c}`,
fontSize: 14
},
data: this.chartData.data,
emphasis: {
itemStyle: {

View File

@@ -188,8 +188,13 @@ export default {
// 以下是设置参数显示值
for (const val in data1) {
if (val === 'storagevehicle_code' && data1.storagevehicle_code) {
const obj = { name: '木箱号', value: data1[val] }
this.arr.push(obj)
if (data1.sect_code === 'KTP01') {
const obj = { name: '托盘号', value: data1[val] }
this.arr.push(obj)
} else {
const obj = { name: '木箱号', value: data1[val] }
this.arr.push(obj)
}
}
if (val === 'quanlity_in_box' && data1.quanlity_in_box) {
const obj = { name: '子卷数', value: data1[val] }
@@ -207,6 +212,10 @@ export default {
const obj = { name: '木箱总重', value: data1[val] }
this.arr.push(obj)
}
if (val === 'container_weight' && data1.container_weight) {
const obj = { name: '子卷净重', value: data1[val] }
this.arr.push(obj)
}
}
if (data.length > 1) { // 显示子卷
for (let i = 0; i < data.length; i++) {

View File

@@ -188,8 +188,13 @@ export default {
// 以下是设置参数显示值
for (const val in data1) {
if (val === 'storagevehicle_code' && data1.storagevehicle_code) {
const obj = { name: '木箱号', value: data1[val] }
this.arr.push(obj)
if (data1.sect_code === 'KTP01') {
const obj = { name: '托盘号', value: data1[val] }
this.arr.push(obj)
} else {
const obj = { name: '木箱号', value: data1[val] }
this.arr.push(obj)
}
}
if (val === 'quanlity_in_box' && data1.quanlity_in_box) {
const obj = { name: '子卷数', value: data1[val] }
@@ -207,6 +212,10 @@ export default {
const obj = { name: '木箱总重', value: data1[val] }
this.arr.push(obj)
}
if (val === 'container_weight' && data1.container_weight) {
const obj = { name: '子卷净重', value: data1[val] }
this.arr.push(obj)
}
}
if (data.length > 1) { // 显示子卷
for (let i = 0; i < data.length; i++) {

View File

@@ -1,5 +1,47 @@
<template>
<div>
<el-row style="padding-top: 10px;padding-left: 10px;padding-bottom: 30px">
<el-form
:inline="true"
class="demo-form-inline"
label-position="right"
label-width="100px"
label-suffix=":"
>
<el-form-item label="发货区层数">
<el-select
v-model="stageParam"
size="mini"
placeholder="请选择"
class="filter-item"
@change="changeStage"
>
<el-option
v-for="item in layerList"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="有货点位">
<el-input
v-model="numData.haveMoney"
disabled
style="width: 80px"
size="mini"
/>
</el-form-item>
<el-form-item label="无货点位">
<el-input
v-model="numData.unMoney"
disabled
style="width: 80px"
size="mini"
/>
</el-form-item>
</el-form>
</el-row>
<el-row>
<div id="container" className="container" />
</el-row>
@@ -56,7 +98,7 @@ import '@logicflow/extension/lib/style/index.css'
import { LogicFlow } from '@logicflow/core'
import { registerCustomElement } from '@/views/system/logicflow/editor/components/node'
import { getStructByCodesFs, unLockPoint } from '@/views/system/monitor/device/structStage'
import { getStructByCodesFs, unLockPoint, queryNum } from '@/views/system/monitor/device/structStage'
let data = {}
let lf = ''
export default {
@@ -82,11 +124,21 @@ export default {
},
allStructMsg: [],
msgTop: '200px',
msgLeft: '200px'
msgLeft: '200px',
layerList: [
{ 'label': '发货1层', 'value': 'FS_1' },
{ 'label': '发货2层', 'value': 'FS_2' }
],
numData: {
haveMoney: null,
unMoney: null
},
layerNum: '1'
}
},
mounted() {
this.init()
this.queryNum()
},
beforeDestroy() {
// js提供的clearInterval方法用来清除定时器
@@ -176,10 +228,12 @@ export default {
this.timer = setInterval(() => { // 定时刷新设备的状态信息
console.log('定时器启动')
this.initStatus()
this.queryNum()
}, 10000)
},
initStatus() { // 初始化数据
let resion = {}
debugger
resion = lf.getGraphData().nodes.map(item => ({ id: item.id, struct_id: item.properties.struct_id }))
getStructByCodesFs(resion).then(res => {
this.allStructMsg = res
@@ -231,6 +285,10 @@ export default {
const obj = { name: '木箱总重', value: data1[val] }
this.arr.push(obj)
}
if (val === 'container_weight' && data1.container_weight) {
const obj = { name: '子卷净重', value: data1[val] }
this.arr.push(obj)
}
}
if (data.length > 1) { // 显示子卷
for (let i = 0; i < data.length; i++) {
@@ -264,11 +322,27 @@ export default {
unLockPoint(this.form).then(res => {
this.dialogFormVisible1 = false
this.initStageData()
this.queryNum()
this.$message({
message: '解绑成功',
type: 'success'
})
})
},
changeStage(value) {
if (value === 'FS_1') {
this.layerNum = '1'
} else if (value === 'FS_2') {
this.layerNum = '2'
}
this.initStageData()
this.queryNum()
},
queryNum() {
queryNum({ 'layer_num': this.layerNum }).then(res => {
this.numData.haveMoney = res.haveMoney
this.numData.unMoney = res.unMoney
})
}
}
}

View File

@@ -69,7 +69,7 @@
>
<el-option
v-for="item in dict.ST_INV_TYPE_MV"
:disabled="item.value === '21'"
:disabled="item.value === '21' || item.value === '31'"
:key="item.value"
:label="item.label"
:value="item.value"
@@ -117,6 +117,22 @@
:disabled="crud.status.view > 0"
/>
</el-form-item>
<el-form-item v-if="form.bill_type === '30'" label="所属区域" prop="block_num">
<el-select
v-model="form.block_num"
clearable
placeholder="所属区域"
class="filter-item"
:disabled="crud.status.view > 0"
>
<el-option
v-for="item in blockList"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="备注" prop="remark">
<label slot="label">备&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;注:</label>
<el-input
@@ -137,6 +153,7 @@
<slot name="left" />
<el-button
slot="left"
v-if="form.bill_type !== '30'"
class="filter-item"
type="primary"
icon="el-icon-plus"
@@ -229,7 +246,7 @@
</el-table-column>
</el-table>
<AddDtl :dialog-show.sync="dtlShow" :stor-id="storId" @tableChanged="tableChanged" />
<StructDiv ref="child" :dialog-show.sync="structShow" @tableChanged="structChanged" />
<StructDiv ref="child" :layer-num="layer_num" :stor-id="storId" :dialog-show.sync="structShow" @tableChanged="structChanged" />
</el-dialog>
</template>
@@ -243,9 +260,10 @@ import crudUserStor from '@/views/wms/basedata/st/userStor/userStor'
const defaultForm = {
bill_code: '',
stor_id: '',
stor_code: '',
stor_name: '',
stor_id: '1582991156504039424',
stor_code: 'AC01',
stor_name: '兰州仓库',
block_num: null,
bill_status: '10',
total_qty: '0',
detail_count: '0',
@@ -278,6 +296,42 @@ export default {
nowindex: '',
storlist: [],
invtypelist: [],
layer_num: null,
blockList: [
{ 'label': '101', 'value': '101' },
{ 'label': '103', 'value': '103' },
{ 'label': '105', 'value': '105' },
{ 'label': '107', 'value': '107' },
{ 'label': '109', 'value': '109' },
{ 'label': '111', 'value': '111' },
{ 'label': '113', 'value': '113' },
{ 'label': '115', 'value': '115' },
{ 'label': '117', 'value': '117' },
{ 'label': '119', 'value': '119' },
{ 'label': '121', 'value': '121' },
{ 'label': '201', 'value': '201' },
{ 'label': '203', 'value': '203' },
{ 'label': '205', 'value': '205' },
{ 'label': '207', 'value': '207' },
{ 'label': '209', 'value': '209' },
{ 'label': '211', 'value': '211' },
{ 'label': '213', 'value': '213' },
{ 'label': '215', 'value': '215' },
{ 'label': '217', 'value': '217' },
{ 'label': '219', 'value': '219' },
{ 'label': '221', 'value': '221' },
{ 'label': '301', 'value': '301' },
{ 'label': '303', 'value': '303' },
{ 'label': '305', 'value': '305' },
{ 'label': '307', 'value': '307' },
{ 'label': '309', 'value': '309' },
{ 'label': '311', 'value': '311' },
{ 'label': '313', 'value': '313' },
{ 'label': '315', 'value': '315' },
{ 'label': '317', 'value': '317' },
{ 'label': '319', 'value': '319' },
{ 'label': '321', 'value': '321' }
],
rules: {
stor_id: [
{ required: true, message: '仓库不能为空', trigger: 'blur' }
@@ -319,7 +373,6 @@ export default {
})
},
[CRUD.HOOK.afterToView]() {
debugger
handmovestor.getOutBillDtl({ 'moveinv_id': this.form.moveinv_id }).then(res => {
this.form.tableData = res
// 将明细变成不可编辑
@@ -331,7 +384,6 @@ export default {
})
},
bill_statusFormat(row) {
debugger
return this.dict.label.work_status[row.work_status]
},
quality_scodeFormat(row) {
@@ -350,6 +402,7 @@ export default {
this.form.stor_name = item.stor_name
}
})
this.form.tableData = []
},
async queryDtl() {
if (!this.form.stor_id) {
@@ -359,6 +412,7 @@ export default {
this.dtlShow = true
},
async queryStruct(index, row) {
this.layer_num = row.turnout_struct_code.charAt(row.turnout_struct_code.length - 1)
this.structShow = true
this.$refs.child.getMsg(false)
this.nowindex = index
@@ -467,13 +521,20 @@ export default {
}
},
[CRUD.HOOK.beforeSubmit]() {
if (this.form.tableData.length === 0) {
this.crud.notify('请至少选择一条明细', CRUD.NOTIFICATION_TYPE.INFO)
return false
}
for (let i = 0; i < this.form.tableData.length; i++) {
if (!this.form.tableData[i].edit) {
this.crud.notify('尚有未完成编辑的物料明细序号' + (i + 1) + ',请检查!')
if (this.form.bill_type !== '30') {
if (this.form.tableData.length === 0) {
this.crud.notify('请至少选择一条明细', CRUD.NOTIFICATION_TYPE.INFO)
return false
}
for (let i = 0; i < this.form.tableData.length; i++) {
if (!this.form.tableData[i].edit) {
this.crud.notify('尚有未完成编辑的物料明细序号' + (i + 1) + ',请检查!')
return false
}
}
} else {
if (!this.form.block_num) {
this.crud.notify('请选择所属区域', CRUD.NOTIFICATION_TYPE.INFO)
return false
}
}

View File

@@ -9,18 +9,36 @@
@close="close"
@open="open"
>
<el-row>
<el-col :span="5">
<!-- 搜索 -->
<!-- 搜索 -->
<el-form
:inline="true"
class="demo-form-inline"
label-position="right"
label-width="80px"
label-suffix=":"
>
<el-form-item label="库区">
<el-cascader
v-model="defaultList"
placeholder="库区"
:options="sects"
:props="{ checkStrictly: true }"
clearable
@change="sectQueryChange"
/>
</el-col>
<el-col :span="5">
</el-form-item>
<el-form-item label="木箱">
<el-input
v-model="query.package_box_sn"
clearable
size="mini"
placeholder="木箱号模糊查询"
style="width: 200px;"
class="filter-item"
@keyup.enter.native="crud.toQuery"
/>
</el-form-item>
<el-form-item label="货位">
<el-input
v-model="query.struct_code"
clearable
@@ -30,8 +48,8 @@
class="filter-item"
@keyup.enter.native="crud.toQuery"
/>
</el-col>
<el-col :span="5">
</el-form-item>
<el-form-item label="物料">
<el-input
v-model="query.remark"
clearable
@@ -41,8 +59,8 @@
class="filter-item"
@keyup.enter.native="crud.toQuery"
/>
</el-col>
<el-col :span="5">
</el-form-item>
<el-form-item label="批次">
<el-input
v-model="query.pcsn"
clearable
@@ -52,12 +70,9 @@
class="filter-item"
@keyup.enter.native="crud.toQuery"
/>
</el-col>
<el-col :span="4">
<rrOperation />
</el-col>
</el-row>
</el-form-item>
<rrOperation />
</el-form>
<!--表格渲染-->
<div style="padding: 10px" />
<el-table
@@ -135,7 +150,8 @@ export default {
dialogVisible: false,
opendtlParam: '',
sects: [],
rows: []
rows: [],
defaultList: ['1582991156504039424', '1582991348217286656']
}
},
watch: {
@@ -153,6 +169,9 @@ export default {
methods: {
[CRUD.HOOK.beforeRefresh]() {
this.crud.query.stor_id = this.storId
if (this.storId === this.defaultList[0]) {
this.crud.query.sect_id = this.defaultList[1]
}
},
open() {
crudUserStor.getSect({ 'stor_id': this.storId }).then(res => {
@@ -186,6 +205,7 @@ export default {
this.crud.query.stor_id = val[0]
this.crud.query.sect_id = val[1]
}
this.crud.toQuery()
},
submit() {
debugger

View File

@@ -73,4 +73,11 @@ export function getBoxIvt(data) {
data
})
}
export default { add, edit, del, getOutBillDtl,getStructIvt,confirm,getInvTypes,handdown, getBoxIvt }
export function checkReturn() {
return request({
url: '/api/handmovestor/checkReturn',
method: 'post'
})
}
export default { add, edit, del, getOutBillDtl,getStructIvt,confirm,getInvTypes,handdown, getBoxIvt, checkReturn }

View File

@@ -140,6 +140,17 @@
>
强制确认
</el-button>
<el-button
slot="right"
class="filter-item"
type="warning"
icon="el-icon-check"
size="mini"
:loading="checkReturnLoading"
@click="checkReturn"
>
盘点回库
</el-button>
</crudOperation>
<!--表格渲染-->
<el-table
@@ -231,7 +242,8 @@ export default {
mstrow: {},
loadingConfirm: false,
currentRow: null,
storlist: []
storlist: [],
checkReturnLoading: false
}
},
mounted: function() {
@@ -303,6 +315,17 @@ export default {
return row.bill_status !== '99'
},
taskOpen() {
this.loadingConfirm = true
debugger
const a = this.currentRow
handmovestor.handdown({ 'moveinv_id': this.currentRow.moveinv_id, 'bill_type': this.currentRow.bill_type }).then(res => {
this.querytable()
this.loadingConfirm = false
}).catch(() => {
this.loadingConfirm = false
})
},
taskOpen2() {
this.loadingConfirm = true
handmovestor.handdown({ 'moveinv_id': this.currentRow.moveinv_id }).then(res => {
this.querytable()
@@ -320,6 +343,16 @@ export default {
this.onSelectAll()
this.crud.toQuery()
this.handleCurrentChange(null)
},
checkReturn() {
this.checkReturnLoading = true
handmovestor.checkReturn().then(res => {
this.crud.toQuery()
this.crud.notify('操作成功!', CRUD.NOTIFICATION_TYPE.SUCCESS)
this.checkReturnLoading = false
}).catch(() => {
this.checkReturnLoading = false
})
}
}
}