CodeReview.vue 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  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 { CodeReviewAPI } from '../../api';
  67. export default {
  68. components: { CodeReviewAddDrawer, FileReviewAddDrawer },
  69. name: 'CodeReview.vue',
  70. data() {
  71. return {
  72. activeTab: 'Opened',
  73. codeReviewList: {
  74. opened: [{
  75. id: 1,
  76. projectId: -1,
  77. sourceBranch: '',
  78. targetBranch: '',
  79. creatorId: '',
  80. reviewerId: '',
  81. status: '',
  82. title: 'frontEndTest',
  83. description: '',
  84. createTime: '2022.1.26',
  85. }, {
  86. id: 1,
  87. projectId: -1,
  88. sourceBranch: '',
  89. targetBranch: '',
  90. creatorId: '',
  91. reviewerId: '',
  92. status: '',
  93. title: 'frontEndTest',
  94. description: '',
  95. createTime: '2022.1.26',
  96. }],
  97. closed: [],
  98. merged: [],
  99. fileReview: [],
  100. },
  101. };
  102. },
  103. computed: {
  104. currentProjectInfo() {
  105. return this.$store.getters.currentProjectInfo;
  106. },
  107. },
  108. methods: {
  109. // changeTab(index) {
  110. // if (this.tabActive[index]) return null;
  111. // this.tabActive = [false, false, false, false];
  112. // this.tabActive[index] = true;
  113. // return null;
  114. // },
  115. addCodeReview() {
  116. this.$refs.addDrawer.show();
  117. },
  118. addFileReview() {
  119. this.$refs.fileReviewAddDrawer.show();
  120. },
  121. async refreshCodeReviewList() {
  122. this.codeReviewList = await CodeReviewAPI.getCodeReviewList(this.currentProjectInfo.id);
  123. },
  124. directToDetail(id) {
  125. this.$router.push(`codereviewdetail?codeReviewId=${id}`);
  126. },
  127. directToFileReviewDetail(id) {
  128. this.$router.push(`filereviewdetail?fileReviewId=${id}`);
  129. },
  130. },
  131. async mounted() {
  132. this.codeReviewList = await CodeReviewAPI.getCodeReviewList(this.currentProjectInfo.id);
  133. },
  134. };
  135. </script>
  136. <style lang="scss" scoped>
  137. ::v-deep {
  138. .el-tabs__item{
  139. font-size: 1em;
  140. }
  141. }
  142. .container {
  143. margin: 50px 100px;
  144. & .tabs {
  145. width: 90%;
  146. margin: 10px 0px;
  147. }
  148. }
  149. .button-plate {
  150. position: absolute;
  151. top: 100%;
  152. right: 10%;
  153. margin-top: 10px;
  154. z-index: 10;
  155. }
  156. #addButton {
  157. position: absolute;
  158. top: 100%;
  159. right: 10%;
  160. margin-top: 10px;
  161. z-index: 10;
  162. }
  163. #addFileReviewButton {
  164. position: absolute;
  165. top: 100%;
  166. right: 30%;
  167. margin-top: 10px;
  168. z-index: 10;
  169. }
  170. .code-review-line {
  171. border-bottom: 1px solid gainsboro;
  172. padding: 5px 10px;
  173. }
  174. .code-review-titleline {
  175. cursor: pointer;
  176. }
  177. .code-review-titleline:hover {
  178. text-decoration: underline;
  179. }
  180. .code-review-timeline {
  181. color: #909090;
  182. font-size: 0.9em;
  183. margin-top: 5px;
  184. }
  185. </style>