Browse Source

【项目 延期-熔断】-【功能开发】-(王童)-2021/2/3

master
Jackwang 5 years ago
parent
commit
07f1906928
  1. 4
      src/views/modules/events/item-deal-detail-view.vue
  2. 3
      src/views/modules/events/item-deal-handle.vue
  3. 89
      src/views/modules/events/itemfusingdelay-audit.vue
  4. 774
      src/views/modules/events/itemfusingdelay-detail-view.vue
  5. 366
      src/views/modules/events/itemfusingdelay-list.vue
  6. 79
      src/views/modules/events/itemfusingdelay.vue

4
src/views/modules/events/item-deal-detail-view.vue

@ -326,6 +326,10 @@ export default {
return '网格化平台-催办'
} else if (item.state === 60) {
return '网格化平台-结案'
} else if (item.state === 85) {
return '项目延期-审核通过'
}else if (item.state === 90) {
return '项目熔断-审核通过'
}
} else if (item.type === 'issue' || item.type === 'init') {
if (item.state === 0) {

3
src/views/modules/events/item-deal-handle.vue

@ -92,6 +92,7 @@ export default {
init () {
this.visible = true
this.isAble = false
this.time = []
this.$nextTick(() => {
this.$refs['dataForm'].resetFields()
})
@ -103,7 +104,7 @@ export default {
return false
}
this.isAble = true
this.$http['post']('/item/itemfusingdelay', this.dataForm).then(({ data: res }) => {
this.$http['post']('/events/itemfusingdelay/submitApply', this.dataForm).then(({ data: res }) => {
if (res.code !== 0) {
this.isAble = false
return this.$message.error(res.msg)

89
src/views/modules/events/itemfusingdelay-audit.vue

@ -0,0 +1,89 @@
<template>
<el-dialog :visible.sync="visible" :title="'审核'" :close-on-click-modal="false" :close-on-press-escape="false">
<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmitHandle()" :label-width="$i18n.locale === 'en-US' ? '120px' : '80px'">
<el-form-item label="审批" prop="handleState" label-width="80px">
<el-select v-model="dataForm.handleState" placeholder="请选择" clearable>
<el-option label="通过" value="10"> </el-option>
<el-option label="驳回" value="15"> </el-option>
</el-select>
</el-form-item>
<br>
<br>
<el-form-item label="审批理由" prop="handleReason">
<el-input
type="textarea"
:rows="3"
v-model="dataForm.handleReason"
maxlength="2000"
style="width:calc(100% - 110px)"></el-input>
</el-form-item>
</el-form>
<template slot="footer">
<el-button @click="visible = false">{{ $t('cancel') }}</el-button>
<el-button type="primary" :disabled="isAble" @click="dataFormSubmitHandle()">{{ $t('confirm') }}</el-button>
</template>
</el-dialog>
</template>
<script>
import debounce from 'lodash/debounce'
export default {
data () {
return {
visible: false,
dataForm: {
itemId: '',
handleState: '',
handleReason: ''
},
isAble: false,
}
},
computed: {
dataRule () {
return {
handleState: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
handleReason: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
]
}
}
},
methods: {
init () {
this.visible = true
this.isAble = false
this.$nextTick(() => {
this.$refs['dataForm'].resetFields()
})
},
//
dataFormSubmitHandle: debounce(function () {
this.$refs['dataForm'].validate((valid) => {
if (!valid) {
return false
}
this.isAble = true
this.$http['post']('/events/itemfusingdelay/auditRecord', this.dataForm).then(({ data: res }) => {
if (res.code !== 0) {
this.isAble = false
return this.$message.error(res.msg)
}
this.$message({
message: this.$t('prompt.success'),
type: 'success',
duration: 500,
onClose: () => {
this.$emit('connectResponse')
this.visible = false
this.$emit('refreshDataList')
}
})
}).catch(() => {})
})
}, 1000, { 'leading': true, 'trailing': false })
}
}
</script>

774
src/views/modules/events/itemfusingdelay-detail-view.vue

@ -0,0 +1,774 @@
<template>
<div class="project-handle">
<div style="width: 100%; height: 100%;">
<div class="project-detail">
<div class="project-detail-tip">议题详情</div>
<el-form label-position="right"
label-width="120px">
<el-form-item label="议题内容:"
prop="eventContent">
<div>{{dataForm.itemContent}}</div>
<el-image v-for="url in dataForm.images"
style="width: 100px; height: 100px; margin-right: 10px"
:key="url"
:src="url"
:preview-src-list="previewImgList"
@click="clickImg(url)">
</el-image>
</el-form-item>
<el-form-item v-if="dataForm.groupName && dataForm.groupName.length > 0"
label="项目来源:"
prop="ownGrid">
<div>{{dataForm.groupName}}</div>
</el-form-item>
<el-form-item label="上报时间:"
prop="distributeTime">
<div>{{dataForm.distributeTime}}</div>
</el-form-item>
<el-form-item label="上报人:"
prop="nickName">
<div>{{dataForm.nickName}}</div>
</el-form-item>
<el-form-item label="电话:"
prop="mobile">
<div>{{dataForm.mobile}}</div>
</el-form-item>
<el-form-item label="所属类别:"
prop="categoryName">
<div>{{dataForm.categoryName}}</div>
</el-form-item>
<el-form-item label="项目态度:">
<span>表达态度 {{dataForm.approveNum + dataForm.opposeNum + dataForm.commentNum}}</span>&nbsp;&nbsp;
<span>评论 {{dataForm.commentNum}}</span>&nbsp;&nbsp;
<span>支持 {{dataForm.approveNum}}</span>&nbsp;&nbsp;
<span>不支持 {{dataForm.opposeNum}}</span>
</el-form-item>
<el-form-item label="项目评论:">
<el-button type="text"
@click="innerVisible = true">查看评论</el-button>
</el-form-item>
</el-form>
<div class="container">
<div class="location"><span style="font-weight: bold;color: #606266">上报位置:</span> {{dataForm.issueAddress}}</div>
<div id="map"></div>
</div>
</div>
<div class="project-progress">
<div class="project-progress-tip">处理进展</div>
<el-timeline>
<el-timeline-item v-for="(item, index) in timeLineList"
:key="item.id"
:color="item.type === 'init' ? 'red' : item.type === 'project' ? '#009688' : '#ffa546'">
<div :id="`content${index}`"
style="line-height:25px; ">
<div :style="{ marginBottom: '10px', width: '35px', height: '20px', fontSize: '12px', borderRadius: '4px', background: item.type === 'project' ? '#009688': item.type === 'issue' || item.type === 'issue-project' ? '#ffa546' : '', color: '#fff', textAlign: 'center', lineHeight: '20px'}"
v-if="item.type !== 'init'">
{{item.type === 'project' ? '项目': item.type === 'issue' || item.type === 'issue-project' ? '议题' : ''}}
</div>
<div><span style="font-weight: bold; color: rgb(96, 98, 102);">[{{item | formatState}}]</span> {{item.createdTime}}</div>
<div v-if="item.state === 3">
<div><span style="font-weight: bold; color: rgb(96, 98, 102);">来源社群</span>{{item.groupName}}</div>
<div><span style="font-weight: bold; color: rgb(96, 98, 102);">处理人</span>{{item.handlerDept}}</div>
<div><span style="font-weight: bold; color: rgb(96, 98, 102);">处理人电话</span>{{item.mobile}}</div>
</div>
<div v-if="item.state !== 3">
<div><span style="font-weight: bold; color: rgb(96, 98, 102);">处理部门</span>{{item.handlerDept}}</div>
</div>
<div v-if="item.itemDeptDTOS && item.itemDeptDTOS.length > 0"
style="width: 100%; display: flex;">
<div><span style="font-weight: bold; color: rgb(96, 98, 102);">被吹哨部门</span> </div>
<div>
<span v-for="(csDept, index1) in item.itemDeptDTOS"
:key="index1">
{{ csDept.deptName }}<br />
</span>
</div>
</div>
<div><span style="font-weight: bold; color: rgb(96, 98, 102);">处理意见</span> {{item.advice}}</div>
<div style="display: flex;">
<el-image v-for="url in item.images"
style="width: 60px; height: 60px; object-fit: cover; margin-right: 8px; border-radius: 2px;"
:key="url"
:src="url"
:preview-src-list="previewImgList"
alt="处理图片"
@click="clickImg(url)">
</el-image>
</div>
</div>
</el-timeline-item>
</el-timeline>
</div>
<!-- <div class="handle-operation">-->
<!-- <div class="handle-operation-tip">处理操作</div>-->
<!-- <el-form ref="dataForm"-->
<!-- label-width="120px"-->
<!-- label-position="right"-->
<!-- style="width: 720px;"-->
<!-- :model="dataForm"-->
<!-- :rules="dataRule">-->
<!-- <el-form-item label="操作人部门" prop="handlerDeptIdRule">-->
<!-- <el-cascader-->
<!-- ref="name"-->
<!-- v-model="dataForm.handlerDeptIdRule"-->
<!-- :options="options"-->
<!-- :props="{ multiple: false, checkStrictly: true }"-->
<!-- @change="changeHandle"-->
<!-- >-->
<!-- </el-cascader>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="处理:"-->
<!-- prop="handleCategory">-->
<!-- <el-select v-model="postDataForm.handleCategory"-->
<!-- placeholder="请选择" @visible-change="visibleChange">-->
<!-- <el-option v-for="handleResultDTO in dataForm.handleResultDTOS"-->
<!-- :key="handleResultDTO.processResult"-->
<!-- :label="handleResultDTO.processName"-->
<!-- :value="handleResultDTO.processResult">-->
<!-- </el-option>-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="吹哨部门:"-->
<!-- prop="deptResultDTOS"-->
<!-- v-if="deptResultDTOSVisible">-->
<!-- <el-select v-model="deptResult"-->
<!-- multiple-->
<!-- placeholder="请选择">-->
<!-- <el-option v-for="item in dataForm.deptResultDTOS"-->
<!-- :key="item.deptId"-->
<!-- :label="item.deptName"-->
<!-- :value="item.deptId">-->
<!-- </el-option>-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="回复居民意见:"-->
<!-- prop="outHandleAdvice">-->
<!-- <el-input v-model="postDataForm.outHandleAdvice"-->
<!-- type="textarea"-->
<!-- maxlength="100"-->
<!-- show-word-limit-->
<!-- placeholder="请您选择居民诉求的处理情况及答复意见,向居民公开展示"></el-input>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="项目处理意见:"-->
<!-- prop="handleAdvice">-->
<!-- <el-input v-model="postDataForm.handleAdvice"-->
<!-- type="textarea"-->
<!-- maxlength="100"-->
<!-- show-word-limit-->
<!-- placeholder="请您填写项目的实际办理情况(自己处理、吹哨报道、内部协调),便于相关部门了解项目的实际情况"></el-input>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="满意度评价:"-->
<!-- prop="evaluateDeptDTOS"-->
<!-- v-if="evaluateDeptDTOSVisible">-->
<!-- <div v-for="(evaluateDeptDTO, index) in dataForm.evaluateDeptDTOS"-->
<!-- :key="index">-->
<!-- <label>{{evaluateDeptDTO.deptName}}</label>&nbsp;-->
<!-- <el-radio-group v-model="evaluateDeptDTO.evaluationLevel">-->
<!-- <el-radio :label="2">非常满意</el-radio>-->
<!-- <el-radio :label="1">基本满意</el-radio>-->
<!-- <el-radio :label="0">不满意</el-radio>-->
<!-- </el-radio-group>-->
<!-- </div>-->
<!-- </el-form-item>-->
<!-- <el-form-item style="float: right;">-->
<!-- <el-button size="small"-->
<!-- type="primary"-->
<!-- :disabled="isAble"-->
<!-- style="width: 95px"-->
<!-- @click="dataFormSubmitHandle()">{{ $t('confirm') }}</el-button>-->
<el-button size="small"
style="width: 95px;margin-right: 20%;margin-left: 40%"
type="primary"
@click="backToItemDeal">返回</el-button>
<!-- </el-form-item>-->
<!-- </el-form>-->
<!-- </div>-->
</div>
<el-dialog width="90%"
title="评论"
:visible.sync="innerVisible"
append-to-body>
<el-table :data="commentsDTOs"
border
style="width: 100%;">
<el-table-column prop="user.userName"
label="发言人"
header-align="center"
align="center"></el-table-column>
<el-table-column prop="commentTime"
label="发言时间"
header-align="center"
align="center"></el-table-column>
<el-table-column prop="content"
label="发言内容"
header-align="center"
align="center"></el-table-column>
<el-table-column prop="replyComment.userName"
label="被回复人"
header-align="center"
align="center"></el-table-column>
<el-table-column prop="replyComment.content"
label="被回复内容"
header-align="center"
align="center"></el-table-column>
<el-table-column :label="$t('handle')"
header-align="center"
align="center"
width="150">
<template slot-scope="scope">
<el-button v-if="scope.row.shieldFlag === '0'"
type="button"
size="small"
@click="deleteComment(scope.row.commentId)">屏蔽</el-button>
<el-button v-if="scope.row.shieldFlag === '1'"
type="text"
size="small">已屏蔽</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination :current-page="pageIndex"
:page-sizes="[10, 20, 50, 100]"
:page-size="limitVal"
:total="total"
layout="total, sizes, prev, pager, next, jumper"
@size-change="pageSizeChangeHandleNew"
@current-change="pageCurrentChangeHandleNew">
</el-pagination>
</el-dialog>
</div>
</template>
<script>
import BMap from 'BMap'
import 'element-ui/lib/theme-chalk/timeline.css'
import 'element-ui/lib/theme-chalk/timeline-item.css'
import 'element-ui/lib/theme-chalk/image.css'
import debounce from 'lodash/debounce'
export default {
name: 'ItemfusingdelayDetailView',
data () {
return {
map: '',
innerVisible: false,
dataForm: {
id: '',
nickName: '',
distributeTime: '',
itemContent: '',
images: [],
issueAddress: '',
handleProgressResultDTOS: [],
issueProgressResultDTOS: [],
handleResultDTOS: [],
deptResultDTOS: [],
evaluateDeptDTOS: [],
handleAdvice: '',
outHandleAdvice: '',
handleCategory: '',
issueLatitude: '',
issueLongitude: '',
handlerDeptIdRule: ''
},
isAble: false,
previewImgList: [],
deptResult: [],
commentsDTOs: [],
pageIndex: 0,
limitVal: 10,
total: null,
postDataForm: {
id: '',
handleAdvice: '',
outHandleAdvice: '',
handleCategory: '',
deptResultDTOS: [],
evaluateDeptDTOS: []
},
deptResultDTOSVisible: false,
evaluateDeptDTOSVisible: false,
timeLineList: [],
options: []
}
},
mounted () {
this.dataForm.id = this.$route.query.id
this.getOptions()
this.init()
},
filters: {
formatState (item) {
if (item.type === 'project') {
if (item.state === 0 && item.itemDeptDTOS && item.itemDeptDTOS.length > 0) {
return '吹哨'
} else if (item.state === 0 && item.itemDeptDTOS && item.itemDeptDTOS.length === 0) {
return '回应'
} else if (item.state === 5) {
return '关闭'
} else if (item.state === 10) {
return '结案'
} else if (item.state === 15) {
return '上报网格化平台'
} else if (item.state === 20) {
return '网格化平台-受理'
} else if (item.state === 25) {
return '网格化平台-立案'
} else if (item.state === 30) {
return '网格化平台-派遣'
} else if (item.state === 35) {
return '网格化平台-中间再派'
} else if (item.state === 40) {
return '网格化平台-接单'
} else if (item.state === 45) {
return '网格化平台-处理'
} else if (item.state === 50) {
return '网格化平台-中间督办'
} else if (item.state === 55) {
return '网格化平台-催办'
} else if (item.state === 60) {
return '网格化平台-结案'
} else if (item.state === 85) {
return '项目延期-审核通过'
}else if (item.state === 90) {
return '项目熔断-审核通过'
}
} else if (item.type === 'issue' || item.type === 'init') {
if (item.state === 0) {
return '审核通过'
} else if (item.state === 1) {
return '回应'
} else if (item.state === 2) {
return '关闭'
} else if (item.state === 3) {
return '转议题'
}
} else if (item.type === 'issue-project') {
return '转项目'
}
}
},
computed: {
dataRule () {
return {
handleAdvice: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
outHandleAdvice: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
handleCategory: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
deptResultDTOS: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
evaluateDeptDTOS: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
handlerDeptIdRule: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
]
}
}
},
watch: {
'postDataForm.handleAdvice': function (val) {
this.dataForm.handleAdvice = val
},
'postDataForm.outHandleAdvice': function (val) {
this.dataForm.outHandleAdvice = val
},
'postDataForm.handleCategory': function (val) {
if (val === 1) {
this.deptResultDTOSVisible = true
this.evaluateDeptDTOSVisible = false
for (let index = 0; index < this.dataForm.deptResultDTOS.length; index++) {
const deptResultDTO = this.dataForm.deptResultDTOS[index]
if (deptResultDTO.selected === true) {
// this.postDataForm.deptResultDTOS.push(deptResultDTO)
}
}
} else if (val === 10) {
if (this.dataForm.evaluateDeptDTOS.length === 0) {
return
}
this.evaluateDeptDTOSVisible = true
this.deptResultDTOSVisible = false
} else {
this.evaluateDeptDTOSVisible = false
this.deptResultDTOSVisible = false
}
}
},
methods: {
backToItemDeal () {
this.$parent.selectComponent = 'Itemfusingdelay'
},
getOptions () {
this.$http
.get(`/sys/user/deptOptions/getDeptAuthByUser`)
.then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.options = res.data.options
})
.catch(() => {})
},
visibleChange (val) {
if (this.dataForm.handleResultDTOS.length === 0 && this.dataForm.handlerDeptIdRule === '' && val === true) {
return this.$message.error('请先选择操作人部门!')
}
},
changeHandle (value, selectedData) {
this.postDataForm.handlerDept = this.$refs['name'].getCheckedNodes()[0].label
this.postDataForm.handlerDeptId = this.$refs['name'].getCheckedNodes()[0].value
this.getHandleResultDTOS()
},
//
getHandleResultDTOS () {
this.dataForm.handleResultDTOS = []
this.dataForm.deptResultDTOS = []
this.dataForm.evaluateDeptDTOS = []
this.postDataForm.handleCategory = ''
this.postDataForm.deptResultDTOS = []
this.postDataForm.evaluateDeptDTOS = []
this.deptResult = []
this.$http.post(`/events/item/getHandleResultDTOS`, { itemId: this.dataForm.id, deptId: this.postDataForm.handlerDeptId }).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.dataForm.handleResultDTOS = res.data.handleResultDTOS
this.dataForm.deptResultDTOS = res.data.deptResultDTOS
this.dataForm.evaluateDeptDTOS = res.data.evaluateDeptDTOS
}).catch(() => { })
},
initBmap (latitude, longitude) {
this.map = new BMap.Map('map')
const point = new BMap.Point(longitude, latitude)
var marker = new BMap.Marker(point)
this.map.addOverlay(marker)
this.map.centerAndZoom(point, 13)
this.map.enableScrollWheelZoom(true)
},
init () {
this.isAble = false
this.$nextTick(() => {
if (this.dataForm.id) {
this.postDataForm.handleAdvice = ''
this.postDataForm.outHandleAdvice = ''
this.postDataForm.handleCategory = ''
this.postDataForm.deptResultDTOS = []
this.postDataForm.evaluateDeptDTOS = []
this.getInfo()
this.getCommentList()
}
})
},
clickImg (url) {
this.previewImgList = []
this.previewImgList.push(url)
},
//
getInfo () {
this.$http.get(`/events/item/${this.dataForm.id}`).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.dataForm = {
...this.dataForm,
...res.data
}
this.dataForm.handleProgressResultDTOS.forEach((item, index, arr) => {
if (index === arr.length - 1) {
item.type = 'issue-project'
} else {
item.type = 'project'
}
})
this.dataForm.issueProgressResultDTOS.forEach((item, index, arr) => {
if (index === arr.length - 1) {
item.type = 'init'
} else {
item.type = 'issue'
}
})
this.timeLineList = [...this.dataForm.handleProgressResultDTOS, ...this.dataForm.issueProgressResultDTOS]
this.$nextTick(() => {
this.timeLineList.forEach((item, index) => {
const oDiv = document.getElementById(`content${index}`)
const oBorder = oDiv.parentNode.parentNode.parentNode.firstChild
if (item.type === 'issue' || item.type === 'issue-project') {
oBorder.style.borderLeft = '1px solid #ffa546'
} else if (item.type === 'project') {
oBorder.style.borderLeft = '1px solid #009688'
}
})
})
this.initBmap(this.dataForm.issueLatitude, this.dataForm.issueLongitude)
for (let index = 0; index < res.data.handleResultDTOS.length; index++) {
const handleResultDTO = res.data.handleResultDTOS[index]
if (handleResultDTO.select === true) {
this.dataForm.handleCategory = handleResultDTO.processResult
}
}
}).catch(() => { })
},
deleteComment (val) {
this.$confirm('确定要屏蔽该评论吗?屏蔽后不可恢复。', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.$http['post']('/events/item/deleteComment', { commentIds: [val] }).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.$message({
message: this.$t('prompt.success'),
type: 'success',
duration: 500,
onClose: () => {
this.getCommentList()
}
})
}).catch(() => { })
}).catch(() => {
})
},
pageSizeChangeHandleNew (val) {
this.pageIndex = 1
this.limitVal = val
this.getCommentList()
},
pageCurrentChangeHandleNew (val) {
this.pageIndex = val
this.getCommentList()
},
getCommentList () {
this.$http.get('/events/item/comments', { params: { id: this.dataForm.id, order: this.order, orderField: this.orderField, page: this.pageIndex, limit: this.limitVal }
}).then(({ data: res }) => {
if (res.code !== 0) {
this.commentsDTOs = []
this.total = 0
return this.$message.error(res.msg)
}
this.commentsDTOs = res.data.list
this.total = res.data.total
}).catch(() => { })
},
//
dataFormSubmitHandle: debounce(function () {
this.postDataForm.deptResultDTOS = []
for (let i = 0; i < this.deptResult.length; i++) {
for (let j = 0; j < this.dataForm.deptResultDTOS.length; j++) {
if (this.deptResult[i] === this.dataForm.deptResultDTOS[j].deptId) {
this.postDataForm.deptResultDTOS.push(this.dataForm.deptResultDTOS[j])
break
}
}
}
this.postDataForm.id = this.dataForm.id
if (this.postDataForm.handleCategory === '') {
return this.$message.error('请选择处理选项')
}
if (this.deptResultDTOSVisible) {
if (this.postDataForm.deptResultDTOS === undefined || this.postDataForm.deptResultDTOS.length <= 0) {
return this.$message.error('请选择流转对象')
}
} else {
this.postDataForm.deptResultDTOS = []
}
if (this.postDataForm.outHandleAdvice === '') {
return this.$message.error('回复居民意见不能为空')
}
if (this.postDataForm.outHandleAdvice.length > 500) {
return this.$message.error('回复居民意见不能超过500字')
}
if (this.postDataForm.handleAdvice === '') {
return this.$message.error('项目处理意见不能为空')
}
if (this.postDataForm.handleAdvice.length > 500) {
return this.$message.error('项目处理意见不能超过500字')
}
if (this.evaluateDeptDTOSVisible) {
this.postDataForm.evaluateDeptDTOS = this.dataForm.evaluateDeptDTOS
if (this.postDataForm.evaluateDeptDTOS.length !== this.dataForm.evaluateDeptDTOS.length) {
return this.$message.error('请完善满意度调查')
}
} else {
this.postDataForm.evaluateDeptDTOS = []
}
this.isAble = true
this.$http['post'](
'/events/item/itemHandleSubmit', this.postDataForm).then(({ data: res }) => {
if (res.code !== 0) {
this.isAble = false
return this.$message.error(res.msg)
}
this.$message({
message: this.$t('prompt.success'),
type: 'success',
duration: 500,
onClose: () => {
this.visible = false
this.$emit('refreshDataList')
}
})
this.$parent.selectComponent = 'Itemfusingdelay'
}).catch(() => { })
}, 1000, { 'leading': true, 'trailing': false })
}
}
</script>
<style lang="scss">
.project-handle {
.el-timeline {
padding-left: 9px;
font-size: 13px;
}
.el-textarea {
width: 600px !important;
}
.el-input {
width: 600px !important;
}
}
.el-form-item__label {
font-weight: bold;
}
</style>
<style lang="scss" scoped>
.project-handle {
width: 100%;
height: calc(100vh - 120px);
background: #ffffff;
box-sizing: border-box;
padding: 10px;
.project-detail {
width: 79%;
height: 80%;
border: 2px solid #ccc;
box-sizing: border-box;
padding: 10px;
padding-top: 20px;
float: left;
margin-bottom: 1%;
position: relative;
.project-detail-tip {
position: absolute;
top: 0;
left: 0;
width: 80px;
height: 30px;
line-height: 30px;
color: #ffffff;
background: #4ac38b;
text-align: center;
}
.el-form {
width: 58%;
height: 100%;
float: left;
overflow-y: auto;
&::-webkit-scrollbar {
width: 5px;
height: 1px;
}
&::-webkit-scrollbar-thumb {
border-radius: 5px;
background: #aaa;
}
&::-webkit-scrollbar-track {
border-radius: 10px;
background: #fff;
}
}
.container {
width: 40%;
height: 100%;
float: right;
.location {
height: 30px;
line-height: 30px;
}
#map {
width: 100%;
height: calc(100% - 30px);
}
}
}
.project-progress {
width: 20%;
height: 80%;
float: right;
border: 2px solid #ccc;
box-sizing: border-box;
margin-left: 1%;
padding-top: 40px;
overflow-y: auto;
position: relative;
.project-progress-tip {
position: absolute;
top: 0;
left: 0;
width: 80px;
height: 30px;
line-height: 30px;
color: #ffffff;
background: #0098ff;
text-align: center;
}
&::-webkit-scrollbar {
width: 5px;
height: 1px;
}
&::-webkit-scrollbar-thumb {
border-radius: 5px;
background: #aaa;
}
&::-webkit-scrollbar-track {
border-radius: 10px;
background: #ccc;
}
}
.handle-operation {
padding-top: 20px;
box-sizing: border-box;
width: 79%;
height: 80%;
box-sizing: border-box;
border: 2px solid #ccc;
float: left;
overflow-y: auto;
position: relative;
&::-webkit-scrollbar {
width: 5px;
height: 1px;
}
&::-webkit-scrollbar-thumb {
border-radius: 5px;
background: #aaa;
}
&::-webkit-scrollbar-track {
border-radius: 10px;
background: #ccc;
}
.handle-operation-tip {
position: absolute;
top: 0;
left: 0;
width: 80px;
height: 30px;
line-height: 30px;
color: #ffffff;
background: #ff7600;
text-align: center;
}
}
}
</style>

366
src/views/modules/events/itemfusingdelay-list.vue

@ -0,0 +1,366 @@
<template>
<el-card shadow="never" class="aui-card--fill">
<div class="mod-news__itemfusingdelay}">
<el-form :inline="true" :model="dataForm" @keyup.enter.native="getDataListSearch()">
<el-form-item label="所属机构" label-width="100px">
<el-cascader
v-model="ids"
:options="options"
:props="{ checkStrictly: true }"
clearable
style="width:250px;"
>
</el-cascader>
</el-form-item>
<el-form-item label="项目编号" prop="itemCode" label-width="100px">
<el-input
v-model="dataForm.itemCode"
placeholder="请输入项目编号"
clearable
@keyup.native="btKeyUpItemCode"
style="width:250px;"
></el-input>
</el-form-item>
<el-form-item label="项目内容" prop="itemCode">
<el-input
v-model="dataForm.itemContent"
placeholder="请输入项目内容"
clearable
@keyup.native="btKeyUpItemContent"
style="width:200px;"
></el-input>
</el-form-item>
<br>
<el-form-item label="提交人" prop="itemCode" label-width="100px">
<el-input
v-model="dataForm.nickName"
placeholder="请输入提交人"
clearable
@keyup.native="btKeyUpNickName"
style="width:250px;"
></el-input>
</el-form-item>
<el-form-item label="提交人手机号" prop="itemCode">
<el-input
v-model="dataForm.mobile"
placeholder="请输入提交人手机号"
clearable
@keyup.native="btKeyUpMobile"
style="width:250px;"
></el-input>
</el-form-item>
<br>
<div>
<el-form-item label="转成项目时间" prop="startTime" label-width="100px">
<el-date-picker
v-model="dataForm.startTime"
type="date"
:picker-options="pickerBeginDateBefore"
value-format="yyyy-MM-dd"
format="yyyy-MM-dd"
placeholder="选择日期时间"
style="width:250px;" @change="changeTime"
>
</el-date-picker>
</el-form-item>
<el-form-item label="至" label-width="25px" prop="endTime">
<el-date-picker
v-model="dataForm.endTime"
type="date"
:picker-options="pickerBeginDateAfter"
value-format="yyyy-MM-dd"
format="yyyy-MM-dd"
placeholder="选择日期时间"
style="width:250px;" @change="changeTime"
>
</el-date-picker>
</el-form-item>
<el-form-item>
<el-button type="success" @click="getDataListSearch()">{{ $t('query') }}</el-button>
</el-form-item>
</div>
</el-form>
<el-table v-loading="dataListLoading" :data="dataList" border @selection-change="dataListSelectionChangeHandle" style="width: 100%;">
<el-table-column
label="序号"
type="index"
show-overflow-tooltip
align="center"
width="50"
></el-table-column>
<el-table-column
prop="itemContent"
label="项目内容"
header-align="center"
min-width="400"
align="left"
show-overflow-tooltip
></el-table-column>
<el-table-column
prop="itemCode"
label="项目编号"
header-align="center"
width="150"
align="center"
></el-table-column>
<el-table-column
prop="stateName"
label="申请项"
header-align="center"
width="150"
align="center"
></el-table-column>
<el-table-column
prop="handleStateName"
label="审核状态"
header-align="center"
width="150"
align="center"
></el-table-column>
<el-table-column
prop="handleReason"
label="审核理由"
header-align="center"
width="150"
align="center"
></el-table-column>
<el-table-column
prop="createdTime"
label="转成项目时间"
header-align="center"
width="180"
align="center"
></el-table-column>
<el-table-column
prop="nickName"
label="提交人"
header-align="center"
min-width="200"
align="center"
show-overflow-tooltip
></el-table-column>
<el-table-column
prop="mobile"
label="提交人手机号"
header-align="center"
min-width="200"
align="center"
></el-table-column>
<el-table-column
prop="participantsNum"
label="参与人数"
header-align="center"
width="100"
align="center"
></el-table-column>
<el-table-column
prop="approveNum"
label="支持人数"
header-align="center"
width="100"
align="center"
></el-table-column>
<el-table-column
prop="opposeNum"
label="不支持人数"
header-align="center"
width="100"
align="center"
></el-table-column>
<el-table-column
prop="commentNum"
label="评论人数"
header-align="center"
width="100"
align="center"
></el-table-column>
<el-table-column
prop="browseNum"
label="浏览数"
header-align="center"
width="100"
align="center"
></el-table-column>
<el-table-column
:label="$t('handle')"
fixed="right"
header-align="center"
align="center"
width="150"
>
<template slot-scope="scope">
<el-button
v-if="$hasPermission('events:item:deal')"
type="text"
size="small"
@click="dealAction(scope.row.id)"
>{{ '查看' }}
</el-button
>
<el-button type="text" size="small" @click="openHandle(scope.row.delayId)">{{ '审核' }}</el-button>
</template>
</el-table-column>
<!-- <el-table-column type="selection" header-align="center" align="center" width="50"></el-table-column>-->
<!-- <el-table-column prop="id" label="主键" header-align="center" align="center"></el-table-column>-->
<!-- <el-table-column prop="itemId" label="项目ID" header-align="center" align="center"></el-table-column>-->
<!-- <el-table-column prop="state" label="申请状态:0-延期,5-熔断" header-align="center" align="center"></el-table-column>-->
<!-- <el-table-column prop="reason" label="申请理由" header-align="center" align="center"></el-table-column>-->
<!-- <el-table-column prop="handleState" label="审核状态:10-审核通过,15-驳回" header-align="center" align="center"></el-table-column>-->
<!-- <el-table-column prop="handleReason" label="审批理由" header-align="center" align="center"></el-table-column>-->
<!-- <el-table-column prop="delayStartTime" label="延期开始时间" header-align="center" align="center"></el-table-column>-->
<!-- <el-table-column prop="delayEndTime" label="延期结束时间" header-align="center" align="center"></el-table-column>-->
<!-- <el-table-column prop="revision" label="乐观锁" header-align="center" align="center"></el-table-column>-->
<!-- <el-table-column prop="createdBy" label="创建人" header-align="center" align="center"></el-table-column>-->
<!-- <el-table-column prop="createdTime" label="创建时间" header-align="center" align="center"></el-table-column>-->
<!-- <el-table-column prop="updatedBy" label="更新人" header-align="center" align="center"></el-table-column>-->
<!-- <el-table-column prop="updatedTime" label="更新时间" header-align="center" align="center"></el-table-column>-->
<!-- <el-table-column prop="delFlag" label="删除标记" header-align="center" align="center"></el-table-column>-->
<!-- <el-table-column :label="$t('handle')" fixed="right" header-align="center" align="center" width="150">-->
<!-- <template slot-scope="scope">-->
<!-- <el-button v-if="$hasPermission('news:itemfusingdelay:update')" type="text" size="small" @click="addOrUpdateHandle(scope.row.id)">{{ $t('update') }}</el-button>-->
<!-- <el-button v-if="$hasPermission('news:itemfusingdelay:delete')" type="text" size="small" @click="deleteHandle(scope.row.id)">{{ $t('delete') }}</el-button>-->
<!-- </template>-->
<!-- </el-table-column>-->
</el-table>
<el-pagination
:current-page="page"
:page-sizes="[10, 20, 50, 100]"
:page-size="limit"
:total="total"
layout="total, sizes, prev, pager, next, jumper"
@size-change="pageSizeChangeHandle"
@current-change="pageCurrentChangeHandle">
</el-pagination>
<!-- 审核弹窗 -->
<itemfusingdelay-audit v-if="handleVisible" ref="itemfusingdelayAudit" @refreshDataList="getDataList"></itemfusingdelay-audit>
</div>
</el-card>
</template>
<script>
import mixinViewModule from '@/mixins/view-module'
import Detail from './itemfusingdelay-detail-view'
import ItemfusingdelayAudit from './itemfusingdelay-audit'
export default {
mixins: [mixinViewModule],
data () {
return {
mixinViewModuleOptions: {
getDataListURL: '/events/itemfusingdelay/page',
getDataListIsPage: true,
exportURL: '/events/item/unexport'
},
detailVisible: false,
dataForm: {
id: '',
itemState: '0',
startTime: '',
endTime: '',
streetId: '',
communityId: '',
gridId: '',
itemCode: '',
itemContent: '',
nickName: '',
mobile: '',
stateName:'',
handleStateName:'',
handleReason:''
},
handleVisible:false,
ids: [],
options: [],
pickerBeginDateBefore: {
disabledDate: (time) => {
let beginDateVal = this.dataForm.endTime;
if (beginDateVal) {
return time.getTime() > new Date(beginDateVal + ' 00:00:00').getTime()
}
}
},
pickerBeginDateAfter: {
disabledDate: (time) => {
let EndDateVal = this.dataForm.startTime;
if (EndDateVal) {
return time.getTime() < new Date(EndDateVal + ' 00:00:00').getTime()
}
}
},
}
},
components: {
Detail,
ItemfusingdelayAudit
},
created: function () {
this.getOptions()
this.getDataList()
},
watch: {
ids: function (val) {
if (val.length === 0) {
this.dataForm.streetId = ''
this.dataForm.communityId = ''
this.dataForm.gridId = ''
}
if (val.length === 1) {
this.dataForm.streetId = this.ids[0]
this.dataForm.communityId = ''
this.dataForm.gridId = ''
}
if (val.length === 2) {
this.dataForm.streetId = this.ids[0]
this.dataForm.communityId = this.ids[1]
this.dataForm.gridId = ''
}
if (val.length === 3) {
this.dataForm.streetId = this.ids[0]
this.dataForm.communityId = this.ids[1]
this.dataForm.gridId = this.ids[2]
}
}
},
methods: {
dealAction(id) {
this.$parent.selectComponent = 'ItemfusingdelayDetailView'
this.$router.push({path: '/events-itemfusingdelay', query: {id: id}})
},
getOptions() {
this.$http
.get(`/sys/user/deptOptions/getByLoginUser`)
.then(({data: res}) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.options = res.data.options
})
.catch(() => {
})
},
btKeyUpItemCode (e) {
e.target.value = e.target.value.replace(/[`~!#$%^&*()_\+=<>?:"{}|~!#¥%……&*()={}|《》?:“”【】\\[\]、;‘’,。、\s+]/g, '')
this.dataForm.itemCode = e.target.value
},
btKeyUpItemContent (e) {
e.target.value = e.target.value.replace(/[`~!#$%^&*()_\+=<>?:"{}|~!#¥%……&*()={}|《》?:“”【】\\[\]、;‘’,。、\s+]/g, '')
this.dataForm.itemContent = e.target.value
},
btKeyUpNickName (e) {
e.target.value = e.target.value.replace(/[`~!#$%^&*()_\+=<>?:"{}|~!#¥%……&*()={}|《》?:“”【】\\[\]、;‘’,。、\s+]/g, '')
this.dataForm.nickName = e.target.value
},
btKeyUpMobile (e) {
e.target.value = e.target.value.replace(/[`~!#$%^&*()_\+=<>?:"{}|~!#¥%……&*()={}|《》?:“”【】\\[\]、;‘’,。、\s+]/g, '')
this.dataForm.mobile = e.target.value
},
openHandle (id) {
this.handleVisible = true
this.$nextTick(() => {
this.$refs.itemfusingdelayAudit.dataForm.id = id
this.$refs.itemfusingdelayAudit.init()
})
}
}
}
</script>

79
src/views/modules/events/itemfusingdelay.vue

@ -1,78 +1,27 @@
<template>
<el-card shadow="never" class="aui-card--fill">
<div class="mod-news__itemfusingdelay}">
<el-form :inline="true" :model="dataForm" @keyup.enter.native="getDataList()">
<el-form-item>
<el-input v-model="dataForm.id" placeholder="id" clearable></el-input>
</el-form-item>
<el-form-item>
<el-button @click="getDataList()">{{ $t('query') }}</el-button>
</el-form-item>
<el-form-item>
<el-button v-if="$hasPermission('news:itemfusingdelay:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button>
</el-form-item>
<el-form-item>
<el-button v-if="$hasPermission('news:itemfusingdelay:delete')" type="danger" @click="deleteHandle()">{{ $t('deleteBatch') }}</el-button>
</el-form-item>
</el-form>
<el-table v-loading="dataListLoading" :data="dataList" border @selection-change="dataListSelectionChangeHandle" style="width: 100%;">
<el-table-column type="selection" header-align="center" align="center" width="50"></el-table-column>
<el-table-column prop="id" label="主键" header-align="center" align="center"></el-table-column>
<el-table-column prop="itemId" label="项目ID" header-align="center" align="center"></el-table-column>
<el-table-column prop="state" label="申请状态:0-延期,5-熔断" header-align="center" align="center"></el-table-column>
<el-table-column prop="reason" label="申请理由" header-align="center" align="center"></el-table-column>
<el-table-column prop="handleState" label="审核状态:10-审核通过,15-驳回" header-align="center" align="center"></el-table-column>
<el-table-column prop="handleReason" label="审批理由" header-align="center" align="center"></el-table-column>
<el-table-column prop="delayStartTime" label="延期开始时间" header-align="center" align="center"></el-table-column>
<el-table-column prop="delayEndTime" label="延期结束时间" header-align="center" align="center"></el-table-column>
<el-table-column prop="revision" label="乐观锁" header-align="center" align="center"></el-table-column>
<el-table-column prop="createdBy" label="创建人" header-align="center" align="center"></el-table-column>
<el-table-column prop="createdTime" label="创建时间" header-align="center" align="center"></el-table-column>
<el-table-column prop="updatedBy" label="更新人" header-align="center" align="center"></el-table-column>
<el-table-column prop="updatedTime" label="更新时间" header-align="center" align="center"></el-table-column>
<el-table-column prop="delFlag" label="删除标记" header-align="center" align="center"></el-table-column>
<el-table-column :label="$t('handle')" fixed="right" header-align="center" align="center" width="150">
<template slot-scope="scope">
<el-button v-if="$hasPermission('news:itemfusingdelay:update')" type="text" size="small" @click="addOrUpdateHandle(scope.row.id)">{{ $t('update') }}</el-button>
<el-button v-if="$hasPermission('news:itemfusingdelay:delete')" type="text" size="small" @click="deleteHandle(scope.row.id)">{{ $t('delete') }}</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination
:current-page="page"
:page-sizes="[10, 20, 50, 100]"
:page-size="limit"
:total="total"
layout="total, sizes, prev, pager, next, jumper"
@size-change="pageSizeChangeHandle"
@current-change="pageCurrentChangeHandle">
</el-pagination>
<!-- 弹窗, 新增 / 修改 -->
<add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getDataList"></add-or-update>
</div>
</el-card>
<keep-alive include="ItemfusingdelayList">
<component :is="selectComponent"></component>
</keep-alive>
</template>
<script>
import mixinViewModule from '@/mixins/view-module'
import AddOrUpdate from './itemfusingdelay-add-or-update'
import Itemfusingdelay from './itemfusingdelay-list'
import ItemfusingdelayDetailView from './itemfusingdelay-detail-view'
import ItemfusingdelayAudit from './itemfusingdelay-audit'
export default {
mixins: [mixinViewModule],
data () {
return {
mixinViewModuleOptions: {
getDataListURL: '/news/itemfusingdelay/page',
getDataListIsPage: true,
deleteURL: '/news/itemfusingdelay',
deleteIsBatch: true
},
dataForm: {
id: ''
}
selectComponent: Itemfusingdelay
}
},
components: {
AddOrUpdate
Itemfusingdelay,
ItemfusingdelayDetailView,
ItemfusingdelayAudit
}
}
</script>
<style lang="scss" scoped>
</style>

Loading…
Cancel
Save