|
@ -53,7 +53,6 @@
|
|
<van-button v-else-if="orderList&&orderList.length" @click="showOrderPicker=true" type="primary" color="#17b3ec" size="mini">导入申领药品单</van-button>
|
|
<van-button v-else-if="orderList&&orderList.length" @click="showOrderPicker=true" type="primary" color="#17b3ec" size="mini">导入申领药品单</van-button>
|
|
</div>
|
|
</div>
|
|
<div class="plr15" v-if="isView">
|
|
<div class="plr15" v-if="isView">
|
|
|
|
|
|
<van-button @click="gotoUrl('/replenishment/start/deviceDetail', {deviceId: deviceId})" type="primary" color="#17b3ec" size="mini">点击进行入库</van-button>
|
|
<van-button @click="gotoUrl('/replenishment/start/deviceDetail', {deviceId: deviceId})" type="primary" color="#17b3ec" size="mini">点击进行入库</van-button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
@ -81,12 +80,23 @@
|
|
<template v-else>
|
|
<template v-else>
|
|
<template v-for="(item, k) in curItem.list">
|
|
<template v-for="(item, k) in curItem.list">
|
|
<div class="item" v-if="item.state!=20" :key="k">
|
|
<div class="item" v-if="item.state!=20" :key="k">
|
|
<ProductItem :data="item" :index="k" :isView="isView"/>
|
|
|
|
|
|
<ProductItem :bussuness="bussuness" @onChange="onChange($event, item)" :data="item" :index="k" :isView="isView"/>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
</template>
|
|
</template>
|
|
</template>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
<div class="bot-banner">
|
|
|
|
<div class="kitbox">
|
|
|
|
<div v-if="!isManage" class="box-flex-1 plr5"><van-button @click="changeManage" block plain color="#17b3ec" size="small" type="primary" round>货道管理</van-button></div>
|
|
|
|
<template v-else>
|
|
|
|
<div class="box-flex-1 plr5"><van-button @click="openAndCloseCargo" block plain color="#17b3ec" size="small" type="primary" round>关闭/开启货道</van-button></div>
|
|
|
|
<div class="box-flex-1 plr5"><van-button @click="mergeAndSplitCargo" block plain color="#17b3ec" size="small" type="primary" round>合并/拆分货道</van-button></div>
|
|
|
|
<div class="plr5"><van-button @click="changeManage" class="w50" block plain color="red" size="small" round type="primary" >取消</van-button></div>
|
|
|
|
</template>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
<van-popup v-model="showOrderPicker">
|
|
<van-popup v-model="showOrderPicker">
|
|
<div class="tc fs-16 pt15 pb10">药品申领单选择</div>
|
|
<div class="tc fs-16 pt15 pb10">药品申领单选择</div>
|
|
@ -133,7 +143,11 @@ export default{
|
|
showDeviceDrug: true,
|
|
showDeviceDrug: true,
|
|
curOrder: '',
|
|
curOrder: '',
|
|
orderList: [],
|
|
orderList: [],
|
|
showOrderPicker: false
|
|
|
|
|
|
showOrderPicker: false,
|
|
|
|
|
|
|
|
selItemList: [],
|
|
|
|
isManage: false,
|
|
|
|
bussuness: ''
|
|
}
|
|
}
|
|
},
|
|
},
|
|
watch:{
|
|
watch:{
|
|
@ -316,6 +330,7 @@ export default{
|
|
var list = _.map(res.detailModelList, v=>{
|
|
var list = _.map(res.detailModelList, v=>{
|
|
var key = _.keys(v)[0]
|
|
var key = _.keys(v)[0]
|
|
v[key].forEach(m => {
|
|
v[key].forEach(m => {
|
|
|
|
m.isActive = false
|
|
m.cargoState==1? openCount++ : closeCount++
|
|
m.cargoState==1? openCount++ : closeCount++
|
|
if(m.faultState==1){
|
|
if(m.faultState==1){
|
|
faultCount++
|
|
faultCount++
|
|
@ -377,7 +392,203 @@ export default{
|
|
accessLeftNum(item){
|
|
accessLeftNum(item){
|
|
var left = (item.quantity||0) - (item.batchNum||0)
|
|
var left = (item.quantity||0) - (item.batchNum||0)
|
|
return left<0? 0 : left
|
|
return left<0? 0 : left
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
changeManage(){
|
|
|
|
if(this.isManage){
|
|
|
|
this.selItemList.forEach(v=>{
|
|
|
|
v.isActive = false
|
|
|
|
})
|
|
|
|
this.selItemList = []
|
|
|
|
this.bussuness = '';
|
|
|
|
} else{
|
|
|
|
this.bussuness = 'quick';
|
|
|
|
}
|
|
|
|
this.isManage = !this.isManage
|
|
|
|
},
|
|
|
|
onChange(isActive, item){
|
|
|
|
item.isActive = isActive
|
|
|
|
if(isActive){
|
|
|
|
this.selItemList.push(item)
|
|
|
|
} else {
|
|
|
|
this.selItemList.splice(this.selItemList.indexOf(item), 1)
|
|
|
|
}
|
|
|
|
},
|
|
|
|
checkOpenOrClose(){
|
|
|
|
return new Promise((resolve, reject)=>{
|
|
|
|
var g = _.groupBy(this.selItemList, 'cargoState')
|
|
|
|
if(g[1] && g[0]){
|
|
|
|
this.$dialog.confirm({
|
|
|
|
title: '货道设置',
|
|
|
|
message: `选中货道已包含"关闭"和"开启"货道,请选择`,
|
|
|
|
confirmButtonText: '全部开启',
|
|
|
|
cancelButtonText: '全部关闭'
|
|
|
|
})
|
|
|
|
.then(() => {
|
|
|
|
resolve(1)
|
|
|
|
})
|
|
|
|
.catch(()=>{
|
|
|
|
resolve(0)
|
|
|
|
})
|
|
|
|
} else {
|
|
|
|
resolve(g[1]? 0 : 1)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
},
|
|
|
|
openAndCloseCargo(){
|
|
|
|
if(!this.selItemList || !this.selItemList.length){
|
|
|
|
this.$toast('请选择要操作的货道')
|
|
|
|
return
|
|
|
|
}
|
|
|
|
this.checkOpenOrClose().then(cargoState=>{
|
|
|
|
this.$nextTick(()=>{
|
|
|
|
var ids = _.map(this.selItemList, v=>{
|
|
|
|
return v.id
|
|
|
|
})
|
|
|
|
this.$loading('保存中..')
|
|
|
|
let p = {
|
|
|
|
cargoIds: ids.join(','),//必穿 货道id,多个id,英文逗号隔开,例如 1,2 4,5,6
|
|
|
|
cargoState //必传 1开启,0关闭
|
|
|
|
}
|
|
|
|
console.log('params', p)
|
|
|
|
medicineAbinetApi
|
|
|
|
.openAndCloseCargo(p)
|
|
|
|
.then(res=>{
|
|
|
|
console.log('openAndCloseCargo', res)
|
|
|
|
this.selItemList.forEach(v=>{
|
|
|
|
v.isActive = false
|
|
|
|
v.cargoState = cargoState
|
|
|
|
})
|
|
|
|
this.selItemList = []
|
|
|
|
this.$toast({
|
|
|
|
message: '操作成功',
|
|
|
|
forbidClick: true,
|
|
|
|
onClose: ()=>{
|
|
|
|
}
|
|
|
|
})
|
|
|
|
this.setBackRefresh(true)
|
|
|
|
})
|
|
|
|
.catch(err=>{
|
|
|
|
console.error(err)
|
|
|
|
})
|
|
|
|
})
|
|
|
|
})
|
|
|
|
},
|
|
|
|
checkMerge(){
|
|
|
|
return new Promise((resolve, reject)=>{
|
|
|
|
var exist = _.find(this.selItemList, v=>{
|
|
|
|
return !!v.drugCode
|
|
|
|
})
|
|
|
|
if(exist){
|
|
|
|
this.$toast.clear()
|
|
|
|
this.$dialog.confirm({
|
|
|
|
message: '当前合并货道存在药品,需把药品下架并取出,如您继续合并默认下架全部药品',
|
|
|
|
confirmButtonText: '继续合并'
|
|
|
|
})
|
|
|
|
.then(() => {
|
|
|
|
this.$loading('保存中..')
|
|
|
|
resolve(true)
|
|
|
|
})
|
|
|
|
.catch(() => {
|
|
|
|
resolve(false)
|
|
|
|
});
|
|
|
|
return
|
|
|
|
}
|
|
|
|
resolve(true)
|
|
|
|
})
|
|
|
|
},
|
|
|
|
checkSplit(){
|
|
|
|
return new Promise((resolve, reject)=>{
|
|
|
|
this.$toast.clear()
|
|
|
|
this.$dialog.confirm({
|
|
|
|
message: '货道拆分后请取下货道上的药品',
|
|
|
|
confirmButtonText: '继续拆分'
|
|
|
|
})
|
|
|
|
.then(() => {
|
|
|
|
resolve(true)
|
|
|
|
})
|
|
|
|
.catch(() => {
|
|
|
|
resolve(false)
|
|
|
|
});
|
|
|
|
})
|
|
|
|
},
|
|
|
|
async mergeAndSplitCargo(){
|
|
|
|
this.$loading('保存中..')
|
|
|
|
var ids = []
|
|
|
|
var g = _.groupBy(this.selItemList, 'state')
|
|
|
|
if((g['21'] || g['20']) && g['1']){
|
|
|
|
this.$toast.clear()
|
|
|
|
this.$dialog.alert({
|
|
|
|
title: '货道设置',
|
|
|
|
message: `当前选中货道包含合并,您需要先手动拆分合并的货道`,
|
|
|
|
confirmButtonText: '我已知悉',
|
|
|
|
})
|
|
|
|
return
|
|
|
|
}
|
|
|
|
var isMerge = g['21']? false : true
|
|
|
|
if(isMerge){
|
|
|
|
console.log(this.selItemList, 'this.selectList')
|
|
|
|
if(!this.selItemList.length || this.selItemList.length<2){
|
|
|
|
this.$toast('至少选择两个相邻的货道')
|
|
|
|
return
|
|
|
|
}
|
|
|
|
var list = _.sortBy(this.selItemList, ['layerNo', 'wayerNo'])
|
|
|
|
var exist = _.find(list, (v, i)=>{
|
|
|
|
var next = list[i+1]
|
|
|
|
if(next){
|
|
|
|
if(next && v.layerNo!=next.layerNo){
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
if(Number(v.wayerNo)+1 != Number(next.wayerNo)){
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return false
|
|
|
|
})
|
|
|
|
if(exist){
|
|
|
|
this.$toast('只能选择相邻的货道进行合并')
|
|
|
|
return
|
|
|
|
}
|
|
|
|
if(!await this.checkMerge()){
|
|
|
|
return
|
|
|
|
}
|
|
|
|
ids = _.map(list, v=>{
|
|
|
|
return v.id
|
|
|
|
})
|
|
|
|
} else {
|
|
|
|
if(!this.selItemList.length || this.selItemList.length>1 || this.selItemList[0].state!=21){
|
|
|
|
this.$toast('请选择一个主货道')
|
|
|
|
return
|
|
|
|
}
|
|
|
|
if(!await this.checkSplit()){
|
|
|
|
return
|
|
|
|
}
|
|
|
|
this.$loading('保存中..')
|
|
|
|
var item = this.selItemList[0]
|
|
|
|
ids.push(item.id)
|
|
|
|
}
|
|
|
|
|
|
|
|
var p = {
|
|
|
|
userId: this.user.id,
|
|
|
|
cargoIds: ids.join(','),
|
|
|
|
isMerge
|
|
|
|
}
|
|
|
|
console.log(p)
|
|
|
|
medicineAbinetApi
|
|
|
|
.mergeAndSplitCargo(p)
|
|
|
|
.then(res=>{
|
|
|
|
console.log('mergeAndSplitCargo', res)
|
|
|
|
if(res.status == 200){
|
|
|
|
this.selItemList = []
|
|
|
|
this.$toast('操作成功')
|
|
|
|
this.$refreshData()
|
|
|
|
}
|
|
|
|
})
|
|
|
|
.catch(err=>{
|
|
|
|
console.error(err)
|
|
|
|
})
|
|
|
|
},
|
|
},
|
|
},
|
|
}
|
|
}
|
|
</script>
|
|
</script>
|
|
@ -389,7 +600,6 @@ export default{
|
|
.list{
|
|
.list{
|
|
display: flex;
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
flex-wrap: wrap;
|
|
overflow-y: auto;
|
|
|
|
align-content: flex-start;
|
|
align-content: flex-start;
|
|
.item{
|
|
.item{
|
|
margin-left: 5px;
|
|
margin-left: 5px;
|
|
@ -408,7 +618,8 @@ export default{
|
|
}
|
|
}
|
|
}
|
|
}
|
|
.left-list, .list{
|
|
.left-list, .list{
|
|
height: calc(100vh - 158px);
|
|
|
|
|
|
height: calc(100vh - 210px);
|
|
|
|
overflow-y: auto;
|
|
}
|
|
}
|
|
.color-block{
|
|
.color-block{
|
|
background: #ff9526;
|
|
background: #ff9526;
|
|
@ -426,6 +637,9 @@ export default{
|
|
.list, .left-list{
|
|
.list, .left-list{
|
|
height: calc(100vh - 44px);
|
|
height: calc(100vh - 44px);
|
|
}
|
|
}
|
|
|
|
.bot-banner{
|
|
|
|
display: none;
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
.van-popup{
|
|
.van-popup{
|
|
@ -443,6 +657,19 @@ export default{
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
.bot-banner{
|
|
|
|
padding: 10px 5px;
|
|
|
|
position: absolute;
|
|
|
|
bottom: 0;
|
|
|
|
width: 100%;
|
|
|
|
left: 0;
|
|
|
|
background: #fff;
|
|
|
|
z-index: 3;
|
|
|
|
>div{
|
|
|
|
-webkit-box-flex: 1;
|
|
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
</style>
|
|
</style>
|
|
|
|
|
|
@ -450,7 +677,7 @@ export default{
|
|
.mainNobotHasTop{
|
|
.mainNobotHasTop{
|
|
.replenishment-start-device-detail{
|
|
.replenishment-start-device-detail{
|
|
.list, .left-list{
|
|
.list, .left-list{
|
|
height: calc(100vh - 206px);
|
|
|
|
|
|
height: calc(100vh - 258px);
|
|
}
|
|
}
|
|
&.is-view{
|
|
&.is-view{
|
|
.list, .left-list{
|
|
.list, .left-list{
|