3dc399b2e55b3fe75c8f7349dffed1de17d41cfc.svn-base 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. <template>
  2. <div class="tree" :style="{'height':height + 'px','width':width == 0 ? 250 : width + 'px'}">
  3. <el-tree
  4. :data="treeData"
  5. show-checkbox
  6. @check-change="handleCheckChange"
  7. :props="treeProps"
  8. :expand-on-click-node="false"
  9. @node-click="nodeClick"
  10. node-key="id"
  11. :default-expanded-keys="tableDefaultExpandedKeys"
  12. ></el-tree>
  13. </div>
  14. </template>
  15. <script>
  16. import request from '@util/gw_ajax_request.js';
  17. import {dateFormat} from "@util/gw_date";
  18. import { getTrees } from "@util/gw_formatTree.js";
  19. export default {
  20. components: {},
  21. props: ['pid','type','pidNodes','height','width'],
  22. data() {
  23. return {
  24. treeData: [],
  25. code:'45',
  26. tableDefaultExpandedKeys: ['001','002','003','006'],
  27. treeProps: {
  28. label: "pnm",
  29. children: "children",
  30. // disabled: false,
  31. expandOnClickNode: false,
  32. first: true,
  33. },
  34. checkedData: [],
  35. changedData: [],
  36. };
  37. },
  38. mounted: function () {
  39. if(this.width == undefined){
  40. this.width = '250';
  41. }
  42. if(this.height == undefined){
  43. this.height = '550';
  44. }
  45. this.getLeftTreeData();
  46. },
  47. computed: {
  48. userId: function () {
  49. return localStorage.getItem("userid")
  50. ? localStorage.getItem("userid")
  51. : "1098101939614724096";
  52. }
  53. },
  54. methods: {
  55. // 节点点击事件
  56. nodeClick: function (data) {
  57. // alert(data.id);
  58. },
  59. // 递归获取选中的元素id
  60. getCheckedNode:function(data){
  61. if(data.children == null || data.disabled || data.children.length === 0){
  62. return;
  63. }
  64. data.children.forEach((element,index) => {
  65. this.checkedData.push({
  66. 'id': element.id,
  67. 'pnm': element.pnm,
  68. });
  69. this.getCheckedNode(element);
  70. });
  71. },
  72. // 递归获取改变的元素id
  73. getChangedNode:function(data){
  74. if(data.children == null || data.disabled || data.children.length === 0){
  75. return;
  76. }
  77. data.children.forEach((element,index) => {
  78. this.changedData.push({
  79. 'id': element.id,
  80. 'pnm': element.pnm,
  81. });
  82. this.getChangedNode(element);
  83. });
  84. },
  85. // 选中或取消事件
  86. handleCheckChange: function (data, checked, indeterminate) {
  87. let _self = this;
  88. // 如果是选中
  89. if (checked) {
  90. // 如果没有被禁用
  91. if(!data.disabled){
  92. _self.checkedData.push({
  93. 'id': data.id,
  94. 'pnm': data.pnm
  95. });
  96. _self.getCheckedNode(data);
  97. }
  98. } else {
  99. // 取消选中
  100. let newCheckedData = [];
  101. _self.checkedData.forEach((element, index) => {
  102. if (element.id == data.id || element.engId == data.engId) {
  103. // 不做操作
  104. } else {
  105. newCheckedData.push(element);
  106. }
  107. });
  108. _self.checkedData = newCheckedData;
  109. // 被改变的元素,先清空一下
  110. _self.changedData = [];
  111. // 只获取明确被取消的元素id和下级id
  112. if(!indeterminate){
  113. _self.changedData.push({
  114. 'id': data.id,
  115. 'pnm': data.pnm,
  116. });
  117. _self.getChangedNode(data)
  118. }else{
  119. _self.changedData.push({
  120. 'id': data.id,
  121. 'pnm': data.pnm,
  122. });
  123. }
  124. }
  125. this.$emit('treeCheckedDataChange', {
  126. 'newCheckedArray': _self.checkedData,
  127. 'changedItem': _self.changedData,
  128. 'newStatus': checked
  129. });
  130. },
  131. //根据用户id获取左侧树
  132. getLeftTreeData(){
  133. var _self = this;
  134. request.get('/dc/organization/base/getAllNode',{params:{'userId':this.userId,'orgType':this.type}}).then((res)=>{
  135. let data = res.data
  136. data.forEach(ele => {
  137. if(ele.pid == null || ele.pid == ''){
  138. ele.pid = '001'
  139. }if(ele.sttm==null || ele.sttm == ''){
  140. ele.sttm = ''
  141. }else{
  142. ele.sttm = dateFormat(ele.sttm,'yy-MM-dd');
  143. }if(ele.entm==null || ele.entm == ''){
  144. ele.entm = ''
  145. }else{
  146. ele.entm = dateFormat(ele.entm,'yy-MM-dd');
  147. }
  148. });
  149. // 处理最低节点增加上层节点
  150. _self.addUpNode(data);
  151. // 使用新的格式化树方法
  152. // _self.treeData = _self.getTreesNew(data);
  153. })
  154. },
  155. //处理最低节点增加上层节点
  156. async addUpNode(data){
  157. // 1.先获取所有id组成的数组并满足id的长度小于12的(12是最低节点)
  158. // 2.如果都是最低节点,那么就加上上层节点
  159. let arr = data.map(v => {
  160. return v.id
  161. }).filter(
  162. (v,i) => v.length<12
  163. );
  164. let ids = data.map(v => {
  165. return v.pid
  166. }).join();
  167. if(arr.length == 0 && ids.length != 0){
  168. await request.get('/dc/organization/base/getAllNodeById',{params:{'id':ids}}).then((res)=>{
  169. let dataUp = res.data;
  170. dataUp.forEach((item,index)=>{
  171. item.disabled = true
  172. })
  173. data = data.concat(dataUp)
  174. }).catch((err)=>{})
  175. }
  176. this.treeData = await getTrees(data)
  177. console.log(JSON.stringify(this.treeData))
  178. },
  179. },
  180. watch:{
  181. type(val){
  182. this.getLeftTreeData()
  183. }
  184. }
  185. };
  186. </script>
  187. <style scoped>
  188. .tree{
  189. overflow-y: auto;
  190. overflow-x: auto;
  191. }
  192. .el-tree {
  193. min-width: 100%;
  194. display:inline-block !important;
  195. }
  196. /*滚动条样式*/
  197. .tree::-webkit-scrollbar {
  198. width: 8px;
  199. height: 8px;
  200. }
  201. /*正常情况下滑块的样式*/
  202. .tree::-webkit-scrollbar-thumb {
  203. background-color: rgba(0, 0, 0, .05);
  204. border-radius: 10px;
  205. -webkit-box-shadow: inset 1px 1px 0 rgba(0, 0, 0, .1);
  206. }
  207. /*鼠标悬浮在该类指向的控件上时滑块的样式*/
  208. .tree:hover::-webkit-scrollbar-thumb {
  209. background-color: rgba(0, 0, 0, .2);
  210. border-radius: 10px;
  211. -webkit-box-shadow: inset 1px 1px 0 rgba(0, 0, 0, .1);
  212. }
  213. /*鼠标悬浮在滑块上时滑块的样式*/
  214. .tree::-webkit-scrollbar-thumb:hover {
  215. background-color: rgba(0, 0, 0, .4);
  216. -webkit-box-shadow: inset 1px 1px 0 rgba(0, 0, 0, .1);
  217. }
  218. /*正常时候的主干部分*/
  219. .tree::-webkit-scrollbar-track {
  220. border-radius: 10px;
  221. -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0);
  222. background-color: white;
  223. }
  224. /*鼠标悬浮在滚动条上的主干部分*/
  225. .tree::-webkit-scrollbar-track:hover {
  226. -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, .4);
  227. background-color: rgba(0, 0, 0, .01);
  228. }
  229. </style>