AssignMenu.vue 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. <template>
  2. <Tree ref="tree" :data="menu" show-checkbox multiple @on-check-change="change"></Tree>
  3. </template>
  4. <script>
  5. import { menuSort } from '../../../helper'
  6. export default {
  7. name: 'AssignMenu',
  8. data() {
  9. return {
  10. menu: [],
  11. }
  12. },
  13. props: {
  14. id: Number,
  15. },
  16. created() {
  17. this.load();
  18. },
  19. methods: {
  20. tree(menus, pid, level) {
  21. let menu = [];
  22. menus.forEach(item => {
  23. if (item['parent_id'] === pid) {
  24. let data = {
  25. menu: item,
  26. title: item.name,
  27. level: level,
  28. expand: true,
  29. children: item['url'] ? [] : this.tree(menus, item['id'], level + 1),
  30. };
  31. if (item['url'] && item.checked) {
  32. data.checked = true;
  33. }
  34. menu.push(data);
  35. }
  36. });
  37. return menu;
  38. },
  39. load() {
  40. this.$request('/system/auth/getMenu').data({id: this.id}).success((r) => {
  41. this.menu = this.tree(menuSort(r.data), 0, 1);
  42. }).get();
  43. },
  44. change() {
  45. let menu = this.$refs.tree.getCheckedAndIndeterminateNodes();
  46. let request = this.$request('/system/auth/assignMenu').data({
  47. menuIds: menu.map(item => {
  48. return item.menu.id;
  49. }),
  50. id:this.id
  51. }).success(() => {
  52. this.$emit('reload')
  53. });
  54. if (menu.length < 1) {
  55. return this.$Modal.confirm({
  56. title: "确定要清空当前的所有菜单?",
  57. onOk: () => {
  58. request.post();
  59. },
  60. onCancel:() => {
  61. this.load();
  62. },
  63. });
  64. }
  65. request.post();
  66. },
  67. reload() {
  68. this.$emit('reload')
  69. }
  70. }
  71. }
  72. </script>
  73. <style scoped>
  74. </style>