ProjectItemTree.vue 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. <template>
  2. <div>
  3. <TreeViewNode
  4. v-for="data in projectItems"
  5. :key="data.id"
  6. :node="data"
  7. :is-root="true"
  8. :is-show-check="true"
  9. @node-select="projectItemSelect"
  10. />
  11. </div>
  12. </template>
  13. <script>
  14. import Common from "../base/common/Common.js";
  15. import ProjectItemResource from '../api/commom/ProjectItemResource.js';
  16. import TreeViewNode from '../base/widget/TreeViewNode.vue';
  17. import { Notify, Uuid } from 'pc-component-v3';
  18. export default {
  19. /**
  20. * ids: 选中的数据
  21. */
  22. props: ['ids'],
  23. data: function () {
  24. return {
  25. projectItems: [], //所有资产分类的大类
  26. };
  27. },
  28. components: {
  29. TreeViewNode,
  30. },
  31. methods: {
  32. /**
  33. * 查询可访问的分类
  34. */
  35. queryProjectItems: function () {
  36. var _self = this;
  37. ProjectItemResource.listRootSubProjectItems().then(successData => {
  38. if(successData.errorCode == 0) {
  39. _self.initProjectItem(successData.datas);
  40. _self.setSelectedIds(_self.ids);
  41. } else {
  42. Notify.error('提示', successData.errorMessage, false);
  43. }
  44. }, errorData => {
  45. Common.processException(errorData);
  46. });
  47. },
  48. /**
  49. * 初始化资产类别
  50. */
  51. initProjectItem: function (data) {
  52. var _self = this;
  53. function setOpen(node) {
  54. node.open = false;
  55. node.selected = false;
  56. node.isShowCheck = true;
  57. node.name = node.text;
  58. node.childrenDatas = node.children;
  59. if (node.childrenDatas != undefined && node.childrenDatas.length > 0) {
  60. node.childrenDatas.forEach(function (item) {
  61. setOpen(item);
  62. });
  63. }
  64. }
  65. if (data) {
  66. data.forEach(function (item) {
  67. setOpen(item);
  68. });
  69. }
  70. _self.projectItems = data;
  71. },
  72. /**
  73. * 父组件调用,用来初始化数据
  74. */
  75. initProjectItem1: function () {
  76. var _self = this;
  77. _self.initProjectItem(_self.projectItems);
  78. },
  79. /**
  80. * 类别选择发生改变
  81. */
  82. projectItemSelect: function (node) {
  83. var _self = this;
  84. node.selected = !node.selected;
  85. var current = node.selected;
  86. function changeSelect(item) {
  87. item.selected = current;
  88. if (item.childrenDatas != undefined && item.childrenDatas.length > 0) {
  89. item.childrenDatas.forEach(function (item1) {
  90. changeSelect(item1);
  91. });
  92. }
  93. }
  94. changeSelect(node);
  95. // 触发selectChanged事件
  96. _self.$emit('selectChanged');
  97. let selectedIds = this.getSelectedIds();
  98. _self.$emit('valueChanged', selectedIds);
  99. },
  100. /**
  101. * 设置选中项
  102. */
  103. setSelectedIds: function (ids) {
  104. var _self = this;
  105. function setSelected(item) {
  106. if (ids != null && ids.indexOf(item.id) >= 0) {
  107. item.selected = true;
  108. } else {
  109. item.selected = false;
  110. }
  111. if (item.childrenDatas != undefined && item.childrenDatas.length > 0) {
  112. item.childrenDatas.forEach(function (item1) {
  113. setSelected(item1);
  114. });
  115. }
  116. }
  117. _self.projectItems.forEach(function (item) {
  118. setSelected(item);
  119. });
  120. function setParentSelect(item) {
  121. if (item.childrenDatas != undefined && item.childrenDatas.length > 0) {
  122. var selectedCount = 0;
  123. item.childrenDatas.forEach(function (item1) {
  124. setParentSelect(item1);
  125. if (ids != null && ids.indexOf(item1.id) >= 0) {
  126. selectedCount++;
  127. }
  128. });
  129. if (selectedCount > 0) {
  130. if (selectedCount < item.childrenDatas.length) {
  131. item.open = true;
  132. item.selected = false;
  133. } else {
  134. item.selected = true;
  135. }
  136. }
  137. }
  138. }
  139. _self.projectItems.forEach(function (item) {
  140. setParentSelect(item);
  141. });
  142. },
  143. /**
  144. * 获取选择的类别id
  145. */
  146. getSelectedIds: function () {
  147. var _self = this;
  148. var arr = [];
  149. function getSelected(item) {
  150. if (item.selected) {
  151. arr.push(item.id);
  152. }
  153. if (item.childrenDatas != undefined && item.childrenDatas.length > 0) {
  154. item.childrenDatas.forEach(function (item1) {
  155. getSelected(item1);
  156. });
  157. }
  158. }
  159. _self.projectItems.forEach(function (item) {
  160. getSelected(item);
  161. });
  162. return arr;
  163. },
  164. },
  165. mounted: function () {
  166. this.queryProjectItems();
  167. if (this.ids != null) {
  168. this.setSelectedIds(this.ids);
  169. }
  170. },
  171. watch: {
  172. 'ids': function (currentValue, oldValue) {
  173. if (currentValue) {
  174. this.setSelectedIds(currentValue);
  175. }
  176. },
  177. },
  178. };
  179. </script>
  180. <style scoped>
  181. </style>