SelectOrgs.vue 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. <template>
  2. <div
  3. :class="[
  4. 'select-orgs part-box part-box-pad part-box-border',
  5. { 'select-orgs-disabled': disabled }
  6. ]"
  7. >
  8. <el-tree
  9. :data="orgs"
  10. show-checkbox
  11. default-expand-all
  12. node-key="id"
  13. ref="MenuTree"
  14. :props="defaultProps"
  15. :check-strictly="!multiple"
  16. check-on-click-node
  17. :expand-on-click-node="false"
  18. @check="checkClick"
  19. @check-change="checkChange"
  20. >
  21. </el-tree>
  22. </div>
  23. </template>
  24. <script>
  25. import { organizationList } from "../api";
  26. export default {
  27. name: "select-orgs",
  28. props: {
  29. value: {
  30. type: Array,
  31. default() {
  32. return [];
  33. }
  34. },
  35. multiple: {
  36. type: Boolean,
  37. default: true
  38. },
  39. disabled: {
  40. type: Boolean,
  41. default: false
  42. }
  43. },
  44. data() {
  45. return {
  46. selectedOrgs: [],
  47. // orgs: [],
  48. orgs: [],
  49. defaultProps: {
  50. label: "name"
  51. }
  52. };
  53. },
  54. created() {
  55. this.getList();
  56. },
  57. watch: {
  58. value(val, oldVal) {
  59. if (val.join() !== oldVal.join()) this.setCheckedNode(val);
  60. }
  61. },
  62. methods: {
  63. async getList() {
  64. this.orgs = await organizationList();
  65. this.$nextTick(() => {
  66. this.setCheckedNode(this.value);
  67. });
  68. },
  69. setCheckedNode(selectedIds) {
  70. const selectedOrgs = this.$refs.MenuTree.getCheckedKeys();
  71. if (selectedOrgs.join() === selectedIds.join()) return;
  72. if (!this.multiple) {
  73. this.$refs.MenuTree.setCheckedKeys(selectedIds);
  74. return;
  75. }
  76. let checkedIds = [];
  77. const getCheckedIds = list => {
  78. list.forEach(item => {
  79. if (item["children"] && item["children"].length) {
  80. getCheckedIds(item.children);
  81. } else {
  82. const isChecked = selectedIds.includes(item.id);
  83. if (isChecked) checkedIds.push(item.id);
  84. }
  85. });
  86. };
  87. getCheckedIds(this.orgs);
  88. this.$refs.MenuTree.setCheckedKeys(checkedIds);
  89. },
  90. checkChange() {
  91. if (!this.multiple) return;
  92. const selectedOrgs = this.$refs.MenuTree.getCheckedKeys();
  93. this.emitChange(selectedOrgs);
  94. },
  95. checkClick(data) {
  96. if (this.multiple) return;
  97. const checkedIds = this.$refs.MenuTree.getCheckedKeys();
  98. console.log(checkedIds);
  99. console.log(data.id);
  100. if (!checkedIds.includes(data.id)) {
  101. this.emitChange([]);
  102. return;
  103. }
  104. const selectedOrgs = [data.id];
  105. this.$refs.MenuTree.setCheckedKeys([data.id]);
  106. this.emitChange(selectedOrgs);
  107. },
  108. emitChange(vals) {
  109. this.$emit("input", vals);
  110. this.$emit("change", vals);
  111. }
  112. }
  113. };
  114. </script>