CodeReview.vue 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. <template>
  2. <div class="container">
  3. <CodeReviewAddDrawer ref="addDrawer"/>
  4. <FileReviewAddDrawer ref="fileReviewAddDrawer"/>
  5. <!-- <el-row>-->
  6. <!-- <h2>代码评审列表</h2>-->
  7. <!-- </el-row>-->
  8. <!-- <div class = "tabs">-->
  9. <!-- <div class="tab-pane" :active="tabActive[0]" @click="changeTab(0)">-->
  10. <!-- Opened <div class="tab-pane-inline-circle">{{tabCount[0]}}</div>-->
  11. <!-- </div>-->
  12. <!-- <div class="tab-pane" :active="tabActive[1]" @click="changeTab(1)">-->
  13. <!-- Merged <div class="tab-pane-inline-circle">{{tabCount[1]}}</div>-->
  14. <!-- </div>-->
  15. <!-- <div class="tab-pane" :active="tabActive[2]" @click="changeTab(2)">-->
  16. <!-- Closed <div class="tab-pane-inline-circle">{{tabCount[2]}}</div>-->
  17. <!-- </div>-->
  18. <!-- <div class="tab-pane" :active="tabActive[3]" @click="changeTab(3)">-->
  19. <!-- All <div class="tab-pane-inline-circle">{{tabCount[3]}}</div>-->
  20. <!-- </div>-->
  21. <!-- </div>-->
  22. <el-row>
  23. <h2>代码评审列表</h2>
  24. <div class="button-plate">
  25. <el-button type="success" size="medium" @click="addCodeReview">新建分支评审</el-button>
  26. <el-button type="primary" size="medium" @click="addFileReview">新建文件评审</el-button>
  27. </div>
  28. <!-- <el-button type="success" id="addButton" size="medium" @click="add">
  29. 新建代码评审
  30. </el-button>
  31. <el-button type="success" id="addFileReviewButton" size="medium">
  32. 新建文件评审
  33. </el-button> -->
  34. </el-row>
  35. <ElTabs class="tabs" v-model="activeTab">
  36. <ElTabPane :label="'Opened(' + codeReviewList.opened.length + ')'" name="Opened">
  37. <div class="code-review-line" v-for="item in codeReviewList.opened" :key="item.id">
  38. <div class="code-review-titleline" @click="directToDetail(item.id)">{{item.title}}</div>
  39. <div class="code-review-timeline">opened at {{item.createTime.split('T')[0]}}</div>
  40. </div>
  41. </ElTabPane>
  42. <ElTabPane :label="'Merged(' + codeReviewList.merged.length + ')'" name="Merged">
  43. <div class="code-review-line" v-for="item in codeReviewList.merged" :key="item.id">
  44. <div class="code-review-titleline" @click="directToDetail(item.id)">{{item.title}}</div>
  45. <div class="code-review-timeline">opened at {{item.createTime.split('T')[0]}}</div>
  46. </div>
  47. </ElTabPane>
  48. <ElTabPane :label="'Closed(' + codeReviewList.closed.length + ')'" name="Closed">
  49. <div class="code-review-line" v-for="item in codeReviewList.closed" :key="item.id">
  50. <div class="code-review-titleline" @click="directToDetail(item.id)">{{item.title}}</div>
  51. <div class="code-review-timeline">opened at {{item.createTime.split('T')[0]}}</div>
  52. </div>
  53. </ElTabPane>
  54. <ElTabPane :label="'FileReview(' + codeReviewList.fileReview.length + ')'" name="FileReview">
  55. <div class="code-review-line" v-for="item in codeReviewList.fileReview" :key="item.id">
  56. <div class="code-review-titleline" @click="directToFileReviewDetail(item.id)">{{item.title}}</div>
  57. <div class="code-review-timeline">opened at {{item.createTime.split('T')[0]}}</div>
  58. </div>
  59. </ElTabPane>
  60. </ElTabs>
  61. </div>
  62. </template>
  63. <script>
  64. import CodeReviewAddDrawer from '@/components/CodeReviewAddDrawer.vue';
  65. import FileReviewAddDrawer from '@/components/FileReviewAddDrawer.vue';
  66. import { useRouter } from 'vue-router';
  67. import { CodeReviewAPI } from '../../api';
  68. export default {
  69. components: { CodeReviewAddDrawer, FileReviewAddDrawer },
  70. name: 'CodeReview.vue',
  71. data() {
  72. return {
  73. activeTab: 'Opened',
  74. codeReviewList: {
  75. opened: [{
  76. id: 1,
  77. projectId: -1,
  78. sourceBranch: '',
  79. targetBranch: '',
  80. creatorId: '',
  81. reviewerId: '',
  82. status: '',
  83. title: 'frontEndTest',
  84. description: '',
  85. createTime: '2022.1.26',
  86. }, {
  87. id: 1,
  88. projectId: -1,
  89. sourceBranch: '',
  90. targetBranch: '',
  91. creatorId: '',
  92. reviewerId: '',
  93. status: '',
  94. title: 'frontEndTest',
  95. description: '',
  96. createTime: '2022.1.26',
  97. }],
  98. closed: [],
  99. merged: [],
  100. fileReview: [],
  101. },
  102. };
  103. },
  104. computed: {
  105. currentProjectInfo() {
  106. return this.$store.getters.currentProjectInfo;
  107. },
  108. },
  109. methods: {
  110. // changeTab(index) {
  111. // if (this.tabActive[index]) return null;
  112. // this.tabActive = [false, false, false, false];
  113. // this.tabActive[index] = true;
  114. // return null;
  115. // },
  116. addCodeReview() {
  117. this.$refs.addDrawer.show();
  118. },
  119. addFileReview() {
  120. this.$refs.fileReviewAddDrawer.show();
  121. },
  122. directToDetail(id) {
  123. this.$router.push(`codereviewdetail?codeReviewId=${id}`);
  124. },
  125. directToFileReviewDetail(id) {
  126. this.$router.push(`filereviewdetail?fileReviewId=${id}`);
  127. },
  128. },
  129. async mounted() {
  130. this.codeReviewList = await CodeReviewAPI.getCodeReviewList(this.currentProjectInfo.id);
  131. },
  132. };
  133. </script>
  134. <style lang="scss" scoped>
  135. ::v-deep {
  136. .el-tabs__item{
  137. font-size: 1em;
  138. }
  139. }
  140. .container {
  141. margin: 50px 100px;
  142. & .tabs {
  143. width: 90%;
  144. margin: 10px 0px;
  145. }
  146. }
  147. .button-plate {
  148. position: absolute;
  149. top: 100%;
  150. right: 10%;
  151. margin-top: 10px;
  152. z-index: 10;
  153. }
  154. #addButton {
  155. position: absolute;
  156. top: 100%;
  157. right: 10%;
  158. margin-top: 10px;
  159. z-index: 10;
  160. }
  161. #addFileReviewButton {
  162. position: absolute;
  163. top: 100%;
  164. right: 30%;
  165. margin-top: 10px;
  166. z-index: 10;
  167. }
  168. .code-review-line {
  169. border-bottom: 1px solid gainsboro;
  170. padding: 5px 10px;
  171. }
  172. .code-review-titleline {
  173. cursor: pointer;
  174. }
  175. .code-review-titleline:hover {
  176. text-decoration: underline;
  177. }
  178. .code-review-timeline {
  179. color: #909090;
  180. font-size: 0.9em;
  181. margin-top: 5px;
  182. }
  183. </style>