|
@@ -2,7 +2,7 @@ |
|
|
<div style="width: 100%;"> |
|
|
<div style="width: 100%;"> |
|
|
<div id = "pro_main"> |
|
|
<div id = "pro_main"> |
|
|
<div style="margin-top: 10px;"> |
|
|
<div style="margin-top: 10px;"> |
|
|
<b class="pro_item">项目分析</b> <span class="update_time">数据更新时间:{{lastUpdatedTime}}/{{recordBeginTime}}</span> |
|
|
|
|
|
|
|
|
<b class="pro_item">项目分析</b> <span class="update_time">数据更新时间:{{lastUpdatedTime}} / 从{{recordBeginTime}}开始统计</span> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<bar-label :width="'95%'" :height="'500px'"></bar-label> |
|
|
<bar-label :width="'95%'" :height="'500px'"></bar-label> |
|
@@ -30,8 +30,10 @@ |
|
|
<span style="float:right; margin-right: 20px;"> |
|
|
<span style="float:right; margin-right: 20px;"> |
|
|
<div style="display:inline-block;margin-left: 20px; "> |
|
|
<div style="display:inline-block;margin-left: 20px; "> |
|
|
<i class="el-icon-download"></i> |
|
|
<i class="el-icon-download"></i> |
|
|
<span ><a>下载报告</a> </span> |
|
|
|
|
|
|
|
|
<span ><a id = "download_file" :href= "'../api/v1/projectboard/downloadAll/?type='+this.params.type+'&beginTime='+this.params.beginTime+'&endTime='+this.params.endTime+'&q='+this.params.q+'&sort=openi'" >下载报告</a> </span> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<span style="display:inline-block;margin-left: 20px; "> |
|
|
<span style="display:inline-block;margin-left: 20px; "> |
|
|
<el-input size="small" placeholder="输入项目关键字搜索" v-model="search" class="input-with-select" @keyup.enter.native="searchName() "><i slot="suffix" class="el-input__icon el-icon-search"></i> |
|
|
<el-input size="small" placeholder="输入项目关键字搜索" v-model="search" class="input-with-select" @keyup.enter.native="searchName() "><i slot="suffix" class="el-input__icon el-icon-search"></i> |
|
|
</el-input> |
|
|
</el-input> |
|
@@ -152,28 +154,28 @@ |
|
|
<div style="margin-top:20px"> |
|
|
<div style="margin-top:20px"> |
|
|
<el-row > |
|
|
<el-row > |
|
|
<el-col :span='4' class="items"> |
|
|
<el-col :span='4' class="items"> |
|
|
项目创建时间 </br> |
|
|
|
|
|
{{tableDataIDTotal.creatTime}} |
|
|
|
|
|
|
|
|
<el-row>项目创建时间 </el-row> |
|
|
|
|
|
<el-row class="item_content">{{tableDataIDTotal.creatTime}}</el-row> |
|
|
</el-col> |
|
|
</el-col> |
|
|
<el-col :span='4' class="items"> |
|
|
<el-col :span='4' class="items"> |
|
|
OPenI指数 </br> |
|
|
|
|
|
{{tableDataIDTotal.openi | rounding}} |
|
|
|
|
|
|
|
|
<el-row>OpenI指数</el-row> |
|
|
|
|
|
<el-row class="item_content">{{tableDataIDTotal.openi | rounding}}</el-row> |
|
|
</el-col> |
|
|
</el-col> |
|
|
<el-col :span='4' class="items"> |
|
|
<el-col :span='4' class="items"> |
|
|
评论数 </br> |
|
|
|
|
|
{{tableDataIDTotal.comment}} |
|
|
|
|
|
|
|
|
<el-row>评论数 </el-row> |
|
|
|
|
|
<el-row class="item_content">{{tableDataIDTotal.comment}}</el-row> |
|
|
</el-col> |
|
|
</el-col> |
|
|
<el-col :span='4' class="items"> |
|
|
<el-col :span='4' class="items"> |
|
|
浏览数 </br> |
|
|
|
|
|
{{tableDataIDTotal.view}} |
|
|
|
|
|
|
|
|
<el-row>浏览量 </el-row> |
|
|
|
|
|
<el-row class="item_content">{{tableDataIDTotal.view}}</el-row> |
|
|
</el-col> |
|
|
</el-col> |
|
|
<el-col :span='4' class="items"> |
|
|
<el-col :span='4' class="items"> |
|
|
代码下载量 </br> |
|
|
|
|
|
{{tableDataIDTotal.download}} |
|
|
|
|
|
|
|
|
<el-row>代码下载量</el-row> |
|
|
|
|
|
<el-row class="item_content">{{tableDataIDTotal.download}}</el-row> |
|
|
</el-col> |
|
|
</el-col> |
|
|
<el-col :span='4' style="text-align: center;"> |
|
|
<el-col :span='4' style="text-align: center;"> |
|
|
任务完成比例 </br> |
|
|
|
|
|
{{tableDataIDTotal.issueClosedRatio}} |
|
|
|
|
|
|
|
|
<el-row>任务完成比例</el-row> |
|
|
|
|
|
<el-row class="item_content">{{tableDataIDTotal.issueClosedRatio}}</el-row> |
|
|
</el-col> |
|
|
</el-col> |
|
|
</el-row> |
|
|
</el-row> |
|
|
</div> |
|
|
</div> |
|
@@ -213,8 +215,8 @@ |
|
|
</template> |
|
|
</template> |
|
|
</el-table-column> |
|
|
</el-table-column> |
|
|
<el-table-column |
|
|
<el-table-column |
|
|
prop="PR" |
|
|
|
|
|
label="pr" |
|
|
|
|
|
|
|
|
prop="pr" |
|
|
|
|
|
label="PR" |
|
|
align="center"> |
|
|
align="center"> |
|
|
</el-table-column> |
|
|
</el-table-column> |
|
|
<el-table-column |
|
|
<el-table-column |
|
@@ -242,7 +244,7 @@ |
|
|
<el-date-picker |
|
|
<el-date-picker |
|
|
v-model="create_time_pro" |
|
|
v-model="create_time_pro" |
|
|
prefix-icon="el-icon-time" |
|
|
prefix-icon="el-icon-time" |
|
|
@change="getOneProList(pro_id,'',true,0),getOneProList(pro_id,'',false,0)" |
|
|
|
|
|
|
|
|
@change="getOneProList(pro_id,'',true,0),getOneProList(pro_id,'',false,0),clickCheckBox" |
|
|
type="daterange" |
|
|
type="daterange" |
|
|
size='small' |
|
|
size='small' |
|
|
range-separator="至" |
|
|
range-separator="至" |
|
@@ -251,9 +253,9 @@ |
|
|
</el-date-picker> |
|
|
</el-date-picker> |
|
|
</span> |
|
|
</span> |
|
|
<span style="float:right; margin-right: 20px;"> |
|
|
<span style="float:right; margin-right: 20px;"> |
|
|
<div style="display:inline-block;margin-left: 20px; "> |
|
|
|
|
|
|
|
|
<div style="display:inline-block;margin-left: 20px;"> |
|
|
<i class="el-icon-download"></i> |
|
|
<i class="el-icon-download"></i> |
|
|
<span ><a>下载报告</a> </span> |
|
|
|
|
|
|
|
|
<span ><a @click="exportData()">下载报告</a> </span> |
|
|
</div> |
|
|
</div> |
|
|
</span> |
|
|
</span> |
|
|
</div> |
|
|
</div> |
|
@@ -319,7 +321,7 @@ |
|
|
|
|
|
|
|
|
<script> |
|
|
<script> |
|
|
// import barLabel from './basic/barLabel.vue'; |
|
|
// import barLabel from './basic/barLabel.vue'; |
|
|
|
|
|
|
|
|
|
|
|
import { export2Excel } from '../excel/util.js' |
|
|
export default{ |
|
|
export default{ |
|
|
name:'ProAnalysis', |
|
|
name:'ProAnalysis', |
|
|
components: { |
|
|
components: { |
|
@@ -340,9 +342,11 @@ |
|
|
value_time: '', |
|
|
value_time: '', |
|
|
search:'', |
|
|
search:'', |
|
|
dynamic:7, |
|
|
dynamic:7, |
|
|
|
|
|
download_a:"", |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//单个项目参数 |
|
|
//单个项目参数 |
|
|
|
|
|
columns: [{title: '日期',key: 'date'},{title: '浏览量',key: 'view'},{title: '下载量',key: 'download'},{title: 'commit',key: 'commit'}], |
|
|
currentPage:1, |
|
|
currentPage:1, |
|
|
pageSize1:10, |
|
|
pageSize1:10, |
|
|
paramsID:{type:'all' ,beginTime:'',endTime:'',openi:'false'}, |
|
|
paramsID:{type:'all' ,beginTime:'',endTime:'',openi:'false'}, |
|
@@ -363,7 +367,97 @@ |
|
|
}; |
|
|
}; |
|
|
}, |
|
|
}, |
|
|
methods: { |
|
|
methods: { |
|
|
|
|
|
|
|
|
|
|
|
// download_file(){ |
|
|
|
|
|
// this.params.type='all' |
|
|
|
|
|
// }, |
|
|
|
|
|
exportData(){ |
|
|
|
|
|
|
|
|
|
|
|
// this.getOneProList(this.pro_id,'all',true,7) |
|
|
|
|
|
// this.getOneProList(this.pro_id,'all',false,7) |
|
|
|
|
|
// this.fileName() |
|
|
|
|
|
var saveFileName = this.getFileName() |
|
|
|
|
|
export2Excel(this.columns,this.tableDataID,saveFileName) |
|
|
|
|
|
}, |
|
|
|
|
|
getFileName(){ |
|
|
|
|
|
|
|
|
|
|
|
var now = new Date(); // 当前日期 |
|
|
|
|
|
var nowDayOfWeek = now.getDay(); // 今天本周的第几天 |
|
|
|
|
|
var nowDay = now.getDate(); // 当前日 |
|
|
|
|
|
var nowMonth = now.getMonth(); // 当前月 |
|
|
|
|
|
var nowYear = now.getFullYear(); // 当前年 |
|
|
|
|
|
var today = this.saveFormatDate(nowYear,nowMonth+1,nowDay); |
|
|
|
|
|
|
|
|
|
|
|
let lastMonthDate = new Date(); // 上月日期 |
|
|
|
|
|
lastMonthDate.setDate(1); |
|
|
|
|
|
lastMonthDate.setMonth(lastMonthDate.getMonth()-1); |
|
|
|
|
|
let lastYear = lastMonthDate.getYear(); |
|
|
|
|
|
let lastMonth = lastMonthDate.getMonth(); |
|
|
|
|
|
var startDate='' |
|
|
|
|
|
var endDate='' |
|
|
|
|
|
var saveFileName = '' |
|
|
|
|
|
|
|
|
|
|
|
if (typeof this.paramsID.type=="undefined" || this.paramsID.type=="null" || this.paramsID.type==""){ |
|
|
|
|
|
startDate= this.saveFormatDate(this.create_time_pro[0].getFullYear(),this.create_time_pro[0].getMonth() + 1,this.create_time_pro[0].getDate()); |
|
|
|
|
|
endDate = this.saveFormatDate(this.create_time_pro[1].getFullYear(),this.create_time_pro[1].getMonth() + 1,this.create_time_pro[1].getDate()); |
|
|
|
|
|
saveFileName = this.pro_name+"_"+startDate+'_'+endDate |
|
|
|
|
|
}else{ |
|
|
|
|
|
switch(this.paramsID.type){ |
|
|
|
|
|
case "yesterday":{ |
|
|
|
|
|
var now = new Date(); |
|
|
|
|
|
var tmp = new Date(now.setTime(now.getTime()-24*60*60*1000)); |
|
|
|
|
|
startDate = this.saveFormatDate(tmp.getFullYear(),tmp.getMonth()+1,tmp.getDate()); |
|
|
|
|
|
endDate = today |
|
|
|
|
|
saveFileName = this.pro_name+"_"+startDate+'_'+ endDate |
|
|
|
|
|
break |
|
|
|
|
|
} |
|
|
|
|
|
case "current_week":{ |
|
|
|
|
|
var now = new Date(); // 当前日期 |
|
|
|
|
|
var nowDayOfWeek = now.getDay(); // 今天本周的第几天 |
|
|
|
|
|
var day = nowDayOfWeek || 7; |
|
|
|
|
|
startDate = this.saveFormatDate(now.getFullYear(), nowMonth+1, nowDay + 1 - day); |
|
|
|
|
|
endDate = today |
|
|
|
|
|
saveFileName = this.pro_name+"_"+startDate+'_'+ endDate |
|
|
|
|
|
break |
|
|
|
|
|
} |
|
|
|
|
|
case "current_month":{ |
|
|
|
|
|
startDate = this.saveFormatDate(nowYear,nowMonth+1,1); |
|
|
|
|
|
endDate = today |
|
|
|
|
|
saveFileName = this.pro_name+"_"+startDate+'_'+ endDate |
|
|
|
|
|
break |
|
|
|
|
|
} |
|
|
|
|
|
case "last_month":{ |
|
|
|
|
|
startDate=this.saveFormatDate(nowYear, lastMonth+1, 1); |
|
|
|
|
|
endDate=this.saveFormatDate(nowYear, lastMonth+1, this.saveFormatDate(nowYear,lastMonth)); |
|
|
|
|
|
endDate = today |
|
|
|
|
|
saveFileName = this.pro_name+"_"+startDate+'_'+ endDate |
|
|
|
|
|
break |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
case "monthly":{ |
|
|
|
|
|
var temp=new Date(now - 1000 * 60 * 60 * 24 * 30) |
|
|
|
|
|
startDate = this.saveFormatDate(temp.getFullYear(),temp.getMonth()+1,temp.getDate()); |
|
|
|
|
|
endDate = today |
|
|
|
|
|
saveFileName = this.pro_name+"_"+startDate+'_'+ endDate |
|
|
|
|
|
break |
|
|
|
|
|
} |
|
|
|
|
|
case "current_year":{ |
|
|
|
|
|
startDate = this.saveFormatDate(now.getFullYear(), 1, 1); |
|
|
|
|
|
endDate = today |
|
|
|
|
|
saveFileName = this.pro_name+"_"+startDate+'_'+ endDate |
|
|
|
|
|
break |
|
|
|
|
|
} |
|
|
|
|
|
case "all":{ |
|
|
|
|
|
console.log("e:"+today) |
|
|
|
|
|
startDate = 'all' |
|
|
|
|
|
endDate = today |
|
|
|
|
|
saveFileName = this.pro_name+'_all' |
|
|
|
|
|
break |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
return saveFileName |
|
|
|
|
|
|
|
|
|
|
|
}, |
|
|
handleCurrentChange(val){ |
|
|
handleCurrentChange(val){ |
|
|
console.log(val) |
|
|
console.log(val) |
|
|
this.params.page = val |
|
|
this.params.page = val |
|
@@ -411,6 +505,20 @@ |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
}, |
|
|
}, |
|
|
|
|
|
saveFormatDate(myyear,mymonth,myweekday) { |
|
|
|
|
|
// var myyear = this.date.getFullYear(); |
|
|
|
|
|
// var mymonth = this.date.getMonth() + 1; |
|
|
|
|
|
// var myweekday = this.date.getDate(); |
|
|
|
|
|
|
|
|
|
|
|
if (mymonth < 10) { |
|
|
|
|
|
mymonth = "0" + mymonth; |
|
|
|
|
|
} |
|
|
|
|
|
if (myweekday < 10) { |
|
|
|
|
|
myweekday = "0" + myweekday; |
|
|
|
|
|
} |
|
|
|
|
|
console.log((myyear +''+ mymonth +''+ myweekday)) |
|
|
|
|
|
return (myyear +''+ mymonth +''+ myweekday); |
|
|
|
|
|
}, |
|
|
formatDate(myyear,mymonth,myweekday) { |
|
|
formatDate(myyear,mymonth,myweekday) { |
|
|
// var myyear = this.date.getFullYear(); |
|
|
// var myyear = this.date.getFullYear(); |
|
|
// var mymonth = this.date.getMonth() + 1; |
|
|
// var mymonth = this.date.getMonth() + 1; |
|
@@ -422,8 +530,9 @@ |
|
|
if (myweekday < 10) { |
|
|
if (myweekday < 10) { |
|
|
myweekday = "0" + myweekday; |
|
|
myweekday = "0" + myweekday; |
|
|
} |
|
|
} |
|
|
return (myyear + "-" + mymonth + "-" + myweekday); |
|
|
|
|
|
|
|
|
return (myyear +'-'+ mymonth +'-'+ myweekday); |
|
|
}, |
|
|
}, |
|
|
|
|
|
|
|
|
getAllProList(type_val,index){ |
|
|
getAllProList(type_val,index){ |
|
|
console.log("类型:"+type_val) |
|
|
console.log("类型:"+type_val) |
|
|
this.dynamic = index |
|
|
this.dynamic = index |
|
@@ -446,7 +555,7 @@ |
|
|
this.lastUpdatedTime=res.data.lastUpdatedTime |
|
|
this.lastUpdatedTime=res.data.lastUpdatedTime |
|
|
this.tableData = res.data.pageRecords |
|
|
this.tableData = res.data.pageRecords |
|
|
this.totalPage=res.data.totalPage |
|
|
this.totalPage=res.data.totalPage |
|
|
this.totalNum = this.totalPage*this.params.pagesize |
|
|
|
|
|
|
|
|
this.totalNum = res.data.totalCount//this.totalPage*this.params.pagesize |
|
|
console.log("this.totalPage:"+this.totalPage) |
|
|
console.log("this.totalPage:"+this.totalPage) |
|
|
|
|
|
|
|
|
}) |
|
|
}) |
|
@@ -547,7 +656,7 @@ |
|
|
|
|
|
|
|
|
},//提示层 |
|
|
},//提示层 |
|
|
legend: { |
|
|
legend: { |
|
|
data: ['name1'] |
|
|
|
|
|
|
|
|
// data: [''] |
|
|
}, |
|
|
}, |
|
|
radar: { |
|
|
radar: { |
|
|
name: { |
|
|
name: { |
|
@@ -589,10 +698,19 @@ |
|
|
type: 'radar', |
|
|
type: 'radar', |
|
|
lineStyle:{ |
|
|
lineStyle:{ |
|
|
width:2, |
|
|
width:2, |
|
|
color: 'rgb(0,255,0)' |
|
|
|
|
|
|
|
|
color: '#409effd6', |
|
|
|
|
|
normal:{ |
|
|
|
|
|
color:'#409effd6 ' |
|
|
|
|
|
} |
|
|
}, |
|
|
}, |
|
|
|
|
|
itemStyle : { |
|
|
|
|
|
normal : { |
|
|
|
|
|
color:'#409effd6' |
|
|
|
|
|
} |
|
|
|
|
|
}, |
|
|
data: [{ |
|
|
data: [{ |
|
|
value: ydata, |
|
|
value: ydata, |
|
|
|
|
|
name:"数据" |
|
|
}] |
|
|
}] |
|
|
}] |
|
|
}] |
|
|
|
|
|
|
|
@@ -604,8 +722,8 @@ |
|
|
var xdata_openI=[] |
|
|
var xdata_openI=[] |
|
|
var ydata_openI=[] |
|
|
var ydata_openI=[] |
|
|
for(var i =0;i<this.tableDataIDOpenI.length;i++){ |
|
|
for(var i =0;i<this.tableDataIDOpenI.length;i++){ |
|
|
xdata_openI.push(this.tableDataIDOpenI[this.tableDataIDOpenI.length-1-i].date); |
|
|
|
|
|
ydata_openI.push(this.roundingF(this.tableDataIDOpenI[i].openi)) |
|
|
|
|
|
|
|
|
xdata_openI.push(this.tableDataIDOpenI[i].date); |
|
|
|
|
|
ydata_openI.push(this.roundingF(this.tableDataIDOpenI[this.tableDataIDOpenI.length-1-i].openi)) |
|
|
} |
|
|
} |
|
|
console.log("ydata_openI:"+ydata_openI) |
|
|
console.log("ydata_openI:"+ydata_openI) |
|
|
console.log(xdata_openI) |
|
|
console.log(xdata_openI) |
|
@@ -658,15 +776,25 @@ |
|
|
data: ydata_openI, |
|
|
data: ydata_openI, |
|
|
type: 'line', |
|
|
type: 'line', |
|
|
areaStyle: { |
|
|
areaStyle: { |
|
|
color:'red', |
|
|
|
|
|
|
|
|
type:'linear', |
|
|
|
|
|
color:'#DCE7FB', |
|
|
opacity: 0.3, |
|
|
opacity: 0.3, |
|
|
origin:"start" |
|
|
|
|
|
|
|
|
origin:"start", |
|
|
|
|
|
normal:{ |
|
|
|
|
|
color:'#DCE7FB' |
|
|
|
|
|
} |
|
|
|
|
|
}, |
|
|
|
|
|
lineStyle:{ |
|
|
|
|
|
width:1, |
|
|
|
|
|
normal:{ |
|
|
|
|
|
color:'#409effd6' |
|
|
|
|
|
} |
|
|
}, |
|
|
}, |
|
|
// lineStyle:{ |
|
|
|
|
|
// width:2, |
|
|
|
|
|
// color: '#409effd6' |
|
|
|
|
|
// }, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
itemStyle : { |
|
|
|
|
|
normal : { |
|
|
|
|
|
color:'#409effd6' |
|
|
|
|
|
} |
|
|
|
|
|
}, |
|
|
} |
|
|
} |
|
|
] |
|
|
] |
|
|
}; |
|
|
}; |
|
@@ -674,16 +802,18 @@ |
|
|
|
|
|
|
|
|
}, |
|
|
}, |
|
|
drawSelectData(){ |
|
|
drawSelectData(){ |
|
|
|
|
|
|
|
|
|
|
|
// $("#selectData").removeAttr("selectData").empty(); |
|
|
var xdata=[] |
|
|
var xdata=[] |
|
|
var ydata_view=[] |
|
|
var ydata_view=[] |
|
|
var ydata_download=[] |
|
|
var ydata_download=[] |
|
|
var ydata_commit=[] |
|
|
var ydata_commit=[] |
|
|
|
|
|
|
|
|
for(var i =0;i<this.tableDataIDOpenI.length;i++){ |
|
|
|
|
|
xdata.push(this.tableDataIDOpenI[this.tableDataID.length-1-i].date); |
|
|
|
|
|
ydata_view.push(this.roundingF(this.tableDataID[i].view)) |
|
|
|
|
|
ydata_download.push(this.roundingF(this.tableDataID[i].download)) |
|
|
|
|
|
ydata_commit.push(this.roundingF(this.tableDataID[i].commit)) |
|
|
|
|
|
|
|
|
// if () |
|
|
|
|
|
for(var i =0;i<this.tableDataID.length;i++){ |
|
|
|
|
|
xdata.push(this.tableDataID[i].date); |
|
|
|
|
|
ydata_view.push(this.roundingF(this.tableDataID[this.tableDataID.length-1-i].view)) |
|
|
|
|
|
ydata_download.push(this.roundingF(this.tableDataID[this.tableDataID.length-1-i].download)) |
|
|
|
|
|
ydata_commit.push(this.roundingF(this.tableDataID[this.tableDataID.length-1-i].commit)) |
|
|
} |
|
|
} |
|
|
console.log("ydata_openI:"+ydata_download) |
|
|
console.log("ydata_openI:"+ydata_download) |
|
|
console.log(xdata) |
|
|
console.log(xdata) |
|
@@ -855,7 +985,7 @@ |
|
|
// console.log("this.radarOpenI:"+this.radarOpenI) |
|
|
// console.log("this.radarOpenI:"+this.radarOpenI) |
|
|
}, |
|
|
}, |
|
|
created() { |
|
|
created() { |
|
|
|
|
|
|
|
|
|
|
|
// this.download_a=document.getElementById("download_file") |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
</script> |
|
|
</script> |
|
@@ -920,4 +1050,8 @@ |
|
|
height: 350px; |
|
|
height: 350px; |
|
|
width: 100%; |
|
|
width: 100%; |
|
|
} |
|
|
} |
|
|
|
|
|
.item_content{ |
|
|
|
|
|
color: #409eff; |
|
|
|
|
|
margin-top: 10px; |
|
|
|
|
|
} |
|
|
</style> |
|
|
</style> |