leftMixin.js 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273
  1. // 左侧树形分类
  2. import { steelInterface } from "@/api/modules/thirdBaseApi";
  3. export default {
  4. data() {
  5. return {
  6. select_node:null,//树形结构选中的节点id
  7. dynamicNode:null,//树形结构选中的节点
  8. defaultShowNodes: [], //展开的节点
  9. };
  10. },
  11. directives: {
  12. drag(el, bindings) {
  13. el.onmousedown = function (e) {
  14. var init = e.clientX;
  15. // console.log(init);
  16. var box = $('#box')[0];
  17. // console.log(box.clientWidth)
  18. let total_wid = box.offsetWidth;
  19. var left = $('#left')[0];
  20. var right = $('#right')[0];
  21. var initWidth = left.offsetWidth;
  22. document.onmousemove = function (e) {
  23. var end = e.clientX;
  24. var newWidth = end - init + initWidth;
  25. left.style.width = newWidth + 'px';
  26. right.style.width = newWidth > 320 ? total_wid - newWidth + 'px' : total_wid - 320 + 'px';
  27. };
  28. document.onmouseup = function () {
  29. document.onmousemove = document.onmouseup = null;
  30. e.releaseCapture && e.releaseCapture();
  31. };
  32. e.setCapture && e.setCapture();
  33. return false;
  34. };
  35. }
  36. },
  37. methods: {
  38. /* 根据unicode展开树结构并选中 */
  39. selectCurrentNode({ code, id, type,selectClassifyNodes }) {
  40. // let deep_arr = _.cloneDeep(this.classifyList);
  41. // 查找图表的分类父级id
  42. // let arr = this.findParentNodeHandle(deep_arr, code).slice(1).reverse(); // 父的父的父-父的父-父
  43. this.defaultShowNodes = selectClassifyNodes;
  44. this.select_node = code;
  45. this.$nextTick(()=>{
  46. setTimeout(() => {
  47. this.$refs.treeRef.setCurrentKey(this.select_node);
  48. }, 300);
  49. })
  50. // // 重置筛选状态
  51. this.edb_id = id;
  52. this.getFrequency();
  53. },
  54. // 查找树节点所有父节点
  55. findParentNodeHandle(arr, id) {
  56. // 遍历取父级code push数组
  57. for (let i of arr) {
  58. if (i.UniqueCode === id) {
  59. return [i.UniqueCode];
  60. }
  61. if (i.Children) {
  62. let node = this.findParentNodeHandle(i.Children, id);
  63. if (node) {
  64. return node.concat(i.UniqueCode);
  65. }
  66. }
  67. }
  68. },
  69. /* 拖动时node宽度跟随变化 */
  70. resetNodeStyle: _.debounce(function(node) {
  71. console.log(node);
  72. const tree = $('.target_tree')[0];
  73. let width = tree.offsetWidth;
  74. let label_wid =
  75. width > 500
  76. ? 'auto'
  77. : width <= 300
  78. ? 90
  79. : 0.7 * width;
  80. this.$set(node, 'Nodewidth', label_wid + 'px');
  81. },200),
  82. /* 拖拽完成 */
  83. dropOverHandle(b, a, i, e) {
  84. // console.log(i, a);
  85. // 被拖拽节点对应的 Node、结束拖拽时最后进入的节点、被拖拽节点的放置位置
  86. // 一/二级目录
  87. if ([1,2].includes(b.level)) this.handleMoveCatalogue(b, a, i, e);
  88. // 指标层
  89. if (b.level === 3) this.handleMoveEdb(b, a, i, e);
  90. },
  91. // 移动的为一二级目录
  92. handleMoveCatalogue(b, a, i, e) {
  93. let list = a.parent.childNodes,
  94. targetIndex = 0,
  95. PrevClassifyId = 0,
  96. NextClassifyId = 0,
  97. ParentClassifyId=0;
  98. list.forEach((item, index) => {
  99. if (item.data.BaseFromMysteelChemicalClassifyId === b.data.BaseFromMysteelChemicalClassifyId) {
  100. targetIndex = index;
  101. return;
  102. }
  103. });
  104. if(targetIndex===0){
  105. PrevClassifyId=0
  106. NextClassifyId=list[targetIndex+1].data.BaseFromMysteelChemicalClassifyId
  107. }else if(targetIndex===list.length-1){
  108. PrevClassifyId=list[targetIndex-1].data.BaseFromMysteelChemicalClassifyId
  109. NextClassifyId=0
  110. }else{
  111. PrevClassifyId=list[targetIndex-1].data.BaseFromMysteelChemicalClassifyId
  112. NextClassifyId=list[targetIndex+1].data.BaseFromMysteelChemicalClassifyId
  113. }
  114. if(b.level===2){
  115. if(i==='inner'){
  116. ParentClassifyId=a.data.BaseFromMysteelChemicalClassifyId
  117. PrevClassifyId=0
  118. NextClassifyId=a.data.Children.length>1?a.data.Children[1].BaseFromMysteelChemicalClassifyId:0
  119. }else{
  120. ParentClassifyId=a.data.ParentId
  121. }
  122. }
  123. steelInterface
  124. .classifyMove({
  125. BaseFromMysteelChemicalClassifyId: b.data.BaseFromMysteelChemicalClassifyId,
  126. PrevBaseFromMysteelChemicalClassifyId: PrevClassifyId,
  127. NextBaseFromMysteelChemicalClassifyId: NextClassifyId,
  128. ParentBaseFromMysteelChemicalClassifyId: ParentClassifyId
  129. })
  130. .then((res) => {
  131. if (res.Ret !== 200) return;
  132. this.$message.success("移动成功!");
  133. this.getClassify();
  134. });
  135. },
  136. // 移动指标
  137. handleMoveEdb(b, a, i, e) {
  138. let PrevEdbId = 0,
  139. NextEdbId = 0,
  140. targetIndex = 0,
  141. list = a.parent.data.Children;
  142. if (i === "inner") {
  143. PrevEdbId = 0;
  144. NextEdbId =
  145. a.data.Children.length > 1 ? a.data.Children[1].BaseFromMysteelChemicalIndexId : 0;
  146. } else {
  147. list.forEach((item, index) => {
  148. if (item.BaseFromMysteelChemicalIndexId === b.data.BaseFromMysteelChemicalIndexId) {
  149. targetIndex = index;
  150. return;
  151. }
  152. });
  153. if (targetIndex === 0) {
  154. PrevEdbId = 0;
  155. NextEdbId = list[targetIndex + 1].BaseFromMysteelChemicalIndexId;
  156. } else if (targetIndex === list.length - 1) {
  157. PrevEdbId = list[targetIndex - 1].BaseFromMysteelChemicalIndexId;
  158. NextEdbId = 0;
  159. } else {
  160. PrevEdbId = list[targetIndex - 1].BaseFromMysteelChemicalIndexId;
  161. NextEdbId = list[targetIndex + 1].BaseFromMysteelChemicalIndexId;
  162. }
  163. }
  164. steelInterface
  165. .edbMove({
  166. BaseFromMysteelChemicalClassifyId: a.data.BaseFromMysteelChemicalClassifyId,
  167. BaseFromMysteelChemicalIndexId: b.data.BaseFromMysteelChemicalIndexId,
  168. PrevBaseFromMysteelChemicalIndexId: PrevEdbId,
  169. NextBaseFromMysteelChemicalIndexId: NextEdbId,
  170. })
  171. .then((res) => {
  172. if (res.Ret !== 200) return;
  173. this.$message.success("移动成功!");
  174. this.getClassify();
  175. });
  176. },
  177. /* 拖拽覆盖添加背景色 */
  178. dropMouseOver(node1, node2, e) {
  179. if (
  180. ((node1.level === 2 && node2.level === 1)||(node1.level===3&&node2.level === 2)) &&
  181. (e.target.childNodes[0].className.includes("el-tree-node__content") ||
  182. e.target.className.includes("el-tree-node__content"))
  183. ) {
  184. e.target.childNodes[0].className.includes("el-tree-node__content")
  185. ? (e.target.childNodes[0].style.backgroundColor = "#409eff")
  186. : (e.target.style.backgroundColor = "#409eff");
  187. }
  188. },
  189. /* 拖拽离开/拖拽完成重置背景色 */
  190. dropMouseLeave(node1, node2, e) {
  191. let arrs = $(".el-tree-node__content");
  192. for (let a of arrs) {
  193. a.style.backgroundColor = "transparent";
  194. }
  195. },
  196. // 树节点展开
  197. handleNodeExpand(data) {
  198. // 保存当前展开的节点
  199. let flag = this.defaultShowNodes.some((item) => item === data.UniqueCode);
  200. if (!flag) {
  201. // 不存在则存到数组里
  202. this.defaultShowNodes.push(data.UniqueCode);
  203. }
  204. },
  205. // 树节点关闭
  206. handleNodeCollapse(data) {
  207. this.defaultShowNodes.some((item, index) => {
  208. if (item === data.UniqueCode) {
  209. // 删除关闭节点
  210. this.defaultShowNodes.length = index;
  211. }
  212. });
  213. },
  214. /* 判断节点是否能被拖拽 */
  215. canDragHandle({data}) {
  216. return data.Button.MoveButton;
  217. },
  218. /* 判断节点是否能被拖入 */
  219. canDropHandle(draggingNode, dropNode, type) {
  220. let canDrop = false;
  221. // 移动的是一级目录
  222. if (draggingNode.level === 1 && dropNode.level === 1 &&type!=='inner') {
  223. canDrop = true;
  224. }
  225. // 二级
  226. if (draggingNode.level === 2) {
  227. if (
  228. (dropNode.level === 1 && type === "inner") ||
  229. (dropNode.level === 2 && type !== "inner")
  230. ) {
  231. canDrop = true;
  232. }
  233. }
  234. //三级指标层
  235. if(draggingNode.level===3){
  236. if(
  237. (dropNode.level===2&&type==='inner')||
  238. (dropNode.level===3&&type!=='inner')
  239. ) {
  240. canDrop=true
  241. }
  242. }
  243. return canDrop;
  244. },
  245. },
  246. };