detailBm.vue 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. <template>
  2. <div>
  3. <el-alert
  4. :title="`当前正在查看:${user.deptName} 详情`"
  5. type="info"
  6. v-if="user.deptName"
  7. />
  8. <el-tabs v-model="tabActive" @tab-click="reLayoutTable">
  9. <el-tab-pane label="培训记录" name="px">
  10. <el-table
  11. ref="archivesTableRef-px"
  12. :data="pxTableData"
  13. border
  14. height="520"
  15. style="width: 100%"
  16. >
  17. <el-table-column
  18. type="index"
  19. label="序号"
  20. width="50"
  21. align="center"
  22. />
  23. <el-table-column prop="title" label="课程名称" align="center" />
  24. <el-table-column prop="passedName" label="是否完成" align="center" />
  25. <el-table-column
  26. prop="periods"
  27. label="课时"
  28. width="120"
  29. align="center"
  30. />
  31. <el-table-column prop="createTime" label="创建时间" align="center" />
  32. <el-table-column label="进度" width="200" align="center">
  33. <template slot-scope="scope">
  34. <el-progress
  35. :percentage="
  36. parseInt((scope.row.passUser / scope.row.actualUser) * 100) >
  37. 100
  38. ? 100
  39. : parseInt(
  40. (scope.row.passUser / scope.row.actualUser) * 100
  41. )
  42. "
  43. ></el-progress>
  44. </template>
  45. </el-table-column>
  46. <!-- <el-table-column label="是否关联考试" align="center">
  47. <template slot-scope="scope">
  48. <span :style="`${scope.row.sfglks ? 'color:#1890ff;' : ''}`">{{
  49. scope.row.sfglks ? "是" : "否"
  50. }}</span>
  51. </template>
  52. </el-table-column> -->
  53. <el-table-column
  54. fixed="right"
  55. label="操作"
  56. width="100"
  57. align="center"
  58. >
  59. <template slot-scope="scope">
  60. <el-button
  61. type="text"
  62. size="small"
  63. @click="viewQuestion(scope.row)"
  64. >查看课程</el-button
  65. >
  66. </template>
  67. </el-table-column>
  68. </el-table>
  69. </el-tab-pane>
  70. <el-tab-pane label="考试记录" name="ks">
  71. <el-table
  72. ref="archivesTableRef-ks"
  73. :data="ksTableData"
  74. border
  75. height="520"
  76. style="width: 100%"
  77. >
  78. <el-table-column
  79. type="index"
  80. label="序号"
  81. width="50"
  82. align="center"
  83. />
  84. <el-table-column prop="title" label="试卷名称" align="center" />
  85. <el-table-column prop="startTime" label="开考时间" align="center" />
  86. <el-table-column prop="endTime" label="结束时间" align="center" />
  87. <el-table-column prop="minScore" label="最低成绩" align="center" />
  88. <el-table-column prop="maxScore" label="最高成绩" align="center" />
  89. <el-table-column prop="jgl" label="及格率" align="center" />
  90. <el-table-column label="是否关联考试" align="center">
  91. <template slot-scope="scope">
  92. <span :style="`${scope.row.associate ? 'color:#1890ff;' : ''}`">{{
  93. scope.row.associate ? "是" : "否"
  94. }}</span>
  95. </template>
  96. </el-table-column>
  97. <el-table-column
  98. fixed="right"
  99. label="操作"
  100. width="100"
  101. align="center"
  102. >
  103. <template slot-scope="scope">
  104. <el-button type="text" size="small" @click="viewPaper(scope.row)"
  105. >查看试卷</el-button
  106. >
  107. </template>
  108. </el-table-column>
  109. </el-table>
  110. </el-tab-pane>
  111. </el-tabs>
  112. </div>
  113. </template>
  114. <script>
  115. import { getDepartPxDetail, getDepartKsDetail } from "@/api/archives/index";
  116. export default {
  117. data() {
  118. return {
  119. user: {},
  120. tabActive: "px",
  121. pxTableData: [],
  122. ksTableData: [],
  123. };
  124. },
  125. mounted() {
  126. this.user = this.$route.params.id
  127. ? this.$route.params
  128. : JSON.parse(localStorage.getItem("examLocalStorage"));
  129. this.getPxData();
  130. this.getKsData();
  131. },
  132. methods: {
  133. // 获取培训记录
  134. getPxData() {
  135. getDepartPxDetail({
  136. statDateL: this.user._date[0],
  137. statDateR: this.user._date[1],
  138. q: this.user.deptCode,
  139. }).then((res) => {
  140. res.data.forEach((ele) => {
  141. ele.passedName = ele.passed ? "是" : "否";
  142. });
  143. this.pxTableData = res.data;
  144. });
  145. },
  146. // 获取考试记录
  147. getKsData() {
  148. getDepartKsDetail({
  149. statDateL: this.user._date[0],
  150. statDateR: this.user._date[1],
  151. q: this.user.deptCode,
  152. }).then((res) => {
  153. res.data.forEach((ele) => {
  154. ele.jgl = `${this.renderNumber(ele.passed, ele.actualUser)}`;
  155. });
  156. this.ksTableData = res.data;
  157. });
  158. },
  159. // 过滤数字,规避 0/0 的情况
  160. renderNumber(num1, num2, renderChart) {
  161. if (!num1 && !num2) {
  162. return renderChart ? 0 : "0%";
  163. } else {
  164. if (!(num1 / num2)) {
  165. return renderChart ? 0 : "0%";
  166. } else {
  167. return `${
  168. renderChart
  169. ? parseInt((num1 / num2) * 100)
  170. : ((num1 / num2) * 100).toFixed(2) + "%"
  171. }`;
  172. }
  173. }
  174. },
  175. // 查看课程
  176. viewQuestion(item) {
  177. this.$router.push({ path: `/web/course/view/${item.id}` });
  178. },
  179. // 查看试卷
  180. viewPaper(item) {
  181. this.$router.push({ path: `/admin/tmpl/preview/${item.tmplId}` });
  182. },
  183. // 重置表格布局
  184. reLayoutTable() {
  185. this.$nextTick(() => {
  186. this.$refs[`archivesTableRef-${this.tabActive}`].doLayout();
  187. });
  188. },
  189. },
  190. };
  191. </script>