<template>
	<section  class="padding"> 
		<el-row class="padding-bottom">
			<span>报告概览</span>
		</el-row>
		<el-row ref="table">
			<el-row class="box">
				<el-col :span="6" class="box-red">
					<div class="box-info">  
							<div class="num">{{xmTestPlan.totalCases?xmTestPlan.totalCases:'0'}}个</div>
							<div class="label">用例数</div>   
					</div>
				</el-col>
				<el-col :span="6" class="box-blue">
					<div class="box-info">  
							<div class="num">{{caseFuGaiLv}}%</div>
							<div class="label">用例覆盖率</div>   
					</div>
				</el-col>
				<el-col :span="6" class="box-green">
					<div class="box-info">  
							<div class="num">{{caseTongGuoLv}}%</div>
							<div class="label">用例通过率</div>   
					</div>
				</el-col>
				<el-col :span="6" class="box-orange">
					<div class="box-info">  
							<div class="num">{{xmTestPlan.bugCnt?xmTestPlan.bugCnt:0}}个</div>
							<div class="label">缺陷数</div>   
					</div>
				</el-col>
			</el-row>
		<!--编辑界面 XmTestPlan 测试计划--> 
			<el-form :model="rawDatas"  label-width="120px" :rules="rawDatasRules" ref="rawDatasRef" label-position="left"> 
				 <el-form-item prop="name" label-width="0px">
				  <el-row class="padding-bottom">
					<my-input v-model="rawDatas.name" placeholder="计划名称" :maxlength="255" @change="editSomeFields(rawDatas,'name',$event)"></my-input>
 				  </el-row>
				  </el-form-item>
				<el-row class="padding">
					<el-col :span="8">
						<mdp-select-user-xm label="负责人" userid-key="cuserid" username-key="cusername" v-model="rawDatas" @change="editSomeFields(rawDatas,'cuserid',$event)"></mdp-select-user-xm>
					</el-col>
					<el-col :span="8">
						<mdp-select-dict-x label="状态" :dict="dicts['testPlanStatus']" v-model="rawDatas.status"  @change="editSomeFields(rawDatas,'status',$event)"></mdp-select-dict-x>
					</el-col>
					
					<el-col :span="8">
						<mdp-select-dict-x label="测试结果" :dict="dicts['testPlanTcode']" v-model="rawDatas.tcode"  @change="editSomeFields(rawDatas,'tcode',$event)"></mdp-select-dict-x>
					</el-col>
				</el-row>   
 				<el-form-item label="归属测试库" prop="casedbName">
					{{rawDatas.casedbName}}
				</el-form-item>  
				<el-form-item label="归属项目" prop="projectId">
					 
					<span v-if="opType=='add'">
					 	<xm-project-select v-if="!selProject || !selProject.id" ref="xmProjectSelect" :link-product-id="xmTestCasedb? xmTestCasedb.productId:null"  @row-click="onPorjectConfirm" :auto-select="false">
							<span slot="title">选择项目</span>
						</xm-project-select>
						<div v-else>{{rawDatas.projectName}}</div>
					</span> 
 					<div v-else>{{rawDatas.projectName}}</div>
				</el-form-item>  
				<el-form-item label="归属产品" prop="productName">
					{{rawDatas.productName}}
				</el-form-item>  
				 
				<el-form-item label="起止时间" prop="stime">
					<mdp-date-range :auto-default="false" placeholder="选择日期" v-model="rawDatas" start-key="stime" end-key="etime"  value-format="yyyy-MM-dd HH:mm:ss" format="yyyy-MM-dd" @change="editSomeFields(rawDatas,'stime',rawDatas)"></mdp-date-range>
				</el-form-item>   
			</el-form>
		</el-row>
		<el-row class="padding-bottom">
			<span>报告总结</span>
		</el-row>
		<el-row> 
			<el-input  type="textarea" :rows="8" v-model="rawDatas.summaryRemark"></el-input>
		</el-row>
		<el-row v-if="rawDatas.summaryRemark!==rawDatasBak.summaryRemark" >
			<span style="float:right;"> 
            <el-button type="primary" @click.native="editSomeFields(rawDatas,'summaryRemark',rawDatas.summaryRemark)">提交</el-button>
			</span>
		</el-row>
	</section>
</template>

<script>
	import util from '@/common/js/util';//全局公共库
	import config from "@/common/config"; //全局公共库import
 	import { initDicts, addXmTestPlan,editXmTestPlan,editSomeFieldsXmTestPlan } from '@/api/xm/core/xmTestPlan';
	import { mapGetters } from 'vuex'
	import XmProjectSelect from '@/views/xm/core/components/XmProjectSelect';
	
import  MdpSelectUserXm from '@/views/xm/core/components/MdpSelectUserXm';//修改界面
	export default {
	    name:'xmTestPlanEdit',
	    components: {
			XmProjectSelect,MdpSelectUserXm,
        },
		computed: {
		    ...mapGetters([ 'userInfo'  ]),
			caseFuGaiLv(){
				if(!this.xmTestPlan.totalCases){
					return 0
				}
				var okCases=parseInt(this.xmTestPlan.okCases>0?this.xmTestPlan.okCases:0)
				var errCases=parseInt(this.xmTestPlan.errCases>0?this.xmTestPlan.errCases:0)
				var igCases=parseInt(this.xmTestPlan.igCases>0?this.xmTestPlan.igCases:0)
				var blCases=parseInt(this.xmTestPlan.blCases>0?this.xmTestPlan.blCases:0)
				var totalExecs=okCases+errCases+igCases+blCases
				var rate=parseInt(totalExecs/this.xmTestPlan.totalCases*100)
				return rate;
			},
			caseTongGuoLv(){
				if(!this.xmTestPlan.totalCases){
					return 0
				}
				var okCases=parseInt(this.xmTestPlan.okCases>0?this.xmTestPlan.okCases:0)
				var errCases=parseInt(this.xmTestPlan.errCases>0?this.xmTestPlan.errCases:0)
				var igCases=parseInt(this.xmTestPlan.igCases>0?this.xmTestPlan.igCases:0)
				var blCases=parseInt(this.xmTestPlan.blCases>0?this.xmTestPlan.blCases:0)
				var totalExecs=okCases+igCases
				var rate=parseInt(totalExecs/this.xmTestPlan.totalCases*100)
				return rate;
			}

		},
		props:['xmTestPlan','visible','opType','selProject','xmTestCasedb','rptDatas'],

		watch: {
	      'xmTestPlan':function( xmTestPlan ) {
	        if(xmTestPlan){
	            this.rawDatas = {...xmTestPlan};
	        }

	      },
	      'visible':function(visible) { 
	      	if(visible==true){
 	      		this.initData()
	      	}
	      } 
	    },
		data() {
			return {
			    currOpType:'add',//add/edit
 				load:{ list: false, edit: false, del: false, add: false },//查询中...
				dicts:{
					testPlanStatus:[],
					testPlanTcode:[],

				},//下拉选择框的所有静态数据 params={categoryId:'all',itemCodes:['sex']} 返回结果 {sex: [{id:'1',name:'男'},{id:'2',name:'女'}]}
				rawDatasRules: {
					 
				},
				rawDatas: {
					id:'',name:'',casedbId:'',casedbName:'',projectId:'',projectName:'',cuserid:'',cusername:'',ctime:'',stime:'',etime:'',status:'',tcode:'',totalCases:'',okCases:'',errCases:'',igCases:'',blCases:'',productId:'',productName:'',flowState:'',summaryRemark:''
				},
				
				rawDatasBak: {
					id:'',name:'',casedbId:'',casedbName:'',projectId:'',projectName:'',cuserid:'',cusername:'',ctime:'',stime:'',etime:'',status:'',tcode:'',totalCases:'',okCases:'',errCases:'',igCases:'',blCases:'',productId:'',productName:'',flowState:'',summaryRemark:''
				},
                maxTableHeight:300,
				summaryRemarkEditVisible:false,
			}//end return
		},//end data
		methods: {

		    ...util,

			// 取消按钮点击 父组件监听@cancel="rawDatasVisible=false" 监听
			handleCancel:function(){
				this.$refs['rawDatasRef'].resetFields();
				this.$emit('cancel');
			},
			//新增、编辑提交XmTestPlan 测试计划父组件监听@submit="afterEditSubmit"
			saveSubmit: function () {
				this.$refs.rawDatasRef.validate((valid) => {
					if (valid) {
						this.$confirm('确认提交吗？', '提示', {}).then(() => { 
							this.load.edit=true
							let params = Object.assign({}, this.rawDatas);
							var func=addXmTestPlan
							if(this.currOpType=='edit'){
							    func=editXmTestPlan
							}
							func(params).then((res) => {
                                this.load.edit=false
                                var tips=res.data.tips;
                                if(tips.isOk){
                                    this.rawDatas=res.data.data
                                    this.initData()
                                    this.currOpType="edit";
                                    this.$emit('submit');//  @submit="afterAddSubmit"
                                }
                                this.$notify({ position:'bottom-left',showClose:true, message: tips.msg, type: tips.isOk?'success':'error' });
                            }).catch( err =>this.load.edit=false);
						});
					}else{
					    this.$notify({ showClose:true, message: "表单验证不通过，请修改表单数据再提交", type: 'error' });
					}
				});
			},
			initData: function(){ 
			    if(this.xmTestPlan){
                    this.rawDatas = Object.assign({},this.xmTestPlan);
                } 
				if(this.rptDatas){
					this.rawDatas=Object.assign({},this.rptDatas)
				}
                this.rawDatasBak={...this.rawDatas}
            },

            editSomeFields(row,fieldName,$event){
                if(this.opType=='add'){
                    return;
                }
                let params={};
                params['ids']=[row].map(i=>i.id)
                
				if(fieldName=='stime'){
					params[fieldName]=$event.stime
					params.etime=$event.etime
				}else if(fieldName=='cuserid'){
					params[fieldName]=$event[0].userid
					params.cusername=$event[0].username
				}else{
					params[fieldName]=$event
				}
                var func = editSomeFieldsXmTestPlan
                func(params).then(res=>{
                  let tips = res.data.tips;
                  if(tips.isOk){
                    this.rawDatasBak=[...this.rawDatas]
					this.$emit('edit-fields',params) 
                  }else{
                    Object.assign(this.rawDatas,this.rawDatasBak)
                    this.$notify({position:'bottom-left',showClose:true,message:tips.msg,type:tips.isOk?'success':'error'})
                  }
                }).catch((e)=>Object.assign(this.rawDatas,this.rawDatasBak))
            },
			onPorjectConfirm(row){
				this.rawDatas.projectId=row.id
				this.rawDatas.projectName=row.name
				this.rawDatas.name=this.rawDatas.projectName+'-测试计划-V1.0'
			}, 
			sizeAutoChange(){
				
			}
		},//end method
		mounted() {
		    this.$nextTick(() => {
                initDicts(this);
                this.initData()
                this.maxTableHeight = util.calcTableMaxHeight(this.$refs.table.$el)
            });
		}
	}

</script>

<style lang="scss" scoped>
 .box{


	.box-red{ 

		background-color: #ff75750d;
		height: 100px;
		border-left-width: 2px;
		border-left-color: red;
		border-left-style: solid;  
		align-items: center; 
		line-height: 100px; 
		text-align: center;
		display:flex; 
    	flex-direction: column;
		.box-info{ 
			display:flex; 
			flex-direction: column;
			margin-top: 20px;
			height: 100px; 
			line-height: 100px; 
			.label{
				color: #999;
				height: 30px;
				line-height: 30px;
				font-size: 0.875rem;
			}
			.num{
				
				height: 30px;
				line-height: 30px;
				color:red ;
				font-size: 30px;
			}
		}
		
	}
	.box-green{ 
		
		background-color: #73d8970d;;
		height: 100px;
		border-left-width: 2px;
		border-left-color: green;
		border-left-style: solid; 
		
		align-items: center; 
		line-height: 100px; 
		text-align: center;
		display:flex; 
    	flex-direction: column;
		.box-info{ 
			display:flex; 
			flex-direction: column;
			margin-top: 20px;
			height: 100px; 
			line-height: 100px; 
			.label{
				color: #999;
				height: 30px;
				line-height: 30px;
				font-size: 0.875rem;
			}
			.num{
				
				height: 30px;
				line-height: 30px;
				color:green ;
				font-size: 30px;
			}
		}
	}
	.box-blue{ 

		background-color: #5dcfff0d;
		height: 100px;
		border-left-width: 2px;
		border-left-color: blue;
		border-left-style: solid; 

		align-items: center; 
		line-height: 100px; 
		text-align: center;
		display:flex; 
    	flex-direction: column;
		.box-info{ 
			display:flex; 
			flex-direction: column;
			margin-top: 20px;
			height: 100px; 
			line-height: 100px; 
			.label{
				color: #999;
				height: 30px;
				line-height: 30px;
				font-size: 0.875rem;
			}
			.num{
				
				height: 30px;
				line-height: 30px;
				color:blue ;
				font-size: 30px;
			}
		}
	}

	.box-orange{ 

		background-color: #ffcd5d0d;
		height: 100px;
		border-left-width: 2px;
		border-left-color: orange;
		border-left-style: solid; 

		align-items: center; 
		line-height: 100px; 
		text-align: center;
		display:flex; 
    	flex-direction: column;
		.box-info{ 
			display:flex; 
			flex-direction: column;
			margin-top: 20px;
			height: 100px; 
			line-height: 100px; 
			.label{
				color: #999;
				height: 30px;
				line-height: 30px;
				font-size: 0.875rem;
			}
			.num{
				
				height: 30px;
				line-height: 30px;
				color:orange ;
				font-size: 30px;
			}
		}
	}
	box-font{
		font-size: 0.875rem;
	}
 }
</style>