Browse Source

Merge branch 'dev-用户反馈' of http://git.elinkit.com.cn:7070/r/epmet-oper-gov into dev-用户反馈

dev-用户反馈
jiangyy 3 years ago
parent
commit
e9ca3c916a
  1. 96
      package.json
  2. 817
      src/views/modules/base/communityYantai/community.vue
  3. 176
      src/views/modules/base/communityYantai/cpts/agency-info.vue
  4. 176
      src/views/modules/base/communityYantai/cpts/grid-info.vue
  5. 535
      src/views/modules/base/communityYantai/cpts/map.vue
  6. 20
      src/views/modules/base/organization/organization.vue
  7. 4
      src/views/modules/communityParty/orgActivity/activivityList/addActivity.vue
  8. 3
      src/views/modules/shequ/index.vue
  9. 83
      src/views/modules/shequzhili/htgl/cpts/htglInfo.vue
  10. 331
      src/views/modules/shequzhili/htgl/htgl.vue

96
package.json

@ -19,60 +19,60 @@
"@antv/l7": "2.9.14",
"@antv/l7-draw": "3.0.5",
"@antv/l7-maps": "2.9.14",
"@riophae/vue-treeselect": "^0.4.0",
"@tinymce/tinymce-vue": "^3.2.8",
"async-validator": "^4.2.5",
"axios": "^0.19.0",
"babel-eslint": "^8.0.1",
"babel-plugin-component": "^1.1.1",
"echarts": "^5.2.2",
"echarts-gl": "^2.0.9",
"@riophae/vue-treeselect": "0.4.0",
"@tinymce/tinymce-vue": "3.2.8",
"async-validator": "4.2.5",
"axios": "0.19.0",
"babel-eslint": "8.0.1",
"babel-plugin-component": "1.1.1",
"echarts": "5.2.2",
"echarts-gl": "2.0.9",
"element-theme": "2.0.1",
"element-ui": "2.13.2",
"file-saver": "^2.0.5",
"gulp-autoprefixer": "^6.1.0",
"gulp-clean-css": "^4.2.0",
"gulp-load-plugins": "^2.0.0",
"gulp-rename": "^1.4.0",
"gulp-sass": "^4.0.2",
"js-cookie": "^2.2.0",
"jsencrypt": "^3.0.3",
"lodash": "^4.17.15",
"mint-ui": "^2.2.13",
"node-sass": "^4.12.0",
"ol": "^6.9.0",
"portfinder": "^1.0.21",
"proj4": "^2.8.0",
"qs": "^6.7.0",
"quill": "^1.3.6",
"screenfull": "^4.2.1",
"sortablejs": "^1.12.0",
"svg-sprite-loader": "^4.1.6",
"throttle-debounce": "^3.0.1",
"v-distpicker": "^1.2.2",
"vue": "^2.6.11",
"vue-baidu-map": "^0.21.22",
"vue-i18n": "^8.12.0",
"vue-quill-editor": "^3.0.6",
"vue-router": "^3.0.7",
"vuex": "^3.1.1",
"xlsx": "^0.17.1"
"file-saver": "2.0.5",
"gulp-autoprefixer": "6.1.0",
"gulp-clean-css": "4.2.0",
"gulp-load-plugins": "2.0.0",
"gulp-rename": "1.4.0",
"gulp-sass": "4.0.2",
"js-cookie": "2.2.0",
"jsencrypt": "3.0.3",
"lodash": "4.17.15",
"mint-ui": "2.2.13",
"node-sass": "4.12.0",
"ol": "6.9.0",
"portfinder": "1.0.21",
"proj4": "2.8.0",
"qs": "6.7.0",
"quill": "1.3.6",
"screenfull": "4.2.1",
"sortablejs": "1.12.0",
"svg-sprite-loader": "4.1.6",
"throttle-debounce": "3.0.1",
"v-distpicker": "1.2.2",
"vue": "2.6.11",
"vue-baidu-map": "0.21.22",
"vue-i18n": "8.12.0",
"vue-quill-editor": "3.0.6",
"vue-router": "3.0.7",
"vuex": "3.1.1",
"xlsx": "0.17.1"
},
"devDependencies": {
"@antv/f2": "^3.8.10-beta.1",
"@antv/f2": "3.8.10-beta.1",
"@tinymce/tinymce-vue": "3.2.8",
"@vue/cli-plugin-babel": "^3.10.0",
"@vue/cli-plugin-eslint": "^3.10.0",
"@vue/cli-service": "^3.10.0",
"@vue/eslint-config-standard": "^4.0.0",
"dai-js": "^0.0.12",
"element-theme-chalk": "^2.13.0",
"natives": "^1.1.6",
"ol": "^6.9.0",
"sass-loader": "^7.3.1",
"script-loader": "^0.7.2",
"@vue/cli-plugin-babel": "3.10.0",
"@vue/cli-plugin-eslint": "3.10.0",
"@vue/cli-service": "3.10.0",
"@vue/eslint-config-standard": "4.0.0",
"dai-js": "0.0.12",
"element-theme-chalk": "2.13.0",
"natives": "1.1.6",
"ol": "6.9.0",
"sass-loader": "7.3.1",
"script-loader": "0.7.2",
"tinymce": "5.8.2",
"vue-template-compiler": "^2.6.11"
"vue-template-compiler": "2.6.11"
},
"eslintConfig": {
"root": true,

817
src/views/modules/base/communityYantai/community.vue

File diff suppressed because it is too large

176
src/views/modules/base/communityYantai/cpts/agency-info.vue

@ -0,0 +1,176 @@
<template>
<div class="m-info">
<div class="btn-close" @click="off">
<svg class="icon-svg aui-navbar__icon-menu" aria-hidden="true">
<use xlink:href="#icon-close"></use>
</svg>
</div>
<div class="info">
<div class="title">{{ info.agencyName || '--' }}</div>
<div class="item">
<div class="field">组织区划</div>
<div class="value">{{ info.areaName || '--' }}</div>
</div>
<div class="item">
<div class="field">组织编码</div>
<div class="value">{{ info.areaCode || '--' }}</div>
</div>
<div class="item">
<div class="field">负责人</div>
<div class="value">{{ info.contacts || '--' }}</div>
</div>
<div class="item">
<div class="field">联系电话</div>
<div class="value">{{ info.mobile || '--' }}</div>
</div>
<div class="item">
<div class="field">组织简介</div>
<div class="value">{{ info.remark || '--' }}</div>
</div>
<div class="item" v-if="mapData">
<div class="field">管辖范围</div>
<div class="value-map">
<grid-map ref="map" :srcGridData="mapData" :pitch="0" />
</div>
</div>
</div>
</div>
</template>
<script>
import { requestPost } from "@/js/dai/request";
import gridMap from "./map";
export default {
components: { gridMap },
props: {
agencyId: {
//
type: String,
default: "",
},
},
data() {
return {
info: {
agencyId: "", // ID
level: "",
agencyName: "",
areaCode: "",
areaName: "",
contacts: "",
mobile: "",
remark: "",
},
mapData: null,
displayed: false,
};
},
computed: {},
mounted() {
if (this.agencyId) {
this.getInfo();
this.getMapData();
}
},
watch: {
agencyId() {
this.mapData = null;
this.getInfo();
this.getMapData();
},
},
methods: {
off() {
this.$emit("close");
},
async getInfo() {
const url = "/gov/org/agency/agencydetail";
let params = {
agencyId: this.agencyId,
};
const { data, code, msg } = await requestPost(url, params);
if (code === 0) {
this.info = data;
} else {
this.$message.error(msg);
}
},
async getMapData() {
const url = "/gov/org/agency/maporg";
let params = {
level: "agency",
orgId: this.agencyId,
};
const { data, code, msg } = await requestPost(url, params);
if (code === 0) {
if (data.coordinates) {
this.mapData = data;
}
} else {
this.$message.error(msg);
}
},
},
};
</script>
<style lang="scss" scoped>
.m-info {
position: relative;
width: 300px;
background-color: #ffffff;
box-shadow: 0px 6px 16px 0px rgba(0, 0, 0, 0.08),
0px 3px 6px -4px rgba(0, 0, 0, 0.12);
padding: 15px;
.btn-close {
position: absolute;
top: 0;
right: 0;
font-size: 15px;
color: #aaaaaa;
padding: 15px;
cursor: pointer;
&:hover {
color: #666666;
}
}
.info {
.title {
font-size: 18px;
font-weight: bold;
line-height: 30px;
}
.item {
display: flex;
flex-wrap: wrap;
line-height: 24px;
.field {
width: 30%;
}
.value {
width: 70%;
}
.value-map {
width: 100%;
height: 200px;
}
}
}
}
</style>

176
src/views/modules/base/communityYantai/cpts/grid-info.vue

@ -0,0 +1,176 @@
<template>
<div class="m-info">
<div class="btn-close" @click="off">
<svg class="icon-svg aui-navbar__icon-menu" aria-hidden="true">
<use xlink:href="#icon-close"></use>
</svg>
</div>
<div class="info">
<div class="title">{{ info.gridName || '--' }}</div>
<div class="item">
<div class="field">组织区划</div>
<div class="value">{{ info.areaName || '--' }}</div>
</div>
<div class="item">
<div class="field">组织编码</div>
<div class="value">{{ info.areaCode || '--' }}</div>
</div>
<div class="item">
<div class="field">负责人</div>
<div class="value">{{ info.contacts || '--' }}</div>
</div>
<div class="item">
<div class="field">联系电话</div>
<div class="value">{{ info.mobile || '--' }}</div>
</div>
<div class="item">
<div class="field">网格简介</div>
<div class="value">{{ info.remark || '--' }}</div>
</div>
<div class="item" v-if="mapData">
<div class="field">管辖范围</div>
<div class="value-map">
<grid-map ref="map" :srcGridData="mapData" :pitch="0" />
</div>
</div>
</div>
</div>
</template>
<script>
import { requestPost } from "@/js/dai/request";
import gridMap from "./map";
export default {
components: { gridMap },
props: {
gridId: {
//
type: String,
default: "",
},
},
data() {
return {
info: {
gridId: "", // ID
level: "",
gridName: "",
areaCode: "",
areaName: "",
contacts: "",
mobile: "",
remark: "",
},
mapData: null,
displayed: false,
};
},
computed: {},
mounted() {
if (this.gridId) {
this.getInfo();
this.getMapData();
}
},
watch: {
gridId() {
this.mapData = null;
this.getInfo();
this.getMapData();
},
},
methods: {
off() {
this.$emit("close");
},
async getInfo() {
const url = "/gov/org/grid/griddetail";
let params = {
gridId: this.gridId,
};
const { data, code, msg } = await requestPost(url, params);
if (code === 0) {
this.info = data;
} else {
this.$message.error(msg);
}
},
async getMapData() {
const url = "/gov/org/agency/maporg";
let params = {
level: "grid",
orgId: this.gridId,
};
const { data, code, msg } = await requestPost(url, params);
if (code === 0) {
if (data.coordinates) {
this.mapData = data;
}
} else {
this.$message.error(msg);
}
},
},
};
</script>
<style lang="scss" scoped>
.m-info {
position: relative;
width: 300px;
background-color: #ffffff;
box-shadow: 0px 6px 16px 0px rgba(0, 0, 0, 0.08),
0px 3px 6px -4px rgba(0, 0, 0, 0.12);
padding: 15px;
.btn-close {
position: absolute;
top: 0;
right: 0;
font-size: 15px;
color: #aaaaaa;
padding: 15px;
cursor: pointer;
&:hover {
color: #666666;
}
}
.info {
.title {
font-size: 18px;
font-weight: bold;
line-height: 30px;
}
.item {
display: flex;
flex-wrap: wrap;
line-height: 24px;
.field {
width: 30%;
}
.value {
width: 70%;
}
.value-map {
width: 100%;
height: 200px;
}
}
}
}
</style>

535
src/views/modules/base/communityYantai/cpts/map.vue

@ -0,0 +1,535 @@
<template>
<div class="m-map" :class="{ 'z-td': mapType == 'td' }">
<div id="map"></div>
</div>
</template>
<script>
import nextTick from "dai-js/tools/nextTick";
import {
Scene,
PolygonLayer,
LineLayer,
RasterLayer,
PointLayer,
} from "@antv/l7";
import { GaodeMap, Map } from "@antv/l7-maps";
import { spliceIntoChunks } from "@/utils/index";
import { mapType, searchNearby } from "@/utils/dai-map";
import tdtWp from "@/utils/tdt-wp";
import tdtWpZw from "@/utils/tdt-wp-zw";
let myMap;
let scene;
let polygonLayer;
let lineLayer;
let textLayer;
let posLayer;
let circleLayer;
export default {
name: "l7",
inject: ["refresh"],
data() {
return {
mapType,
mapStyleType: "light",
// srcGridData: {},
darkStyle: {
style: "amap://styles/blue",
polygonColor: [
"rgba(255, 100, 60, 0.5)",
"rgba(43, 231, 253, 0.35)",
"rgba(255, 255, 50, 0.35)",
],
lineColor: [
"rgba(255, 180, 150, 0.9)",
"rgba(43, 231, 253, 0.7)",
"rgba(255, 255, 50, 0.7)",
],
circleColor: [
"rgba(255, 180, 150, 0.99)",
"rgba(43, 231, 253, 0.99)",
"rgba(255, 255, 50, 0.99)",
],
textColor: [
"rgba(255, 100, 60, 0.99)",
"rgba(43, 231, 253, 0.99)",
"rgba(255, 255, 50, 0.99)",
],
textStrokeColor: "#fff",
},
lightStyle: {
style: "amap://styles/whitesmoke",
polygonColor: [
"rgba(255, 100, 60, 0.3)",
"rgba(43, 231, 253, 0.3)",
"rgba(255, 255, 50, 0.3)",
],
lineColor: [
"rgba(220, 150, 120, 0.9)",
"rgba(33, 201, 223, 0.8)",
"rgba(200, 200, 50, 0.9)",
],
circleColor: [
"rgba(255, 180, 150, 0.99)",
"rgba(13, 181, 203, 0.8)",
"rgba(255, 255, 50, 0.99)",
],
textColor: [
"rgba(200, 50, 10, 0.99)",
"rgba(0, 130, 153, 0.99)",
"rgba(120, 120, 0, 0.99)",
],
textStrokeColor: "#666",
},
};
},
props: {
pitch: {
type: Number,
default: 60,
},
srcGridData: {
type: Object,
default: null,
},
},
components: {},
async mounted() {
//
window._AMapSecurityConfig = {
securityJsCode: "92ea2c965c6cf1ba7ee3a8fe01449ef2",
};
this.iniMap();
},
computed: {
polygonData() {
const { srcGridData } = this;
if (srcGridData.coordinates == "") {
return { type: "FeatureCollection", features: [] };
}
const polygon = [
...[srcGridData]
.filter((item) => item.coordinates.length > 0)
.map((item) => ({
type: "Feature",
properties: {
// id: item.id,
// name: item.name,
// level: item.level,
center: [item.longitude, item.latitude],
...item,
},
geometry: {
type: "Polygon",
coordinates: [
spliceIntoChunks(
item.coordinates
.split(",")
.map((item) => parseFloat(item)),
2
).filter((item) => item.length == 2),
],
},
})),
];
return { type: "FeatureCollection", features: polygon };
},
polygonDotData() {
const { srcGridData } = this;
if (srcGridData.coordinates == "") {
return { type: "FeatureCollection", features: [] };
}
const polygon = [
...[srcGridData]
.filter((item) => item.coordinates.length > 0)
.map((item) => ({
type: "Feature",
properties: {
// id: item.id,
// name: item.name,
// level: item.level,
center: [item.longitude, item.latitude],
...item,
},
geometry: {
type: "Polygon",
coordinates: [
item.latitude
? [[item.longitude, item.latitude]]
: spliceIntoChunks(
item.coordinates
.split(",")
.map((item) =>
parseFloat(item)
),
2
).filter((item) => item.length == 2),
],
},
})),
];
return { type: "FeatureCollection", features: polygon };
},
},
watch: {
srcGridData(val, oldValue) {
if (oldValue == null) {
this.iniMap();
} else {
this.updateGrid();
}
this.zoomInABit();
},
dotList(val, oldValue) {
this.updateDot();
},
dotList2(val, oldValue) {
this.updateDot();
},
},
methods: {
iniMap() {
const { darkStyle, lightStyle, srcGridData } = this;
if (!srcGridData) return false;
let styleConfig = darkStyle;
if (this.mapStyleType == "light") {
styleConfig = lightStyle;
}
const iniCenter = [
srcGridData.longitude ||
this.$store.state.user.longitude ||
116.39743841556731,
srcGridData.latitude ||
this.$store.state.user.latitude ||
39.9088810666821,
];
if (mapType != "qq") {
myMap = new Map({
center: iniCenter,
zoom: 18,
});
} else {
myMap = new GaodeMap({
pitch: this.pitch,
style: styleConfig.style,
center: iniCenter,
token: "fc14b42e0ca18387866d68ebd4f150c1",
zoom: 18,
isHotspot: false,
resizeEnable: true,
doubleClickZoom: false,
});
}
scene = new Scene({
id: "map",
logoVisible: false,
map: myMap,
});
scene.on("loaded", async () => {
if (mapType == "td") {
this.iniMapBase(scene);
} else if (mapType == "tdzw") {
this.iniMapBase2(scene);
}
this.iniMapGrid(scene);
await nextTick(0);
this.zoomInABit();
});
},
//
iniMapBase(scene) {
console.log("-----------------iniMapBase");
//
const baseLayer = new RasterLayer({
zIndex: 1,
});
baseLayer
.source(
"http://t7.tianditu.com/DataServer?T=vec_w&tk=8a08c117ab9ee45d508686b01cc8d397&x={x}&y={y}&l={z}",
{
parser: {
type: "rasterTile",
tileSize: 256,
// minZoom: 6,
// maxZoom: 15,
zoomOffset: 0,
},
}
)
.style({
opacity: 0.7,
});
//
const annotionLayer = new RasterLayer({
zIndex: 2,
});
annotionLayer
.source(
"http://t7.tianditu.com/DataServer?T=cva_w&tk=8a08c117ab9ee45d508686b01cc8d397&x={x}&y={y}&l={z}",
{
parser: {
type: "rasterTile",
tileSize: 256,
// minZoom: 6,
// maxZoom: 15,
zoomOffset: 0,
},
}
)
.style({
opacity: 0.5,
});
scene.addLayer(baseLayer);
scene.addLayer(annotionLayer);
},
//
iniMapBase2(scene) {
console.log("-----------------iniMapBase");
//
const baseLayer = new RasterLayer({
zIndex: 1,
});
baseLayer
.source(tdtWpZw.vec, {
parser: {
type: "rasterTile",
tileSize: 256,
zoomOffset: 0,
},
})
.style({
opacity: 0.7,
});
scene.addLayer(baseLayer);
},
iniMapGrid(scene) {
const { darkStyle, lightStyle, polygonData, polygonDotData } = this;
let styleConfig = darkStyle;
if (this.mapStyleType == "light") {
styleConfig = lightStyle;
}
console.log("地图初始化数据", polygonData);
polygonLayer = new PolygonLayer({
autoFit: true,
})
// .size(0)
.source(polygonData)
.color("name", styleConfig.polygonColor)
// .shape("extrude")
.shape("fill")
.style({
opacityLinear: {
enable: true, // true - false
dir: "out", // in - out
},
opacity: 1,
// heightfixed: true,
// pickLight: true,
raisingHeight: 0,
// sourceColor: "#333",
// targetColor: "rgba(255,255,255, 0.5)",
});
scene.addLayer(polygonLayer);
lineLayer = new LineLayer({
zIndex: 2,
name: "line2",
})
.source(polygonData)
.shape("line")
.size(1)
.color("name", styleConfig.lineColor)
.style({
opacity: 1,
})
.animate({
interval: 1, //
duration: 2, //
trailLength: 2, // 线
});
scene.addLayer(lineLayer);
circleLayer = new PolygonLayer({
zIndex: 3,
})
.source(polygonDotData)
.color("name", styleConfig.circleColor)
.shape("circle")
.active(true)
.animate(true)
.size(50)
.style({
offsets: [0, -10], // [, ]
opacity: 1,
});
scene.addLayer(circleLayer);
scene.addImage(
"pos-red",
require("@/assets/img/shuju/grid/pos-red.png")
);
scene.addImage(
"pos-green",
require("@/assets/img/shuju/grid/pos-green.png")
);
scene.addImage(
"pos-yellow",
require("@/assets/img/shuju/grid/pos-yellow.png")
);
posLayer = new PolygonLayer({
zIndex: 4,
})
.source(polygonDotData)
.shape("name", ["pos-red", "pos-green", "pos-yellow"])
.size(12)
.style({
offsets: [0, 8], // [, ]
// rotation: 60,
// layerType: "fillImage",
});
scene.addLayer(posLayer);
textLayer = new PolygonLayer({
zIndex: 20,
})
.source(polygonDotData)
.color("name", styleConfig.textColor)
.shape("name", "text")
.size(16)
.style({
textAnchor: "center", // center|left|right|top|bottom|top-left
textOffset: [0, 40], // [, ]
spacing: 2, //
padding: [2, 2], // padding []
stroke: styleConfig.textStrokeColor, //
strokeWidth: 0.1, //
strokeOpacity: 0.8,
textAllowOverlap: true,
})
.active(true);
scene.addLayer(textLayer);
polygonLayer.on("mousemove", (e) => {
polygonLayer.style({
raisingHeight: 0,
});
});
polygonLayer.on("click", (e) => {
console.log(e.feature.properties);
this.$emit("clickAgency", e.feature.properties);
});
polygonLayer.on("unmousemove", (e) => {
polygonLayer.style({
raisingHeight: 0,
});
});
},
//
zoomInABit() {
let current = scene.getZoom();
scene.setZoomAndCenter(current + 0.5);
},
shiftMapStyle(type) {
this.mapStyleType = type;
localStorage.setItem("mapStyle", type);
this.refresh();
},
updateMap() {
this.updateGrid();
},
updateGrid() {
const { polygonData, polygonDotData } = this;
if (polygonLayer) {
polygonLayer.setData(polygonData);
lineLayer.setData(polygonData);
textLayer.setData(polygonDotData);
posLayer.setData(polygonDotData);
circleLayer.setData(polygonDotData);
}
},
},
};
</script>
<style lang="scss" scoped>
.m-map {
position: relative;
height: 100%;
border-radius: 10px;
overflow: hidden;
&.z-td {
#app {
/deep/ .l7-scene {
canvas {
background-color: rgba(43, 51, 73, 0.82);
background-image: radial-gradient(
rgba(0, 0, 0, 0),
rgba(0, 0, 0, 0.3),
#000
);
}
.gray {
-webkit-filter: grayscale(100%);
filter: grayscale(100%);
opacity: 0.7;
}
}
}
}
#map {
width: 100%;
height: 100%;
}
.btn {
position: absolute;
bottom: 0;
left: 0;
width: 100px;
line-height: 36px;
height: 36px;
text-align: center;
color: #ffffff;
font-size: 14px;
background-color: rgba(#000, 0.2);
cursor: pointer;
}
}
</style>

20
src/views/modules/base/organization/organization.vue

@ -15,12 +15,10 @@
<el-link v-if="index === breadcrumbArr.length - 1"
type="primary"
@click.native="modifyOrgInfo"
style="
margin-left: 10px;
style=" margin-left: 10px;
margin-top: 0px;
color: #3e8ef7;
cursor: pointer;
"
cursor: pointer;"
icon="el-icon-edit">修改</el-link>
</el-breadcrumb-item>
</el-breadcrumb>
@ -714,6 +712,17 @@
<el-input v-model="OrgDetailsForm.mobile"
placeholder="请输入联系电话"></el-input>
</el-form-item>
<el-form-item label="社区简介">
<el-input
type="textarea"
v-model="OrgDetailsForm.remark"
placeholder="请输入内容"
resize="none"
rows=3
show-word-limit
>
</el-input>
</el-form-item>
<el-form-item label="坐标">
<div id="con"></div>
</el-form-item>
@ -1036,6 +1045,7 @@ export default {
areaCode: "",
agencyId: "",
areaName: "",
remark:""
},
//
OrgUnitDetailsForm: {
@ -2413,6 +2423,7 @@ export default {
this.OrgDetailsForm.centerAddress = data.centerAddress;
this.OrgDetailsForm.areaCode = data.areaCode;
this.OrgDetailsForm.mobile = data.mobile;
this.OrgDetailsForm.remark = data.remark;
this.latitude = data.latitude;
this.longitude = data.longitude;
this.OrgDetailsForm.agencyId = data.agencyId;
@ -2479,6 +2490,7 @@ export default {
mobile: this.OrgDetailsForm.mobile,
code: this.OrgDetailsForm.code,
latitude: this.latitude,
remark:this.OrgDetailsForm.remark,
longitude: this.longitude,
};

4
src/views/modules/communityParty/orgActivity/activivityList/addActivity.vue

@ -171,14 +171,14 @@
</div>
<!-- <div class="div_btn">
<div class="div_btn">
<el-button size="small"
@click="handleCancle"> </el-button>
<el-button size="small"
type="primary"
:disabled="btnDisable"
@click="handleComfirm"> </el-button>
</div> -->
</div>
</div>
</template>

3
src/views/modules/shequ/index.vue

@ -823,7 +823,8 @@ export default {
});
}
});
return selectedFuncIdList.map((id) => obj[id]);
console.log('88888888888888888', selectedFuncIdList)
return selectedFuncIdList.filter((id) => obj[id]).map((id) => obj[id]);
},
maxTableHeight() {
// return this.clientHeight - 450;

83
src/views/modules/shequzhili/htgl/cpts/htglInfo.vue

@ -0,0 +1,83 @@
<template>
<div>
<div class="">
<el-row type="flex" >
<el-col :span="24">
<span class="htgl_info_label">所属网格:</span> {{htglDetailData.gridName||'--'}}
</el-col>
</el-row>
<el-row type="flex" >
<el-col :span="24" style="display: flex;">
<span class="htgl_info_label">话题内容:</span> <section style="flex:1">{{htglDetailData.topicContent||'--'}}</section>
</el-col>
</el-row>
<el-row type="flex" >
<el-col :span="24" style="display: flex;">
<span class="img_label">图片:</span>
<section v-for="(item,index) in htglDetailData.topicImages" :key="index" >
<img :src="item" alt="" width="150px" height="75px" style="margin-left:16px;" />
</section>
</el-col>
</el-row>
<el-row type="flex" >
<el-col :span="24">
<span class="htgl_info_label">话题发表人:</span> {{htglDetailData.releaseUserName||'--'}}
</el-col>
</el-row>
<el-row type="flex" >
<el-col :span="24">
<span class="htgl_info_label">发布时间:</span> {{htglDetailData.releaseTime||'--'}}
</el-col>
</el-row>
<el-row type="flex" >
<el-col :span="24">
<span class="htgl_info_label">当前支持:</span>{{htglDetailData.supportCount||'--'}},反对: {{htglDetailData.oppositionCount||'--'}}
</el-col>
</el-row>
</div>
</div>
</template>
<script>
export default {
data() {
return {};
},
props:{
htglDetailData:{
type:Object,
default:{}
},
topicId:{
type:String,
default:''
}
},
created() {},
methods: {},
components: {},
computed: {},
watch: {},
};
</script>
<style lang="scss" scoped>
.img_label{
display: inline-block;
height: 75px;
vertical-align: top;
width: 90px;
text-align: right;
margin-right: 6px;
}
.htgl_info_label{
display: inline-block;
width: 90px;
text-align: right;
margin-right: 6px;
}
</style>

331
src/views/modules/shequzhili/htgl/htgl.vue

@ -0,0 +1,331 @@
<template>
<div class="div_main">
<div class="div_search">
<el-form
:inline="true"
:model="formData"
ref="ref_searchform"
:label-width="'100px'"
>
<div>
<el-form-item label="所属组织" prop="orgId" >
<el-cascader
class="item_width_2"
ref="myCascader"
size="small"
v-model="agencyIdArray"
:options="orgOptions"
:props="orgOptionProps"
:show-all-levels="false"
></el-cascader>
</el-form-item>
<el-form-item label="话题内容" prop="topicContent">
<el-input
class="item_width_2"
size="small"
v-model="formData.topicContent"
clearable
placeholder="请输入"
>
</el-input>
</el-form-item>
<el-form-item label="话题发表人" prop="userName">
<el-input
class="item_width_2"
size="small"
v-model="formData.userName"
clearable
placeholder="请输入"
>
</el-input>
</el-form-item>
<el-form-item label="发布时间" prop="startTime">
<el-date-picker v-model="formData.startDate"
class="item_width_2"
size="small"
type="date"
value-format="yyyy-MM-dd"
value="yyyy-MM-dd"
placeholder="开始时间">
</el-date-picker>
<span class="data-tag"></span>
<el-date-picker v-model="formData.endDate"
class="item_width_2 data-tag"
size="small"
type="date"
value-format="yyyy-MM-dd"
value="yyyy-MM-dd"
placeholder="结束时间">
</el-date-picker>
</el-form-item>
<el-button
style="margin-left: 30px"
size="small"
class="diy-button--search"
@click="handleSearch"
>查询</el-button
>
<el-button
style="margin-left: 10px"
size="small"
class="diy-button--reset"
@click="resetSearch"
>重置</el-button
>
</div>
</el-form>
</div>
<div class="div_table">
<el-table
border
:header-cell-style="{ background: '#2195FE', color: '#FFFFFF' }"
class="table"
:data="tableData"
style="width: 100%"
:height="maxTableHeight"
>
<el-table-column
label="序号"
fixed="left"
type="index"
align="center"
width="50"
/>
<el-table-column
prop="gridName"
align="center"
label="所属网格"
:show-overflow-tooltip="true"
>
</el-table-column>
<el-table-column
prop="topicContent"
label="话题内容"
min-width="150"
align="center"
:show-overflow-tooltip="true"
>
</el-table-column>
<el-table-column
prop="releaseUserName"
align="center"
min-width="150"
label="话题发表人"
:show-overflow-tooltip="true"
>
</el-table-column>
<el-table-column
prop="releaseTime"
align="center"
width="180"
:show-overflow-tooltip="true"
label="发布时间"
>
</el-table-column>
<el-table-column fixed="right" label="操作" align="center" width="100">
<template slot-scope="scope">
<!-- <el-button v-if="scope.row.issueStatus==='voting'&& agencyId===scope.row.orgId"
@click="handleDispose(scope.row)"
type="text" size="small"
class="div-table-button--edit">处理</el-button> -->
<el-button @click="handleWatch(scope.row)" type="text" size="small"
>查看</el-button
>
</template>
</el-table-column>
</el-table>
<div>
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page.sync="pageNo"
:page-sizes="[20, 50, 100, 200]"
:page-size="parseInt(pageSize)"
layout="sizes, prev, pager, next, total"
:total="total"
>
</el-pagination>
</div>
</div>
<el-dialog
title="话题详情"
:visible.sync="dialogVisible"
width="60%"
>
<htgl-info
:htglDetailData="htglDetailData"
:topicId="topicId"
>
</htgl-info>
</el-dialog>
</div>
</template>
<script>
import { mapGetters } from "vuex";
import { requestPost } from "@/js/dai/request";
import htglInfo from "./cpts/htglInfo.vue"
import axios from "axios";
export default {
data() {
return {
orgOptions: [],
orgOptionProps: {
multiple: false,
value: 'agencyId',
label: 'agencyName',
children: 'subAgencyList',
checkStrictly: true
},
formData: {
topicContent: '',
userName: '',
startDate: '',
endDate: '',
},
topicId:'',
tableData:[],
dialogVisible:false,
agencyIdArray: [],
htglDetailData:{},
pageNo: 1,
pageSize: window.localStorage.getItem("pageSize") || 20,
total: 1,
};
},
created() {
this.getTableData()
},
mounted() {
this.getOrgTreeList();
},
methods: {
async getOrgTreeList() {
const url = "/gov/org/customeragency/agencygridtree";
let params = {
agencyId: this.agencyId,
purpose: "query",
};
const { data, code, msg } = await requestPost(url, params);
if (code === 0) {
this.orgOptions = [];
this.orgOptions.push(data);
} else {
this.$message.error(msg);
}
},
handleSizeChange (val) {
this.pageSize = val;
window.localStorage.setItem("pageSize", val);
this.getTableData();
},
handleCurrentChange (val) {
this.pageNo = val;
this.getTableData();
},
handleSearch (val) {
this.pageNo = 1;
this.getTableData();
},
resetSearch () {
this.agencyIdArray = []
this.formData = {
topicContent: '',
userName: '',
startDate: '',
endDate: '',
}
this.pageNo = 1
},
async getTableData () {
const url = "/resi/group/ytTopic/topicList";
var gridId = ''
const { pageSize, pageNo, formData } = this;
if(this.agencyIdArray.length ==1){
gridId = this.agencyIdArray.join()
}else if(this.agencyIdArray.length ==2){
gridId = this.agencyIdArray.splice(1).join()
}else if(this.agencyIdArray.length ==3){
gridId = this.agencyIdArray.splice(2).join()
}else if(this.agencyIdArray.length ==4){
gridId = this.agencyIdArray.splice(3).join()
}else{
this.agencyIdArray = []
}
const { data, code, msg } = await requestPost(url, {
pageSize,
pageNo,
gridId,
source:'1',
...formData,
});
if (code === 0) {
this.total = data.total || 0;
this.tableData = data.list
? data.list.map((item) => {
return item;
})
: [];
} else {
this.$message.error(msg);
}
},
async handleWatch (row) {
this.topicId = row.topicId
this.dialogVisible = true
const url = "/resi/group/ytTopic/topicDetail";
const { data, code, msg } = await requestPost(url, {
topicId: this.topicId,
});
if (code === 0) {
this.htglDetailData = { ...data };
} else {
this.$message.error(msg);
}
},
},
components: {
htglInfo
},
computed: {
maxTableHeight () {
return this.$store.state.inIframe
? this.clientHeight - 360 + this.iframeHeigh
: this.clientHeight - 360;
},
...mapGetters(["clientHeight", "iframeHeight"]),
},
watch: {},
};
</script>
<style lang="scss" scoped>
@import "@/assets/scss/buttonstyle.scss";
@import "@/assets/scss/modules/management/list-main.scss";
@import "@/assets/scss/modules/shequzhili/event-info.scss";
::v-deep .el-row{
margin-bottom: 16px;
}
</style>
Loading…
Cancel
Save