Browse Source

Merge remote-tracking branch 'origin/yantai_master' into 烟台-master

yantai_master
jianjun 3 years ago
parent
commit
f6d95a8759
  1. 11
      src/assets/scss/modules/visual/command.scss
  2. 309
      src/views/modules/visual/command/cpts/yantai-sidemenu1.vue
  3. 309
      src/views/modules/visual/command/cpts/yantai-sidemenu2.vue
  4. 94
      src/views/modules/visual/command/index.vue
  5. 36
      src/views/modules/worklog/icworklog-add-or-update.vue

11
src/assets/scss/modules/visual/command.scss

@ -193,6 +193,13 @@
width: 360px; width: 360px;
height: calc(825px - 15px); height: calc(825px - 15px);
.menu {
position: relative;
width: 100%;
margin-bottom: 20px;
// height: calc((825px - 15px - 20px) / 2);
}
.title { .title {
margin-bottom: 10px; margin-bottom: 10px;
padding: 4px 0; padding: 4px 0;
@ -212,9 +219,9 @@
} }
} }
.list { .wrap {
margin-right: -8px; margin-right: -8px;
height: calc(825px - 120px); height: calc(825px - 45px);
overflow-y: auto; overflow-y: auto;
overflow-x: hidden; overflow-x: hidden;
@include scrollBar; @include scrollBar;

309
src/views/modules/visual/command/cpts/yantai-sidemenu1.vue

@ -0,0 +1,309 @@
<template>
<div class="m-menu">
<div class="list">
<div
class="item"
:key="'menu1' + item.coverageType"
v-for="item in menuList.slice(0, 2)"
>
<div
class="info"
:class="{ 'z-on': item.selected }"
@click="selectAll(item)"
>
<div class="name">
{{ item.coverageName }}
<i v-if="item.quantity">({{ item.quantity }})</i>
</div>
<div
class="i-arrow"
:class="{ 'z-unfold': !item.folded }"
@click.stop="item.folded = !item.folded"
>
<img src="@/assets/img/shuju/command/arrow-right.png" />
</div>
</div>
<div
v-show="!item.folded"
class="granditem"
:key="'menu3' + granditem.categoryKey"
v-for="granditem in item.categories"
>
<div
class="info"
:class="{ 'z-on': granditem.selected }"
@click="granditem.selected = !granditem.selected"
>
<div class="i-ico">
<img
v-if="grandIcoList[granditem.categoryKey]"
:src="grandIcoList[granditem.categoryKey]"
/>
</div>
<div class="name">
{{ granditem.categoryName }}
<i v-if="granditem.quantity">({{ granditem.quantity }})</i>
</div>
</div>
</div>
<div
v-show="!item.folded"
class="subitem"
:key="'menu2' + subitem.placeType"
v-for="subitem in item.placeTypesInAnalysis"
>
<div
class="info"
:class="{ 'z-on': subitem.selected }"
@click="selectAll(subitem)"
>
<div class="i-ico">
<img
v-if="subitem.placeType == 'xxxxx'"
src="@/assets/img/shuju/command/fuwusheshi.png"
/>
<img
v-if="subitem.placeType == 'enterprise_patrol'"
src="@/assets/img/shuju/command/qishiyedanweixuncha.png"
/>
<img
v-if="subitem.placeType == 'group_rent'"
src="@/assets/img/shuju/command/qunzufang.png"
/>
<img
v-if="subitem.placeType == 'community_org'"
src="@/assets/img/shuju/command/shequzizhuzi.png"
/>
<img
v-if="subitem.placeType == 'superior_resource'"
src="@/assets/img/shuju/command/youshiziyuan.png"
/>
<img
v-if="subitem.placeType == 'volunteer'"
src="@/assets/img/shuju/command/zhiyuanzhe.png"
/>
<img
v-if="subitem.placeType == 'dangerous_chemicals'"
src="@/assets/img/shuju/command/zhongdianweihuapinqiye.png"
/>
<img
v-if="subitem.placeType == 'party_unit'"
src="@/assets/img/shuju/command/lianjiandanwei.png"
/>
</div>
<div class="name">
{{ subitem.placeTypeName }}
<i v-if="subitem.quantity">({{ subitem.quantity }})</i>
</div>
<div
class="i-arrow"
:class="{ 'z-unfold': !subitem.folded }"
@click.stop="subitem.folded = !subitem.folded"
>
<img src="@/assets/img/shuju/command/arrow-right.png" />
</div>
</div>
<div
v-show="!subitem.folded"
class="granditem"
:key="'menu3' + granditem.categoryKey"
v-for="granditem in subitem.categories"
>
<div
class="info"
:class="{ 'z-on': granditem.selected }"
@click="granditem.selected = !granditem.selected"
>
<div class="i-ico">
<img
v-if="grandIcoList[granditem.categoryKey]"
:src="grandIcoList[granditem.categoryKey]"
/>
</div>
<div class="name">
{{ granditem.categoryName }}
<i v-if="granditem.quantity">({{ granditem.quantity }})</i>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import { requestPost } from "@/js/dai/request";
export default {
name: "sidemenu",
props: {
grandIcoList: {
type: Object,
default: () => ({}),
},
orgId: {
type: String,
default: "",
},
},
data() {
return {
menuList: [],
};
},
computed: {},
watch: {
menuList: {
handler(newValue, oldValue) {
// console.log("------------------------------------", newValue);
if (oldValue.length != 0) {
this.$emit("change", newValue);
}
},
deep: true,
// immediate: true
},
orgId() {
this.requestList();
},
},
mounted() {
this.requestList();
},
methods: {
selectAll(item) {
item.selected = !item.selected;
item.categories.forEach((subitem) => {
subitem.selected = item.selected;
});
if (item.placeTypesInAnalysis) {
item.placeTypesInAnalysis.forEach((subitem) => {
subitem.selected = item.selected;
subitem.categories.forEach((subitem2) => {
subitem2.selected = item.selected;
});
});
}
},
//
async requestList() {
const url = "/data/aggregator/coverage/analysis/resourceCategories";
let params = {
agencyId: this.orgId,
};
const { data, code, msg } = await requestPost(url, params);
if (code === 0) {
this.menuList = data.map((item) => {
item.selected = false;
item.folded = true;
item.categories.forEach((subitem) => {
subitem.selected = false;
});
item.placeTypesInAnalysis.forEach((subitem) => {
subitem.selected = false;
subitem.folded = true;
subitem.categories.forEach((granditem) => {
granditem.selected = false;
});
});
return item;
});
} else {
this.$message.error(msg);
}
},
},
};
</script>
<style lang="scss" scoped>
.m-menu {
padding-top: 10px;
.list {
.item {
position: relative;
z-index: 2;
line-height: 60px;
color: rgba(#fff, 0.8);
.z-on {
color: #ffffff;
background-color: #041267;
font-weight: bold;
box-shadow: 0 0 30px 5px inset #22f;
}
.info {
position: relative;
font-size: 18px;
width: 100%;
padding-left: 10px;
display: flex;
align-items: center;
cursor: pointer;
.i-ico {
position: relative;
width: 35px;
height: 35px;
margin-right: 4px;
img {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 2px;
margin: auto;
}
}
.i-arrow {
margin-left: auto;
margin-right: 20px;
&.z-unfold {
transform: rotate(90deg);
}
}
&:hover {
box-shadow: 0 0 30px 5px inset #22f;
background-color: darken(#104ba4, 12);
}
}
.subitem,
.granditem {
> .info {
padding-left: 20px;
font-size: 16px;
}
.granditem {
> .info {
padding-left: 40px;
}
}
}
}
}
}
</style>

309
src/views/modules/visual/command/cpts/yantai-sidemenu2.vue

@ -0,0 +1,309 @@
<template>
<div class="m-menu">
<div class="list">
<div
class="item"
:key="'menu1' + item.coverageType"
v-for="item in menuList.slice(2)"
>
<div
class="info"
:class="{ 'z-on': item.selected }"
@click="selectAll(item)"
>
<div class="name">
{{ item.coverageName }}
<i v-if="item.quantity">({{ item.quantity }})</i>
</div>
<div
class="i-arrow"
:class="{ 'z-unfold': !item.folded }"
@click.stop="item.folded = !item.folded"
>
<img src="@/assets/img/shuju/command/arrow-right.png" />
</div>
</div>
<div
v-show="!item.folded"
class="granditem"
:key="'menu3' + granditem.categoryKey"
v-for="granditem in item.categories"
>
<div
class="info"
:class="{ 'z-on': granditem.selected }"
@click="granditem.selected = !granditem.selected"
>
<div class="i-ico">
<img
v-if="grandIcoList[granditem.categoryKey]"
:src="grandIcoList[granditem.categoryKey]"
/>
</div>
<div class="name">
{{ granditem.categoryName }}
<i v-if="granditem.quantity">({{ granditem.quantity }})</i>
</div>
</div>
</div>
<div
v-show="!item.folded"
class="subitem"
:key="'menu2' + subitem.placeType"
v-for="subitem in item.placeTypesInAnalysis"
>
<div
class="info"
:class="{ 'z-on': subitem.selected }"
@click="selectAll(subitem)"
>
<div class="i-ico">
<img
v-if="subitem.placeType == 'xxxxx'"
src="@/assets/img/shuju/command/fuwusheshi.png"
/>
<img
v-if="subitem.placeType == 'enterprise_patrol'"
src="@/assets/img/shuju/command/qishiyedanweixuncha.png"
/>
<img
v-if="subitem.placeType == 'group_rent'"
src="@/assets/img/shuju/command/qunzufang.png"
/>
<img
v-if="subitem.placeType == 'community_org'"
src="@/assets/img/shuju/command/shequzizhuzi.png"
/>
<img
v-if="subitem.placeType == 'superior_resource'"
src="@/assets/img/shuju/command/youshiziyuan.png"
/>
<img
v-if="subitem.placeType == 'volunteer'"
src="@/assets/img/shuju/command/zhiyuanzhe.png"
/>
<img
v-if="subitem.placeType == 'dangerous_chemicals'"
src="@/assets/img/shuju/command/zhongdianweihuapinqiye.png"
/>
<img
v-if="subitem.placeType == 'party_unit'"
src="@/assets/img/shuju/command/lianjiandanwei.png"
/>
</div>
<div class="name">
{{ subitem.placeTypeName }}
<i v-if="subitem.quantity">({{ subitem.quantity }})</i>
</div>
<div
class="i-arrow"
:class="{ 'z-unfold': !subitem.folded }"
@click.stop="subitem.folded = !subitem.folded"
>
<img src="@/assets/img/shuju/command/arrow-right.png" />
</div>
</div>
<div
v-show="!subitem.folded"
class="granditem"
:key="'menu3' + granditem.categoryKey"
v-for="granditem in subitem.categories"
>
<div
class="info"
:class="{ 'z-on': granditem.selected }"
@click="granditem.selected = !granditem.selected"
>
<div class="i-ico">
<img
v-if="grandIcoList[granditem.categoryKey]"
:src="grandIcoList[granditem.categoryKey]"
/>
</div>
<div class="name">
{{ granditem.categoryName }}
<i v-if="granditem.quantity">({{ granditem.quantity }})</i>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import { requestPost } from "@/js/dai/request";
export default {
name: "sidemenu",
props: {
grandIcoList: {
type: Object,
default: () => ({}),
},
orgId: {
type: String,
default: "",
},
},
data() {
return {
menuList: [],
};
},
computed: {},
watch: {
menuList: {
handler(newValue, oldValue) {
// console.log("------------------------------------", newValue);
if (oldValue.length != 0) {
this.$emit("change", newValue);
}
},
deep: true,
// immediate: true
},
orgId() {
this.requestList();
},
},
mounted() {
this.requestList();
},
methods: {
selectAll(item) {
item.selected = !item.selected;
item.categories.forEach((subitem) => {
subitem.selected = item.selected;
});
if (item.placeTypesInAnalysis) {
item.placeTypesInAnalysis.forEach((subitem) => {
subitem.selected = item.selected;
subitem.categories.forEach((subitem2) => {
subitem2.selected = item.selected;
});
});
}
},
//
async requestList() {
const url = "/data/aggregator/coverage/analysis/resourceCategories";
let params = {
agencyId: this.orgId,
};
const { data, code, msg } = await requestPost(url, params);
if (code === 0) {
this.menuList = data.map((item) => {
item.selected = false;
item.folded = true;
item.categories.forEach((subitem) => {
subitem.selected = false;
});
item.placeTypesInAnalysis.forEach((subitem) => {
subitem.selected = false;
subitem.folded = true;
subitem.categories.forEach((granditem) => {
granditem.selected = false;
});
});
return item;
});
} else {
this.$message.error(msg);
}
},
},
};
</script>
<style lang="scss" scoped>
.m-menu {
padding-top: 10px;
.list {
.item {
position: relative;
z-index: 2;
line-height: 60px;
color: rgba(#fff, 0.8);
.z-on {
color: #ffffff;
background-color: #041267;
font-weight: bold;
box-shadow: 0 0 30px 5px inset #22f;
}
.info {
position: relative;
font-size: 18px;
width: 100%;
padding-left: 10px;
display: flex;
align-items: center;
cursor: pointer;
.i-ico {
position: relative;
width: 35px;
height: 35px;
margin-right: 4px;
img {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 2px;
margin: auto;
}
}
.i-arrow {
margin-left: auto;
margin-right: 20px;
&.z-unfold {
transform: rotate(90deg);
}
}
&:hover {
box-shadow: 0 0 30px 5px inset #22f;
background-color: darken(#104ba4, 12);
}
}
.subitem,
.granditem {
> .info {
padding-left: 20px;
font-size: 16px;
}
.granditem {
> .info {
padding-left: 40px;
}
}
}
}
}
}
</style>

94
src/views/modules/visual/command/index.vue

@ -159,20 +159,39 @@
</div> </div>
<div class="m-sidemenu"> <div class="m-sidemenu">
<cpt-card> <cpt-card>
<div class="title"> <div class="wrap">
<img src="@/assets/img/shuju/title-tip.png" /> <div class="menu">
<span>指挥调度</span> <div class="title">
</div> <img src="@/assets/img/shuju/title-tip.png" />
<span>指挥调度</span>
</div>
<div class="list"> <div class="list">
<sidemenu <sidemenu1
:orgId="orgId" :orgId="orgId"
@change="handleChangeMenu" @change="handleChangeMenu1"
:grandIcoList="dotIcoList" :grandIcoList="dotIcoList"
></sidemenu> ></sidemenu1>
</div> </div>
</cpt-card> </div>
<div class="menu">
<div class="title">
<img src="@/assets/img/shuju/title-tip.png" />
<span>十五分钟生活圈</span>
</div>
<div class="list">
<sidemenu2
:orgId="orgId"
@change="handleChangeMenu2"
:grandIcoList="dotIcoList"
></sidemenu2>
</div>
</div>
</div>
</cpt-card>
</div> </div>
</div> </div>
@ -215,7 +234,8 @@ import { requestPost } from "@/js/dai/request";
import People from "@/views/modules/visual/basicinfo/people"; import People from "@/views/modules/visual/basicinfo/people";
import cptCard from "@/views/modules/visual/cpts/card"; import cptCard from "@/views/modules/visual/cpts/card";
import gridMap from "@/views/modules/visual/command/cpts/map"; import gridMap from "@/views/modules/visual/command/cpts/map";
import sidemenu from "@/views/modules/visual/command/cpts/sidemenu"; import sidemenu1 from "@/views/modules/visual/command/cpts/yantai-sidemenu1";
import sidemenu2 from "@/views/modules/visual/command/cpts/yantai-sidemenu2";
import sidemenuLeft from "@/views/modules/visual/command/cpts/sidemenu-left"; import sidemenuLeft from "@/views/modules/visual/command/cpts/sidemenu-left";
import ScreenLoading from "@/views/modules/visual/cpts/loading"; import ScreenLoading from "@/views/modules/visual/cpts/loading";
@ -267,7 +287,8 @@ export default {
cptCard, cptCard,
ScreenLoading, ScreenLoading,
gridMap, gridMap,
sidemenu, sidemenu1,
sidemenu2,
sidemenuLeft, sidemenuLeft,
eventInfo, eventInfo,
serviceInfo, serviceInfo,
@ -297,8 +318,8 @@ export default {
selUserId: "", selUserId: "",
dotList: [], dotList: [],
categoryKeys: [], categoryKeys: [[], []],
coverageTypes: [], coverageTypes: [[], []],
dotIcoList: { dotIcoList: {
anzhibangjiao: require("@/assets/img/shuju/command/ico/anzhibangjiao.png"), anzhibangjiao: require("@/assets/img/shuju/command/ico/anzhibangjiao.png"),
@ -550,7 +571,36 @@ export default {
console.log(obj); console.log(obj);
}, },
handleChangeMenu(list) { handleChangeMenu1(list) {
console.log("handleChangeMenu", list);
let categoryKeys = [];
let coverageTypes = [];
list.forEach((item) => {
if (item.selected) {
coverageTypes.push(item.coverageType);
}
item.categories.forEach((subitem) => {
if (subitem.selected) {
coverageTypes.push(item.coverageType);
categoryKeys.push(subitem.categoryKey);
}
});
item.placeTypesInAnalysis.forEach((subitem) => {
subitem.categories.forEach((subitem2) => {
if (subitem2.selected) {
categoryKeys.push(subitem2.categoryKey);
coverageTypes.push(subitem2.coverageType);
}
});
});
});
this.categoryKeys[0] = [...new Set(categoryKeys)];
this.coverageTypes[0] = [...new Set(coverageTypes)];
this.requestMapDot();
},
handleChangeMenu2(list) {
console.log("handleChangeMenu", list); console.log("handleChangeMenu", list);
let categoryKeys = []; let categoryKeys = [];
let coverageTypes = []; let coverageTypes = [];
@ -574,8 +624,8 @@ export default {
}); });
}); });
}); });
this.categoryKeys = [...new Set(categoryKeys)]; this.categoryKeys[1] = [...new Set(categoryKeys)];
this.coverageTypes = [...new Set(coverageTypes)]; this.coverageTypes[1] = [...new Set(coverageTypes)];
this.requestMapDot(); this.requestMapDot();
}, },
@ -585,8 +635,8 @@ export default {
let params = { let params = {
orgId: this.orgId, orgId: this.orgId,
orgType: "agency", orgType: "agency",
coverageTypes: this.coverageTypes, coverageTypes: [...this.coverageTypes[0], ...this.coverageTypes[1]],
categoryKeys: this.categoryKeys, categoryKeys: [...this.categoryKeys[0], ...this.categoryKeys[1]],
isPage: false, isPage: false,
}; };

36
src/views/modules/worklog/icworklog-add-or-update.vue

@ -10,9 +10,10 @@
> >
<el-option <el-option
v-for="item in optionsG" v-for="item in optionsG"
:key="item.value" :key="item.gridId"
:label="item.label" :label="item.gridName"
:value="item.value" :value="item.gridId"
:disabled="item.disabled"
> >
</el-option> </el-option>
</el-select> </el-select>
@ -69,7 +70,6 @@
</el-form-item> --> </el-form-item> -->
<el-form-item label="照片" <el-form-item label="照片"
label-width="150px"
style="display:block"> style="display:block">
<el-upload :class="['avatar-uploader', {'hide': hideUploadBtn}] " <el-upload :class="['avatar-uploader', {'hide': hideUploadBtn}] "
ref="uploadPic" ref="uploadPic"
@ -102,6 +102,7 @@ export default {
return { return {
formType: '', formType: '',
visible: false, visible: false,
gridState: true,
uploadUlr: window.SITE_CONFIG['apiURL'] + '/oss/file/uploadvariedfile', uploadUlr: window.SITE_CONFIG['apiURL'] + '/oss/file/uploadvariedfile',
logTypeArr: [], logTypeArr: [],
optionsG: [], optionsG: [],
@ -117,24 +118,17 @@ export default {
remark: '', remark: '',
mobile: '', mobile: '',
fileList: [], fileList: [],
// imageList: [],// // imageList: [],//
}, },
hideUploadBtn: false hideUploadBtn: false
} }
}, },
created () { created () {
this.getGridList()
this.getCategrayList() this.getCategrayList()
}, },
computed: { computed: {
dataRule () { dataRule () {
return { return {
agencyId: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
gridId: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
title: [ title: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' } { required: true, message: this.$t('validate.required'), trigger: 'blur' }
], ],
@ -153,6 +147,7 @@ export default {
methods: { methods: {
init () { init () {
this.visible = true this.visible = true
this.getGridList()
this.$nextTick(() => { this.$nextTick(() => {
this.$refs['dataForm'].resetFields() this.$refs['dataForm'].resetFields()
this.dataForm.fileList = [] this.dataForm.fileList = []
@ -171,6 +166,15 @@ export default {
...this.dataForm, ...this.dataForm,
...res.data ...res.data
} }
const grid = this.optionsG.filter(item => item.gridId === res.data.gridId)
if (grid.length < 1 && res.data.gridId !== '') {
this.gridState = false
this.optionsG.push({gridName:res.data.gridName, gridId:res.data.gridId, disabled: true})
} else {
this.gridState = true
}
const { id } = this.$store.state.user const { id } = this.$store.state.user
if (this.dataForm.createdBy == id) { // if (this.dataForm.createdBy == id) { //
this.formType = 'update' this.formType = 'update'
@ -197,9 +201,8 @@ export default {
} }
}, },
getGridList() { getGridList() {
const { user } = this.$store.state
this.$http this.$http
.post('/gov/org/customergrid/gridoption', { agencyId: user.agencyId, purpose: 'query' }) .post('/gov/mine/agency/getmygrids')
.then(({ data: res }) => { .then(({ data: res }) => {
if (res.code !== 0) { if (res.code !== 0) {
return this.$message.error(res.msg) return this.$message.error(res.msg)
@ -327,6 +330,11 @@ export default {
}, },
// //
dataFormSubmitHandle: debounce(function () { dataFormSubmitHandle: debounce(function () {
if (!this.gridState) {
this.dataForm.gridId = ''
this.gridState = true
return this.$message.error("请重新选择网格")
}
if (this.dataForm.content.length < 70) { if (this.dataForm.content.length < 70) {
return this.$message.error("内容不能少于70字") return this.$message.error("内容不能少于70字")
} }

Loading…
Cancel
Save