ClientTree.vue 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. /**
  2. * 单位树
  3. */
  4. <template>
  5. <div>
  6. <TreeViewNode
  7. v-for="clientOrganization in datas"
  8. :key="clientOrganization.id"
  9. :node="clientOrganization"
  10. :is-root="true"
  11. :is-show-check="true"
  12. @node-select="clientSelect"
  13. />
  14. </div>
  15. </template>
  16. <script>
  17. import Common from '../../base/common/Common.js';
  18. import RoleOrganizationResource from '../../api/base/RoleOrganizationResource.js';
  19. import TreeViewNode from '../../base/widget/TreeViewNode.vue';
  20. import { Notify, Uuid } from 'pc-component-v3';
  21. export default {
  22. components: {
  23. TreeViewNode,
  24. },
  25. props: {
  26. autoGetAllClientId: {
  27. type: Boolean,
  28. default: false,
  29. },
  30. },
  31. emits: ['selectChanged', 'getClientOrganizations'],
  32. data: function () {
  33. return {
  34. datas: [], //所有根单位
  35. oldData: [],
  36. selectedClientIds: [], // 已选择的单位集合
  37. autoGetAllClient: false,
  38. };
  39. },
  40. watch: {
  41. 'selectedClientIds': function (newVal) {
  42. var _self = this;
  43. _self.$emit('getClientOrganizations', newVal);
  44. },
  45. },
  46. mounted: function () {
  47. var _self = this;
  48. _self.autoGetAllClient = this.autoGetAllClientId;
  49. this.getClients();
  50. },
  51. methods: {
  52. /**
  53. * 获取可访问的单位
  54. */
  55. getClients: function () {
  56. var _self = this;
  57. RoleOrganizationResource.getClientOrganizations(true).then(successData => {
  58. if(successData.errorCode != 0){
  59. Notify.error('部门查询失败', successData.errorCode, false);
  60. return;
  61. }
  62. _self.initClient(successData.datas);
  63. _self.oldData = successData.datas;
  64. _self.$nextTick(function(){
  65. _self.$emit('loadFinished');
  66. });
  67. }, errorData => {
  68. Common.processException(errorData);
  69. });
  70. },
  71. /**
  72. * 初始化部门数据
  73. */
  74. initClient: function (data) {
  75. var _self = this;
  76. function setOpen(node) {
  77. node.open = false;
  78. if (_self.autoGetAllClient == undefined) {
  79. node.selected = false;
  80. } else {
  81. node.selected = _self.autoGetAllClient;
  82. }
  83. node.isShowCheck = true;
  84. node.text = node.name;
  85. if (node.childrenDatas != undefined && node.childrenDatas.length > 0) {
  86. node.childrenDatas.forEach(function (item) {
  87. setOpen(item);
  88. });
  89. }
  90. }
  91. data.forEach(function (item) {
  92. setOpen(item);
  93. });
  94. _self.datas = data;
  95. if (_self.autoGetAllClient != undefined && _self.autoGetAllClient) {
  96. this.getSelectedIds();
  97. }
  98. },
  99. /**
  100. * 父组件调用,用来初始化数据
  101. */
  102. initClient1: function () {
  103. var _self = this;
  104. _self.initClient(_self.oldData);
  105. },
  106. /**
  107. * 部门选择
  108. */
  109. clientSelect: function (node) {
  110. var _self = this;
  111. node.selected = !node.selected;
  112. var current = node.selected;
  113. function changeSelect(item) {
  114. item.selected = current;
  115. if (item.childrenDatas != undefined && item.childrenDatas.length > 0) {
  116. item.childrenDatas.forEach(function (item1) {
  117. changeSelect(item1);
  118. });
  119. }
  120. }
  121. changeSelect(node);
  122. function changeParentSelect(item) {
  123. if (item.childrenDatas != undefined && item.childrenDatas.length > 0) {
  124. var selectedCount = 0;
  125. item.childrenDatas.forEach(function (item1) {
  126. changeParentSelect(item1);
  127. if (item1.selected) {
  128. selectedCount++;
  129. }
  130. });
  131. if (item.isClient) {
  132. if (selectedCount < item.childrenDatas.length) {
  133. item.selected = false;
  134. } else {
  135. item.selected = true;
  136. }
  137. }
  138. }
  139. }
  140. _self.datas.forEach(function (item) {
  141. changeParentSelect(item);
  142. });
  143. // 触发selectChanged事件
  144. _self.$emit('selectChanged');
  145. },
  146. /**
  147. * 获取选择的部门ID集合
  148. */
  149. getSelectedIds: function () {
  150. var _self = this;
  151. _self.selectedClientIds.splice(0, _self.selectedClientIds.length);
  152. function getSelected(item) {
  153. if (item.isClient && item.selected) {
  154. _self.selectedClientIds.push(item.id);
  155. }
  156. if (item.childrenDatas != undefined && item.childrenDatas.length > 0) {
  157. item.childrenDatas.forEach(function (item1) {
  158. getSelected(item1);
  159. });
  160. }
  161. }
  162. _self.datas.forEach(function (item) {
  163. getSelected(item);
  164. });
  165. return _self.selectedClientIds;
  166. },
  167. },
  168. };
  169. </script>
  170. <style>
  171. </style>