TrainingPlanMatrix.vue 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. <template>
  2. <div class="training-plan-matrix part-box part-box-pad">
  3. <div class="part-box part-box-pad">
  4. <el-table v-if="columns.length" :data="dataList" border>
  5. <el-table-column
  6. label="毕业要求"
  7. prop="requirementName"
  8. min-width="200"
  9. fixed="left"
  10. >
  11. </el-table-column>
  12. <el-table-column label="培养目标" align="center">
  13. <el-table-column
  14. v-for="(column, cindex) in columns"
  15. :key="cindex"
  16. :label="column"
  17. align="center"
  18. >
  19. <template slot-scope="scope">
  20. <el-checkbox
  21. v-model="scope.row.targetList[cindex].enable"
  22. @change="matrixChange"
  23. ></el-checkbox>
  24. </template>
  25. </el-table-column>
  26. </el-table-column>
  27. </el-table>
  28. </div>
  29. </div>
  30. </template>
  31. <script>
  32. import {
  33. trainingPlanMatrixListPage,
  34. updateRrainingPlanMatrix,
  35. } from "../../api";
  36. export default {
  37. name: "training-plan-matrix",
  38. props: {
  39. rowData: {
  40. type: Object,
  41. default() {
  42. return {};
  43. },
  44. },
  45. },
  46. data() {
  47. return {
  48. dataList: [],
  49. columns: [],
  50. };
  51. },
  52. mounted() {
  53. this.getList();
  54. },
  55. methods: {
  56. async getList() {
  57. const datas = {
  58. cultureProgramId: this.rowData.id,
  59. };
  60. const res = await trainingPlanMatrixListPage(datas);
  61. if (!res || !res.length) return;
  62. this.columns = res[0].targetList.map((item) => item.name);
  63. this.dataList = res;
  64. },
  65. async matrixChange() {
  66. const datas = this.dataList
  67. .map((item) => {
  68. return item.targetList
  69. .filter((elem) => elem.enable)
  70. .map((elem) => {
  71. return {
  72. id: elem.id,
  73. enable: elem.enable,
  74. };
  75. });
  76. })
  77. .flat();
  78. await updateRrainingPlanMatrix(datas);
  79. },
  80. },
  81. };
  82. </script>