After Width: | Height: | Size: 6.1 KiB |
After Width: | Height: | Size: 9.7 KiB |
After Width: | Height: | Size: 35 KiB |
After Width: | Height: | Size: 9.1 KiB |
After Width: | Height: | Size: 8.2 KiB |
After Width: | Height: | Size: 9.1 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 24 KiB |
After Width: | Height: | Size: 538 B |
After Width: | Height: | Size: 13 KiB |
After Width: | Height: | Size: 20 KiB |
After Width: | Height: | Size: 536 B |
@ -0,0 +1,268 @@ |
|||
<template> |
|||
<div> |
|||
<div class="node-wrap" v-if="nodeConfig.laneLevel === 1"> |
|||
<div class="node-wrap-box"> |
|||
<div class="node-box-after"> |
|||
<div class="nodeBoxTop"> |
|||
<nameSplit :item="nodeConfig" areaName="organizationName" peopleName="name" /> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="branch-wrap"> |
|||
<div class="branch-box-wrap"> |
|||
<div class="branch-box"> |
|||
<div class="col-box" v-for="(item, index) in nodeConfig.children" :key="index"> |
|||
<div class="condition-node"> |
|||
<div class="condition-node-box"> |
|||
<div class="auto-judge"> |
|||
<div v-if="getOnerSixLevelFlag(item)"> |
|||
<div :class="[item.children && item.children.length > 0 ? 'wgdzbHover' : 'wgdzb']"> |
|||
<nameSplit :item="item" areaName="organizationName" peopleName="name" /> |
|||
</div> |
|||
<div v-if="item._children" style="text-align: center; cursor: pointer" @click="getChildrenData(item, index, nodeConfig.children)"> |
|||
<img style="width: 16px; height: 16px;margin-left: 50px;" v-if="item.children && item.children.length > 0" :src="require('@/assets/images/home/sh.png')" alt="" /> |
|||
<img style="width: 16px; height: 16px;margin-left: 50px;" v-else :src="require('@/assets/images/home/zk.png')" alt="" /> |
|||
</div> |
|||
</div> |
|||
<div v-if="item.level === 'building_chief'"> |
|||
<div :class="[item.children && item.children.length > 0 ? 'lydxzHover' : 'lydxz']"> |
|||
<nameSplit :item="item" areaName="organizationName" peopleName="name" /> |
|||
</div> |
|||
<div v-if="item._children" style="text-align: center; cursor: pointer" @click="getChildrenData(item, index, nodeConfig.children)"> |
|||
<img style="width: 16px; height: 16px;margin-left: 50px;" v-if="item.children && item.children.length > 0" :src="require('@/assets/images/home/sh.png')" alt="" /> |
|||
<img style="width: 16px; height: 16px;margin-left: 50px;" v-else :src="require('@/assets/images/home/zk.png')" alt="" /> |
|||
</div> |
|||
</div> |
|||
<div v-if="item.level === 'unit_chief'"> |
|||
<div @click="gotoPersonnel(item)" :class="[item.categoryWarn === 'red' ? 'dyzxhRed' : item.categoryWarn === 'yellow' ? 'dyzxhYellow' : item.categoryWarn === 'green' ? 'dyzxhGreen' : '', item.children && item.children.length > 0 ? 'dyzxhHover' : 'dyzxh']" :title="item.organizationName"> |
|||
<!-- {{ spliceNameFun(item.organizationName, 3) }} --> |
|||
{{ item.organizationName }} |
|||
</div> |
|||
<div v-if="item._children" style="text-align: center; cursor: pointer" @click="getChildrenData(item, index, nodeConfig.children)"> |
|||
<img style="width: 16px; height: 16px;margin-left: 50px;" v-if="item.children && item.children.length > 0" :src="require('@/assets/images/home/sh.png')" alt="" /> |
|||
<img style="width: 16px; height: 16px;margin-left: 50px;" v-else :src="require('@/assets/images/home/zk.png')" alt="" /> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<nodeWrapGrid v-if="item.children" :nodeConfig.sync="item"></nodeWrapGrid> |
|||
<template v-if="index == 0"> |
|||
<div class="top-left-cover-line"></div> |
|||
</template> |
|||
<template v-if="index == nodeConfig.children.length - 1"> |
|||
<div class="top-right-cover-line"></div> |
|||
</template> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<!-- <nodeWrapGrid v-if="nodeConfig.childNode" :nodeConfig.sync="nodeConfig.childNode"></nodeWrapGrid> --> |
|||
</div> |
|||
</template> |
|||
<script> |
|||
export default { |
|||
props: ["nodeConfig"], |
|||
data() { |
|||
return { |
|||
homeTypeArr: [], |
|||
sixLevelArr: ["province", "city", "district", "street", "community", "grid_manager"], |
|||
}; |
|||
}, |
|||
mounted() {}, |
|||
computed: {}, |
|||
watch: {}, |
|||
methods: { |
|||
getAllName(item) { |
|||
return item; |
|||
}, |
|||
|
|||
getItemNameArr(str) { |
|||
return str.split(",").slice(0, 2); |
|||
}, |
|||
|
|||
spliceNameFun(row, num) { |
|||
if (row && row.length > num) { |
|||
return row.substring(0, num) + "..."; |
|||
} |
|||
return row; |
|||
}, |
|||
|
|||
getOnerSixLevelFlag(item) { |
|||
return this.sixLevelArr.includes(item.level); |
|||
}, |
|||
|
|||
findParentParentId(nodeConfig, pid) { |
|||
let parentParentId = ""; |
|||
if (nodeConfig.id === pid) { |
|||
return nodeConfig.pid; |
|||
} else { |
|||
if (nodeConfig.children && nodeConfig.children.length > 0) { |
|||
for (let i = 0; i < nodeConfig.children.length; i++) { |
|||
parentParentId = this.findParentParentId(nodeConfig.children[i], pid); |
|||
if (parentParentId) { |
|||
return parentParentId; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
}, |
|||
getChildrenData(item, idx, arr) { |
|||
arr.forEach((element, index) => { |
|||
if (index === idx) { |
|||
if (element.children) { |
|||
element._children = element.children; |
|||
element.children = null; |
|||
} else { |
|||
element.children = element._children; |
|||
} |
|||
} else { |
|||
element.children = null; |
|||
} |
|||
}); |
|||
}, |
|||
gotoPersonnel(item) { |
|||
const grandPid = this.findParentParentId(this.nodeConfig, item.pid); |
|||
const name = item.organizationName ? item.organizationName : "四号楼二单元302"; |
|||
this.$router.push(`/organizational/microgrid/${item.id}/${grandPid}/${name}`); |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
<style scoped lang="scss"> |
|||
@import "~@/assets/css/workflow.scss"; |
|||
@mixin spanLevel { |
|||
font-size: 14px; |
|||
color: #fff; |
|||
word-break: break-all; |
|||
} |
|||
@mixin normalLevel { |
|||
display: flex; |
|||
align-items: center; |
|||
justify-content: space-around; |
|||
} |
|||
|
|||
@mixin lastLevel { |
|||
@include spanLevel; |
|||
@include normalLevel; |
|||
height: 137px; |
|||
width: 30px; |
|||
margin-top: -12px; |
|||
background-size: 100%; |
|||
cursor: pointer; |
|||
writing-mode: tb-rl; |
|||
text-orientation: upright; |
|||
} |
|||
|
|||
.name_more { |
|||
span { |
|||
&:hover { |
|||
font-weight: bold; |
|||
cursor: pointer; |
|||
} |
|||
} |
|||
} |
|||
.node-box-after { |
|||
.nodeBoxTop { |
|||
font-size: 14px; |
|||
cursor: pointer; |
|||
position: relative; |
|||
color: #fff; |
|||
display: inline-block; |
|||
width: 168px; |
|||
height: 164px; |
|||
padding-top: 10px; |
|||
text-align: center; |
|||
background-image: url(~@/assets/images/home/firstLevel.png); |
|||
background-size: 100%; |
|||
div:nth-child(2) { |
|||
cursor: pointer; |
|||
} |
|||
} |
|||
} |
|||
.auto-judge { |
|||
.wgdzb { |
|||
@include spanLevel; |
|||
min-width: 120px; |
|||
height: 126px; |
|||
text-align: center; |
|||
padding-top: 9px; |
|||
background-image: url(~@/assets/images/home/zbbg.png); |
|||
background-repeat: no-repeat; |
|||
background-position: center; |
|||
// background-size: 100%; |
|||
} |
|||
.wgdzbHover { |
|||
@include spanLevel; |
|||
min-width: 120px; |
|||
height: 126px; |
|||
text-align: center; |
|||
padding-top: 9px; |
|||
background-image: url(~@/assets/images/home/zbbgClick.png); |
|||
// background-size: 100%; |
|||
background-repeat: no-repeat; |
|||
background-position: center; |
|||
} |
|||
.lydxz { |
|||
@include spanLevel; |
|||
// @include normalLevel; |
|||
text-align: center; |
|||
min-width: 120px; |
|||
height: 126px; |
|||
padding-top: 25px; |
|||
background-image: url(~@/assets/images/home/lydxzTree.png); |
|||
background-repeat: no-repeat; |
|||
background-position: center; |
|||
} |
|||
.lydxzHover { |
|||
@include spanLevel; |
|||
// @include normalLevel; |
|||
text-align: center; |
|||
min-width: 120px; |
|||
height: 126px; |
|||
padding-top: 25px; |
|||
background-image: url(~@/assets/images/home/lydxzClick.png); |
|||
background-repeat: no-repeat; |
|||
background-position: center; |
|||
} |
|||
.dyzxh { |
|||
@include lastLevel; |
|||
background-image: url(~@/assets/images/home/dyzxhTree.png); |
|||
background-repeat: no-repeat; |
|||
} |
|||
.dyzxhHover { |
|||
@include lastLevel; |
|||
background-image: url(~@/assets/images/home/dyzxhClick.png); |
|||
background-repeat: no-repeat; |
|||
} |
|||
|
|||
.dyzxhGreen { |
|||
@include lastLevel; |
|||
background-image: url(~@/assets/images/home/gridGreen.png); |
|||
background-repeat: no-repeat; |
|||
} |
|||
.dyzxhRed { |
|||
@include lastLevel; |
|||
background-image: url(~@/assets/images/home/gridRed.png); |
|||
background-repeat: no-repeat; |
|||
} |
|||
.dyzxhYellow { |
|||
@include lastLevel; |
|||
background-image: url(~@/assets/images/home/gridYellow.png); |
|||
background-repeat: no-repeat; |
|||
} |
|||
.lxjt { |
|||
@include spanLevel; |
|||
display: flex; |
|||
align-items: center; |
|||
justify-content: space-around; |
|||
height: 137px; |
|||
width: 30px; |
|||
writing-mode: tb-rl; |
|||
margin-top: -12px; |
|||
background-image: url(~@/assets/images/home/dyzxhTree.png); |
|||
background-repeat: no-repeat; |
|||
} |
|||
} |
|||
</style> |
@ -0,0 +1,104 @@ |
|||
<template> |
|||
<div class="node-com"> |
|||
<div v-if="!flag" class="nodeTitle" :title="getAllName(item[areaName])">{{ spliceNameFun(item[areaName], 7) }}</div> |
|||
<div class="name_more peoName" v-if="item[peopleName] && !item[peopleName].includes(',')" @click="gotoPersonnel(item.resiId)" :title="getAllName(item[peopleName])">{{ spliceNameFun(item[peopleName], 12) }}</div> |
|||
<div class="name_more" v-if="item[peopleName] && item[peopleName].includes(',')"> |
|||
<span v-for="(i, k) in getItemNameArr(item[peopleName])" :key="i" @click="gotoPersonnel(item.resiId.split(',')[k])" :title="getAllName(i)">{{ spliceNameFun(i, 12) }}{{ k === getItemNameArr(item[peopleName]).length - 1 ? "" : "," }}</span> |
|||
<!-- 多个人员展示 --> |
|||
<!-- <popTips :item="item" :pageName="pageName" /> --> |
|||
</div> |
|||
<div v-if="item.partyOrgLevel < 9" class="peoPosition peoName">({{ getPeopositionMap(item.partyOrgLevel) }})</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
export default { |
|||
name: "NameSplit", |
|||
props: { |
|||
item: { |
|||
type: Object, |
|||
default: () => {}, |
|||
}, |
|||
areaName: { |
|||
type: String, |
|||
default: "partyOrgName", |
|||
}, |
|||
peopleName: { |
|||
type: String, |
|||
default: "principalName", |
|||
}, |
|||
flag: { |
|||
type: Boolean, |
|||
default: false, |
|||
}, |
|||
pageName: { |
|||
type: String, |
|||
default: "", |
|||
}, |
|||
}, |
|||
data() { |
|||
return {}; |
|||
}, |
|||
methods: { |
|||
getAllName(item) { |
|||
return item; |
|||
}, |
|||
|
|||
getItemNameArr(str) { |
|||
return str.split(",").slice(0, 1); |
|||
}, |
|||
|
|||
spliceNameFun(row, num) { |
|||
return row.substring(0, num); |
|||
}, |
|||
gotoPersonnel(id) { |
|||
if (id) { |
|||
this.$router.push({ path: `/organizational/orgPersonnel/${this.pageName}`, query: { user_id: id } }); |
|||
} else { |
|||
this.$message.error("该人员暂无居民信息!"); |
|||
} |
|||
}, |
|||
getPeopositionMap(type) { |
|||
const positionMap = new Map([ |
|||
[1, "省委"], |
|||
[2, "市委"], |
|||
[3, "区委书记"], |
|||
[4, "党工委书记"], |
|||
[5, "党委书记"], |
|||
[6, "党总支书记"], |
|||
[7, "支部书记"], |
|||
[8, "组长"], |
|||
]); |
|||
return positionMap.get(type); |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style scope lang="scss"> |
|||
.node-com { |
|||
// padding: 0 12px; |
|||
.nodeTitle { |
|||
font-size: 16px; |
|||
font-family: PingFang SC; |
|||
font-weight: 500; |
|||
color: #ffffff; |
|||
} |
|||
.peoName { |
|||
font-size: 14px; |
|||
font-family: PingFang SC; |
|||
font-weight: 500; |
|||
color: #ffffff; |
|||
opacity: 0.8; |
|||
} |
|||
.name_more { |
|||
cursor: pointer; |
|||
span { |
|||
&:hover { |
|||
font-weight: bold; |
|||
cursor: pointer; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
</style> |