leftMixin.js 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292
  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. if(selectClassifyNodes && selectClassifyNodes.length>0){
  43. this.defaultShowNodes = selectClassifyNodes.map(_e=>`${_e}`);
  44. }else{
  45. let arr = this.findParentNodeHandle(deep_arr, code).slice(1).reverse(); // 父的父的父-父的父-父
  46. this.defaultShowNodes = arr;
  47. }
  48. this.select_node = code;
  49. this.$nextTick(()=>{
  50. setTimeout(() => {
  51. this.$refs.treeRef.setCurrentKey(this.select_node);
  52. }, 300);
  53. })
  54. // // 重置筛选状态
  55. this.edb_id = id;
  56. this.getFrequency();
  57. },
  58. // 查找树节点所有父节点
  59. findParentNodeHandle(arr, id) {
  60. // 遍历取父级code push数组
  61. for (let i of arr) {
  62. if (i.UniqueCode === id) {
  63. return [i.UniqueCode];
  64. }
  65. if (i.Children) {
  66. let node = this.findParentNodeHandle(i.Children, id);
  67. if (node) {
  68. return node.concat(i.UniqueCode);
  69. }
  70. }
  71. }
  72. },
  73. /* 拖动时node宽度跟随变化 */
  74. resetNodeStyle: _.debounce(function(node) {
  75. console.log(node);
  76. const tree = $('.target_tree')[0];
  77. let width = tree.offsetWidth;
  78. let label_wid =
  79. width > 500
  80. ? 'auto'
  81. : width <= 300
  82. ? 90
  83. : 0.7 * width;
  84. this.$set(node, 'Nodewidth', label_wid + 'px');
  85. },200),
  86. /* 拖拽完成 */
  87. dropOverHandle(b, a, i, e) {
  88. // console.log(i, a);
  89. // 被拖拽节点对应的 Node、结束拖拽时最后进入的节点、被拖拽节点的放置位置
  90. // 一/二级目录
  91. if ([1,2].includes(b.level)) this.handleMoveCatalogue(b, a, i, e);
  92. // 指标层
  93. if (b.level === 3) this.handleMoveEdb(b, a, i, e);
  94. },
  95. // 移动的为一二级目录
  96. handleMoveCatalogue(b, a, i, e) {
  97. let list = a.parent.childNodes,
  98. targetIndex = 0,
  99. PrevClassifyId = 0,
  100. NextClassifyId = 0,
  101. ParentClassifyId=0;
  102. list.forEach((item, index) => {
  103. if (item.data.BaseFromMysteelChemicalClassifyId === b.data.BaseFromMysteelChemicalClassifyId) {
  104. targetIndex = index;
  105. return;
  106. }
  107. });
  108. if(targetIndex===0){
  109. PrevClassifyId=0
  110. NextClassifyId=list[targetIndex+1].data.BaseFromMysteelChemicalClassifyId
  111. }else if(targetIndex===list.length-1){
  112. PrevClassifyId=list[targetIndex-1].data.BaseFromMysteelChemicalClassifyId
  113. NextClassifyId=0
  114. }else{
  115. PrevClassifyId=list[targetIndex-1].data.BaseFromMysteelChemicalClassifyId
  116. NextClassifyId=list[targetIndex+1].data.BaseFromMysteelChemicalClassifyId
  117. }
  118. if(b.level===2){
  119. if(i==='inner'){
  120. ParentClassifyId=a.data.BaseFromMysteelChemicalClassifyId
  121. PrevClassifyId=0
  122. NextClassifyId=a.data.Children.length>1?a.data.Children[1].BaseFromMysteelChemicalClassifyId:0
  123. }else{
  124. ParentClassifyId=a.data.ParentId
  125. }
  126. }
  127. steelInterface
  128. .classifyMove({
  129. BaseFromMysteelChemicalClassifyId: b.data.BaseFromMysteelChemicalClassifyId,
  130. PrevBaseFromMysteelChemicalClassifyId: PrevClassifyId,
  131. NextBaseFromMysteelChemicalClassifyId: NextClassifyId,
  132. ParentBaseFromMysteelChemicalClassifyId: ParentClassifyId
  133. })
  134. .then((res) => {
  135. if (res.Ret !== 200) return;
  136. this.$message.success("移动成功!");
  137. this.getClassify();
  138. });
  139. },
  140. // 移动指标
  141. handleMoveEdb(b, a, i, e) {
  142. let PrevEdbId = 0,
  143. NextEdbId = 0,
  144. targetIndex = 0,
  145. list = a.parent.data.Children;
  146. if (i === "inner") {
  147. PrevEdbId = 0;
  148. NextEdbId =
  149. a.data.Children.length > 1 ? a.data.Children[1].BaseFromMysteelChemicalIndexId : 0;
  150. } else {
  151. list.forEach((item, index) => {
  152. if (item.BaseFromMysteelChemicalIndexId === b.data.BaseFromMysteelChemicalIndexId) {
  153. targetIndex = index;
  154. return;
  155. }
  156. });
  157. if (targetIndex === 0) {
  158. PrevEdbId = 0;
  159. NextEdbId = list[targetIndex + 1].BaseFromMysteelChemicalIndexId;
  160. } else if (targetIndex === list.length - 1) {
  161. PrevEdbId = list[targetIndex - 1].BaseFromMysteelChemicalIndexId;
  162. NextEdbId = 0;
  163. } else {
  164. PrevEdbId = list[targetIndex - 1].BaseFromMysteelChemicalIndexId;
  165. NextEdbId = list[targetIndex + 1].BaseFromMysteelChemicalIndexId;
  166. }
  167. }
  168. steelInterface
  169. .edbMove({
  170. BaseFromMysteelChemicalClassifyId: a.data.BaseFromMysteelChemicalClassifyId,
  171. BaseFromMysteelChemicalIndexId: b.data.BaseFromMysteelChemicalIndexId,
  172. PrevBaseFromMysteelChemicalIndexId: PrevEdbId,
  173. NextBaseFromMysteelChemicalIndexId: NextEdbId,
  174. })
  175. .then((res) => {
  176. if (res.Ret !== 200) return;
  177. this.$message.success("移动成功!");
  178. this.getClassify();
  179. });
  180. },
  181. /* 拖拽覆盖添加背景色 */
  182. dropMouseOver(node1, node2, e) {
  183. if (
  184. ((node1.level === 2 && node2.level === 1)||(node1.level===3&&node2.level === 2)) &&
  185. (e.target.childNodes[0].className.includes("el-tree-node__content") ||
  186. e.target.className.includes("el-tree-node__content"))
  187. ) {
  188. e.target.childNodes[0].className.includes("el-tree-node__content")
  189. ? (e.target.childNodes[0].style.backgroundColor = "#409eff")
  190. : (e.target.style.backgroundColor = "#409eff");
  191. }
  192. },
  193. /* 拖拽离开/拖拽完成重置背景色 */
  194. dropMouseLeave(node1, node2, e) {
  195. let arrs = $(".el-tree-node__content");
  196. for (let a of arrs) {
  197. a.style.backgroundColor = "transparent";
  198. }
  199. },
  200. // 树节点展开
  201. handleNodeExpand(data) {
  202. // 保存当前展开的节点
  203. let flag = this.defaultShowNodes.some((item) => item === data.UniqueCode);
  204. if (!flag) {
  205. // 不存在则存到数组里
  206. this.defaultShowNodes.push(data.UniqueCode);
  207. }
  208. },
  209. // 树节点关闭
  210. handleNodeCollapse(data) {
  211. this.defaultShowNodes.some((item, index) => {
  212. if (item === data.UniqueCode) {
  213. // 删除关闭节点
  214. this.defaultShowNodes.length = index;
  215. }
  216. });
  217. },
  218. /* 判断节点是否能被拖拽 */
  219. canDragHandle({data}) {
  220. return data.Button.MoveButton;
  221. },
  222. /* 判断节点是否能被拖入 */
  223. canDropHandle(draggingNode, dropNode, type) {
  224. let canDrop = false;
  225. // 移动的是一级目录
  226. if (draggingNode.level === 1 && dropNode.level === 1 &&type!=='inner') {
  227. canDrop = true;
  228. }
  229. // 二级
  230. if (draggingNode.level === 2) {
  231. if (
  232. (dropNode.level === 1 && type === "inner") ||
  233. (dropNode.level === 2 && type !== "inner")
  234. ) {
  235. canDrop = true;
  236. }
  237. }
  238. //三级指标层
  239. if(draggingNode.level===3){
  240. if(
  241. (dropNode.level===2&&type==='inner')||
  242. (dropNode.level===3&&type!=='inner')
  243. ) {
  244. canDrop=true
  245. }
  246. }
  247. return canDrop;
  248. },
  249. // 频度翻译
  250. getFrequencyTrans(frequency){
  251. const map = {
  252. '':this.$t('Edb.FreAll.total'),//全部
  253. '日度':this.$t('Edb.FreAll.day'),
  254. '周度':this.$t('Edb.FreAll.week'),
  255. '旬度':this.$t('Edb.FreAll.dekad'),
  256. '月度':this.$t('Edb.FreAll.month'),
  257. '季度':this.$t('Edb.FreAll.quarter'),
  258. '半年度':this.$t('Edb.FreAll.half_year'),
  259. '年度':this.$t('Edb.FreAll.year'),
  260. }
  261. return map[frequency]||''
  262. },
  263. },
  264. };