|
@@ -68,7 +68,6 @@
|
|
|
:default-expanded-keys="defaultShowNodes"
|
|
|
draggable
|
|
|
:expand-on-click-node="false"
|
|
|
- check-strictly
|
|
|
empty-text="暂无分类"
|
|
|
lazy
|
|
|
:load="getLazyTreeData"
|
|
@@ -97,6 +96,7 @@
|
|
|
:style="`width:${
|
|
|
(select_node === data.UniqueCode && node.Nodewidth) || ''
|
|
|
}`"
|
|
|
+ :id="`node${data.UniqueCode}`"
|
|
|
>
|
|
|
<span>{{ currentLang==='en' ? (data.ChartClassifyNameEn||data.ChartClassifyName) : data.ChartClassifyName }}</span>
|
|
|
</span>
|
|
@@ -295,8 +295,9 @@
|
|
|
/> -->
|
|
|
<modifyClassifyDialog
|
|
|
:isOpenDialog.sync="classifyDia"
|
|
|
- :title="dialog_title"
|
|
|
+ :type="classifyDiaType"
|
|
|
:formData="classifyForm"
|
|
|
+ @sucessCallback="sucessCallback"
|
|
|
/>
|
|
|
|
|
|
<!-- 加入我的图库弹窗 -->
|
|
@@ -388,7 +389,7 @@ export default {
|
|
|
dynamicNode: null,
|
|
|
|
|
|
/* 分类弹窗 */
|
|
|
- dialog_title: "",
|
|
|
+ classifyDiaType: "add",//add or edit
|
|
|
classifyDia: false, //
|
|
|
classifyForm: {},
|
|
|
|
|
@@ -417,6 +418,140 @@ export default {
|
|
|
};
|
|
|
},
|
|
|
methods: {
|
|
|
+ /* 判断节点是否能被拖拽 */
|
|
|
+ canDragHandle({data}) {
|
|
|
+ return data.Button.MoveButton;
|
|
|
+ },
|
|
|
+ /* 判断节点是否能被拖入 */
|
|
|
+ canDropHandle(draggingNode, dropNode, type) {
|
|
|
+ let canDrop=false
|
|
|
+
|
|
|
+ // 如果拖动的是图表
|
|
|
+ if(draggingNode.data.ChartInfoId){
|
|
|
+ if(!(dropNode.level===1&&type!=='inner')){
|
|
|
+ canDrop=true
|
|
|
+ }
|
|
|
+ }else{//拖动的是目录
|
|
|
+ //目录层级不能改变
|
|
|
+ if((dropNode.level+1==draggingNode.level&&type==='inner'&&!dropNode.data.ChartInfoId)||(dropNode.level===draggingNode.level&&type!=='inner')){
|
|
|
+ canDrop=true
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return canDrop
|
|
|
+ },
|
|
|
+ /* 拖拽完成 */
|
|
|
+ dropOverHandle(b,a,i,e) {
|
|
|
+ // 被拖拽节点对应的 Node、结束拖拽时最后进入的节点、被拖拽节点的放置位置
|
|
|
+ const isChart=b.data.ChartInfoId?true:false
|
|
|
+ let list=a.parent.childNodes;
|
|
|
+ let targetIndex=0
|
|
|
+ let ClassifyId=0,//分类ID,若当前节点为图表,则为0
|
|
|
+ ParentClassifyId=0,//移动后,所在位置的父级分类ID
|
|
|
+ PrevClassifyId=0,//前一个节点的分类ID,若前一个节点为图表,则为0
|
|
|
+ NextClassifyId=0,//后一个节点的分类ID,同上
|
|
|
+ ChartInfoId=0,//图表ID,若当前节点为分类,则为0
|
|
|
+ PrevChartInfoId=0,//前一个节点的图表ID,若前一个节点为分类,则为0
|
|
|
+ NextChartInfoId=0;//后一个节点的图表ID
|
|
|
+
|
|
|
+ ClassifyId=isChart?0:b.data.ChartClassifyId
|
|
|
+ ChartInfoId=isChart?b.data.ChartInfoId:0
|
|
|
+
|
|
|
+
|
|
|
+ if(i!=='inner'){
|
|
|
+ ParentClassifyId=a.parent.data.ChartClassifyId||0
|
|
|
+ list.forEach((item,index)=>{
|
|
|
+ if(isChart){
|
|
|
+ if(item.data.ChartInfoId===b.data.ChartInfoId){
|
|
|
+ targetIndex=index
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ if(item.data.ChartClassifyId===b.data.ChartClassifyId){
|
|
|
+ targetIndex=index
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+
|
|
|
+ console.log(targetIndex);
|
|
|
+
|
|
|
+
|
|
|
+ if(targetIndex===0){
|
|
|
+ const data=list[targetIndex+1].data
|
|
|
+ NextClassifyId=data.ChartInfoId?0:data.ChartClassifyId
|
|
|
+ NextChartInfoId=data.ChartInfoId?data.ChartInfoId:0
|
|
|
+ }else if(targetIndex===list.length-1){
|
|
|
+ const data=list[targetIndex-1].data
|
|
|
+ PrevClassifyId=data.ChartInfoId?0:data.ChartClassifyId
|
|
|
+ PrevChartInfoId=data.ChartInfoId?data.ChartInfoId:0
|
|
|
+ }else{
|
|
|
+ const pData=list[targetIndex-1].data
|
|
|
+ PrevClassifyId=pData.ChartInfoId?0:pData.ChartClassifyId
|
|
|
+ PrevChartInfoId=pData.ChartInfoId?pData.ChartInfoId:0
|
|
|
+
|
|
|
+ const nData=list[targetIndex+1].data
|
|
|
+ NextClassifyId=nData.ChartInfoId?0:nData.ChartClassifyId
|
|
|
+ NextChartInfoId=nData.ChartInfoId?nData.ChartInfoId:0
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ ParentClassifyId=a.data.ChartClassifyId||0
|
|
|
+ }
|
|
|
+
|
|
|
+ const params={
|
|
|
+ ClassifyId,
|
|
|
+ ParentClassifyId,
|
|
|
+ PrevClassifyId,
|
|
|
+ NextClassifyId,
|
|
|
+ ChartInfoId,
|
|
|
+ PrevChartInfoId,
|
|
|
+ NextChartInfoId
|
|
|
+ }
|
|
|
+ console.log(params);
|
|
|
+ chartRelevanceApi.classifyMove(params).then(res=>{
|
|
|
+ if(res.Ret===200){
|
|
|
+ // this.$message.success('移动成功!')
|
|
|
+ this.$message.success(this.$t('MsgPrompt.move_sort_success'))
|
|
|
+ }
|
|
|
+ this.getTreeData()
|
|
|
+ if(this.select_id){
|
|
|
+ this.getDetailHandle();
|
|
|
+ }
|
|
|
+
|
|
|
+ })
|
|
|
+ },
|
|
|
+
|
|
|
+ /* 拖拽覆盖添加背景色 */
|
|
|
+ dropMouseOver(node1,node2,e) {
|
|
|
+ // console.log(e.layerY);
|
|
|
+
|
|
|
+ // 被拖拽节点对应的 Node、所进入节点对应的 Node、event
|
|
|
+ if(!node2.data.EdbInfoId&&(node1.level>node2.level||(node1.data.EdbInfoId>0&&!node2.data.EdbInfoId)) && (e.target.childNodes[0].className.includes('el-tree-node__content')
|
|
|
+ || e.target.className.includes('el-tree-node__content'))) {
|
|
|
+ // console.log(e.target.childNodes[0])
|
|
|
+ e.target.childNodes[0].className.includes('el-tree-node__content')
|
|
|
+ ? e.target.childNodes[0].style.backgroundColor = '#409eff'
|
|
|
+ : e.target.style.backgroundColor = '#409eff';
|
|
|
+ }
|
|
|
+
|
|
|
+ },
|
|
|
+ /* 拖拽离开/拖拽完成重置背景色 */
|
|
|
+ dropMouseLeave(node1,node2,e) {
|
|
|
+ let arrs = $('.el-tree-node__content');
|
|
|
+ for( let a of arrs ) {
|
|
|
+ a.style.backgroundColor = 'transparent';
|
|
|
+ }
|
|
|
+ },
|
|
|
+ sucessCallback(type){
|
|
|
+ this.classifyDia = false;
|
|
|
+ this.getTreeData();
|
|
|
+ if(type === 'add') {
|
|
|
+ //新增分类完成之后,展开父节点显示刚新增的分类,若已展开节点则不做处理
|
|
|
+ let code = sessionStorage.getItem('expandCode');
|
|
|
+ let flag = this.defaultShowNodes.some((item) => {
|
|
|
+ return item === code
|
|
|
+ });
|
|
|
+ !flag &&code&& this.defaultShowNodes.push(code);
|
|
|
+ sessionStorage.removeItem('expandCode');
|
|
|
+ }
|
|
|
+ },
|
|
|
// 递归节点
|
|
|
getNodeParentData(data,arr){
|
|
|
if(data.level===0) return
|
|
@@ -425,7 +560,7 @@ export default {
|
|
|
return arr
|
|
|
},
|
|
|
addNode(node,data){
|
|
|
- this.dialog_title = '添加';
|
|
|
+ this.classifyDiaType = 'add';
|
|
|
let arr=[]
|
|
|
arr=this.getNodeParentData(node,arr)
|
|
|
/* 添加目录 */
|
|
@@ -434,6 +569,7 @@ export default {
|
|
|
parent_id: data.ChartClassifyId,
|
|
|
level: node.level,
|
|
|
levelVal:'',
|
|
|
+ nodeId:'',
|
|
|
}
|
|
|
//存储当前要新增子级的目录code
|
|
|
sessionStorage.setItem('expandCode', data.UniqueCode);
|
|
@@ -465,7 +601,7 @@ export default {
|
|
|
handleShowChartDetail({ UniqueCode, ChartInfoId }){
|
|
|
this.select_classify = 0;
|
|
|
this.select_id = ChartInfoId;
|
|
|
-
|
|
|
+ this.select_node = UniqueCode;
|
|
|
},
|
|
|
/* 添加图表 */
|
|
|
goAddChart() {
|
|
@@ -496,6 +632,10 @@ export default {
|
|
|
this.$nextTick(() => {
|
|
|
/* 新增完成后 处理树展开和选中 */
|
|
|
//params && this.selectCurrentNode(params);
|
|
|
+ if(params){
|
|
|
+ this.select_node = params.code;
|
|
|
+ this.select_id = params.id;
|
|
|
+ }
|
|
|
});
|
|
|
});
|
|
|
},
|
|
@@ -553,29 +693,33 @@ export default {
|
|
|
this.search_txt = "";
|
|
|
this.select_node = UniqueCode;
|
|
|
this.select_classify = !ChartInfoId ? ChartClassifyId : 0;
|
|
|
- // if(this.select_id !== ChartInfoId) {
|
|
|
this.select_id = ChartInfoId || 0;
|
|
|
- // }
|
|
|
this.resetNodeStyle(node);
|
|
|
this.dynamicNode = node;
|
|
|
},
|
|
|
|
|
|
/* 添加一级目录 */
|
|
|
addLevelOneHandle() {
|
|
|
- this.dialog_title = this.$t('StatisticAnalysis.ChartRelevance.add_chart_classify')||"添加图表分类";
|
|
|
- this.classifyForm = {
|
|
|
- classify_name: "",
|
|
|
- };
|
|
|
- this.classifyDia = true;
|
|
|
+ this.classifyDiaType = 'add';
|
|
|
+ this.classifyForm = {
|
|
|
+ parent_id: 0,
|
|
|
+ level: 0,
|
|
|
+ levelVal:'',
|
|
|
+ };
|
|
|
+ this.classifyDia = true;
|
|
|
},
|
|
|
|
|
|
/* 编辑节点 */
|
|
|
editNode(node, { ChartClassifyName,ChartClassifyNameEn, ChartClassifyId }) {
|
|
|
- this.dialog_title = this.$t('StatisticAnalysis.ChartRelevance.edit_chart_classify')||"编辑图表分类";
|
|
|
+ this.classifyDiaType = 'edit'
|
|
|
+ let arr=[]
|
|
|
+ arr=this.getNodeParentData(node.parent,arr)
|
|
|
/* 编辑目录 */
|
|
|
this.classifyForm = {
|
|
|
- classify_name: this.currentLang==='en'?ChartClassifyNameEn:ChartClassifyName,
|
|
|
- classify_id: ChartClassifyId,
|
|
|
+ parentArr:arr,
|
|
|
+ level:node.level,
|
|
|
+ levelVal: this.currentLang==='en'?ChartClassifyNameEn:ChartClassifyName,
|
|
|
+ nodeId: ChartClassifyId,
|
|
|
};
|
|
|
this.classifyDia = true;
|
|
|
},
|
|
@@ -700,9 +844,14 @@ export default {
|
|
|
})
|
|
|
.then((res) => {
|
|
|
if (res.Ret !== 200) return;
|
|
|
-
|
|
|
this.chartInfo = res.Data.ChartInfo;
|
|
|
this.tableData = res.Data.EdbInfoList;
|
|
|
+ this.defaultShowNodes = res.Data.ClassifyLevels||[];
|
|
|
+ this.$nextTick(()=>{
|
|
|
+ setTimeout(() => {
|
|
|
+ this.$refs.treeRef.setCurrentKey(this.select_node);
|
|
|
+ }, 1200);
|
|
|
+ })
|
|
|
if(this.chartInfo.Source === 3) {
|
|
|
this.relevanceChartData = {
|
|
|
ChartInfo: res.Data.ChartInfo,
|
|
@@ -729,7 +878,25 @@ export default {
|
|
|
}
|
|
|
this.setDefaultChart([res.Data.DataResp]);
|
|
|
}
|
|
|
-
|
|
|
+ this.$nextTick(()=>{
|
|
|
+ const _node = this.$refs.treeRef.getNode(this.select_node)
|
|
|
+ this.dynamicNode = _node;
|
|
|
+ this.dynamicNode&&this.resetNodeStyle(this.dynamicNode)
|
|
|
+ setTimeout(() => {
|
|
|
+ let node = document.getElementById(`node${this.select_node}`)||{}
|
|
|
+ let parent = document.getElementsByClassName('tree-cont')[0];
|
|
|
+ //parent可视区间:[scrollTop,scrollTop+offsetHeight]
|
|
|
+ //node位置:node.offsetTop
|
|
|
+ const overTop = node.offsetTop+node.clientHeight+30<parent.scrollTop
|
|
|
+ const overBottom = node.offsetTop+node.clientHeight+30>parent.scrollTop+parent.offsetHeight
|
|
|
+ if(overTop){
|
|
|
+ parent.scrollTop = node.offsetTop-60
|
|
|
+ }
|
|
|
+ if(overBottom){
|
|
|
+ parent.scrollTop = node.offsetTop - parent.offsetHeight/2
|
|
|
+ }
|
|
|
+ },1500)
|
|
|
+ })
|
|
|
});
|
|
|
},
|
|
|
|