SchoolMenuManage.vue 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. <template>
  2. <div class="school-menu-manage">
  3. <div class="part-box part-box-filter part-box-flex">
  4. <el-form ref="FilterForm" label-position="left" inline>
  5. <el-form-item label="学校:">
  6. <school-select
  7. v-model="schoolId"
  8. placeholder="请选择学校"
  9. :clearable="false"
  10. style="width:100%;"
  11. @change="search"
  12. ></school-select>
  13. </el-form-item>
  14. </el-form>
  15. <div class="part-box-action">
  16. <el-button
  17. type="primary"
  18. :disabled="fetching"
  19. :loading="loading"
  20. @click="save"
  21. >保存</el-button
  22. >
  23. </div>
  24. </div>
  25. <div class="part-box part-box-pad">
  26. <el-tree
  27. :data="menus"
  28. show-checkbox
  29. default-expand-all
  30. node-key="id"
  31. ref="MenuTree"
  32. :props="defaultProps"
  33. check-on-click-node
  34. :expand-on-click-node="false"
  35. >
  36. </el-tree>
  37. </div>
  38. </div>
  39. </template>
  40. <script>
  41. import {
  42. schoolMenuTree,
  43. schoolSelectedMenuTree,
  44. updateSchoolMenu
  45. } from "../api";
  46. export default {
  47. name: "school-menu-manage",
  48. data() {
  49. return {
  50. schoolId: "",
  51. menus: [],
  52. loading: false,
  53. fetching: false,
  54. defaultProps: {
  55. label: "name"
  56. }
  57. };
  58. },
  59. mounted() {
  60. this.getPrivileges();
  61. },
  62. methods: {
  63. async getPrivileges() {
  64. const data = await schoolMenuTree();
  65. this.menus = data || [];
  66. },
  67. async search() {
  68. if (!this.schoolId) return;
  69. this.fetching = true;
  70. const data = await schoolSelectedMenuTree(this.schoolId).catch(() => {});
  71. this.fetching = false;
  72. const privilegeIds = data || [];
  73. this.$refs.MenuTree.setCheckedKeys(privilegeIds);
  74. },
  75. async save() {
  76. const privilegeIds = this.$refs.MenuTree.getCheckedKeys();
  77. if (!this.schoolId || !privilegeIds.length) {
  78. this.$message.error("学校和权限都必须选择!");
  79. return;
  80. }
  81. if (this.loading) return;
  82. this.loading = true;
  83. const res = await updateSchoolMenu({
  84. schoolId: this.schoolId,
  85. privilegeIds: privilegeIds
  86. });
  87. this.loading = false;
  88. if (!res) return;
  89. this.$message.success("修改成功!");
  90. }
  91. }
  92. };
  93. </script>