ClientOrganizationTree.vue 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  1. /**
  2. * 单位部门树
  3. */
  4. <template>
  5. <div style="user-select: none;">
  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="organizationSelect"
  13. />
  14. </div>
  15. </template>
  16. <script>
  17. import Common from '../common/Common.js';
  18. import OrganizationResource from '../api/base/OrganizationResource.js';
  19. import TreeViewNode from '../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. ids: {
  31. type: Array,
  32. default: function(){
  33. return null;
  34. },
  35. },
  36. },
  37. emits: ['selectChanged', 'getClientOrganizations'],
  38. data: function () {
  39. return {
  40. datas: [], //所有根部门
  41. selectedClientIds: [], // 已选择的单位集合
  42. autoGetAll: false,//默认获取所有部门id
  43. };
  44. },
  45. watch: {
  46. 'selectedClientIds': function (newVal) {
  47. var _self = this;
  48. _self.$emit('getClientOrganizations', newVal);
  49. },
  50. 'ids': function (currentValue, oldValue) {
  51. if (currentValue) {
  52. this.setSelectedIds(currentValue);
  53. }
  54. },
  55. },
  56. mounted: function () {
  57. var _self = this;
  58. _self.autoGetAll = this.autoGetAllId;
  59. this.getOrganizations();
  60. if (this.ids != null) {
  61. this.setSelectedIds(this.ids);
  62. }
  63. },
  64. methods: {
  65. /**
  66. * 获取可访问的单位部门
  67. */
  68. getOrganizations: function () {
  69. var _self = this;
  70. OrganizationResource.getClientOrganizations().then(successData => {
  71. if(successData.errorCode != 0){
  72. Notify.error('部门查询失败', successData.errorCode, false);
  73. return;
  74. }
  75. _self.initClientOrganization(successData.datas);
  76. _self.setSelectedIds(this.ids);
  77. _self.$nextTick(function(){
  78. _self.$emit('loadFinished');
  79. });
  80. }, errorData => {
  81. Common.processException(errorData);
  82. });
  83. },
  84. /**
  85. * 初始化部门数据
  86. */
  87. initClientOrganization: function (data) {
  88. var _self = this;
  89. function setOpen(node) {
  90. node.open = false;
  91. if (_self.autoGetAll == undefined) {
  92. node.selected = false;
  93. } else {
  94. node.selected = _self.autoGetAll;
  95. }
  96. node.isShowCheck = true;
  97. node.text = node.name;
  98. if (node.childrenDatas != undefined && node.childrenDatas.length > 0) {
  99. node.childrenDatas.forEach(function (item) {
  100. setOpen(item);
  101. });
  102. }
  103. }
  104. data.forEach(function (item) {
  105. setOpen(item);
  106. });
  107. _self.datas = data;
  108. if (_self.autoGetAll != undefined && _self.autoGetAll) {
  109. this.getSelectedIds();
  110. }
  111. },
  112. /**
  113. * 父组件调用,用来初始化数据
  114. */
  115. initClientOrganization1: function () {
  116. var _self = this;
  117. _self.initClientOrganization(_self.datas);
  118. },
  119. /**
  120. * 部门选择
  121. */
  122. organizationSelect: function (node) {
  123. var _self = this;
  124. node.selected = !node.selected;
  125. var current = node.selected;
  126. function changeSelect(item) {
  127. item.selected = current;
  128. if (item.childrenDatas != undefined && item.childrenDatas.length > 0) {
  129. item.childrenDatas.forEach(function (item1) {
  130. changeSelect(item1);
  131. });
  132. }
  133. }
  134. changeSelect(node);
  135. function changeParentSelect(item) {
  136. if (item.childrenDatas != undefined && item.childrenDatas.length > 0) {
  137. var selectedCount = 0;
  138. item.childrenDatas.forEach(function (item1) {
  139. changeParentSelect(item1);
  140. if (item1.selected) {
  141. selectedCount++;
  142. }
  143. });
  144. if (item.isClient) {
  145. if (selectedCount < item.childrenDatas.length) {
  146. item.selected = false;
  147. } else {
  148. item.selected = true;
  149. }
  150. }
  151. }
  152. }
  153. _self.datas.forEach(function (item) {
  154. changeParentSelect(item);
  155. });
  156. // 触发selectChanged事件
  157. _self.$emit('selectChanged');
  158. let selectedIds = this.getSelectedIds();
  159. _self.$emit('valueChanged', selectedIds);
  160. },
  161. /**
  162. * 设置选中项
  163. */
  164. setSelectedIds: function (ids) {
  165. var _self = this;
  166. function setSelected(item) {
  167. if (ids != null && ids.indexOf(item.id) >= 0) {
  168. item.selected = true;
  169. } else {
  170. item.selected = false;
  171. }
  172. if (item.childrenDatas != undefined && item.childrenDatas.length > 0) {
  173. item.childrenDatas.forEach(function (item1) {
  174. setSelected(item1);
  175. });
  176. }
  177. }
  178. _self.datas.forEach(function (item) {
  179. setSelected(item);
  180. });
  181. function setParentSelect(item) {
  182. if (item.childrenDatas != undefined && item.childrenDatas.length > 0) {
  183. var selectedCount = 0;
  184. item.childrenDatas.forEach(function (item1) {
  185. setParentSelect(item1);
  186. if (ids != null && ids.indexOf(item1.id) >= 0) {
  187. selectedCount++;
  188. }
  189. });
  190. if (item.isClient) {
  191. if (selectedCount > 0) {
  192. if (selectedCount < item.childrenDatas.length) {
  193. item.open = true;
  194. item.selected = false;
  195. } else {
  196. item.selected = true;
  197. }
  198. }
  199. }
  200. }
  201. }
  202. _self.datas.forEach(function (item) {
  203. setParentSelect(item);
  204. });
  205. },
  206. /**
  207. * 获取选择的部门ID集合
  208. */
  209. getSelectedIds: function () {
  210. var _self = this;
  211. _self.selectedClientIds.splice(0, _self.selectedClientIds.length);
  212. function getSelected(item) {
  213. if (!item.isClient && item.selected) {
  214. _self.selectedClientIds.push(item.id);
  215. }
  216. if (item.childrenDatas != undefined && item.childrenDatas.length > 0) {
  217. item.childrenDatas.forEach(function (item1) {
  218. getSelected(item1);
  219. });
  220. }
  221. }
  222. _self.datas.forEach(function (item) {
  223. getSelected(item);
  224. });
  225. return _self.selectedClientIds;
  226. },
  227. },
  228. };
  229. </script>
  230. <style>
  231. </style>