11 changed files with 2111 additions and 40 deletions
@ -0,0 +1,343 @@ |
|||
<template> |
|||
<div class="div_main"> |
|||
|
|||
<el-form :inline="true" |
|||
:model="formData" |
|||
ref="ref_searchform" |
|||
:label-width="'100px'"> |
|||
|
|||
<el-form-item label="查询时间" |
|||
prop="startTime"> |
|||
<el-date-picker v-model="timeRange" |
|||
type="daterange" |
|||
:clearable="false" |
|||
range-separator="至" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
prefix-icon="el-icon-caret-bottom" |
|||
value-format="yyyy-MM-dd" |
|||
@change="handleTimeChange"> |
|||
</el-date-picker> |
|||
|
|||
</el-form-item> |
|||
|
|||
<div> |
|||
<el-form-item label="总计:" |
|||
prop="startTime"> |
|||
<span>{{totalScore}}</span> |
|||
</el-form-item> |
|||
</div> |
|||
|
|||
</el-form> |
|||
|
|||
<el-table class="table" |
|||
:data="tableData" |
|||
border |
|||
:height="tableHeight" |
|||
v-loading="tableLoading" |
|||
:header-cell-style="{background:'#2195FE',color:'#FFFFFF'}" |
|||
style="width: 100%"> |
|||
|
|||
<el-table-column label="序号" |
|||
header-align="center" |
|||
align="center" |
|||
type="index" |
|||
width="50"></el-table-column> |
|||
<el-table-column prop="unitName" |
|||
header-align="center" |
|||
align="center" |
|||
label="需求类型" |
|||
width="180"> |
|||
</el-table-column> |
|||
<el-table-column prop="title" |
|||
header-align="center" |
|||
align="center" |
|||
label="需求人" |
|||
width="100"> |
|||
</el-table-column> |
|||
<el-table-column prop="address" |
|||
header-align="center" |
|||
align="center" |
|||
label="需求内容" |
|||
min-width="230"> |
|||
</el-table-column> |
|||
|
|||
<el-table-column prop="activityTime" |
|||
header-align="center" |
|||
align="center" |
|||
label="时间" |
|||
width="150"> |
|||
</el-table-column> |
|||
|
|||
<el-table-column prop="activityTime" |
|||
header-align="center" |
|||
align="center" |
|||
label="评价" |
|||
width="80"> |
|||
</el-table-column> |
|||
|
|||
<el-table-column prop="activityTime" |
|||
header-align="center" |
|||
align="center" |
|||
label="积分" |
|||
width="80"> |
|||
</el-table-column> |
|||
|
|||
</el-table> |
|||
<div> |
|||
<el-pagination @size-change="handleSizeChange" |
|||
@current-change="handleCurrentChange" |
|||
:current-page.sync="pageNo" |
|||
:page-sizes="[10, 20, 50]" |
|||
:page-size="pageSize" |
|||
layout="sizes, prev, pager, next, total" |
|||
:total="total"> |
|||
</el-pagination> |
|||
</div> |
|||
|
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
|
|||
|
|||
import util from '@js/util.js'; |
|||
import { requestPost } from "@/js/dai/request"; |
|||
import { mapGetters } from 'vuex' |
|||
import { Loading } from 'element-ui' // 引入Loading服务 |
|||
|
|||
let loading // 加载动画 |
|||
export default { |
|||
data () { |
|||
return { |
|||
loading: false, |
|||
totalScore: 100, |
|||
total: 0, |
|||
pageSize: 10, |
|||
pageNo: 0, |
|||
tableLoading: false, |
|||
agencyId: '', |
|||
|
|||
pickerOptions: { //控制时间范围 |
|||
disabledDate (time) { |
|||
return time.getTime() > (Date.now() - (24 * 60 * 60 * 1000)) |
|||
} |
|||
}, |
|||
|
|||
timeRange: [], |
|||
unitId: '', |
|||
formData: { |
|||
|
|||
startTime: '', |
|||
endTime: '' |
|||
}, |
|||
|
|||
tableData: [], |
|||
|
|||
|
|||
|
|||
} |
|||
}, |
|||
components: { |
|||
|
|||
}, |
|||
async created () { |
|||
|
|||
}, |
|||
async mounted () { |
|||
|
|||
|
|||
}, |
|||
|
|||
methods: { |
|||
async initForm (row) { |
|||
this.initDate() |
|||
const { user } = this.$store.state |
|||
this.agencyId = user.agencyId |
|||
|
|||
|
|||
//获取网格下拉框数据 |
|||
await this.loadTable() |
|||
}, |
|||
|
|||
handleSearch () { |
|||
this.loadTable() |
|||
}, |
|||
|
|||
|
|||
async loadTable () { |
|||
this.tableLoading = true |
|||
|
|||
const url = "/heart/icpartyactivity/search" |
|||
// const url = "http://yapi.elinkservice.cn/mock/245/heart/icpartyactivity/list" |
|||
let params = { |
|||
agencyId: this.agencyId, |
|||
pageSize: this.pageSize, |
|||
pageNo: this.pageNo, |
|||
...this.formData |
|||
} |
|||
|
|||
const { data, code, msg } = await requestPost(url, params) |
|||
|
|||
if (code === 0) { |
|||
this.total = data.total |
|||
this.tableData = data.list |
|||
} else { |
|||
this.$message.error(msg) |
|||
} |
|||
this.tableLoading = false |
|||
}, |
|||
|
|||
//初始化时间 |
|||
initDate () { |
|||
let yesterday = new Date((new Date).getTime() - 24 * 60 * 60 * 1000) |
|||
|
|||
let year = yesterday.getFullYear() |
|||
let month = yesterday.getMonth() + 1 //月 |
|||
let day = yesterday.getDate() //日 |
|||
|
|||
let days = new Date(year, month, 0); |
|||
days = days.getDate(); //获取当前月的天数 |
|||
let year2 = year; |
|||
let month2 = parseInt(month) - 1; |
|||
if (month2 == 0) { |
|||
year2 = parseInt(year2) - 1; |
|||
month2 = 12; |
|||
} |
|||
let day2 = day; |
|||
let days2 = new Date(year2, month2, 0); |
|||
days2 = days2.getDate(); |
|||
if (day2 > days2) { |
|||
day2 = days2; |
|||
} |
|||
if (month2 < 10) { |
|||
month2 = '0' + month2; |
|||
} |
|||
if (month < 10) { |
|||
month = '0' + month; |
|||
} |
|||
if (day < 10) { |
|||
day = '0' + day; |
|||
} |
|||
if (day2 < 10) { |
|||
day2 = '0' + day2; |
|||
} |
|||
let t2 = year2 + '-' + month2 + '-' + day2; |
|||
let t1 = year + '-' + month + '-' + day; |
|||
// let t3 = formate(t2, style); |
|||
|
|||
this.timeRange = [t2, t1] |
|||
}, |
|||
|
|||
|
|||
handleTimeChange (time) { |
|||
if (time) { |
|||
const startTimeArray = util.dateFormatter(time[0], 'date').split('-') |
|||
const endTimeArray = util.dateFormatter(time[1], 'date').split('-') |
|||
|
|||
this.formData.startTime = startTimeArray[0] + '-' + startTimeArray[1] + '-' + startTimeArray[2] + ' 00:00:00' |
|||
this.formData.endTime = endTimeArray[0] + '-' + endTimeArray[1] + '-' + endTimeArray[2] + ' 23:59:59' |
|||
|
|||
// this.startTimeShow = startTimeArray[0] + '年' + startTimeArray[1] + '月' + startTimeArray[2] + '日' |
|||
// this.endTimeShow = endTimeArray[0] + '年' + endTimeArray[1] + '月' + endTimeArray[2] + '日' |
|||
} else { |
|||
this.formData.startTime = '' |
|||
this.formData.endTime = '' |
|||
// this.startTimeShow = '' |
|||
// this.endTimeShow = '' |
|||
} |
|||
|
|||
this.loadTable() |
|||
|
|||
}, |
|||
|
|||
handleSizeChange (val) { |
|||
this.pageSize = val |
|||
this.pageNo = 1 |
|||
this.loadTable() |
|||
}, |
|||
handleCurrentChange (val) { |
|||
this.pageNo = val |
|||
this.loadTable() |
|||
}, |
|||
|
|||
// 开启加载动画 |
|||
startLoading () { |
|||
loading = Loading.service({ |
|||
lock: true, // 是否锁定 |
|||
text: '正在加载……', // 加载中需要显示的文字 |
|||
background: 'rgba(0,0,0,.7)' // 背景颜色 |
|||
}) |
|||
}, |
|||
// 结束加载动画 |
|||
endLoading () { |
|||
// clearTimeout(timer); |
|||
if (loading) { |
|||
loading.close() |
|||
} |
|||
} |
|||
}, |
|||
computed: { |
|||
tableHeight () { |
|||
|
|||
return (this.clientHeight - 460) |
|||
|
|||
}, |
|||
rowHeight () { |
|||
return (this.clientHeight - 200) + 'px' |
|||
}, |
|||
...mapGetters(['clientHeight']) |
|||
}, |
|||
watch: { |
|||
|
|||
}, |
|||
props: { |
|||
|
|||
} |
|||
} |
|||
</script> |
|||
<style lang="scss" scoped > |
|||
@import "@/assets/scss/buttonstyle.scss"; |
|||
|
|||
.div_main { |
|||
background: #ffffff; |
|||
box-shadow: 0px 2px 12px 0px rgba(0, 0, 0, 0.1); |
|||
border-radius: 4px; |
|||
margin-top: 15px; |
|||
padding: 23px 30px 10px; |
|||
} |
|||
|
|||
.div_search { |
|||
background: #ffffff; |
|||
border-radius: 4px; |
|||
padding: 30px 20px 5px; |
|||
box-shadow: 0px 2px 12px 0px rgba(0, 0, 0, 0.1); |
|||
} |
|||
|
|||
.item_width_1 { |
|||
width: 260px; |
|||
} |
|||
.item_width_2 { |
|||
width: 495px; |
|||
} |
|||
|
|||
.div_table { |
|||
background: #ffffff; |
|||
box-shadow: 0px 2px 12px 0px rgba(0, 0, 0, 0.1); |
|||
border-radius: 4px; |
|||
margin-top: 15px; |
|||
padding: 23px 30px 10px; |
|||
|
|||
.table { |
|||
margin-top: 20px; |
|||
} |
|||
} |
|||
|
|||
.el-row { |
|||
/* margin-bottom: 20px; */ |
|||
display: flex; |
|||
flex-wrap: wrap; |
|||
margin-top: 10px; |
|||
margin-right: 50px; |
|||
} |
|||
</style> |
@ -0,0 +1,567 @@ |
|||
<template> |
|||
<div> |
|||
<div class="div_table"> |
|||
<el-button type="green" |
|||
size="small" |
|||
@click="handleAdd">新增</el-button> |
|||
|
|||
<el-table class="table" |
|||
:data="tableData" |
|||
border |
|||
:height="tableHeight" |
|||
v-loading="tableLoading" |
|||
:header-cell-style="{background:'#2195FE',color:'#FFFFFF'}" |
|||
style="width: 100%"> |
|||
<el-table-column label="序号" |
|||
header-align="center" |
|||
align="center" |
|||
type="index" |
|||
width="50"> |
|||
</el-table-column> |
|||
|
|||
<el-table-column prop="year" |
|||
header-align="center" |
|||
align="center" |
|||
label="年份" |
|||
min-width="90"> |
|||
|
|||
<template slot-scope="scope"> |
|||
<div v-if="scope.row.isEdit"> |
|||
<el-select class="item_width_2" |
|||
v-model="scope.row.year" |
|||
placeholder="请选择"> |
|||
<el-option v-for="(item,index) in yearList" |
|||
@click.native="hancleChangeYear(scope.row,index,scope.$index)" |
|||
:key="item.value" |
|||
:label="item.label" |
|||
:value="item.value"> |
|||
</el-option> |
|||
</el-select> |
|||
</div> |
|||
<span v-else>{{scope.row.year}}</span> |
|||
</template> |
|||
</el-table-column> |
|||
|
|||
<el-table-column prop="timeType" |
|||
header-align="center" |
|||
align="center" |
|||
label="类型" |
|||
min-width="90"> |
|||
|
|||
<template slot-scope="scope"> |
|||
<div v-if="scope.row.isEdit"> |
|||
<el-select class="item_width_2" |
|||
v-model="scope.row.timeType" |
|||
placeholder="请选择"> |
|||
<el-option v-for="(item,index) in typeList" |
|||
@click.native="hancleChangeType(scope.row,index,scope.$index)" |
|||
:key="item.value" |
|||
:label="item.label" |
|||
:value="item.value"> |
|||
</el-option> |
|||
</el-select> |
|||
</div> |
|||
<span v-else>{{scope.row.typeShow}}</span> |
|||
</template> |
|||
</el-table-column> |
|||
|
|||
<el-table-column prop="time" |
|||
header-align="center" |
|||
align="center" |
|||
label="时间" |
|||
min-width="100"> |
|||
|
|||
<template slot-scope="scope"> |
|||
<div v-if="scope.row.isEdit"> |
|||
<el-select class="item_width_3" |
|||
v-model="scope.row.time" |
|||
placeholder="请选择"> |
|||
<el-option v-for="item in scope.row.timeList" |
|||
:key="item.value" |
|||
:label="item.label" |
|||
:value="item.value"> |
|||
</el-option> |
|||
</el-select> |
|||
</div> |
|||
<span v-else>{{scope.row.timeShow}}</span> |
|||
</template> |
|||
</el-table-column> |
|||
|
|||
<el-table-column prop="state" |
|||
header-align="center" |
|||
align="center" |
|||
label="完成情况" |
|||
min-width="90"> |
|||
<template slot-scope="scope"> |
|||
<div v-if="scope.row.isEdit"> |
|||
<el-select class="item_width_2" |
|||
v-model="scope.row.state" |
|||
placeholder="全部"> |
|||
<el-option v-for="item in stateList" |
|||
:key="item.value" |
|||
:label="item.label" |
|||
:value="item.value"> |
|||
</el-option> |
|||
</el-select> |
|||
</div> |
|||
<span v-else>{{scope.row.state==='1'?'完成':'未完成'}}</span> |
|||
</template> |
|||
</el-table-column> |
|||
|
|||
<el-table-column prop="score" |
|||
header-align="center" |
|||
align="center" |
|||
label="评分(百分制)" |
|||
min-width="150"> |
|||
<template slot-scope="scope"> |
|||
<div v-if="scope.row.isEdit"> |
|||
<el-input-number class="item_width_1" |
|||
v-model="scope.row.score" |
|||
:precision="1" |
|||
:step="0.1" |
|||
:max="100"></el-input-number> |
|||
</div> |
|||
<span v-else>{{scope.row.score}}</span> |
|||
</template> |
|||
</el-table-column> |
|||
|
|||
<el-table-column label="操作" |
|||
fixed="right" |
|||
width="120" |
|||
header-align="center" |
|||
align="center" |
|||
class="operate"> |
|||
<template slot-scope="scope"> |
|||
<el-button v-if="scope.row.isEdit" |
|||
type="text" |
|||
style="color:#00A7A9;text-decoration: underline;" |
|||
size="small" |
|||
@click="handleComfirm(scope.row,scope.$index)">保存</el-button> |
|||
<el-button v-if="!scope.row.isEdit" |
|||
type="text" |
|||
style="color:#1C6AFD;text-decoration: underline;" |
|||
size="small" |
|||
@click="handleEdit(scope.row,scope.$index)">修改</el-button> |
|||
|
|||
<el-button type="text" |
|||
style="color:#D51010;text-decoration: underline;" |
|||
size="small" |
|||
@click="handleDelete(scope.row,scope.$index)">删除</el-button> |
|||
|
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
|
|||
</div> |
|||
<!-- <div class="div_btn"> |
|||
<el-button @click="handleCancle">取 消</el-button> |
|||
|
|||
</div> --> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapGetters } from 'vuex' |
|||
import { Loading } from 'element-ui' // 引入Loading服务 |
|||
import { requestPost } from '@/js/dai/request' |
|||
|
|||
let loading // 加载动画 |
|||
export default { |
|||
data () { |
|||
return { |
|||
tableLoading: false, |
|||
|
|||
typeList: [ |
|||
{ |
|||
value: 'quarter', |
|||
label: '季度' |
|||
}, |
|||
{ |
|||
value: 'month', |
|||
label: '月度' |
|||
} |
|||
], |
|||
|
|||
yearList: [ |
|||
{ |
|||
value: '2019', |
|||
label: '2019' |
|||
}, |
|||
{ |
|||
value: '2020', |
|||
label: '2020' |
|||
}, |
|||
{ |
|||
value: '2021', |
|||
label: '2021' |
|||
}, |
|||
], |
|||
quarterList: [ |
|||
{ |
|||
value: '1', |
|||
label: '第一季度' |
|||
}, |
|||
{ |
|||
value: '2', |
|||
label: '第一季度' |
|||
}, |
|||
{ |
|||
value: '3', |
|||
label: '第二季度' |
|||
}, |
|||
{ |
|||
value: '4', |
|||
label: '第三季度' |
|||
}, |
|||
], |
|||
monthlist: [], |
|||
timeList: [], |
|||
|
|||
stateList: [ |
|||
{ |
|||
value: '1', |
|||
label: '完成' |
|||
}, |
|||
{ |
|||
value: '2', |
|||
label: '未完成' |
|||
}, |
|||
], |
|||
|
|||
tableData: [ |
|||
{ |
|||
timeType: 'month', |
|||
typeShow: '月度', |
|||
year: '2019', |
|||
time: '12', |
|||
timeShow: '12月', |
|||
state: '1', |
|||
stateShow: '完成', |
|||
score: 90 |
|||
}, |
|||
{ |
|||
timeType: 'quarter', |
|||
typeShow: '季度', |
|||
year: '2019', |
|||
time: '3', |
|||
timeShow: '第三季度', |
|||
state: '2', |
|||
stateShow: '未完成', |
|||
score: 90 |
|||
} |
|||
], |
|||
|
|||
|
|||
} |
|||
}, |
|||
components: {}, |
|||
mounted () { |
|||
|
|||
}, |
|||
|
|||
methods: { |
|||
|
|||
async initTable () { |
|||
//初始化时间 |
|||
this.initData() |
|||
|
|||
await this.loadTable() |
|||
|
|||
}, |
|||
|
|||
//初始化时间 |
|||
initData () { |
|||
let today = new Date((new Date).getTime()) |
|||
let year = today.getFullYear() |
|||
this.yearList = [] |
|||
for (let i = 0; i < 20; i++) { |
|||
let obj = { |
|||
label: (year - i) + '', |
|||
value: (year - i) + '', |
|||
} |
|||
|
|||
this.yearList.push(obj) |
|||
} |
|||
this.monthlist = [] |
|||
for (let i = 1; i < 13; i++) { |
|||
let obj = { |
|||
label: i + '月', |
|||
value: i + '', |
|||
} |
|||
|
|||
this.monthlist.push(obj) |
|||
} |
|||
}, |
|||
|
|||
|
|||
//切换类型 |
|||
async hancleChangeType (row, index, tableIndex) { |
|||
let empetArray = [] |
|||
this.tableData[tableIndex].timeList = [...empetArray] |
|||
let rowData = JSON.parse(JSON.stringify(row)) |
|||
rowData.time = '' |
|||
|
|||
this.$set(this.tableData, tableIndex, rowData) |
|||
|
|||
if (row.timeType === 'month') { |
|||
this.tableData[tableIndex].timeList = [...this.monthlist] |
|||
} else if (row.timeType === 'quarter') { |
|||
this.tableData[tableIndex].timeList = [...this.quarterList] |
|||
} |
|||
}, |
|||
|
|||
//切换年份 row行数据 index timeList的索引 tableIndex 行索引 |
|||
hancleChangeYear (row, index, tableIndex) { |
|||
|
|||
}, |
|||
|
|||
|
|||
//加载form |
|||
async loadTable () { |
|||
|
|||
this.tableData.forEach(item => { |
|||
item.isEdit = false |
|||
item.timeList = [] |
|||
|
|||
}); |
|||
return false |
|||
|
|||
this.tableLoading = true |
|||
const url = '/gov/org/placepatrolreviewrecord/getlist' |
|||
// const url = 'http://yapi.elinkservice.cn/mock/245/gov/org/placepatrolreviewrecord/getlist' |
|||
let params = { |
|||
placePatrolRecordId: this.placePatrolRecordId |
|||
} |
|||
|
|||
const { data, code, msg } = await requestPost(url, params) |
|||
this.tableLoading = false |
|||
if (code === 0) { |
|||
|
|||
if (data.list && data.list.length > 0) { |
|||
data.list.forEach(item => { |
|||
item.isEdit = false |
|||
item.isNew = false |
|||
let arrayInspectors = item.inspectors.split(',') |
|||
item.inspectorArray = [...arrayInspectors] |
|||
|
|||
let arrayReviewTime = item.reviewTime.split(' ') |
|||
item.reviewTime = arrayReviewTime[0] |
|||
}); |
|||
|
|||
this.tableData = [...data.list] |
|||
} else { |
|||
this.tableData = [] |
|||
} |
|||
|
|||
} else { |
|||
this.$message.error(msg) |
|||
} |
|||
}, |
|||
|
|||
handleAdd () { |
|||
let obj = { |
|||
|
|||
isEdit: true,//是否编辑 |
|||
timeType: '', |
|||
typeShow: '', |
|||
year: '', |
|||
time: '', |
|||
timeShow: '', |
|||
state: '', |
|||
stateShow: '', |
|||
score: 0.0 |
|||
} |
|||
this.tableData.push(obj) |
|||
}, |
|||
|
|||
async handleEdit (row, tableIndex) { |
|||
|
|||
let rowData = JSON.parse(JSON.stringify(row)) |
|||
rowData.isEdit = true |
|||
|
|||
this.$set(this.tableData, tableIndex, rowData) |
|||
if (row.timeType === 'month') { |
|||
this.tableData[tableIndex].timeList = [...this.monthlist] |
|||
} else if (row.timeType === 'quarter') { |
|||
this.tableData[tableIndex].timeList = [...this.quarterList] |
|||
} |
|||
}, |
|||
|
|||
|
|||
async handleComfirm (row, tableIndex) { |
|||
let valiMsg = this.validata(row) |
|||
if (valiMsg) { |
|||
this.$message({ |
|||
type: 'warning', |
|||
message: valiMsg |
|||
}) |
|||
return false |
|||
} |
|||
|
|||
this.addReview(row, tableIndex) |
|||
|
|||
}, |
|||
async addReview (row, tableIndex) { |
|||
console.log(row) |
|||
return false |
|||
|
|||
let url = "/gov/org/placepatrolreviewrecord/add" |
|||
if (row.placePatrolReviewRecordId) { |
|||
url = "/gov/org/placepatrolreviewrecord/edit" |
|||
} |
|||
|
|||
let params = JSON.parse(JSON.stringify(row)) |
|||
params.inspectors = params.inspectorArray.join(',') |
|||
params.reviewTime = params.reviewTime + ' 00:00:00' |
|||
|
|||
const { data, code, msg } = await requestPost(url, params) |
|||
|
|||
if (code === 0) { |
|||
let array = data.reviewTime.split(' ') |
|||
data.reviewTime = array[0] |
|||
data.isEdit = false |
|||
data.isNew = false |
|||
|
|||
this.$set(this.tableData, tableIndex, data) |
|||
|
|||
} else { |
|||
|
|||
this.$message.error(msg) |
|||
} |
|||
|
|||
}, |
|||
|
|||
validata (row) { |
|||
|
|||
let message = '' |
|||
if (!row.year) { |
|||
message = message + '年份不能为空;' |
|||
} |
|||
if (!row.timeType) { |
|||
message = message + '类型不能为空;' |
|||
} |
|||
if (!row.time) { |
|||
message = message + '时间不能为空;' |
|||
} |
|||
if (!row.state) { |
|||
message = message + '完成情况不能为空;' |
|||
} |
|||
|
|||
if (row.score !== 0 && !row.score) { |
|||
message = message + '评分不能为空;' |
|||
} |
|||
return message |
|||
}, |
|||
|
|||
async handleDelete (row, tableIndex) { |
|||
|
|||
this.$confirm("确认删除?", "提示", { |
|||
confirmButtonText: "确定", |
|||
cancelButtonText: "取消", |
|||
type: "warning" |
|||
}) |
|||
.then(() => { |
|||
if (row.placePatrolReviewRecordId) {//存在id,调用服务删除 |
|||
this.deleteRecord(row, tableIndex) |
|||
} else {//不存在id,直接删除数组数据 |
|||
this.tableData.splice(tableIndex, 1); |
|||
} |
|||
|
|||
}) |
|||
.catch(err => { |
|||
if (err == "cancel") { |
|||
|
|||
} |
|||
|
|||
}); |
|||
}, |
|||
|
|||
async deleteRecord (row, tableIndex) { |
|||
|
|||
const url = "/gov/org/placepatrolreviewrecord/del" |
|||
|
|||
let params = { |
|||
placePatrolReviewRecordId: row.placePatrolReviewRecordId |
|||
} |
|||
|
|||
const { data, code, msg } = await requestPost(url, params) |
|||
|
|||
if (code === 0) { |
|||
// this.$message({ |
|||
// type: "success", |
|||
// message: "删除成功" |
|||
// }); |
|||
|
|||
this.tableData.splice(tableIndex, 1); |
|||
} else { |
|||
this.$message.error(msg) |
|||
} |
|||
}, |
|||
|
|||
handleCancle () { |
|||
this.$emit('dialogCancle') |
|||
|
|||
}, |
|||
|
|||
|
|||
// 开启加载动画 |
|||
startLoading () { |
|||
loading = Loading.service({ |
|||
lock: true, // 是否锁定 |
|||
text: '正在加载……', // 加载中需要显示的文字 |
|||
background: 'rgba(0,0,0,.7)' // 背景颜色 |
|||
}) |
|||
}, |
|||
// 结束加载动画 |
|||
endLoading () { |
|||
// clearTimeout(timer); |
|||
if (loading) { |
|||
loading.close() |
|||
} |
|||
} |
|||
}, |
|||
computed: { |
|||
tableHeight () { |
|||
|
|||
return (this.clientHeight - 360) |
|||
|
|||
}, |
|||
|
|||
...mapGetters(['clientHeight']) |
|||
|
|||
}, |
|||
props: { |
|||
|
|||
|
|||
} |
|||
} |
|||
</script> |
|||
|
|||
|
|||
<style lang="scss" scoped > |
|||
@import "@/assets/scss/buttonstyle.scss"; |
|||
.item_width_1 { |
|||
width: 150px; |
|||
} |
|||
.item_width_2 { |
|||
width: 100px; |
|||
} |
|||
.item_width_3 { |
|||
width: 120px; |
|||
} |
|||
.div_table { |
|||
margin-top: 10px; |
|||
// background: #ffffff; |
|||
// box-shadow: 0px 2px 12px 0px rgba(0, 0, 0, 0.1); |
|||
// border-radius: 4px; |
|||
|
|||
.table { |
|||
margin-top: 20px; |
|||
} |
|||
} |
|||
.div_btn { |
|||
margin-top: 10px; |
|||
display: flex; |
|||
justify-content: flex-end; |
|||
} |
|||
</style> |
@ -0,0 +1,321 @@ |
|||
<template> |
|||
<div class="div_main"> |
|||
|
|||
<div class="div_table"> |
|||
<div class="div_btn"> |
|||
<el-button style="" |
|||
type="green" |
|||
size="small" |
|||
@click="handleAdd">新增</el-button> |
|||
|
|||
</div> |
|||
|
|||
<el-table class="table" |
|||
:data="tableData" |
|||
border |
|||
:height="tableHeight" |
|||
v-loading="tableLoading" |
|||
:header-cell-style="{background:'#2195FE',color:'#FFFFFF'}" |
|||
style="width: 100%"> |
|||
|
|||
<el-table-column prop="categoryName" |
|||
header-align="center" |
|||
align="center" |
|||
label="分类名称" |
|||
min-width="280"> |
|||
</el-table-column> |
|||
<el-table-column prop="awardPoint" |
|||
header-align="center" |
|||
align="center" |
|||
label="积分" |
|||
min-width="80"> |
|||
</el-table-column> |
|||
|
|||
<el-table-column prop="usableFlagShow" |
|||
header-align="center" |
|||
align="center" |
|||
label="状态" |
|||
min-width="100"> |
|||
</el-table-column> |
|||
|
|||
<el-table-column label="操作" |
|||
fixed="right" |
|||
width="190" |
|||
header-align="center" |
|||
align="center" |
|||
class="operate"> |
|||
<template slot-scope="scope"> |
|||
<el-button v-if="scope.row.usableFlag" |
|||
type="text" |
|||
style="color:#D51010;text-decoration: underline;" |
|||
size="small" |
|||
@click="handleDisable(scope.row,'disable')">禁用</el-button> |
|||
<el-button v-if="!scope.row.usableFlag" |
|||
type="text" |
|||
style="color:#D51010;text-decoration: underline;" |
|||
size="small" |
|||
@click="handleDisable(scope.row,'able')">启用</el-button> |
|||
|
|||
<el-button type="text" |
|||
style="color:#00A7A9;text-decoration: underline;" |
|||
size="small" |
|||
@click="handleEdit(scope.row)">修改</el-button> |
|||
|
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
|
|||
</div> |
|||
|
|||
<!-- 修改弹出框 --> |
|||
<el-dialog :visible.sync="formShow" |
|||
:close-on-click-modal="false" |
|||
:close-on-press-escape="false" |
|||
:title="formTitle" |
|||
width="950px" |
|||
top="5vh" |
|||
@closed="diaClose"> |
|||
<service-form ref="ref_form" |
|||
:customerId="customerId" |
|||
@dialogCancle="addFormCancle" |
|||
@dialogOk="addFormOk"></service-form> |
|||
</el-dialog> |
|||
|
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
|
|||
import serviceForm from './serviceForm' |
|||
|
|||
|
|||
import { requestPost } from "@/js/dai/request"; |
|||
import { mapGetters } from 'vuex' |
|||
import { Loading } from 'element-ui' // 引入Loading服务 |
|||
|
|||
let loading // 加载动画 |
|||
export default { |
|||
data () { |
|||
return { |
|||
loading: false, |
|||
total: 0, |
|||
pageSize: 10, |
|||
pageNo: 0, |
|||
tableLoading: false, |
|||
customerId: '', |
|||
tableData: [], |
|||
|
|||
//form相关 |
|||
formShow: false, |
|||
formTitle: '新增二级分类', |
|||
|
|||
} |
|||
}, |
|||
components: { |
|||
serviceForm |
|||
}, |
|||
async created () { |
|||
|
|||
}, |
|||
async mounted () { |
|||
|
|||
|
|||
this.initData() |
|||
}, |
|||
|
|||
methods: { |
|||
initData () { |
|||
let { user } = this.$store.state |
|||
if (!user.customerId) { |
|||
|
|||
setTimeout(() => { |
|||
this.initData() |
|||
}, 500) |
|||
} else { |
|||
this.customerId = user.customerId |
|||
this.loadTable() |
|||
} |
|||
}, |
|||
handleSearch () { |
|||
this.loadTable() |
|||
}, |
|||
|
|||
async loadTable () { |
|||
this.tableLoading = true |
|||
|
|||
// const url = "/heart/serviceitem/list" |
|||
const url = "http://yapi.elinkservice.cn/mock/245/heart/serviceitem/list" |
|||
let params = { |
|||
customerId: this.customerId |
|||
} |
|||
|
|||
const { data, code, msg } = await requestPost(url, params) |
|||
|
|||
if (code === 0) { |
|||
this.total = data.total |
|||
this.tableData = data.list |
|||
this.tableData.forEach(item => { |
|||
item.usableFlagShow = item.usableFlag ? '启用' : '禁用' |
|||
}); |
|||
|
|||
} else { |
|||
this.$message.error(msg) |
|||
} |
|||
this.tableLoading = false |
|||
}, |
|||
|
|||
|
|||
|
|||
diaClose () { |
|||
this.$refs.ref_form.resetData() |
|||
this.formShow = false |
|||
}, |
|||
|
|||
|
|||
handleAdd () { |
|||
this.formTitle = '新增二级分类' |
|||
this.formShow = 'edit' |
|||
this.$nextTick(() => { |
|||
this.$refs.ref_form.initForm('add', null) |
|||
}) |
|||
}, |
|||
|
|||
handleEdit (row) { |
|||
this.formTitle = '修改' |
|||
this.formShow = true |
|||
this.$nextTick(() => { |
|||
this.$refs.ref_form.initForm('edit', row) |
|||
}) |
|||
}, |
|||
|
|||
addFormCancle () { |
|||
this.formShow = false |
|||
}, |
|||
addFormOk () { |
|||
this.formShow = false |
|||
this.loadTable() |
|||
|
|||
}, |
|||
|
|||
async handleDisable (row, type) { |
|||
let title = type === 'able' ? '启用' : '禁用' |
|||
|
|||
this.$confirm("确认" + title + "?", "提示", { |
|||
confirmButtonText: "确定", |
|||
cancelButtonText: "取消", |
|||
type: "warning" |
|||
}) |
|||
.then(() => { |
|||
this.disableService(row, type) |
|||
}) |
|||
.catch(err => { |
|||
if (err == "cancel") { |
|||
|
|||
} |
|||
|
|||
}); |
|||
}, |
|||
|
|||
async disableService (row, type) { |
|||
// const url = "/heart/serviceitem/updatestatus" |
|||
const url = "http://yapi.elinkservice.cn/mock/245/heart/serviceitem/updatestatus" |
|||
|
|||
let params = { |
|||
id: row.categoryId, |
|||
usableFlag: type === 'able' |
|||
} |
|||
|
|||
const { data, code, msg } = await requestPost(url, params) |
|||
|
|||
if (code === 0) { |
|||
this.$message({ |
|||
type: "success", |
|||
message: "操作成功" |
|||
}); |
|||
|
|||
this.loadTable() |
|||
} else { |
|||
this.$message.error(msg) |
|||
} |
|||
}, |
|||
|
|||
|
|||
// 开启加载动画 |
|||
startLoading () { |
|||
loading = Loading.service({ |
|||
lock: true, // 是否锁定 |
|||
text: '正在加载……', // 加载中需要显示的文字 |
|||
background: 'rgba(0,0,0,.7)' // 背景颜色 |
|||
}) |
|||
}, |
|||
// 结束加载动画 |
|||
endLoading () { |
|||
// clearTimeout(timer); |
|||
if (loading) { |
|||
loading.close() |
|||
} |
|||
} |
|||
}, |
|||
computed: { |
|||
tableHeight () { |
|||
|
|||
return (this.clientHeight - 210) |
|||
|
|||
}, |
|||
rowHeight () { |
|||
return (this.clientHeight - 200) + 'px' |
|||
}, |
|||
...mapGetters(['clientHeight']) |
|||
}, |
|||
watch: { |
|||
|
|||
}, |
|||
props: { |
|||
|
|||
} |
|||
} |
|||
</script> |
|||
<style lang="scss" scoped > |
|||
@import "@/assets/scss/buttonstyle.scss"; |
|||
|
|||
.div_main { |
|||
width: 100%; |
|||
} |
|||
|
|||
.div_search { |
|||
background: #ffffff; |
|||
border-radius: 4px; |
|||
padding: 30px 20px 5px; |
|||
box-shadow: 0px 2px 12px 0px rgba(0, 0, 0, 0.1); |
|||
} |
|||
|
|||
.item_width_1 { |
|||
width: 260px; |
|||
} |
|||
.item_width_2 { |
|||
width: 620px; |
|||
} |
|||
|
|||
.div_table { |
|||
background: #ffffff; |
|||
box-shadow: 0px 2px 12px 0px rgba(0, 0, 0, 0.1); |
|||
border-radius: 4px; |
|||
|
|||
padding: 23px 30px 10px; |
|||
|
|||
.table { |
|||
margin-top: 20px; |
|||
} |
|||
} |
|||
|
|||
.div_btn { |
|||
} |
|||
|
|||
.el-row { |
|||
/* margin-bottom: 20px; */ |
|||
display: flex; |
|||
flex-wrap: wrap; |
|||
margin-top: 10px; |
|||
margin-right: 50px; |
|||
} |
|||
</style> |
@ -0,0 +1,232 @@ |
|||
<template> |
|||
<div> |
|||
<div> |
|||
<div> |
|||
<el-form ref="ref_form" |
|||
:inline="true" |
|||
:model="formData" |
|||
:rules="dataRule" |
|||
:disabled="formType === 'detail'" |
|||
class="form"> |
|||
|
|||
<el-form-item label="分类名称" |
|||
prop="categoryName" |
|||
label-width="150px" |
|||
style="display: block"> |
|||
<el-input class="item_width_1" |
|||
maxlength="20" |
|||
show-word-limit |
|||
placeholder="请输入分类名称" |
|||
v-model="formData.categoryName"> |
|||
</el-input> |
|||
</el-form-item> |
|||
|
|||
<el-form-item label="奖励积分" |
|||
style="display: block" |
|||
prop="awardPoint" |
|||
label-width="150px"> |
|||
<el-input-number class="item_width_1" |
|||
v-model="formData.awardPoint" |
|||
:min="0" |
|||
label="奖励积分"></el-input-number> |
|||
</el-form-item> |
|||
|
|||
</el-form> |
|||
</div> |
|||
|
|||
</div> |
|||
<div class="div_btn"> |
|||
<el-button @click="handleCancle">取 消</el-button> |
|||
<el-button v-if="formType != 'detail'" |
|||
type="primary" |
|||
:disabled="btnDisable" |
|||
@click="handleComfirm">确 定</el-button> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapGetters } from 'vuex' |
|||
import { Loading } from 'element-ui' // 引入Loading服务 |
|||
import { requestPost } from '@/js/dai/request' |
|||
|
|||
|
|||
|
|||
let loading // 加载动画 |
|||
export default { |
|||
data () { |
|||
return { |
|||
formType: 'add', //表单操作类型 add新增,edit编辑,detail详情 |
|||
|
|||
btnDisable: false, |
|||
|
|||
keyWords: '', |
|||
formData: { |
|||
customerId: '', |
|||
categoryName: '', |
|||
categoryId: '', |
|||
awardPoint: null |
|||
}, |
|||
|
|||
} |
|||
}, |
|||
components: {}, |
|||
mounted () { |
|||
|
|||
}, |
|||
|
|||
methods: { |
|||
|
|||
async initForm (type, row) { |
|||
this.startLoading() |
|||
this.$refs.ref_form.resetFields(); |
|||
|
|||
|
|||
|
|||
this.formType = type |
|||
|
|||
if (row) { |
|||
this.formData = JSON.parse(JSON.stringify(row)) |
|||
|
|||
} else { |
|||
this.resetData() |
|||
} |
|||
this.formData.customerId = this.customerId |
|||
this.endLoading() |
|||
|
|||
}, |
|||
|
|||
async handleComfirm () { |
|||
|
|||
this.btnDisable = true |
|||
setTimeout(() => { |
|||
this.btnDisable = false |
|||
}, 10000) |
|||
this.$refs['ref_form'].validate((valid, messageObj) => { |
|||
if (!valid) { |
|||
app.util.validateRule(messageObj) |
|||
this.btnDisable = false |
|||
} else { |
|||
this.addService() |
|||
} |
|||
|
|||
}) |
|||
|
|||
|
|||
}, |
|||
async addService () { |
|||
|
|||
// let url = '/heart/serviceitem/saveorupdate' |
|||
let url = "http://yapi.elinkservice.cn/mock/245/heart/serviceitem/saveorupdate" |
|||
|
|||
const { data, code, msg } = await requestPost(url, this.formData) |
|||
|
|||
if (code === 0) { |
|||
this.$message({ |
|||
type: 'success', |
|||
message: '操作成功' |
|||
}) |
|||
this.resetData() |
|||
this.$emit('dialogOk') |
|||
this.btnDisable = false |
|||
} else { |
|||
this.btnDisable = false |
|||
this.$message.error(msg) |
|||
} |
|||
|
|||
}, |
|||
|
|||
handleCancle () { |
|||
this.resetData() |
|||
this.$emit('dialogCancle') |
|||
|
|||
}, |
|||
|
|||
|
|||
|
|||
resetData () { |
|||
|
|||
this.formData = { |
|||
customerId: '', |
|||
categoryName: '', |
|||
categoryId: '', |
|||
awardPoint: null |
|||
} |
|||
}, |
|||
// 开启加载动画 |
|||
startLoading () { |
|||
loading = Loading.service({ |
|||
lock: true, // 是否锁定 |
|||
text: '正在加载……', // 加载中需要显示的文字 |
|||
background: 'rgba(0,0,0,.7)' // 背景颜色 |
|||
}) |
|||
}, |
|||
// 结束加载动画 |
|||
endLoading () { |
|||
// clearTimeout(timer); |
|||
if (loading) { |
|||
loading.close() |
|||
} |
|||
} |
|||
}, |
|||
computed: { |
|||
dataRule () { |
|||
return { |
|||
|
|||
categoryName: [ |
|||
{ required: true, message: '分类名称不能为空', trigger: 'blur' }, |
|||
], |
|||
awardPoint: [ |
|||
{ required: true, message: '奖励积分不能为空', trigger: 'blur' } |
|||
], |
|||
|
|||
|
|||
} |
|||
}, |
|||
|
|||
}, |
|||
props: { |
|||
|
|||
customerId: { |
|||
type: String, |
|||
default: "" |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
<style scoped> |
|||
.item_width_1 { |
|||
width: 500px; |
|||
} |
|||
.item_width_2 { |
|||
width: 400px; |
|||
} |
|||
.item_width_3 { |
|||
margin-left: 10px; |
|||
width: 200px; |
|||
} |
|||
.item_width_4 { |
|||
width: 200px; |
|||
} |
|||
|
|||
.div_btn { |
|||
display: flex; |
|||
justify-content: flex-end; |
|||
} |
|||
.el-tabs { |
|||
margin: 0 20px; |
|||
} |
|||
.el-upload__tip { |
|||
color: rgb(155, 155, 155); |
|||
margin: 0; |
|||
} |
|||
.form { |
|||
margin-top: 30px; |
|||
} |
|||
</style> |
|||
|
|||
<style lang=scss> |
|||
.el-dialog__body { |
|||
padding: 0 10px 20px !important; |
|||
} |
|||
</style> |
@ -0,0 +1,10 @@ |
|||
class Base { |
|||
constructor() { |
|||
this.a = '3' |
|||
this.init() |
|||
} |
|||
init() { |
|||
console.log('1') |
|||
} |
|||
} |
|||
export default Base |
@ -0,0 +1,68 @@ |
|||
<template> |
|||
<div class="screen-loading"> |
|||
<svg width="50px" |
|||
height="50px"> |
|||
<circle cx="25" |
|||
cy="25" |
|||
r="20" |
|||
fill="transparent" |
|||
stroke-width="3" |
|||
stroke-dasharray="31.415, 31.415" |
|||
stroke="#29cdff" |
|||
stroke-linecap="round"> |
|||
<animateTransform attributeName="transform" |
|||
type="rotate" |
|||
values="0, 25 25;360, 25 25" |
|||
dur="1.5s" |
|||
repeatCount="indefinite" /> |
|||
<animate attributeName="stroke" |
|||
values="#02bcfe;#3be6cb;#02bcfe" |
|||
dur="3s" |
|||
repeatCount="indefinite" /> |
|||
</circle> |
|||
|
|||
<circle cx="25" |
|||
cy="25" |
|||
r="10" |
|||
fill="transparent" |
|||
stroke-width="3" |
|||
stroke-dasharray="15.7, 15.7" |
|||
stroke="#29cdff" |
|||
stroke-linecap="round"> |
|||
<animateTransform attributeName="transform" |
|||
type="rotate" |
|||
values="360, 25 25;0, 25 25" |
|||
dur="1.5s" |
|||
repeatCount="indefinite" /> |
|||
<animate attributeName="stroke" |
|||
values="#3be6cb;#02bcfe;#3be6cb" |
|||
dur="3s" |
|||
repeatCount="indefinite" /> |
|||
</circle> |
|||
</svg> |
|||
<div class="loading-tip"> |
|||
<slot></slot> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
export default { |
|||
name: 'DvLoading' |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
.screen-loading { |
|||
width: 100%; |
|||
height: 100%; |
|||
display: flex; |
|||
flex-direction: column; |
|||
justify-content: center; |
|||
align-items: center; |
|||
.loading-tip { |
|||
font-size: 14px; |
|||
color: #fff; |
|||
} |
|||
} |
|||
</style> |
@ -0,0 +1,307 @@ |
|||
<template> |
|||
<div class="warning-table"> |
|||
<div class="table"> |
|||
<div class="table-header"> |
|||
<div class="table-header-th" |
|||
v-for="(item, index) in headerList" |
|||
:key="item.title" |
|||
:style="headerStyle[index]"> |
|||
{{ item.title }} |
|||
</div> |
|||
</div> |
|||
<div class="table-body"> |
|||
<div class="table-body-tr" |
|||
v-for="(value, index) in tableData" |
|||
:key="index"> |
|||
<div class="td" |
|||
v-for="(item, indexs) in value" |
|||
:key="indexs" |
|||
:style="tableContentStyle[indexs]"> |
|||
<span @click="toUserInfo(item)">{{ item }}</span> |
|||
<span v-if="indexs + 1 == value.length && item.length > 8" |
|||
class="more" |
|||
@click.stop="onClickMorePop(index)" |
|||
ref="morePop"> |
|||
更多> |
|||
<span class="more-pop" |
|||
@click="toUserInfo(item)" |
|||
v-if="visiblePopList[index]"> |
|||
<!-- 李佳琪、刘阳、赵欣、丁一、嘉敏、李岩、何嘉慧 |
|||
李易峰、赵敏、何军、曲树惠 --> |
|||
{{ item }} |
|||
</span> |
|||
</span> |
|||
</div> |
|||
</div> |
|||
<screen-loading v-if="visibleLoading">加载中</screen-loading> |
|||
<div class="no-data" |
|||
v-if="tableData.length == 0 && !visibleLoading"> |
|||
<img src="../../../../../../../assets/img/modules/visual/noData.png" |
|||
alt="" |
|||
srcset="" |
|||
class="no-data-img" /> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import ScreenLoading from "../screen-loading/index"; |
|||
import Vue from "vue"; |
|||
export default { |
|||
name: "warning-table", |
|||
components: { |
|||
ScreenLoading, |
|||
}, |
|||
props: { |
|||
headerList: { |
|||
type: Array, |
|||
required: false, |
|||
default: () => { |
|||
return [ |
|||
{ title: "序号" }, |
|||
{ title: "所属网格" }, |
|||
{ title: "所属小区" }, |
|||
{ title: "楼号" }, |
|||
{ title: "姓名" }, |
|||
]; |
|||
}, |
|||
}, |
|||
tableData: { |
|||
type: Array, |
|||
required: false, |
|||
default: () => { |
|||
return [ |
|||
// [ |
|||
// 1, |
|||
// "商丘路社区第一网格", |
|||
// "商丘路小区", |
|||
// "2号楼", |
|||
// "杨颖、王平、刘佳敏、丁辉、杨萍", |
|||
// ], |
|||
// [ |
|||
// 2, |
|||
// "商丘路社区第一网格", |
|||
// "商丘路小区", |
|||
// "2号楼", |
|||
// "杨颖、王平、刘佳敏、丁辉、杨萍", |
|||
// ], |
|||
]; |
|||
}, |
|||
}, |
|||
// 单独给头部设置样式 |
|||
headerStyle: { |
|||
type: Array, |
|||
default: () => { |
|||
return [ |
|||
// { |
|||
// width:'200px', |
|||
// border:'1px solid red' |
|||
// }, |
|||
// { |
|||
// width:'200px' |
|||
// } |
|||
]; |
|||
}, |
|||
}, |
|||
// 单独给内容设置样式 |
|||
tableContentStyle: { |
|||
type: Array, |
|||
default: () => { |
|||
return [ |
|||
// { |
|||
// width:'200px', |
|||
// border:'1px solid red' |
|||
// }, |
|||
// { |
|||
// width:'200px' |
|||
// } |
|||
]; |
|||
}, |
|||
}, |
|||
visibleLoading: { |
|||
type: Boolean, |
|||
default: true, |
|||
}, |
|||
// // 表格平均分的份数 |
|||
// ava: { |
|||
// type: Number, |
|||
// default: 8 |
|||
// }, |
|||
// // 表头高度--默认占比10% |
|||
// headerHeightAva: { |
|||
// type: String, |
|||
// default: '10%' |
|||
// }, |
|||
// // 表格主体平均分成的份数 |
|||
// tableContentAva: { |
|||
// type: Number, |
|||
// default: 5 |
|||
// }, |
|||
}, |
|||
data () { |
|||
return { |
|||
visiblePopList: [ |
|||
false, |
|||
false, |
|||
false, |
|||
false, |
|||
false, |
|||
false, |
|||
false, |
|||
false, |
|||
false, |
|||
false, |
|||
], |
|||
}; |
|||
}, |
|||
watch: { |
|||
tableData (arr) { |
|||
if (Array.isArray(arr)) { |
|||
this.visiblePopList = new Array(arr.length).fill(false); |
|||
} |
|||
}, |
|||
}, |
|||
|
|||
mounted () { |
|||
window.addEventListener("click", (e) => { |
|||
this.visiblePopList = new Array(this.visiblePopList.length).fill(false); |
|||
}); |
|||
}, |
|||
|
|||
created () { }, |
|||
|
|||
methods: { |
|||
toUserInfo (uid) { |
|||
// this.$router.push({ path: `/main-shuju/visual-basicinfo-people/${uid}` }); |
|||
}, |
|||
|
|||
onClickMorePop (index) { |
|||
this.visiblePopList.forEach((item, indexs) => { |
|||
if (index == indexs) { |
|||
Vue.set(this.visiblePopList, index, true); |
|||
} else { |
|||
Vue.set(this.visiblePopList, indexs, false); |
|||
} |
|||
}); |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
.warning-table { |
|||
box-sizing: border-box; |
|||
width: 100%; |
|||
height: 100%; |
|||
.table { |
|||
width: 100%; |
|||
height: 100%; |
|||
&-header { |
|||
width: 100%; |
|||
height: 50px; |
|||
display: flex; |
|||
justify-content: space-around; |
|||
align-items: center; |
|||
background: rgba(8, 37, 134, 0.85); |
|||
font-size: 16px; |
|||
font-weight: 400; |
|||
color: #ffffff; |
|||
|
|||
&-th { |
|||
text-align: center; |
|||
width: calc(100% / 5); |
|||
} |
|||
} |
|||
|
|||
&-body { |
|||
box-sizing: border-box; |
|||
width: 100%; |
|||
height: calc(100% - 50px); |
|||
font-size: 18px; |
|||
font-weight: 400; |
|||
color: #ffffff; |
|||
|
|||
&-tr { |
|||
width: 100%; |
|||
height: 50px; |
|||
// height: calc(100% / 10); |
|||
display: flex; |
|||
justify-content: space-around; |
|||
align-items: center; |
|||
|
|||
.td { |
|||
text-align: center; |
|||
width: calc(100% / 5); |
|||
.more { |
|||
font-size: 18px; |
|||
font-weight: 400; |
|||
color: #e4dc00; |
|||
position: relative; |
|||
cursor: pointer; |
|||
|
|||
&-pop { |
|||
box-sizing: border-box; |
|||
display: block; |
|||
box-sizing: border-box; |
|||
width: 215px; |
|||
height: auto; |
|||
line-height: 20px; |
|||
border: 1px solid red; |
|||
position: absolute; |
|||
right: -100%; |
|||
top: 150%; |
|||
background: #06186d; |
|||
border: 1px solid #1a64cc; |
|||
border-radius: 5px; |
|||
font-size: 9px; |
|||
font-weight: 400; |
|||
color: #ffffff; |
|||
padding: 16px 8px 10px 9px; |
|||
z-index: 1; |
|||
cursor: default; |
|||
// &::after{ |
|||
// position: absolute; |
|||
// left: 30%; |
|||
// top: -30%; |
|||
// display: flex; |
|||
// content:''; |
|||
// width: 0; |
|||
// height: 0; |
|||
// border-width: 13px; |
|||
// border-style: solid; |
|||
// border-color: transparent transparent rgba(26, 100, 204,0.5) transparent; |
|||
// // border-color: transparent transparent red transparent; |
|||
// transform: translate(-50%,0); |
|||
// } |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
&-tr:nth-child(2n) { |
|||
background: rgba(16, 75, 164, 0.24); |
|||
} |
|||
|
|||
&-tr:hover { |
|||
background: url("../../../../../../../assets/img/modules/visual/hover-bac.png") |
|||
no-repeat center; |
|||
background-size: 100% 100%; |
|||
} |
|||
// 暂无数据 |
|||
.no-data { |
|||
width: 100%; |
|||
height: calc(100% - 50px); |
|||
display: flex; |
|||
align-items: center; |
|||
justify-content: center; |
|||
&-img { |
|||
width: 249px; |
|||
height: 172px; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
</style> |
@ -0,0 +1,164 @@ |
|||
<template> |
|||
<div class="warning-box"> |
|||
<cpt-card> |
|||
<div class="warning-box-top"> |
|||
<div class="top-item" |
|||
v-for="(item, index) in warningList" |
|||
:key="index"> |
|||
<div class="top-item-img"> |
|||
<img :src="item.dataIcon" /> |
|||
<div class="top-item-left"> |
|||
<span>{{ item.label }}</span> |
|||
<span>{{ item.count }}</span> |
|||
</div> |
|||
</div> |
|||
<div class="top-item-num"> |
|||
<div class="num-item" |
|||
:class="{ |
|||
'num-item-active': activeIndex == index && activeLevel == '1', |
|||
}" |
|||
@click="onClickList(index, '1')"> |
|||
<div>{{ item.level1 }}-{{ item.level2 }}人</div> |
|||
<div> |
|||
<div>{{ item.levelCount1 }}栋</div> |
|||
<img src="../../../../../assets/img/modules/visual/right-icon.png" |
|||
class="right-icon" /> |
|||
</div> |
|||
</div> |
|||
<div class="num-item" |
|||
:class="{ |
|||
'num-item-active': activeIndex == index && activeLevel == '2', |
|||
}" |
|||
@click="onClickList(index, '2')"> |
|||
<div>{{ item.level2 }}人以上</div> |
|||
<div> |
|||
<div>{{ item.levelCount2 }}栋</div> |
|||
<img src="../../../../../assets/img/modules/visual/right-icon.png" |
|||
class="right-icon" /> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="warning-box-bottom"> |
|||
<screen-table :headerList="headerList" |
|||
:tableData="tableData" |
|||
:visibleLoading="visibleLoading"></screen-table> |
|||
<div class="pagination"> |
|||
<el-pagination :current-page="pageNo" |
|||
:page-size="pageSize" |
|||
background |
|||
layout="prev, pager, next" |
|||
@size-change="pageSizeChangeHandleNew" |
|||
@current-change="pageCurrentChangeHandleNew" |
|||
:total="total"> |
|||
</el-pagination> |
|||
</div> |
|||
</div> |
|||
</cpt-card> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { requestPost } from "@/js/dai/request"; |
|||
import screenTable from "./components/screen-table/index"; |
|||
import cptCard from "@/views/modules/visual/cpts/card"; |
|||
import nextTick from "dai-js/tools/nextTick"; |
|||
|
|||
export default { |
|||
name: "warning-box", |
|||
components: { |
|||
cptCard, |
|||
screenTable, |
|||
}, |
|||
data () { |
|||
return { |
|||
warningList: [], |
|||
headerList: [ |
|||
{ title: "序号" }, |
|||
{ title: "所属网格" }, |
|||
{ title: "所属小区" }, |
|||
{ title: "楼号" }, |
|||
{ title: "姓名" }, |
|||
], |
|||
tableData: [ |
|||
// [1,'商丘路社区第一网格','商丘路小区','2号楼','杨颖、王平、刘佳敏、丁辉、杨萍'], |
|||
], |
|||
visibleLoading: true, |
|||
pageNo: 1, |
|||
pageSize: 10, |
|||
total: 0, |
|||
activeIndex: 0, |
|||
activeLevel: "1", |
|||
}; |
|||
}, |
|||
async mounted () { |
|||
await nextTick(100); |
|||
this.getBuildingwarnlist(); |
|||
}, |
|||
methods: { |
|||
onClickList (index, level) { |
|||
this.activeIndex = index; |
|||
this.activeLevel = level; |
|||
this.pageNo = 1; |
|||
this.getUserwarnlist(); |
|||
}, |
|||
//具体人员列表 |
|||
async getUserwarnlist () { |
|||
const { activeIndex, activeLevel, warningList } = this; |
|||
const reqItem = warningList[activeIndex]; |
|||
let tableData = []; |
|||
const url = "/epmetuser/statsresiwarn/userwarnlist"; |
|||
let params = { |
|||
configId: reqItem.configId, |
|||
buildingIdList: reqItem["buildingIdList" + activeLevel], |
|||
pageNo: this.pageNo, |
|||
pageSize: this.pageSize, |
|||
}; |
|||
const { data, code, msg } = await requestPost(url, params); |
|||
if (code === 0) { |
|||
data.list.forEach((item, index) => { |
|||
tableData.push([ |
|||
index + 1, |
|||
item.gridName, |
|||
item.neighborhoodName, |
|||
item.buildingName, |
|||
item.residentNames ? item.residentNames : "暂无", |
|||
]); |
|||
}); |
|||
this.tableData = tableData; |
|||
this.total = data.total; |
|||
} else { |
|||
} |
|||
}, |
|||
// 【人员预警】 楼宇预警数量列表 |
|||
async getBuildingwarnlist () { |
|||
const url = "/epmetuser/statsresiwarn/buildingwarnlist"; |
|||
let params = { |
|||
agencyId: this.$store.state.user.agencyId, |
|||
}; |
|||
const { data, code, msg } = await requestPost(url, params); |
|||
if (code === 0) { |
|||
this.warningList = data; |
|||
this.visibleLoading = false; |
|||
this.getUserwarnlist(); |
|||
} else { |
|||
} |
|||
}, |
|||
pageSizeChangeHandleNew (val) { |
|||
this.pageNo = 1; |
|||
this.pageSize = val; |
|||
}, |
|||
pageCurrentChangeHandleNew (val) { |
|||
this.pageNo = val; |
|||
this.getUserwarnlist(); |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style |
|||
lang="scss" |
|||
src="@/assets/scss/modules/visual/warning.scss" |
|||
scoped |
|||
></style> |
Loading…
Reference in new issue