Browse Source

Merge remote-tracking branch 'origin/V20211115' into zouap

pull/1036/head
zouap 3 years ago
parent
commit
5a77c5cad6
4 changed files with 137 additions and 40 deletions
  1. +1
    -0
      routers/api/v1/repo/repo_dashbord.go
  2. +13
    -14
      web_src/js/components/DataAnalysis.vue
  3. +104
    -23
      web_src/js/components/ProAnalysis.vue
  4. +19
    -3
      web_src/js/components/UserAnalysis.vue

+ 1
- 0
routers/api/v1/repo/repo_dashbord.go View File

@@ -314,6 +314,7 @@ func GetProjectLatestStatistics(ctx *context.Context) {
Mode: mode, Mode: mode,
PR: pr, PR: pr,
RelAvatarLink: contributor.RelAvatarLink, RelAvatarLink: contributor.RelAvatarLink,
Email: contributor.Email,
} }
users = append(users, userInfo) users = append(users, userInfo)




+ 13
- 14
web_src/js/components/DataAnalysis.vue View File

@@ -7,10 +7,8 @@
</el-image> </el-image>
概览 概览
</span> </span>
<div >概览.......</div>
<div >概览.......</div>
<div >概览.......</div><div >概览.......</div>
<div >概览.......</div>
<div >暂无内容.......</div>

</el-tab-pane> </el-tab-pane>
<el-tab-pane label="项目分析" name="second" id="second" > <el-tab-pane label="项目分析" name="second" id="second" >
<ProAnalysis ref='ProAnalysis'id="pro" v-if="isRouterAlive"></ProAnalysis> <ProAnalysis ref='ProAnalysis'id="pro" v-if="isRouterAlive"></ProAnalysis>
@@ -20,13 +18,13 @@
项目分析 项目分析
</span> </span>
</el-tab-pane> </el-tab-pane>
<el-tab-pane name="third" id='third'>
<el-tab-pane name="third" id='third' >
<span slot='label'> <span slot='label'>
<el-image style="width: 13px; height: 13px" src="/img/name.png"> <el-image style="width: 13px; height: 13px" src="/img/name.png">
</el-image> </el-image>
用户分析 用户分析
</span> </span>
<UserAnalysis ref='UserAnalysis' id ="usr"></UserAnalysis>
<UserAnalysis ref='UserAnalysis' v-if="isRouterAlive1" id ="usr"></UserAnalysis>
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
</div> </div>
@@ -48,6 +46,7 @@
loading:true, loading:true,
loading1:true, loading1:true,
isRouterAlive: true, isRouterAlive: true,
isRouterAlive1: true,
isSecond:true, isSecond:true,
isThird:false, isThird:false,
@@ -57,24 +56,20 @@
handleClick(tab, event){ handleClick(tab, event){
if(tab.name=="second"){ if(tab.name=="second"){
this.reload() this.reload()
//document.getElementById('usr').style.display="none"
//document.getElementById("pro").style.display='block'
//this.$refs.ProAnalysis.getAllProList("all",7)


this.isSecond = true this.isSecond = true
this.isThird = false this.isThird = false
this.$refs.ProAnalysis.getAllProList("all",7) this.$refs.ProAnalysis.getAllProList("all",7)
} }
if(tab.name=="third"){ if(tab.name=="third"){
// document.getElementById('usr').style.display="block"
// document.getElementById("pro").style.display='none'
this.reload()

this.reload1()
this.isSecond = false this.isSecond = false
this.isThird = true this.isThird = true
this.$refs.UserAnalysis.resetPage()
this.$refs.UserAnalysis.getUpdateTime() this.$refs.UserAnalysis.getUpdateTime()
this.$refs.UserAnalysis.getUserList("all_usr",7) this.$refs.UserAnalysis.getUserList("all_usr",7)


} }
@@ -84,6 +79,10 @@
reload () { reload () {
this.isRouterAlive = false this.isRouterAlive = false
this.$nextTick(() => (this.isRouterAlive = true)) this.$nextTick(() => (this.isRouterAlive = true))
},
reload1 () {
this.isRouterAlive1 = false
this.$nextTick(() => (this.isRouterAlive1 = true))
} }


}, },


+ 104
- 23
web_src/js/components/ProAnalysis.vue View File

@@ -29,8 +29,13 @@
</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>
<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>
<a class="el-icon-download" v-if="tableData!=''" :href= "'../api/v1/projectboard/downloadAll/?type='+this.params.type+'&beginTime='+this.params.beginTime+'&endTime='+this.params.endTime+'&q='+this.params.q+'&sort=openi'" ></a>
<i class="el-icon-download" v-else="tableData=''" href="#" style="color:rgba(187, 187, 187, 100);" @click='popMark()'></i>
<!-- <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> -->
<span >
<a id = "download_file" v-if="tableData!=''" :href= "'../api/v1/projectboard/downloadAll/?type='+this.params.type+'&beginTime='+this.params.beginTime+'&endTime='+this.params.endTime+'&q='+this.params.q+'&sort=openi'">下载报告</a>
<a id = "download_file" v-else="tableData=''" href= "#" style="color:rgba(187, 187, 187, 100);" @click='popMark()'>下载报告</a>
</span>
</div> </div>




@@ -142,10 +147,12 @@
<div style="margin-top:50px;text-align:center"> <div style="margin-top:50px;text-align:center">
<el-pagination <el-pagination
background background
@size-change="handleSizeChange"
@current-change="handleCurrentChange" @current-change="handleCurrentChange"
:current-page="page" :current-page="page"
:page-size="pageSize" :page-size="pageSize"
layout="prev, pager, next"
:page-sizes="[5,10,20]"
layout="total, sizes,prev, pager, next,jumper"
:total="totalNum"> :total="totalNum">
</el-pagination> </el-pagination>
</div> </div>
@@ -153,7 +160,7 @@
</div> </div>
<div id ="pro_detail" style="display:none;width: 100%;"> <div id ="pro_detail" style="display:none;width: 100%;">
<div style="margin-top: 10px;"> <div style="margin-top: 10px;">
<b class="pro_item">{{this.ownerName}}&nbsp/&nbsp{{this.pro_name}}</b> <span class="update_time">数据更新时间:</span><span style="font-size: 12px;">{{tableDataIDTotal.lastUpdatedTime}}&nbsp/&nbsp从{{tableDataIDTotal.recordBeginTime}}开始</span>
<b class="pro_item">{{this.ownerName}}&nbsp/&nbsp{{this.pro_name}}</b> <span class="update_time">数据更新时间:</span><span style="font-size: 12px;">{{tableDataIDTotal.lastUpdatedTime}}&nbsp/&nbsp从{{tableDataIDTotal.recordBeginTime}}开始统计</span>
</div> </div>
<div style="margin-top: 10px;"> <div style="margin-top: 10px;">
项目描述:{{tableDataIDTotal.description | discriptionFun}} 项目描述:{{tableDataIDTotal.description | discriptionFun}}
@@ -210,7 +217,7 @@
> >
<el-table-column <el-table-column
label="用户名" label="用户名"
align="center"
align="left"
prop="user"> prop="user">
<template slot-scope="scope"> <template slot-scope="scope">
<a v-if="scope.row.mode!=-1" :href="AppSubUrl +'../../../'+ scope.row.user"><img class="ui avatar s16 image js-popover-card" :src="scope.row.relAvatarLink">{{scope.row.user}} </a> <a v-if="scope.row.mode!=-1" :href="AppSubUrl +'../../../'+ scope.row.user"><img class="ui avatar s16 image js-popover-card" :src="scope.row.relAvatarLink">{{scope.row.user}} </a>
@@ -266,8 +273,12 @@
</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>
<span ><a @click="exportData()">下载报告</a> </span>
<a v-if="tableDataID!=''" @click="exportData()" class="el-icon-download"></a>
<a v-else="tableDataID=''" @click="exportData()" style="color:rgba(187, 187, 187, 100);" class="el-icon-download"></a>
<span >
<a v-if="tableDataID!=''" @click="exportData()">下载报告</a>
<a v-else="tableDataID=''" @click="exportData()" style="color:rgba(187, 187, 187, 100);">下载报告</a>
</span>
</div> </div>
</span> </span>
</div> </div>
@@ -286,7 +297,7 @@
</div> </div>
<div style="margin-top: 30px;"> <div style="margin-top: 30px;">
<el-table <el-table
:data="tableDataID.slice((currentPage-1)*pageSize,currentPage*pageSize)"
:data="tableDataID.slice((currentPage-1)*pageSize1,currentPage*pageSize1)"
style="width: 100%" style="width: 100%"
:header-cell-style="tableHeaderStyle" :header-cell-style="tableHeaderStyle"
:cell-style='cellStyle'> :cell-style='cellStyle'>
@@ -318,10 +329,12 @@
<div style="margin-top:50px;text-align:center"> <div style="margin-top:50px;text-align:center">
<el-pagination <el-pagination
background background
@size-change="handleSizeChangeID"
@current-change="handleCurrentChangeID" @current-change="handleCurrentChangeID"
:current-page="currentPage" :current-page="currentPage"
:page-size="pageSize1" :page-size="pageSize1"
layout="prev, pager, next"
:page-sizes="[5,10,20]"
layout="total, sizes,prev, pager, next,jumper"
:total="tableDataID.length"> :total="tableDataID.length">
</el-pagination> </el-pagination>
</div> </div>
@@ -357,6 +370,7 @@
search:'', search:'',
dynamic:7, dynamic:7,
download_a:"", download_a:"",
downLoadSrc:'',


//单个项目参数 //单个项目参数
@@ -385,14 +399,22 @@
// download_file(){ // download_file(){
// this.params.type='all' // this.params.type='all'
// }, // },
popMark(){
alert("数据为空时,不能下载!")
},
exportData(){ exportData(){
// this.getOneProList(this.pro_id,'all',true,7) // this.getOneProList(this.pro_id,'all',true,7)
// this.getOneProList(this.pro_id,'all',false,7) // this.getOneProList(this.pro_id,'all',false,7)
// this.fileName() // this.fileName()
this.currentPage=1
var saveFileName = this.getFileName()
export2Excel(this.columns,this.tableDataID,saveFileName)
if (this.tableDataID!=''){
this.currentPage=1
var saveFileName = this.getFileName()
export2Excel(this.columns,this.tableDataID,saveFileName)
}else{
alert("数据为空时,不能下载!")
}
}, },
getFileName(){ getFileName(){


@@ -406,11 +428,7 @@
var yesterday = this.saveFormatDate(tmp.getFullYear(),tmp.getMonth()+1,tmp.getDate()); var yesterday = this.saveFormatDate(tmp.getFullYear(),tmp.getMonth()+1,tmp.getDate());
var yesterday_tmp = this.formatDate(tmp.getFullYear(),tmp.getMonth()+1,tmp.getDate()) var yesterday_tmp = this.formatDate(tmp.getFullYear(),tmp.getMonth()+1,tmp.getDate())


let lastMonthDate = new Date(); // 上月日期
lastMonthDate.setDate(1);
lastMonthDate.setMonth(lastMonthDate.getMonth()-1);
let lastYear = lastMonthDate.getYear();
let lastMonth = lastMonthDate.getMonth();
var startDate='' var startDate=''
var endDate='' var endDate=''
var saveFileName = '' var saveFileName = ''
@@ -458,10 +476,22 @@
break break
} }
case "last_month":{ case "last_month":{
startDate=this.formatDate(nowYear, lastMonth+1, 1);

let lastMonthDate = new Date(); // 上月日期
lastMonthDate.setDate(1);
lastMonthDate.setMonth(lastMonthDate.getMonth()-1);
let lastYear = lastMonthDate.getFullYear();
let lastMonth = lastMonthDate.getMonth();

startDate=this.formatDate(lastYear, lastMonth+1, 1);
startDate = this.comparedate(startDate,this.recordBeginTime) startDate = this.comparedate(startDate,this.recordBeginTime)


endDate=this.saveFormatDate(nowYear, lastMonth+1, this.saveFormatDate(nowYear,lastMonth));

var monthStartDate = new Date(lastYear, lastMonth, 1);
var monthEndDate = new Date(lastYear, lastMonth+1, 1);
var days = (monthEndDate - monthStartDate) / (1000 * 60 * 60 * 24)

endDate=this.saveFormatDate(lastYear, lastMonth+1, days); //月份从0开始,所以+1保存月份
saveFileName = this.pro_name+"_"+startDate+'_'+ endDate saveFileName = this.pro_name+"_"+startDate+'_'+ endDate
break break
} }
@@ -501,6 +531,11 @@
resetCurrentPage(){ resetCurrentPage(){
this.currentPage=1 this.currentPage=1
}, },
handleSizeChange(val){
this.params.pagesize = val
this.resetPage()
this.getAllProList(this.params.type, this.dynamic)
},
handleCurrentChange(val){ handleCurrentChange(val){
console.log(val) console.log(val)
this.params.page = val this.params.page = val
@@ -576,6 +611,9 @@
} }
return (myyear +'-'+ mymonth +'-'+ myweekday); return (myyear +'-'+ mymonth +'-'+ myweekday);
}, },
//获得某月的天数
getAllProList(type_val,index){ getAllProList(type_val,index){
console.log("类型:"+type_val) console.log("类型:"+type_val)
@@ -636,10 +674,14 @@
return 'background:#f5f5f6;color:#606266' return 'background:#f5f5f6;color:#606266'
} }
}, },
handleSizeChangeID(val){
this.pageSize1=val
},

handleCurrentChangeID(currentPage){ handleCurrentChangeID(currentPage){
this.currentPage = currentPage; this.currentPage = currentPage;
}, },
getOneProData(pro_id){ getOneProData(pro_id){
this.$axios.get('../api/v1/projectboard/project/'+pro_id,{ this.$axios.get('../api/v1/projectboard/project/'+pro_id,{
}).then((res)=>{ }).then((res)=>{
@@ -698,7 +740,39 @@
textStyle:{ textStyle:{
color:'black' color:'black'
}, },
position: 'right'
position: 'right',



// formatter: function (params) {
// console.log('params:',params)
// console.log('params.data:',params[0])
// let str = params.data.name + "<br />";
// params.data.forEach((item) => {
// str +=
// '<span style="display:inline-block;margin-right:5px;border-radius:50%;width:10px;height:10px;left:5px;background-color:'+params.color+'"></span>' + item.seriesName + " : " + '<span style="float:right">'+item.data[1] +'</span>'+ "<br />";
// });
// return str;
// },
// formatter: function (params, ticket, callback) {
// console.log(params);
// var showHtm="";
// var data = params.data.value
// for(var i=0;i<data.length;i++){
// //x轴名称
// var name = data[i];
// //值
// var value = params[i][2];
// showHtm+= text+ '--' + name + ' :' + value+'<br>'
// }
// return showHtm;
// }






},//提示层 },//提示层
legend: { legend: {
@@ -792,7 +866,7 @@
backgroundColor:'rgba(255,255,255,0.8)', backgroundColor:'rgba(255,255,255,0.8)',
color:'black', color:'black',
borderWidth:'1', borderWidth:'1',
borderColor:'gray',
borderColor:'#DCE7FB',
textStyle:{ textStyle:{
color:'black' color:'black'
}, },
@@ -1070,6 +1144,11 @@


created() { created() {
// this.download_a=document.getElementById("download_file") // this.download_a=document.getElementById("download_file")
},
updated(){
if(document.querySelectorAll('img[avatar]').length!==0){
window.LetterAvatar.transform()
}
} }
} }
</script> </script>
@@ -1127,7 +1206,7 @@
} }
.items{ .items{
text-align: center; text-align: center;
border-right:2px solid rgba(219, 219, 219, 100);
border-right:1px solid rgba(219, 219, 219, 100);
} }
.item_l{ .item_l{
margin-right: 5px; margin-right: 5px;
@@ -1139,6 +1218,7 @@
margin-right:5px; margin-right:5px;
border:1px solid rgba(219, 219, 219, 100); border:1px solid rgba(219, 219, 219, 100);
height: 370px; height: 370px;
overflow:auto
} }
.item_echart{ .item_echart{
margin-top: 10px; margin-top: 10px;
@@ -1150,5 +1230,6 @@
.item_content{ .item_content{
color: #409eff; color: #409eff;
margin-top: 10px; margin-top: 10px;
font-weight:bold;
} }
</style> </style>

+ 19
- 3
web_src/js/components/UserAnalysis.vue View File

@@ -27,8 +27,12 @@
</span> </span>
<span style="float:right; margin-right: 20px;" > <span style="float:right; margin-right: 20px;" >
<a style="display:inline-block;margin-left: 20px; " id = 'download'> <a style="display:inline-block;margin-left: 20px; " id = 'download'>
<i class="el-icon-download"></i>
<span ><a :href= "'../tool/query_user_static_page/?startDate='+this.params.startDate+'&endDate='+this.params.endDate+'&IsReturnFile=true'+'&userName='+this.params.userName" >下载报告</a> </span>
<a class="el-icon-download" v-if="tableData!=''" :href= "'../tool/query_user_static_page/?startDate='+this.params.startDate+'&endDate='+this.params.endDate+'&IsReturnFile=true'+'&userName='+this.params.userName" ></a>
<i class="el-icon-download" v-else="tableData=''" href="#" style="color:rgba(187, 187, 187, 100);" @click='popMark()'></i>
<span >
<a v-if="tableData!=''" :href= "'../tool/query_user_static_page/?startDate='+this.params.startDate+'&endDate='+this.params.endDate+'&IsReturnFile=true'+'&userName='+this.params.userName" >下载报告</a>
<a v-else="tableData=''" href= "#" style="color:rgba(187, 187, 187, 100);" @click='popMark()'>下载报告</a>
</span>
</a> </a>
<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" @click="searchName() "></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" @click="searchName() "></i>
@@ -141,10 +145,12 @@
<div style="margin-top:50px;text-align:center"> <div style="margin-top:50px;text-align:center">
<el-pagination <el-pagination
background background
@size-change="handleSizeChange"
@current-change="handleCurrentChange" @current-change="handleCurrentChange"
:current-page="page" :current-page="page"
:page-size="pageSize" :page-size="pageSize"
layout="prev, pager, next"
:page-sizes="[5,10,20]"
layout="total, sizes, prev, pager, next,jumper"
:total="totalNum"> :total="totalNum">
</el-pagination> </el-pagination>
</div> </div>
@@ -181,6 +187,9 @@
}, },
methods: { methods: {


popMark(){
alert("数据为空时,不能下载!")
},
exportData(){ exportData(){
// this.getUserList('all_usr',7) // this.getUserList('all_usr',7)
var saveFileName = this.getFileName() var saveFileName = this.getFileName()
@@ -206,10 +215,16 @@
this.getUserList(this.type_val,this.dynamic) this.getUserList(this.type_val,this.dynamic)


}, },
handleSizeChange(val){
this.params.pageSize = val
this.resetPage()
this.getUserList(this.type_val,this.dynamic)
},
resetPage(){ resetPage(){
this.page=1 this.page=1
this.params.page = 1 this.params.page = 1
}, },

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;
@@ -408,6 +423,7 @@
mounted() { mounted() {
// document.getElementById("all_usr").style.outline="none" // document.getElementById("all_usr").style.outline="none"
// document.getElementById("all_usr").focus() // document.getElementById("all_usr").focus()
this.getUpdateTime()
this.getUserList("all_usr",7) this.getUserList("all_usr",7)
}, },
created() { created() {


Loading…
Cancel
Save