Browse Source

Merge branch 'dev_shequzhili' of http://git.elinkit.com.cn:7070/r/epmet-oper-gov into dev_shequzhili

shibei_master
dai 3 years ago
parent
commit
4d7de9fe11
  1. BIN
      src/assets/img/icon-voice.png
  2. 16
      src/assets/scss/modules/management/list-main.scss
  3. 368
      src/assets/scss/modules/shequzhili/event-info.scss
  4. 40
      src/views/modules/communityService/sqzzz/cpts/edit.vue
  5. 6
      src/views/modules/communityService/sqzzz/index.vue
  6. 612
      src/views/modules/shequzhili/event/cpts/add.vue
  7. 329
      src/views/modules/shequzhili/event/cpts/event-info.vue
  8. 152
      src/views/modules/shequzhili/event/cpts/event-info1.vue
  9. 288
      src/views/modules/shequzhili/event/cpts/issue-info.vue
  10. 154
      src/views/modules/shequzhili/event/cpts/issue-suggest.vue
  11. 137
      src/views/modules/shequzhili/event/cpts/process-form-replay.vue
  12. 248
      src/views/modules/shequzhili/event/cpts/process-form.vue
  13. 154
      src/views/modules/shequzhili/event/cpts/project-evaluation.vue
  14. 703
      src/views/modules/shequzhili/event/cpts/project-info.vue
  15. 644
      src/views/modules/shequzhili/event/eventList.vue

BIN
src/assets/img/icon-voice.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 945 B

16
src/assets/scss/modules/management/list-main.scss

@ -1,6 +1,5 @@
.div_main {
width: 100%;
@ -10,6 +9,16 @@
padding: 20px 20px 5px 15px;
box-shadow: 0px 2px 12px 0px rgba(0, 0, 0, 0.1);
}
.data-tag{
margin-left:10px;
}
.item_width_1{
width: 260px;
}
.item_width_2{
width: 160px;
}
.list_item_width_1 {
width: 165px;
@ -39,6 +48,11 @@
}
.table {
margin-top: 20px;
.img-voice{
width:30px;
height:30px;
}
}
.div_notice {

368
src/assets/scss/modules/shequzhili/event-info.scss

@ -0,0 +1,368 @@
@import "../../c/config";
@import "../../c/function";
.g-add{
.g-add-page{
display: flex;
.g-left {
box-sizing: border-box;
width:40%;
padding: 5px 10px;
}
.g-right {
box-sizing: border-box;
width: 60%;
padding: 5px 10px;
}
.form{
.cell-width-1{
width: 250px
}
.div_map {
position: relative;
}
.div_searchmap {
z-index: 1000;
position: absolute;
top: 5px;
left: 5px;
}
}
}
}
.g-page {
display: flex;
.g-left {
box-sizing: border-box;
width: 65%;
padding: 5px 10px;
}
.g-right {
box-sizing: border-box;
width: 35%;
padding: 5px 10px;
}
}
.g-process-info{
.cell-width-area{
width: 450px
}
}
.div-btn{
margin-top:50px;
display: flex;
justify-content: center;
}
.cell-width-1{
width: 250px
}
.cell-width-2{
width: 350px
}
.cell-width-map {
width: 200px;
}
.item_width_3 {
margin-left: 10px;
width: 150px;
}
.process-form{
margin-top:20px;
}
.m-card {
overflow-x: auto;
}
.m-btns {
display: flex;
justify-content: center;
}
.m-info {
padding-left: 10px;
font-size: 14px;
font-family: PingFang SC;
font-weight: 400;
color: #333;
line-height: 24px;
// width: 500px;
.info-title {
margin-top: 30px;
font-size: 20px;
font-family: PingFang SC;
font-weight: bold;
color: #333;
line-height: 30px;
}
.info-content {
margin: 20px 0;
}
.info-pics {
display: flex;
margin: 20px 0;
img {
display: block;
width: 32%;
height: 90px;
margin-right: 9px;
object-fit: cover;
}
}
.info-prop {
position: relative;
margin: 10px 0;
display: flex;
padding-left: 15px;
.info-title-2 {
width: 70px;
flex: 0 0 1;
font-size: 14px;
}
> span,
> div {
display: block;
// max-width: 300px;
}
&::before {
content: "";
display: block;
position: absolute;
top: 9px;
left: 0;
width: 7px;
height: 7px;
background: #0c81fe;
border-radius: 3px;
margin-right: 10px;
}
}
}
.m-case {
height: 600px;
padding: 20px 0 20px 0;
overflow-y: auto;
}
.m-row {
display: flex;
justify-content: space-between;
}
.m-hint {
position: relative;
height: 300px;
// 暂无数据
img {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
margin: auto;
}
}
.m-line {
min-width: 400px;
.stat {
margin: 20px 0 10px;
display: flex;
.stat-item {
width: 33%;
text-align: center;
div {
font-size: 17px;
font-family: Source Han Serif SC;
font-weight: 500;
color: rgba(#000, 0.5);
line-height: 24px;
&.z-weak {
font-size: 12px;
font-family: Source Han Serif SC;
font-weight: 500;
color: rgba(#000, 0.5);
line-height: 24px;
}
}
}
}
}
.m-tb {
padding-left: 62px;
padding-right: 40px;
}
.m-process {
margin-top: 30px;
margin-left: 15px;
// min-width: 400px;
.process-title {
margin-bottom: 25px;
margin-left: -5px;
font-size: 16px;
font-family: PingFang SC;
font-weight: bold;
color: #333;
line-height: 18px;
}
.list {
position: relative;
box-sizing: border-box;
margin-top: 30px/2;
margin-left: 50px/2;
padding: 0 0 0 30px/2;
width: 680px/2;
border-left: 3px solid #0c81fe;
padding-right: 10px;
&::before {
content: "";
position: absolute;
z-index: 1;
display: block;
top: -2px/2;
left: -2px/2;
width: 5px/2;
height: 20px/2;
background-color: #333;
}
.item {
position: relative;
z-index: 2;
margin-bottom: 8px;
padding-bottom: 8px;
font-size: 16px;
font-family: PingFang SC;
font-weight: 400;
color: #333;
line-height: 24px;
padding-left: 20px;
padding-top: 1px;
&::before {
content: "";
display: block;
position: absolute;
top: -5px;
left: -11px;
width: 18px;
height: 18px;
background: #0c81fe;
border: 4px solid lighten(#0c81fe, 15);
border-radius: 100%;
}
&.z-on {
&::before {
background: #e08400;
border-color: lighten(#e08400, 15);
}
}
&:last-child {
margin-bottom: 0;
padding-bottom: 0;
border-bottom: none;
}
.item-row {
margin-top: -10px;
margin-bottom: 10px;
display: flex;
}
.name {
position: relative;
padding: 0 10px;
font-size: 12px;
font-family: PingFang SC;
font-weight: 500;
color: #fff;
line-height: 22px;
height: 22px;
border-radius: 10px 0 10px 0;
background-color: #0c81fe;
// background-color: #e08400;
}
.date {
margin-left: 10px;
font-size: 12px;
font-family: PingFang SC;
font-weight: 500;
color: #7ca1d2;
line-height: 25px;
}
.detail {
@include cs;
font-size: 14px;
line-height: 20px;
margin-bottom: 5px;
display: flex;
.detail-field {
width: 80px;
text-align: justify;
text-align-last: justify;
}
.detail-value {
// width: 78%;
.detail-link {
display: inline;
}
}
}
.attachement-list {
padding-left: 80px;
a {
display: block;
cursor: pointer;
color: #4df0ff;
font-size: 14px;
i {
color: #333;
}
}
}
}
}
}
.m-top {
display: flex;
}
.m-chart {
min-height: 200px;
}

40
src/views/modules/communityService/sqzzz/cpts/edit.vue

@ -24,7 +24,21 @@
>
</el-input>
</el-form-item>
<el-form-item
label="分类名称 "
prop="categoryCode"
label-width="150px"
style="display: block"
>
<el-select v-model="dataForm.categoryCode" placeholder="请选择" clearable>
<el-option
v-for="item in categoryList"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item
label="组织人数 "
prop="organizationPersonCount"
@ -245,6 +259,7 @@ export default {
orgId: "",
dataForm: {
organizationName: "",
categoryCode: '',
serviceItem: "",
organizationPersonCount: "",
principalName: "",
@ -256,7 +271,8 @@ export default {
latitude: "",
organizationPersonnel: [],
},
};
categoryList: []
}
},
components: {},
computed: {
@ -271,6 +287,9 @@ export default {
trigger: "blur",
},
],
categoryCode: [
{ required: true, message: "分类名称不能为空", trigger: "blur" },
],
organizationPersonCount: [
{ required: true, message: "组织人数不能为空", trigger: "blur" },
],
@ -292,11 +311,26 @@ export default {
props: {},
watch: {},
async created() {
this.getCategoryList()
},
async mounted() {
this.initMap();
this.initMap()
},
methods: {
async getCategoryList() {
const url = '/sys/dict/data/dictlist'
const params = {
dictType: 'self_org_category'
}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.categoryList = data
} else {
this.$message.error(msg)
}
},
handleAddStaff() {
this.dataForm.organizationPersonnel = [
...this.dataForm.organizationPersonnel,

6
src/views/modules/communityService/sqzzz/index.vue

@ -110,6 +110,12 @@
</a>
</template>
</el-table-column>
<el-table-column
prop="categoryName"
align="center"
label="分类名称"
>
</el-table-column>
<el-table-column
prop="organizationPersonCount"
align="center"

612
src/views/modules/shequzhili/event/cpts/add.vue

@ -0,0 +1,612 @@
<template>
<div class="g-add">
<div class="g-add-page">
<div class="g-left">
<el-form ref="ref_form1"
:inline="true"
:model="formData"
:rules="dataRule"
class="form">
<el-form-item label="所属网格 "
prop="gridId"
label-width="150px"
style="display: block">
<el-select v-model.trim="formData.gridId"
placeholder="请选择"
clearable
class="cell-width-1">
<el-option v-for="item in gridList"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="报事人"
prop="name"
label-width="150px"
style="display: block">
<el-input class="cell-width-1"
maxlength="10"
placeholder="请输入报事人姓名"
v-model="formData.name">
</el-input>
</el-form-item>
<el-form-item label="手机号"
prop="mobile"
label-width="150px"
style="display: block">
<el-input class="cell-width-1"
maxlength="30"
placeholder="请输入手机号 "
v-model="formData.mobile">
</el-input>
</el-form-item>
<el-form-item label="身份证号"
prop="idCard"
label-width="150px"
style="display: block">
<el-input class="cell-width-1"
maxlength="30"
placeholder="请输入身份证号"
v-model="formData.idCard"></el-input>
</el-form-item>
<el-form-item label="反应渠道"
label-width="150px"
prop="sourceType">
<el-select v-model="formData.sourceType"
placeholder="请选择"
size="small"
clearable
class="cell-width-1">
<el-option v-for="item in qudaoArray"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="发生时间"
prop="happenTime"
label-width="150px"
style="display: block">
<el-date-picker v-model="formData.happenTime"
class="cell-width-1"
type="datetime"
placeholder="发生时间"
value-format="yyyy-MM-dd hh:mm:ss">
</el-date-picker>
</el-form-item>
<el-form-item label="事件内容"
prop="eventContent"
label-width="150px"
style="display: block">
<el-input class="cell-width-2"
type="textarea"
maxlength="500"
show-word-limit
:rows="5"
placeholder="请输入事件内容,不超过500字"
v-model="formData.eventContent"></el-input>
</el-form-item>
</el-form>
</div>
<div class="g-right">
<el-form ref="ref_form2"
:inline="true"
:model="formData"
:rules="dataRule"
class="form">
<el-form-item label="图片"
label-width="150px"
style="display:block">
<el-upload class="avatar-uploader"
ref="uploadPic"
:action="uploadUlr"
list-type="picture-card"
:on-exceed="exceedPic"
:on-remove="removePic"
:file-list="replayImgList"
:on-success="handleSuccess"
:limit="3">
<span class="font-14">选择图片</span>
<div slot="tip"
class="upload_tip">最多上传3张图片图片支持jpgjpegbmpgit或png格式</div>
</el-upload>
</el-form-item>
<el-form-item label="地理位置"
prop="address"
label-width="150px"
style="display: block">
<el-input class="cell-width-1"
v-model="formData.address">
</el-input>
</el-form-item>
<el-form-item label="位置坐标"
prop="longitude"
label-width="150px"
style="display: block">
<div style="width:500px">
<div class="div_map">
<div id="app">
</div>
<div class="div_searchmap">
<el-input class="cell-width-map"
maxlength="50"
size="mini"
placeholder="请输入关键字"
v-model="keyWords">
</el-input>
<el-button style="margin-left: 10px"
type="primary"
size="mini"
@click="handleSearchMap">查询</el-button>
</div>
</div>
<div style="margin-top: 10px">
<span>经度</span>
<el-input class="item_width_3"
maxlength="50"
placeholder="请输入经度"
v-model="formData.longitude">
</el-input>
<span style="margin-left: 20px">纬度</span>
<el-input class="item_width_3"
maxlength="50"
placeholder="请输入纬度"
v-model="formData.latitude">
</el-input>
</div>
</div>
</el-form-item>
</el-form>
</div>
</div>
</div>
</template>
<script>
import { Loading } from "element-ui"; // Loading
import { requestPost } from "@/js/dai/request";
import formVltHelper from "dai-js/tools/formVltHelper";
import { isCard } from "@/utils/validate";
let loading; //
var map
var search
var markers
var infoWindowList
var geocoder //
function iniFmData () {
return {
gridId: '',//
reportUserId: '',// ID
name: '',//
mobile: '',//
idCard: '',//
sourceType: '',//
happenTime: '',//
eventContent: '',//
imageList: [],//
// categoryList: [],// Id
address: '',//
latitude: '',//
longitude: '',//
// operationType: '',//
// content: '',//
// status: '',// processingclosed_case
};
}
export default {
data () {
return {
formType: "add", // addeditdetail
btnDisable: false,
gridList: [],//list--
qudaoArray: [
{
value: "1",
label: "多媒体反应",
},
{
value: "2",
label: "社区电话",
},
{
value: "3",
label: "12345",
},
{
value: "4",
label: "网络员手持终端",
},
],
aaa: {
aaa: 1
},
formData: iniFmData(),
formDataTemp: {
address: "山东省青岛市市南区徐州路21号戊",
// categoryList: ["1015", "1016"],
eventContent: "asdfasdfasdfasdf",
gridId: "63d5ff92ea981b1c58e4914ac894c610",
happenTime: "2022-05-05 12:00:00",
idCard: "211103190909090909",
imageList: ["https://elink-esua-epdc.oss-cn-qingdao.aliyuncs.com/epmet/test/internal/20220518/0818246db4cc4ac7bcd84bea69a8b38c.png"],
latitude: 36.07120507831775,
longitude: 120.38806572319174,
mobile: "15111111111",
name: "张三",
reportUserId: "",
sourceType: "1",
},
//
keyWords: '',
// oss/file/uploadvariedfile
dialogImageUrl: 'oss/file/uploadvariedfile',
uploadUlr: window.SITE_CONFIG['apiURL'] + '/oss/file/uploadvariedfile',
// upload_url: '', // URL
upload_name: '', //
replayImgList: [],
okflag: false
};
},
components: {},
computed: {
dataRule () {
let checkIdCard = (rule, value, callback) => {
if (value === "") {
callback(new Error("请输入身份证"));
} else {
if (!isCard(value)) {
callback(new Error("身份证号格式不正确"));
}
callback();
}
};
return {
gridId: [
{ required: true, message: "所属网格不能为空", trigger: "blur" },
],
name: [
{ required: true, message: "报事人不能为空", trigger: "blur" },
],
mobile: [{ required: true, message: "手机号不能为空", trigger: "blur" }],
// idCard: [
// { required: true, message: "", trigger: "blur" },
// { required: true, validator: checkIdCard, trigger: "blur" },
// ],
sourceType: [
{ required: true, message: "反映渠道不能为空", trigger: "blur" },
],
eventContent: [
{ required: true, message: "事件内容不能为空", trigger: "blur" },
],
happenTime: [
{ required: true, message: "发生时间不能为空", trigger: "blur" },
],
address: [
{ required: true, message: "事件地址不能为空", trigger: "blur" },
],
longitude: [
{ required: true, message: "坐标位置不能为空", trigger: "blur" },
],
};
},
},
props: {},
watch: {},
async mounted () {
const { user } = this.$store.state
this.agencyId = user.agencyId
this.loadGrid();
this.getCategoryList()
this.initMap()
this.formData = {
...this.formDataTemp
}
},
methods: {
async loadGrid () {
const url = "/gov/org/customergrid/gridoption"
let params = {
agencyId: this.agencyId
}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.gridList = data
} else {
this.$message.error(msg)
}
},
async getCategoryList () {
const url = "/gov/issue/issueprojectcategorydict/list"
let params = {}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
let treeDataNew = this.filterTree(data)
// this.categrayList = data
//
++this.iscascaderShow
this.casOptions = []
this.selCategoryArray = []
this.casOptions = treeDataNew
} else {
this.$message.error(msg)
}
},
//
filterTree (arr) {
let childs = arr
for (let i = childs.length; i--; i > 0) {
if (childs[i].subCategory) {
if (childs[i].subCategory.length) {
this.filterTree(childs[i].subCategory)
} else {
delete childs[i].subCategory
}
}
}
return arr
},
handleChangeAgency (value) {
// this.agencyName = this.$refs["myCascader"].getCheckedNodes()[0].label
// this.orgId = this.selCategoryArray.length > 0 ? this.selCategoryArray[this.selCategoryArray.length - 1] : ''
},
async getEventInfo () {
this.okflag = false
this.$refs["ref_form1"].validate((valid, messageObj) => {
if (!valid) {
app.util.validateRule(messageObj);
return false
} else {
this.$refs["ref_form2"].validate((valid, messageObj) => {
if (!valid) {
app.util.validateRule(messageObj);
return false
} else {
if (!formVltHelper.userOrMobile(this.formData.mobile)) {
this.$message({
type: "error",
message: "手机号格式有误",
});
return false
}
const regCard = /(^\d{15}$)|(^\d{17}(\d|X)$)/; //1518151817X
if (this.formData.idCard && regCard.test(this.formData.idCard) === false) {
this.$message({
type: 'warning',
message: '请输入正确的身份证号码'
})
return false;
}
this.okflag = true
}
});
}
});
},
removePic (file, fileList) {
this.formData.imageList.splice(this.formData.imageList.findIndex(item => item === file.url), 1)
this.replayImgList.splice(this.replayImgList.findIndex(item => item.uid === file.uid), 1)
},
exceedPic () {
this.$message.warning("最多上传3张预览图片")
},
handleSuccess (response, file, fileList) {
this.replayImgList.push(file)
this.formData.imageList.push(response.data.url)
},
// init
initMap () {
//
var center = new window.TMap.LatLng(36.0722275, 120.38945519)
// map TMap.Map()
map = new window.TMap.Map(document.getElementById('app'), {
center: center, //
zoom: 17.2, //
pitch: 43.5, //
rotation: 45 //
})
search = new window.TMap.service.Search({ pageSize: 10 })
//
markers = new TMap.MultiMarker({
map: map,
geometries: []
})
infoWindowList = Array(10)
geocoder = new TMap.service.Geocoder(); //
//
map.on('panend', () => {
this.handleMoveCenter()
})
this.handleMoveCenter()
this.convert()
},
setMarker (lat, lng) {
markers.setGeometries([])
markers.add([
{
id: '4',
styleId: 'marker',
position: new TMap.LatLng(lat, lng),
properties: {
title: 'marker4'
}
}
])
},
handleSearchMap () {
infoWindowList.forEach((infoWindow) => {
infoWindow.close()
})
infoWindowList.length = 0
markers.setGeometries([])
//
search
.searchRectangle({
keyword: this.keyWords,
bounds: map.getBounds()
})
.then((result) => {
let { data } = result
if (Array.isArray(data) && data.length > 0) {
const {
location: { lat, lng }
} = data[0]
map.setCenter(new TMap.LatLng(lat, lng))
this.setMarker(lat, lng)
this.formData.latitude = lat
this.formData.longitude = lng
this.convert()
} else {
this.$message.error('未检索到相关位置坐标')
}
})
},
handleMoveCenter () {
//
const center = map.getCenter()
const lat = center.getLat()
const lng = center.getLng()
this.formData.latitude = lat
this.formData.longitude = lng
this.setMarker(lat, lng)
this.convert(lat, lng)
},
convert (lat, lng) {
markers.setGeometries([]);
// var input = document.getElementById('location').value.split(',');
let location
if (lat && lng) {
location = new TMap.LatLng(lat, lng);
} else {
location = new TMap.LatLng(this.formData.latitude, this.formData.longitude);
}
// map.setCenter(location);
markers.updateGeometries([
{
id: 'main', //
position: location,
},
]);
geocoder
.getAddress({ location: location }) //
.then((result) => {
this.formData.address = result.result.address
//
});
},
resetData () {
this.formData = iniFmData();
},
//
startLoading () {
loading = Loading.service({
lock: true, //
text: "正在加载……", //
background: "rgba(0,0,0,.7)", //
});
},
//
endLoading () {
// clearTimeout(timer);
if (loading) {
loading.close();
}
},
},
};
</script>
<style
lang="scss"
src="@/assets/scss/modules/shequzhili/event-info.scss"
scoped
></style>
<style>
.el-dialog__body {
padding: 0 10px 20px !important;
}
</style>

329
src/views/modules/shequzhili/event/cpts/event-info.vue

@ -0,0 +1,329 @@
<template>
<div class="">
<!-- <div v-show="pageType == 'info'"
class="g-page">
<div class="g-left">
<el-card>
<h3>项目详情</h3>
<div class="m-info">
<div class="info-prop">
<span>项目标题</span>
<span>{{ projectInfo.projectTitle }}</span>
</div>
<div class="info-prop">
<span>项目背景</span>
<span>{{ projectInfo.backGround || "--" }}</span>
</div>
<div class="info-prop">
<span>项目方案</span>
<span>{{ projectInfo.publicReply }}</span>
</div>
<div class="info-prop">
<span>内部备注</span>
<span>{{ projectInfo.internalRemark || "--" }}</span>
</div>
<div class="info-prop"
v-if="projectInfo.departmentNameList.length > 0">
<span>当前处理部门</span>
<span>{{ projectInfo.departmentNameList.join("、") }}</span>
</div>
<div class="info-prop">
<span>项目来源</span>
<a style="cursor: pointer"
@click="handleWatchOrigin">查看项目来源</a>
</div>
<div class="info-prop">
<span>项目评价</span>
<a style="cursor: pointer"
@click="showedEvaluation=true">查看项目评价</a>
</div>
<div class="info-prop"
v-if="projectCate.length > 0">
<span>分类</span>
<fold-text style="width: 300px"
:row="3">
<div :key="item.name"
v-for="item in projectCate">
{{ item.name }}
</div>
</fold-text>
</div>
<div class="info-prop"
v-if="projectTag.length > 0">
<span>标签</span>
<fold-text style="width: 300px"
:row="3">
<div :key="item.name"
v-for="item in projectTag">
{{ item.name }}
</div>
</fold-text>
</div>
</div>
<div class="m-btns">
<el-button size=""
@click="handleClose">关闭</el-button>
</div>
</el-card>
<el-card v-if="type == 'edit'">
<h3>处理</h3>
<div class="m-fm">
<el-form :inline="true"
:model="fmData"
:rules="dataRule"
label-position="left"
label-width="100px">
<el-form-item label="处理:"
prop="operationType">
<el-radio-group v-model="fmData.operationType">
<el-radio :label="3">处理/响应</el-radio>
<el-radio :label="6">结案</el-radio>
<el-radio :label="9">转其他机关/科室</el-radio>
<el-radio :label="10">退回</el-radio>
</el-radio-group>
</el-form-item>
</el-form>
</div>
<div class="m-btns">
<el-button size=""
style="margin-right: 50px"
@click="handleClose">关闭</el-button>
<el-button size=""
type="danger"
@click="handleSubmit">确定</el-button>
</div>
</el-card>
</div>
<div class="g-right">
<el-card class="m-card"
v-if="projectProcess.length > 0">
<h3>处理进展</h3>
<div class="m-process">
<div class="list">
<div class="item"
:class="index === 0 ? 'z-on' : ''"
:key="item.processId"
v-for="(item, index) in projectProcess">
<div class="item-row">
<div class="name">{{ item.processName }}</div>
<div class="date">
{{ item.processTime }}
</div>
</div>
<div class="detail">
<div class="detail-field">处理部门</div>
<div class="detail-value">{{ item.departmentName }}</div>
</div>
<div class="detail"
v-if="item.processName != '转项目' && item.publicReply">
<div class="detail-field"> </div>
<div class="detail-value">
<fold-text :row="3">{{ item.publicReply }}</fold-text>
</div>
</div>
<div class="detail"
v-if="item.processName != '转项目' && item.internalRemark">
<div class="detail-field">内部备注</div>
<div class="detail-value">
<fold-text :row="3">{{ item.internalRemark }}</fold-text>
</div>
</div>
<div class="detail">
<div class="attachement-list">
<a :href="att.url"
target="_blank"
:key="att.url"
v-for="att in item.internalFile">
<i class="el-icon-folder-opened"></i>
{{ att.name }}
</a>
</div>
</div>
</div>
</div>
</div>
</el-card>
</div>
</div> -->
<div v-show="pageType == 'add'">
<el-card>
<event-add ref="ref_add"></event-add>
</el-card>
</div>
<div class="process-form">
<el-card>
<process-form ref="ref_processinfo"></process-form>
<div class="div-btn ">
<el-button size="small"
@click="handleClose">关闭</el-button>
<el-button style="margin-left:20px"
type="primary"
size="small"
@click="handleComfirm">确定</el-button>
</div>
</el-card>
</div>
<!-- <div v-if="pageType == 'origin-info'">
<issue-info v-if="projectInfo.origin == 'issue'"
@close="handleBackInfo"
:issue-id="projectInfo.originId" />
<event-info v-if="projectInfo.origin == 'resi_event'"
@close="handleBackInfo"
:event-id="projectInfo.originId" />
</div> -->
<!-- <div class="m-btns">
<el-button @click="handleClose">关闭</el-button>
</div> -->
<!-- 修改弹出框 -->
<!-- <el-dialog v-if="showedEvaluation"
:visible.sync="showedEvaluation"
:close-on-click-modal="false"
:close-on-press-escape="false"
:title="formTitle"
width="850px"
top="5vh"
class="dialog-h"
@closed="showedEvaluation = false">
<project-evaluation :eventId="projectIdCopy"></project-evaluation>
</el-dialog> -->
</div>
</template>
<script>
import { requestPost } from "@/js/dai/request";
import foldText from "@/views/components/foldText";
import issueInfo from "./issue-info";
import eventInfo from "./event-info1";
import projectEvaluation from "./project-evaluation";
import dateFormat from "dai-js/tools/dateFormat";
import eventAdd from "./add";
import processForm from "./process-form";
function iniData () {
return {
formData: {
operationType: '',
categoryList: []
},
eventInfoData: {},
replayInfo: {},
demand: {},
project: {},
};
}
export default {
name: "projectInfo",
props: {
eventId: {
type: String,
default: "",
},
pageType: {
type: String,
default: "",
},
},
components: {
foldText,
issueInfo,
eventInfo,
projectEvaluation,
eventAdd,
processForm,
},
data: iniData,
computed: {},
watch: {
eventId () {
let data = iniData();
Object.keys(data).forEach((k) => {
this[k] = data[k];
});
this.getApiData();
},
},
mounted () {
},
methods: {
handleComfirm () {
if (this.pageType === 'add') {
this.$refs.ref_add.getEventInfo()
if (this.$refs.ref_add.okflag) {
this.eventInfoData = this.$refs.ref_add.formData
} else {
return false
}
console.log('eventInfo', this.eventInfoData)
}
this.$refs.ref_processinfo.getProcessInfo()
if (this.$refs.ref_processinfo.okflag) {
this.formData.operationType = this.$refs.ref_processinfo.operationType
this.formData.categoryList = this.$refs.ref_processinfo.categoryList
if (this.formData.operationType === '0') {
this.replayInfo = this.$refs.ref_processinfo.replayInfo
console.log('replayInfo', this.replayInfo)
} else if (this.formData.operationType === '1') {
this.demand = this.$refs.ref_processinfo.replayInfo
} else if (this.formData.operationType === '2') {
this.project = this.$refs.ref_processinfo.replayInfo
}
} else {
return false
}
this.formData = {
...this.eventInfoData,
replayInfo: this.replayInfo,
project: this.project,
demand: this.demand
}
console.log('this.formData', this.formData)
},
handleClose () {
if (this.pageType === 'add') {
this.eventInfo = this.$refs.ref_add.resetData()
}
this.$emit("handleClose");
}
},
};
</script>
<style
lang="scss"
src="@/assets/scss/modules/shequzhili/event-info.scss"
scoped
></style>

152
src/views/modules/shequzhili/event/cpts/event-info1.vue

@ -0,0 +1,152 @@
<template>
<div class="">
<div class="g-page" v-show="pageType == 'info'">
<div class="g-left">
<el-card>
<h3>事件详情</h3>
<div class="m-row">
<div class="m-info">
<div class="info-title">事件内容</div>
<div class="info-content">{{ info.eventContent }}</div>
<div class="info-pics">
<img
:src="src"
:key="src"
v-for="src in info.eventImgs"
@click="watchImg(src)"
/>
</div>
<div class="info-prop">
<span class="info-title-2">提交时间</span>
<span>{{ info.eventTime }}</span>
</div>
<div class="info-prop">
<span class="info-title-2">报事人</span>
<span>{{ info.eventPeopleName }}</span>
</div>
<div class="info-prop">
<span class="info-title-2">所属网格</span>
<span>{{ info.gridName }}</span>
</div>
<div class="info-prop">
<span class="info-title-2">提报给</span>
<div>
<div>{{ info.eventPersonShow }}</div>
<div>{{ info.eventOrgShow }}</div>
</div>
<!-- <span>{{ info.eventPerson.join("、") || "--" }}</span> -->
</div>
</div>
</div>
<div class="m-btns" v-if="type == 'info'">
<el-button size="" @click="handleClose">关闭</el-button>
</div>
</el-card>
</div>
<div class="g-right"></div>
</div>
</div>
</template>
<script>
import { requestPost } from "@/js/dai/request";
import foldText from "@/views/components/foldText";
import dateFormat from "dai-js/tools/dateFormat";
function iniData() {
return {
pageType: "info",
eventInfo: {
eventTime: "",
eventContent: "",
eventAddress: "",
gridName: "",
isClosed: true,
isResolve: true,
isRollback: true,
eventImgs: [],
eventPerson: [],
eventOrg: [],
eventPeopleName: "",
projectInfo: {
projectId: "",
operationName: "",
operationTime: "",
projectDeclare: "",
},
},
};
}
export default {
name: "issueInfo",
props: {
eventId: {
type: String,
default: "64502a8f1048a7240295527a9b32e513",
},
type: {
type: String,
default: "info",
},
},
components: {
foldText,
},
data: iniData,
computed: {},
watch: {},
mounted() {
this.getApiData();
},
methods: {
watchImg(src) {
window.open(src);
},
handleClose() {
this.$emit("close");
},
async getApiData() {
this.getEventInfo();
},
//
async getEventInfo() {
const url = "/gov/project/resievent/eventdetail-icdata";
const { data, code, msg } = await requestPost(url, {
resiEventId: this.projectInfo.originId,
});
if (code === 0) {
if (data.eventOrg && data.eventOrg.length > 0) {
data.eventOrgShow = data.eventOrg.join("、");
}
if (data.eventPerson && data.eventPerson.length > 0) {
data.eventPersonShow = data.eventPerson.join("、");
}
this.info = { ...data };
} else {
this.$message.error(msg);
}
},
},
};
</script>
<style
lang="scss"
src="@/assets/scss/modules/shequzhili/project-info.scss"
scoped
></style>

288
src/views/modules/shequzhili/event/cpts/issue-info.vue

@ -0,0 +1,288 @@
<template>
<div class="">
<div class="g-page" v-show="pageType == 'info'">
<div class="g-left">
<el-card>
<h3>议题详情</h3>
<div class="m-row">
<div class="m-info">
<div class="info-prop">
<span>议题标题</span>
<span>{{ issueInfo.issueTitle }}</span>
</div>
<div class="info-prop">
<span>议题建议</span>
<span>{{ issueInfo.issueSuggestion }}</span>
</div>
<div class="info-prop">
<span>所属网格</span>
<span>{{ issueInfo.belongsGridName || "--" }}</span>
</div>
<div class="info-prop">
<span>议题发起人</span>
<span>{{ issueInfo.issueInitiator }}</span>
</div>
<div
v-if="issueInfo.topicInfo && issueInfo.topicInfo.groupName"
class="info-prop"
>
<span>议题来源</span>
<span>{{ issueInfo.topicInfo.groupName }}</span>
</div>
<div class="info-prop">
<span>转议题时间</span>
<span>{{ issueInfo.shiftIssueTime }}</span>
</div>
</div>
<div class="m-line">
<div class="stat">
<div class="stat-item">
<div>
{{ issueTrend.realityVoteCount }}/{{
issueTrend.shouldVoteCount
}}
</div>
<div class="z-weak">已表决/应表决</div>
</div>
<div class="stat-item">
<div>{{ issueTrend.supportAmount }}</div>
<div class="z-weak">支持</div>
</div>
<div class="stat-item">
<div>{{ issueTrend.oppositionAmount }}</div>
<div class="z-weak">反对</div>
</div>
</div>
<div v-if="issueChartData.length > 0" class="m-chart">
<line-chart :list="issueChartData" />
</div>
</div>
</div>
<div class="m-btns" v-if="type == 'info'">
<el-button size="" @click="handleClose">关闭</el-button>
</div>
</el-card>
</div>
<div class="g-right">
<el-card class="m-card" v-if="issueProcess.length > 0">
<h3>处理进展</h3>
<div class="m-process">
<div class="list">
<div
class="item"
:class="index === 0 ? 'z-on' : ''"
:key="item.processId"
v-for="(item, index) in issueProcess"
>
<div class="item-row">
<div class="name">{{ item.processName }}</div>
<div class="date">
{{ item.processTime }}
</div>
</div>
<div class="detail">
<div class="detail-field">处理部门</div>
<div class="detail-value">{{ item.departmentName }}</div>
</div>
<div
class="detail"
v-if="item.processName != '转项目' && item.publicReply"
>
<div class="detail-field"> </div>
<div class="detail-value">
<fold-text :row="3">{{ item.publicReply }}</fold-text>
</div>
</div>
<div
class="detail"
v-if="item.processName != '转项目' && item.internalRemark"
>
<div class="detail-field">内部备注</div>
<div class="detail-value">
<fold-text :row="3">{{ item.internalRemark }}</fold-text>
</div>
</div>
<div class="detail">
<div class="attachement-list">
<a
:href="att.url"
target="_blank"
:key="att.url"
v-for="att in item.internalFile"
>
<i class="el-icon-folder-opened"></i>
{{ att.name }}
</a>
</div>
</div>
</div>
</div>
</div>
</el-card>
</div>
</div>
</div>
</template>
<script>
import { requestPost } from "@/js/dai/request";
import foldText from "@/views/components/foldText";
import dateFormat from "dai-js/tools/dateFormat";
import lineChart from "@/views/modules/visual/cpts/line-chart";
function iniData() {
return {
pageType: "info",
issueProcess: [],
issueInfo: {
attitude: "",
belongsGridName: "",
issueIdea: "",
issueInitiator: "",
issueStatus: "",
issueSuggestion: "",
issueTitle: "",
joinVote: true,
projectId: "",
projectStatus: false,
publishIdeaFlag: false,
},
issueTrend: {},
issueChartData: [],
};
}
export default {
name: "issueInfo",
props: {
issueId: {
type: String,
default: "64502a8f1048a7240295527a9b32e513",
},
type: {
type: String,
default: "info",
},
},
components: {
foldText,
lineChart,
},
data: iniData,
computed: {},
watch: {},
mounted() {
this.getApiData();
},
methods: {
watchImg(src) {
window.open(src);
},
handleClose() {
this.$emit("close");
},
handleSubmit() {
this.$emit("afterEdit");
},
async getApiData() {
this.getIssueInfo();
this.getIssueTrend();
this.getIssueProcess();
},
//
async getIssueInfo() {
const url = "/resi/hall/issue/detail";
const { data, code, msg } = await requestPost(url, {
issueId: this.issueId,
});
if (code === 0) {
this.issueInfo = data;
} else {
this.$message.error(msg);
}
},
//
async getIssueTrend() {
const url = "/resi/hall/issue/votingtrend";
const { data, code, msg } = await requestPost(url, {
issueId: this.issueId,
});
if (code === 0) {
this.issueTrend = data;
let chartData = [];
data.polyLine.forEach((item) => {
let date = dateFormat(new Date(item.voteDate * 1000), "yyyy-MM-dd");
// console.log("date:" + date);
chartData.push(
{
date,
value: item.supportIncrement,
type: "支持",
},
{
date,
value: item.oppositionIncrement,
type: "反对",
}
);
});
this.issueChartData = chartData;
} else {
this.$message.error(msg);
}
},
//
async getIssueProcess() {
const url = "/gov/issue/manage/progress";
const { data, code, msg } = await requestPost(url, {
issueId: this.issueId,
});
if (code === 0) {
this.issueProcess = data.map((item) => {
item.processTime = dateFormat(
new Date(item.processTime * 1000),
"yyyy-MM-dd hh:mm"
);
return item;
});
} else {
this.$message.error(msg);
}
},
},
};
</script>
<style
lang="scss"
src="@/assets/scss/modules/shequzhili/project-info.scss"
scoped
></style>

154
src/views/modules/shequzhili/event/cpts/issue-suggest.vue

@ -0,0 +1,154 @@
<template>
<div class="" style="padding: 0 20px 10px">
<h2>项目评价</h2>
<el-table
:data="tableData"
border
style="width: 100%"
class="resi-table"
:height="maxTableHeight"
>
<el-table-column
label="序号"
fixed="left"
type="index"
align="center"
width="50"
/>
<el-table-column
prop="evaluationUser"
align="center"
label="评价人"
:show-overflow-tooltip="true"
>
</el-table-column>
<el-table-column
prop="time"
label="评价时间"
align="center"
:show-overflow-tooltip="true"
>
</el-table-column>
<el-table-column
prop="content"
align="center"
label="评价内容 "
:show-overflow-tooltip="true"
>
</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>
</template>
<script>
import { requestPost } from "@/js/dai/request";
import dateFormat from "dai-js/tools/dateFormat";
function iniData() {
return {
pageNo: 1,
pageSize: window.localStorage.getItem("pageSize") || 20,
total: 1,
tableData: [],
};
}
export default {
name: "projectEvaluation",
props: {
projectId: {
type: String,
default: "64502a8f1048a7240295527a9b32e513",
},
},
components: {},
data: iniData,
computed: {},
watch: {
projectId() {
let data = iniData();
Object.keys(data).forEach((k) => {
this[k] = data[k];
});
this.getApiData();
},
},
mounted() {
this.getApiData();
},
methods: {
watchImg(src) {
window.open(src);
},
handleClose() {
this.$emit("close");
},
handleSizeChange(val) {
console.log(`每页 ${val}`);
this.pageSize = val;
window.localStorage.setItem("pageSize", val);
this.getTableData();
},
handleCurrentChange(val) {
console.log(`当前页: ${val}`);
this.pageNo = val;
this.getTableData();
},
async getApiData() {
await this.getTableData();
},
async getTableData() {
// const url = "/gov/project/project/satisfaction-evaluation-list";
const url =
"http://yapi.elinkservice.cn/mock/245/gov/project/project/satisfaction-evaluation-list";
const { pageSize, pageNo, fmData } = this;
const { data, code, msg } = await requestPost(url, {
pageSize,
pageNo,
...fmData,
});
if (code === 0) {
console.log("列表请求成功!!!!!!!!!!!!!!");
this.total = data.total || 0;
this.tableData = data.list
? data.list.map((item) => {
return item;
})
: [];
} else {
}
},
},
};
</script>
<style
lang="scss"
src="@/assets/scss/modules/shequzhili/project-info.scss"
scoped
></style>

137
src/views/modules/shequzhili/event/cpts/process-form-replay.vue

@ -0,0 +1,137 @@
<template>
<div class="">
<el-form ref="ref_form1"
:inline="false"
:model="formData"
:rules="dataRule"
class="form">
<el-form-item label="回复内容"
prop="content"
label-width="150px"
style="display: block">
<el-input class="cell-width-area"
type="textarea"
maxlength="500"
show-word-limit
:rows="5"
placeholder="请输入回复内容,不超过500字"
v-model="formData.content"></el-input>
</el-form-item>
<el-form-item label=""
label-width="150px"
style="display: block">
<el-checkbox v-model="status">已完成</el-checkbox>
</el-form-item>
</el-form>
</div>
</template>
<script>
import { Loading } from "element-ui"; // Loading
import { requestPost } from "@/js/dai/request";
import formVltHelper from "dai-js/tools/formVltHelper";
import { isCard } from "@/utils/validate";
let loading; //
export default {
data () {
return {
btnDisable: false,
formData: {
content: '',
status: ''
},
status: false,
okflag: false
};
},
components: {},
computed: {
dataRule () {
return {
content: [
{ required: true, message: "回复内容不能为空", trigger: "blur" },
],
};
},
},
props: {},
watch: {},
async mounted () {
},
methods: {
async getReplayInfo () {
this.okflag = false
this.$refs["ref_form1"].validate((valid, messageObj) => {
if (!valid) {
app.util.validateRule(messageObj);
} else {
if (this.status) {
this.formData.status = 'closed_case'
} else {
this.formData.status = 'processing'
}
this.okflag = true
}
});
},
resetData () {
},
//
startLoading () {
loading = Loading.service({
lock: true, //
text: "正在加载……", //
background: "rgba(0,0,0,.7)", //
});
},
//
endLoading () {
// clearTimeout(timer);
if (loading) {
loading.close();
}
},
},
};
</script>
<style
lang="scss"
src="@/assets/scss/modules/shequzhili/event-info.scss"
scoped
></style>
<style>
.el-dialog__body {
padding: 0 10px 20px !important;
}
</style>

248
src/views/modules/shequzhili/event/cpts/process-form.vue

@ -0,0 +1,248 @@
<template>
<div class="">
<div class="g-process-info">
<el-form ref="ref_form1"
:inline="false"
:rules="dataRule"
class="form">
<el-form-item label="分类"
label-width="150px"
prop="categoryList">
<el-cascader class="cell-width-2"
ref="myCascader"
v-model="selCategoryArray"
:key="iscascaderShow"
:options="casOptions"
:props="optionProps"
:show-all-levels="false"></el-cascader>
</el-form-item>
<el-form-item label="处理方式"
label-width="150px"
prop="operationType">
<el-radio-group v-model="operationType">
<el-radio label="0">回复</el-radio>
<el-radio label="1">立项</el-radio>
<el-radio label="2">转需求</el-radio>
</el-radio-group>
</el-form-item>
</el-form>
<div v-if="operationType==='0'">
<process-form-replay ref="ref_process_form_replay"></process-form-replay>
</div>
<div v-if="operationType==='1'"></div>
<div v-if="operationType==='2'"></div>
</div>
</div>
</template>
<script>
import { Loading } from "element-ui"; // Loading
import { requestPost } from "@/js/dai/request";
import processFormReplay from "./process-form-replay";
let loading; //
export default {
data () {
return {
btnDisable: false,
gridList: [],//list--
categrayList: [],
casOptions: [],
iscascaderShow: 0,
selCategoryArray: [
],
optionProps: {
multiple: true,
value: 'id',
label: 'name',
children: 'subCategory',
},
operationType: '0',
categoryList: [],
replayInfo: {},
demand: {},
project: {},
okflag: false
};
},
components: {
processFormReplay
},
computed: {
dataRule () {
return {
categoryList: [
{ required: true, message: "分类不能为空", trigger: "blur" },
],
operationType: [
{ required: true, message: "处理方式不能为空", trigger: "blur" },
],
};
},
},
props: {},
watch: {},
async mounted () {
const { user } = this.$store.state
this.agencyId = user.agencyId
this.loadGrid();
this.getCategoryList()
},
methods: {
async loadGrid () {
const url = "/gov/org/customergrid/gridoption"
let params = {
agencyId: this.agencyId
}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.gridList = data
} else {
this.$message.error(msg)
}
},
async getCategoryList () {
const url = "/gov/issue/issueprojectcategorydict/list"
let params = {}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
let treeDataNew = this.filterTree(data)
// this.categrayList = data
//
++this.iscascaderShow
this.casOptions = []
this.selCategoryArray = [["1001", "1015"], ["1001", "1016"], ["1001", "1017"]]
this.casOptions = treeDataNew
} else {
this.$message.error(msg)
}
},
//
filterTree (arr) {
let childs = arr
for (let i = childs.length; i--; i > 0) {
if (childs[i].subCategory) {
if (childs[i].subCategory.length) {
this.filterTree(childs[i].subCategory)
} else {
delete childs[i].subCategory
}
}
}
return arr
},
async getProcessInfo () {
this.okflag = false
let catelist = []
if (this.selCategoryArray.length === 0) {
this.$message({
type: "error",
message: "请选择分类",
});
this.okflag = false
return false
}
console.log(this.selCategoryArray)
this.selCategoryArray.forEach(element => {
let array = element[1]
catelist.push(array)
});
this.categoryList = catelist
if (this.operationType === '0') {
this.$refs.ref_process_form_replay.getReplayInfo()
if (this.$refs.ref_process_form_replay.okflag) {
this.replayInfo = this.$refs.ref_process_form_replay.formData
this.okflag = true
} else {
return false
}
} else if (this.operationType === '1') {
} else if (this.operationType === '2') {
}
},
handleCancle () {
this.resetData();
},
resetData () {
},
//
startLoading () {
loading = Loading.service({
lock: true, //
text: "正在加载……", //
background: "rgba(0,0,0,.7)", //
});
},
//
endLoading () {
// clearTimeout(timer);
if (loading) {
loading.close();
}
},
},
};
</script>
<style
lang="scss"
src="@/assets/scss/modules/shequzhili/event-info.scss"
scoped
></style>
<style>
.el-dialog__body {
padding: 0 10px 20px !important;
}
</style>

154
src/views/modules/shequzhili/event/cpts/project-evaluation.vue

@ -0,0 +1,154 @@
<template>
<div class="" style="padding: 0 20px 10px">
<h2>项目评价</h2>
<el-table
:data="tableData"
border
style="width: 100%"
class="resi-table"
:height="maxTableHeight"
>
<el-table-column
label="序号"
fixed="left"
type="index"
align="center"
width="50"
/>
<el-table-column
prop="evaluationUser"
align="center"
label="评价人"
:show-overflow-tooltip="true"
>
</el-table-column>
<el-table-column
prop="time"
label="评价时间"
align="center"
:show-overflow-tooltip="true"
>
</el-table-column>
<el-table-column
prop="content"
align="center"
label="评价内容 "
:show-overflow-tooltip="true"
>
</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>
</template>
<script>
import { requestPost } from "@/js/dai/request";
import dateFormat from "dai-js/tools/dateFormat";
function iniData() {
return {
pageNo: 1,
pageSize: window.localStorage.getItem("pageSize") || 20,
total: 1,
tableData: [],
};
}
export default {
name: "projectEvaluation",
props: {
projectId: {
type: String,
default: "64502a8f1048a7240295527a9b32e513",
},
},
components: {},
data: iniData,
computed: {},
watch: {
projectId() {
let data = iniData();
Object.keys(data).forEach((k) => {
this[k] = data[k];
});
this.getApiData();
},
},
mounted() {
this.getApiData();
},
methods: {
watchImg(src) {
window.open(src);
},
handleClose() {
this.$emit("close");
},
handleSizeChange(val) {
console.log(`每页 ${val}`);
this.pageSize = val;
window.localStorage.setItem("pageSize", val);
this.getTableData();
},
handleCurrentChange(val) {
console.log(`当前页: ${val}`);
this.pageNo = val;
this.getTableData();
},
async getApiData() {
await this.getTableData();
},
async getTableData() {
// const url = "/gov/project/project/satisfaction-evaluation-list";
const url =
"http://yapi.elinkservice.cn/mock/245/gov/project/project/satisfaction-evaluation-list";
const { pageSize, pageNo, fmData } = this;
const { data, code, msg } = await requestPost(url, {
pageSize,
pageNo,
...fmData,
});
if (code === 0) {
console.log("列表请求成功!!!!!!!!!!!!!!");
this.total = data.total || 0;
this.tableData = data.list
? data.list.map((item) => {
return item;
})
: [];
} else {
}
},
},
};
</script>
<style
lang="scss"
src="@/assets/scss/modules/shequzhili/project-info.scss"
scoped
></style>

703
src/views/modules/shequzhili/event/cpts/project-info.vue

@ -1,703 +0,0 @@
<template>
<div class="m-pop">
<div class="wrap">
<cpt-card>
<div class="title">
<img src="@/assets/img/shuju/title-tip.png" />
<span>项目详情</span>
</div>
<div class="btn-close" @click="handleClose">
<img src="@/assets/img/shuju/people/close.png" />
</div>
<div class="m-top">
<div class="m-info">
<div class="info-prop">
<span>项目标题</span>
<span>{{ projectInfo.projectTitle }}</span>
</div>
<div class="info-prop">
<span>项目背景</span>
<span>{{ projectInfo.backGround }}</span>
</div>
<div class="info-prop">
<span>项目方案</span>
<span>{{ projectInfo.publicReply }}</span>
</div>
<div class="info-prop">
<span>内部备注</span>
<span>{{ projectInfo.internalRemark || "--" }}</span>
</div>
<div class="info-prop">
<span>当前处理部门</span>
<span>{{ projectInfo.departmentNameList.join("、") }}</span>
</div>
<div class="info-prop" v-if="projectCate.length > 0">
<span>分类</span>
<fold-text :row="3">
<div :key="item.name" v-for="item in projectCate">
{{ item.name }}
</div>
</fold-text>
</div>
<div class="info-prop" v-if="projectTag.length > 0">
<span>标签</span>
<fold-text :row="3">
<div :key="item.name" v-for="item in projectTag">
{{ item.name }}
</div>
</fold-text>
</div>
</div>
<div class="m-process" v-if="projectProcess.length > 0">
<div class="process-title">处理进展</div>
<div class="list">
<div
class="item"
:class="index === 0 ? 'z-on' : ''"
:key="item.processId"
v-for="(item, index) in projectProcess"
>
<div class="item-row">
<div class="name">{{ item.processName }}</div>
<div class="date">
{{ item.processTime }}
</div>
</div>
<div class="detail">
<div class="detail-field">处理部门</div>
<div class="detail-value">{{ item.departmentName }}</div>
</div>
<div
class="detail"
v-if="item.processName != '转项目' && item.publicReply"
>
<div class="detail-field"> </div>
<div class="detail-value">
<fold-text :row="3">{{ item.publicReply }}</fold-text>
</div>
</div>
<div
class="detail"
v-if="item.processName != '转项目' && item.internalRemark"
>
<div class="detail-field">内部备注</div>
<div class="detail-value">
<fold-text :row="3">{{ item.internalRemark }}</fold-text>
</div>
</div>
<div class="detail">
<div class="attachement-list">
<a
:href="att.url"
target="_blank"
:key="att.url"
v-for="att in item.internalFile"
>
<i class="el-icon-folder-opened"></i>
{{ att.name }}
</a>
</div>
</div>
</div>
</div>
</div>
</div>
<div v-if="projectInfo.origin !== 'agency'" class="tabs">
<div
class="tab-btn"
@click="subStartGroupIndex"
v-if="groupList.length > 9"
>
<img src="@/assets/img/shuju/people/arrow-double-left.png" />
</div>
<div
v-show="index >= startGroupIndex && index < startGroupIndex + 9"
class="tab"
:class="groupIndex % groupList.length == index ? 'z-on' : ''"
:key="'tab' + index"
@click="groupIndex = index"
v-for="(item, index) in groupList"
>
{{ item.label }}
</div>
<div
class="tab-btn"
@click="addStartGroupIndex"
v-if="groupList.length > 9"
>
<img src="@/assets/img/shuju/people/arrow-double-right.png" />
</div>
</div>
<div class="m-case" v-if="projectInfo.origin !== 'agency'">
<div class="m-yanpan" v-if="groupIndex == 0">
<div v-if="projectId || true">
<screen-loading v-if="!yanPan.loading">加载中</screen-loading>
<analyse
v-else-if="yanPan.singleTitle"
:singleTitle="yanPan.singleTitle"
:moreTitle="yanPan.moreTitle"
:userList="yanPan.homeUserList"
:userName="yanPan.icUserName"
:singleList="yanPan.singleList"
:hasEvent="yanPan.hasEvent"
:moreList="yanPan.moreList"
@user="toUserInfo"
@project="toProjectInfo"
/>
<div v-else class="m-hint">
<img
src="@/assets/img/modules/visual/noData.png"
class="no-data-img"
/>
</div>
</div>
</div>
<div v-if="groupIndex == 1">
<div
class="m-row"
v-if="projectInfo.originId && projectInfo.origin !== 'work_event'"
>
<div v-if="projectInfo.origin === 'issue'" class="m-info">
<div class="info-prop">
<span>议题标题</span>
<span>{{ issueInfo.issueTitle }}</span>
</div>
<div class="info-prop">
<span>议题建议</span>
<span>{{ issueInfo.issueSuggestion }}</span>
</div>
<div class="info-prop">
<span>所属网格</span>
<span>{{ issueInfo.belongsGridName || "--" }}</span>
</div>
<div class="info-prop">
<span>议题发起人</span>
<span>{{ issueInfo.issueInitiator }}</span>
</div>
<div
v-if="issueInfo.topicInfo && issueInfo.topicInfo.groupName"
class="info-prop"
>
<span>议题来源</span>
<span>{{ issueInfo.topicInfo.groupName }}</span>
</div>
<div class="info-prop">
<span>转议题时间</span>
<span>{{ issueInfo.shiftIssueTime }}</span>
</div>
</div>
<div v-if="projectInfo.origin === 'resi_event'" class="m-info">
<div class="info-title">事件内容</div>
<div class="info-content">{{ info.eventContent }}</div>
<div class="info-pics">
<img
:src="src"
:key="src"
v-for="src in info.eventImgs"
@click="watchImg(src)"
/>
</div>
<div class="info-prop">
<span class="info-title-2">提交时间</span>
<span>{{ info.eventTime }}</span>
</div>
<div class="info-prop">
<span class="info-title-2">报事人</span>
<span>{{ info.eventPeopleName }}</span>
</div>
<div class="info-prop">
<span class="info-title-2">所属网格</span>
<span>{{ info.gridName }}</span>
</div>
<div class="info-prop">
<span class="info-title-2">提报给</span>
<div>
<div>{{ info.eventPersonShow }}</div>
<div>{{ info.eventOrgShow }}</div>
</div>
<!-- <span>{{ info.eventPerson.join("、") || "--" }}</span> -->
</div>
</div>
<div v-if="projectInfo.origin === 'issue'" class="m-line">
<div class="stat">
<div class="stat-item">
<div>
{{ issueTrend.realityVoteCount }}/{{
issueTrend.shouldVoteCount
}}
</div>
<div class="z-weak">已表决/应表决</div>
</div>
<div class="stat-item">
<div>{{ issueTrend.supportAmount }}</div>
<div class="z-weak">支持</div>
</div>
<div class="stat-item">
<div>{{ issueTrend.oppositionAmount }}</div>
<div class="z-weak">反对</div>
</div>
</div>
<line-chart
v-if="issueChartData.length > 0"
:list="issueChartData"
/>
</div>
</div>
<div v-else class="m-hint">
<img
src="@/assets/img/modules/visual/noData.png"
class="no-data-img"
/>
</div>
</div>
</div>
</cpt-card>
</div>
</div>
</template>
<script>
import cptCard from "@/views/modules/visual/cpts/card";
import screenLoading from "@/views/modules/visual/cpts/loading";
import { requestPost } from "@/js/dai/request";
import cptTb from "@/views/modules/visual/cpts/tb";
import lineChart from "@/views/modules/visual/cpts/line-chart";
import analyse from "@/views/modules/visual/cpts/analyse";
import foldText from "@/views/components/foldText";
import dateFormat from "dai-js/tools/dateFormat";
function iniData() {
return {
projectIdCopy: this.projectId,
groupList: [{ label: "研判分析" }, { label: "项目来源" }],
groupIndex: 0,
startGroupIndex: 0,
projectProcess: [],
projectInfo: {
backGround: "",
departmentList: [
// { departmentName: "-", staffList: [""] },
],
departmentNameList: [],
internalRemark: "",
isSend: false,
locateAddress: "",
locateDimension: "",
locateLongitude: "",
origin: "",
originId: "",
platformIds: [],
processable: false,
projectId: "",
projectStatus: "pending",
projectTitle: "",
publicReply: "",
returnable: false,
},
issueInfo: {
attitude: "",
belongsGridName: "",
issueIdea: "",
issueInitiator: "",
issueStatus: "",
issueSuggestion: "",
issueTitle: "",
joinVote: true,
projectId: "",
projectStatus: false,
publishIdeaFlag: false,
},
issueTrend: {},
issueChartData: [],
eventInfo: {
eventTime: "",
eventContent: "",
eventAddress: "",
gridName: "",
isClosed: true,
isResolve: true,
isRollback: true,
eventImgs: [],
eventPerson: [],
eventOrg: [],
eventPeopleName: "",
projectInfo: {
projectId: "",
operationName: "",
operationTime: "",
projectDeclare: "",
},
},
projectCate: [],
projectTag: [],
yanPan: {
loading: false,
icResiUserId: "",
houseId: "",
icUserName: "",
homeUserList: [
// {
// homeId: '',
// icUserId: '',
// icUserName: '',
// }
],
projectData: [
// {
// firstCategoryCode: '',
// firstCategoryName: '',
// projectList: [],
// }
],
hasEvent: false,
singleTitle: "",
moreTitle: "",
singleList: [], //
moreList: [], //
},
};
}
export default {
name: "demandInfo",
props: {
projectId: {
type: String,
default: "",
},
userId: {
type: String,
default: "",
},
categoryCodes: {
type: Array,
default: [],
},
},
components: {
cptCard,
cptTb,
analyse,
screenLoading,
lineChart,
foldText,
},
data: iniData,
computed: {},
watch: {
projectId() {
let data = iniData();
Object.keys(data).forEach((k) => {
this[k] = data[k];
});
this.getApiData();
},
// projectIdCopy () {
// },
},
mounted() {
console.log(this.projectIdCopy);
this.getApiData();
},
methods: {
watchImg(src) {
window.open(src);
},
addStartGroupIndex() {
const { startGroupIndex, groupList } = this;
if (startGroupIndex < groupList.length - 9) {
this.startGroupIndex = startGroupIndex + 1;
} else {
this.startGroupIndex = groupList.length - 9;
}
},
subStartGroupIndex() {
const { startGroupIndex, groupList } = this;
if (startGroupIndex > 0) {
this.startGroupIndex = startGroupIndex - 1;
} else {
this.startGroupIndex = 0;
}
},
handleClose() {
this.$emit("close");
},
async getApiData() {
await this.getProjectInfo();
this.getProjectCate();
this.getProjectProcess();
if (this.projectInfo.origin === "issue") {
this.getIssueInfo();
this.getIssueTrend();
} else if (this.projectInfo.origin === "resi_event") {
this.getEventInfo();
}
if (this.projectInfo.origin !== "agency") {
await this.getYanPan();
}
},
//
async getProjectInfo() {
const url = "/gov/project/trace/projectdetail";
const { data, code, msg } = await requestPost(url, {
projectId: this.projectIdCopy,
});
if (code === 0) {
this.projectInfo = data;
} else {
this.$message.error(msg);
}
},
//
async getIssueInfo() {
const url = "/resi/hall/issue/detail";
const { data, code, msg } = await requestPost(url, {
issueId: this.projectInfo.originId,
});
if (code === 0) {
this.issueInfo = data;
} else {
this.$message.error(msg);
}
},
//
async getIssueTrend() {
const url = "/resi/hall/issue/votingtrend";
const { data, code, msg } = await requestPost(url, {
issueId: this.projectInfo.originId,
});
if (code === 0) {
this.issueTrend = data;
let chartData = [];
data.polyLine.forEach((item) => {
let date = dateFormat(new Date(item.voteDate * 1000), "yyyy-MM-dd");
// console.log("date:" + date);
chartData.push(
{
date,
value: item.supportIncrement,
type: "支持",
},
{
date,
value: item.oppositionIncrement,
type: "反对",
}
);
});
this.issueChartData = chartData;
} else {
this.$message.error(msg);
}
},
//
async getEventInfo() {
const url = "/gov/project/resievent/eventdetail-icdata";
const { data, code, msg } = await requestPost(url, {
resiEventId: this.projectInfo.originId,
});
if (code === 0) {
if (data.eventOrg && data.eventOrg.length > 0) {
data.eventOrgShow = data.eventOrg.join("、");
}
if (data.eventPerson && data.eventPerson.length > 0) {
data.eventPersonShow = data.eventPerson.join("、");
}
this.info = { ...data };
} else {
this.$message.error(msg);
}
},
//
async getProjectProcess() {
const url = "/gov/project/trace/processlist-v2";
const { data, code, msg } = await requestPost(url, {
projectId: this.projectIdCopy,
});
if (code === 0) {
this.projectProcess = data.map((item) => {
item.processTime = dateFormat(
new Date(item.processTime * 1000),
"yyyy-MM-dd hh:mm"
);
return item;
});
} else {
this.$message.error(msg);
}
},
async getProjectCate() {
const url = "/gov/project/projectcategory/categorytaglist";
const { data, code, msg } = await requestPost(url, {
projectId: this.projectIdCopy,
});
if (code === 0) {
this.projectCate = data.categoryList;
this.projectTag = data.tagList;
} else {
this.$message.error(msg);
}
},
//
async getYanPan() {
const url = "/data/aggregator/project/projectanalysis";
if (!this.userId) return (this.yanPan.loading = true);
const { data, code, msg } = await requestPost(url, {
categoryCodeList: this.categoryCodes,
userId: this.userId,
projectId: this.projectIdCopy,
});
if (code === 0) {
data.icResiUserId = data.icUserId;
data.homeUserList.forEach((item) => {
item.icResiUserId = item.icUserId;
});
let array1 = [];
let array2 = [];
//
if (
data.groupProjectList &&
data.groupProjectList.length > 0 &&
data.eventProjectList &&
data.eventProjectList.length > 0
) {
this.yanPan.hasEvent = true;
this.yanPan.singleTitle = "楼院小组";
this.yanPan.moreTitle = "事件上报";
array1 = [...data.groupProjectList];
array2 = [...data.eventProjectList];
} else {
this.yanPan.hasEvent = false;
if (data.groupProjectList && data.groupProjectList.length > 0) {
array1 = [...data.groupProjectList];
this.yanPan.singleTitle = "楼院小组";
} else if (
data.eventProjectList &&
data.eventProjectList.length > 0
) {
array1 = [...data.eventProjectList];
this.yanPan.singleTitle = "事件上报";
} else {
array1 = [];
}
}
if (array1.length > 0) {
data.singleList = array1.map((item) => {
return {
categoryCode: item.categoryCode,
categoryName: item.categoryName,
showItem: true,
projectList: item.projectList.map((subItem) => {
return {
title: subItem.title,
status: subItem.status,
statusName: subItem.status == "pending" ? "待处理" : "结案",
projectId: subItem.projectId,
};
}),
};
});
}
if (array2.length > 0) {
data.moreList = array2.map((item) => {
return {
categoryCode: item.categoryCode,
categoryName: item.categoryName,
showItem: true,
projectList: item.projectList.map((subItem) => {
return {
title: subItem.title,
status: subItem.status,
statusName: subItem.status == "pending" ? "待处理" : "结案",
projectId: subItem.projectId,
};
}),
};
});
}
this.yanPan = { ...this.yanPan, ...data };
console.log(this.yanPan);
this.yanPan.loading = true;
} else {
this.$message.error(msg);
}
},
toUserInfo(item) {
this.$router.push({
path: `/main-shuju/visual-basicinfo-people/${item.icResiUserId}`,
});
},
toProjectInfo(item) {
console.log(item);
this.projectIdCopy = item.projectId;
// let data = iniData();
// Object.keys(data).forEach((k) => {
// this[k] = data[k];
// });
this.getApiData();
},
},
};
</script>
<style
lang="scss"
src="@/assets/scss/modules/visual/incident-info.scss"
scoped
></style>

644
src/views/modules/shequzhili/event/eventList.vue

@ -1,235 +1,283 @@
<template>
<div class="div_main">
<div class="div_search">
<el-form :inline="true"
:model="formData"
ref="ref_searchform"
:label-width="'80px'">
<div>
<el-form-item label="所属网格"
prop="gridId">
<el-select class="item_width_1"
v-model="gridId"
placeholder="全部"
<div v-show="pageType == 'list'">
<div class="div_search">
<el-form :inline="true"
:model="formData"
ref="ref_searchform"
:label-width="'80px'">
<div>
<el-form-item label="所属网格"
prop="gridId">
<el-select class="item_width_1"
v-model="formData.gridId"
placeholder="全部"
size="small"
clearable>
<el-option v-for="item in gridList"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="上报渠道"
prop="sourceType">
<el-select v-model="formData.sourceType"
placeholder="请选择"
size="small"
clearable
class="item_width_2">
<el-option v-for="item in qudaoArray"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="事件内容"
prop="eventContent">
<el-input v-model="formData.eventContent"
class="item_width_1"
size="small"
clearable
placeholder="请输入">
</el-input>
</el-form-item>
<el-form-item label="报事人"
prop="name">
<el-input v-model="formData.name"
class="item_width_2"
size="small"
clearable
placeholder="请输入">
</el-input>
</el-form-item>
<el-form-item label="手机号"
prop="mobile">
<el-input v-model="formData.mobile"
class="item_width_2"
size="small"
clearable
placeholder="请输入">
</el-input>
</el-form-item>
<el-form-item label="上报时间"
prop="startTime">
<el-date-picker v-model="formData.startTime"
:picker-options="startPickerOptions"
class="item_width_2"
size="small"
type="date"
value-format="yyyy-MM-dd HH:mm:ss"
value="yyyy-MM-dd"
placeholder="开始时间">
</el-date-picker>
<span class="data-tag"></span>
<el-date-picker v-model="formData.endTime"
:picker-options="endPickerOptions"
class="item_width_2 data-tag"
size="small"
type="date"
value-format="yyyy-MM-dd HH:mm:ss"
value="yyyy-MM-dd"
placeholder="结束时间">
</el-date-picker>
</el-form-item>
<el-form-item label="状态"
prop="status">
<el-select class="item_width_2"
v-model="formData.status"
placeholder="全部"
size="small"
clearable>
<el-option v-for="item in statusArray"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-button style="margin-left:30px"
size="small"
clearable>
<el-option v-for="item in gridList"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="上报渠道"
prop="qudao">
<el-select v-model.trim="qudao"
placeholder="请选择"
class="diy-button--search"
@click="handleSearch">查询</el-button>
<el-button style="margin-left:10px"
size="small"
clearable
class="item_width_1">
<el-option v-for="item in qudaoArray"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="事件内容"
prop="titleTemp">
<el-input v-model="content"
class="resi-cell-input"
size="small"
clearable
placeholder="请输入">
</el-input>
</el-form-item>
class="diy-button--reset"
@click="resetSearch">重置</el-button>
</div>
</el-form>
</div>
</div>
<div class="div_table">
<div>
<el-form-item label="变更时间"
prop="startDate">
<el-date-picker v-model="timeRange"
size="small"
type="daterange"
value-format="yyyy-MM-dd"
@change="handleTimeChange"
range-separator="至"
start-placeholder="开始时间"
end-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"
<div class="div_btn">
<el-button class="diy-button--add"
size="small"
@click="handleAdd">新增</el-button>
<el-button @click="handleExport"
class="diy-button--reset"
@click="resetSearch">重置</el-button>
size="small">导出</el-button>
</div>
</el-form>
</div>
<div class="div_table">
<div class="resi-row-btn">
<el-button v-if="false"
class="diy-button--add"
size="small"
@click="handleAdd">新增</el-button>
<el-button @click="handleExport"
class="diy-button--reset"
size="small">导出</el-button>
</div>
<el-table :data="tableData"
border
:header-cell-style="{background:'#2195FE',color:'#FFFFFF'}"
class="table"
style="width: 100%"
:height="maxTableHeight">
<el-table-column label="序号"
fixed="left"
type="index"
align="center"
width="50" />
<el-table-column prop="name"
fixed="left"
label="姓名"
align="center">
<template slot-scope="scope">
<a class="name-a"
@click="handleWatch(scope.$index)">
{{ scope.row.name }}
</a>
</template>
</el-table-column>
<el-table-column prop="gridName"
align="center"
label="所属网格"
:show-overflow-tooltip="true">
</el-table-column>
<el-table-column prop="home"
label="所属房屋"
align="center"
:show-overflow-tooltip="true">
</el-table-column>
<el-table-column prop="mobile"
width="100"
align="center"
label="手机号"
:show-overflow-tooltip="true">
</el-table-column>
<el-table-column prop="idCard"
align="center"
label="身份证号"
:show-overflow-tooltip="true">
</el-table-column>
<el-table-column prop="gender"
align="center"
label="性别">
</el-table-column>
<el-table-column prop="birthday"
align="center"
label="出生日期"
:show-overflow-tooltip="true">
</el-table-column>
<el-table-column prop="birthplace"
align="center"
label="出生地"
:show-overflow-tooltip="true">
</el-table-column>
<el-table-column prop="parentName"
align="center"
label="出生人父/母姓名"
:show-overflow-tooltip="true">
</el-table-column>
<el-table-column prop="count"
align="center"
label="胎次">
</el-table-column>
<el-table-column prop="reportDate"
align="center"
label="申报户口日期"
:show-overflow-tooltip="true">
</el-table-column>
<el-table-column prop="householderName"
align="center"
label="户主姓名"
:show-overflow-tooltip="true">
</el-table-column>
<el-table-column prop="householderRelation"
align="center"
label="与户主关系"
:show-overflow-tooltip="true">
</el-table-column>
<el-table-column fixed="right"
label="操作"
align="center"
width="160">
<template slot-scope="scope">
<el-button @click="handleWatch(scope.$index)"
type="text"
size="small">查看</el-button>
<el-button @click="handleEdit(scope.$index)"
type="text"
size="small"
class="div-table-button--edit">处理</el-button>
<el-table :data="tableData"
border
:header-cell-style="{background:'#2195FE',color:'#FFFFFF'}"
class="table"
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="eventContent"
label="事件内容"
align="center"
:show-overflow-tooltip="true">
</el-table-column>
<el-table-column prop="imageList"
align="center"
label="图片"
:show-overflow-tooltip="true">
<template slot-scope="scope">
<el-image v-if="scope.row.imageList&&scope.row.imageList.length>0"
style="width: 100px; height: 100px"
:src="scope.row.imageList[0]"
:preview-src-list="scope.row.imageList">
</el-image>
<span v-else>--</span>
</template>
</el-table-column>
<el-table-column prop="voiceList"
align="center"
label="音频"
:show-overflow-tooltip="true">
<template slot-scope="scope">
<img class="img-voice"
v-if="scope.row.voiceList&&scope.row.voiceList.length>0"
src="@/assets/img/icon-voice.png" />
<span v-else>--</span>
</template>
</el-table-column>
<el-table-column prop="sourceTypeName"
align="center"
min-width="150"
label="上报渠道"
:show-overflow-tooltip="true">
</el-table-column>
<el-table-column prop="address"
align="center"
label="地址">
</el-table-column>
<el-table-column prop="name"
align="center"
width="100"
label="报事人"
:show-overflow-tooltip="true">
</el-table-column>
<el-table-column prop="mobile"
align="center"
width="100"
label="手机号"
:show-overflow-tooltip="true">
</el-table-column>
<el-table-column prop="satisfactionName"
align="center"
label="满意度"
:show-overflow-tooltip="true">
<!-- <template slot-scope="scope">
<span v-if="scope.row.satisfactionName">--</span>
</template> -->
</el-table-column>
<el-table-column prop="createdTime"
align="center"
label="上报时间">
</el-table-column>
<el-table-column prop="status"
align="center"
label="状态"
:show-overflow-tooltip="true">
<template slot-scope="scope">
<span v-if="scope.row.status==='processing'">处理中</span>
<span v-else-if="scope.row.status==='closed_case'">已办结</span>
<span v-else>--</span>
</template>
</el-table-column>
<el-table-column fixed="right"
label="操作"
align="center"
width="160">
<template slot-scope="scope">
<el-button @click="handleWatch(scope.$index)"
type="text"
size="small">查看</el-button>
<el-popconfirm v-if="false"
title="删除之后无法回复,确认删除?"
@onConfirm="handleDel(scope.row, scope.$index)"
@confirm="handleDel(scope.row, scope.$index)">
<el-button slot="reference"
<el-button @click="handleEdit(scope.$index)"
type="text"
size="small"
class="div-table-button--delete"
style="margin-left: 10px">删除</el-button>
</el-popconfirm>
</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>
class="div-table-button--edit">处理</el-button>
<el-popconfirm v-if="false"
title="删除之后无法回复,确认删除?"
@onConfirm="handleDel(scope.row, scope.$index)"
@confirm="handleDel(scope.row, scope.$index)">
<el-button slot="reference"
type="text"
size="small"
class="div-table-button--delete"
style="margin-left: 10px">删除</el-button>
</el-popconfirm>
</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>
</div>
<div class="g-page"
v-if="pageType == 'edit' || pageType == 'info'">
<project-info ref="eleEditForm"
:type="pageType"
:projectId="currentProject.projectId"
@dialogCancle="handleClose"
@dialogOk="handleEditSuccess" />
<div v-if="pageType == 'edit' || pageType == 'info'|| pageType == 'add'">
<event-info ref="eleEditForm"
:pageType="pageType"
:eventId="eventId"
@handleClose="handleClose"
@dialogOk="handleEditSuccess" />
</div>
</div>
</template>
@ -238,32 +286,41 @@
import { requestPost } from "@/js/dai/request";
import nextTick from "dai-js/tools/nextTick";
import { mapGetters } from "vuex";
import projectInfo from "./cpts/project-info";
import eventInfo from "./cpts/event-info";
import axios from "axios";
export default {
components: { projectInfo },
components: { eventInfo },
data () {
return {
pageType: "list", // list dispose info issue-info
let endDisabledDate = (time) => {//datareturn
let nowData = Date.now()
if (this.formData.startTime) {
let startTime = new Date(this.formData.startTime)
return time.getTime() > nowData || time.getTime() < startTime || time.getTime() === startTime
} else {
return time.getTime() > nowData
}
pageNo: 1,
pageSize: window.localStorage.getItem("pageSize") || 20,
total: 1,
}
let startDisabledDate = (time) => {//datareturn
let nowData = Date.now()
return time.getTime() > nowData
}
return {
pageType: "list", // list add dispose info issue-info
agencyId: '',
gridList: [],//list--
tableData: [],
statusArray: [
{
value: "1",
value: "processing",
label: "处理中",
},
{
value: "0",
value: "closed_case",
label: "已完成",
},
],
@ -290,19 +347,29 @@ export default {
},
],
gridId: '',
qudao: '',
content: '',
fmData: {
title: "",
status: "",
birthdayStart: "",
birthdayEnd: "",
birthdayTime: ["", ""],
},
formData: {
gridId: '',
sourceType: '',
eventContent: '',
name: '',
mobile: '',
startTime: '',
endTime: '',
status: '',
},
pageNo: 1,
pageSize: window.localStorage.getItem("pageSize") || 20,
total: 1,
endPickerOptions: {
disabledDate: endDisabledDate
},
startPickerOptions: {
disabledDate: startDisabledDate
},
eventId: '',
currentProject: {
projectId: "",
eventId: "",
userId: "",
categoryCodes: [],
},
@ -311,20 +378,15 @@ export default {
computed: {
maxTableHeight () {
return this.$store.state.inIframe
? this.clientHeight - 360 + this.iframeHeigh
: this.clientHeight - 360;
? this.clientHeight - 400 + this.iframeHeigh
: this.clientHeight - 400;
},
...mapGetters(["clientHeight", "iframeHeight"]),
},
watch: {
"fmData.birthdayTime": function (val) {
if (Array.isArray(val) && val.length == 2) {
this.fmData.birthdayStart = val[0];
this.fmData.birthdayEnd = val[1];
} else {
this.fmData.birthdayStart = "";
this.fmData.birthdayEnd = "";
}
"formData.endTime": function (val) {
let arrayTemp = val.split(' ')
this.formData.endTime = arrayTemp[0] + ' 23:59:59'
},
},
mounted () {
@ -336,7 +398,7 @@ export default {
methods: {
handleSearch (val) {
console.log(this.fmData);
console.log(this.formData);
this.pageNo = 1;
this.getTableData();
},
@ -359,40 +421,16 @@ export default {
},
handleSizeChange (val) {
console.log(`每页 ${val}`);
this.pageSize = val;
window.localStorage.setItem("pageSize", val);
this.getTableData();
},
handleCurrentChange (val) {
console.log(`当前页: ${val}`);
this.pageNo = val;
this.getTableData();
},
resetForm (formName) {
this.$refs[formName].resetFields();
this.handleSearch();
},
async handleExport () {
const url = "/epmetuser/icBirthRecord/export";
const { pageSize, pageNo, fmData } = this;
const { pageSize, pageNo, formData } = this;
axios({
url: window.SITE_CONFIG["apiURL"] + url,
method: "post",
data: {
pageSize,
pageNo,
...fmData,
...formData,
},
responseType: "blob",
})
@ -418,11 +456,15 @@ export default {
});
},
async handleAdd () { },
async handleAdd () {
this.pageType = "add";
},
async handleWatch (rowIndex) {
let item = this.tableData[rowIndex];
this.currentProject = {
projectId: item.projectId,
eventId: item.eventId,
};
this.pageType = "info";
},
@ -430,16 +472,16 @@ export default {
async handleEdit (rowIndex) {
let item = this.tableData[rowIndex];
this.currentProject = {
projectId: item.projectId,
eventId: item.eventId,
};
this.pageType = "edit";
},
handleClose () {
this.pageType = "list";
this.currentProject = {
projectId: "",
};
this.eventId = ""
},
handleEditSuccess () {
@ -466,15 +508,16 @@ export default {
},
async getTableData () {
const url = "/epmetuser/icBirthRecord/page";
const { pageSize, pageNo, fmData } = this;
// const url = "/gov/project/icEvent/list";
const url = "http://yapi.elinkservice.cn/mock/245/gov/project/icEvent/list";
const { pageSize, pageNo, formData } = this;
const { data, code, msg } = await requestPost(url, {
pageSize,
pageNo,
...fmData,
...formData,
});
if (code === 0) {
console.log("列表请求成功!!!!!!!!!!!!!!");
this.total = data.total || 0;
this.tableData = data.list
? data.list.map((item) => {
@ -484,6 +527,35 @@ export default {
} else {
}
},
handleSizeChange (val) {
this.pageSize = val;
window.localStorage.setItem("pageSize", val);
this.getTableData();
},
handleCurrentChange (val) {
this.pageNo = val;
this.getTableData();
},
resetSearch () {
this.formData = {
gridId: '',
sourceType: '',
eventContent: '',
name: '',
mobile: '',
startTime: '',
endTime: '',
status: '',
}
// this.pageNo = 1
// this.loadTable()
},
},
};
</script>
@ -491,8 +563,4 @@ export default {
<style lang="scss" scoped>
@import "@/assets/scss/buttonstyle.scss";
@import "@/assets/scss/modules/management/list-main.scss";
.item_width_1 {
width: 260px;
}
</style>

Loading…
Cancel
Save