下拉框

This commit is contained in:
2023-04-17 17:20:53 +08:00
parent 804afc3d27
commit d875f978a7
19 changed files with 684 additions and 1656 deletions

View File

@@ -1,7 +1,11 @@
<template>
<div class="dropdown-menu" :class="{'toggle_disabled': disabled === true}" ref="elemId">
<div v-if="inputed === false" class="fxrow dropdown-menu__item" @click="toggleItem">
<span class="dropdown-menu__title" :class="{'dropdown-menu__title_up': up === true,'dropdown-menu__title--active': open === true,'dropdown-menu__title--active_up': up === true && open === true}"><div class="ellipsis chose_T">{{active === '' ? '请选择' : option[active].label}}</div></span>
<div v-if="inputed === false" class="dropdown-menu__item dropdown-menu__item_1">
<div class="dropdown-menu__title" :class="{'dropdown-menu__title_up': up === true,'dropdown-menu__title--active': open === true,'dropdown-menu__title--active_up': up === true && open === true}" @click="toggleItem">
<div class="ellipsis chose_T">{{active === '' ? '请选择' : option[active].label}}</div>
<div class="iconfont dropdown_icon"></div>
</div>
<div v-show="active !== '' && cancleShow === true" class="iconfont error_icon" @click="cancleDropdown"></div>
</div>
<div v-if="inputed === true" class="fxrow dropdown-menu__item dropdown-menu__item_2">
<input
@@ -10,15 +14,18 @@
class="fxcol drop_input"
:value="value"
@input="handleChange($event)">
<span class="fxcol dropdown-menu__title dropdown-menu__title_2" :class="{'dropdown-menu__title_up': up === true,'dropdown-menu__title--active': open === true,'dropdown-menu__title--active_up': up === true && open === true}" @click="toggleItem"><div class="ellipsis">&nbsp;</div></span>
<span class="fxcol dropdown-menu__title dropdown-menu__title_2" :class="{'dropdown-menu__title_up': up === true,'dropdown-menu__title--active': open === true,'dropdown-menu__title--active_up': up === true && open === true}" @click="toggleItem">
<div class="ellipsis">&nbsp;</div>
<div class="iconfont dropdown_icon"></div>
</span>
</div>
<div v-show="open" class="dropdown-item" :style="up === false ? 'top: .9rem' : 'bottom: .9rem'">
<div v-show="open" class="dropdown-item" :style="up === false ? 'top:' + gap : 'bottom:' + gap">
<div ref="dropdown" class="dropdown-item__content">
<div v-show="option.length > 0" v-for="(e, i) in option" :key="e.value" @click="$emit('dropdownMenu', i)" class="fxrow dropdown-item__option dropdown-item__option--active">
<div v-show="option.length > 0" v-for="(e, i) in option" :key="e.value" @click="$emit('dropdownMenu', i)" class="fxrow dropdown-item__option dropdown-item__option--active" :style="{height: gap, lineHeight: gap}">
<div class="cell__title" :class="{'cell__title--active': i + '' === active}"><span>{{e.label}}</span></div>
<div class="iconfont check_icon" :class="{'check_icon--checked': i + '' === active}"></div>
</div>
<div v-show="option.length === 0" class="fxrow dropdown-item__option dropdown-item__option--active" @click="handleBlur">
<div v-show="option.length === 0" class="fxrow dropdown-item__option dropdown-item__option--active" :style="{height: gap, lineHeight: gap}" @click="handleBlur">
<div class="cell__title"><span>无匹配数据</span></div>
</div>
</div>
@@ -49,24 +56,43 @@ export default {
inputed: {
type: Boolean,
default: false
},
gap: {
type: String,
default: '.9rem'
},
autoHeight: {
type: Boolean,
default: false
},
cancleShow: {
type: Boolean,
default: false
}
},
methods: {
toggleItem () {
let cheight = document.body.clientHeight
let bottom = this.$refs.elemId.getBoundingClientRect().bottom
if (!this.autoHeight) {
this.$refs.dropdown.style.maxHeight = (cheight - bottom - 20) + 'px'
}
this.$emit('toggleItem')
},
handleChange ($event) {
let cheight = document.body.clientHeight
let bottom = this.$refs.elemId.getBoundingClientRect().bottom
if (!this.autoHeight) {
this.$refs.dropdown.style.maxHeight = (cheight - bottom - 20) + 'px'
}
this.$emit('input', $event.target.value)
this.$emit('handleChange', $event.target.value)
},
handleBlur () {
this.$emit('handleBlur')
},
cancleDropdown () {
this.$emit('cancleDropdown')
}
}
}
@@ -121,6 +147,8 @@ export default {
justify-content center
height inherit
width 100%
.dropdown-menu__item_1
_fj()
.dropdown-menu__item_2
align-items flex-start
.drop_input
@@ -132,23 +160,24 @@ export default {
line-height .86rem
.dropdown-menu__title
position relative
width 100%
padding 0 .15rem
width calc(100% - .5rem)
padding-left .15rem
color #606266
font-size .3rem
line-height .44rem
width 100%
display block
&::after
position absolute
top 50%
right .16rem
margin-top -.1rem
border .06rem solid
border-color transparent transparent #606266 #606266
transform rotate(-45deg)
opacity 0.8
content ''
_fj()
// display block
// &::after
// position absolute
// top 50%
// right .16rem
// margin-top -.1rem
// border .06rem solid
// border-color transparent transparent #606266 #606266
// transform rotate(-45deg)
// opacity 0.8
// content ''
.dropdown-menu__title_2
line-height .9rem
max-width 1.4rem
@@ -186,14 +215,14 @@ export default {
transition transform 0.3s
.dropdown-item__option
width 100%
height .9rem
// height .9rem
padding 0 .15rem
overflow hidden
.cell__title
height .9rem
height inherit
overflow hidden
span
_font(.3rem, .9rem, #606266)
_font(.3rem, inherit, #606266)
.cell__title--active span
color $red
.toggle_disabled
@@ -208,4 +237,19 @@ export default {
.chose_T
width 100%
overflow hidden
.top
top .9rem
.bottom
top .9rem
.dropdown_icon
font-size .25rem
color #dcdfe6
.error_icon
width .3rem
height .3rem
font-size .25rem
line-height .3rem
color #dcdfe6
border .01rem solid #dcdfe6
margin-right .15rem
</style>

View File

@@ -1,71 +1,28 @@
import {post, post2} from '@config/http.js'
import {post2} from '@config/http.js'
// import store from '../vuex/store'
// 指令管理
// 1.1 查询未完成指令
export const queryInstraction = (keyword, scode, ncode) => post2('api/ash/hand/insts', {
export const queryInstraction = (keyword, scode, ncode) => post2('api/hand/insts', {
keyword: keyword,
start_devicecode: scode,
next_devicecode: ncode
})
// 1.2 指令操作
export const instOperation = (uuid, type) => post2('api/ash/hand/inst', {
export const instOperation = (uuid, type) => post2('api/hand/inst', {
inst_uuid: uuid,
type: type
})
// 任务管理
// 1.1 查询未完成指令
export const queryTask = (keyword, scode, ncode) => post2('api/ash/hand/tasks', {
export const queryTask = (keyword, scode, ncode) => post2('api/hand/tasks', {
keyword: keyword,
start_devicecode: scode,
next_devicecode: ncode
})
// 1.2 指令操作
export const taskOperation = (uuid, type) => post2('api/ash/hand/taskoperation', {
export const taskOperation = (uuid, type) => post2('api/hand/taskoperation', {
inst_uuid: uuid,
type: type
})
// 送料
// 1.1查询工序设备点位
export const sendMaterialqueryDevice = () => post('api/pda/sendMaterial/queryDevice', {})
// 1.2压制叫料确定
export const sendMaterialconfirm = (wid, did, pid, pcode, qty, vcode, isfull) => post('api/pda/sendMaterial/confirm', {
workprocedure_id: wid,
device_id: did,
point_id: pid,
point_code: pcode,
qty: qty,
vehicle_code: vcode,
is_full: isfull
})
// 压制叫料
// 1.1查询点位
export const callMaterialqueryPoint = () => post('api/pda/callMaterial/queryPoint', {})
// 1.2压制叫料确定
export const callMaterialconfirm = (pid, pcode, pname, isfull, id, code, mname) => post('api/pda/callMaterial/confirm', {
point_id: pid,
point_code: pcode,
point_name: pname,
is_full: isfull,
material_id: id,
material_code: code,
material_name: mname
})
// 送空托盘
// 1.1查询区域
export const sendEmptyqueryArea = () => post('api/pda/sendEmpty/queryArea', {})
// 1.2根据区域查询点位
export const sendEmptyqueryPointByArea = (acode) => post('api/pda/sendEmpty/queryPointByArea', {
area_code: acode
})
// 1.3 送空托盘确定
export const sendEmptyconfirm = (pid, pcode, pname, vcode) => post('api/pda/sendEmpty/confirm', {
point_id: pid,
point_code: pcode,
point_name: pname,
vehicle_code: vcode
})

View File

@@ -5,76 +5,62 @@ export const loginApi = (user, password) => post('api/pda/login', {
username: user,
password: password
})
// 手持登陆查询菜单权限
export const authority = (id) => post('api/pda/authority', {
accountId: id
})
// 修改密码
export const updatePass = (Rfold, Rfnew) => post('api/pda/updatePass', {
RfoldPass: Rfold,
RfnewPass: Rfnew
// 查询区域
// export const pdaRegion = (func) => post('api/pda/region', {
// func: func
// })
export const pdaRegion = (func) => {
let res = {
code: '1',
result: [{region_code: '1', region_name: 'aa'}, {region_code: '2', region_name: 'bb'}, {region_code: '3', region_name: 'cc'}]
}
return res
}
// 根据区域查询点位
// export const pdaPoint = (func, code) => post('api/pda/point', {
// func: func,
// region_code: code
// })
export const pdaPoint = (func, code) => {
let res = {
code: '1',
result: [{point_code: '1', point_name: 'aa'}, {point_code: '2', point_name: 'bb'}, {point_code: '3', point_name: 'cc'}]
}
return res
}
// 查询设备
// export const pdaDevice = (func) => post('api/pda/device', {
// func: func
// })
export const pdaDevice = (func) => {
let res = {
code: '1',
result: [{device_code: '1', device_name: 'aa'}, {device_code: '2', device_name: 'bb'}, {device_code: '3', device_name: 'cc'}]
}
return res
}
// 不合格品上报
export const pdaReport = (code, qty) => post('api/pda/report', {
device_code: code,
unqualified_qty: qty
})
/** 呼叫空托盘 */
// 1.1查询区域
export const queryArea = () => post('api/pda/callEmpty/queryArea', {})
// 1.2根据区域查询点位
export const queryPointByArea = (code) => post('api/pda/callEmpty/queryPointByArea', {
area_code: code
})
// 1.3 呼叫空托盘确定
export const callEmptyConfirm = (id, code, pname, acode) => post('api/pda/callEmpty/confirm', {
point_id: id,
point_code: code,
point_name: pname,
area_code: acode
})
/** 托盘点位绑定 */
// 1.1查询区域
export const queryArea1 = () => post('api/pda/sendEmpty/queryArea', {})
// 1.2根据区域查询点位
export const queryPointByArea1 = (code) => post('api/pda/sendEmpty/queryPointByArea', {
area_code: code
})
// 1.2托盘点位绑定确认
export const bindingConfirm = (code, vcode, status, is) => post('api/pda/binding/confirm', {
// 送料
export const sendMaterial = (code, vcode, qty, weight, is) => post('api/pda/sendMaterial', {
point_code: code,
vehicle_code: vcode,
point_status: status,
is_lock: is
qty: qty,
weight: weight,
is_full: is
})
/** 盘点管理 */
// 1.1查询物料
export const queryMaterial = (page, size) => post('api/pda/check/queryMaterial', {
page: page,
size: size
})
// 1.2查询盘点单据
export const queryIvt = (suuid, tuuid, page, size) => post('api/pda/check/queryIvt', {
sect_uuid: suuid,
struct_uuid: tuuid,
page: page,
size: size
})
// 1.3盘点确定
export const checkConfirm = (arr) => post('api/pda/check/confirm', {
JSONarray: arr
})
// 1.4查询库区
export const querySectCode = () => post('api/pda/check/querySectCode', {})
// 1.5查询仓位
export const queryStructCode = (uuid) => post('api/pda/check/queryStructCode', {
sect_uuid: uuid
})
/** 液压机出库 */
// 1.1查询点位
export const queryPoint = () => post('api/pda/pressure/queryPoint', {})
// 1.5查询仓位
export const pressureConfirm = (id, code, pname) => post('api/pda/pressure/confirm', {
point_id: id,
point_code: code,
point_name: pname
// 叫料
export const callMaterial = (code) => post('api/pda/callMaterial', {
point_code: code
})

View File

@@ -55,11 +55,7 @@ export const post = (sevmethod, params) => {
.then(response => {
resolve(response.data)
}, error => {
if (error.message === null) {
Dialog('null')
} else {
Dialog(error.message)
}
reject(error.message)
})
.catch((error) => {

View File

@@ -1,46 +0,0 @@
import axios from 'axios'
import { Dialog } from './mUtils.js'
import store from '../vuex/store'
axios.defaults.timeout = 50000
axios.defaults.headers.post['Content-Type'] = 'application/json;charset=UTF-8'
axios.interceptors.request.use(
config => {
if (config.method === 'post') {
if (!config.data.flag) {
config.data = config.data
} else {
config.data = config.data.formData
}
}
return config
},
error => {
Dialog('错误的传参')
return Promise.reject(error)
}
)
axios.interceptors.response.use(
response => {
return Promise.resolve(response)
},
error => {
return Promise.reject(error)
}
)
export const post = (sevmethod, params) => {
return new Promise((resolve, reject) => {
axios.post(`${store.getters.acsUrl}/` + sevmethod, params)
.then(response => {
resolve(response.data)
}, error => {
reject(error.message)
})
.catch((error) => {
reject(error)
})
})
}

View File

@@ -16,16 +16,11 @@
<div class="con">
<ul>
<!-- <li v-for="e in menuList" :key="e.menu_id" @click="toPage(e)">{{e.name}}</li> -->
<li @click="goInner('/ZlManage')">指令管理</li>
<li @click="goInner('/TaskManage')">任务管理</li>
<li @click="goInner('/SendMater')">送料</li>
<li @click="goInner('/PressCallMater')">压制叫</li>
<li @click="goInner('/SendEmptyPallet')">送空托盘</li>
<li @click="goInner('/CallEmptyPallet')">呼叫空托盘</li>
<li @click="goInner('/MechineOutstore')">液压机出库</li>
<li @click="goInner('/BindPalletPoint')">托盘点位绑定</li>
<li @click="goInner('/CheckManage')">盘点管理</li>
<li @click="goInner('/Password')">修改密码</li>
<li @click="goInner('/zlmanage')">指令管理</li>
<li @click="goInner('/taskmanage')">任务管理</li>
<li @click="goInner('/belowgradereport')">不合格品上报</li>
<li @click="goInner('/sendmater')"></li>
<li @click="goInner('/callmater')">叫料</li>
</ul>
</div>
</section>

View File

@@ -0,0 +1,154 @@
<template>
<section>
<nav-bar title="不合格品上报"></nav-bar>
<section class="content mgt186">
<div class="filter-wraper">
<div class="bottom-filter-tip">
<div class="filter-label txtjustify">设备编码</div>
<div class="fxcol mgl20 visible" >
<dropdown-menu
:option="optionNew1"
:active="active1"
:open="open1"
:inputed="true"
v-model="val1"
@handleBlur="handleBlur1"
@handleChange="handleChange1"
@toggleItem="toggleItem1"
@dropdownMenu="dropdownMenu1">
</dropdown-menu>
</div>
</div>
<div class="bottom-filter-tip">
<div class="filter-label txtjustify">不合格数量</div>
<div class="fxcol mgl20">
<input class="filter-input filter-scan-input" v-model="val2" @input="val2 = val2.replace(/[^\d]/g,'')">
</div>
<div class="filter-unit"></div>
</div>
</div>
</section>
<section class="submit-bar">
<button class="btn submit-button" :class="{'btn-disabled' : val1 === '' || val2 === ''}" :disabled="disabled1" @click="_pdaReport">确定</button>
<button class="btn submit-button" @click="toCancle">取消</button>
</section>
</section>
</template>
<script>
import NavBar from '@components/NavBar.vue'
import DropdownMenu from '@components/DropdownMenu.vue'
import {pdaDevice, pdaReport} from '@config/getData2.js'
export default {
name: 'BelowGradeReport',
components: {
NavBar,
DropdownMenu
},
data () {
return {
option1: [],
optionNew1: [],
active1: '',
open1: false,
val1: '',
val2: '',
disabled1: false
}
},
created () {
this._pdaDevice()
},
methods: {
/** 查询设备 */
async _pdaDevice () {
let res = await pdaDevice('unqualified_report')
if (res.code === '1') {
this.option1 = [...res.result]
this.option1.map(el => {
this.$set(el, 'value', el.device_code)
this.$set(el, 'label', el.device_name)
})
} else {
this.Dialog(res.desc)
}
},
/** 确认 */
async _pdaReport () {
this.disabled1 = true
if (this.val1 === '' || this.val2 === '') {
this.disabled1 = false
return
}
let code = ''
this.option1.map(el => {
if (el.device_name === this.val1) {
code = el.device_code
}
})
try {
let res = await pdaReport(code, this.val2)
if (res.code === '1') {
this.toast(res.desc)
this.toCancle()
} else {
this.Dialog(res.desc)
}
this.disabled1 = false
} catch (e) {
this.disabled1 = false
}
},
/** 取消 */
toCancle () {
this.val2 = ''
this.active1 = ''
this.val1 = ''
this.disabled1 = false
},
/** 模糊匹配 */
selectMatchItem (lists, keyWord) {
let resArr = []
lists.filter((item) => {
if (item.device_name.indexOf(keyWord) > -1) {
resArr.push(item)
}
})
return resArr
},
handleChange1 (e) {
if (!e) {
this.active1 = ''
}
this.optionNew1 = []
this.optionNew1 = this.selectMatchItem(this.option1, e)
this.open1 = true
},
handleBlur1 () {
this.open1 = false
this.val1 = ''
},
toggleItem1 () {
if (!this.open1) {
this.optionNew1 = this.option1
this.active1 = ''
this.optionNew1.map((e, i) => {
if (e.label === this.val1) {
this.active1 = i + ''
}
})
this.open1 = true
} else {
this.open1 = false
}
},
dropdownMenu1 (i) {
this.active1 = i + ''
this.open1 = false
if (this.optionNew1.length > 0) {
this.val1 = this.optionNew1[i].label
}
}
}
}
</script>

View File

@@ -1,205 +0,0 @@
<template>
<section>
<nav-bar title="托盘点位绑定"></nav-bar>
<section class="content mgt186 mgb110">
<div class="filter-wraper">
<search-box
label="托盘条码"
v-model="val1"
:seaShow="false"
></search-box>
<div class="bottom-filter-tip">
<div class="filter-label txtjustify">当前区域</div>
<div class="fxcol mgl20 visible" >
<dropdown-menu
:option="option1"
:active="active1"
:open="open1"
@toggleItem="toggleItem1"
@dropdownMenu="dropdownMenu1">
</dropdown-menu>
</div>
</div>
<div class="bottom-filter-tip">
<div class="filter-label txtjustify">当前点位</div>
<div class="fxcol mgl20 visible" >
<dropdown-menu
:option="option2"
:active="active2"
:open="open2"
@toggleItem="toggleItem2"
@dropdownMenu="dropdownMenu2">
</dropdown-menu>
</div>
</div>
<div class="bottom-filter-tip">
<div class="filter-label txtjustify">点位状态</div>
<div class="fxcol mgl20 visible" >
<dropdown-menu
:option="option3"
:active="active3"
:open="open3"
@toggleItem="toggleItem3"
@dropdownMenu="dropdownMenu3">
</dropdown-menu>
</div>
</div>
<div class="bottom-filter-tip">
<div class="filter-label txtjustify">是否锁定</div>
<div class="fxcol mgl20 visible" >
<dropdown-menu
:option="option4"
:active="active4"
:open="open4"
@toggleItem="toggleItem4"
@dropdownMenu="dropdownMenu4">
</dropdown-menu>
</div>
</div>
</div>
</section>
<section class="submit-bar">
<button class="btn submit-button" :class="{'btn-disabled' : active2 === ''}" :disabled="disabled1" @click="_bindingConfirm">确定</button>
<button class="btn submit-button" @click="toCancle">取消</button>
</section>
</section>
</template>
<script>
import NavBar from '@components/NavBar.vue'
import SearchBox from '@components/SearchBox.vue'
import DropdownMenu from '@components/DropdownMenu.vue'
import {queryArea1, queryPointByArea1, bindingConfirm} from '@config/getData2.js'
export default {
name: 'BindPalletPoint',
components: {
NavBar,
SearchBox,
DropdownMenu
},
data () {
return {
val1: '',
option1: [],
active1: '',
open1: false,
option2: [],
active2: '',
open2: false,
option3: [{value: '00', label: '空位'}, {value: '01', label: '空托盘'}, {value: '02', label: '有箱有料'}],
active3: '1',
open3: false,
option4: [{value: '1', label: '是'}, {value: '2', label: '否'}],
active4: '1',
open4: false,
disabled1: false
}
},
created () {
this._queryArea1()
},
methods: {
/** 查询区域 */
async _queryArea1 () {
let res = await queryArea1()
if (res.code === '1') {
this.option1 = [...res.result]
this.option1.map(el => {
this.$set(el, 'value', el.area_code)
this.$set(el, 'label', el.area_name)
})
} else {
this.Dialog(res.desc)
}
},
/** 查询点位 */
async _queryPointByArea1 (code) {
let res = await queryPointByArea1(code)
if (res.code === '1') {
this.option2 = [...res.result]
this.option2.map(el => {
this.$set(el, 'value', el.point_id)
this.$set(el, 'label', el.point_name)
})
} else {
this.Dialog(res.desc)
}
},
/** 确认 */
async _bindingConfirm () {
this.disabled1 = true
if (this.active2 === '') {
this.disabled1 = false
return
}
try {
let res = await bindingConfirm(this.option2[this.active2].point_code, this.val1, this.option3[this.active3].value, this.option4[this.active4].value)
if (res.code === '1') {
this.toast(res.desc)
this.toCancle()
} else {
this.Dialog(res.desc)
}
this.disabled1 = false
} catch (e) {
this.disabled1 = false
}
},
/** 取消 */
toCancle () {
this.val1 = ''
this.active1 = ''
this.active2 = ''
this.active3 = '1'
this.active4 = '1'
this.disabled1 = false
},
toggleItem1 () {
if (!this.open1) {
this.open1 = true
} else {
this.open1 = false
}
},
dropdownMenu1 (i) {
this.active1 = i + ''
this.open1 = false
this._queryPointByArea1(this.option1[this.active1].area_code)
this.active2 = ''
},
toggleItem2 () {
if (!this.open2) {
this.open2 = true
} else {
this.open2 = false
}
},
dropdownMenu2 (i) {
this.active2 = i + ''
this.open2 = false
},
toggleItem3 () {
if (!this.open3) {
this.open3 = true
} else {
this.open3 = false
}
},
dropdownMenu3 (i) {
this.active3 = i + ''
this.open3 = false
},
toggleItem4 () {
if (!this.open4) {
this.open4 = true
} else {
this.open4 = false
}
},
dropdownMenu4 (i) {
this.active4 = i + ''
this.open4 = false
}
}
}
</script>

View File

@@ -1,137 +0,0 @@
<template>
<section>
<nav-bar title="呼叫空托盘"></nav-bar>
<section class="content mgt186 mgb110">
<div class="filter-wraper">
<div class="bottom-filter-tip">
<div class="filter-label txtjustify">区域</div>
<div class="fxcol mgl20 visible" >
<dropdown-menu
:option="option1"
:active="active1"
:open="open1"
@toggleItem="toggleItem1"
@dropdownMenu="dropdownMenu1">
</dropdown-menu>
</div>
</div>
<div class="bottom-filter-tip">
<div class="filter-label txtjustify">点位</div>
<div class="fxcol mgl20 visible" >
<dropdown-menu
:option="option2"
:active="active2"
:open="open2"
@toggleItem="toggleItem2"
@dropdownMenu="dropdownMenu2">
</dropdown-menu>
</div>
</div>
</div>
</section>
<section class="submit-bar">
<button class="btn submit-button" :class="{'btn-disabled' : active1 === '' || active2 === ''}" :disabled="disabled1" @click="_callEmptyConfirm">确定</button>
<button class="btn submit-button" @click="toCancle">取消</button>
</section>
</section>
</template>
<script>
import NavBar from '@components/NavBar.vue'
import DropdownMenu from '@components/DropdownMenu.vue'
import {queryArea, queryPointByArea, callEmptyConfirm} from '@config/getData2.js'
export default {
name: 'CallEmptyPallet',
components: {
NavBar,
DropdownMenu
},
data () {
return {
option1: [],
active1: '',
open1: false,
option2: [],
active2: '',
open2: false,
disabled1: false
}
},
created () {
this._queryArea()
},
methods: {
/** 查询区域 */
async _queryArea () {
let res = await queryArea()
if (res.code === '1') {
this.option1 = [...res.result]
this.option1.map(el => {
this.$set(el, 'value', el.area_code)
this.$set(el, 'label', el.area_name)
})
} else {
this.Dialog(res.desc)
}
},
/** 根据区域查询点位 */
async _queryPointByArea (code) {
let res = await queryPointByArea(code)
if (res.code === '1') {
this.option2 = [...res.result]
this.option2.map(el => {
this.$set(el, 'value', el.point_id)
this.$set(el, 'label', el.point_name)
})
} else {
this.Dialog(res.desc)
}
},
/** 确定 */
async _callEmptyConfirm () {
this.disabled1 = true
if (this.active1 === '' || this.active2 === '') {
this.disabled1 = false
return
}
let res = await callEmptyConfirm(this.option2[this.active2].point_id, this.option2[this.active2].point_code, this.option2[this.active2].point_name, this.option1[this.active1].area_code)
if (res.code === '1') {
this.toast(res.desc)
} else {
this.Dialog(res.desc)
}
},
/** 取消 */
toCancle () {
this.active1 = ''
this.option2 = []
this.active2 = ''
this.disabled1 = false
},
toggleItem1 () {
if (!this.open1) {
this.open1 = true
} else {
this.open1 = false
}
},
dropdownMenu1 (i) {
this.active1 = i + ''
this.open1 = false
this._queryPointByArea(this.option1[this.active1].area_code)
this.active2 = ''
},
toggleItem2 () {
if (!this.open2) {
this.open2 = true
} else {
this.open2 = false
}
},
dropdownMenu2 (i) {
this.active2 = i + ''
this.open2 = false
}
}
}
</script>

View File

@@ -0,0 +1,220 @@
<template>
<section>
<nav-bar title="叫料"></nav-bar>
<section class="content mgt186">
<div class="filter-wraper">
<div class="bottom-filter-tip">
<div class="filter-label txtjustify">区域</div>
<div class="fxcol mgl20 visible" >
<dropdown-menu
:option="optionNew1"
:active="active1"
:open="open1"
:inputed="true"
v-model="val1"
@handleBlur="handleBlur1"
@handleChange="handleChange1"
@toggleItem="toggleItem1"
@dropdownMenu="dropdownMenu1">
</dropdown-menu>
</div>
</div>
<div class="bottom-filter-tip">
<div class="filter-label txtjustify">点位</div>
<div class="fxcol mgl20 visible" >
<dropdown-menu
:option="optionNew2"
:active="active2"
:open="open2"
:inputed="true"
v-model="val2"
@handleBlur="handleBlur2"
@handleChange="handleChange2"
@toggleItem="toggleItem2"
@dropdownMenu="dropdownMenu2">
</dropdown-menu>
</div>
</div>
</div>
</section>
<section class="submit-bar">
<button class="btn submit-button" :class="{'btn-disabled' : val2 === ''}" :disabled="disabled1" @click="_callMaterial">确定</button>
<button class="btn submit-button" @click="toCancle">取消</button>
</section>
</section>
</template>
<script>
import NavBar from '@components/NavBar.vue'
import DropdownMenu from '@components/DropdownMenu.vue'
import {pdaRegion, pdaPoint, callMaterial} from '@config/getData2'
export default {
name: 'BindPalletPoint',
components: {
NavBar,
DropdownMenu
},
data () {
return {
option1: [],
optionNew1: [],
active1: '',
open1: false,
val1: '',
option2: [],
optionNew2: [],
active2: '',
open2: false,
val2: '',
disabled1: false
}
},
created () {
this._pdaRegion()
},
methods: {
/** 查询区域 */
async _pdaRegion () {
let res = await pdaRegion('send_material')
if (res.code === '1') {
this.option1 = [...res.result]
this.option1.map(el => {
this.$set(el, 'value', el.region_code)
this.$set(el, 'label', el.region_name)
})
} else {
this.Dialog(res.desc)
}
},
/** 模糊匹配 */
selectMatchItem (type, lists, keyWord) {
let resArr = []
lists.filter((item) => {
if (type === '1' && item.region_name.indexOf(keyWord) > -1) {
resArr.push(item)
}
if (type === '2' && item.point_name.indexOf(keyWord) > -1) {
resArr.push(item)
}
})
return resArr
},
handleChange1 (e) {
if (!e) {
this.active1 = ''
}
this.optionNew1 = []
this.optionNew1 = this.selectMatchItem('1', this.option1, e)
this.open1 = true
},
handleBlur1 () {
this.open1 = false
this.val1 = ''
},
toggleItem1 () {
if (!this.open1) {
this.optionNew1 = this.option1
this.active1 = ''
this.optionNew1.map((e, i) => {
if (e.label === this.val1) {
this.active1 = i + ''
}
})
this.open1 = true
} else {
this.open1 = false
}
},
dropdownMenu1 (i) {
this.active1 = i + ''
this.open1 = false
if (this.optionNew1.length > 0) {
this.val1 = this.optionNew1[i].label
this.val2 = ''
this.active2 = ''
this._pdaPoint(this.optionNew1[i].value)
}
},
/** 查询点位 */
async _pdaPoint (code) {
let res = await pdaPoint('send_material', code)
if (res.code === '1') {
this.option2 = [...res.result]
this.option2.map(el => {
this.$set(el, 'value', el.point_code)
this.$set(el, 'label', el.point_name)
})
} else {
this.Dialog(res.desc)
}
},
handleChange2 (e) {
if (!e) {
this.active2 = ''
}
this.optionNew2 = []
this.optionNew2 = this.selectMatchItem('2', this.option2, e)
this.open2 = true
},
handleBlur2 () {
this.open2 = false
this.val2 = ''
},
toggleItem2 () {
if (!this.open2) {
this.optionNew2 = this.option2
this.active2 = ''
this.optionNew2.map((e, i) => {
if (e.label === this.val2) {
this.active2 = i + ''
}
})
this.open2 = true
} else {
this.open2 = false
}
},
dropdownMenu2 (i) {
this.active2 = i + ''
this.open2 = false
if (this.optionNew2.length > 0) {
this.val2 = this.optionNew2[i].label
}
},
/** 确认 */
async _callMaterial () {
this.disabled1 = true
if (this.val2 === '') {
this.disabled1 = false
return
}
try {
let code = ''
this.option2.map(el => {
if (el.point_name === this.val2) {
code = el.point_code
}
})
let res = await callMaterial(code)
if (res.code === '1') {
this.toast(res.desc)
this.toCancle()
} else {
this.Dialog(res.desc)
}
this.disabled1 = false
} catch (e) {
this.disabled1 = false
}
},
/** 取消 */
toCancle () {
this.val1 = ''
this.val2 = ''
this.active1 = ''
this.active2 = ''
this.disabled1 = false
}
}
}
</script>

View File

@@ -1,293 +0,0 @@
<template>
<section>
<nav-bar title="盘点管理"></nav-bar>
<section class="content mgt186 mgb110" v-infinite-scroll="loadMore" infinite-scroll-disabled="busy" infinite-scroll-distance="0" infinite-scroll-immediate-check="false">
<div class="filter-wraper">
<div class="filter-wraper">
<div class="bottom-filter-tip">
<div class="filter-label txtjustify">库区</div>
<div class="fxcol mgl20 visible">
<dropdown-menu
:option="option1"
:active="active1"
:open="open1"
@toggleItem="toggleItem1"
@dropdownMenu="dropdownMenu1">
</dropdown-menu>
</div>
</div>
</div>
<div class="bottom-filter-tip">
<div class="filter-label txtjustify">仓位</div>
<div class="fxcol mgl20 visible">
<dropdown-menu
:option="option2"
:active="active2"
:open="open2"
@toggleItem="toggleItem2"
@dropdownMenu="dropdownMenu2">
</dropdown-menu>
</div>
</div>
</div>
<div class="grid-wraper">
<div class="left_fixed">
<table class="layout-t left_layout_t">
<tr>
<th><button class="iconfont check_icon check_icon--squa" :class="{'check_icon--checked': allcheckActive}" @click="allCheck"></button></th>
<th>仓位号</th>
</tr>
<tr v-for="e in dataList" :key="e.billdtl_uuid" @click="toCheck(e)">
<td><button class="iconfont check_icon check_icon--squa" :class="{'check_icon--checked': e.checked}"></button></td>
<td>{{e.struct_code}}</td>
</tr>
</table>
</div>
<div class="slide">
<table class="layout-t">
<tr>
<th>载具号</th>
<th>物料编码</th>
<th>物料名称</th>
<th>库存数量</th>
<th>盘点数量</th>
</tr>
<tr v-for="e in dataList" :key="e.billdtl_uuid">
<td><input type="text" class="sin_input" v-model="e.vehicle_code"></td>
<td><div v-show="e.material_code !== '' && e.material_code !== undefined" class="click_div" @click="searchMater(e)">{{e.material_code}}</div></td>
<td>{{e.material_name}}</td>
<td>{{e.canuse_qty}}</td>
<td><input type="number" class="sin_input" v-model="e.check_qty"></td>
</tr>
</table>
</div>
</div>
<div class="loading-tips">{{desc}}</div>
</section>
<section class="submit-bar">
<button class="btn submit-button" @click="_queryIvt">查询</button>
<button class="btn submit-button" :class="{'btn-disabled': checkArr.length === 0}" :disabled="disabled1" @click="_checkConfirm">确定</button>
<button class="btn submit-button" @click="toCancle">取消</button>
</section>
</section>
</template>
<script>
import NavBar from '@components/NavBar.vue'
import DropdownMenu from '@components/DropdownMenu.vue'
import {querySectCode, queryStructCode, queryIvt, checkConfirm} from '@config/getData2.js'
export default {
name: 'CheckManage',
components: {
NavBar,
DropdownMenu
},
data () {
return {
option1: [],
active1: '',
open1: false,
option2: [],
active2: '',
open2: false,
dataList: [],
checkArr: [],
allcheckActive: false,
page: 1,
size: '10',
busy: false,
desc: '',
disabled1: false
}
},
beforeRouteLeave (to, from, next) {
if (to.path === '/home' || to.path === '/login') {
this.$store.dispatch('setKeepAlive', [])
}
next()
},
activated () {
if (this.$route.query.uuid) {
this.dataList.map(el => {
if (el.billdtl_uuid === this.$route.query.uuid) {
el.material_code = this.$store.getters.receiveMaterObj.material_code
el.material_name = this.$store.getters.receiveMaterObj.material_name
el.material_uuid = this.$store.getters.receiveMaterObj.material_uuid
}
})
}
},
created () {
this._querySectCode()
},
methods: {
/** 查询库区 */
async _querySectCode () {
let res = await querySectCode()
if (res.code === '1') {
this.option1 = [...res.result]
this.option1.map(el => {
this.$set(el, 'value', el.sect_uuid)
this.$set(el, 'label', el.sect_name)
})
} else {
this.Dialog(res.desc)
}
},
/** 查询仓位 */
async _queryStructCode (uuid) {
let res = await queryStructCode(uuid)
if (res.code === '1') {
this.option2 = [...res.result]
this.option2.map(el => {
this.$set(el, 'value', el.struct_uuid)
this.$set(el, 'label', el.struct_name)
})
} else {
this.Dialog(res.desc)
}
},
/** grid */
async _queryIvt () {
this.page = 1
this.busy = false
this.desc = ''
let uuid1 = ''
let uuid2 = ''
if (this.active1) {
uuid1 = this.option1[this.active1].sect_uuid
}
if (this.active2) {
uuid2 = this.option2[this.active2].struct_uuid
}
let res = await queryIvt(uuid1, uuid2, this.page + '', this.size)
if (res.code === '1') {
this.dataList = []
this.pkId = ''
res.result.content.map(el => {
el.check_qty = Number(el.canuse_qty).toFixed(3) + ''
el.check_qty = Number(el.check_qty).toFixed(3) + ''
this.$set(el, 'checked', false)
})
this.dataList = [...res.result.content]
if (res.result.content.length < 10) {
this.busy = true
this.desc = '已加载全部数据'
}
} else {
this.Dialog(res.desc)
this.desc = res.desc
}
},
async loadMore () {
this.busy = true
this.page++
let uuid1 = ''
let uuid2 = ''
if (this.active1) {
uuid1 = this.option1[this.active1].sect_uuid
}
if (this.active2) {
uuid2 = this.option2[this.active2].struct_uuid
}
let res = await queryIvt(uuid1, uuid2, this.page + '', this.size)
if (res.code === '1') {
res.result.content.map(el => {
el.check_qty = Number(el.canuse_qty).toFixed(3) + ''
el.check_qty = Number(el.check_qty).toFixed(3) + ''
this.$set(el, 'checked', false)
})
this.dataList = [...this.dataList, ...res.result.content]
if (res.result.content.length < 10) {
this.busy = true
this.desc = '已加载全部数据'
} else {
this.busy = false
}
} else {
this.Dialog(res.desc)
this.desc = res.desc
}
},
/** 修改物料编码 */
searchMater (e) {
this.$router.push({
path: '/SearchMater',
query: {uuid: e.billdtl_uuid}
})
},
/** 确定 */
async _checkConfirm () {
this.disabled1 = true
if (!this.checkArr.length) {
this.disabled1 = false
return
}
try {
let res = await checkConfirm(this.checkArr)
if (res.code === '1') {
this.toast(res.desc)
this._queryIvt()
} else {
this.Dialog(res.desc)
}
this.disabled1 = false
} catch (e) {
this.disabled1 = false
}
},
toCancle () {
this.active1 = ''
this.active2 = ''
this.dataList = []
this.checkArr = []
this.allcheckActive = false
this.page = 1
this.busy = false
this.desc = ''
this.disabled1 = false
this.$store.dispatch('receiveMaterObj', {})
},
toggleItem1 () {
if (!this.open1) {
this.open1 = true
} else {
this.open1 = false
}
},
dropdownMenu1 (i) {
this.active1 = i + ''
this.open1 = false
this.active2 = ''
this._queryStructCode(this.option1[this.active1].sect_uuid)
},
toggleItem2 () {
if (!this.open2) {
this.open2 = true
} else {
this.open2 = false
}
},
dropdownMenu2 (i) {
this.active2 = i + ''
this.open2 = false
},
allCheck () {
this.allcheckActive = this.checkArr.length !== this.dataList.length
this.dataList.map(el => { el.checked = this.allcheckActive })
this.checkArr = this.dataList.filter(i => { return i.checked === true })
},
toCheck (e) {
e.checked = !e.checked
this.checkArr = this.dataList.filter(i => { return i.checked === true })
this.allcheckActive = this.checkArr.length === this.dataList.length
}
}
}
</script>
<style lang="stylus" scoped>
>>>.content
height calc(100% - 1.96rem)
overflow-y auto
</style>

View File

@@ -1,104 +0,0 @@
<template>
<section>
<nav-bar title="液压机出库"></nav-bar>
<section class="content mgt186">
<div class="filter-wraper">
<div class="bottom-filter-tip">
<div class="filter-label txtjustify">点位</div>
<div class="fxcol mgl20 visible" >
<dropdown-menu
:option="option1"
:active="active1"
:open="open1"
@toggleItem="toggleItem1"
@dropdownMenu="dropdownMenu1">
</dropdown-menu>
</div>
</div>
</div>
</section>
<section class="submit-bar">
<button class="btn submit-button" :class="{'btn-disabled' : active1 === ''}" :disabled="disabled" @click="_pressureConfirm">确定</button>
<button class="btn submit-button" @click="toCancle">取消</button>
</section>
</section>
</template>
<script>
import NavBar from '@components/NavBar.vue'
import DropdownMenu from '@components/DropdownMenu.vue'
import {queryPoint, pressureConfirm} from '@config/getData2'
export default {
name: 'MechineOutstore',
components: {
NavBar,
DropdownMenu
},
data () {
return {
option1: [],
active1: '',
open1: false,
disabled: false
}
},
created () {
this._queryPoint()
},
methods: {
/** 1.1查询点位 */
async _queryPoint () {
let res = await queryPoint()
if (res.code === '1') {
this.option1 = [...res.result]
this.option1.map(el => {
this.$set(el, 'value', el.point_code)
this.$set(el, 'label', el.point_name)
})
} else {
this.Dialog(res.desc)
}
},
/** 确定 */
async _pressureConfirm () {
this.disabled = true
if (this.active1 === '') {
this.disabled = false
return
}
try {
let res = await pressureConfirm(this.option1[this.active1].point_id, this.option1[this.active1].point_code, this.option1[this.active1].point_name)
if (res.code === '1') {
this.toast(res.desc)
this.toCancle()
} else {
this.Dialog(res.desc)
}
this.disabled = false
} catch (e) {
this.disabled = false
}
},
/** 取消 */
toCancle () {
this.active1 = ''
this.disabled = false
},
toggleItem1 () {
if (!this.open1) {
this.open1 = true
} else {
this.open1 = false
}
},
dropdownMenu1 (i) {
this.active1 = i + ''
this.open1 = false
}
}
}
</script>
<style lang="stylus" scoped>
</style>

View File

@@ -1,130 +0,0 @@
<template>
<section>
<nav-bar title="修改密码"></nav-bar>
<section class="content mgt186">
<div class="filter-wraper">
<div class="bottom-filter-tip">
<div class="filter-label txtjustify">当前密码</div>
<div class="fxcol mgl20">
<input type="password" class="filter-input filter-scan-input" v-model="val1">
</div>
</div>
<div class="bottom-filter-tip">
<div class="filter-label txtjustify">新密码</div>
<div class="fxcol mgl20 relative">
<input type="password" class="filter-input filter-scan-input" v-model="val2" @blur="handleBlur1">
<div v-show="error1 === true" class="error">密码长度必须为6-20个字符</div>
</div>
</div>
<div class="bottom-filter-tip">
<div class="filter-label txtjustify">确认新密码</div>
<div class="fxcol mgl20 relative">
<input type="password" class="filter-input filter-scan-input" v-model="val3" @blur="handleBlur2">
<div v-show="error2 === true" class="error">两次输入的密码不一致</div>
</div>
</div>
</div>
</section>
<section class="submit-bar">
<button class="btn submit-button" :disabled="disabled" :class="{'btn-disabled': btnDisabled === false}" @click="toSure">确认</button>
</section>
</section>
</template>
<script>
import NavBar from '@components/NavBar.vue'
import { updatePass } from '@config/getData2.js'
import {encrypt} from '../../main.js'
export default {
name: 'Password',
components: {
NavBar
},
data () {
return {
val1: '',
val2: '',
val3: '',
error1: false,
error2: false,
disabled: false
}
},
computed: {
btnDisabled () {
let flag = false
if (this.val1 !== '' && this.val2.length >= 6 && this.val2.length <= 20 && this.val2 === this.val3) {
flag = true
}
return flag
}
},
methods: {
handleBlur1 () {
if (this.val2.length < 6 || this.val2.length > 20) {
this.error1 = true
} else {
this.error1 = false
}
if (this.val2 === this.val3) this.error2 = false
},
handleBlur2 () {
if (this.val2 !== this.val3) {
this.error2 = true
} else {
this.error2 = false
}
},
toSure () {
this.disabled = true
if (this.val1 === '') {
this.disabled = false
return
}
if (this.val2.length < 6 || this.val2.length > 20) {
this.error1 = true
this.disabled = false
return
}
if (this.val2 !== this.val3) {
this.error2 = true
this.disabled = false
return
}
if (this.val2.length >= 6 && this.val2.length <= 20) this.error1 = false
if (this.val2 === this.val3) this.error2 = false
this._updatePass()
},
async _updatePass () {
try {
let res = await updatePass(encrypt(this.val1), encrypt(this.val2))
if (res.code === '1') {
this.toast(res.desc)
this.$store.dispatch('setSignOut')
this.$router.push('/login')
} else {
this.Dialog(res.desc)
this.disabled = false
}
} catch (e) {
this.disabled = false
}
}
}
}
</script>
<style lang="stylus" scoped>
@import '~@style/mixin'
.filter-label
width 1.6rem
.relative
overflow visible
.error
position absolute
left 0
top 1rem
_font(.2rem, .2rem, $red)
.bottom-filter-tip
padding 0.5rem 0 0 0
</style>

View File

@@ -1,154 +0,0 @@
<template>
<section>
<nav-bar title="压制叫料"></nav-bar>
<section class="content mgt186">
<div class="filter-wraper">
<div class="bottom-filter-tip">
<div class="filter-label txtjustify">点位</div>
<div class="fxcol mgl20 visible" >
<dropdown-menu
:option="option1"
:active="active1"
:open="open1"
@toggleItem="toggleItem1"
@dropdownMenu="dropdownMenu1">
</dropdown-menu>
</div>
</div>
<div class="bottom-filter-tip">
<div class="filter-label txtjustify">物料</div>
<div class="fxcol mgl20">
<input type="text" class="filter-input filter-scan-input" v-model="val1" @click="searchList">
</div>
</div>
<div class="bottom-filter-tip">
<div class="filter-label txtjustify">是否满托</div>
<div class="fxcol mgl20 visible" >
<dropdown-menu
:option="option2"
:active="active2"
:open="open2"
@toggleItem="toggleItem2"
@dropdownMenu="dropdownMenu2">
</dropdown-menu>
</div>
</div>
</div>
</section>
<section class="submit-bar">
<button class="btn submit-button" :class="{'btn-disabled' : active1 === '' || active2 === '' || val1 === ''}" :disabled="disabled1" @click="_callMaterialconfirm">确定</button>
<button class="btn submit-button" @click="toCancle">取消</button>
</section>
</section>
</template>
<script>
import NavBar from '@components/NavBar.vue'
import DropdownMenu from '@components/DropdownMenu.vue'
import {callMaterialqueryPoint, callMaterialconfirm} from '@config/getData1'
export default {
name: 'PressCallMater',
components: {
NavBar,
DropdownMenu
},
data () {
return {
option1: [],
active1: '',
open1: false,
option2: [{value: '1', label: '是'}, {value: '2', label: '否'}],
active2: '',
open2: false,
disabled1: false,
val1: ''
}
},
beforeRouteLeave (to, from, next) {
if (to.path === '/home' || to.path === '/login') {
this.$store.dispatch('setKeepAlive', [])
}
next()
},
activated () {
if (JSON.stringify(this.$store.getters.receiveMaterObj) !== '{}') {
this.val1 = this.$store.getters.receiveMaterObj.material_name
}
},
created () {
this._callMaterialqueryPoint()
},
methods: {
/** 1.1查询点位 */
async _callMaterialqueryPoint () {
let res = await callMaterialqueryPoint()
if (res.code === '1') {
this.option1 = [...res.result]
this.option1.map(el => {
this.$set(el, 'value', el.point_code)
this.$set(el, 'label', el.point_name)
})
} else {
this.Dialog(res.desc)
}
},
/** 确定 */
async _callMaterialconfirm () {
this.disabled1 = true
if (this.active1 === '' || this.active2 === '' || this.val1 === '') {
this.disabled1 = false
return
}
try {
let res = await callMaterialconfirm(this.option1[this.active1].point_id, this.option1[this.active1].point_code, this.option1[this.active1].point_name, this.option2[this.active2].value, this.$store.getters.receiveMaterObj.material_id, this.$store.getters.receiveMaterObj.material_code, this.$store.getters.receiveMaterObj.material_name)
if (res.code === '1') {
this.toast(res.desc)
this.toCancle()
} else {
this.Dialog(res.desc)
}
this.disabled1 = false
} catch (e) {
this.disabled1 = false
}
},
/** 取消 */
toCancle () {
this.active1 = ''
this.active2 = ''
this.disabled1 = false
this.val1 = ''
this.$store.dispatch('receiveMaterObj', {})
},
toggleItem1 () {
if (!this.open1) {
this.open1 = true
} else {
this.open1 = false
}
},
dropdownMenu1 (i) {
this.active1 = i + ''
this.open1 = false
},
toggleItem2 () {
if (!this.open2) {
this.open2 = true
} else {
this.open2 = false
}
},
dropdownMenu2 (i) {
this.active2 = i + ''
this.open2 = false
},
/** 查找物料 */
searchList () {
this.$router.push({
path: '/SearchMater',
query: {url: 'PressCallMater'}
})
}
}
}
</script>

View File

@@ -1,125 +0,0 @@
<template>
<section>
<nav-bar :inner="true" title="物料查询"></nav-bar>
<section class="content mgt15 mgb110" v-infinite-scroll="loadMore" infinite-scroll-disabled="busy" infinite-scroll-distance="0" infinite-scroll-immediate-check="false">
<div class="grid-wraper">
<div class="left_fixed">
<table class="layout-t left_layout_t">
<tr>
<th>物料编码</th>
</tr>
<tr v-for="e in dataList" :key="e.material_uuid" @click="toCheck(e)" :class="{'checked': e.material_uuid === pkId}">
<td>{{e.material_code}}</td>
</tr>
</table>
</div>
<div class="slide">
<table class="layout-t">
<tr>
<th>物料名称</th>
<th>规格</th>
</tr>
<tr v-for="e in dataList" :key="e.material_uuid" @click="toCheck(e)" :class="{'checked': e.material_uuid === pkId}">
<td>{{e.material_name}}</td>
<td>{{e.material_spec}}</td>
</tr>
</table>
</div>
</div>
<div class="loading-tips">{{desc}}</div>
</section>
<section class="submit-bar">
<button class="btn submit-button" :class="{'btn-disabled': pkId === ''}" @click="toSure">确认</button>
<button class="btn submit-button" @click="$router.back()">取消</button>
</section>
</section>
</template>
<script>
import NavBar from '@components/NavBar.vue'
import {queryMaterial} from '@config/getData2.js'
export default {
name: 'SearchMater',
components: {
NavBar
},
data () {
return {
dataList: [],
page: 1,
size: '10',
busy: false,
desc: '',
pkId: '',
pkObj: {}
}
},
created () {
this._queryMaterial()
},
methods: {
async _queryMaterial () {
this.page = 1
this.busy = false
this.desc = ''
let res = await queryMaterial(this.page + '', this.size)
if (res.code === '1') {
this.dataList = []
this.pkId = ''
this.dataList = [...res.result.content]
if (res.result.content.length < 10) {
this.busy = true
this.desc = '已加载全部数据'
}
} else {
this.Dialog(res.desc)
this.desc = res.desc
}
},
async loadMore () {
this.busy = true
this.page++
let res = await queryMaterial(this.page + '', this.size)
if (res.code === '1') {
this.dataList = [...this.dataList, ...res.result.content]
if (res.result.content.length < 10) {
this.busy = true
this.desc = '已加载全部数据'
} else {
this.busy = false
}
} else {
this.Dialog(res.desc)
this.desc = res.desc
}
},
toCheck (e) {
this.pkId = this.pkId !== e.material_uuid ? e.material_uuid : ''
this.pkObj = this.pkId === e.material_uuid ? e : {}
},
toSure () {
if (this.pkId) {
this.$store.dispatch('receiveMaterObj', this.pkObj)
if (this.$route.query.url === 'PressCallMater') {
this.$router.push({
path: '/PressCallMater'
})
} else {
this.$router.push({
path: 'CheckManage',
query: {uuid: this.$route.query.uuid}
})
}
}
}
}
}
</script>
<style lang="stylus" scoped>
.left_fixed
width 30%
>>>.content
height calc(100% - 2.11rem)
overflow-y auto
</style>

View File

@@ -1,150 +0,0 @@
<template>
<section>
<nav-bar title="送空托盘"></nav-bar>
<section class="content mgt186">
<div class="filter-wraper">
<div class="bottom-filter-tip">
<div class="filter-label txtjustify">区域</div>
<div class="fxcol mgl20 visible" >
<dropdown-menu
:option="option1"
:active="active1"
:open="open1"
@toggleItem="toggleItem1"
@dropdownMenu="dropdownMenu1">
</dropdown-menu>
</div>
</div>
<div class="bottom-filter-tip">
<div class="filter-label txtjustify">点位</div>
<div class="fxcol mgl20 visible" >
<dropdown-menu
:option="option2"
:active="active2"
:open="open2"
@toggleItem="toggleItem2"
@dropdownMenu="dropdownMenu2">
</dropdown-menu>
</div>
</div>
<search-box
label="托盘"
v-model="val1"
:seaShow="false"
></search-box>
</div>
</section>
<section class="submit-bar">
<button class="btn submit-button" :class="{'btn-disabled' : val1 === '' || active1 === '' || active2 === ''}" :disabled="disabled1" @click="_sendEmptyconfirm">确定</button>
<button class="btn submit-button" @click="toCancle">取消</button>
</section>
</section>
</template>
<script>
import NavBar from '@components/NavBar.vue'
import DropdownMenu from '@components/DropdownMenu.vue'
import SearchBox from '@components/SearchBox.vue'
import {sendEmptyqueryArea, sendEmptyqueryPointByArea, sendEmptyconfirm} from '@config/getData1'
export default {
name: 'SendEmptyPallet',
components: {
NavBar,
DropdownMenu,
SearchBox
},
data () {
return {
val1: '',
option1: [],
active1: '',
open1: false,
option2: [],
active2: '',
open2: false,
disabled1: false
}
},
created () {
this._sendEmptyqueryArea()
},
methods: {
/** 查询区域 */
async _sendEmptyqueryArea () {
let res = await sendEmptyqueryArea()
if (res.code === '1') {
this.option1 = [...res.result]
this.option1.map(el => {
this.$set(el, 'value', el.area_code)
this.$set(el, 'label', el.area_name)
})
} else {
this.Dialog(res.desc)
}
},
/** 查询点位 */
async _sendEmptyqueryPointByArea (a) {
let res = await sendEmptyqueryPointByArea(a)
if (res.code === '1') {
this.option2 = [...res.result]
this.option2.map(el => {
this.$set(el, 'value', el.point_id)
this.$set(el, 'label', el.point_name)
})
} else {
this.Dialog(res.desc)
}
},
/** 确认 */
async _sendEmptyconfirm () {
this.disabled1 = true
if (this.val1 === '' || this.active1 === '') {
this.disabled1 = false
return
}
try {
let res = await sendEmptyconfirm(this.option2[this.active2].point_id, this.option2[this.active2].point_code, this.option2[this.active2].point_name, this.val1)
if (res.code === '1') {
this.toast(res.desc)
this.toCancle()
} else {
this.Dialog(res.desc)
}
this.disabled1 = false
} catch (e) {
this.disabled1 = false
}
},
/** 取消 */
toCancle () {
this.val1 = ''
this.active1 = ''
this.active2 = ''
this.disabled1 = false
},
toggleItem1 () {
if (!this.open1) {
this.open1 = true
} else {
this.open1 = false
}
},
dropdownMenu1 (i) {
this.active1 = i + ''
this.open1 = false
this._sendEmptyqueryPointByArea(this.option1[this.active1].area_code)
},
toggleItem2 () {
if (!this.open2) {
this.open2 = true
} else {
this.open2 = false
}
},
dropdownMenu2 (i) {
this.active2 = i + ''
this.open2 = false
}
}
}
</script>

View File

@@ -4,31 +4,58 @@
<section class="content mgt186">
<div class="filter-wraper">
<div class="bottom-filter-tip">
<div class="filter-label txtjustify">工序</div>
<div class="filter-label txtjustify">区域</div>
<div class="fxcol mgl20 visible" >
<dropdown-menu
:option="option1"
:option="optionNew1"
:active="active1"
:open="open1"
:inputed="true"
v-model="val1"
@handleBlur="handleBlur1"
@handleChange="handleChange1"
@toggleItem="toggleItem1"
@dropdownMenu="dropdownMenu1">
</dropdown-menu>
</div>
</div>
<div class="bottom-filter-tip">
<div class="filter-label txtjustify">设备</div>
<div class="filter-label txtjustify">点位</div>
<div class="fxcol mgl20 visible" >
<dropdown-menu
:option="option2"
:option="optionNew2"
:active="active2"
:open="open2"
:inputed="true"
v-model="val2"
@handleBlur="handleBlur2"
@handleChange="handleChange2"
@toggleItem="toggleItem2"
@dropdownMenu="dropdownMenu2">
</dropdown-menu>
</div>
</div>
<search-box
label="载具"
v-model="val3"
:seaShow="false"
></search-box>
<div class="bottom-filter-tip">
<div class="filter-label txtjustify">点位</div>
<div class="filter-label txtjustify">数量</div>
<div class="fxcol mgl20">
<input class="filter-input filter-scan-input" v-model="val4" @input="val4 = val4.replace(/[^\d]/g,'')">
</div>
<div class="filter-unit"></div>
</div>
<div class="bottom-filter-tip">
<div class="filter-label txtjustify">重量</div>
<div class="fxcol mgl20">
<input class="filter-input filter-scan-input" v-model="val5" @input="val5 = val5.replace(/[^\d]/g,'')">
</div>
<div class="filter-unit"></div>
</div>
<div class="bottom-filter-tip">
<div class="filter-label txtjustify">是否满托</div>
<div class="fxcol mgl20 visible" >
<dropdown-menu
:option="option3"
@@ -39,33 +66,10 @@
</dropdown-menu>
</div>
</div>
<div class="bottom-filter-tip">
<div class="filter-label txtjustify">数量</div>
<div class="fxcol mgl20">
<input type="number" class="filter-input filter-scan-input" v-model="val2">
</div>
</div>
<search-box
label="托盘号"
v-model="val1"
:seaShow="false"
></search-box>
<div class="bottom-filter-tip">
<div class="filter-label txtjustify">是否满托</div>
<div class="fxcol mgl20 visible" >
<dropdown-menu
:option="option4"
:active="active4"
:open="open4"
@toggleItem="toggleItem4"
@dropdownMenu="dropdownMenu4">
</dropdown-menu>
</div>
</div>
</div>
</section>
<section class="submit-bar">
<button class="btn submit-button" :class="{'btn-disabled' : val1 === '' || val2 === '' || active1 === '' || active2 === '' || active3 === '' || active4 === ''}" :disabled="disabled1" @click="_sendMaterialconfirm">确定</button>
<button class="btn submit-button" :class="{'btn-disabled' : val2 === '' || val3 === '' || val4 === '' || val5 === '' || active3 === ''}" :disabled="disabled1" @click="_sendMaterial">确定</button>
<button class="btn submit-button" @click="toCancle">取消</button>
</section>
</section>
@@ -75,7 +79,7 @@
import NavBar from '@components/NavBar.vue'
import SearchBox from '@components/SearchBox.vue'
import DropdownMenu from '@components/DropdownMenu.vue'
import {sendMaterialqueryDevice, sendMaterialconfirm} from '@config/getData1'
import {pdaRegion, pdaPoint, sendMaterial} from '@config/getData2'
export default {
name: 'BindPalletPoint',
components: {
@@ -85,59 +89,152 @@ export default {
},
data () {
return {
val1: '',
val2: '',
option1: [],
optionNew1: [],
active1: '',
open1: false,
val1: '',
option2: [],
optionNew2: [],
active2: '',
open2: false,
option3: [],
active3: '',
val2: '',
option3: [{value: '0', label: '否'}, {value: '1', label: '是'}],
active3: '1',
open3: false,
option4: [{value: '1', label: '是'}, {value: '2', label: '否'}],
active4: '',
open4: false,
val3: '',
val4: '',
val5: '',
disabled1: false
}
},
created () {
this._sendMaterialqueryDevice()
this._pdaRegion()
},
methods: {
/** 查询点位 */
async _sendMaterialqueryDevice () {
let res = await sendMaterialqueryDevice()
/** 查询区域 */
async _pdaRegion () {
let res = await pdaRegion('send_material')
if (res.code === '1') {
this.option1 = [...res.result.workprocedureja]
this.option1 = [...res.result]
this.option1.map(el => {
this.$set(el, 'value', el.workprocedure_id)
this.$set(el, 'label', el.workprocedure_name)
this.$set(el, 'value', el.region_code)
this.$set(el, 'label', el.region_name)
})
// this.option2 = [...res.result.workprocedureja.deviceja]
// this.option2.map(el => {
// this.$set(el, 'value', el.device_id)
// this.$set(el, 'label', el.device_name)
// })
// this.option3 = [...res.result.workprocedureja.deviceja.pointArr]
// this.option3.map(el => {
// this.$set(el, 'value', el.point_id)
// this.$set(el, 'label', el.point_name)
// })
} else {
this.Dialog(res.desc)
}
},
/** 模糊匹配 */
selectMatchItem (type, lists, keyWord) {
let resArr = []
lists.filter((item) => {
if (type === '1' && item.region_name.indexOf(keyWord) > -1) {
resArr.push(item)
}
if (type === '2' && item.point_name.indexOf(keyWord) > -1) {
resArr.push(item)
}
})
return resArr
},
handleChange1 (e) {
if (!e) {
this.active1 = ''
}
this.optionNew1 = []
this.optionNew1 = this.selectMatchItem('1', this.option1, e)
this.open1 = true
},
handleBlur1 () {
this.open1 = false
this.val1 = ''
},
toggleItem1 () {
if (!this.open1) {
this.optionNew1 = this.option1
this.active1 = ''
this.optionNew1.map((e, i) => {
if (e.label === this.val1) {
this.active1 = i + ''
}
})
this.open1 = true
} else {
this.open1 = false
}
},
dropdownMenu1 (i) {
this.active1 = i + ''
this.open1 = false
if (this.optionNew1.length > 0) {
this.val1 = this.optionNew1[i].label
this.val2 = ''
this.active2 = ''
this._pdaPoint(this.optionNew1[i].value)
}
},
/** 查询点位 */
async _pdaPoint (code) {
let res = await pdaPoint('send_material', code)
if (res.code === '1') {
this.option2 = [...res.result]
this.option2.map(el => {
this.$set(el, 'value', el.point_code)
this.$set(el, 'label', el.point_name)
})
} else {
this.Dialog(res.desc)
}
},
handleChange2 (e) {
if (!e) {
this.active2 = ''
}
this.optionNew2 = []
this.optionNew2 = this.selectMatchItem('2', this.option2, e)
this.open2 = true
},
handleBlur2 () {
this.open2 = false
this.val2 = ''
},
toggleItem2 () {
if (!this.open2) {
this.optionNew2 = this.option2
this.active2 = ''
this.optionNew2.map((e, i) => {
if (e.label === this.val2) {
this.active2 = i + ''
}
})
this.open2 = true
} else {
this.open2 = false
}
},
dropdownMenu2 (i) {
this.active2 = i + ''
this.open2 = false
if (this.optionNew2.length > 0) {
this.val2 = this.optionNew2[i].label
}
},
/** 确认 */
async _sendMaterialconfirm () {
async _sendMaterial () {
this.disabled1 = true
if (this.val1 === '' || this.val2 === '' || this.active1 === '' || this.active2 === '' || this.active3 === '' || this.active4 === '') {
if (this.val2 === '' || this.val3 === '' || this.val4 === '' || this.val5 === '' || this.active3 === '') {
this.disabled1 = false
return
}
try {
let res = await sendMaterialconfirm(this.option1[this.active1].value, this.option2[this.active2].value, this.option3[this.active3].value, this.option3[this.active3].point_code, this.val2, this.val1, this.option4[this.active4].value)
let code = ''
this.option2.map(el => {
if (el.point_name === this.val2) {
code = el.point_code
}
})
let res = await sendMaterial(code, this.val3, this.val4, this.val5, this.option3[this.active3].value)
if (res.code === '1') {
this.toast(res.desc)
this.toCancle()
@@ -156,41 +253,11 @@ export default {
this.active1 = ''
this.active2 = ''
this.active3 = ''
this.active4 = ''
this.val3 = ''
this.val4 = ''
this.val5 = ''
this.disabled1 = false
},
toggleItem1 () {
if (!this.open1) {
this.open1 = true
} else {
this.open1 = false
}
},
dropdownMenu1 (i) {
this.active1 = i + ''
this.open1 = false
this.option2 = this.option1[this.active1].deviceja
this.option2.map(el => {
this.$set(el, 'value', el.device_id)
this.$set(el, 'label', el.device_name)
})
},
toggleItem2 () {
if (!this.open2) {
this.open2 = true
} else {
this.open2 = false
}
},
dropdownMenu2 (i) {
this.active2 = i + ''
this.open2 = false
this.option3 = this.option2[this.active2].pointArr
this.option3.map(el => {
this.$set(el, 'value', el.point_id)
this.$set(el, 'label', el.point_name)
})
},
toggleItem3 () {
if (!this.open3) {
this.open3 = true
@@ -201,17 +268,6 @@ export default {
dropdownMenu3 (i) {
this.active3 = i + ''
this.open3 = false
},
toggleItem4 () {
if (!this.open4) {
this.open4 = true
} else {
this.open4 = false
}
},
dropdownMenu4 (i) {
this.active4 = i + ''
this.open4 = false
}
}
}

View File

@@ -1,23 +1,15 @@
import Vue from 'vue'
import Router from 'vue-router'
// 首页
const PreLoad = r => require.ensure([], () => r(require('../pages/login/PreLoad')), 'PreLoad')
const Home = r => require.ensure([], () => r(require('../pages/login/Home')), 'Home')
// 个人中心
const Login = r => require.ensure([], () => r(require('../pages/login/Login')), 'Login')
const Setup = r => require.ensure([], () => r(require('../pages/login/Setup')), 'Setup')
const Password = r => require.ensure([], () => r(require('../pages/proj/Password')), 'Password')
const TaskManage = r => require.ensure([], () => r(require('../pages/proj/TaskManage')), 'TaskManage')
const ZlManage = r => require.ensure([], () => r(require('../pages/proj/ZlManage')), 'ZlManage')
const BelowGradeReport = r => require.ensure([], () => r(require('../pages/proj/BelowGradeReport')), 'BelowGradeReport')
const SendMater = r => require.ensure([], () => r(require('../pages/proj/SendMater')), 'SendMater')
const PressCallMater = r => require.ensure([], () => r(require('../pages/proj/PressCallMater')), 'PressCallMater')
const SendEmptyPallet = r => require.ensure([], () => r(require('../pages/proj/SendEmptyPallet')), 'SendEmptyPallet')
const CallEmptyPallet = r => require.ensure([], () => r(require('../pages/proj/CallEmptyPallet')), 'CallEmptyPallet')
const BindPalletPoint = r => require.ensure([], () => r(require('../pages/proj/BindPalletPoint')), 'BindPalletPoint')
const CheckManage = r => require.ensure([], () => r(require('../pages/proj/CheckManage')), 'CheckManage')
const SearchMater = r => require.ensure([], () => r(require('../pages/proj/SearchMater')), 'SearchMater')
const MechineOutstore = r => require.ensure([], () => r(require('../pages/proj/MechineOutstore')), 'MechineOutstore')
const CallMater = r => require.ensure([], () => r(require('../pages/proj/CallMater')), 'CallMater')
Vue.use(Router)
@@ -29,17 +21,14 @@ export default new Router({
},
{
path: '/setup',
name: 'Setup',
component: Setup
},
{
path: '/login',
name: 'login',
component: Login
},
{
path: '/home',
name: 'Home',
component: Home,
meta: {
requireAuth: true
@@ -47,52 +36,27 @@ export default new Router({
},
{
path: '/preload',
name: 'preload',
component: PreLoad
},
{
path: '/Password', // 盘点管理
component: Password
},
{
path: '/TaskManage', // 任务管理
path: '/taskmanage', // 任务管理
component: TaskManage
},
{
path: '/ZlManage', // 指令管理
path: '/zlmanage', // 指令管理
component: ZlManage
},
{
path: '/SendMater', // 送料
path: '/belowgradereport', // 不合格品上报
component: BelowGradeReport
},
{
path: '/sendmater', // 送料
component: SendMater
},
{
path: '/PressCallMater', // 压制叫料
component: PressCallMater
},
{
path: '/SendEmptyPallet', // 送空托盘
component: SendEmptyPallet
},
{
path: '/CallEmptyPallet', // 呼叫空托盘
component: CallEmptyPallet
},
{
path: '/BindPalletPoint', // 托盘点位绑定
component: BindPalletPoint
},
{
path: '/CheckManage', // 盘点管理
component: CheckManage
},
{
path: '/SearchMater', // 查找物料
component: SearchMater
},
{
path: '/MechineOutstore', // 液压机出库
component: MechineOutstore
path: '/callmater', // 叫料
component: CallMater
}
],
scrollBehavior (to, from, savedPosition) {

View File

@@ -302,7 +302,7 @@ header
padding 0 .24rem
.filter-label
flex none
width 1.4rem
width 1.6rem
_font(.3rem,.9rem,#323232,,justify)
.filter-unit
width .5rem