You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

ProAnalysis.vue 60 kB

4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281
  1. <template>
  2. <div style="width: 100%;">
  3. <div id = "pro_main">
  4. <div style="margin-top: 10px;">
  5. <b class="pro_item">项目分析</b> <span class="update_time">数据更新时间:</span> <span style="font-size: 12px;">{{lastUpdatedTime}}&nbsp/&nbsp从{{recordBeginTime}}开始统计</span>
  6. </div>
  7. <bar-label :width="'95%'" :height="'500px'"></bar-label>
  8. <div style="margin-top: 20px;">
  9. <span class="sta_iterm">统计周期:</span>
  10. <button type="button" class='btnFirst' id ="yesterday" v-bind:class="{colorChange:1==dynamic}" @click="resetPage(),getAllProList('yesterday',1)">昨天</button>
  11. <button type="button" class='btn' id = "current_week" v-bind:class="{colorChange:2==dynamic}" @click="resetPage(),getAllProList('current_week',2)">本周</button>
  12. <button type="button" class='btn' id = "current_month" v-bind:class="{colorChange:3==dynamic}" @click="resetPage(),getAllProList('current_month',3)">本月</button>
  13. <button type="button" class='btn' id = "last_month" v-bind:class="{colorChange:4==dynamic}" @click="resetPage(),getAllProList('last_month',4)">上月</button>
  14. <button type="button" class='btn' id = "monthly" v-bind:class="{colorChange:5==dynamic}" @click="resetPage(),getAllProList('monthly',5)">近30天</button>
  15. <button type="button" class='btn' id = "current_year" v-bind:class="{colorChange:6==dynamic}" @click="resetPage(),getAllProList('current_year',6)">今年</button>
  16. <button type="button" class='btnLast' id = "all" v-bind:class="{colorChange:7==dynamic}" @click="resetPage(),getAllProList('all',7)">所有</button>
  17. <span style="margin-left: 20px;">
  18. <el-date-picker
  19. v-model="value_time"
  20. prefix-icon="el-icon-time"
  21. @change="resetPage(),getAllProList('',0)"
  22. type="daterange"
  23. size='small'
  24. range-separator="至"
  25. start-placeholder="开始日期"
  26. end-placeholder="结束日期">
  27. </el-date-picker>
  28. </span>
  29. <span style="float:right; margin-right: 20px;">
  30. <div style="display:inline-block;margin-left: 20px; ">
  31. <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>
  32. <i class="el-icon-download" v-else="tableData=''" href="#" style="color:rgba(187, 187, 187, 100);" @click='popMark()'></i>
  33. <!-- <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> -->
  34. <span >
  35. <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>
  36. <a id = "download_file" v-else="tableData=''" href= "#" style="color:rgba(187, 187, 187, 100);" @click='popMark()'>下载报告</a>
  37. </span>
  38. </div>
  39. <span style="display:inline-block;margin-left: 20px; ">
  40. <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>
  41. </el-input>
  42. </span>
  43. </span>
  44. </div>
  45. <div style="margin-top: 30px;">
  46. <el-table
  47. :data="tableData"
  48. style="width: 100%"
  49. :header-cell-style="tableHeaderStyle"
  50. :cell-style='cellStyle'>
  51. <el-table-column
  52. label="ID"
  53. align="left"
  54. prop="repo_id"
  55. stripe
  56. >
  57. </el-table-column>
  58. <el-table-column
  59. label="项目名称"
  60. width="125px"
  61. align="left"
  62. prop="name"
  63. style="color:#0366D6;font-family: Roboto"
  64. >
  65. <template slot-scope="scope">
  66. <a @click=goToDetailPage(scope.row.repo_id,scope.row.name,scope.row.ownerName)>{{scope.row.name}} </a>
  67. </template>
  68. </el-table-column>
  69. <el-table-column
  70. label="拥有者"
  71. align="center"
  72. prop="ownerName"
  73. stripe
  74. >
  75. </el-table-column>
  76. <el-table-column
  77. prop="isPrivate"
  78. label="私有"
  79. align="center">
  80. <template slot-scope="scope">
  81. {{scope.row.isPrivate|changeType}}
  82. </template>
  83. </el-table-column>
  84. <el-table-column
  85. prop="openi"
  86. label="OpenI指数"
  87. align="center">
  88. <template slot-scope="scope">
  89. {{scope.row.openi | rounding}}
  90. </template>
  91. </el-table-column>
  92. <el-table-column
  93. prop="view"
  94. label="浏览量"
  95. align="center">
  96. </el-table-column>
  97. <el-table-column
  98. prop="download"
  99. label="代码下载量"
  100. align="center">
  101. </el-table-column>
  102. <el-table-column
  103. prop="pr"
  104. label="PR"
  105. align="center">
  106. </el-table-column>
  107. <el-table-column
  108. prop="commit"
  109. label="Commit数"
  110. align="center">
  111. </el-table-column>
  112. <el-table-column
  113. prop="watch"
  114. label="关注数"
  115. align="center">
  116. </el-table-column>
  117. <el-table-column
  118. prop="star"
  119. label="点赞数"
  120. align="center">
  121. </el-table-column>
  122. <el-table-column
  123. prop="fork"
  124. label="派生数"
  125. align="center">
  126. </el-table-column>
  127. <el-table-column
  128. prop="issue"
  129. label="任务数"
  130. align="center">
  131. </el-table-column>
  132. <el-table-column
  133. prop="issueClosed"
  134. label="已解决任务"
  135. align="center">
  136. </el-table-column>
  137. <el-table-column
  138. prop="contributor"
  139. label="贡献者数"
  140. align="center">
  141. </el-table-column>
  142. </el-table>
  143. </div>
  144. <div style="margin-top:50px;text-align:center">
  145. <el-pagination
  146. background
  147. @size-change="handleSizeChange"
  148. @current-change="handleCurrentChange"
  149. :current-page="page"
  150. :page-size="pageSize"
  151. :page-sizes="[5,10,20]"
  152. layout="total, sizes,prev, pager, next,jumper"
  153. :total="totalNum">
  154. </el-pagination>
  155. </div>
  156. </div>
  157. <div id ="pro_detail" style="display:none;width: 100%;">
  158. <div style="margin-top: 10px;">
  159. <a class="pro_item" :href="'../../../'+this.ownerName+'/'+this.pro_name">{{this.ownerName}}&nbsp/&nbsp{{this.pro_name}}</a> <span class="update_time">数据更新时间:</span><span style="font-size: 12px;">{{tableDataIDTotal.lastUpdatedTime}}&nbsp/&nbsp从{{tableDataIDTotal.recordBeginTime}}开始统计</span>
  160. </div>
  161. <div style="margin-top: 10px;">
  162. 项目描述:{{tableDataIDTotal.description | discriptionFun}}
  163. </div>
  164. <div style="margin-top:20px">
  165. <el-row >
  166. <el-col :span='4' class="items">
  167. <el-row>项目创建时间 </el-row>
  168. <el-row class="item_content">{{tableDataIDTotal.creatTime}}</el-row>
  169. </el-col>
  170. <el-col :span='4' class="items">
  171. <el-row>OpenI指数</el-row>
  172. <el-row class="item_content">{{tableDataIDTotal.openi | rounding}}</el-row>
  173. </el-col>
  174. <el-col :span='4' class="items">
  175. <el-row>评论数 </el-row>
  176. <el-row class="item_content">{{tableDataIDTotal.comment}}</el-row>
  177. </el-col>
  178. <el-col :span='4' class="items">
  179. <el-row>浏览量 </el-row>
  180. <el-row class="item_content">{{tableDataIDTotal.view}}</el-row>
  181. </el-col>
  182. <el-col :span='4' class="items">
  183. <el-row>代码下载量</el-row>
  184. <el-row class="item_content">{{tableDataIDTotal.download}}</el-row>
  185. </el-col>
  186. <el-col :span='4' style="text-align: center;">
  187. <el-row>任务完成比例</el-row>
  188. <el-row class="item_content">{{Math.round(tableDataIDTotal.issueClosedRatio * 100) }}%</el-row>
  189. </el-col>
  190. </el-row>
  191. </div>
  192. <div style="margin-top:30px;">
  193. <el-row :gutter="20">
  194. <el-col :span=18 >
  195. <div class="item_l" id="charts">
  196. <div style="font-size:14px;color:#0366D6;margin:20px 5px;">OpenI指数:{{tableDataIDTotal.openi | rounding}}</div>
  197. <div >
  198. <el-col :span='8' id="radar_openi" :style="{ height: '300px'}"></el-col>
  199. <el-col :span='16' id="line_openi" :style="{ height: '300px',float:'right'}"></el-col>
  200. </div>
  201. </div>
  202. </el-col>
  203. <el-col :span=6 >
  204. <div class="item_r">
  205. <div style="margin:0 5px;">
  206. <div style="font-size:14px;color:rgb(0,0,0);margin:10px 5px">贡献者TOP10</div>
  207. <div>
  208. <el-table
  209. :data="tableDataContTop10"
  210. style="width: 100%"
  211. stripe
  212. :header-cell-style="tableHeaderStyle"
  213. >
  214. <el-table-column
  215. label="用户名"
  216. align="left"
  217. prop="user">
  218. <template slot-scope="scope">
  219. <a v-if="scope.row.relAvatarLink!=''" :href="AppSubUrl +'../../../'+ scope.row.user"><img class="ui avatar s16 image js-popover-card" :src="scope.row.relAvatarLink">{{scope.row.user}} </a>
  220. <a v-else :href="'mailto:'+ scope.row.email "> <img class="ui avatar s16 image js-popover-card" :avatar="scope.row.email"> {{scope.row.user}}</a>
  221. </template>
  222. </el-table-column>
  223. <el-table-column
  224. label="身份"
  225. align="center"
  226. prop="mode"
  227. v-if='0'>
  228. <template slot-scope="scope">
  229. {{scope.row.mode | showMode}}
  230. </template>
  231. </el-table-column>
  232. <el-table-column
  233. prop="pr"
  234. label="PR"
  235. width="50px"
  236. align="center">
  237. </el-table-column>
  238. <el-table-column
  239. prop="commit"
  240. label="commit"
  241. align="center">
  242. </el-table-column>
  243. </el-table>
  244. </div>
  245. </div>
  246. </div>
  247. </el-col>
  248. </el-row>
  249. </div>
  250. <div style="margin-top: 20px;">
  251. <span class="sta_iterm">统计周期:</span>
  252. <button type="button" class='btnFirst' id ="yesterday_pro" v-bind:class="{colorChange:1==dynamic_pro}" @click="resetCurrentPage(),getOneProList(pro_id,'yesterday',false,1)">昨天</button>
  253. <button type="button" class='btn' id = "current_week_pro" v-bind:class="{colorChange:2==dynamic_pro}" @click="resetCurrentPage(),getOneProList(pro_id,'current_week',false,2)">本周</button>
  254. <button type="button" class='btn' id = "current_month_pro" v-bind:class="{colorChange:3==dynamic_pro}" @click="resetCurrentPage(),getOneProList(pro_id,'current_month',false,3)">本月</button>
  255. <button type="button" class='btn' id = "last_month_pro" v-bind:class="{colorChange:4==dynamic_pro}" @click="resetCurrentPage(),getOneProList(pro_id,'last_month',false,4)">上月</button>
  256. <button type="button" class='btn' id = "monthly_pro" v-bind:class="{colorChange:5==dynamic_pro}" @click="resetCurrentPage(),getOneProList(pro_id,'monthly',false,5)">近30天</button>
  257. <button type="button" class='btn' id = "current_year_pro" v-bind:class="{colorChange:6==dynamic_pro}" @click="resetCurrentPage(),getOneProList(pro_id,'current_year',false,6)">今年</button>
  258. <button type="button" class='btnLast' id = "all_pro" v-bind:class="{colorChange:7==dynamic_pro}" @click="resetCurrentPage(),getOneProList(pro_id,'all',false,7)">所有</button>
  259. <span style="margin-left: 20px;">
  260. <el-date-picker
  261. v-model="create_time_pro"
  262. prefix-icon="el-icon-time"
  263. @change="resetCurrentPage(),getOneProList(pro_id,'',false,0),clickCheckBox"
  264. type="daterange"
  265. size='small'
  266. range-separator="至"
  267. start-placeholder="开始日期"
  268. end-placeholder="结束日期">
  269. </el-date-picker>
  270. </span>
  271. <span style="float:right; margin-right: 20px;">
  272. <div style="display:inline-block;margin-left: 20px;">
  273. <a v-if="tableDataID!=''" @click="exportData()" class="el-icon-download"></a>
  274. <a v-else="tableDataID=''" @click="exportData()" style="color:rgba(187, 187, 187, 100);" class="el-icon-download"></a>
  275. <span >
  276. <a v-if="tableDataID!=''" @click="exportData()">下载报告</a>
  277. <a v-else="tableDataID=''" @click="exportData()" style="color:rgba(187, 187, 187, 100);">下载报告</a>
  278. </span>
  279. </div>
  280. </span>
  281. </div>
  282. <div class="item_echart" id ='linecharts'>
  283. <div style="margin-top:10px;margin-left: 5px;">
  284. <label for="label" @change='clickCheckBox'>
  285. <input type="checkbox" class="checkboxchart" name="checkboxchart" checked="checked" value="浏览量"/>浏览量
  286. <input type="checkbox" class="checkboxchart" name="checkboxchart" checked="checked" value="下载量"/>下载量
  287. <input type="checkbox" class="checkboxchart" name="checkboxchart" checked="checked" value="commit"/>commit
  288. </label>
  289. </div>
  290. <div id ="selectData" style="height: 300px;">
  291. </div>
  292. </div>
  293. <div style="margin-top: 30px;">
  294. <el-table
  295. :data="tableDataID.slice((currentPage-1)*pageSize1,currentPage*pageSize1)"
  296. style="width: 100%"
  297. :header-cell-style="tableHeaderStyle"
  298. :cell-style='cellStyle'>
  299. <el-table-column
  300. label="日期"
  301. align="center"
  302. prop="date"
  303. stripe
  304. >
  305. </el-table-column>
  306. <el-table-column
  307. label="浏览量"
  308. align="center"
  309. prop="view">
  310. </el-table-column>
  311. <el-table-column
  312. prop="download"
  313. label="下载量"
  314. align="center">
  315. </el-table-column>
  316. <el-table-column
  317. prop="commit"
  318. label="commit"
  319. align="center">
  320. </el-table-column>
  321. </el-table>
  322. </div>
  323. <div style="margin-top:50px;text-align:center">
  324. <el-pagination
  325. background
  326. @size-change="handleSizeChangeID"
  327. @current-change="handleCurrentChangeID"
  328. :current-page="currentPage"
  329. :page-size="pageSize1"
  330. :page-sizes="[5,10,20]"
  331. layout="total, sizes,prev, pager, next,jumper"
  332. :total="tableDataID.length">
  333. </el-pagination>
  334. </div>
  335. </div>
  336. </div>
  337. </template>
  338. <script>
  339. // import barLabel from './basic/barLabel.vue';
  340. const {AppSubUrl, StaticUrlPrefix, csrf} = window.config;
  341. import { export2Excel } from '../excel/util.js'
  342. export default{
  343. name:'ProAnalysis',
  344. components: {
  345. // barLabel,
  346. },
  347. data() {
  348. return {
  349. recordBeginTime:'',
  350. lastUpdatedTime:'',
  351. page:1,
  352. pageSize:10,
  353. params:{type:'all',page:1,pagesize:10,beginTime:'',endTime:'',q:'',sort:'openi'},
  354. tableData: [],
  355. totalPage:0,
  356. totalNum:0,
  357. pickerOptions: {
  358. },
  359. value_time: '',
  360. search:'',
  361. dynamic:7,
  362. download_a:"",
  363. downLoadSrc:'',
  364. //单个项目参数
  365. columns: [{title: '日期',key: 'date'},{title: '浏览量',key: 'view'},{title: '下载量',key: 'download'},{title: 'commit',key: 'commit'}],
  366. currentPage:1,
  367. pageSize1:10,
  368. paramsID:{type:'all' ,beginTime:'',endTime:'',openi:'false'},
  369. tableDataIDTotal: [],
  370. tableDataID: [],
  371. tableDataIDOpenI:[],
  372. tableDataContTop10:[],
  373. create_time_pro: '',
  374. dynamic_pro:7,
  375. pro_name:'',
  376. pro_id:'',
  377. ownerName:'',
  378. radarOpenI:'',
  379. echartsOITd:'',
  380. echartsSelectData:'',
  381. option:'',
  382. };
  383. },
  384. methods: {
  385. // download_file(){
  386. // this.params.type='all'
  387. // },
  388. popMark(){
  389. alert("数据为空时,不能下载!")
  390. },
  391. exportData(){
  392. // this.getOneProList(this.pro_id,'all',true,7)
  393. // this.getOneProList(this.pro_id,'all',false,7)
  394. // this.fileName()
  395. if (this.tableDataID!=''){
  396. this.currentPage=1
  397. var saveFileName = this.getFileName()
  398. export2Excel(this.columns,this.tableDataID,saveFileName)
  399. }else{
  400. alert("数据为空时,不能下载!")
  401. }
  402. },
  403. getFileName(){
  404. var now = new Date(); // 当前日期
  405. var nowDayOfWeek = now.getDay(); // 今天本周的第几天
  406. var nowDay = now.getDate(); // 当前日
  407. var nowMonth = now.getMonth(); // 当前月
  408. var nowYear = now.getFullYear(); // 当前年
  409. var today = this.saveFormatDate(nowYear,nowMonth+1,nowDay);
  410. var tmp = new Date(now.setTime(now.getTime()-24*60*60*1000));
  411. var yesterday = this.saveFormatDate(tmp.getFullYear(),tmp.getMonth()+1,tmp.getDate());
  412. var yesterday_tmp = this.formatDate(tmp.getFullYear(),tmp.getMonth()+1,tmp.getDate())
  413. var startDate=''
  414. var endDate=''
  415. var saveFileName = ''
  416. if (typeof this.paramsID.type=="undefined" || this.paramsID.type=="null" || this.paramsID.type==""){
  417. // startDate= this.saveFormatDate(this.create_time_pro[0].getFullYear(),this.create_time_pro[0].getMonth() + 1,this.create_time_pro[0].getDate());
  418. endDate = this.saveFormatDate(this.create_time_pro[1].getFullYear(),this.create_time_pro[1].getMonth() + 1,this.create_time_pro[1].getDate());
  419. var tmp = this.formatDate(this.create_time_pro[0].getFullYear(),this.create_time_pro[0].getMonth() + 1,this.create_time_pro[0].getDate())
  420. startDate = this.comparedate(tmp,this.recordBeginTime)
  421. console.log("comparedate:"+startDate)
  422. saveFileName = this.pro_name+"_"+startDate+'_'+endDate
  423. }else{
  424. switch(this.paramsID.type){
  425. case "yesterday":{
  426. startDate = this.comparedate(yesterday_tmp,this.recordBeginTime)
  427. endDate = startDate
  428. saveFileName = this.pro_name+"_"+startDate+'_'+ endDate
  429. break
  430. }
  431. case "current_week":{
  432. var now = new Date(); // 当前日期
  433. var nowDayOfWeek = now.getDay(); // 今天本周的第几天
  434. var day = nowDayOfWeek || 7;
  435. startDate = this.formatDate(now.getFullYear(), nowMonth+1, nowDay + 1 - day);
  436. startDate = this.comparedate(startDate,this.recordBeginTime)
  437. endDate = yesterday
  438. saveFileName = this.pro_name+"_"+startDate+'_'+ endDate
  439. break
  440. }
  441. case "current_month":{
  442. startDate = this.formatDate(nowYear,nowMonth+1,1);
  443. startDate = this.comparedate(startDate,this.recordBeginTime)
  444. endDate = yesterday
  445. saveFileName = this.pro_name+"_"+startDate+'_'+ endDate
  446. break
  447. }
  448. case "last_month":{
  449. let lastMonthDate = new Date(); // 上月日期
  450. lastMonthDate.setDate(1);
  451. lastMonthDate.setMonth(lastMonthDate.getMonth()-1);
  452. let lastYear = lastMonthDate.getFullYear();
  453. let lastMonth = lastMonthDate.getMonth();
  454. startDate=this.formatDate(lastYear, lastMonth+1, 1);
  455. startDate = this.comparedate(startDate,this.recordBeginTime)
  456. var monthStartDate = new Date(lastYear, lastMonth, 1);
  457. var monthEndDate = new Date(lastYear, lastMonth+1, 1);
  458. var days = (monthEndDate - monthStartDate) / (1000 * 60 * 60 * 24)
  459. endDate=this.saveFormatDate(lastYear, lastMonth+1, days); //月份从0开始,所以+1保存月份
  460. saveFileName = this.pro_name+"_"+startDate+'_'+ endDate
  461. break
  462. }
  463. case "monthly":{
  464. var temp=new Date(now - 1000 * 60 * 60 * 24 * 30)
  465. startDate = this.formatDate(temp.getFullYear(),temp.getMonth()+1,temp.getDate());
  466. startDate = this.comparedate(startDate,this.recordBeginTime)
  467. endDate = yesterday
  468. saveFileName = this.pro_name+"_"+startDate+'_'+ endDate
  469. break
  470. }
  471. case "current_year":{
  472. startDate = this.formatDate(now.getFullYear(), 1, 1);
  473. startDate = this.comparedate(startDate,this.recordBeginTime)
  474. endDate = yesterday
  475. saveFileName = this.pro_name+"_"+startDate+'_'+ endDate
  476. break
  477. }
  478. case "all":{
  479. console.log("e:"+today)
  480. startDate = 'all'
  481. endDate = yesterday
  482. saveFileName = this.pro_name+'_所有'
  483. break
  484. }
  485. }
  486. }
  487. return saveFileName
  488. },
  489. resetPage(){
  490. this.page=1
  491. this.params.page = 1
  492. },
  493. resetCurrentPage(){
  494. this.currentPage=1
  495. },
  496. handleSizeChange(val){
  497. this.params.pagesize = val
  498. this.resetPage()
  499. this.getAllProList(this.params.type, this.dynamic)
  500. },
  501. handleCurrentChange(val){
  502. console.log(val)
  503. this.params.page = val
  504. this.page = val
  505. switch(this.params.type){
  506. case "yesterday":{
  507. this.value_time=''
  508. this.getAllProList(this.params.type,1)
  509. break
  510. }
  511. case "current_week":{
  512. this.value_time=''
  513. this.getAllProList(this.params.type,2)
  514. break
  515. }
  516. case "current_month":{
  517. this.value_time=''
  518. this.getAllProList(this.params.type,3)
  519. break
  520. }
  521. case "last_month":{
  522. this.value_time=''
  523. this.getAllProList(this.params.type,4)
  524. break
  525. }
  526. case "monthly":{
  527. this.value_time=''
  528. this.getAllProList(this.params.type,5)
  529. break
  530. }
  531. case "current_year":{
  532. this.value_time=''
  533. this.getAllProList(this.params.type,6)
  534. break
  535. }
  536. case "all":{
  537. this.value_time=''
  538. this.getAllProList(this.params.type,7)
  539. break
  540. }
  541. case "":{
  542. // this.value_time=''
  543. this.getAllProList(this.params.type,0)
  544. break
  545. }
  546. }
  547. },
  548. saveFormatDate(myyear,mymonth,myweekday) {
  549. // var myyear = this.date.getFullYear();
  550. // var mymonth = this.date.getMonth() + 1;
  551. // var myweekday = this.date.getDate();
  552. if (mymonth < 10) {
  553. mymonth = "0" + mymonth;
  554. }
  555. if (myweekday < 10) {
  556. myweekday = "0" + myweekday;
  557. }
  558. console.log((myyear +''+ mymonth +''+ myweekday))
  559. return (myyear +''+ mymonth +''+ myweekday);
  560. },
  561. formatDate(myyear,mymonth,myweekday) {
  562. // var myyear = this.date.getFullYear();
  563. // var mymonth = this.date.getMonth() + 1;
  564. // var myweekday = this.date.getDate();
  565. if (mymonth < 10) {
  566. mymonth = "0" + mymonth;
  567. }
  568. if (myweekday < 10) {
  569. myweekday = "0" + myweekday;
  570. }
  571. return (myyear +'-'+ mymonth +'-'+ myweekday);
  572. },
  573. //获得某月的天数
  574. getAllProList(type_val,index){
  575. console.log("类型:"+type_val)
  576. this.dynamic = index
  577. if (typeof type_val=="undefined" || type_val=="null" || type_val==""){
  578. this.params.type=''
  579. this.params.beginTime=this.formatDate(this.value_time[0].getFullYear(),this.value_time[0].getMonth() + 1,this.value_time[0].getDate())
  580. this.params.endTime=this.formatDate(this.value_time[1].getFullYear(),this.value_time[1].getMonth() + 1,this.value_time[1].getDate())
  581. }else{
  582. this.params.type=type_val
  583. this.params.beginTime=''
  584. this.params.endTime=''
  585. this.value_time=[]
  586. }
  587. this.$axios.get('../api/v1/projectboard/project',{
  588. params:this.params
  589. }).then((res)=>{
  590. this.recordBeginTime=res.data.recordBeginTime
  591. this.lastUpdatedTime=res.data.lastUpdatedTime
  592. this.tableData = res.data.pageRecords
  593. this.totalPage=res.data.totalPage
  594. this.totalNum = res.data.totalCount//this.totalPage*this.params.pagesize
  595. console.log("this.totalPage:"+this.totalPage)
  596. })
  597. },
  598. searchName(){
  599. this.params.q = this.search
  600. this.params.page = 1
  601. this.page=1
  602. this.getAllProList(this.params.type, this.dynamic)
  603. },
  604. goToDetailPage(pro_id,pro_name,ownerName){
  605. this.currentPage=1
  606. document.getElementById("pro_main").style.display="none";
  607. document.getElementById("pro_detail").style.display="block";
  608. console.log(pro_id)
  609. console.log(pro_name)
  610. this.pro_name=pro_name;
  611. this.pro_id=pro_id;
  612. this.ownerName=ownerName
  613. this.getOneProData(pro_id);
  614. this.getOneProList(pro_id,"current_year",true,0);
  615. this.getOneProList(pro_id,"monthly",false,5);
  616. },
  617. tableHeaderStyle({row,column,rowIndex,columnIndex}){
  618. if(rowIndex===0){
  619. return 'background:#f5f5f6;color:#606266'
  620. }
  621. },
  622. cellStyle({row,column,rowIndex,columnIndex}){
  623. if(rowIndex%2 === 1){
  624. return 'background:#f5f5f6;color:#606266'
  625. }
  626. },
  627. handleSizeChangeID(val){
  628. this.pageSize1=val
  629. },
  630. handleCurrentChangeID(currentPage){
  631. this.currentPage = currentPage;
  632. },
  633. getOneProData(pro_id){
  634. this.$axios.get('../api/v1/projectboard/project/'+pro_id,{
  635. }).then((res)=>{
  636. this.tableDataIDTotal = res.data
  637. this.tableDataContTop10=res.data.top10
  638. // this.drawLine()
  639. this.drawRadarOpenI()
  640. })
  641. },
  642. getOneProList(pro_id,type_val,bool_val,index){
  643. this.dynamic_pro=index
  644. console.log("日期类型:"+type_val)
  645. if (typeof type_val=="undefined" || type_val=="null" || type_val==""){
  646. this.paramsID.type=''
  647. this.paramsID.beginTime= this.formatDate(this.create_time_pro[0].getFullYear(),this.create_time_pro[0].getMonth() + 1,this.create_time_pro[0].getDate())
  648. this.paramsID.endTime=this.formatDate(this.create_time_pro[1].getFullYear(),this.create_time_pro[1].getMonth() + 1,this.create_time_pro[1].getDate())
  649. }else{
  650. this.create_time_pro=[]
  651. this.paramsID.type=type_val
  652. this.paramsID.beginTime=''
  653. this.paramsID.endTime=''
  654. }
  655. this.paramsID.openi=bool_val
  656. this.$axios.get('../api/v1/projectboard/project/'+pro_id+"/period",{
  657. params:this.paramsID
  658. }).then((res)=>{
  659. if (bool_val){
  660. this.tableDataIDOpenI = res.data
  661. this.drawOpenItrend()
  662. }else{
  663. this.tableDataID = res.data
  664. this.drawSelectData()
  665. }
  666. })
  667. },
  668. drawRadarOpenI(){
  669. var ydata = [this.roundingF(this.tableDataIDTotal.impact),this.roundingF(this.tableDataIDTotal.completeness),this.roundingF(this.tableDataIDTotal.liveness),this.roundingF(this.tableDataIDTotal.projectHealth),this.roundingF(this.tableDataIDTotal.teamHealth),this.roundingF(this.tableDataIDTotal.growth)]
  670. console.log("ydata:",ydata)
  671. var i = -1;
  672. var option = {
  673. titile:{
  674. text:""
  675. },
  676. tooltip: {
  677. trigger: 'item',
  678. backgroundColor:'rgba(255,255,255,0.8)',
  679. color:'black',
  680. borderWidth:'1',
  681. borderColor:'gray',
  682. textStyle:{
  683. color:'black'
  684. },
  685. position: 'right',
  686. // formatter: function (params) {
  687. // console.log('params:',params)
  688. // console.log('params.data:',params[0])
  689. // let str = params.data.name + "<br />";
  690. // params.data.forEach((item) => {
  691. // str +=
  692. // '<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 />";
  693. // });
  694. // return str;
  695. // },
  696. // formatter: function (params, ticket, callback) {
  697. // console.log(params);
  698. // var showHtm="";
  699. // var data = params.data.value
  700. // for(var i=0;i<data.length;i++){
  701. // //x轴名称
  702. // var name = data[i];
  703. // //值
  704. // var value = params[i][2];
  705. // showHtm+= text+ '--' + name + ' :' + value+'<br>'
  706. // }
  707. // return showHtm;
  708. // }
  709. },//提示层
  710. legend: {
  711. // data: ['']
  712. },
  713. radar: {
  714. name: {
  715. textStyle: {
  716. color: 'rgb(0,0,0)', //字体颜色
  717. borderRadius: 3, //圆角
  718. padding: [3, 5] //padding
  719. }
  720. },
  721. slpitNumber:5,
  722. center: ['50%', '50%'],
  723. splitArea: { // 坐标轴在 grid 区域中的分隔区域
  724. show: false,
  725. },
  726. indicator: [{
  727. name: '社区影响力',
  728. max: 100
  729. },
  730. {
  731. name: '项目成熟度',
  732. max: 100
  733. },
  734. {
  735. name: '开发活跃度',
  736. max: 100
  737. },
  738. {
  739. name: '项目健康度',
  740. max: 100
  741. },
  742. {
  743. name: '团队健康度',
  744. max: 100
  745. },
  746. {
  747. name: '项目发展趋势',
  748. max: 100
  749. }
  750. ],
  751. },
  752. series: [{
  753. type: 'radar',
  754. lineStyle:{
  755. width:2,
  756. color: '#0366D6',
  757. normal:{
  758. color:'#0366D6 '
  759. }
  760. },
  761. itemStyle : {
  762. normal : {
  763. color:'#0366D6'
  764. }
  765. },
  766. data: [{
  767. value: ydata,
  768. name:"数据"
  769. }]
  770. }]
  771. }
  772. this.radarOpenI.setOption(option)
  773. },
  774. drawOpenItrend(){
  775. var xdata_openI=[]
  776. var ydata_openI=[]
  777. for(var i =0;i<this.tableDataIDOpenI.length;i++){
  778. xdata_openI.push(this.tableDataIDOpenI[i].date);
  779. ydata_openI.push(this.roundingF(this.tableDataIDOpenI[i].openi))
  780. }
  781. console.log("ydata_openI:"+ydata_openI)
  782. console.log(xdata_openI)
  783. var option = {
  784. title : {
  785. text: 'OpenI指数趋势',
  786. textStyle: {
  787.                 fontSize: 12,
  788.             },
  789. left:'center',
  790. top:'bottom',
  791. subtext: '',
  792. },
  793. tooltip : {
  794. trigger: 'axis',
  795. backgroundColor:'rgba(255,255,255,0.8)',
  796. color:'black',
  797. borderWidth:'1',
  798. borderColor:'#DCE7FB',
  799. textStyle:{
  800. color:'black'
  801. },
  802. },
  803. legend: {
  804. orient: 'vertical',
  805. top:'top',  
  806. },
  807. // calculable : true,
  808. xAxis : [
  809. {
  810. type : 'category',
  811. boundaryGap: false,
  812. data : xdata_openI,
  813. }
  814. ],
  815. yAxis : [
  816. {
  817. type : 'value',
  818. }
  819. ],
  820. series : [
  821. {
  822. data: ydata_openI,
  823. type: 'line',
  824. areaStyle: {
  825. type:'linear',
  826. color:'#DCE7FB',
  827. opacity: 0.3,
  828. origin:"start",
  829. normal:{
  830. color:'#DCE7FB'
  831. }
  832. },
  833. lineStyle:{
  834. width:1,
  835. normal:{
  836. color:'#0366D6'
  837. }
  838. },
  839. itemStyle : {
  840. normal : {
  841. color:'#0366D6'
  842. }
  843. },
  844. }
  845. ]
  846. };
  847. this.echartsOITd.setOption(option)
  848. // setTimeout(function (){
  849. // window.onresize = function () {
  850. // this.echartsOITd.resize();
  851. // }
  852. // },200)
  853. },
  854. drawSelectData(){
  855. // $("#selectData").removeAttr("selectData").empty();
  856. var xdata=[]
  857. var ydata_view=[]
  858. var ydata_download=[]
  859. var ydata_commit=[]
  860. // if ()
  861. for(var i =0;i<this.tableDataID.length;i++){
  862. xdata.push(this.tableDataID[this.tableDataID.length-1-i].date);
  863. ydata_view.push(this.tableDataID[this.tableDataID.length-1-i].view)
  864. ydata_download.push(this.tableDataID[this.tableDataID.length-1-i].download)
  865. ydata_commit.push(this.tableDataID[this.tableDataID.length-1-i].commit)
  866. }
  867. console.log("ydata_openI:"+ydata_download)
  868. console.log(xdata)
  869. this.option = {
  870. title : {
  871. text: '',
  872. textStyle: {
  873.                 fontSize: 12,
  874.             },
  875. left:'center',
  876. top:'bottom',
  877. subtext: '',
  878. },
  879. tooltip : {
  880. trigger: 'axis',
  881. backgroundColor:'rgba(255,255,255,0.8)',
  882. color:'black',
  883. borderWidth:'1',
  884. borderColor:'gray',
  885. textStyle:{
  886. color:'black'
  887. },
  888. },
  889. legend: {
  890. data:['浏览量','下载量','commit'],
  891. // orient: 'vertical',
  892. // top:'top',  
  893. },
  894. toolbox: {
  895. show : false,
  896. feature : {
  897. mark : {show: true},
  898. dataView : {show: false, readOnly: false},
  899. magicType : {show: true, type: ['line', 'bar']},
  900. restore : {show: false},
  901. saveAsImage : {show: true}
  902. }
  903. },
  904. calculable : true,
  905. xAxis : [
  906. {
  907. type : 'category',
  908. data : xdata,
  909. }
  910. ],
  911. yAxis : [
  912. {
  913. type : 'value',
  914. }
  915. ],
  916. series : [
  917. { name:"浏览量",
  918. data: ydata_view,
  919. type: 'line',
  920. areaStyle: {},
  921. },
  922. {
  923. name:"下载量",
  924. data: ydata_download,
  925. type: 'line',
  926. areaStyle: {},
  927. },
  928. {
  929. name:"commit",
  930. data: ydata_commit,
  931. type: 'line',
  932. areaStyle: {},
  933. },
  934. ]
  935. };
  936. // this.echartsSelectData.resize()
  937. this.echartsSelectData.setOption(this.option)
  938. // setTimeout(function (){
  939. // window.onresize = function () {
  940. // this.echartsSelectData.resize;
  941. // }
  942. // },200)
  943. // // 使用刚指定的选择项数据显示图表。
  944. // var selectArr = this.echartsSelectData.getOption().legend[0].data;//legend所有值
  945. // var checkboxs=document.getElementsByName('checkboxchart');
  946. // $(".checkboxchart").click(function(){
  947. // var obj = {};
  948. // for(var i=0; i<checkboxs.length; i++){
  949. // if(checkboxs[i].checked){
  950. // obj[selectArr[i]] = true;
  951. // }else{
  952. // obj[selectArr[i]] = false;
  953. // }
  954. // }
  955. // option.legend.selected = obj;
  956. // this.echartsSelectData.setOption(option);
  957. // });
  958. },
  959. roundingF(value){
  960. return Number(value).toFixed(2)
  961. },
  962. clickCheckBox(){
  963. // 使用刚指定的选择项数据显示图表。
  964. var selectArr = this.echartsSelectData.getOption().legend[0].data;//legend所有值
  965. var checkboxs=document.getElementsByName('checkboxchart');
  966. // $(".checkboxchart").click(function(){
  967. var obj = {};
  968. for(var i=0; i<checkboxs.length; i++){
  969. if(checkboxs[i].checked){
  970. obj[selectArr[i]] = true;
  971. }else{
  972. obj[selectArr[i]] = false;
  973. }
  974. }
  975. this.option.legend.selected = obj;
  976. this.echartsSelectData.setOption(this.option);
  977. // });
  978. },
  979. comparedate(date1,date2){
  980. console.log("date1:"+date1)
  981. console.log("date1:"+date2)
  982. var oDate1 = new Date(date1);
  983. var oDate2 = new Date(date2);
  984. if(oDate1.getTime() < oDate2.getTime()){
  985. var data = date2.split('-')
  986. return data[0]+''+data[1]+''+data[2]
  987. } else {
  988. var data = date1.split('-')
  989. return data[0]+''+data[1]+''+data[2]
  990. }
  991. },
  992. },
  993. filters:{
  994. rounding (value) {
  995. return Number(value).toFixed(2)
  996. },
  997. changeType(value){
  998. if(value==false){
  999. return "否"
  1000. }else{
  1001. return "是"
  1002. }
  1003. },
  1004. discriptionFun(value){
  1005. if(value==''){
  1006. return "暂无描述"
  1007. }
  1008. },
  1009. showMode(value){
  1010. if(value==1){
  1011. return "可读权限"
  1012. }else if(value==2){
  1013. return "可写权限"
  1014. }else if(value==3){
  1015. return "管理员"
  1016. }else if(value==4){
  1017. return "所有者"
  1018. }else{
  1019. return "未定义"
  1020. }
  1021. },
  1022. showContext(value){
  1023. if (value.mode!=-1){
  1024. return " <img class=\"ui avatar image\" src= \" "+ value.RelAvatarLink+ " \" > "+" <a href= \" " + AppSubUrl+"/"+value.user+ "\">"+value.user+" </a>"
  1025. }
  1026. else{
  1027. return " <a href=\" mailto:" + value.email + "class=\"circular ui button\">" +value.user+ "</a>"
  1028. }
  1029. },
  1030. },
  1031. mounted() {
  1032. this.getAllProList("all",7)
  1033. console.log("id:"+this.pro_id);
  1034. document.getElementById('radar_openi').style.width = document.getElementById('pro_main').offsetWidth*0.22+'px'
  1035. document.getElementById('line_openi').style.width = document.getElementById('pro_main').offsetWidth*0.33+'px'
  1036. document.getElementById('selectData').style.width = document.getElementById('pro_main').offsetWidth*0.8+'px'
  1037. this.radarOpenI = this.$echarts.init(document.getElementById('radar_openi'))
  1038. this.echartsOITd = this.$echarts.init(document.getElementById('line_openi'))
  1039. this.echartsSelectData = this.$echarts.init(document.getElementById('selectData'))
  1040. // window.onresize=function(){
  1041. // this.radarOpenI.resize();
  1042. // this.echartsOITd.resize();
  1043. // this.echartsSelectData.resize();
  1044. // }
  1045. // console.log("this.radarOpenI:"+this.radarOpenI)
  1046. },
  1047. watch:{
  1048. search(val){
  1049. if(!val){
  1050. this.params.q = this.search
  1051. this.params.page = 1
  1052. this.page=1
  1053. this.getAllProList(this.params.type, this.dynamic)
  1054. }
  1055. }
  1056. },
  1057. created() {
  1058. // this.download_a=document.getElementById("download_file")
  1059. },
  1060. updated(){
  1061. if(document.querySelectorAll('img[avatar]').length!==0){
  1062. window.LetterAvatar.transform()
  1063. }
  1064. }
  1065. }
  1066. </script>
  1067. <style scoped>
  1068. .pro_item{
  1069. font-size: 16px;
  1070. color: rgba(16, 16, 16, 100);
  1071. font-family: SourceHanSansSC-bold;
  1072. }
  1073. .sta_item{
  1074. font-size: 14px;
  1075. color: rgb(0 0 0);
  1076. font-family: SourceHanSansSC-bold;
  1077. }
  1078. .update_time{
  1079. line-height: 17px;
  1080. font-size: 12px;
  1081. color:rgba(187, 187, 187, 100);
  1082. margin-left: 10px;
  1083. }
  1084. .btnFirst{
  1085. line-height: 1.5;
  1086. margin: -3.5px;
  1087. border: 1px solid rgba(22, 132, 252, 100);
  1088. border-right: none;
  1089. background: #FFFF;
  1090. color: #1684FC;
  1091. width: 60px;
  1092. height: 30px;
  1093. border-radius:4px 0px 0px 4px;
  1094. }
  1095. .btn{
  1096. line-height: 1.5;
  1097. margin: -3.5px;
  1098. border: 1px solid rgba(22, 132, 252, 100);
  1099. border-right: none;
  1100. background: #FFFF;
  1101. color: #1684FC;
  1102. width: 60px;
  1103. height: 30px;
  1104. }
  1105. .btnLast{
  1106. line-height: 1.5;
  1107. margin: -3.5px;
  1108. border: 1px solid rgba(22, 132, 252, 100);
  1109. /* border-right: none; */
  1110. background: #FFFF;
  1111. color: #1684FC;
  1112. width: 60px;
  1113. height: 30px;
  1114. border-radius:0px 4px 4px 0px;
  1115. }
  1116. .btnFirst, .btn, .btnLast {
  1117. cursor: pointer;
  1118. }
  1119. /*
  1120. .btn:focus,
  1121. .btn:active{
  1122. background-color:#409effd6 ;
  1123. } */
  1124. /* /deep/ .el-date-picker {
  1125. width: 250px;
  1126. } */
  1127. /deep/ .el-table tbody tr:hover>td {
  1128. background-color:#D3D3D3!important;
  1129. opacity:1
  1130. }
  1131. /deep/ .el-table {
  1132. font-size: 12px;
  1133. }
  1134. /deep/ .el-range-separator{
  1135. width: 20% !important;
  1136. }
  1137. .colorChange {
  1138. background-color: #1684FC;
  1139. color: #FFFF;
  1140. cursor: default;
  1141. }
  1142. .items{
  1143. text-align: center;
  1144. border-right:1px solid rgba(219, 219, 219, 100);
  1145. }
  1146. .item_l{
  1147. margin-right: 5px;
  1148. border:1px solid rgba(219, 219, 219, 100);
  1149. height: 370px;
  1150. width: 100%;
  1151. }
  1152. .item_r{
  1153. margin-right:5px;
  1154. border:1px solid rgba(219, 219, 219, 100);
  1155. height: 370px;
  1156. overflow:auto
  1157. }
  1158. .item_echart{
  1159. margin-top: 10px;
  1160. margin-right: 5px;
  1161. border:1px solid rgba(219, 219, 219, 100);
  1162. height: 350px;
  1163. width: 100%;
  1164. }
  1165. .item_content{
  1166. color:#0366D6;
  1167. margin-top: 10px;
  1168. font-weight:bold;
  1169. }
  1170. </style>