ClientOrganization.vue 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. <template>
  2. <div>
  3. <div>
  4. <div class="panel panel-default">
  5. <div class="panel-body">
  6. <div
  7. v-for="clientOrganization in clientOrganizations"
  8. :key="clientOrganization.id"
  9. >
  10. <TreeViewNode
  11. :node="clientOrganization"
  12. :is-root="true"
  13. :is-show-check="clientOrganization.isShowCheck"
  14. @node-expand="nodeExpand"
  15. @node-select="nodeSelect"
  16. />
  17. </div>
  18. </div>
  19. </div>
  20. </div>
  21. <Loading ref="loading" />
  22. </div>
  23. </template>
  24. <script>
  25. var Common = require('../../common/Common.js').default;
  26. var Notify = require('../../common/Notify.js').default;
  27. var Loading = require('../../loading/src/Loading.vue').default;
  28. var TreeViewNode = require('../../tree/src/TreeViewNode.vue').default;
  29. export default {
  30. name: 'ClientOrganization',
  31. components: {
  32. TreeViewNode, Loading,
  33. },
  34. props: {
  35. 'whereClause': {
  36. type: String,
  37. default: '',
  38. },
  39. 'isSearchWidget': {
  40. type: Boolean,
  41. default: false,
  42. },
  43. 'modelData': {
  44. type: Object,
  45. default: null,
  46. },
  47. 'parentModelData': {
  48. type: Object,
  49. default: null,
  50. },
  51. 'fieldValue': {
  52. type: Object,
  53. default: null,
  54. },
  55. },
  56. emits: ['dataSelected', 'deleteSelected'],
  57. data: function () {
  58. return {
  59. 'infoWindowDto': {},
  60. 'datas': [],
  61. sendData: {},
  62. clientOrganizations: [],
  63. };
  64. },
  65. watch: {
  66. fieldValue: function (to, from) {
  67. this.reSelectedNode(to);
  68. },
  69. },
  70. mounted: function () {
  71. this.refresh();
  72. },
  73. methods: {
  74. // 节点打开事件
  75. nodeExpand: function (node) {
  76. console.log(node);
  77. },
  78. // 节点选择事件
  79. nodeSelect: function (node) {
  80. console.log(node);
  81. if (!node.isClient) {
  82. node.selected = !node.selected;
  83. if (node.selected) {
  84. // 增加
  85. let modelData1 = {
  86. 'id': node.id,
  87. 'data': {
  88. 'name': {
  89. 'displayValue': [node.name],
  90. },
  91. },
  92. };
  93. this.$emit('dataSelected', modelData1);
  94. } else {
  95. // 减少
  96. let modelData1 = {
  97. 'id': node.id,
  98. 'data': {
  99. 'name': {
  100. 'displayValue': [node.name],
  101. },
  102. },
  103. };
  104. this.$emit('deleteSelected', modelData1);
  105. }
  106. // this.reSelectedNode(newFieldValue);
  107. }
  108. },
  109. // 获取单位部门
  110. refresh: function () {
  111. var _self = this;
  112. $.ajax({
  113. type: 'get',
  114. dataType: 'json',
  115. url: Common.getApiURL('organizationResource/getClientOrganizations'),
  116. beforeSend: function (request) {
  117. Common.addTokenToRequest(request);
  118. },
  119. success: function (data) {
  120. if(data.errorCode != 0){
  121. Notify.error('部门查询失败', data.errorCode, false);
  122. return;
  123. }
  124. function setOpen(node) {
  125. node.open = false;
  126. node.selected = false;
  127. if (node.isClient) {
  128. node.isShowCheck = false;
  129. } else {
  130. node.isShowCheck = true;
  131. }
  132. node.text = node.name;
  133. if (node.childrenDatas != undefined && node.childrenDatas.length > 0) {
  134. node.childrenDatas.forEach(function (item) {
  135. setOpen(item);
  136. });
  137. }
  138. }
  139. data.datas.forEach(function (item) {
  140. if (item.childrenDatas == null) {
  141. item.open = true;
  142. }
  143. setOpen(item);
  144. });
  145. // add by jack 20180201
  146. // 展开一级树
  147. // if (data.childrenDatas != undefined && data.childrenDatas.length > 0) {
  148. // data.childrenDatas.forEach(function (item) {
  149. // item.open = true;
  150. // });
  151. // }
  152. _self.clientOrganizations = data.datas;
  153. _self.reSelectedNode(_self.fieldValue);
  154. },
  155. error: function (XMLHttpRequest, textStatus, errorThrown) {
  156. Common.processException(XMLHttpRequest, textStatus, errorThrown);
  157. },
  158. });
  159. },
  160. reSelectedNode: function (fieldValue) {
  161. if (fieldValue == undefined) {
  162. return;
  163. }
  164. var ids = fieldValue.ids;
  165. function setOpen(node) {
  166. if (ids.indexOf(node.id) > -1) {
  167. node.selected = true;
  168. } else {
  169. node.selected = false;
  170. }
  171. if (node.childrenDatas != undefined && node.childrenDatas.length > 0) {
  172. node.childrenDatas.forEach(function (item) {
  173. setOpen(item);
  174. });
  175. }
  176. }
  177. if (ids != undefined) {
  178. this.clientOrganizations.forEach(function (item) {
  179. setOpen(item);
  180. });
  181. }
  182. },
  183. },
  184. };
  185. </script>
  186. <style scoped>
  187. .clear-div {
  188. clear: both;
  189. }
  190. .filter-button {
  191. float: right;
  192. }
  193. </style>