lincl 3 年之前
父節點
當前提交
abeec051af

+ 1 - 1
mini-pro-web/src/views/device/index.vue

@ -31,7 +31,7 @@
                    </div>
                    <div class="lh20 ptb10 kitbox">
                        <div class="box-flex-1">
                            <div>待补药品数量:{{item.daibushangpinshuliang}}</div>
                            <div>待入库药品数量:{{item.daibushangpinshuliang}}</div>
                            <div>未设药品货道:{{item.weishezhishangpinhuodao}}</div>
                            <div>设备所属:{{item.community}}</div>
                            <div >设备编号:{{item.equNum}}</div>

+ 1 - 1
mini-pro-web/src/views/index/Index.vue

@ -35,7 +35,7 @@
                    <van-row>
                    <van-col class="col col-tl" span="12">
                        <div class="operations-num">{{ maintain.addTotal }}</div>
                        <div class="operations-text"><span><img class="img" src="../../assets/images/waiting-equipment.png" alt=""></span>待补设备数</div>
                        <div class="operations-text"><span><img class="img" src="../../assets/images/waiting-equipment.png" alt=""></span>待入库设备数</div>
                    </van-col>
                    <van-col class="col" span="12">
                        <div class="operations-num">{{ maintain.hcWaringTotalNum }}</div>

+ 4 - 4
mini-pro-web/src/views/replenishment/picking/list.vue

@ -33,19 +33,19 @@
                    <div class="lh20 ptb10 kitbox">
                        <div class="box-flex-1">
                            <div class="row">
                                <div>补货员</div>
                                <div>设备管理员</div>
                                <div>{{item.replenishErName}}</div>
                            </div>
                            <div class="row">
                                <div>待补设备</div>
                                <div>待入库设备</div>
                                <div>{{item.replenishEquName}}</div>
                            </div>
                            <div class="row">
                                <div>待补品类</div>
                                <div>待入库品类</div>
                                <div>{{item.replenishCate}}</div>
                            </div>
                            <div class="row">
                                <div>待补库存</div>
                                <div>待入库库存</div>
                                <div>{{item.replenishInventory}}</div>
                            </div>
                            <div class="row">

+ 234 - 7
mini-pro-web/src/views/replenishment/start/deviceDetail.vue

@ -53,7 +53,6 @@
                <van-button v-else-if="orderList&&orderList.length" @click="showOrderPicker=true" type="primary" color="#17b3ec" size="mini">导入申领药品单</van-button>
            </div>
            <div class="plr15" v-if="isView">
                
                <van-button @click="gotoUrl('/replenishment/start/deviceDetail', {deviceId: deviceId})" type="primary" color="#17b3ec" size="mini">点击进行入库</van-button>
            </div>
        </div>
@ -81,12 +80,23 @@
                <template v-else>
                    <template v-for="(item, k) in curItem.list">
                        <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>
                    </template>
                </template>
            </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">
            <div class="tc fs-16 pt15 pb10">药品申领单选择</div>
@ -133,7 +143,11 @@ export default{
            showDeviceDrug: true,
            curOrder: '',
            orderList: [],
            showOrderPicker: false
            showOrderPicker: false,
            selItemList: [],
            isManage: false,
            bussuness: ''
        }
    },
    watch:{
@ -316,6 +330,7 @@ export default{
                        var list = _.map(res.detailModelList, v=>{
                            var key = _.keys(v)[0]
                            v[key].forEach(m => {
                                m.isActive = false
                                m.cargoState==1? openCount++ : closeCount++
                                if(m.faultState==1){
                                    faultCount++
@ -377,7 +392,203 @@ export default{
        accessLeftNum(item){
            var left = (item.quantity||0) - (item.batchNum||0)
            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>
@ -389,7 +600,6 @@ export default{
    .list{
        display: flex;
        flex-wrap: wrap;
        overflow-y: auto;
        align-content: flex-start;
        .item{
            margin-left: 5px;
@ -408,7 +618,8 @@ export default{
        }
    }
    .left-list, .list{
        height: calc(100vh - 158px);
        height: calc(100vh - 210px);
        overflow-y: auto;
    }
    .color-block{
        background: #ff9526;
@ -426,6 +637,9 @@ export default{
        .list, .left-list{
            height: calc(100vh - 44px);
        }
        .bot-banner{
            display: none;
        }
    }
    .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>
@ -450,7 +677,7 @@ export default{
.mainNobotHasTop{
    .replenishment-start-device-detail{
        .list, .left-list{
            height: calc(100vh - 206px);
            height: calc(100vh - 258px);
        }
        &.is-view{
            .list, .left-list{

+ 2 - 4
mini-pro-web/src/views/replenishment/start/quick.vue

@ -92,7 +92,6 @@ export default{
    },
    watch:{
        activeKey(n){
            console.log(this.selItemList, 'this.selItemList')
            this.curItem = ''
            this.$nextTick(()=>{
                this.curItem = this.list[n]
@ -206,7 +205,7 @@ export default{
                    return
                }
            }
            if(this.query.quantity < this.allNum){
            if(this.outDetailId && this.query.quantity<this.allNum){
                this.$toast('当前补货数量超过了未放置数量,请重新设置')
                return
            }
@ -474,9 +473,7 @@ export default{
    .list{
        display: flex;
        flex-wrap: wrap;
        overflow-y: auto;
        align-content: flex-start;
        // min-height: calc(100vh - 130px);
        .item{
            margin-left: 5px;
            margin-bottom: 5px;
@ -489,6 +486,7 @@ export default{
    }
    .left-list, .list{
        height: calc(100vh - 178px);
        overflow-y: auto;
    }
    .color-block{
        background: #ff9526;

+ 1 - 1
mini-pro-web/src/views/replenishment/stockUp/deviceList.vue

@ -31,7 +31,7 @@
                    </div>
                    <div class="lh20 ptb10 kitbox">
                        <div class="box-flex-1">
                            <div>待补药品数量:{{item.daibushangpinshuliang}}</div>
                            <div>待入库药品数量:{{item.daibushangpinshuliang}}</div>
                            <div>未设药品货道:{{item.weishezhishangpinhuodao}}</div>
                            <div>设备所属:{{item.community}}</div>
                            <div >设备编号:{{item.equNum}}</div>