c1ebdc61a0dac2269462a391cd043b44ca9c6c11.svn-base 9.3 KB

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