Browse Source

1.4.4需求开发

lincl 2 years ago
parent
commit
3b3969f8b5

+ 6 - 0
mini-pro-web/src/mixins/common.js

@ -165,6 +165,12 @@ Vue.mixin({
        formatSex(v){
            return v==1? "男" : v==2? "女" : "未知"
        },
        formatDate(date){
            if(!date){
                return ''
            }
            return this.$moment(date).format('YYYY-MM-DD')
        },
        formatDatetime(date){
            if(!date){
                return ''

+ 1 - 1
mini-pro-web/src/router/index.js

@ -290,7 +290,7 @@ router.afterEach((to, from) => {
    else if(noSetTitleList.indexOf(to.path)>-1){
      
    }
    window.scrollTo(0, 0);
    // window.scrollTo(0, 0);
})

+ 76 - 93
mini-pro-web/src/views/device/cargoLane/setting.vue

@ -1,46 +1,58 @@
<template>
    <div class='deviceDetail'>
        <div class='grid-3 c-f14 c-333 bgc-fff ptb10 c-border-b'>
            <div class='c-t-center'>
                <div class='mb5'><div class='bgc-17b3ec w60 h30' style='display:inline-block'></div></div>
        <div class='grid-3 c-f14 c-333 bgc-fff pt7 pb3 '>
            <div class='c-t-center  c-17b3ec'>
                <span>正常</span>
                <div class='mb5'><div class='bgc-17b3ec bar-icon' style='display:inline-block'></div></div>
            </div>
            <div class='c-t-center'>
                <div class='mb5'><div class='bgc-ff5e6c w60 h30' style='display:inline-block'></div></div>
            <div class='c-t-center  c-ff5e6c'>
                <span>故障</span>
                <div class='mb5'><div class='bgc-ff5e6c bar-icon' style='display:inline-block'></div></div>
            </div>
            <div class='c-t-center'>
                <div class='mb5'><div class='bgc-ff9526 w60 h30' style='display:inline-block'></div></div>
            <div class='c-t-center  c-ff9526'>
                <span>关闭</span>
                <div class='mb5'><div class='bgc-ff9526 bar-icon' style='display:inline-block'></div></div>
            </div>
        </div>
        <div v-for='(citem, index) in list' :key="index">
            <div class='mt10 bgc-fff ptb10 c-border-tb plr15 c-f14'>
                <div class='flex f_y_c f_x_s'>
                    <span>第{{index+1}}层</span>
                    <van-checkbox v-model="citem.checkAll" @change="onRowChange($event, citem)" color="#17b3ec">选择整行</van-checkbox>
        <div class="button-group">
            <div class="button-item">
                <van-button @click="toSetCount" type="primary" size="small" block round color="linear-gradient(-30deg, #1ea4f9 0%, #2cc3f9 100%), linear-gradient(#ffffff, #ffffff)">设置货道容量</van-button>
            </div>
            <div class="button-item">
                <van-button @click="mergeAndSplitCargo(true)" type="primary" size="small" block round color="linear-gradient(-30deg, #1ea4f9 0%, #2cc3f9 100%), linear-gradient(#ffffff, #ffffff)">货道合并</van-button>
            </div>
            <div class="button-item">
                <van-button @click="mergeAndSplitCargo(false)" type="primary" size="small" block round color="linear-gradient(-30deg, #1ea4f9 0%, #2cc3f9 100%), linear-gradient(#ffffff, #ffffff)">货道拆分</van-button>
            </div>
        </div>
        <div class="plr15">
            <div class="cargo-content">
                <div class="cargo-content-left">
                    <van-sidebar v-model="active">
                        <van-sidebar-item @click="changeCargo(0)" title="全部" />
                        <van-sidebar-item @click="changeCargo(i)" v-for="i in 6" :title="`第${i}层`" :key="i" />
                    </van-sidebar>
                </div>
                <div class='flex mt10 x-overflow'>
                    <div v-for='(item, cindex) in citem.list' :key="cindex">
                        <div @click="onSelect(item)" class='c-t-center w30 c-position-r item' 
                            :class='{mr10: cindex!=citem.list.length-1}'>
                            <div>{{cindex+1}}</div>
                            <div class='c-t-center'><div :class='item.faultState==1? "c-cirlce-ff5e6c" : item.cargoState==1? "c-cirlce-17b3ec" : "c-cirlce-ff9526"'></div></div>
                            <div class='c-border ptb5 item-box ellipsis_1' :class='{active: selectList.indexOf(item)!=-1, isMerge: item.state==21||item.state==20}'>{{item.state==21?"主":item.cargoCapacity}}</div>
                <div class="cargo-content-right plr15 ptb10">
                    <div v-for='(citem, index) in list' :key="index" class="cargo-list-wrap">
                        <div class="cargo-content-right__title kitbox">
                            <div class="box-flex-1 fs-16 c-333 f-bold">第{{citem.index}}层</div>
                            <div><van-checkbox v-model="citem.checkAll" @change="onRowChange($event, citem)" color="#17b3ec">选择整行</van-checkbox></div>
                        </div>
                        <div class="cargo-list">
                            <div v-for='(item, cindex) in citem.list' :key="cindex" @click="onSelect(item)" class='c-t-center w30 c-position-r cargo-item' 
                                :class='{mr10: cindex!=citem.list.length-1}'>
                                <div>{{cindex+1}}</div>
                                <div class='c-t-center'><div :class='item.faultState==1? "c-cirlce-ff5e6c" : item.cargoState==1? "c-cirlce-17b3ec" : "c-cirlce-ff9526"'></div></div>
                                <div class='c-border ptb5 item-box ellipsis_1' :class='{active: selectList.indexOf(item)!=-1, isMerge: item.state==21||item.state==20}'>{{item.state==21?"主":item.cargoCapacity}}</div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
        <div class='mt20 plr15'>
            <van-button class='c-border-r-5' style='width:100%' type="info" @click="toSetCount">设置货道容量</van-button>
        </div>
        <div class='mt20 plr15'>
            <van-button @click="mergeAndSplitCargo(true)" class='c-border-r-5' style='width:100%' type="info">货道合并</van-button>
        </div>
        <div class='mt20 plr15 mb30'>
            <van-button @click="mergeAndSplitCargo(false)" class='c-border-r-5' style='width:100%' type="info">货道拆分</van-button>
        </div>
        <SetStockDialog 
            v-model="setStockShow" 
@ -59,6 +71,8 @@ export default{
    },
    data(){
        return {
            checked: false,
            active: 0,
            deviceInfo: '',
            deviceId: this.$route.query.deviceId,
            list: [],
@ -100,6 +114,7 @@ export default{
                            }
                        })
                        list = _.sortBy(list, 'index')
                        this.tmpList = list
                        this.list = list
                        console.log(list)
                    }
@ -163,6 +178,16 @@ export default{
            this.selectList.push(item)
        },
        onRowChange(e, item){
            this.selectList = _.filter(this.selectList, (v, i)=>{
                return v.layerNo != item.list[0].layerNo
            })
            if(e){
                this.selectList = this.selectList.concat(item.list) 
            } else {
                // this.selectList = []
            }
            return
            if(this.selectList.length && this.selectList[0].layerNo!=item.layerNo){
                this.list[Number(this.selectList[0].layerNo)-1].checkAll = false
            }
@ -188,7 +213,7 @@ export default{
                        resolve(true)
                    })
                    .catch(() => {
                        this.$loading('保存中..')
                        // this.$loading('保存中..')
                        resolve(false)
                    });
                    return 
@ -260,25 +285,17 @@ export default{
                    return v.id
                })
            } else {
                if(!this.selectList.length || this.selectList.length>1 || this.selectList[0].state!=21){
                    this.$toast('请选择一个主货道')
                if(!this.selectList.length || _.find(this.selectList, v=>{return v.state!=21})){
                    this.$toast('请选择一个或多个主货道进行拆分')
                    return
                }
                if(!await this.checkSplit()){
                    return
                }
                this.$loading('保存中..')
                var item = this.selectList[0]
                var list = this.list[Number(item.layerNo)-1].list
                ids.push(item.id)
                for(var i=Number(item.wayerNo); i<list.length; i++){
                    var v = list[i-1]
                    if(v.state == 20){
                        ids.push(v.id)
                    } else {
                        break;
                    }
                }
                _.each(this.selectList, item=>{
                    ids.push(item.id)
                })
            }
            
            var p = {
@ -341,60 +358,26 @@ export default{
                    console.error(err)
                })
        },
        changeCargo(i){
            if(this.active === i){
                return
            }
            this.selectList = []
            _.each(this.tmpList, v=>{
                v.checkAll = false
            })
            if(!i){
                this.list = this.tmpList
            } else {
                i--
                this.list = [this.tmpList[i]]
            }
            document.getElementsByClassName('cargo-content-right')[0].scrollTop = 0
        }
    },
    
}
</script>
<style scoped lang='scss'>
.deviceDetail{
    .grid-3{
        display: grid;
        grid-template-columns: 1fr 1fr 1fr;
    }
    .c-cirlce-ff9526{
        background: #ff9526;
        width: 7px;
        height: 7px;
        border-radius: 50%;
        display: inline-block;
    }
    .c-cirlce-17b3ec{
        background: #17b3ec;
        width: 7px;
        height: 7px;
        border-radius: 50%;
        display: inline-block;
    }
    .c-cirlce-ff5e6c{
        background: #ff5e6c;
        width: 7px;
        height: 7px;
        border-radius: 50%;
        display: inline-block;
    }
    .x-overflow{
        overflow-x: auto;
        -ms-overflow-style: none;
    }
    .x-overflow::-webkit-scrollbar{
        display:none;
    }
    .item{
        .active{
            border-color: #17b3ec;
            background-image: url('../../../assets/images/gouxuan.png');
            background-size: 15px 15px;
            background-repeat: no-repeat;
            background-position: bottom right;
        }
        .isMerge{
            background-color: #17b3ec;
            color: #fff;
        }
        .item-box{
            line-height: 20px;
        }
    }
}
@import './css/setting.scss';
</style>

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

@ -8,14 +8,40 @@
                    <span class="v-middle">{{selcommunityName}}</span>
                    <van-icon name="arrow-down" />
                </div>
                <div class="drop-menu-area kitbox">
                    <div class="drop-menu-area-left" v-if="townList&&townList.length">
                        <van-sidebar v-model="activeKey">
                            <van-sidebar-item v-for="(item, i) in townList" :key="i" :title="item.townName" />
                        </van-sidebar>
                <div class="drop-menu--wrap ">
                    <div class="search-area">
                        <form action="/">
                            <van-search
                                v-model="searchText"
                                placeholder="社区名称"
                                @search="onSearch"
                                @clear="onSearch"
                                background="transparent"
                            >
                            </van-search>
                        </form>
                    </div>
                    <div class="drop-menu-area-right fs-14">
                        <div v-for="(item, i) in communityList" :key="i" @click="onSelect(item)">{{item.hospitalName}}</div>
                    <div class="date-search">
                        <div class="date-item" :class="startDate? 'c-333' : '' " @click="showDatePick('startDate')">{{startDate || '请选择日期'}}</div>
                        <div class="split plr10 c-fff">--</div>
                        <div class="date-item" :class="endDate? 'c-333' : '' " @click="showDatePick('endDate')">{{ endDate || '请选择日期'}}</div>
                        <div @click="startDate='';endDate=''" class="clear tr box-flex-1">清空</div>
                    </div>
                    <div class="drop-menu-area kitbox">
                        <div class="drop-menu-area-left" v-if="townList&&townList.length">
                            <van-sidebar v-model="activeKey">
                                <van-sidebar-item v-for="(item, i) in townList" :key="i" :title="item.townName" />
                            </van-sidebar>
                        </div>
                        <div class="drop-menu-area-right fs-14">
                            <template v-if="communityList&&communityList.length">
                            <div v-for="(item, i) in communityList" :key="i" @click="onSelect(item)">{{item.hospitalName}}</div>
                            </template>
                            <div v-else class="c-999 fs-14 tc pt50">暂无数据~~</div>
                        </div>
                    </div>
                    <div class="drop-menu-button ">
                        <van-button @click="onSelect()" color="#17b3ec" round block type="primary">确定</van-button>
                    </div>
                </div>
            </div>
@ -79,7 +105,7 @@
                        <li @click="medicineTime('7')" class="border-r" :class="medicineBag == '7' ? 'li-bag':''">7日</li>
                        <li @click="medicineTime('30')" class="border-r" :class="medicineBag == '30' ? 'li-bag':''">30日</li>
                        <li @click="medicineTime('90')" class="border-r" :class="medicineBag == '90' ? 'li-bag':''">90日</li>
                        <li @click="medicineTime('全部')" :class="medicineBag == '' ? 'li-bag':''">全部</li>
                        <li @click="medicineTime('-1')" :class="medicineBag == '-1' ? 'li-bag':''">全部</li>
                    </ul>
                </div>
			</div>
@ -104,7 +130,7 @@
                        <li @click="prescriptionTime('7')" class="border-r" :class="prescriptionBag == '7' ? 'li-bag':''">7日</li>
                        <li @click="prescriptionTime('30')" class="border-r" :class="prescriptionBag == '30' ? 'li-bag':''">30日</li>
                        <li @click="prescriptionTime('90')" class="border-r" :class="prescriptionBag == '90' ? 'li-bag':''">90日</li>
                        <li @click="prescriptionTime('全部')" :class="prescriptionBag == '' ? 'li-bag':''">全部</li>
                        <li @click="prescriptionTime('-1')" :class="prescriptionBag == '-1' ? 'li-bag':''">全部</li>
                    </ul>
                </div>
			</div>
@ -115,11 +141,11 @@
                        <span>次</span>
                    </div>
                </div>
                <div class="prescription-num">药品数量:{{ prescriptionStatics.drugTotal }}件</div>
                <div class="prescription-num">药品数量:{{ prescriptionStatics.drugTotal }}盒</div>
            </div>
		</div>
        <!-- 销售额 -->
        <div v-if="sales" class="panel plr15 mt10 medicine">
        <!-- <div v-if="sales" class="panel plr15 mt10 medicine">
			<div class="kitbox pt15 box-flex-c">
				<div class="box-flex-c c-333 fs-16 f-bold">销售额</div>
                <div class="box-flex-c c-333 fs-12 f-bold time">
@ -138,8 +164,19 @@
                <div style="display:none;">日环比:<span>5.00%</span></div>
            </div>
            <div id="sales-chart" class="sales-chart"></div>
		</div>
		</div> -->
        <div class="home-bottom"></div>
        <van-popup v-model="datePickerShow" position="bottom"  >
            <van-datetime-picker
                v-model="currentDate"
                @confirm="onPick"
                @cancel="datePickerShow=false"
                type="date"
                title=""
                :max-date="maxDate"
            />
        </van-popup>
	</div>
</template>
<script>
@ -182,7 +219,7 @@ export default {
            medicineBag:'1',
            medicineData:false,
            medicineShow:true,
            sales:true,
            sales:false,
            prescriptionBag:'1',
            salesBag:'1',
            count:[],
@ -216,9 +253,18 @@ export default {
            selcommunity: '',
            activeKey: 0,
            defaultOption: [
                { townName: '全部', town: "", children: [{hospital: '', hospitalName: '全部'}] },
                { townName: '全部', town: "", children: [] },//{hospital: '', hospitalName: '全部'}
            ],
            first: false
            first: false,
            searchText: '',
            datePickerShow: false,
            currentDate: new Date(),
            maxDate: new Date(),
            startDate: '',
            endDate: '',
            curDatePickType: ''
    	}
  	},
	created(){
@ -268,7 +314,20 @@ export default {
        // 取药次数
        medicine(){
            var p = this.getTownParams()
            p.day = this.medicineBag
            var { startDate, endDate, medicineBag } = this
            if(medicineBag){
                if(medicineBag == -1){
                } else {
                    p.endTime = this.$moment().format('YYYY-MM-DD 23:59:59')
                    p.startTime = this.$moment().add(-Number(medicineBag)+1, 'days').format('YYYY-MM-DD 00:00:00')
                }
            } else {
                p.startTime = startDate + " 00:00:00"
                p.endTime = endDate? (endDate + " 23:59:59") : ""
            }
            // p.day = this.medicineBag
            console.log('medicine', p)
            medicineAbinetApi
				.getmedicine(p)
@ -285,7 +344,19 @@ export default {
        // 电子处方单
        prescriptions(){
            var p = this.getTownParams()
            p.day = this.prescriptionBag
            var { startDate, endDate, prescriptionBag } = this
            if(prescriptionBag){
                if(prescriptionBag == -1){
                } else {
                    p.endTime = this.$moment().format('YYYY-MM-DD 23:59:59')
                    p.startTime = this.$moment().add(-Number(prescriptionBag)+1, 'days').format('YYYY-MM-DD 00:00:00')
                }
            } else {
                p.startTime = startDate + " 00:00:00"
                p.endTime = endDate? (endDate + " 23:59:59") : ""
            }
            medicineAbinetApi
				.getprescriptions(p)
				.then(res=>{
@ -313,15 +384,8 @@ export default {
        },
        // 电子处方单查询
        prescriptionTime(val){
            if(val == '全部'){
                this.prescriptionBag = '';
                this.prescriptions();
                console.log('全部')
            }else{
                this.prescriptionBag = val;
                this.prescriptions();
                console.log('1,3,7,9')
            }
            this.prescriptionBag = val;
            this.prescriptions();
        },
        // 销售额查询
        salesTime(val){
@ -477,7 +541,7 @@ export default {
            var item = this.townList[this.activeKey]
            if(!item.children || !item.children.length){
                await medicineAbinetApi
                    .findOrgList({ code: item.town, paeg: 1, pageSize: 999 })
                    .findOrgList({ code: item.town || '', paeg: 1, pageSize: 999 })
                    .then(res => {
                        console.log('findOrgList', res)
                        if (res.status == 200) {
@ -493,11 +557,24 @@ export default {
                    })
            }
            this.communityList = item.children
            if(_.isEmpty(this.searchText)){
                this.communityList = item.children
            } else {
                this.communityList = _.filter(item.children, v=>{
                    return v.hospitalName.indexOf(this.searchText)!=-1
                })
            }
        },
        onSelect(item){
            var { startDate, endDate } = this
            if(startDate || endDate){
                this.prescriptionBag = ''
                this.medicineBag = ''
            }
            console.log('this.selcommunity', item)
            this.selcommunity = item;
            if(item){
                this.selcommunity = item;
            }
            this.drowMenuShow = false;
            this.refreshData()
        },
@ -531,6 +608,23 @@ export default {
                }
            }
            return p 
        },
        onSearch(){
            if(this.activeKey != 0){
                this.activeKey = 0
            } else {
                this.loadChildren()
            }
        },
        showDatePick(type){
            this.curDatePickType = type
            this.currentDate = this[type]? this.$moment(this[type]).toDate() : new Date()
            this.datePickerShow = true
        },
        onPick(e){
            var date = this.$moment(this.currentDate).format('YYYY-MM-DD')
            this[this.curDatePickType ] = date
            this.datePickerShow = false
        }
    },
}

+ 67 - 25
mini-pro-web/src/views/index/scss/index.scss

@ -17,6 +17,9 @@
        z-index: 5;
        .drop-menu{
            position: relative;
            .van-sidebar-item{
                height: 12px 12px;
            }
            .van-sidebar-item--select::before{
                background-color: #17b3ec;
            }
@ -32,38 +35,77 @@
                    top: 8px;
                }
            }
            .drop-menu-area{
                background: #f7f8fa;
                margin-top: 9px;
                position: absolute;
                width: 100%;
                left: 0;
                display: none;
                border: 1px solid #e1e1e1;
                border-radius: 5px;
                // border-bottom-left-radius: 5px;
                // border-bottom-right-radius: 5px;
                height: calc(100% - 40px);
                z-index: 5;
                .drop-menu-area-right{
                    height: 100%;
                    overflow-y: auto;
                    background: #fff;
                    -webkit-box-flex: 1;
                    >div{
                        padding: 10px 15px;
                        // border-bottom: 1px solid #e1e1e1;
                        &:last-child{
                            border-bottom: 0;
            .drop-menu--wrap{
                .search-area{
                    display: none;
                    .van-search{
                        padding: 10px 0;
                    }
                }
                .date-search{
                    -webkit-box-align: center;
                    height: 34px;
                    font-size: 14px;
                    color: #999;
                    display: none;
                    .date-item{
                        height: 100%;
                        width: 136px;
                        background-color: #fff;
                        line-height: 34px;
                        text-align: center;
                    }
                    .clear{
                        color: #fff;
                    }
                }
                .drop-menu-area{
                    background: #f7f8fa;
                    margin-top: 9px;
                    position: absolute;
                    width: 100%;
                    left: 0;
                    display: none;
                    border: 1px solid #e1e1e1;
                    border-radius: 5px;
                    // border-bottom-left-radius: 5px;
                    // border-bottom-right-radius: 5px;
                    height: calc(100% - 180px);
                    z-index: 5;
                    .drop-menu-area-right{
                        height: 100%;
                        overflow-y: auto;
                        background: #fff;
                        -webkit-box-flex: 1;
                        padding: 0 15px;
                        >div{
                            padding: 12px 0;
                            border-bottom: 1px solid #e1e1e1;
                            &:last-child{
                                border-bottom: 0;
                            }
                        }
                    }
                }
                .drop-menu-button{
                    position: absolute;
                    width: 100%;
                    bottom: 0;
                    display: none;
                }
            }
            &.active{
                height: calc(100vh - 49px);
                height: calc(100vh - 30px);
                .search-area, .drop-menu-button{
                    display: block;
                }
                .drop-menu-area{
                    display: -webkit-box;
                }
                .date-search{
                    display: -webkit-box;
                }
               .drop-menu-title{
                   color: #17b3ec;
                //    border-bottom-left-radius: 0;
@ -320,7 +362,7 @@
        width: 100vh;
        height: 100vh;
        position: fixed;
        background-color: rgba($color: #000000, $alpha: 0.3);
        background-color: rgba($color: #000000, $alpha: 0.8);
        z-index: 4;
        top: 0;
    }

BIN
mini-pro-web/src/views/machine/img/complete.png


+ 7 - 5
mini-pro-web/src/views/order/detail/index.vue

@ -7,11 +7,11 @@
            </div>
            <div class="row">
                <div>订单类型</div>
                <div>{{info.orderTypeName || "线上订单"}}</div>
                <div>{{info.orderSource=='厦门i健康'? '线上订单' : "线下订单"}}</div>
            </div>
            <div class="row">
                <div>开方时间</div>
                <div>{{formatDatetime(info.prescribeTime)}}</div>
                <div>{{info.orderSource=='厦门i健康'? formatDatetime(info.prescribeTime) : formatDate(info.prescribeTime)}}</div>
            </div>
            <div class="row">
@ -30,11 +30,13 @@
            <div class="row">
                <div>订单金额</div>
                <div>¥{{info.amount}}</div>
                <div v-if="info.amount">¥{{info.amount}}</div>
                <div v-else>--</div>
            </div>
            <div class="row">
            <div class="row" >
                <div>社保扣款</div>
                <div>¥{{info.socialinsurPayment}}</div>
                <div v-if="info.socialinsurPayment">¥{{info.socialinsurPayment}}</div>
                <div v-else>--</div>
            </div>
            <div class="row">
                <div>订单状态</div>

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

@ -80,12 +80,12 @@
                    </div>
                    <div class="lh20 ptb10">
                        <div>来源机构:{{item.community}}</div>
                        <div>订单类型:{{item.orderTypeName || "线上订单"}}</div>
                        <div>开方时间:{{formatDatetime(item.prescribeTime)}}</div>
                        <div>订单类型:{{item.orderSource=='厦门i健康'? '线上订单' : "线下订单"}}</div>
                        <div>开方时间:{{item.orderSource=='厦门i健康'? formatDatetime(item.prescribeTime) : formatDate(item.prescribeTime)}}</div>
                        <div>取药码:{{item.pickUpNum}}</div>
                    </div>
                    <div class="ptb10 bt-e1e1e1 kitbox">
                        <div class="box-flex-1 lh24">¥{{item.amount}}</div>
                    <div class="ptb10 bt-e1e1e1 kitbox" v-if="item.reviewerState==0 || item.amount">
                        <div class="box-flex-1 lh24"><span v-if="item.amount">¥{{item.amount}}</span></div>
                        <div v-if="item.reviewerState==0"><van-button @click.stop="reviewerOrder(item)" size="mini" color="#17b3ec" type="primary">取消审方</van-button></div>
                    </div>
                </div>