04fcd9229df9c74ee26b06d777489fe92e89f704.svn-base 7.6 KB

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