desk-query.vue 11.8 KB
 <template>
	<div class="container resource close-left-menu contaNEW">
		<div class="pop-banner clearfix">

			<h3 class="current-module">科室占比可视化</h3>
		</div>
		<div class="pd-form  fast-search-form">
			<div class="group-row">
				<div class="form-group fl" style='width: 480px;'>
					<label for="cn3" class="label w60 fl">时间范围</label>
					<div class="control control-filtering control-filtering-green fl ml-10" style='width:400px;'>
						<!-- <a class="option" @click='search.search_EQ_date=""' :class="{'all active':search.search_EQ_date==''}" href="javascript:;">全部</a> -->
						<a class="option" href="javascript:;" style='margin: 4px 14px;' @click='search.time=2' :class="{'all active':search.time==2}">近一月</a>
						<a class="option" href="javascript:;" style='margin: 4px 14px;' @click='search.time=3' :class="{'all active':search.time==3}">近三月</a>
						<a class="option" href="javascript:;" style='margin: 4px 14px;' @click='search.time=4' :class="{'all active':search.time==4}">近六月</a>
						<a class="option" href="javascript:;" style='margin: 4px 14px;' @click='search.time=5' :class="{'all active':search.time==5}">近一年</a>
						<a class="option" href="javascript:;" style='margin: 4px 14px;' @click='search.time=6' :class="{'all active':search.time==6}">其他</a>
					</div>
				</div>
				<div class="form-group" style="width: 462px;" v-if='search.time==6'>
					<!-- <label for="cn3" class="label label-xf"></label> -->
					<div class="control control-date" style="width: 462px;height:34px;overflow: inherit;">
						<div style="width: 46%;float: left">
							<datepicker :target.sync='search.begindate' :readonly="readonlyFlag" title="时间范围" placeholder="时间范围" styleobj="width:100% !important;border-radius:8px 0px 0px 8px !important;"></datepicker>
						</div>
						<span class="text-and"></span>
						<div style="width: 46%;float: left">
							<datepicker :target.sync='search.enddate' :readonly="readonlyFlag" title="时间范围" placeholder="时间范围" styleobj="width:100% !important;border-radius:0px 8px 8px 0px !important;"></datepicker>
						</div>
					</div>
				</div>
			</div>
			<div class="group-row">
				<div class="form-group fl" style='width: 800px;'>
					<label for="cn3" class="label w60 fl">分析维度</label>
					<div class="control control-filtering control-filtering-green fl ml-10" style='width:440px;'>
						<a class="all active" href="javascript:;" @click='search.analysisdim=1' :class="{'all active':search.analysisdim==1}">金额</a>
						<a class="option" href="javascript:;" style='margin: 4px 14px;' @click='search.analysisdim=2' :class="{'all active':search.analysisdim==2}">品种数</a>
						<a class="option" href="javascript:;" style='margin: 4px 14px;' @click='search.analysisdim=3' :class="{'all active':search.analysisdim==3}">条目数</a>
						<a class="option" href="javascript:;" style='margin: 4px 14px;' @click='search.analysisdim=4' :class="{'all active':search.analysisdim==4}">单量</a>
					</div>
				</div>
			</div>
			<div class="group-row">
				<div class="form-group form-label">
					<label for="cn3" class="label w60 fl">商品分类</label>
					<div class="control">
						<select id="cn3" class="inp4" v-model='categuid'>
							<option value="">请选择</option>
							<option  v-for='item in cateList' :value="item.guid">{{item.catename}}</option>
						</select>
					</div>
				</div>
				<div class="form-group form-label">
					<div class="control">
						<input type="text" placeholder="商品分类过滤" id="cnn1" v-model='catename'>
					</div>
				</div>
			</div>
			<div class="group-row">
				<div class="form-group fl" style='width: 960px;'>
					<label for="cn3" class="label w60 fl">过滤分类</label>
					<div class="control control-filtering control-filtering-green fl ml-10" style='width:890px;'>
						<a class="option checked" href="javascript:;" v-if='cateDetail.length==0'>暂无符合的数据</a>
						<a class="option" href="javascript:;" v-for='item in cateDetail' @click='item.state=!item.state' :class="{'all active':item.state==true}">{{item.catename}}</a>
						<a class="option checkbox" href="javascript:;" @click='checkedFlag'>选中</a>
					</div>
				</div>
			</div>
			<div class="group-row">
				<div class="form-group fl" style='width: 960px;'>
					<label for="cn3" class="label w60 fl">已选结果</label>
					<div class="control control-filtering control-filtering-green  control-checked fl ml-10" style='width:890px;'>
						<a class="option checked" href="javascript:;" v-if='checkedList.length==0'>暂无符合的数据</a>
						<a class="all active" href="javascript:;" v-for='item in checkedList' track-by="$index" @click='checkedList.splice($index,1)'>{{item.catename}}</a>
					</div>
				</div>
			</div>
			<div class="group-row t-right">
				<button class="fast-analy-form-btn btn-d btn-d-lg btn-d-activate btn-d-circle" @click='getChart'>分 析</button>
			</div>
		</div>

		<div class="fpart ">
			<div class="fheader">
				<h4 class="fh-rental">总额分析</h4>
				<!-- 	<div class="stretch ml-20">
					<div class="stretch-pull">
					</div>
				</div> -->
			</div>
			<div class="information clearfix">
				<div class="information-left">
					<div class="information-left-hos">
						<div class="fw" v-if='!countName'>暂无</div>
						<div class="fw" v-else>{{countName}}</div>
						<span  class="fW" v-if='!count'>暂无&nbsp;<i class="f-size14 text-color-gray">暂无</i></span>
						<span  class="fW" v-else>{{count}}&nbsp;<i class="f-size14 text-color-gray">{{countUnit}}</i></span>
					</div>
					<div class="information-left-hos">
						<div class="fw" v-if='!rentalData[0].meddeptname'>最高:暂无</div>
						<div class="fw" v-else>最高:{{rentalData[0].meddeptname }}</div>
						<span  class="fW" v-if='!rentalData[0].number '>暂无</span>
						<span  class="fW" v-else>{{rentalData[0].number }}&nbsp;<i class="f-size14 text-color-gray">{{countUnit}}</i></span>
					</div>
					<div class="information-left-hos">
						<div class="fw" v-if='!rentalData[rentalData.length-1].meddeptname'>最低:暂无</div>
						<div class="fw" v-else>最低:{{rentalData[rentalData.length-1].meddeptname}}</div>
						<span  class="fW"v-if='!rentalData[rentalData.length-1].number'>暂无</span>
						<span  class="fW" v-else>{{rentalData[rentalData.length-1].number}}&nbsp;<i class="f-size14 text-color-gray">{{countUnit}}</i></span>
					</div>
				</div>
				<div class="information-right fr" style='width:700px;'>
					<div id='echart1' style='width:100%;height:440px;'></div>
				</div>
			</div>
		</div>
	</div>
</template>
<script>
	var echarts_api = require('../../options/echarts_api.js');
	// 采购目录列表状态

	module.exports = {
		data: function() {
			return {
				cateList:[],
				catename:'',
				categuid:'',
				cateDetail:[],
				checkedList:[],

				search: {
					analysisdim: 1,
					begindate: '',
					enddate: '',
					time: 2,
				},
				row: [],
				rowName: '',
				rentalName: [],
				dateList: [],
				map: {},
				hos: [],
				hosList: [],
				hosListS: [],
				rowArr: [],
				valueArr: [],
				seriesList: [],
				colorList: ['#f0b3b0', '#7ea677', '#f6e0c4', '#7293b4', '#ffc63b', '#f2ccc4', '#c6df15', '#e3cf08', '#fad895', '#b37ec0'],
				stateFlag: true,
				sumData: '',
				rentalData: [],
				seriesName:'金额 (万元) ',
				count:0,
				countName:'总金额',
				countUnit:'',

			}
		},
		methods: {
			// 查询子级商品大类
			getDataList:function(){
				var self = this;

				Ajax.post('/billType/getmedgoodscate',{guid:self.categuid,catename:self.catename})
					.then(function(response) {
							var data=response.data.data;
							if(response.data.errorCode==0){
								for(var a=0;a<data.length;a++){
									data[a].state=false;
								}
								self.$set('cateDetail',data);
							}
					});
			},
			// 查询第一级 商品大类
			getData: function() {
				var self = this;
								

				Ajax.post('/billType/getmedgoodscate')
					.then(function(response) {
							var data=response.data.data;
							if(response.data.errorCode==0){
								self.$set('cateList',data);
							}
					});

			},
			checkedFlag:function(){
				var self = this;

				 for(var a=0;a<self.cateDetail.length;a++){

					  	if(self.cateDetail[a].state){
					  		self.checkedList.push(self.cateDetail[a]);
					  	}
					  }
					  var hash=[];
					  self.$set('checkedList', self.checkedList.reduce(function(item, next) {
						    hash[next.guid] ? '' : hash[next.guid] = true && item.push(next);
						    return item
						}, []))
			},
			getChart:function(){
				var self = this;
				self.rentalName=[];
				self.search.list=self.checkedList;
				self.rentalData=[];
				Ajax.post('/billType/getmeddeptgoodsuserd',self.search)
					.then(function(response) {
							var data=response.data.data;
							var maps=response.data.data.maps;
							if(response.data.errorCode==0){
								self.count=data.count;
								for(var a=0;a<maps.length;a++){
									maps[a].name=maps[a].meddeptname;

									if(maps[a].number){
										maps[a].value=maps[a].number;
									}else{
										maps[a].value=0;
									}
									
									
									self.rentalName.push(maps[a].meddeptname);
									self.$set('rentalData',maps);
								}
		
								if(maps.length==0){
									self.rentalData.push({'meddeptname':'暂无','number':'暂无'})
								}
								if(self.search.analysisdim=='1'){
										self.seriesName='金额 (万元) ';
										self.countName='总金额';
										self.countUnit='万元';
									}else if(self.search.analysisdim=='2'){
										self.seriesName='品种数 (个) ';
										self.countName='品种数';
										self.countUnit='个';
									}else if(self.search.analysisdim=='3'){
										self.seriesName='条目数 (条) ';
										self.countName='条目数';
										self.countUnit='条';
									}else if(self.search.analysisdim=='4'){
										self.seriesName='单量 (张) ';
										self.countName='单量';
										self.countUnit='张';
									}
								setTimeout(function() {
									self.echarts(1);
								}.bind(this), 1000)
								// self.$set('cateList',data);
							}
					});
				
			},
			// 柱状图
			echarts: function(num) {
				var self = this;

					var self = this;
	
					this.chart1 = echarts_api.init('echart1', {
						title: {
							text: '',
							subtext: ''
						},
						tooltip: {
							trigger: 'axis',
							axisPointer: {
								type: 'shadow'
							}
						},
						legend: {
							data: self.rentalName
						},
						toolbox: {
							feature: {
								saveAsImage: {}
							}
						},
						grid: {
							left: '3%',
							right: '4%',
							bottom: '3%',
							containLabel: true
						},
						xAxis: {
							type: 'value',
							boundaryGap: [0, 0.01]
						},
						yAxis: {
							type: 'category',
							data: self.rentalName,
							inverse:true,
						},
						series: [{
							name: self.seriesName,
							type: 'bar',
							barMaxWidth: 50,
							data: self.rentalData,
							color: ['#ff7202']
						}, ]
					}, 'echart1')
				
			},
		},
		// filters: {
		// 	splitStr1: function(val) {
		// 		let attr = val.split('-');
		// 		return attr[1];
		// 	},
		// 	splitStr2: function(val) {
		// 		let attr = val.split('-');
		// 		return attr[0];
		// 	},
		// },
		route: {
			activate: function() {
				this.getData();
				this.getChart();
				this.getDataList();
			}
		},
		watch: {
			'search.analysisdim':function(){
				this.getChart();
			},
			'catename':function(){
				this.getDataList();
			},
			'categuid':function(){
				this.getDataList();
				this.getChart();
			},
			'search.time':function(){
				var self = this;

				if(self.search.time!=6){
					this.getChart();
				}
			},
			'checkedList':{
				handler(curVal,oldVal){
            var self = this;
					  
					 self.getChart();
          },
          deep:true
				 
				
			},
		}
	}
</script>