Browse Source

还原代码

V1.0
SongZhen 2 years ago
parent
commit
a4c6307bd2
  1. 1
      package.json
  2. 1354
      src/assets/css/workflow.scss
  3. BIN
      src/assets/images/home/back.png
  4. BIN
      src/assets/images/home/bg.png
  5. BIN
      src/assets/images/home/choose.png
  6. BIN
      src/assets/images/home/chooseMain.png
  7. BIN
      src/assets/images/home/cjr.png
  8. BIN
      src/assets/images/home/dwbg.png
  9. BIN
      src/assets/images/home/dyzxh.png
  10. BIN
      src/assets/images/home/dyzxhTree.png
  11. BIN
      src/assets/images/home/dzb.png
  12. BIN
      src/assets/images/home/firstLevel.png
  13. BIN
      src/assets/images/home/jr.png
  14. BIN
      src/assets/images/home/kclr.png
  15. BIN
      src/assets/images/home/lxjt.png
  16. BIN
      src/assets/images/home/lydxz.png
  17. BIN
      src/assets/images/home/lydxzTree.png
  18. BIN
      src/assets/images/home/noChooseMain.png
  19. BIN
      src/assets/images/home/top.png
  20. BIN
      src/assets/images/home/zbbg.png
  21. 120
      src/assets/scss/dataBoardMain.scss
  22. 237
      src/components/Tree/addNode.vue
  23. 196
      src/components/Tree/nodeWrap.vue
  24. 29
      src/main.js
  25. 119
      src/views/dataBoard/organizational/components/tree.vue
  26. 559
      src/views/dataBoard/organizational/index.vue
  27. 55
      src/views/dataBoardMain/main-navbar.vue
  28. 267
      src/views/dataBoardMain/main.vue

1
package.json

@ -41,6 +41,7 @@
"jsencrypt": "^3.0.3",
"lodash": "^4.17.15",
"mint-ui": "^2.2.13",
"moment": "^2.29.4",
"node-sass": "^4.12.0",
"ol": "7.2.2",
"portfinder": "^1.0.21",

1354
src/assets/css/workflow.scss

File diff suppressed because it is too large

BIN
src/assets/images/home/back.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 560 B

BIN
src/assets/images/home/bg.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

BIN
src/assets/images/home/choose.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

BIN
src/assets/images/home/chooseMain.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

BIN
src/assets/images/home/cjr.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 704 B

BIN
src/assets/images/home/dwbg.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

BIN
src/assets/images/home/dyzxh.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

BIN
src/assets/images/home/dyzxhTree.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

BIN
src/assets/images/home/dzb.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

BIN
src/assets/images/home/firstLevel.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

BIN
src/assets/images/home/jr.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 883 B

BIN
src/assets/images/home/kclr.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 808 B

BIN
src/assets/images/home/lxjt.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

BIN
src/assets/images/home/lydxz.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

BIN
src/assets/images/home/lydxzTree.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
src/assets/images/home/noChooseMain.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

BIN
src/assets/images/home/top.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

BIN
src/assets/images/home/zbbg.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

120
src/assets/scss/dataBoardMain.scss

@ -7,24 +7,31 @@
.g-pg {
position: relative;
background-image: url(../images/home/bg.png);
background-repeat: no-repeat;
background-size: 100% 100%;
}
.i-corner {
position: absolute;
z-index: 0;
width: 121px;
&.z-left-top {
top: 15px;
left: 15px;
}
&.z-left-bottom {
bottom: 15px;
left: 15px;
}
&.z-right-top {
top: 15px;
right: 15px;
}
&.z-right-bottom {
bottom: 15px;
right: 15px;
@ -36,22 +43,39 @@
z-index: 1;
width: 100%;
height: 101px;
background-image: url(../images/shuju/main/top-bg.png);
background-image: url(../images/home/top.png);
background-repeat: no-repeat;
background-position: top center;
background-size: 100%;
.back {
position: absolute;
left: 21px;
right: 0;
top: 0;
line-height: 70px;
img {
width: 21px;
}
}
.title {
position: absolute;
left: 0;
left: 90px;
right: 0;
top: 0;
margin: 0 auto;
// margin: 0 auto;
// text-align: center;
line-height: 70px;
text-align: center;
font-size: 32px;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #ffffff;
font-family: PingFang SC;
font-weight: bold;
color: #FFFFFF;
font-size: 34px;
// text-shadow: 0px 4px 3px rgba(18, 27, 70, 0.51);
background: linear-gradient(0deg, #8FD4FF 0%, #FFFFFF 64.0380859375%);
background-clip: text;
-webkit-text-fill-color: transparent;
}
.btn-back {
@ -70,18 +94,22 @@
width: 16px;
margin-right: 5px;
}
.z-default {
display: block;
}
.z-on {
display: none;
}
&:hover {
color: #fff;
.z-default {
display: none;
}
.z-on {
display: block;
}
@ -90,16 +118,18 @@
.nav-list {
position: absolute;
top: 40px;
left: 120px;
top: 60px;
left: 850px;
display: flex;
width: 500px;
// width: 500px;
&.z-right {
left: auto;
right: 120px;
.nav-item {
background-image: url(../images/shuju/main/nav-right.png);
&.z-on {
&::before {
background-image: url(../images/shuju/main/nav-right-on.png);
@ -110,45 +140,78 @@
.nav-item {
position: relative;
margin-right: 95px;
width: 120px;
height: 40px;
line-height: 40px;
font-size: 16px;
font-size: 18px;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
background-image: url(../images/shuju/main/nav-left.png);
background-size: 100%;
// background-image: url(../images/shuju/main/nav-left.png);
// background-size: 100%;
text-align: center;
cursor: pointer;
color: rgba(#fff, 0.85);
color: #41A5F2;
span {
position: relative;
z-index: 1;
}
&:hover {
color: #fff;
}
// &:hover {
// color: #fff;
// }
&.z-on {
background-image: none;
&::before {
color: #86F3FF;
font-size: 20px;
&::after {
position: absolute;
z-index: -1;
content: "";
display: block;
top: -2px;
left: -5px;
width: 132px;
height: 47px;
background-image: url(../images/shuju/main/nav-left-on.png);
bottom: -2px;
left: -50px;
width: 226px;
height: 20px;
background-image: url(../images/home/choose.png);
background-size: 100%;
}
}
}
}
.date {
position: absolute;
right: 20px;
top: 30px;
color: #91D5FF;
text-align: center;
.dateFlex {
display: flex;
align-items: center;
justify-content: center;
.dateFlex_mw {
.date-month {
font-size: 14px;
}
.date-week {
font-size: 16px;
}
}
.date-time {
font-size: 34px;
margin-left: 11px;
}
}
}
.msg {
position: absolute;
display: flex;
@ -160,21 +223,26 @@
font-weight: 500;
color: #ffffff;
line-height: 22px;
.weather {
display: flex;
align-items: center;
img {
position: relative;
width: 20px;
}
div {
margin-left: 3px;
}
}
.date {
margin-left: 24px;
display: flex;
align-items: center;
.date-div {
margin: 0 10px;
height: 22px;
@ -187,5 +255,5 @@
}
.g-cnt {
padding: 15px;
}
padding: 24px;
}

237
src/components/Tree/addNode.vue

@ -0,0 +1,237 @@
<template>
<div class="add-node-btn-box">
<div class="add-node-btn">
<el-popover placement="right-start" v-model="visible">
<div class="add-node-popover-body">
<a class="add-node-popover-item approver" @click="addType(1)">
<div class="item-wrapper">
<span class="iconfont"></span>
</div>
<p>审批人</p>
</a>
<a class="add-node-popover-item notifier" @click="addType(2)">
<div class="item-wrapper">
<span class="iconfont"></span>
</div>
<p>抄送人</p>
</a>
<a class="add-node-popover-item condition" @click="addType(4)">
<div class="item-wrapper">
<span class="iconfont"></span>
</div>
<p>条件分支</p>
</a>
</div>
<!-- <button class="btn" type="button" slot="reference">
<span class="iconfont"></span>
</button> -->
</el-popover>
</div>
</div>
</template>
<script>
export default {
props: ["childNodeP"],
data() {
return {
visible: false,
};
},
methods: {
addType(type) {
this.visible = false;
if (type != 4) {
var data;
if (type == 1) {
data = {
nodeName: "审核人",
error: true,
type: 1,
settype: 1,
selectMode: 0,
selectRange: 0,
directorLevel: 1,
examineMode: 1,
noHanderAction: 1,
examineEndDirectorLevel: 0,
childNode: this.childNodeP,
nodeUserList: [],
};
} else if (type == 2) {
data = {
nodeName: "抄送人",
type: 2,
ccSelfSelectFlag: 1,
childNode: this.childNodeP,
nodeUserList: [],
};
}
this.$emit("update:childNodeP", data);
} else {
this.$emit("update:childNodeP", {
nodeName: "路由",
type: 4,
childNode: null,
conditionNodes: [
{
nodeName: "条件1",
error: true,
type: 3,
priorityLevel: 1,
conditionList: [],
nodeUserList: [],
childNode: this.childNodeP,
},
{
nodeName: "条件2",
type: 3,
priorityLevel: 2,
conditionList: [],
nodeUserList: [],
childNode: null,
},
],
});
}
},
},
};
</script>
<style scoped lang="scss">
.add-node-btn-box {
width: 240px;
display: -webkit-inline-box;
display: -ms-inline-flexbox;
display: inline-flex;
-ms-flex-negative: 0;
flex-shrink: 0;
-webkit-box-flex: 1;
-ms-flex-positive: 1;
position: relative;
&:before {
content: "";
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
margin: auto;
width: 1px;
height: 100%;
background-color: #2f87ff;
}
.add-node-btn {
user-select: none;
width: 240px;
padding: 20px 0 32px;
display: flex;
-webkit-box-pack: center;
justify-content: center;
flex-shrink: 0;
-webkit-box-flex: 1;
flex-grow: 1;
.btn {
outline: none;
box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.1);
width: 30px;
height: 30px;
background: #3296fa;
border-radius: 50%;
position: relative;
border: none;
line-height: 30px;
-webkit-transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
.iconfont {
color: #fff;
font-size: 16px;
}
&:hover {
transform: scale(1.3);
box-shadow: 0 13px 27px 0 rgba(0, 0, 0, 0.1);
}
&:active {
transform: none;
background: #1e83e9;
box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.1);
}
}
}
}
</style>
<style lang="scss">
.add-node-popover-body {
display: flex;
.add-node-popover-item {
margin-right: 10px;
cursor: pointer;
text-align: center;
flex: 1;
color: #191f25 !important;
.item-wrapper {
user-select: none;
display: inline-block;
width: 80px;
height: 80px;
margin-bottom: 5px;
background: #fff;
border: 1px solid #e2e2e2;
border-radius: 50%;
transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
.iconfont {
font-size: 35px;
line-height: 80px;
}
}
&.approver {
.item-wrapper {
color: #ff943e;
}
}
&.notifier {
.item-wrapper {
color: #3296fa;
}
}
&.condition {
.item-wrapper {
color: #15bc83;
}
}
&:hover {
.item-wrapper {
background: #3296fa;
box-shadow: 0 10px 20px 0 rgba(50, 150, 250, 0.4);
}
.iconfont {
color: #fff;
}
}
&:active {
.item-wrapper {
box-shadow: none;
background: #eaeaea;
}
.iconfont {
color: inherit;
}
}
}
}
</style>

196
src/components/Tree/nodeWrap.vue

@ -0,0 +1,196 @@
<template>
<div>
<div class="node-wrap" v-if="nodeConfig.key === '1'">
<div class="node-wrap-box">
<div class="node-box-after">
<span>{{ nodeConfig.name }}</span>
</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="item.title === '网格党支部'">
<span class="wgdzb">
{{ item.name }}
</span>
</div>
<div v-if="item.title === '楼院党小组'">
<span class="lydxz">
{{ item.name }}
</span>
</div>
<div v-if="item.title === '党员中心户'">
<span class="dyzxh">
{{ item.name }}
</span>
</div>
<div class="lxjtWrap" v-if="item.title === '联系家庭'">
<el-popover popper-class="popperClass" placement="right" trigger="click">
<!-- <el-button>click 激活</el-button> -->
<div class="popperList">
<div style="margin-bottom: 13px">家庭类别</div>
<div class="listMsg">
<img src="@/assets/images/home/jr.png" alt="" />
<span>退役军人</span>
</div>
<div class="listMsg">
<img src="@/assets/images/home/cjr.png" alt="" />
<span>残疾人</span>
</div>
<div class="listMsg">
<img src="@/assets/images/home/kclr.png" alt="" />
<span>空巢老人</span>
</div>
</div>
<span slot="reference" class="lxjt">
{{ item.name }}
<img src="@/assets/images/home/cjr.png" alt="" />
</span>
</el-popover>
</div>
</div>
</div>
</div>
<nodeWrap v-if="item.children" :nodeConfig.sync="item"></nodeWrap>
<template v-if="index == 0">
<div class="top-left-cover-line"></div>
<!-- <div class="bottom-left-cover-line"></div> -->
</template>
<template v-if="index == nodeConfig.children.length - 1">
<div class="top-right-cover-line"></div>
<!-- <div class="bottom-right-cover-line"></div> -->
</template>
</div>
</div>
<!-- <addNode :childNodeP.sync="nodeConfig.childNode"></addNode> -->
</div>
</div>
<nodeWrap v-if="nodeConfig.childNode" :nodeConfig.sync="nodeConfig.childNode"></nodeWrap>
</div>
</template>
<script>
// import { mapState, mapMutations } from "vuex";
export default {
props: ["nodeConfig"],
data() {
return {};
},
mounted() {},
computed: {},
watch: {},
methods: {
},
};
</script>
<style scoped lang="scss">
.node-box-after {
span {
font-size: 14px;
position: relative;
color: #fff;
display: inline-block;
width: 168px;
height: 164px;
&::after {
position: absolute;
content: "";
display: block;
top: -7px;
left: -16px;
width: 168px;
height: 164px;
background-image: url(~@/assets/images/home/firstLevel.png);
background-size: 100%;
}
}
}
.auto-judge {
.wgdzb {
font-size: 14px;
position: relative;
color: #fff;
display: inline-block;
width: 132px;
height: 96px;
&::after {
position: absolute;
content: "";
display: block;
top: -7px;
left: 0;
width: 132px;
height: 96px;
background-image: url(~@/assets/images/home/zbbg.png);
background-size: 100%;
}
}
.lydxz {
font-size: 14px;
position: relative;
color: #fff;
display: inline-block;
width: 132px;
height: 50px;
&::after {
position: absolute;
content: "";
display: block;
top: -2px;
left: -40px;
width: 216px;
height: 50px;
background-image: url(~@/assets/images/home/lydxzTree.png);
background-size: 100%;
}
}
.dyzxh {
font-size: 14px;
position: relative;
color: #fff;
display: inline-block;
height: 118px;
width: 5px;
&::after {
position: absolute;
content: "";
display: block;
top: -19px;
left: -8px;
width: 30px;
height: 118px;
background-image: url(~@/assets/images/home/dyzxhTree.png);
background-size: 100%;
}
}
.lxjt {
font-size: 14px;
cursor: pointer;
position: relative;
color: #fff;
display: inline-block;
height: 118px;
img {
position: absolute;
bottom: 26px;
left: -2px;
}
&::after {
position: absolute;
content: "";
display: block;
top: -19px;
left: -8px;
width: 30px;
height: 118px;
background-image: url(~@/assets/images/home/dyzxhTree.png);
background-size: 100%;
}
}
}
</style>

29
src/main.js

@ -4,8 +4,8 @@
* @LastEditors: mk 2403457699@qq.com
* @LastEditTime: 2023-08-10 16:49:19
* @Description: 全局挂载提示信息,避免同时出现多条信息
*
*
*
*
*/
import Vue from "vue";
import Element from "element-ui";
@ -16,7 +16,7 @@ import router from "@/router";
import "@/icons";
import "@/element-ui/theme/index.css";
import "@/assets/scss/aui.scss";
import {message} from "@/utils/message.js";
import { message } from "@/utils/message.js";
//按钮
@ -32,7 +32,13 @@ import store from "@/js/store";
//系统工具
import util from "@js/util";
// import Cookies from "js-cookie";
import Moment from "moment";
import getQueryPara from "dai-js/modules/getQueryPara";
import NodeWrap from "@/components/Tree/nodeWrap.vue";
import AddNode from "@/components/Tree/addNode.vue";
//按钮
Vue.component("nodeWrap", NodeWrap);
Vue.component("addNode", AddNode);
// 兼容token传参登录
if (getQueryPara("token")) {
@ -51,27 +57,24 @@ window.app = Object.assign(
);
Vue.config.productionTip = false;
Moment.locale("zh-cn");
Vue.use(Element, {
size: "default",
i18n: (key, value) => i18n.t(key, value),
});
Vue.prototype.$message = message
Vue.prototype.$message = message;
// 弹窗底部滚动问题 弹窗需配合v-if使用
Vue.directive("fixed", {
inserted() {
let scrollTop =
document.body.scrollTop || document.documentElement.scrollTop;
document.body.style.cssText +=
"position:fixed;width:100%;top:-" + scrollTop + "px;";
let scrollTop = document.body.scrollTop || document.documentElement.scrollTop;
document.body.style.cssText += "position:fixed;width:100%;top:-" + scrollTop + "px;";
},
unbind() {
let body = document.body;
body.style.position = "";
let top = body.style.top;
document.body.scrollTop = document.documentElement.scrollTop =
-parseInt(top);
document.body.scrollTop = document.documentElement.scrollTop = -parseInt(top);
body.style.top = "";
},
});
@ -86,12 +89,12 @@ Vue.prototype.$getElUploadHeaders = () => ({
// Vue.prototype.$getDictLabel = getDictLabel
//事件总线
Vue.prototype.$EventBus = new Vue()
Vue.prototype.$EventBus = new Vue();
// 保存整站vuex本地储存初始状态
window.SITE_CONFIG["storeState"] = cloneDeep(store.state);
Vue.prototype.tableHeaderStyle = { background: 'linear-gradient(0deg, #005EB3 0%, #0083F0 100%)', color: '#FFFFFF', padding: '6px 0px' };
Vue.prototype.tableHeaderStyle = { background: "linear-gradient(0deg, #005EB3 0%, #0083F0 100%)", color: "#FFFFFF", padding: "6px 0px" };
new Vue({
i18n,

119
src/views/dataBoard/organizational/components/tree.vue

@ -0,0 +1,119 @@
<template>
<div class="moreLevel">
<div class="flexDiv" v-for="(item, index) in cardList" :key="item.key">
<div class="overlay">
<div class="item">
<span>{{ item.name }}</span>
</div>
</div>
<template v-if="index == 0">
<div class="top-left-cover-line"></div>
</template>
<template v-if="index == cardList.length - 1">
<div class="top-right-cover-line"></div>
</template>
</div>
</div>
</template>
<script>
export default {
name: "tree",
props: {
cardList: {
type: Array,
default: () => [],
},
},
data() {
return {};
},
};
</script>
<style lang="scss">
.moreLevel {
width: 100%;
max-height: 164px;
border-top: 1px solid #2f87ff;
display: flex;
align-items: center;
.flexDiv {
flex: 1;
position: relative;
.overlay {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
.item {
position: relative;
// width: 132px;
height: 96px;
margin-top: 27px;
.top-left-cover-line {
position: absolute;
height: 8px;
width: 50%;
background-color: red;
top: -4px;
}
span {
position: relative;
color: #fff;
display: inline-block;
width: 132px;
&::after {
position: absolute;
// z-index: -1;
content: "";
display: block;
top: -12px;
left: -5px;
width: 132px;
height: 96px;
background-image: url(~@/assets/images/home/zbbg.png);
background-size: 100%;
}
}
&::before {
position: absolute;
content: "";
display: block;
top: -27px;
left: 60px;
width: 1px;
height: 15px;
background: #2f87ff;
}
&::after {
position: absolute;
content: "";
display: block;
bottom: -30px;
left: 60px;
width: 1px;
height: 40px;
background: #2f87ff;
}
}
}
.top-left-cover-line {
position: absolute;
top: -1px;
left: -6px;
width: 50%;
height: 1px;
background: #00143d;
}
.top-right-cover-line {
position: absolute;
top: -1px;
right: -7px;
width: 52%;
height: 1px;
background: #00143d;
}
}
}
</style>

559
src/views/dataBoard/organizational/index.vue

@ -0,0 +1,559 @@
<template>
<div class="organWrap">
<div class="top-nav">
<div class="top-nav-list">
<div v-for="item in navList" :key="item.key" :class="[item.ifActive ? 'top-nav-itemAC' : 'top-nav-item']" @click="chooseNav(item)">{{ item.name }}</div>
</div>
</div>
<!-- <div style="width: 100%; height: 100%;position: relative;">
<div style="width: 100px; height: 100px; background-color: aqua; color: #fff;" v-drag>222</div>
</div> -->
<div class="content" v-on:wheel="zoomSize" :style="'transform: scale(' + nowVal / 100 + ');'">
<div class="flowLevel">
<div>社区党委</div>
</div>
<div class="flowLevel-2"><div>网格党支部</div></div>
<div class="flowLevel-3"><div>楼院党小组</div></div>
<div class="flowLevel-4"><div>党员中心户</div></div>
<div class="flowLevel-5"><div>联系家庭</div></div>
<el-row>
<el-col :span="4">
<div class="contentList"></div>
</el-col>
<el-col :span="20">
<div class="dingflow-design">
<nodeWrap :nodeConfig.sync="nodeConfig"></nodeWrap>
</div>
</el-col>
</el-row>
</div>
</div>
</template>
<script>
// import Tree from "./components/tree.vue";
export default {
name: "organizational",
// components: {
// Tree,
// },
data() {
return {
navList: [
{
name: "党委组织架构",
key: "1",
ifActive: true,
},
{
name: "居委组织架构",
key: "2",
ifActive: false,
},
{
name: "网格架构",
key: "3",
ifActive: false,
},
],
cardList: [
{
title: "社区党委",
key: "1",
name: "南昌路社区党委 (党委书记:解书记)",
children: [
{
title: "网格党支部",
name: "第一网格党支部(支部书记:王艺发)",
key: "1",
children: [
{
title: "楼院党小组",
name: "第一楼院党小组 (组长:韩文国)",
key: "1",
},
{
title: "楼院党小组",
name: "第二楼院党小组 (组长:褚丽兰)",
key: "2",
},
],
},
{
title: "网格党支部",
name: "第二网格党支部 (支部书记:尤芬紫)",
key: "2",
children: [
{
title: "楼院党小组",
name: "第一楼院党小组 (组长:韩文国)",
key: "1",
},
{
title: "楼院党小组",
name: "第二楼院党小组 (组长:褚丽兰)",
key: "2",
},
],
},
{
title: "网格党支部",
name: "第三网格党支部 (支部书记:凤桥强)",
key: "3",
children: [
{
title: "楼院党小组",
name: "第一楼院党小组 (组长:韩文国)",
key: "1",
},
{
title: "楼院党小组",
name: "第二楼院党小组 (组长:褚丽兰)",
key: "2",
},
{
title: "楼院党小组",
name: "第三楼院党小组 (组长:王丽丽)",
key: "3",
},
],
},
],
},
],
nowVal: 100,
nodeConfig: {
title: "社区党委",
name: "南昌路社区党委(党委书记:解书记)",
key: "1",
children: [
{
title: "网格党支部",
name: "第一网格党支部 (支部书记:王艺发)",
type: 2,
children: [
{
title: "楼院党小组",
type: 3,
name: "第一楼院党小组 (组长:韩文国)",
children: [
{
title: "党员中心户",
type: 4,
name: "周游",
},
{
title: "党员中心户",
type: 4,
name: "王阳明",
},
{
title: "党员中心户",
type: 4,
name: "刘艳萍",
},
{
title: "党员中心户",
type: 4,
name: "谢苗苗",
},
{
title: "党员中心户",
type: 4,
name: "杨军",
},
],
},
{
title: "楼院党小组",
type: 3,
name: "第二楼院党小组 (组长:褚丽兰)",
children: [
{
title: "党员中心户",
type: 4,
name: "周游",
},
{
title: "党员中心户",
type: 4,
name: "王阳明",
},
{
title: "党员中心户",
type: 4,
name: "刘艳萍",
},
{
title: "党员中心户",
type: 4,
name: "谢苗苗",
},
{
title: "党员中心户",
type: 4,
name: "杨军",
},
],
},
],
},
{
title: "网格党支部",
name: "第二网格党支部 (支部书记:尤芬紫)",
type: 3,
children: [
{
title: "楼院党小组",
type: 3,
name: "第一楼院党小组 (组长:韩文国)",
children: [
{
title: "党员中心户",
type: 4,
name: "周游",
},
{
title: "党员中心户",
type: 4,
name: "王阳明",
children: [
{
title: "联系家庭",
type: 5,
name: "王宇",
},
{
title: "联系家庭",
type: 5,
name: "刘冰冰",
},
{
title: "联系家庭",
type: 5,
name: "杨飞宇",
},
{
title: "联系家庭",
type: 5,
name: "齐天",
},
],
},
{
title: "党员中心户",
type: 4,
name: "刘艳萍",
},
{
title: "党员中心户",
type: 4,
name: "谢苗苗",
},
],
},
{
title: "楼院党小组",
type: 3,
name: "第二楼院党小组 (组长:褚丽兰)",
children: [
{
title: "党员中心户",
type: 4,
name: "周游",
},
{
title: "党员中心户",
type: 4,
name: "王阳明",
},
{
title: "党员中心户",
type: 4,
name: "刘艳萍",
},
{
title: "党员中心户",
type: 4,
name: "谢苗苗",
},
],
},
],
},
{
title: "网格党支部",
name: "第三网格党支部 (支部书记:凤桥强)",
type: 3,
children: [
{
title: "楼院党小组",
type: 3,
name: "第一楼院党小组 (组长:韩文国)",
children: [
{
title: "党员中心户",
type: 4,
name: "周游",
},
{
title: "党员中心户",
type: 4,
name: "王阳明",
},
{
title: "党员中心户",
type: 4,
name: "刘艳萍",
},
{
title: "党员中心户",
type: 4,
name: "谢苗苗",
},
{
title: "党员中心户",
type: 4,
name: "杨军",
},
],
},
{
title: "楼院党小组",
type: 3,
name: "第二楼院党小组 (组长:褚丽兰)",
children: [
{
title: "党员中心户",
type: 4,
name: "周游",
},
{
title: "党员中心户",
type: 4,
name: "王阳明",
},
{
title: "党员中心户",
type: 4,
name: "刘艳萍",
},
{
title: "党员中心户",
type: 4,
name: "谢苗苗",
},
{
title: "党员中心户",
type: 4,
name: "杨军",
},
],
},
{
title: "楼院党小组",
type: 3,
name: "第三楼院党小组 (组长:王丽丽)",
children: [
{
title: "党员中心户",
type: 4,
name: "周游",
},
{
title: "党员中心户",
type: 4,
name: "王阳明",
},
{
title: "党员中心户",
type: 4,
name: "刘艳萍",
},
{
title: "党员中心户",
type: 4,
name: "谢苗苗",
},
],
},
],
},
],
},
};
},
computed: {},
methods: {
chooseNav(item) {
this.navList.forEach((d) => {
if (item.key === d.key) {
d.ifActive = true;
} else {
d.ifActive = false;
}
});
},
zoomSize(e) {
e.preventDefault();
if (e.deltaY > 0) {
if (this.nowVal == 50) return;
this.nowVal -= 0.5;
} else if (e.deltaY < 0) {
if (this.nowVal == 300) return;
this.nowVal += 0.5;
}
},
},
};
</script>
<style lang="scss">
@import "~@/assets/css/workflow.scss";
@mixin navListCommon {
width: 120px;
height: 36px;
font-size: 14px;
font-family: PingFang SC;
font-weight: 500;
margin-right: 4px;
text-align: center;
line-height: 36px;
cursor: pointer;
}
@mixin flowLevwlCommon {
position: absolute;
width: 100%;
margin-bottom: 45px;
background: linear-gradient(90deg, rgba(14, 121, 213, 0.14) 86%, rgba(79, 175, 255, 0) 100%);
color: #fff;
font-size: 16px;
}
@mixin flowLevelAfter {
position: absolute;
content: "";
display: block;
background-size: 100%;
}
.organWrap {
margin-top: 18px;
.top-nav {
.top-nav-list {
display: flex;
margin-left: 28px;
.top-nav-item {
@include navListCommon;
background-image: url("~@/assets/images/home/noChooseMain.png");
color: #96b1ce;
}
.top-nav-itemAC {
@include navListCommon;
background-image: url("~@/assets/images/home/chooseMain.png");
color: #fff;
}
}
}
.content {
margin-top: 65px;
padding: 0 17px;
position: relative;
transition: transform 0.3s ease-in-out;
transform-origin: 50% 50%;
.contentList {
position: relative;
width: 100%;
height: 109px;
// margin-bottom: 45px;
// background: linear-gradient(90deg, rgba(14, 121, 213, 0.14) 86%, rgba(79, 175, 255, 0) 100%);
}
.flowLevel {
@include flowLevwlCommon;
top: -10px;
height: 164px;
line-height: 164px;
div {
padding-left: 80px;
&::after {
@include flowLevelAfter;
top: 51px;
left: 15px;
width: 180px;
height: 60px;
background-image: url(~@/assets/images/home/dwbg.png);
}
}
}
.flowLevel-2 {
@include flowLevwlCommon;
top: 184px;
height: 119px;
line-height: 119px;
div {
padding-left: 80px;
&::after {
@include flowLevelAfter;
top: 26px;
left: 15px;
width: 180px;
height: 60px;
background-image: url(~@/assets/images/home/dzb.png);
}
}
}
.flowLevel-3 {
@include flowLevwlCommon;
top: 328px;
height: 85px;
line-height: 85px;
div {
padding-left: 80px;
&::after {
@include flowLevelAfter;
top: 10px;
left: 15px;
width: 180px;
height: 60px;
background-image: url(~@/assets/images/home/lydxz.png);
}
}
}
.flowLevel-4 {
@include flowLevwlCommon;
top: 429px;
height: 135px;
line-height: 135px;
div {
padding-left: 80px;
&::after {
@include flowLevelAfter;
top: 35px;
left: 15px;
width: 180px;
height: 60px;
background-image: url(~@/assets/images/home/dyzxh.png);
}
}
}
.flowLevel-5 {
@include flowLevwlCommon;
top: 598px;
height: 135px;
line-height: 135px;
div {
padding-left: 80px;
&::after {
@include flowLevelAfter;
top: 35px;
left: 15px;
width: 180px;
height: 60px;
background-image: url(~@/assets/images/home/lxjt.png);
}
}
}
}
}
</style>

55
src/views/dataBoardMain/main-navbar.vue

@ -1,12 +1,15 @@
<template>
<div class="m-topnav">
<div class="back">
<img src="~@/assets/images/shuju/main/back.png" alt="/" />
</div>
<div class="title">{{ customerName }}数据智能分析平台</div>
<!-- <div class="btn-back" @click="toPage('/')">
<img class="z-default" src="~@/assets/images/shuju/main/back.png" />
<img class="z-on" src="~@/assets/images/shuju/main/back-on.png" />
<span>返回</span>
</div> -->
<div class="nav-list z-left">
<!-- <div class="nav-list z-left">
<div class="nav-item" :class="{ 'z-on': $route.path == '/dataBoard/renfang/index' }" @click="toPage('/dataBoard/renfang/index')">
<span>人房总览</span>
</div>
@ -16,11 +19,11 @@
<div class="nav-item" :class="{ 'z-on': $route.path == '/dataBoard/fifteen/index' }" @click="toPage('/dataBoard/fifteen/index')">
<span>十五分钟生活圈</span>
</div>
</div>-->
<div class="nav-list">
<div class="nav-item" :class="{ 'z-on': $route.path == '/dataBoard/overview/index' }" @click="toPage('/dataBoard/overview/index')">
<span>概览</span>
</div>
</div>
<div class="nav-list z-right">
<div class="nav-item" :class="{ 'z-on': $route.path == '/dataBoard/organizational/index' }" @click="toPage('/dataBoard/organizational/index')">
<span>组织架构</span>
</div>
@ -31,7 +34,7 @@
<span>满意度评价</span>
</div>
</div>
<div class="msg">
<!-- <div class="msg">
<div class="weather">
<img v-if="weather.weather == '小雨'" src="~@/assets/images/shuju/main/weather/xiaoyu.png" />
<img v-if="weather.weather == '中雨'" src="~@/assets/images/shuju/main/weather/zhongyu.png" />
@ -47,14 +50,18 @@
<img v-else src="~@/assets/images/shuju/main/weather/qing.png" />
<div>{{ weather.temperature }}</div>
<div>{{ weather.weather }}</div>
</div>
<div class="date">
</div>-->
<div class="date">
<div class="dateFlex">
<div class="dateFlex_mw">
<div class="date-month">{{ showMonth }}</div>
<div class="date-week">{{ showWeek }}</div>
</div>
<div class="date-time">{{ showTime }}</div>
<div class="date-div"></div>
<div class="date-week">{{ showWeek }}</div>
</div>
</div>
<nav v-if="false" class="m-navbar">
<!-- </div> -->
<!-- <nav v-if="false" class="m-navbar">
<div class="navbar__header">
<h1 class="navbar__brand" @click="$router.push({ name: 'home' })">
<a class="navbar__brand-lg" href="javascript:;">{{ customerName }}</a>
@ -92,8 +99,8 @@
</el-menu-item>
</template>
</el-menu>
<el-menu class="navbar__menu" mode="horizontal">
<!-- <el-menu-item index="1">
<el-menu class="navbar__menu" mode="horizontal"> -->
<!-- <el-menu-item index="1">
<el-dropdown placement="bottom"
:show-timeout="0">
<el-button size="mini">{{ $t('_lang') }}</el-button>
@ -104,7 +111,7 @@
</el-dropdown-menu>
</el-dropdown>
</el-menu-item> -->
<!-- <el-menu-item index="2">
<!-- <el-menu-item index="2">
<a href="//www.renren.io/"
target="_blank">
<svg class="icon-svg navbar__icon-menu"
@ -113,7 +120,7 @@
</svg>
</a>
</el-menu-item> -->
<el-menu-item index="3" @click="fullscreenHandle()">
<!-- <el-menu-item index="3" @click="fullscreenHandle()">
<svg class="icon-svg navbar__icon-menu" aria-hidden="true">
<use xlink:href="#icon-fullscreen"></use>
</svg>
@ -131,11 +138,11 @@
</el-dropdown-menu>
</el-dropdown>
</el-menu-item>
</el-menu>
</div>
<!-- 弹窗, 修改密码 -->
<update-password-work v-if="updatePassowrdVisible" ref="updatePassowrd"></update-password-work>
</nav>
</el-menu> -->
<!-- </div> -->
<!-- 弹窗, 修改密码 -->
<!-- <update-password-work v-if="updatePassowrdVisible" ref="updatePassowrd"></update-password-work> -->
<!-- </nav> -->
</div>
</template>
<script>
@ -154,6 +161,7 @@ export default {
customerName: "",
showWeek: "",
showTime: "",
showMonth: "",
weather: {
weather: "晴",
temperature: "--",
@ -188,10 +196,13 @@ export default {
computed: {},
methods: {
computeCurrentTime() {
let now = new Date();
let wk = now.getDay();
this.showWeek = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"][wk];
this.showTime = dateFormat(now, "yyyy-MM-dd hh:mm:ss");
// let now = new Date();
// let wk = now.getDay();
// this.showWeek = ["", "", "", "", "", "", ""][wk];
// this.showTime = dateFormat(now, "yyyy-MM-dd hh:mm:ss");
this.showMonth = this.$moment().format("MMM Do");
this.showWeek = this.$moment().format("dddd");
this.showTime = this.$moment().format("LT");
},
toPage(path) {
this.$router.push({

267
src/views/dataBoardMain/main.vue

@ -1,139 +1,138 @@
<template>
<fixed1920 class="g-fx" id="g-scT">
<div v-loading.fullscreen.lock="loading" :element-loading-text="$t('loading')" :class="[
'g-pg',
{ 'z-sidebar--fold': $store.state.sidebarFold },
{
'z-sidebar--noside': true,
},
{ 'z-iframe': $store.state.inIframe },
]">
<template v-if="!loading">
<img class="i-corner z-left-top" src="~@/assets/images/shuju/main/corner-left-top.png" />
<img class="i-corner z-right-top" src="~@/assets/images/shuju/main/corner-right-top.png" />
<img class="i-corner z-right-bottom" src="~@/assets/images/shuju/main/corner-right-bottom.png" />
<img class="i-corner z-left-bottom" src="~@/assets/images/shuju/main/corner-left-bottom.png" />
<main-navbar ref="ref_navbar" v-if="!$store.state.inIframe" />
<div class="g-cnt" :style="{
minHeight: $store.state.fixed1920.height - 100 + 'px',
}">
<main-content v-if="!$store.state.contentIsNeedRefresh" @changeCustomerName="changeCustomerName" />
</div>
</template>
</div>
</fixed1920>
<fixed1920 class="g-fx" id="g-scT">
<div
v-loading.fullscreen.lock="loading"
:element-loading-text="$t('loading')"
:class="[
'g-pg',
{ 'z-sidebar--fold': $store.state.sidebarFold },
{
'z-sidebar--noside': true,
},
{ 'z-iframe': $store.state.inIframe },
]">
<template v-if="!loading">
<!-- <img class="i-corner z-left-top" src="~@/assets/images/shuju/main/corner-left-top.png" /> -->
<!--<img class="i-corner z-right-top" src="~@/assets/images/shuju/main/corner-right-top.png" />
<img class="i-corner z-right-bottom" src="~@/assets/images/shuju/main/corner-right-bottom.png" />
<img class="i-corner z-left-bottom" src="~@/assets/images/shuju/main/corner-left-bottom.png" /> -->
<main-navbar ref="ref_navbar" v-if="!$store.state.inIframe" />
<div
class="g-cnt"
:style="{
minHeight: $store.state.fixed1920.height - 100 + 'px',
}">
<main-content v-if="!$store.state.contentIsNeedRefresh" @changeCustomerName="changeCustomerName" />
</div>
</template>
</div>
</fixed1920>
</template>
<script>
import MainNavbar from "./main-navbar";
import MainContent from "./main-content";
import debounce from "lodash/debounce";
import {
mapGetters
} from "vuex";
import nextTick from "dai-js/tools/nextTick";
import {
requestPost
} from "@/js/dai/request";
import fixed1920 from "@/views/components/fixed1920.vue";
export default {
provide() {
return {
//
refresh() {
this.$store.state.contentIsNeedRefresh = true;
this.$nextTick(() => {
this.$store.state.contentIsNeedRefresh = false;
});
},
};
},
data() {
return {
loading: true,
userType: localStorage.getItem("userType"),
};
},
components: {
MainNavbar,
MainContent,
fixed1920,
},
watch: {
$route: "routeHandle",
},
async created() {
this.windowResizeHandle();
this.routeHandle(this.$route);
Promise.all([this.getWorkUserInfo()]).then(() => {
this.loading = false;
});
},
computed: {},
methods: {
changeCustomerName(customerName) {
this.$refs["ref_navbar"].changeCustomerName(customerName);
},
//
windowResizeHandle() {
this.$store.state.sidebarFold = document.documentElement["clientWidth"] <= 992 || false;
window.addEventListener("resize", debounce(() => {
this.$store.state.sidebarFold = document.documentElement["clientWidth"] <= 992 || false;
}, 150));
},
// ,
routeHandle(route) {
if (!route.meta.isTab) {
this.$store.state.mainShuju.activeName = "";
this.$store.state.mainShuju.contentTabsActiveName = "";
return false;
}
var tab = this.$store.state.contentTabs.filter(
(item) => item.name === route.name)[0];
if (!tab) {
tab = {
...window.SITE_CONFIG["contentTabDefault"],
...route.meta,
name: route.name,
params: {
...route.params
},
query: {
...route.query
},
};
this.$store.state.contentTabs = this.$store.state.contentTabs.concat(tab);
}
this.$store.state.mainShuju.activeName = tab.menuId;
this.$store.state.mainShuju.contentTabsActiveName = tab.name;
},
//
async getWorkUserInfo() {
const url = "/epmetuser/customerstaff/staffbasicinfo";
let params = {};
const {
data,
code,
msg
} = await requestPost(url, params);
if (code === 0) {
this.$store.state.user = {
...data
};
console.log("user---hahha", this.$store.state.user);
localStorage.setItem("roleList", data.roleList);
localStorage.setItem("customerId", data.customerId);
localStorage.setItem("staffId", data.id);
localStorage.setItem("agencyId", data.agencyId);
localStorage.setItem("level", data.level);
// if (!localStorage.getItem("customerName")) {
// localStorage.setItem("customerName", data.agencyName || "");
// }
localStorage.setItem("customerNameDataBoard", data.agencyName || "");
} else {
this.$message.error(msg);
}
},
},
};
import MainNavbar from "./main-navbar";
import MainContent from "./main-content";
import debounce from "lodash/debounce";
import { mapGetters } from "vuex";
import nextTick from "dai-js/tools/nextTick";
import { requestPost } from "@/js/dai/request";
import fixed1920 from "@/views/components/fixed1920.vue";
export default {
provide() {
return {
//
refresh() {
this.$store.state.contentIsNeedRefresh = true;
this.$nextTick(() => {
this.$store.state.contentIsNeedRefresh = false;
});
},
};
},
data() {
return {
loading: true,
userType: localStorage.getItem("userType"),
};
},
components: {
MainNavbar,
MainContent,
fixed1920,
},
watch: {
$route: "routeHandle",
},
async created() {
this.windowResizeHandle();
this.routeHandle(this.$route);
Promise.all([this.getWorkUserInfo()]).then(() => {
this.loading = false;
});
},
computed: {},
methods: {
changeCustomerName(customerName) {
this.$refs["ref_navbar"].changeCustomerName(customerName);
},
//
windowResizeHandle() {
this.$store.state.sidebarFold = document.documentElement["clientWidth"] <= 992 || false;
window.addEventListener(
"resize",
debounce(() => {
this.$store.state.sidebarFold = document.documentElement["clientWidth"] <= 992 || false;
}, 150)
);
},
// ,
routeHandle(route) {
if (!route.meta.isTab) {
this.$store.state.mainShuju.activeName = "";
this.$store.state.mainShuju.contentTabsActiveName = "";
return false;
}
var tab = this.$store.state.contentTabs.filter((item) => item.name === route.name)[0];
if (!tab) {
tab = {
...window.SITE_CONFIG["contentTabDefault"],
...route.meta,
name: route.name,
params: {
...route.params,
},
query: {
...route.query,
},
};
this.$store.state.contentTabs = this.$store.state.contentTabs.concat(tab);
}
this.$store.state.mainShuju.activeName = tab.menuId;
this.$store.state.mainShuju.contentTabsActiveName = tab.name;
},
//
async getWorkUserInfo() {
const url = "/epmetuser/customerstaff/staffbasicinfo";
let params = {};
const { data, code, msg } = await requestPost(url, params);
if (code === 0) {
this.$store.state.user = {
...data,
};
console.log("user---hahha", this.$store.state.user);
localStorage.setItem("roleList", data.roleList);
localStorage.setItem("customerId", data.customerId);
localStorage.setItem("staffId", data.id);
localStorage.setItem("agencyId", data.agencyId);
localStorage.setItem("level", data.level);
// if (!localStorage.getItem("customerName")) {
// localStorage.setItem("customerName", data.agencyName || "");
// }
localStorage.setItem("customerNameDataBoard", data.agencyName || "");
} else {
this.$message.error(msg);
}
},
},
};
</script>
<style lang="scss" src="@/assets/scss/dataBoardMain.scss" scoped></style>

Loading…
Cancel
Save