ClientOrganization.vue 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  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 v-if="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. loading: false,
  64. };
  65. },
  66. watch: {
  67. fieldValue: function (to, from) {
  68. this.reSelectedNode(to);
  69. },
  70. },
  71. mounted: function () {
  72. this.refresh();
  73. },
  74. methods: {
  75. // 节点打开事件
  76. nodeExpand: function (node) {
  77. console.log(node);
  78. },
  79. // 节点选择事件
  80. nodeSelect: function (node) {
  81. console.log(node);
  82. if (!node.isClient) {
  83. node.selected = !node.selected;
  84. if (node.selected) {
  85. // 增加
  86. let modelData1 = {
  87. 'id': node.id,
  88. 'data': {
  89. 'name': {
  90. 'displayValue': [node.name],
  91. },
  92. },
  93. };
  94. this.$emit('dataSelected', modelData1);
  95. } else {
  96. // 减少
  97. let modelData1 = {
  98. 'id': node.id,
  99. 'data': {
  100. 'name': {
  101. 'displayValue': [node.name],
  102. },
  103. },
  104. };
  105. this.$emit('deleteSelected', modelData1);
  106. }
  107. // this.reSelectedNode(newFieldValue);
  108. }
  109. },
  110. // 获取单位部门
  111. refresh: function () {
  112. var _self = this;
  113. $.ajax({
  114. type: 'get',
  115. dataType: 'json',
  116. url: Common.getApiURL('organizationResource/getClientOrganizations'),
  117. beforeSend: function (request) {
  118. Common.addTokenToRequest(request);
  119. },
  120. success: function (data) {
  121. if(data.errorCode != 0){
  122. Notify.error('部门查询失败', data.errorCode, false);
  123. return;
  124. }
  125. function setOpen(node) {
  126. node.open = false;
  127. node.selected = false;
  128. if (node.isClient) {
  129. node.isShowCheck = false;
  130. } else {
  131. node.isShowCheck = true;
  132. }
  133. node.text = node.name;
  134. if (node.childrenDatas != undefined && node.childrenDatas.length > 0) {
  135. node.childrenDatas.forEach(function (item) {
  136. setOpen(item);
  137. });
  138. }
  139. }
  140. data.datas.forEach(function (item) {
  141. if (item.childrenDatas == null) {
  142. item.open = true;
  143. }
  144. setOpen(item);
  145. });
  146. // add by jack 20180201
  147. // 展开一级树
  148. // if (data.childrenDatas != undefined && data.childrenDatas.length > 0) {
  149. // data.childrenDatas.forEach(function (item) {
  150. // item.open = true;
  151. // });
  152. // }
  153. _self.clientOrganizations = data.datas;
  154. _self.reSelectedNode(_self.fieldValue);
  155. },
  156. error: function (XMLHttpRequest, textStatus, errorThrown) {
  157. Common.processException(XMLHttpRequest, textStatus, errorThrown);
  158. },
  159. });
  160. },
  161. reSelectedNode: function (fieldValue) {
  162. if (fieldValue == undefined) {
  163. return;
  164. }
  165. var ids = fieldValue.ids;
  166. function setOpen(node) {
  167. if (ids.indexOf(node.id) > -1) {
  168. node.selected = true;
  169. } else {
  170. node.selected = false;
  171. }
  172. if (node.childrenDatas != undefined && node.childrenDatas.length > 0) {
  173. node.childrenDatas.forEach(function (item) {
  174. setOpen(item);
  175. });
  176. }
  177. }
  178. if (ids != undefined) {
  179. this.clientOrganizations.forEach(function (item) {
  180. setOpen(item);
  181. });
  182. }
  183. },
  184. },
  185. };
  186. </script>
  187. <style scoped>
  188. .clear-div {
  189. clear: both;
  190. }
  191. .filter-button {
  192. float: right;
  193. }
  194. </style>