SelectOrgs.vue 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  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="checkStrictly"
  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. checkStrictly: {
  44. type: Boolean,
  45. default: false
  46. }
  47. },
  48. data() {
  49. return {
  50. selectedOrgs: [],
  51. // orgs: [],
  52. orgs: [],
  53. defaultProps: {
  54. label: "name"
  55. }
  56. };
  57. },
  58. created() {
  59. this.getList();
  60. },
  61. watch: {
  62. value(val, oldVal) {
  63. if (val.join() !== oldVal.join()) this.setCheckedNode(val);
  64. }
  65. },
  66. methods: {
  67. async getList() {
  68. this.orgs = await organizationList();
  69. this.$nextTick(() => {
  70. this.setCheckedNode(this.value);
  71. });
  72. },
  73. setCheckedNode(selectedIds) {
  74. const selectedOrgs = this.$refs.MenuTree.getCheckedKeys();
  75. if (selectedOrgs.join() === selectedIds.join()) return;
  76. this.$refs.MenuTree.setCheckedKeys(selectedIds);
  77. },
  78. checkChange() {
  79. if (!this.multiple) return;
  80. const selectedOrgs = this.$refs.MenuTree.getCheckedKeys();
  81. this.emitChange(selectedOrgs);
  82. },
  83. checkClick(data) {
  84. if (this.multiple) return;
  85. const checkedIds = this.$refs.MenuTree.getCheckedKeys();
  86. // console.log(checkedIds);
  87. // console.log(data.id);
  88. if (!checkedIds.includes(data.id)) {
  89. this.emitChange([]);
  90. return;
  91. }
  92. const selectedOrgs = [data.id];
  93. this.$refs.MenuTree.setCheckedKeys([data.id]);
  94. this.emitChange(selectedOrgs);
  95. },
  96. emitChange(vals) {
  97. this.$emit("input", vals);
  98. this.$emit("change", vals);
  99. }
  100. }
  101. };
  102. </script>