lincl 3 éve
szülő
commit
c811ad4edd

+ 18 - 0
mini-pro-web/src/api/api-medicineAbinet.js

@ -397,6 +397,24 @@ let service = {
			params
		});
    },
	// 获取设备广告
	devinfoAdvList: function(params) {
		return request({
			url: `${BASE}/open/noLogin/devinfo`,
			method: "get",
			params
		});
    },
	// 根据用户id,查询设备在线统计
	countAllDevice: function(params) {
		return request({
			url: `${BASE}/baseDevice/countAllDevice`,
			method: "get",
			params
		});
    },
	
	
};

+ 3 - 1
mini-pro-web/src/assets/styles/index.scss

@ -81,7 +81,9 @@ a:hover {
div:focus{
  outline: none;
 }
.c-red{
  color: red;
}
.fr {
  float: right;
}

+ 2 - 0
mini-pro-web/src/router/index.js

@ -82,6 +82,8 @@ const whiteList = [
	'/login', 
	'/register', 
	'/fotgetPassword',
    '/machine/index',
    '/machine'
]
const router = new VueRouter({

+ 10 - 1
mini-pro-web/src/utils/app-ajax.js

@ -17,11 +17,20 @@ function redirectToLogin() {
const service = ({url, method, headers, data, params, noMesg}) => {
    return new Promise((resolve, reject) => {
        var userAgent = "{}"
        if(store.getters.user && store.getters.user.id){
			var userAgent = {
				uname: encodeURIComponent(store.getters.user.name),
				uid: store.getters.user.id
			}
            userAgent = JSON.stringify(userAgent)
		}
		
        let _headers = Object.assign({
            "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8",
            "login-device": "mobile",
            "userAgent": localStorage.getItem('Medical-Care-Wx-Logined-User-Agent') || "{}",
            "userAgent": userAgent,
            "token": store.getters.user.accessToken
        }, headers)

+ 10 - 1
mini-pro-web/src/utils/web-ajax.js

@ -30,7 +30,16 @@ const service = axios.create({
service.interceptors.request.use(
	config => {
		config.headers["login-device"] = "mobile"
		config.headers["userAgent"] = localStorage.getItem('Medical-Care-Wx-Logined-User-Agent') || "{}"
		if(store.getters.user && store.getters.user.id){
			var userAgent = {
				uname: encodeURIComponent(store.getters.user.name),
				uid: store.getters.user.id
			}
			config.headers["userAgent"] = JSON.stringify(userAgent)
		} else {
			config.headers["userAgent"] = "{}"
		}
		
		if(store.getters.user.accessToken){
			config.headers["token"] = store.getters.user.accessToken
		}

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

@ -27,19 +27,19 @@
				<div class="pt20 pb20 plr5">
					<van-row class="">
						<van-col span="6" class="tc ">
							<div class="fs-23 c-17b3ec">{{allCount}}</div>
							<div class="fs-23 c-17b3ec">{{countObj.total}}</div>
							<div class="fs-14 c-666 pt5">全部设备</div>
						</van-col>
						<van-col span="6" class="tc">
							<div class="fs-23 c-ff9526">0</div>
							<div class="fs-23 c-ff9526">{{countObj.saleTotal}}</div>
							<div class="fs-14 c-666 pt5">在线设备</div>
						</van-col>
						<van-col span="6" class="tc">
							<div class="fs-23 c-ff5e6c">0%</div>
							<div class="fs-23 c-ff5e6c">{{countObj.onlineRate * 100}}%</div>
							<div class="fs-14 c-666 pt5">在线率</div>
						</van-col>
						<van-col span="6" class="tc">
							<div class="fs-23 c-17b3ec">0</div>
							<div class="fs-23 c-17b3ec">{{countObj.onlineTotal}}</div>
							<div class="fs-14 c-666 pt5">在售设备</div>
						</van-col>
					</van-row>
@ -80,7 +80,12 @@ export default {
			searchTypeShow: false,
            searchType: "今日",
			options: ['今日', '7天内', '30天内'],
			allCount: 0
			countObj: {
				"total": 0,							//总的在线数
				"saleTotal": 0,						//在售数
				"onlineRate": 0,					//在线率
				"onlineTotal": 0						//在线设备数
			}
    	}
  	},
	created(){
@ -89,10 +94,12 @@ export default {
  	methods: {
		countall(){
			medicineAbinetApi
				.countall()
				.countAllDevice({
					userId: this.user.id
				})
				.then(res=>{
					console.log('countall', res)
					this.allCount = res.obj.count || 0
					this.countObj = _.assign(this.countObj, res.obj) 
				})
				.catch(err=>{
					console.error(err)

+ 7 - 5
mini-pro-web/src/views/machine/components/Result.vue

@ -7,14 +7,15 @@
			<div class="content">
				<div class="bold">处方药品清单:</div>
				<div class="list">
					<div class="kitbox" v-for="i in 20" :key="i">
						<div class="box-flex-1">1、xxxxxxxxxxx药品</div>
						<div>x1 (盒)</div>
					<div class="kitbox" v-for="(item, i) in orderdetail" :key="i" :style="item.success? 'color: green' : ''">
						<div class="box-flex-1 ellipsis_1" ><van-icon v-if="item.success" style="vertical-align: text-top;" name="passed"/> {{i+1}}、{{item.goodsName || item.drugName}}</div>
						<div v-if="item.status==1">x{{item.quantity}} ({{item.unit}})</div>
						<div v-else class="c-red">药柜无货</div>
					</div>
				</div>
			</div>
			<div class="btns">
				<img @click="rsType=3" v-show="rsType==1" src="../img/quanbuquyao_icon.png" alt="">
				<img @click="$emit('outDrug'); rsType=3;" v-show="rsType==1" src="../img/quanbuquyao_icon.png" alt="">
				<img @click="$emit('onBack')" v-show="rsType==2" src="../img/yaofangquyao_icon.png" alt="">
			</div>
		</div>
@ -23,9 +24,10 @@
</template>
<script>
export default {
	props: ['rsType', 'orderdetail'],
  	data() {
    	return {
			rsType: 1 //1:订单信息 2订单错误  3订单成功
			// rsType: 1 //1:订单信息 2订单错误  3订单成功
    	}
  	},
	created(){

+ 2 - 0
mini-pro-web/src/views/machine/components/Scan.vue

@ -47,6 +47,8 @@ export default {
		},
		onCheckOrder(){
			this.$loading('获取订单..')
			this.$emit('onComplete', this.num)
			this.num = ''
			this.keyboardShow = false
		}
    },

BIN
mini-pro-web/src/views/machine/img/default.mp4


+ 150 - 20
mini-pro-web/src/views/machine/index.vue

@ -2,7 +2,7 @@
	<div class="machine-index">
		<div v-show="step===0" class="tc">
			<div class="plr15 pt20">
				<van-field v-model="deviceNum" label="" placeholder="请输入设备编号" />
				<van-field v-model="deviceNum" clearable label="" placeholder="请输入设备编号" />
			</div>
			<div class="tc mt20">
				<van-button color="#17b3ec" @click="init" type="primary">   启动  </van-button>
@ -14,20 +14,29 @@
			</div>
			<div class="video-swipe">
				<van-swipe :autoplay="3000" indicator-color="white">
					<van-swipe-item>1</van-swipe-item>
					<van-swipe-item>2</van-swipe-item>
					<van-swipe-item>3</van-swipe-item>
					<van-swipe-item>4</van-swipe-item>
				<van-swipe :autoplay="0" indicator-color="white">
					<template v-if="videoList&& videoList.length">
						<van-swipe-item v-for="(item, i) in videoList" :key="i">
							<video class="swipe-item-video" :autoplay="i==0" loop controls muted :src="setImgUrl(item.url)"></video>
						</van-swipe-item>
					</template>
					<van-swipe-item v-else>
						<!-- <img class="swipe-item-img" src="./img/banner01.png"> -->
						<video class="swipe-item-video" autoplay loop controls muted src="./img/default.mp4"></video>
					</van-swipe-item>
				</van-swipe>
			</div>
			<div class="img-swipe">
				<van-swipe :autoplay="3000" indicator-color="white">
					<van-swipe-item>1</van-swipe-item>
					<van-swipe-item>2</van-swipe-item>
					<van-swipe-item>3</van-swipe-item>
					<van-swipe-item>4</van-swipe-item>
					<template v-if="imgList && imgList.length">
						<van-swipe-item v-for="(item, i) in imgList" :key="i">
							<img class="swipe-item-img" :src="setImgUrl(item.url)">
						</van-swipe-item>
					</template>
					<van-swipe-item v-else>
						<img class="swipe-item-img" src="./img/banner01.png">
					</van-swipe-item>
				</van-swipe>
			</div>
@ -60,14 +69,14 @@
			</div>
		</div>
		<Scan  v-show="step==2" @onBack="step=1"/>
		<Result  v-show="step==3" @onBack="step=2"/>
		<Scan @onComplete="onComplete" v-show="step==2" @onBack="step=1"/>
		<Result @outDrug="sendShipment" :rsType.sync="rsType" :orderdetail="orderdetail" v-show="step==3" @onBack="step=2"/>
	</div>
</template>
<script>
import Scan from './components/Scan.vue';
import Result from './components/Result.vue';
import medicineAbinetApi from '@/api/api-medicineAbinet'
export default {
	name: "machineIndex",
	components: {
@ -76,7 +85,7 @@ export default {
  	},
  	data() {
    	return {
			deviceNum: 'dev_001_T',
			deviceNum: 'dev_001',
			step: 0,
			curImg: '',
			illustrationMskShow: false,
@ -89,15 +98,79 @@ export default {
			forceClose: false,
			heartbitInterval: '',
			currindex: 0,
			orderdetail: []
			orderdetail: [],
			rsType: 1,
			imgList: [],
			videoList: []
    	}
  	},
	created(){
		
	},
  	methods: {
		devinfoAdvList(){
			var p = {
				equNum: this.deviceNum
			}
			medicineAbinetApi
                .devinfoAdvList(p)
                .then(res=>{
                    console.log('devinfoAdvList', res)
					this.$toast.clear()
					if(res.status == 200){
						res.detailModelList.forEach(v => {
							if(v.categoryCode==2){
								this.imgList.push(v)
							} else {
								this.videoList.push(v)
							}
						});
					} else {
						this.$toast(res.message || '获取广告失败')
					}
                })
                .catch(err=>{
                    console.error(err)
                })
		},
		onComplete(data){
			this.checkOrderAndReturn({pickUpNum: data, cardNum: ""})
		},
		checkOrderAndReturn({pickUpNum="", cardNum=""}){
			this.$toast.clear()
            this.$loading('加载中..')
            let p = {
                deviceId: this.deviceNum, //设备编号
				pickUpNum, //取药码
				cardNum //社保卡号
            }
            console.log('params', p)
            medicineAbinetApi
                .checkOrderAndReturn(p)
                .then(res=>{
                    console.log('getDetialOutOfStock', res)
					if(res.status == 200){
						this.$toast.clear()
						res.obj.list.forEach(v=>{
							v.success = false
						})
						this.orderdetail = res.obj.list
						this.rsType = res.obj.status==1? 1 : 2
						this.step = 3
					} else {
						this.$toast(res.message || '获取订单失败')
					}
                })
                .catch(err=>{
                    console.error(err)
                })
        },
		init: function() {
			if(!this.deviceNum){
				return
			}
			this.path += this.deviceNum
			this.devinfoAdvList()
			this.path += this.deviceNum + "_T"
			if (typeof(WebSocket) === "undefined") {
				alert("您的浏览器不支持socket")
			} else {
@ -136,16 +209,43 @@ export default {
				if (msgobj.mess.indexOf("异常") < 0) {
					this.currindex++;
					if (this.orderdetail.length > this.currindex) {
						this.$loading(`正在出第${this.currindex+1}个药..`)
						this.nextShipment(this.orderdetail[this.currindex]);
					} else {
						this.$dialog.alert({
							title: '出药提示',
							message: '出药完成',
							confirmButtonText: "返回首页"
						}).then(() => {
							this.step = 1
						});
					}
				} else {
					this.$toast(msg.data.mess)
				}
			} else if (msgobj.type == 'BarCodeInfo') {
				if (msgobj.mess.indexOf("异常") < 0) {
					console.log("读到的条码:" + msg.data.mess)
				if (msgobj.mess.indexOf("异常") != -1) {
					this.$toast(msg.data.mess)
					console.log(msg.data.mess)
					return
				}
				this.checkOrderAndReturn({pickUpNum: msg.data.mess})
			} else if(msgobj.type == 'CardInfo'){
				if (msgobj.mess.indexOf("异常") != -1) {
					this.$toast(msg.data.mess)
					return
				}
				var arr = msgobj.mess.split("\n");
				var json = {}
				arr.forEach(v => {
					var tmp = v.split(":")
					json[tmp[0]] = tmp[1]
				});
				this.checkOrderAndReturn({cardNum: json['卡号']})
			}
		},
		sendReadCard: function() {
			this.$loading('加载中..')
			var obj = {
				type: "ReadCard",
				mess: ""
@ -154,9 +254,18 @@ export default {
		},
		sendShipment: function() {
			this.currindex = 0;
			this.$loading(`正在出第${this.currindex+1}个药..`)
			//循环订单返回的列表,读取第一个
			if (this.orderdetail.length > this.currindex) {
				this.nextShipment(this.orderdetail[this.currindex]);
			} else {
				this.$dialog.alert({
					title: '出药提示',
					message: '出药完成',
					confirmButtonText: "返回首页"
				}).then(() => {
					this.step = 1
				});
			}
		},
		nextShipment: function(row) {
@ -201,7 +310,14 @@ export default {
				}
				this.socket.send(JSON.stringify(obj));
			}, 60 * 1000)
		}
		},
		sendDeviceInfo: function() {
			var obj = {
				type: "ReadDevice",
				mess: ""
			}
			this.socket.send(JSON.stringify(obj));
		},
    },
	destroyed() {
		this.forceClose = true
@ -231,7 +347,7 @@ export default {
			margin: calc(90px / 6) auto 0;
			overflow: hidden;
			border-radius: 7px;
			background-color: #000000;
			// background-color: #000000;
			video{
				width: 100%;
				height: 100%;
@ -326,5 +442,19 @@ export default {
			
		}
	}
	.van-swipe{
		height: 100%;
		.swipe-item-img{
			width: 100%;
			height: 100%;
			display: block;
		}
		.swipe-item-video{
			width: 100%;
			height: 100%;
			display: block;
		}
	}
}
</style>