30 changed files with 6430 additions and 242 deletions
@ -0,0 +1,103 @@ |
|||
.epidemic-form { |
|||
.item_width_1 { |
|||
width: 560px; |
|||
} |
|||
.item_width_2 { |
|||
width: 220px; |
|||
} |
|||
.item_width_3 { |
|||
width: 180px; |
|||
} |
|||
|
|||
.btn-selperson { |
|||
margin-left: 20px; |
|||
} |
|||
|
|||
.form_div_btn { |
|||
margin-top: 20px; |
|||
text-align: center; |
|||
} |
|||
} |
|||
|
|||
.main_tab { |
|||
margin: 10px 35px; |
|||
} |
|||
|
|||
.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); |
|||
} |
|||
|
|||
.list_item_width_1 { |
|||
width: 170px; |
|||
} |
|||
} |
|||
|
|||
.div_table { |
|||
background: #ffffff; |
|||
box-shadow: 0px 2px 12px 0px rgba(0, 0, 0, 0.1); |
|||
border-radius: 4px; |
|||
margin-top: 15px; |
|||
padding: 10px; |
|||
position: relative; |
|||
|
|||
.div_btn { |
|||
margin-top: 10px; |
|||
margin-left: 10px; |
|||
display: flex; |
|||
|
|||
.btn_upload { |
|||
margin-left: 10px; |
|||
display: flex; |
|||
} |
|||
} |
|||
.table { |
|||
margin-top: 20px; |
|||
} |
|||
|
|||
.div_notice { |
|||
position: absolute; |
|||
left: 15px; |
|||
bottom: 0; |
|||
} |
|||
} |
|||
|
|||
.more-btn { |
|||
display: flex; |
|||
flex-direction: column; |
|||
justify-content: center; |
|||
} |
|||
.div-mult-form { |
|||
margin-top: 20px; |
|||
|
|||
.div_person { |
|||
display: flex; |
|||
font-size: 14px; |
|||
padding-bottom: 20px; |
|||
|
|||
.person_title { |
|||
text-align: right; |
|||
flex: 0 0 100px; |
|||
|
|||
line-height: 36px; |
|||
padding: 0 12px 0 0; |
|||
} |
|||
|
|||
.tag_item { |
|||
margin-right: 10px; |
|||
margin-top: 10px; |
|||
} |
|||
.tag_tip { |
|||
margin-top: 10px; |
|||
color: #9c9c9c; |
|||
} |
|||
} |
|||
} |
|||
.div-mult-table { |
|||
padding: 0 20px; |
|||
} |
|||
@ -0,0 +1,643 @@ |
|||
<template> |
|||
<div class="div_main"> |
|||
<div ref="div_search" class="div_search"> |
|||
<el-form :inline="true" |
|||
:model="searchForm" |
|||
ref="ref_searchform" |
|||
:label-width="'100px'"> |
|||
<div> |
|||
<el-form-item label="所属网格" |
|||
prop="gridId"> |
|||
<el-select |
|||
v-model.trim="searchForm.gridId" |
|||
placeholder="请选择" |
|||
size="small" |
|||
clearable |
|||
class="resi-cell-select" |
|||
@change="handleChangeGrid" |
|||
> |
|||
<el-option |
|||
v-for="item in optionsG" |
|||
:key="item.value" |
|||
:label="item.label" |
|||
:value="item.value" |
|||
> |
|||
</el-option> |
|||
</el-select> |
|||
|
|||
</el-form-item> |
|||
<el-form-item label="所属小区" |
|||
prop="neighborId"> |
|||
<el-select |
|||
v-model.trim="searchForm.neighborId" |
|||
placeholder="请选择小区" |
|||
size="small" |
|||
clearable |
|||
class="resi-cell-select" |
|||
@clear="handleClearVillage" |
|||
@change="handleChangeV" |
|||
> |
|||
<el-option |
|||
v-for="item in optionsV" |
|||
:key="item.value" |
|||
:label="item.label" |
|||
:value="item.value" |
|||
> |
|||
</el-option> |
|||
</el-select> |
|||
<el-select |
|||
v-model.trim="searchForm.buildingId" |
|||
placeholder="楼号" |
|||
size="small" |
|||
clearable |
|||
style="width: 120px;" |
|||
class="resi-cell-select" |
|||
@clear="handleClearBuild" |
|||
@change="handleChangeB" |
|||
> |
|||
<el-option |
|||
v-for="item in optionsB" |
|||
:key="item.value" |
|||
:label="item.label" |
|||
:value="item.value" |
|||
> |
|||
</el-option> |
|||
</el-select> |
|||
<el-select |
|||
v-model.trim="searchForm.unitId" |
|||
placeholder="单元" |
|||
size="small" |
|||
clearable |
|||
style="width: 120px;" |
|||
class="resi-cell-select" |
|||
@click="handleClearDan" |
|||
@change="handleChangeD" |
|||
> |
|||
<el-option |
|||
v-for="item in optionsD" |
|||
:key="item.value" |
|||
:label="item.label" |
|||
:value="item.value" |
|||
> |
|||
</el-option> |
|||
</el-select> |
|||
<el-select |
|||
v-model.trim="searchForm.houseId" |
|||
placeholder="房号" |
|||
size="small" |
|||
clearable |
|||
style="width: 120px;" |
|||
class="resi-cell-select" |
|||
> |
|||
<el-option |
|||
v-for="item in optionsH" |
|||
:key="item.value" |
|||
:label="item.label" |
|||
:value="item.value" |
|||
> |
|||
</el-option> |
|||
</el-select> |
|||
|
|||
</el-form-item> |
|||
|
|||
</div> |
|||
<div> |
|||
|
|||
<el-form-item label="姓名" |
|||
prop="name"> |
|||
<el-input v-model="searchForm.name" |
|||
size="small" |
|||
class="list_item_width_1" |
|||
clearable |
|||
placeholder="请输入姓名"> |
|||
</el-input> |
|||
|
|||
</el-form-item> |
|||
<el-form-item label="手机号" |
|||
prop="mobile"> |
|||
<el-input v-model="searchForm.mobile" |
|||
size="small" |
|||
class="list_item_width_1" |
|||
clearable |
|||
placeholder="请输入身份证"> |
|||
</el-input> |
|||
|
|||
</el-form-item> |
|||
<el-form-item label="身份证" |
|||
prop="idCard"> |
|||
<el-input v-model="searchForm.idCard" |
|||
size="small" |
|||
class="list_item_width_1" |
|||
clearable |
|||
placeholder="请输入身份证"> |
|||
</el-input> |
|||
|
|||
</el-form-item> |
|||
|
|||
<el-form-item label="疫苗接种针次" |
|||
prop="vaccinateCount"> |
|||
<el-input v-model="searchForm.vaccinateCount" |
|||
size="small" |
|||
class="list_item_width_1" |
|||
clearable |
|||
placeholder="请输入身份证"> |
|||
</el-input> |
|||
|
|||
</el-form-item> |
|||
<el-form-item label="核酸检测次数" |
|||
prop="testCount"> |
|||
<el-input v-model="formData.testCount" |
|||
size="small" |
|||
class="list_item_width_1" |
|||
clearable |
|||
placeholder="请输入身份证"> |
|||
</el-input> |
|||
|
|||
</el-form-item> |
|||
|
|||
<el-button style="margin-left:30px" |
|||
size="small" |
|||
class="diy-button--search" |
|||
@click="handleSearch">查询</el-button> |
|||
<el-button style="margin-left:10px" |
|||
size="small" |
|||
class="diy-button--reset" |
|||
@click="resetSearch">重置</el-button> |
|||
</div> |
|||
</el-form> |
|||
</div> |
|||
<div class="div_table"> |
|||
|
|||
<el-table 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="personInCharge" |
|||
header-align="center" |
|||
align="center" |
|||
label="姓名" |
|||
width="100"> |
|||
</el-table-column> |
|||
<el-table-column prop="gridNames" |
|||
header-align="center" |
|||
align="center" |
|||
label="所属网格" |
|||
min-width="180"> |
|||
</el-table-column> |
|||
<el-table-column prop="gridNames" |
|||
header-align="center" |
|||
align="center" |
|||
label="所属家庭" |
|||
width="180"> |
|||
</el-table-column> |
|||
<el-table-column prop="mobile" |
|||
header-align="center" |
|||
align="center" |
|||
label="手机号" |
|||
width="110"> |
|||
</el-table-column> |
|||
<el-table-column prop="gridNames" |
|||
header-align="center" |
|||
align="center" |
|||
label="疫苗接种针次" |
|||
width="140"> |
|||
</el-table-column> |
|||
<el-table-column prop="mobile" |
|||
header-align="center" |
|||
align="center" |
|||
label="核酸检测次数" |
|||
width="140"> |
|||
</el-table-column> |
|||
|
|||
<el-table-column label="操作" |
|||
fixed="right" |
|||
width="140" |
|||
header-align="center" |
|||
align="center" |
|||
class="operate"> |
|||
<template slot-scope="scope"> |
|||
|
|||
<el-button type="text" |
|||
class="div-table-button--detail" |
|||
size="small" |
|||
@click="handleDetail(scope.row)">查看</el-button> |
|||
<!-- <el-button type="text" |
|||
class="div-table-button--edit" |
|||
size="small" |
|||
@click="handleEdit(scope.row)">修改</el-button> |
|||
|
|||
<el-button type="text" |
|||
class="div-table-button--delete--noline " |
|||
size="small" |
|||
@click="handleDelete(scope.row)">删除</el-button> --> |
|||
|
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<div> |
|||
<el-pagination @size-change="handleSizeChange" |
|||
@current-change="handleCurrentChange" |
|||
:current-page.sync="pageNo" |
|||
:page-sizes="[20, 50, 100, 200]" |
|||
:page-size="pageSize" |
|||
layout="sizes, prev, pager, next, total" |
|||
:total="total"> |
|||
</el-pagination> |
|||
</div> |
|||
</div> |
|||
|
|||
<!-- 修改弹出框 --> |
|||
<el-dialog :visible.sync="formShow" |
|||
:close-on-click-modal="false" |
|||
:close-on-press-escape="false" |
|||
:title="formTitle" |
|||
width="850px" |
|||
top="5vh" |
|||
class="dialog-h" |
|||
@closed="diaClose"> |
|||
<nat-form ref="ref_form" |
|||
@dialogCancle="addFormCancle" |
|||
@dialogOk="addFormOk"></nat-form> |
|||
</el-dialog> |
|||
|
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
|
|||
import natForm from './natInfo/natForm' |
|||
|
|||
import { requestPost } from "@/js/dai/request"; |
|||
import { mapGetters } from 'vuex' |
|||
|
|||
let loading // 加载动画 |
|||
export default { |
|||
data () { |
|||
return { |
|||
loading: false, |
|||
total: 0, |
|||
pageSize: 10, |
|||
pageNo: 0, |
|||
tableLoading: false, |
|||
|
|||
agencyId: '', |
|||
sHeight: 0, |
|||
timeRange: [], |
|||
searchForm: { |
|||
agencyId: '', |
|||
gridId: '', |
|||
neighborId: '', |
|||
buildingId: '', |
|||
unitId: '', |
|||
houseId: '', |
|||
name: '', |
|||
mobile: '', |
|||
idCard: '', |
|||
vaccinateCount: '', |
|||
testCount: '' |
|||
}, |
|||
formData: { |
|||
personInCharge: '',//负责人 |
|||
mobile: '',//联系电话 |
|||
gridId: '',//负责区域【网格Id】 |
|||
ninePlaceVal: '',//场所类型【九小场所Value值】 |
|||
isPage: true,//是否分页(是:true 否:false) 有这个参数是给新增巡查记录时用的,默认是 |
|||
}, |
|||
optionsV: [], |
|||
optionsB: [], |
|||
optionsH: [], |
|||
optionsD: [], |
|||
optionsG: [], |
|||
tableData: [], |
|||
|
|||
//form相关 |
|||
formShow: false, |
|||
formTitle: '新增', |
|||
|
|||
} |
|||
}, |
|||
components: { |
|||
natForm |
|||
}, |
|||
async created () { |
|||
|
|||
}, |
|||
async mounted () { |
|||
//获取场所类型 |
|||
|
|||
|
|||
const { user } = this.$store.state |
|||
this.agencyId = user.agencyId |
|||
|
|||
this.getGridList() |
|||
this.getValiheList() |
|||
await this.loadTable() |
|||
this.sHeight = this.$refs.div_search.offsetHeight + 230 |
|||
}, |
|||
|
|||
methods: { |
|||
handleSearch () { |
|||
this.loadTable() |
|||
}, |
|||
handleClearVillage() { |
|||
this.searchForm.buildingId = '' |
|||
this.searchForm.unitId = '' |
|||
this.searchForm.houseId = '' |
|||
}, |
|||
handleClearBuild() { |
|||
this.searchForm.buildingId = '' |
|||
this.searchForm.unitId = '' |
|||
this.searchForm.houseId = '' |
|||
}, |
|||
handleClearDan() { |
|||
this.searchForm.unitId = '' |
|||
this.searchForm.houseId = '' |
|||
}, |
|||
handleChangeGrid(val) { |
|||
console.log('val', val) |
|||
this.searchForm.neighborId = '' |
|||
this.searchForm.buildingId = '' |
|||
this.searchForm.unitId = '' |
|||
this.searchForm.houseId = '' |
|||
this.getValiheList() |
|||
}, |
|||
handleChangeV(val) { |
|||
console.log('val', val) |
|||
this.searchForm.buildingId = '' |
|||
this.searchForm.unitId = '' |
|||
this.searchForm.houseId = '' |
|||
this.getBuildList() |
|||
}, |
|||
handleChangeB(val) { |
|||
console.log('val', val) |
|||
this.searchForm.unitId = '' |
|||
this.searchForm.houseId = '' |
|||
this.getUniList() |
|||
}, |
|||
handleChangeD(val) { |
|||
console.log('val', val) |
|||
this.searchForm.houseId = '' |
|||
this.getHouseList() |
|||
}, |
|||
getGridList() { |
|||
const { user } = this.$store.state |
|||
this.$http |
|||
.post('/gov/org/customergrid/gridoption', { agencyId: user.agencyId, purpose: 'query' }) |
|||
.then(({ data: res }) => { |
|||
if (res.code !== 0) { |
|||
return this.$message.error(res.msg) |
|||
} else { |
|||
console.log('获取查询详情成功', res.data) |
|||
this.optionsG = res.data |
|||
} |
|||
}) |
|||
.catch(() => { |
|||
return this.$message.error('网络错误') |
|||
}) |
|||
}, |
|||
getValiheList() { |
|||
const { user } = this.$store.state |
|||
this.$http |
|||
.post('/gov/org/icneighborhood/neighborhoodoption', { |
|||
gridId: this.searchForm.gridId, |
|||
agencyId: '' |
|||
// agencyId: user.agencyId |
|||
}) |
|||
.then(({ data: res }) => { |
|||
if (res.code !== 0) { |
|||
return this.$message.error(res.msg) |
|||
} else { |
|||
console.log('获取查询详情成功', res.data) |
|||
this.optionsV = res.data |
|||
} |
|||
}) |
|||
.catch(() => { |
|||
return this.$message.error('网络错误') |
|||
}) |
|||
}, |
|||
getBuildList() { |
|||
this.$http |
|||
.post('/gov/org/icbuilding/buildingoption', { |
|||
neighborHoodId: this.searchForm.neighborId |
|||
}) |
|||
.then(({ data: res }) => { |
|||
if (res.code !== 0) { |
|||
return this.$message.error(res.msg) |
|||
} else { |
|||
console.log('获取查询详情成功', res.data) |
|||
this.optionsB = res.data |
|||
} |
|||
}) |
|||
.catch(() => { |
|||
return this.$message.error('网络错误') |
|||
}) |
|||
}, |
|||
getUniList() { |
|||
this.$http |
|||
.post('/gov/org/icbuildingunit/unitoption', { |
|||
buildingId: this.searchForm.buildingId |
|||
}) |
|||
.then(({ data: res }) => { |
|||
if (res.code !== 0) { |
|||
return this.$message.error(res.msg) |
|||
} else { |
|||
console.log('获取查询详情成功', res.data) |
|||
this.optionsD = res.data |
|||
} |
|||
}) |
|||
.catch(() => { |
|||
return this.$message.error('网络错误') |
|||
}) |
|||
}, |
|||
getHouseList() { |
|||
this.$http |
|||
.post('/gov/org/ichouse/houseoption', { unitId: this.searchForm.unitId }) |
|||
.then(({ data: res }) => { |
|||
if (res.code !== 0) { |
|||
return this.$message.error(res.msg) |
|||
} else { |
|||
console.log('获取查询详情成功', res.data) |
|||
this.optionsH = res.data |
|||
} |
|||
}) |
|||
.catch(() => { |
|||
return this.$message.error('网络错误') |
|||
}) |
|||
}, |
|||
|
|||
|
|||
async loadTable () { |
|||
this.tableLoading = true |
|||
|
|||
const url = "/gov/org/placepatrolteam/getlist" |
|||
// const url = "http://yapi.elinkservice.cn/mock/245/gov/org/placeorg/getlist" |
|||
let params = { |
|||
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 |
|||
|
|||
this.tableData.forEach(item => { |
|||
if (item.time) { |
|||
let timeArray = item.time.split(' ') |
|||
item.time = timeArray[0] |
|||
} |
|||
|
|||
}); |
|||
} else { |
|||
this.$message.error(msg) |
|||
} |
|||
this.tableLoading = false |
|||
}, |
|||
|
|||
handleScheduledTimeChange (time) { |
|||
if (time) { |
|||
this.formData.scheduledStartTime = time[0] |
|||
this.formData.scheduledEndTime = time[1] |
|||
|
|||
} else { |
|||
this.formData.scheduledStartTime = '' |
|||
this.formData.scheduledEndTime = '' |
|||
|
|||
} |
|||
|
|||
}, |
|||
|
|||
diaClose () { |
|||
this.$refs.ref_form.resetData() |
|||
this.formShow = false |
|||
}, |
|||
|
|||
handleDetail (row) { |
|||
this.formTitle = '详情' |
|||
this.formShow = true |
|||
this.$nextTick(() => { |
|||
this.$refs.ref_form.initForm('detail', row.natId, this.agencyId) |
|||
}) |
|||
}, |
|||
|
|||
addFormCancle () { |
|||
this.formShow = false |
|||
}, |
|||
addFormOk () { |
|||
this.formShow = false |
|||
this.loadTable() |
|||
|
|||
}, |
|||
|
|||
async handleDelete (row) { |
|||
|
|||
this.$confirm("确认删除?", "提示", { |
|||
confirmButtonText: "确定", |
|||
cancelButtonText: "取消", |
|||
type: "warning" |
|||
}) |
|||
.then(() => { |
|||
this.deleteNat(row) |
|||
}) |
|||
.catch(err => { |
|||
if (err == "cancel") { |
|||
|
|||
} |
|||
|
|||
}); |
|||
}, |
|||
|
|||
async deleteNat (row) { |
|||
const url = "/gov/org/placepatrolteam/del" |
|||
// const url = "http://yapi.elinkservice.cn/mock/245/gov/org/placepatrolteam/del" |
|||
|
|||
let params = { |
|||
natId: row.natId |
|||
} |
|||
|
|||
const { data, code, msg } = await requestPost(url, params) |
|||
|
|||
if (code === 0) { |
|||
this.$message({ |
|||
type: "success", |
|||
message: "删除成功" |
|||
}); |
|||
|
|||
this.loadTable() |
|||
} else { |
|||
this.$message.error(msg) |
|||
} |
|||
}, |
|||
|
|||
//重置搜索条件 |
|||
resetSearch () { |
|||
this.$refs.ref_searchform.resetFields() |
|||
this.searchForm.buildingId = '' |
|||
this.searchForm.unitId = '' |
|||
this.searchForm.houseId = '' |
|||
this.pageSize = 10 |
|||
this.pageNo = 1 |
|||
this.loadTable() |
|||
}, |
|||
|
|||
|
|||
handleSizeChange (val) { |
|||
this.pageSize = val |
|||
this.pageNo = 1 |
|||
this.loadTable() |
|||
}, |
|||
handleCurrentChange (val) { |
|||
this.pageNo = val |
|||
this.loadTable() |
|||
}, |
|||
|
|||
}, |
|||
computed: { |
|||
tableHeight () { |
|||
const h = this.clientHeight - this.sHeight + this.iframeHeigh |
|||
const _h = this.clientHeight - this.sHeight |
|||
return this.$store.state.inIframe ? h : _h |
|||
|
|||
}, |
|||
|
|||
...mapGetters(['clientHeight', 'iframeHeight']) |
|||
}, |
|||
watch: { |
|||
|
|||
}, |
|||
props: { |
|||
|
|||
} |
|||
} |
|||
</script> |
|||
<style lang="scss" scoped > |
|||
@import "@/assets/scss/modules/management/epidemic.scss"; |
|||
|
|||
.resi-cell-select { |
|||
width: 170px; |
|||
box-sizing: border-box; |
|||
margin-right: 10px; |
|||
&-middle { |
|||
width: 130px; |
|||
} |
|||
&-small { |
|||
width: 88px; |
|||
} |
|||
} |
|||
.resi-cell-select:last-child { |
|||
margin-right: 0; |
|||
} |
|||
</style> |
|||
|
|||
|
|||
@ -0,0 +1,601 @@ |
|||
<template> |
|||
<div class="epidemic-form"> |
|||
<div class="dialog-h-content scroll-h"> |
|||
<el-form ref="ref_form" |
|||
:inline="true" |
|||
:model="formData" |
|||
:rules="dataRule" |
|||
:disabled="formType==='detail'" |
|||
class="form"> |
|||
|
|||
<el-form-item v-if="formType==='add'" |
|||
label="录入方式" |
|||
label-width="150px" |
|||
style="display: block"> |
|||
<el-radio-group v-model="enterType" |
|||
@change="handleChangeEnterType"> |
|||
|
|||
<el-radio :label="'1'">手动输入</el-radio> |
|||
<el-radio :label="'2'">选择居民</el-radio> |
|||
|
|||
</el-radio-group> |
|||
|
|||
</el-form-item> |
|||
|
|||
<el-form-item v-if="formType==='add'" |
|||
label="所属网格" |
|||
style="display: block" |
|||
label-width="150px"> |
|||
<el-select class="item_width_2" |
|||
v-model.trim="formData.gridId" |
|||
placeholder="请选择" |
|||
:disabled="!isFromResi" |
|||
clearable> |
|||
<el-option v-for="item in gridList" |
|||
@click.native="handleSelGrid(item.value)" |
|||
:key="item.value" |
|||
:label="item.label" |
|||
:value="item.value"> |
|||
</el-option> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item v-if="formType==='add'" |
|||
label="居民" |
|||
prop="userId" |
|||
style="display: block" |
|||
label-width="150px"> |
|||
<el-select class="item_width_2" |
|||
v-model.trim="formData.userId" |
|||
placeholder="请选择" |
|||
filterable |
|||
:disabled="!isFromResi" |
|||
clearable> |
|||
<el-option v-for="item in personList" |
|||
@click.native="handleSelPerson(item)" |
|||
:key="item.demandUserId" |
|||
:label="item.demandUserName" |
|||
:value="item.demandUserId"> |
|||
</el-option> |
|||
</el-select> |
|||
</el-form-item> |
|||
|
|||
<el-form-item label="姓名" |
|||
prop="name" |
|||
label-width="150px" |
|||
style="display: block"> |
|||
<el-input class="item_width_2" |
|||
placeholder="请输入姓名" |
|||
clearable |
|||
:disabled="isFromResi" |
|||
v-model="formData.name"> |
|||
</el-input> |
|||
|
|||
</el-form-item> |
|||
|
|||
<el-form-item label="手机号" |
|||
prop="mobile" |
|||
label-width="150px" |
|||
style="display: block"> |
|||
<el-input class="item_width_2" |
|||
placeholder="请输入手机号" |
|||
clearable |
|||
:disabled="isFromResi" |
|||
v-model="formData.mobile"> |
|||
</el-input> |
|||
</el-form-item> |
|||
<el-form-item label="身份证号" |
|||
prop="idCard" |
|||
label-width="150px" |
|||
style="display: block"> |
|||
<el-input class="item_width_2" |
|||
placeholder="请输入身份证号" |
|||
clearable |
|||
:disabled="isFromResi" |
|||
v-model="formData.idCard"> |
|||
</el-input> |
|||
</el-form-item> |
|||
|
|||
<el-form-item label="检测时间" |
|||
style="display: block" |
|||
prop="natTime" |
|||
label-width="150px"> |
|||
<el-date-picker class="item_width_2" |
|||
v-model="formData.natTime" |
|||
format="yyyy-MM-dd HH:mm" |
|||
value-format="yyyy-MM-dd HH:mm" |
|||
type="datetime" |
|||
clearable |
|||
placeholder="选择时间"> |
|||
</el-date-picker> |
|||
</el-form-item> |
|||
|
|||
<el-form-item label="检测地点" |
|||
prop="natAddress" |
|||
label-width="150px" |
|||
style="display: block"> |
|||
<el-input class="item_width_1" |
|||
placeholder="请输入检测地点" |
|||
clearable |
|||
v-model="formData.natAddress"> |
|||
</el-input> |
|||
</el-form-item> |
|||
|
|||
<el-form-item label="检测结果" |
|||
prop="type" |
|||
label-width="150px" |
|||
style="display: block"> |
|||
<el-radio-group v-model="formData.natResult"> |
|||
|
|||
<el-radio :label="'0'">阴性</el-radio> |
|||
<el-radio :label="'1'">阳性</el-radio> |
|||
|
|||
</el-radio-group> |
|||
</el-form-item> |
|||
|
|||
<el-form-item class="block" |
|||
label-width="150px" |
|||
style="display: block" |
|||
label="添加图片" |
|||
prop="attach"> |
|||
|
|||
<el-upload :action="uploadUlr" |
|||
list-type="picture-card" |
|||
:limit="limitNum" |
|||
:class="{hide:hideUploadEdit}" |
|||
accept=".jpg,.png,.gif" |
|||
:on-preview="handlePictureCardPreview" |
|||
:on-success="handleFileSuccess" |
|||
:on-remove="handleRemove" |
|||
:before-upload="beforeUpload" |
|||
:on-change="handleEditChange" |
|||
:file-list="fileList"> |
|||
<i v-if="formType!=='detail'" |
|||
class="el-icon-plus"></i> |
|||
<div v-if="formType!=='detail'" |
|||
slot="tip" |
|||
class="el-upload__tip">请选择1张图片,只能上传jpg、png、gif格式</div> |
|||
</el-upload> |
|||
|
|||
</el-form-item> |
|||
|
|||
<el-form-item label="通知渠道" |
|||
prop="channel" |
|||
label-width="150px" |
|||
style="display: block"> |
|||
<el-checkbox-group v-model="formData.channel"> |
|||
<el-checkbox key="0" |
|||
label="0">小程序通知</el-checkbox> |
|||
<el-checkbox key="1" |
|||
label="1">短信通知</el-checkbox> |
|||
|
|||
</el-checkbox-group> |
|||
</el-form-item> |
|||
|
|||
<el-form-item label="通知内容" |
|||
prop="content" |
|||
label-width="150px" |
|||
style="display: block"> |
|||
<el-input class="item_width_1" |
|||
type="textarea" |
|||
maxlength="1000" |
|||
show-word-limit |
|||
:autosize="{ minRows: 4, maxRows: 10 }" |
|||
clearable |
|||
placeholder="请输入通知内容" |
|||
v-model="formData.content"></el-input> |
|||
</el-form-item> |
|||
|
|||
</el-form> |
|||
</div> |
|||
|
|||
<div class="form_div_btn"> |
|||
<el-button size="small" |
|||
@click="handleCancle">取 消</el-button> |
|||
<el-button v-if="formType != 'detail'" |
|||
size="small" |
|||
type="primary" |
|||
:disabled="btnDisable" |
|||
@click="handleComfirm">确 定</el-button> |
|||
</div> |
|||
|
|||
<el-dialog :visible.sync="dialogVisible" |
|||
width="550px" |
|||
top="5vh" |
|||
append-to-body> |
|||
<img width="100%" |
|||
:src="dialogImageUrl" |
|||
alt=""> |
|||
</el-dialog> |
|||
|
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
|
|||
import { Loading } from 'element-ui' // 引入Loading服务 |
|||
import { requestPost } from '@/js/dai/request' |
|||
import { dateFormats } from '@/utils/index' |
|||
|
|||
|
|||
let loading // 加载动画 |
|||
export default { |
|||
data () { |
|||
return { |
|||
formType: 'add', //表单操作类型 add新增,edit编辑,detail详情 |
|||
hideUploadEdit: false, // 隐藏'上传按钮' |
|||
limitNum: 1, |
|||
enterType: '1',//录入方式1 手动输入 2 选择居民 |
|||
isFromResi: false,//是否从已有居民信息中选择 |
|||
|
|||
gridList: [], |
|||
personList: [], |
|||
|
|||
btnDisable: false, |
|||
|
|||
icNatId: '', |
|||
formData: { |
|||
icNatId: '', |
|||
agencyId: '',//当前网格所属组织Id |
|||
userId: '',//居民端小程序的用户id、数字社区的icResiUserId、其他情况无值 |
|||
userType: 'icresi',//居民端小程序的人:resi;数字社区的居民:icresi;导入的:import;同步的:synchro |
|||
name: '', |
|||
idCard: '', |
|||
mobile: '', |
|||
natTime: '', |
|||
natAddress: '', |
|||
natResult: '', |
|||
channel: [], |
|||
content: '', |
|||
|
|||
fileName: '',//附件名 |
|||
attachmentType: '',//附件类型((图片 - image、 视频 - video、 语音 - voice、 文档 - doc)) |
|||
attachmentUrl: '',//附件地址 |
|||
}, |
|||
|
|||
fileList: [], |
|||
uploadUlr: window.SITE_CONFIG['apiURL'] + '/oss/file/uploadvariedfile', |
|||
dialogImageUrl: '', |
|||
dialogVisible: false, |
|||
|
|||
} |
|||
}, |
|||
components: {}, |
|||
async mounted () { |
|||
const { user } = this.$store.state |
|||
this.agencyId = user.agencyId |
|||
//获取网格下拉框数据 |
|||
await this.loadGrid() |
|||
}, |
|||
|
|||
methods: { |
|||
|
|||
async initForm (type, icNatId) { |
|||
|
|||
this.formData.agencyId = this.agencyId |
|||
|
|||
this.$refs['ref_form'].resetFields(); |
|||
|
|||
this.formType = type |
|||
|
|||
if (icNatId) { |
|||
this.icNatId = icNatId |
|||
this.formData.icNatId = icNatId |
|||
this.isFromResi = false |
|||
await this.loadFormData() |
|||
} |
|||
|
|||
|
|||
}, |
|||
|
|||
handleChangeEnterType (value) { |
|||
this.formData.name = '' |
|||
this.formData.mobile = '' |
|||
this.formData.idCard = '' |
|||
this.formData.gridId = '' |
|||
this.formData.userId = '' |
|||
if (value === '2') { |
|||
this.isFromResi = true |
|||
} else { |
|||
this.isFromResi = false |
|||
} |
|||
|
|||
}, |
|||
|
|||
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 handleSelGrid (value) { |
|||
|
|||
const url = "/epmetuser/icresiuser/demandusers" |
|||
|
|||
let params = { |
|||
agencyId: this.agencyId, |
|||
gridId: value |
|||
} |
|||
|
|||
const { data, code, msg } = await requestPost(url, params) |
|||
|
|||
if (code === 0) { |
|||
this.personList = data |
|||
|
|||
} else { |
|||
this.$message.error(msg) |
|||
} |
|||
|
|||
}, |
|||
async handleSelPerson (personItem) { |
|||
this.formData.userId = personItem.demandUserId |
|||
this.formData.name = personItem.demandUserName |
|||
this.formData.mobile = personItem.demandUserMobile |
|||
this.formData.idCard = personItem.idCard |
|||
}, |
|||
|
|||
async loadFormData () { |
|||
|
|||
// const url = 'http://yapi.elinkservice.cn/mock/245/epmetuser/icNat/detail' |
|||
const url = '/epmetuser/icNat/detail' |
|||
let params = { |
|||
icNatId: this.icNatId, |
|||
} |
|||
const { data, code, msg } = await requestPost(url, params) |
|||
if (code === 0) { |
|||
this.formData = data |
|||
this.formData.icNatId = this.icNatId |
|||
this.fileList = [] |
|||
if (data.fileName) { |
|||
let obj = { |
|||
name: data.fileName, |
|||
type: data.attachmentType, |
|||
url: data.attachmentUrl, |
|||
} |
|||
// data.attachmentList.forEach(element => { |
|||
// element.name = element.fileName |
|||
// element.type = element.attachmentType |
|||
// element.size = element.attachmentSize |
|||
// }); |
|||
this.fileList.push(obj) |
|||
|
|||
} |
|||
|
|||
this.hideUploadEdit = this.fileList.length >= this.limitNum; |
|||
|
|||
} else { |
|||
this.$message.error(msg) |
|||
} |
|||
}, |
|||
|
|||
|
|||
async handleComfirm () { |
|||
this.btnDisable = true |
|||
setTimeout(() => { |
|||
this.btnDisable = false |
|||
}, 5000) |
|||
|
|||
const regPhone = /^1(3|4|5|6|7|8|9)\d{9}$/; //手机号码 |
|||
// if (regPhone.test(this.formData.mobile) === false) { |
|||
// this.btnDisable = false |
|||
// this.$message({ |
|||
// type: 'warning', |
|||
// message: '请输入正确的手机号码' |
|||
// }) |
|||
// return false; |
|||
// } |
|||
const regCard = /(^\d{15}$)|(^\d{17}(\d|X)$)/; //身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X |
|||
// if (regCard.test(this.formData.idCard) === false) { |
|||
// this.btnDisable = false |
|||
// this.$message({ |
|||
// type: 'warning', |
|||
// message: '请输入正确的身份证号码' |
|||
// }) |
|||
// return false; |
|||
// } |
|||
|
|||
let url = '' |
|||
if (this.formType === 'add') { |
|||
url = '/epmetuser/icNat/add' |
|||
// url = "http://yapi.elinkservice.cn/mock/102/epmetuser/icNat/add" |
|||
this.formData.icNatId = '' |
|||
|
|||
} else { |
|||
url = '/epmetuser/icNat/edit' |
|||
// url = "http://yapi.elinkservice.cn/mock/245/epmetuser/icNat/edit" |
|||
} |
|||
|
|||
|
|||
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') |
|||
|
|||
}, |
|||
|
|||
handleRemove (file, fileList) { |
|||
this.hideUploadEdit = fileList.length >= this.limitNum; |
|||
this.formData.fileName = '' |
|||
this.formData.attachmentUrl = '' |
|||
this.formData.attachmentType = '' |
|||
this.fileList = [] |
|||
|
|||
}, |
|||
handlePictureCardPreview (file) { |
|||
this.dialogImageUrl = file.url; |
|||
this.dialogVisible = true; |
|||
}, |
|||
|
|||
handleEditChange (file, fileList) { |
|||
this.hideUploadEdit = fileList.length >= this.limitNum; |
|||
|
|||
}, |
|||
|
|||
beforeUpload (file) { |
|||
const array = file.name.split('.') |
|||
const extension = array[array.length - 1] |
|||
// const isLt1M = (file.size / 1024 / 1024) < 5 |
|||
if (extension !== 'jpg' |
|||
&& extension !== 'png' |
|||
&& extension !== 'gif' |
|||
) { |
|||
this.$message.error('只能上传jpg、png、gif文件!') |
|||
return false |
|||
} |
|||
// if (!isLt1M) { |
|||
// this.$message.error('上传文件大小不能超过 5MB!') |
|||
// } |
|||
// return isLt1M |
|||
|
|||
}, |
|||
|
|||
handleFileSuccess (res, file) { |
|||
|
|||
if (res.code === 0 && res.msg === 'success') { |
|||
const array = file.name.split('.') |
|||
const fileType = array[array.length - 1] |
|||
|
|||
this.formData.fileName = file.name |
|||
this.formData.attachmentUrl = res.data.url |
|||
this.formData.attachmentType = 'image' |
|||
|
|||
file.attachmentFormat = fileType |
|||
file.attachmentSize = file.size |
|||
|
|||
} else this.$message.error(res.msg) |
|||
}, |
|||
|
|||
resetData () { |
|||
this.icNatId = '' |
|||
this.fileList = [] |
|||
this.hideUploadEdit = false |
|||
|
|||
this.formData = { |
|||
icNatId: '', |
|||
agencyId: '',//当前网格所属组织Id |
|||
userId: '',//居民端小程序的用户id、数字社区的icResiUserId、其他情况无值 |
|||
userType: 'icresi',//居民端小程序的人:resi;数字社区的居民:icresi;导入的:import;同步的:synchro |
|||
name: '', |
|||
idCard: '', |
|||
mobile: '', |
|||
natTime: '', |
|||
natAddress: '', |
|||
natResult: '', |
|||
channel: [], |
|||
content: '', |
|||
|
|||
fileName: '',//附件名 |
|||
attachmentType: '',//附件类型((图片 - image、 视频 - video、 语音 - voice、 文档 - doc)) |
|||
attachmentUrl: '',//附件地址 |
|||
|
|||
} |
|||
}, |
|||
// 开启加载动画 |
|||
startLoading () { |
|||
loading = Loading.service({ |
|||
lock: true, // 是否锁定 |
|||
text: '正在加载……', // 加载中需要显示的文字 |
|||
background: 'rgba(0,0,0,.7)' // 背景颜色 |
|||
}) |
|||
}, |
|||
// 结束加载动画 |
|||
endLoading () { |
|||
// clearTimeout(timer); |
|||
if (loading) { |
|||
loading.close() |
|||
} |
|||
} |
|||
}, |
|||
computed: { |
|||
dataRule () { |
|||
return { |
|||
name: [ |
|||
{ required: true, message: '姓名不能为空', trigger: 'blur' } |
|||
], |
|||
idCard: [ |
|||
{ required: true, message: '身份证号不能为空', trigger: 'blur' } |
|||
], |
|||
mobile: [ |
|||
{ required: true, message: '手机号不能为空', trigger: 'blur' }, |
|||
], |
|||
natTime: [ |
|||
{ required: true, message: '检测时间不能为空', trigger: 'blur' }, |
|||
], |
|||
|
|||
natAddress: [ |
|||
{ required: false }, |
|||
], |
|||
natResult: [ |
|||
{ required: true }, |
|||
], |
|||
natAddress: [ |
|||
{ required: false }, |
|||
], |
|||
channel: [ |
|||
{ required: false }, |
|||
], |
|||
content: [ |
|||
{ required: false }, |
|||
], |
|||
|
|||
} |
|||
}, |
|||
|
|||
}, |
|||
props: { |
|||
|
|||
|
|||
|
|||
// serviceList: { |
|||
// type: Array, |
|||
// default: [] |
|||
// }, |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
|
|||
<style lang="scss" scoped > |
|||
@import "@/assets/scss/modules/management/epidemic.scss"; |
|||
</style> |
|||
|
|||
<style lang='scss'> |
|||
// 隐藏上传按钮 |
|||
.hide .el-upload--picture-card { |
|||
display: none; |
|||
} |
|||
// 添加/删除文件时去掉动画过渡 |
|||
.el-upload-list__item { |
|||
transition: none !important; |
|||
} |
|||
</style> |
|||
|
|||
|
|||
|
|||
@ -0,0 +1,674 @@ |
|||
<template> |
|||
<div class="div_main"> |
|||
<div class="div_search"> |
|||
<el-form :inline="true" |
|||
:model="formData" |
|||
ref="ref_searchform" |
|||
:label-width="'90px'"> |
|||
<div> |
|||
<el-form-item label="信息范围"> |
|||
<el-select class="list_item_width_1" |
|||
size="small" |
|||
v-model.trim="formData.orgType" |
|||
placeholder="请选择"> |
|||
<el-option v-for="item in orgTypeList" |
|||
:key="item.value" |
|||
:label="item.label" |
|||
:value="item.value"> |
|||
</el-option> |
|||
</el-select> |
|||
</el-form-item> |
|||
|
|||
<el-form-item label="姓名" |
|||
prop="name"> |
|||
<el-input v-model="formData.name" |
|||
size="small" |
|||
class="list_item_width_1" |
|||
clearable |
|||
placeholder="请输入姓名"> |
|||
</el-input> |
|||
|
|||
</el-form-item> |
|||
|
|||
<el-form-item label="手机号" |
|||
prop="mobile"> |
|||
<el-input v-model="formData.mobile" |
|||
size="small" |
|||
class="list_item_width_1" |
|||
clearable |
|||
placeholder="请输入手机号"> |
|||
</el-input> |
|||
|
|||
</el-form-item> |
|||
<el-form-item label="身份证" |
|||
prop="idCard"> |
|||
<el-input v-model="formData.idCard" |
|||
size="small" |
|||
class="list_item_width_1" |
|||
clearable |
|||
placeholder="请输入身份证"> |
|||
</el-input> |
|||
|
|||
</el-form-item> |
|||
<div> |
|||
|
|||
<el-form-item label="接种时间" |
|||
prop="startTime"> |
|||
<el-date-picker v-model="timeRange" |
|||
size="small" |
|||
type="datetimerange" |
|||
@change="handleTimeChange" |
|||
format="yyyy-MM-dd HH:mm" |
|||
value-format="yyyy-MM-dd HH:mm" |
|||
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" |
|||
size="small" |
|||
class="diy-button--reset" |
|||
@click="resetSearch">重置</el-button> |
|||
</div> |
|||
</div> |
|||
</el-form> |
|||
</div> |
|||
<div class="div_table"> |
|||
<div class="div_btn"> |
|||
<el-button class="diy-button--add" |
|||
size="small" |
|||
@click="handleAdd">新增</el-button> |
|||
|
|||
<el-button style="float:left" |
|||
class="diy-button--export" |
|||
size="small" |
|||
@click="handleExportModule">下载模板</el-button> |
|||
<el-upload ref="upload" |
|||
:multiple='false' |
|||
:show-file-list='false' |
|||
:before-upload="beforeUpload" |
|||
action="" |
|||
accept=".xlsx" |
|||
:limit="1" |
|||
:on-exceed="handleExceed" |
|||
:http-request="uploadFile"> |
|||
<el-button style="margin-left:10px" |
|||
size="small" |
|||
class="diy-button--delete">导入</el-button> |
|||
</el-upload> |
|||
|
|||
<el-button style="float:left;margin-left:10px" |
|||
class="diy-button--reset" |
|||
size="small" |
|||
@click="handleExport">导出</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 label="序号" |
|||
header-align="center" |
|||
align="center" |
|||
type="index" |
|||
width="50"></el-table-column> |
|||
|
|||
<el-table-column prop="name" |
|||
header-align="center" |
|||
align="center" |
|||
label="姓名" |
|||
width="100"> |
|||
</el-table-column> |
|||
<el-table-column prop="mobile" |
|||
header-align="center" |
|||
align="center" |
|||
label="手机号" |
|||
width="110"> |
|||
</el-table-column> |
|||
<el-table-column prop="idCard" |
|||
header-align="center" |
|||
align="center" |
|||
label="身份证" |
|||
width="170"> |
|||
</el-table-column> |
|||
<el-table-column prop="natTime" |
|||
header-align="center" |
|||
align="center" |
|||
label="检测时间" |
|||
width="170"> |
|||
</el-table-column> |
|||
<el-table-column prop="natAddress" |
|||
header-align="center" |
|||
align="center" |
|||
show-overflow-tooltip |
|||
label="检测机构" |
|||
min-width="230"> |
|||
</el-table-column> |
|||
<el-table-column prop="natResultShow" |
|||
header-align="center" |
|||
align="center" |
|||
show-overflow-tooltip |
|||
label="检测结果" |
|||
width="100"> |
|||
</el-table-column> |
|||
|
|||
<el-table-column label="操作" |
|||
fixed="right" |
|||
width="140" |
|||
header-align="center" |
|||
align="center" |
|||
class="operate"> |
|||
<template slot-scope="scope"> |
|||
|
|||
<el-button type="text" |
|||
class="div-table-button--detail" |
|||
size="small" |
|||
@click="handleDetail(scope.row)">查看</el-button> |
|||
|
|||
<el-button v-if="scope.row.userType==='resi'||scope.row.userType==='icresi'" |
|||
type="text" |
|||
class="div-table-button--edit" |
|||
size="small" |
|||
@click="handleEdit(scope.row)">修改</el-button> |
|||
|
|||
<el-button v-if="scope.row.userType==='resi'||scope.row.userType==='icresi'" |
|||
type="text" |
|||
class="div-table-button--delete " |
|||
size="small" |
|||
@click="handleDelete(scope.row,'delete')">删除</el-button> |
|||
|
|||
<el-button v-if="scope.row.userType==='import'&&scope.row.agencyId!==agencyId" |
|||
type="text" |
|||
class="div-table-button--edit" |
|||
size="small" |
|||
@click="handleAttention(scope.row)">关注</el-button> |
|||
|
|||
<el-button v-if="scope.row.userType==='synchro'&&scope.row.agencyId===agencyId" |
|||
type="text" |
|||
class="div-table-button--delete " |
|||
size="small" |
|||
@click="handleDelete(scope.row,'attention')">取消关注</el-button> |
|||
<!-- <el-button type="text" |
|||
class="div-table-button--edit" |
|||
size="small" |
|||
@click="handleEdit(scope.row)">修改</el-button> |
|||
|
|||
<el-button type="text" |
|||
class="div-table-button--delete " |
|||
size="small" |
|||
@click="handleDelete(scope.row,'delete')">删除</el-button> |
|||
|
|||
<el-button type="text" |
|||
class="div-table-button--edit" |
|||
size="small" |
|||
@click="handleAttention(scope.row)">关注</el-button> |
|||
|
|||
<el-button type="text" |
|||
class="div-table-button--delete " |
|||
size="small" |
|||
@click="handleDelete(scope.row,'attention')">取消关注</el-button> --> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<div> |
|||
<el-pagination @size-change="handleSizeChange" |
|||
@current-change="handleCurrentChange" |
|||
:current-page.sync="pageNo" |
|||
:page-sizes="[20, 50, 100, 200]" |
|||
:page-size="pageSize" |
|||
layout="sizes, prev, pager, next, total" |
|||
:total="total"> |
|||
</el-pagination> |
|||
</div> |
|||
</div> |
|||
|
|||
<!-- 修改弹出框 --> |
|||
<el-dialog :visible.sync="formShow" |
|||
:close-on-click-modal="false" |
|||
:close-on-press-escape="false" |
|||
:title="formTitle" |
|||
width="850px" |
|||
top="5vh" |
|||
class="dialog-h" |
|||
@closed="diaClose"> |
|||
<nat-form ref="ref_form" |
|||
@dialogCancle="diaClose" |
|||
@dialogOk="addFormOk"></nat-form> |
|||
</el-dialog> |
|||
|
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
|
|||
import natForm from './natForm' |
|||
|
|||
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: 20, |
|||
pageNo: 0, |
|||
tableLoading: false, |
|||
|
|||
agencyId: '', |
|||
orgTypeList: [ |
|||
{ |
|||
value: 'current', |
|||
label: '本辖区居民检测记录' |
|||
}, |
|||
{ |
|||
value: 'all', |
|||
label: '全部检测记录' |
|||
}, |
|||
], |
|||
|
|||
timeRange: [], |
|||
formData: { |
|||
orgType: 'current',//当前组织:current 根组织:all |
|||
name: '',//姓名 |
|||
mobile: '',//手机号 |
|||
idCard: '',//身份证号码 |
|||
startTime: '',//检测开始时间yyyy-MM-dd HH:mm |
|||
endTime: '',//检测结束时间yyyy-MM-dd HH:mm |
|||
|
|||
}, |
|||
|
|||
tableData: [], |
|||
|
|||
//form相关 |
|||
formShow: false, |
|||
formTitle: '新增', |
|||
|
|||
} |
|||
}, |
|||
components: { |
|||
natForm |
|||
}, |
|||
async created () { |
|||
|
|||
}, |
|||
async mounted () { |
|||
//获取场所类型 |
|||
|
|||
|
|||
const { user } = this.$store.state |
|||
this.agencyId = user.agencyId |
|||
|
|||
|
|||
await this.loadTable() |
|||
}, |
|||
|
|||
methods: { |
|||
handleSearch () { |
|||
this.loadTable() |
|||
}, |
|||
|
|||
async loadTable () { |
|||
this.tableLoading = true |
|||
|
|||
const url = "/epmetuser/icNat/natlist" |
|||
// const url = "http://yapi.elinkservice.cn/mock/245/epmetuser/icNat/natlist" |
|||
let params = { |
|||
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 |
|||
|
|||
this.tableData.forEach(item => { |
|||
item.natResultShow = item.natResult === '1' ? '阳性' : '阴性' |
|||
|
|||
}); |
|||
} else { |
|||
this.$message.error(msg) |
|||
} |
|||
this.tableLoading = false |
|||
}, |
|||
|
|||
handleTimeChange (time) { |
|||
if (time) { |
|||
this.formData.startTime = time[0] |
|||
this.formData.endTime = time[1] |
|||
|
|||
} else { |
|||
this.formData.startTime = '' |
|||
this.formData.endTime = '' |
|||
|
|||
} |
|||
|
|||
}, |
|||
|
|||
diaClose () { |
|||
this.$refs.ref_form.resetData() |
|||
this.formShow = false |
|||
|
|||
}, |
|||
|
|||
handleDetail (row) { |
|||
this.formTitle = '详情' |
|||
this.formShow = true |
|||
this.$nextTick(() => { |
|||
this.$refs.ref_form.initForm('detail', row.icNatId) |
|||
}) |
|||
}, |
|||
|
|||
handleAdd () { |
|||
this.formTitle = '新增' |
|||
this.formShow = true |
|||
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.icNatId) |
|||
}) |
|||
}, |
|||
|
|||
addFormOk () { |
|||
this.formShow = false |
|||
this.loadTable() |
|||
|
|||
}, |
|||
|
|||
async handleDelete (row, type) { |
|||
let message = type === 'delete' ? '确认删除?' : '确认取消关注?' |
|||
|
|||
this.$confirm(message, "提示", { |
|||
confirmButtonText: "确定", |
|||
cancelButtonText: "取消", |
|||
type: "warning" |
|||
}) |
|||
.then(() => { |
|||
this.deleteNat(row) |
|||
}) |
|||
.catch(err => { |
|||
|
|||
}); |
|||
}, |
|||
|
|||
async deleteNat (row) { |
|||
const url = "/epmetuser/icNat/del" |
|||
// const url = "http://yapi.elinkservice.cn/mock/245/epmetuser/icNat/del" |
|||
|
|||
let params = { |
|||
icNatId: row.icNatId |
|||
} |
|||
|
|||
const { data, code, msg } = await requestPost(url, params) |
|||
|
|||
if (code === 0) { |
|||
this.$message({ |
|||
type: "success", |
|||
message: "操作成功" |
|||
}); |
|||
|
|||
this.loadTable() |
|||
} else { |
|||
this.$message.error(msg) |
|||
} |
|||
}, |
|||
|
|||
async handleAttention (row) { |
|||
|
|||
this.$confirm("确认同步该条信息?", "提示", { |
|||
confirmButtonText: "确定", |
|||
cancelButtonText: "取消", |
|||
type: "warning" |
|||
}) |
|||
.then(() => { |
|||
this.attentionNat(row) |
|||
}) |
|||
.catch(err => { |
|||
if (err == "cancel") { |
|||
|
|||
} |
|||
|
|||
}); |
|||
}, |
|||
|
|||
async attentionNat (row) { |
|||
const url = "/epmetuser/icNat/synchro" |
|||
// const url = "http://yapi.elinkservice.cn/mock/245/epmetuser/icNat/synchro" |
|||
|
|||
let params = { |
|||
icNatId: row.icNatId |
|||
} |
|||
|
|||
const { data, code, msg } = await requestPost(url, params) |
|||
|
|||
if (code === 0) { |
|||
this.$message({ |
|||
type: "success", |
|||
message: "操作成功" |
|||
}); |
|||
|
|||
this.loadTable() |
|||
} else { |
|||
this.$message.error(msg) |
|||
} |
|||
}, |
|||
|
|||
|
|||
//重置搜索条件 |
|||
resetSearch () { |
|||
this.formData = { |
|||
orgType: 'current',//当前组织:current 根组织:all |
|||
name: '',//姓名 |
|||
mobile: '',//手机号 |
|||
idCard: '',//身份证号码 |
|||
startTime: '',//检测开始时间yyyy-MM-dd HH:mm |
|||
endTime: '',//检测结束时间yyyy-MM-dd HH:mm |
|||
} |
|||
this.timeRange = [] |
|||
|
|||
this.pageNo = 0 |
|||
// this.loadTable() |
|||
}, |
|||
|
|||
|
|||
handleSizeChange (val) { |
|||
this.pageSize = val |
|||
this.pageNo = 1 |
|||
this.loadTable() |
|||
}, |
|||
handleCurrentChange (val) { |
|||
this.pageNo = val |
|||
this.loadTable() |
|||
}, |
|||
|
|||
//导出表格 |
|||
async handleExport () { |
|||
let title = '核酸检测信息' |
|||
|
|||
const url = "/epmetuser/icNat/export" |
|||
|
|||
app.ajax.exportFilePost( |
|||
url, |
|||
this.formData, |
|||
(data, rspMsg) => { |
|||
|
|||
|
|||
this.download(data, title + '.xlsx') |
|||
}, |
|||
(rspMsg, data) => { |
|||
this.$message.error(rspMsg); |
|||
} |
|||
); |
|||
|
|||
}, |
|||
|
|||
// 下载文件 |
|||
download (data, fileName) { |
|||
if (!data) { |
|||
return |
|||
} |
|||
|
|||
var csvData = new Blob([data]) |
|||
|
|||
if (window.navigator && window.navigator.msSaveOrOpenBlob) { |
|||
window.navigator.msSaveOrOpenBlob(csvData, fileName); |
|||
} |
|||
// for Non-IE (chrome, firefox etc.) |
|||
else { |
|||
var a = document.createElement('a'); |
|||
document.body.appendChild(a); |
|||
a.style = 'display: none'; |
|||
var url = window.URL.createObjectURL(csvData); |
|||
a.href = url; |
|||
a.download = fileName; |
|||
a.click(); |
|||
a.remove(); |
|||
window.URL.revokeObjectURL(url); |
|||
} |
|||
|
|||
}, |
|||
|
|||
handleExportModule () { |
|||
let title = '核酸检测信息导入模板' |
|||
|
|||
const url = "/epmetuser/icNat/import-template-download" |
|||
let params = {} |
|||
|
|||
app.ajax.exportFilePost( |
|||
url, |
|||
params, |
|||
(data, rspMsg) => { |
|||
|
|||
this.download(data, title + '.xlsx') |
|||
}, |
|||
(rspMsg, data) => { |
|||
this.$message.error(rspMsg); |
|||
} |
|||
); |
|||
}, |
|||
|
|||
// 上传文件之前的钩子 |
|||
beforeUpload (file) { |
|||
|
|||
const array = file.name.split('.') |
|||
const extension = array[array.length - 1] |
|||
// const isLt1M = (file.size / 1024 / 1024) < 5 |
|||
if (extension !== 'xlsx') { |
|||
this.$message.error('只能上传xlsx文件!') |
|||
return false |
|||
} else { |
|||
this.files = file; |
|||
this.fileName = file.name; |
|||
return true |
|||
} |
|||
|
|||
}, |
|||
// 上传文件个数超过定义的数量 |
|||
handleExceed (files, fileList) { |
|||
this.$message.warning(`当前限制选择 1 个文件,请删除后继续上传`) |
|||
}, |
|||
|
|||
async uploadFile () { |
|||
if (this.fileName == "") { |
|||
this.$message.warning('请选择要上传的文件!') |
|||
return false |
|||
} |
|||
|
|||
this.$message({ |
|||
showClose: true, |
|||
message: '导入中,请到系统管理-导入记录中查看进度', |
|||
duration: 0 |
|||
}) |
|||
|
|||
//清空上传列表 |
|||
this.$refs['upload'].clearFiles() |
|||
|
|||
var url = '/epmetuser/icNat/import' |
|||
|
|||
let fileFormData = new FormData(); |
|||
fileFormData.append('file', this.files);//filename是键,file是值,就是要传的文件,test.zip是要传的文件名 |
|||
|
|||
window.app.ajax.post2(url, fileFormData, |
|||
(data, rspMsg) => { |
|||
|
|||
if (data.code === 0 && data.msg == 'success') { |
|||
// this.$message.success('导入成功') |
|||
} else { |
|||
// this.$message({ |
|||
// showClose: true, |
|||
// message: rspMsg, |
|||
// duration: 0, |
|||
// type: "error" |
|||
// }) |
|||
// this.$message.error(rspMsg) |
|||
} |
|||
|
|||
// this.loadTable() |
|||
|
|||
}, |
|||
(rspMsg, data) => { |
|||
|
|||
}, { headers: { 'Content-Type': 'multipart/form-data' } }) |
|||
|
|||
|
|||
}, |
|||
|
|||
// 开启加载动画 |
|||
startLoading () { |
|||
loading = Loading.service({ |
|||
lock: true, // 是否锁定 |
|||
text: '正在加载……', // 加载中需要显示的文字 |
|||
background: 'rgba(0,0,0,.7)' // 背景颜色 |
|||
}) |
|||
}, |
|||
// 结束加载动画 |
|||
endLoading () { |
|||
// clearTimeout(timer); |
|||
if (loading) { |
|||
loading.close() |
|||
} |
|||
} |
|||
}, |
|||
computed: { |
|||
tableHeight () { |
|||
|
|||
return this.$store.state.inIframe ? this.clientHeight - 420 + this.iframeHeight : this.clientHeight - 420 |
|||
|
|||
|
|||
}, |
|||
|
|||
...mapGetters(['clientHeight', 'iframeHeight']) |
|||
}, |
|||
watch: { |
|||
|
|||
}, |
|||
props: { |
|||
|
|||
} |
|||
} |
|||
</script> |
|||
<style lang="scss" scoped > |
|||
@import "@/assets/scss/modules/management/epidemic.scss"; |
|||
</style> |
|||
|
|||
|
|||
@ -0,0 +1,565 @@ |
|||
<template> |
|||
<div class="div_main"> |
|||
<div ref="div_search" class="div_search"> |
|||
<el-form :inline="true" |
|||
:model="formData" |
|||
ref="ref_searchform" |
|||
:label-width="'90px'"> |
|||
<div> |
|||
|
|||
<el-form-item label="姓名" |
|||
prop="personInCharge"> |
|||
<el-input v-model="formData.personInCharge" |
|||
size="small" |
|||
class="list_item_width_1" |
|||
clearable |
|||
placeholder="请输入姓名"> |
|||
</el-input> |
|||
|
|||
</el-form-item> |
|||
|
|||
<el-form-item label="身份证" |
|||
prop="mobile"> |
|||
<el-input v-model="formData.mobile" |
|||
size="small" |
|||
class="list_item_width_1" |
|||
clearable |
|||
placeholder="请输入身份证"> |
|||
</el-input> |
|||
|
|||
</el-form-item> |
|||
|
|||
<el-form-item label="接种时间" |
|||
prop="scheduledStartTime"> |
|||
<el-date-picker v-model="timeRange" |
|||
size="small" |
|||
type="daterange" |
|||
value-format="yyyy-MM-dd" |
|||
@change="handleScheduledTimeChange" |
|||
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" |
|||
size="small" |
|||
class="diy-button--reset" |
|||
@click="resetSearch">重置</el-button> |
|||
</div> |
|||
</el-form> |
|||
</div> |
|||
<div class="div_table"> |
|||
<div class="div_btn"> |
|||
<el-button class="diy-button--add" |
|||
size="small" |
|||
@click="handleAdd">新增</el-button> |
|||
|
|||
<el-button style="float:left" |
|||
class="diy-button--export" |
|||
size="small" |
|||
@click="handleExportModule">下载模板</el-button> |
|||
<el-upload ref="upload" |
|||
:multiple='false' |
|||
:show-file-list='false' |
|||
:before-upload="beforeUpload" |
|||
action="" |
|||
accept=".xls,.xlsx" |
|||
:limit="1" |
|||
:on-exceed="handleExceed" |
|||
:http-request="uploadFile"> |
|||
<el-button style="margin-left:10px" |
|||
size="small" |
|||
class="diy-button--delete">导入</el-button> |
|||
</el-upload> |
|||
|
|||
<el-button style="float:left;margin-left:10px" |
|||
class="diy-button--reset" |
|||
size="small" |
|||
@click="handleExport">导出</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 label="序号" |
|||
header-align="center" |
|||
align="center" |
|||
type="index" |
|||
width="50"></el-table-column> |
|||
|
|||
<el-table-column prop="personInCharge" |
|||
header-align="center" |
|||
align="center" |
|||
label="姓名" |
|||
width="90"> |
|||
</el-table-column> |
|||
<el-table-column prop="mobile" |
|||
header-align="center" |
|||
align="center" |
|||
label="手机号" |
|||
width="110"> |
|||
</el-table-column> |
|||
<el-table-column prop="gridNames" |
|||
header-align="center" |
|||
align="center" |
|||
label="身份证" |
|||
min-width="170"> |
|||
</el-table-column> |
|||
<el-table-column prop="time" |
|||
header-align="center" |
|||
align="center" |
|||
label="检测时间" |
|||
width="120"> |
|||
</el-table-column> |
|||
<el-table-column prop="ninePlaceNames" |
|||
header-align="center" |
|||
align="center" |
|||
show-overflow-tooltip |
|||
label="检测机构" |
|||
min-width="230"> |
|||
</el-table-column> |
|||
<el-table-column prop="ninePlaceNames" |
|||
header-align="center" |
|||
align="center" |
|||
show-overflow-tooltip |
|||
label="检测结果" |
|||
min-width="80"> |
|||
</el-table-column> |
|||
|
|||
<el-table-column label="操作" |
|||
fixed="right" |
|||
width="140" |
|||
header-align="center" |
|||
align="center" |
|||
class="operate"> |
|||
<template slot-scope="scope"> |
|||
|
|||
<el-button type="text" |
|||
class="div-table-button--detail" |
|||
size="small" |
|||
@click="handleDetail(scope.row)">查看</el-button> |
|||
<el-button type="text" |
|||
class="div-table-button--edit" |
|||
size="small" |
|||
@click="handleEdit(scope.row)">修改</el-button> |
|||
|
|||
<el-button type="text" |
|||
class="div-table-button--delete--noline " |
|||
size="small" |
|||
@click="handleDelete(scope.row)">删除</el-button> |
|||
|
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<div> |
|||
<el-pagination @size-change="handleSizeChange" |
|||
@current-change="handleCurrentChange" |
|||
:current-page.sync="pageNo" |
|||
:page-sizes="[20, 50, 100, 200]" |
|||
:page-size="pageSize" |
|||
layout="sizes, prev, pager, next, total" |
|||
:total="total"> |
|||
</el-pagination> |
|||
</div> |
|||
</div> |
|||
|
|||
<!-- 修改弹出框 --> |
|||
<el-dialog :visible.sync="formShow" |
|||
:close-on-click-modal="false" |
|||
:close-on-press-escape="false" |
|||
:title="formTitle" |
|||
width="850px" |
|||
top="5vh" |
|||
class="dialog-h" |
|||
@closed="diaClose"> |
|||
<nat-form ref="ref_form" |
|||
@dialogCancle="addFormCancle" |
|||
@dialogOk="addFormOk"></nat-form> |
|||
</el-dialog> |
|||
|
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
|
|||
import natForm from './natInfo/natForm' |
|||
|
|||
import { requestPost } from "@/js/dai/request"; |
|||
import { mapGetters } from 'vuex' |
|||
|
|||
let loading // 加载动画 |
|||
export default { |
|||
data () { |
|||
return { |
|||
loading: false, |
|||
total: 0, |
|||
pageSize: 10, |
|||
pageNo: 0, |
|||
tableLoading: false, |
|||
sHeight: 0, |
|||
|
|||
agencyId: '', |
|||
|
|||
timeRange: [], |
|||
formData: { |
|||
personInCharge: '',//负责人 |
|||
mobile: '',//联系电话 |
|||
gridId: '',//负责区域【网格Id】 |
|||
ninePlaceVal: '',//场所类型【九小场所Value值】 |
|||
isPage: true,//是否分页(是:true 否:false) 有这个参数是给新增巡查记录时用的,默认是 |
|||
}, |
|||
|
|||
tableData: [], |
|||
|
|||
//form相关 |
|||
formShow: false, |
|||
formTitle: '新增', |
|||
|
|||
} |
|||
}, |
|||
components: { |
|||
natForm |
|||
}, |
|||
async created () { |
|||
|
|||
}, |
|||
async mounted () { |
|||
//获取场所类型 |
|||
|
|||
|
|||
const { user } = this.$store.state |
|||
this.agencyId = user.agencyId |
|||
|
|||
|
|||
await this.loadTable() |
|||
this.sHeight = this.$refs.div_search.offsetHeight + 270 |
|||
}, |
|||
|
|||
methods: { |
|||
handleSearch () { |
|||
this.loadTable() |
|||
}, |
|||
|
|||
|
|||
|
|||
|
|||
async loadTable () { |
|||
this.tableLoading = true |
|||
|
|||
const url = "/gov/org/placepatrolteam/getlist" |
|||
// const url = "http://yapi.elinkservice.cn/mock/245/gov/org/placeorg/getlist" |
|||
let params = { |
|||
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 |
|||
|
|||
this.tableData.forEach(item => { |
|||
if (item.time) { |
|||
let timeArray = item.time.split(' ') |
|||
item.time = timeArray[0] |
|||
} |
|||
|
|||
}); |
|||
} else { |
|||
this.$message.error(msg) |
|||
} |
|||
this.tableLoading = false |
|||
}, |
|||
|
|||
handleScheduledTimeChange (time) { |
|||
if (time) { |
|||
this.formData.scheduledStartTime = time[0] |
|||
this.formData.scheduledEndTime = time[1] |
|||
|
|||
} else { |
|||
this.formData.scheduledStartTime = '' |
|||
this.formData.scheduledEndTime = '' |
|||
|
|||
} |
|||
|
|||
}, |
|||
|
|||
diaClose () { |
|||
this.$refs.ref_form.resetData() |
|||
this.formShow = false |
|||
}, |
|||
|
|||
handleDetail (row) { |
|||
this.formTitle = '详情' |
|||
this.formShow = true |
|||
this.$nextTick(() => { |
|||
this.$refs.ref_form.initForm('detail', row.natId, this.agencyId) |
|||
}) |
|||
}, |
|||
|
|||
handleAdd () { |
|||
this.formTitle = '新增' |
|||
this.formShow = true |
|||
this.$nextTick(() => { |
|||
this.$refs.ref_form.initForm('add', null, this.agencyId) |
|||
}) |
|||
}, |
|||
|
|||
handleEdit (row) { |
|||
this.formTitle = '修改' |
|||
this.formShow = true |
|||
this.$nextTick(() => { |
|||
this.$refs.ref_form.initForm('edit', row.natId, this.agencyId) |
|||
}) |
|||
}, |
|||
|
|||
addFormCancle () { |
|||
this.formShow = false |
|||
}, |
|||
addFormOk () { |
|||
this.formShow = false |
|||
this.loadTable() |
|||
|
|||
}, |
|||
|
|||
async handleDelete (row) { |
|||
|
|||
this.$confirm("确认删除?", "提示", { |
|||
confirmButtonText: "确定", |
|||
cancelButtonText: "取消", |
|||
type: "warning" |
|||
}) |
|||
.then(() => { |
|||
this.deleteNat(row) |
|||
}) |
|||
.catch(err => { |
|||
if (err == "cancel") { |
|||
|
|||
} |
|||
|
|||
}); |
|||
}, |
|||
|
|||
async deleteNat (row) { |
|||
const url = "/gov/org/placepatrolteam/del" |
|||
// const url = "http://yapi.elinkservice.cn/mock/245/gov/org/placepatrolteam/del" |
|||
|
|||
let params = { |
|||
natId: row.natId |
|||
} |
|||
|
|||
const { data, code, msg } = await requestPost(url, params) |
|||
|
|||
if (code === 0) { |
|||
this.$message({ |
|||
type: "success", |
|||
message: "删除成功" |
|||
}); |
|||
|
|||
this.loadTable() |
|||
} else { |
|||
this.$message.error(msg) |
|||
} |
|||
}, |
|||
|
|||
//重置搜索条件 |
|||
resetSearch () { |
|||
this.formData = { |
|||
personInCharge: '',//负责人 |
|||
mobile: '',//联系电话 |
|||
gridId: '',//负责区域【网格Id】 |
|||
ninePlaceVal: '',//场所类型【九小场所Value值】 |
|||
isPage: true,//是否分页(是:true 否:false) 有这个参数是给新增巡查记录时用的,默认是 |
|||
} |
|||
this.pageSize = 10 |
|||
this.pageNo = 0 |
|||
this.loadTable() |
|||
}, |
|||
|
|||
|
|||
handleSizeChange (val) { |
|||
this.pageSize = val |
|||
this.pageNo = 1 |
|||
this.loadTable() |
|||
}, |
|||
handleCurrentChange (val) { |
|||
this.pageNo = val |
|||
this.loadTable() |
|||
}, |
|||
|
|||
//导出表格 |
|||
async handleExport () { |
|||
let title = this.agencyObj.label |
|||
title = title + '—房屋列表' |
|||
|
|||
const url = "/gov/org/house/exporthouseinfo" |
|||
let params = { |
|||
ownerName: this.ownerName, |
|||
ownerPhone: this.ownerPhone, |
|||
buildingId: this.agencyObj.id |
|||
} |
|||
|
|||
app.ajax.exportFilePost( |
|||
url, |
|||
params, |
|||
(data, rspMsg) => { |
|||
|
|||
this.download(data, title + '.xls') |
|||
}, |
|||
(rspMsg, data) => { |
|||
this.$message.error(rspMsg); |
|||
} |
|||
); |
|||
|
|||
}, |
|||
|
|||
// 下载文件 |
|||
download (data, fileName) { |
|||
if (!data) { |
|||
return |
|||
} |
|||
|
|||
var csvData = new Blob([data]) |
|||
|
|||
if (window.navigator && window.navigator.msSaveOrOpenBlob) { |
|||
window.navigator.msSaveOrOpenBlob(csvData, fileName); |
|||
} |
|||
// for Non-IE (chrome, firefox etc.) |
|||
else { |
|||
var a = document.createElement('a'); |
|||
document.body.appendChild(a); |
|||
a.style = 'display: none'; |
|||
var url = window.URL.createObjectURL(csvData); |
|||
a.href = url; |
|||
a.download = fileName; |
|||
a.click(); |
|||
a.remove(); |
|||
window.URL.revokeObjectURL(url); |
|||
} |
|||
|
|||
}, |
|||
|
|||
handleExportModule () { |
|||
let title = '' |
|||
title = '房屋模板' |
|||
|
|||
const url = "/gov/org/house/exporttemplate" |
|||
let params = {} |
|||
|
|||
app.ajax.exportFilePost( |
|||
url, |
|||
params, |
|||
(data, rspMsg) => { |
|||
|
|||
this.download(data, title + '.xls') |
|||
}, |
|||
(rspMsg, data) => { |
|||
this.$message.error(rspMsg); |
|||
} |
|||
); |
|||
}, |
|||
|
|||
// 上传文件之前的钩子 |
|||
beforeUpload (file) { |
|||
this.files = file; |
|||
|
|||
const isText = file.type === 'application/vnd.ms-excel' |
|||
const isTextComputer = file.type === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' |
|||
|
|||
if (!isText && !isTextComputer) { |
|||
this.$message.error('请选择正确格式的文件') |
|||
return false |
|||
} else { |
|||
this.fileName = file.name; |
|||
return true |
|||
} |
|||
|
|||
}, |
|||
// 上传文件个数超过定义的数量 |
|||
handleExceed (files, fileList) { |
|||
this.$message.warning(`当前限制选择 1 个文件,请删除后继续上传`) |
|||
}, |
|||
|
|||
async uploadFile () { |
|||
if (this.fileName == "") { |
|||
this.$message.warning('请选择要上传的文件!') |
|||
return false |
|||
} |
|||
|
|||
this.$message({ |
|||
showClose: true, |
|||
message: '导入中,请到系统管理-导入记录中查看进度', |
|||
duration: 0 |
|||
}) |
|||
|
|||
//清空上传列表 |
|||
this.$refs['upload'].clearFiles() |
|||
|
|||
var url = '/gov/org/house/houseimport' |
|||
|
|||
let fileFormData = new FormData(); |
|||
fileFormData.append('file', this.files);//filename是键,file是值,就是要传的文件,test.zip是要传的文件名 |
|||
fileFormData.append('orgId', this.agencyObj.id);//filename是键,file是值,就是要传的文件,test.zip是要传的文件名 |
|||
fileFormData.append('orgType', this.agencyObj.level);//filename是键,file是值,就是要传的文件,test.zip是要传的文件名 |
|||
|
|||
this.importRoomLoading = true |
|||
window.app.ajax.post2(url, fileFormData, |
|||
(data, rspMsg) => { |
|||
|
|||
if (data.code === 0 && data.msg == 'success') { |
|||
// this.$message.success('导入成功') |
|||
} else { |
|||
// this.$message({ |
|||
// showClose: true, |
|||
// message: rspMsg, |
|||
// duration: 0, |
|||
// type: "error" |
|||
// }) |
|||
// this.$message.error(rspMsg) |
|||
} |
|||
this.$emit('refreshTree') |
|||
this.loadTable() |
|||
this.importRoomLoading = false |
|||
}, |
|||
(rspMsg, data) => { |
|||
this.importRoomLoading = false |
|||
}, { headers: { 'Content-Type': 'multipart/form-data' } }) |
|||
|
|||
|
|||
} |
|||
}, |
|||
computed: { |
|||
tableHeight () { |
|||
const h = this.clientHeight - this.sHeight + this.iframeHeigh |
|||
const _h = this.clientHeight - this.sHeight |
|||
return this.$store.state.inIframe ? h : _h |
|||
|
|||
}, |
|||
|
|||
...mapGetters(['clientHeight', 'iframeHeight']) |
|||
}, |
|||
watch: { |
|||
|
|||
}, |
|||
props: { |
|||
|
|||
} |
|||
} |
|||
</script> |
|||
<style lang="scss" scoped > |
|||
@import "@/assets/scss/modules/management/epidemic.scss"; |
|||
</style> |
|||
|
|||
|
|||
@ -0,0 +1,564 @@ |
|||
<template> |
|||
<div class="div_main"> |
|||
<div ref="div_search" class="div_search"> |
|||
<el-form :inline="true" |
|||
:model="formData" |
|||
ref="ref_searchform" |
|||
:label-width="'90px'"> |
|||
<div> |
|||
|
|||
<el-form-item label="姓名" |
|||
prop="personInCharge"> |
|||
<el-input v-model="formData.personInCharge" |
|||
size="small" |
|||
class="list_item_width_1" |
|||
clearable |
|||
placeholder="请输入姓名"> |
|||
</el-input> |
|||
|
|||
</el-form-item> |
|||
|
|||
<el-form-item label="身份证" |
|||
prop="mobile"> |
|||
<el-input v-model="formData.mobile" |
|||
size="small" |
|||
class="list_item_width_1" |
|||
clearable |
|||
placeholder="请输入身份证"> |
|||
</el-input> |
|||
|
|||
</el-form-item> |
|||
|
|||
<el-form-item label="接种时间" |
|||
prop="scheduledStartTime"> |
|||
<el-date-picker v-model="timeRange" |
|||
size="small" |
|||
type="daterange" |
|||
value-format="yyyy-MM-dd" |
|||
@change="handleScheduledTimeChange" |
|||
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" |
|||
size="small" |
|||
class="diy-button--reset" |
|||
@click="resetSearch">重置</el-button> |
|||
</div> |
|||
</el-form> |
|||
</div> |
|||
<div class="div_table"> |
|||
<div class="div_btn"> |
|||
<el-button class="diy-button--add" |
|||
size="small" |
|||
@click="handleAdd">新增</el-button> |
|||
|
|||
<el-button style="float:left" |
|||
class="diy-button--export" |
|||
size="small" |
|||
@click="handleExportModule">下载模板</el-button> |
|||
<el-upload ref="upload" |
|||
:multiple='false' |
|||
:show-file-list='false' |
|||
:before-upload="beforeUpload" |
|||
action="" |
|||
accept=".xls,.xlsx" |
|||
:limit="1" |
|||
:on-exceed="handleExceed" |
|||
:http-request="uploadFile"> |
|||
<el-button style="margin-left:10px" |
|||
size="small" |
|||
class="diy-button--delete">导入</el-button> |
|||
</el-upload> |
|||
|
|||
<el-button style="float:left;margin-left:10px" |
|||
class="diy-button--reset" |
|||
size="small" |
|||
@click="handleExport">导出</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 label="序号" |
|||
header-align="center" |
|||
align="center" |
|||
type="index" |
|||
width="50"></el-table-column> |
|||
|
|||
<el-table-column prop="personInCharge" |
|||
header-align="center" |
|||
align="center" |
|||
label="姓名" |
|||
width="90"> |
|||
</el-table-column> |
|||
<el-table-column prop="mobile" |
|||
header-align="center" |
|||
align="center" |
|||
label="手机号" |
|||
width="110"> |
|||
</el-table-column> |
|||
<el-table-column prop="gridNames" |
|||
header-align="center" |
|||
align="center" |
|||
label="身份证" |
|||
width="170"> |
|||
</el-table-column> |
|||
<el-table-column prop="time" |
|||
header-align="center" |
|||
align="center" |
|||
label="接种时间" |
|||
width="120"> |
|||
</el-table-column> |
|||
<el-table-column prop="ninePlaceNames" |
|||
header-align="center" |
|||
align="center" |
|||
show-overflow-tooltip |
|||
label="接种地点" |
|||
min-width="230"> |
|||
</el-table-column> |
|||
<el-table-column prop="ninePlaceNames" |
|||
header-align="center" |
|||
align="center" |
|||
show-overflow-tooltip |
|||
label="疫苗厂家" |
|||
min-width="180"> |
|||
</el-table-column> |
|||
|
|||
<el-table-column label="操作" |
|||
fixed="right" |
|||
width="140" |
|||
header-align="center" |
|||
align="center" |
|||
class="operate"> |
|||
<template slot-scope="scope"> |
|||
|
|||
<el-button type="text" |
|||
class="div-table-button--detail" |
|||
size="small" |
|||
@click="handleDetail(scope.row)">查看</el-button> |
|||
<!-- <el-button type="text" |
|||
class="div-table-button--edit" |
|||
size="small" |
|||
@click="handleEdit(scope.row)">修改</el-button> |
|||
|
|||
<el-button type="text" |
|||
class="div-table-button--delete--noline " |
|||
size="small" |
|||
@click="handleDelete(scope.row)">删除</el-button> --> |
|||
|
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<div> |
|||
<el-pagination @size-change="handleSizeChange" |
|||
@current-change="handleCurrentChange" |
|||
:current-page.sync="pageNo" |
|||
:page-sizes="[20, 50, 100, 200]" |
|||
:page-size="pageSize" |
|||
layout="sizes, prev, pager, next, total" |
|||
:total="total"> |
|||
</el-pagination> |
|||
</div> |
|||
</div> |
|||
|
|||
<!-- 修改弹出框 --> |
|||
<el-dialog :visible.sync="formShow" |
|||
:close-on-click-modal="false" |
|||
:close-on-press-escape="false" |
|||
:title="formTitle" |
|||
width="850px" |
|||
top="5vh" |
|||
class="dialog-h" |
|||
@closed="diaClose"> |
|||
<nat-form ref="ref_form" |
|||
@dialogCancle="addFormCancle" |
|||
@dialogOk="addFormOk"></nat-form> |
|||
</el-dialog> |
|||
|
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
|
|||
import natForm from './natInfo/natForm' |
|||
|
|||
import { requestPost } from "@/js/dai/request"; |
|||
import { mapGetters } from 'vuex' |
|||
|
|||
let loading // 加载动画 |
|||
export default { |
|||
data () { |
|||
return { |
|||
loading: false, |
|||
total: 0, |
|||
pageSize: 10, |
|||
pageNo: 0, |
|||
tableLoading: false, |
|||
sHeight: 0, |
|||
agencyId: '', |
|||
|
|||
timeRange: [], |
|||
formData: { |
|||
personInCharge: '',//负责人 |
|||
mobile: '',//联系电话 |
|||
gridId: '',//负责区域【网格Id】 |
|||
ninePlaceVal: '',//场所类型【九小场所Value值】 |
|||
isPage: true,//是否分页(是:true 否:false) 有这个参数是给新增巡查记录时用的,默认是 |
|||
}, |
|||
|
|||
tableData: [], |
|||
|
|||
//form相关 |
|||
formShow: false, |
|||
formTitle: '新增', |
|||
|
|||
} |
|||
}, |
|||
components: { |
|||
natForm |
|||
}, |
|||
async created () { |
|||
|
|||
}, |
|||
async mounted () { |
|||
//获取场所类型 |
|||
|
|||
|
|||
const { user } = this.$store.state |
|||
this.agencyId = user.agencyId |
|||
|
|||
|
|||
await this.loadTable() |
|||
this.sHeight = this.$refs.div_search.offsetHeight + 270 |
|||
}, |
|||
|
|||
methods: { |
|||
handleSearch () { |
|||
this.loadTable() |
|||
}, |
|||
|
|||
|
|||
|
|||
|
|||
async loadTable () { |
|||
this.tableLoading = true |
|||
|
|||
const url = "/gov/org/placepatrolteam/getlist" |
|||
// const url = "http://yapi.elinkservice.cn/mock/245/gov/org/placeorg/getlist" |
|||
let params = { |
|||
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 |
|||
|
|||
this.tableData.forEach(item => { |
|||
if (item.time) { |
|||
let timeArray = item.time.split(' ') |
|||
item.time = timeArray[0] |
|||
} |
|||
|
|||
}); |
|||
} else { |
|||
this.$message.error(msg) |
|||
} |
|||
this.tableLoading = false |
|||
}, |
|||
|
|||
handleScheduledTimeChange (time) { |
|||
if (time) { |
|||
this.formData.scheduledStartTime = time[0] |
|||
this.formData.scheduledEndTime = time[1] |
|||
|
|||
} else { |
|||
this.formData.scheduledStartTime = '' |
|||
this.formData.scheduledEndTime = '' |
|||
|
|||
} |
|||
|
|||
}, |
|||
|
|||
diaClose () { |
|||
this.$refs.ref_form.resetData() |
|||
this.formShow = false |
|||
}, |
|||
|
|||
handleDetail (row) { |
|||
this.formTitle = '详情' |
|||
this.formShow = true |
|||
this.$nextTick(() => { |
|||
this.$refs.ref_form.initForm('detail', row.natId, this.agencyId) |
|||
}) |
|||
}, |
|||
|
|||
handleAdd () { |
|||
this.formTitle = '新增' |
|||
this.formShow = true |
|||
this.$nextTick(() => { |
|||
this.$refs.ref_form.initForm('add', null, this.agencyId) |
|||
}) |
|||
}, |
|||
|
|||
handleEdit (row) { |
|||
this.formTitle = '修改' |
|||
this.formShow = true |
|||
this.$nextTick(() => { |
|||
this.$refs.ref_form.initForm('edit', row.natId, this.agencyId) |
|||
}) |
|||
}, |
|||
|
|||
addFormCancle () { |
|||
this.formShow = false |
|||
}, |
|||
addFormOk () { |
|||
this.formShow = false |
|||
this.loadTable() |
|||
|
|||
}, |
|||
|
|||
async handleDelete (row) { |
|||
|
|||
this.$confirm("确认删除?", "提示", { |
|||
confirmButtonText: "确定", |
|||
cancelButtonText: "取消", |
|||
type: "warning" |
|||
}) |
|||
.then(() => { |
|||
this.deleteNat(row) |
|||
}) |
|||
.catch(err => { |
|||
if (err == "cancel") { |
|||
|
|||
} |
|||
|
|||
}); |
|||
}, |
|||
|
|||
async deleteNat (row) { |
|||
const url = "/gov/org/placepatrolteam/del" |
|||
// const url = "http://yapi.elinkservice.cn/mock/245/gov/org/placepatrolteam/del" |
|||
|
|||
let params = { |
|||
natId: row.natId |
|||
} |
|||
|
|||
const { data, code, msg } = await requestPost(url, params) |
|||
|
|||
if (code === 0) { |
|||
this.$message({ |
|||
type: "success", |
|||
message: "删除成功" |
|||
}); |
|||
|
|||
this.loadTable() |
|||
} else { |
|||
this.$message.error(msg) |
|||
} |
|||
}, |
|||
|
|||
//重置搜索条件 |
|||
resetSearch () { |
|||
this.formData = { |
|||
personInCharge: '',//负责人 |
|||
mobile: '',//联系电话 |
|||
gridId: '',//负责区域【网格Id】 |
|||
ninePlaceVal: '',//场所类型【九小场所Value值】 |
|||
isPage: true,//是否分页(是:true 否:false) 有这个参数是给新增巡查记录时用的,默认是 |
|||
} |
|||
this.pageSize = 10 |
|||
this.pageNo = 0 |
|||
this.loadTable() |
|||
}, |
|||
|
|||
|
|||
handleSizeChange (val) { |
|||
this.pageSize = val |
|||
this.pageNo = 1 |
|||
this.loadTable() |
|||
}, |
|||
handleCurrentChange (val) { |
|||
this.pageNo = val |
|||
this.loadTable() |
|||
}, |
|||
|
|||
//导出表格 |
|||
async handleExport () { |
|||
let title = this.agencyObj.label |
|||
title = title + '—房屋列表' |
|||
|
|||
const url = "/gov/org/house/exporthouseinfo" |
|||
let params = { |
|||
ownerName: this.ownerName, |
|||
ownerPhone: this.ownerPhone, |
|||
buildingId: this.agencyObj.id |
|||
} |
|||
|
|||
app.ajax.exportFilePost( |
|||
url, |
|||
params, |
|||
(data, rspMsg) => { |
|||
|
|||
this.download(data, title + '.xls') |
|||
}, |
|||
(rspMsg, data) => { |
|||
this.$message.error(rspMsg); |
|||
} |
|||
); |
|||
|
|||
}, |
|||
|
|||
// 下载文件 |
|||
download (data, fileName) { |
|||
if (!data) { |
|||
return |
|||
} |
|||
|
|||
var csvData = new Blob([data]) |
|||
|
|||
if (window.navigator && window.navigator.msSaveOrOpenBlob) { |
|||
window.navigator.msSaveOrOpenBlob(csvData, fileName); |
|||
} |
|||
// for Non-IE (chrome, firefox etc.) |
|||
else { |
|||
var a = document.createElement('a'); |
|||
document.body.appendChild(a); |
|||
a.style = 'display: none'; |
|||
var url = window.URL.createObjectURL(csvData); |
|||
a.href = url; |
|||
a.download = fileName; |
|||
a.click(); |
|||
a.remove(); |
|||
window.URL.revokeObjectURL(url); |
|||
} |
|||
|
|||
}, |
|||
|
|||
handleExportModule () { |
|||
let title = '' |
|||
title = '房屋模板' |
|||
|
|||
const url = "/gov/org/house/exporttemplate" |
|||
let params = {} |
|||
|
|||
app.ajax.exportFilePost( |
|||
url, |
|||
params, |
|||
(data, rspMsg) => { |
|||
|
|||
this.download(data, title + '.xls') |
|||
}, |
|||
(rspMsg, data) => { |
|||
this.$message.error(rspMsg); |
|||
} |
|||
); |
|||
}, |
|||
|
|||
// 上传文件之前的钩子 |
|||
beforeUpload (file) { |
|||
this.files = file; |
|||
|
|||
const isText = file.type === 'application/vnd.ms-excel' |
|||
const isTextComputer = file.type === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' |
|||
|
|||
if (!isText && !isTextComputer) { |
|||
this.$message.error('请选择正确格式的文件') |
|||
return false |
|||
} else { |
|||
this.fileName = file.name; |
|||
return true |
|||
} |
|||
|
|||
}, |
|||
// 上传文件个数超过定义的数量 |
|||
handleExceed (files, fileList) { |
|||
this.$message.warning(`当前限制选择 1 个文件,请删除后继续上传`) |
|||
}, |
|||
|
|||
async uploadFile () { |
|||
if (this.fileName == "") { |
|||
this.$message.warning('请选择要上传的文件!') |
|||
return false |
|||
} |
|||
|
|||
this.$message({ |
|||
showClose: true, |
|||
message: '导入中,请到系统管理-导入记录中查看进度', |
|||
duration: 0 |
|||
}) |
|||
|
|||
//清空上传列表 |
|||
this.$refs['upload'].clearFiles() |
|||
|
|||
var url = '/gov/org/house/houseimport' |
|||
|
|||
let fileFormData = new FormData(); |
|||
fileFormData.append('file', this.files);//filename是键,file是值,就是要传的文件,test.zip是要传的文件名 |
|||
fileFormData.append('orgId', this.agencyObj.id);//filename是键,file是值,就是要传的文件,test.zip是要传的文件名 |
|||
fileFormData.append('orgType', this.agencyObj.level);//filename是键,file是值,就是要传的文件,test.zip是要传的文件名 |
|||
|
|||
this.importRoomLoading = true |
|||
window.app.ajax.post2(url, fileFormData, |
|||
(data, rspMsg) => { |
|||
|
|||
if (data.code === 0 && data.msg == 'success') { |
|||
// this.$message.success('导入成功') |
|||
} else { |
|||
// this.$message({ |
|||
// showClose: true, |
|||
// message: rspMsg, |
|||
// duration: 0, |
|||
// type: "error" |
|||
// }) |
|||
// this.$message.error(rspMsg) |
|||
} |
|||
this.$emit('refreshTree') |
|||
this.loadTable() |
|||
this.importRoomLoading = false |
|||
}, |
|||
(rspMsg, data) => { |
|||
this.importRoomLoading = false |
|||
}, { headers: { 'Content-Type': 'multipart/form-data' } }) |
|||
|
|||
|
|||
} |
|||
}, |
|||
computed: { |
|||
tableHeight () { |
|||
const h = this.clientHeight - this.sHeight + this.iframeHeigh |
|||
const _h = this.clientHeight - this.sHeight |
|||
return this.$store.state.inIframe ? h : _h |
|||
|
|||
}, |
|||
|
|||
...mapGetters(['clientHeight', 'iframeHeight']) |
|||
}, |
|||
watch: { |
|||
|
|||
}, |
|||
props: { |
|||
|
|||
} |
|||
} |
|||
</script> |
|||
<style lang="scss" scoped > |
|||
@import "@/assets/scss/modules/management/epidemic.scss"; |
|||
</style> |
|||
|
|||
|
|||
@ -0,0 +1,687 @@ |
|||
<template> |
|||
<div class="epidemic-form"> |
|||
<div class="dialog-h-content scroll-h"> |
|||
|
|||
<el-tabs v-model="activeName" |
|||
type="card" |
|||
class="main_tab" |
|||
@tab-click="handleClick"> |
|||
<el-tab-pane label="逐个添加" |
|||
name="first"> |
|||
<el-form ref="ref_form1" |
|||
:inline="true" |
|||
:model="formData1" |
|||
:rules="dataRule1" |
|||
class="form"> |
|||
|
|||
<el-form-item label="姓名" |
|||
prop="name" |
|||
label-width="150px" |
|||
style="display: block"> |
|||
<el-input class="item_width_2" |
|||
placeholder="请输入姓名" |
|||
clearable |
|||
v-model="formData1.name"> |
|||
</el-input> |
|||
|
|||
</el-form-item> |
|||
|
|||
<el-form-item label="手机号" |
|||
prop="mobile" |
|||
label-width="150px" |
|||
style="display: block"> |
|||
<el-input class="item_width_2" |
|||
placeholder="请输入手机号" |
|||
clearable |
|||
v-model="formData1.mobile"> |
|||
</el-input> |
|||
</el-form-item> |
|||
<el-form-item label="身份证号" |
|||
prop="idCard" |
|||
label-width="150px" |
|||
style="display: block"> |
|||
<el-input class="item_width_2" |
|||
placeholder="请输入身份证号" |
|||
clearable |
|||
v-model="formData1.idCard"> |
|||
</el-input> |
|||
</el-form-item> |
|||
<el-form-item label="备注" |
|||
prop="remark" |
|||
label-width="150px" |
|||
style="display: block"> |
|||
<el-input class="item_width_1" |
|||
type="textarea" |
|||
maxlength="500" |
|||
show-word-limit |
|||
:autosize="{ minRows: 2, maxRows: 5 }" |
|||
clearable |
|||
placeholder="请输入通知备注" |
|||
v-model="formData1.remark"></el-input> |
|||
</el-form-item> |
|||
|
|||
<el-form-item label="通知渠道" |
|||
prop="channel" |
|||
label-width="150px" |
|||
style="display: block"> |
|||
<el-checkbox-group v-model="formData1.channel"> |
|||
<el-checkbox key="1" |
|||
label="1">小程序通知</el-checkbox> |
|||
<el-checkbox key="2" |
|||
label="2">短信通知</el-checkbox> |
|||
|
|||
</el-checkbox-group> |
|||
</el-form-item> |
|||
|
|||
<el-form-item label="通知内容" |
|||
prop="content" |
|||
label-width="150px" |
|||
style="display: block"> |
|||
<el-input class="item_width_1" |
|||
type="textarea" |
|||
maxlength="1000" |
|||
show-word-limit |
|||
:autosize="{ minRows: 4, maxRows: 10 }" |
|||
clearable |
|||
placeholder="请输入通知内容" |
|||
v-model="formData1.content"></el-input> |
|||
</el-form-item> |
|||
|
|||
</el-form> |
|||
</el-tab-pane> |
|||
<el-tab-pane label="批量添加" |
|||
name="second"> |
|||
|
|||
<div class="div-mult-table"> |
|||
<el-form :inline="true" |
|||
:model="formDataSearch" |
|||
ref="ref_formSearch" |
|||
:label-width="'90px'"> |
|||
<el-form-item label="所属网格" |
|||
label-width="80px"> |
|||
<el-select class="item_width_3" |
|||
v-model.trim="formDataSearch.gridId" |
|||
placeholder="请选择" |
|||
size="mini" |
|||
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="疫苗接种次数小于" |
|||
label-width="150px"> |
|||
<el-input-number class="item_width_3" |
|||
v-model="formDataSearch.vaccineCount" |
|||
size="mini" |
|||
:min="0" |
|||
:max="20" |
|||
label="疫苗接种次数小于"></el-input-number> |
|||
</el-form-item> |
|||
<el-button style="margin-left:30px" |
|||
size="mini" |
|||
class="diy-button--search" |
|||
@click="handleSearch">查询</el-button> |
|||
<el-button style="margin-left:10px" |
|||
size="mini" |
|||
class="diy-button--reset" |
|||
@click="resetSearch">重置</el-button> |
|||
</el-form> |
|||
<el-table ref="ref_table" |
|||
class="table" |
|||
size="mini" |
|||
:data="tableData" |
|||
border |
|||
:height="tableHeight" |
|||
v-loading="tableLoading" |
|||
:reserve-selection="true" |
|||
:header-cell-style="{background:'#2195FE',color:'#FFFFFF'}" |
|||
@select="handleSelectTable" |
|||
@select-all="handleSelAll" |
|||
style="width: 100%"> |
|||
<el-table-column type="selection" |
|||
width="55"></el-table-column> |
|||
<el-table-column label="序号" |
|||
header-align="center" |
|||
align="center" |
|||
type="index" |
|||
width="50"></el-table-column> |
|||
|
|||
<el-table-column prop="name" |
|||
header-align="center" |
|||
align="center" |
|||
label="姓名" |
|||
width="90"> |
|||
</el-table-column> |
|||
<el-table-column prop="mobile" |
|||
header-align="center" |
|||
align="center" |
|||
label="手机号" |
|||
width="110"> |
|||
</el-table-column> |
|||
<el-table-column prop="idCard" |
|||
header-align="center" |
|||
align="center" |
|||
label="身份证" |
|||
min-width="170"> |
|||
</el-table-column> |
|||
<el-table-column prop="idCard" |
|||
header-align="center" |
|||
align="center" |
|||
label="疫苗接种次数" |
|||
min-width="100"> |
|||
</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="pageSize" |
|||
layout="sizes, prev, pager, next, total" |
|||
:total="total"> |
|||
</el-pagination> |
|||
</div> |
|||
|
|||
</div> |
|||
<div class="div-mult-form"> |
|||
|
|||
<!-- <div class="div_person"> |
|||
<div class="person_title">已选居民</div> |
|||
<div v-if="selectionAll.length>0"> |
|||
<el-tag class="tag_item" |
|||
v-for="(tag,index) in selectionAll" |
|||
:key="index" |
|||
:disable-transitions="false" |
|||
@close="handleCloseTag(tag,index)" |
|||
closable> |
|||
{{tag.name}} |
|||
</el-tag> |
|||
</div> |
|||
<div v-else |
|||
class="tag_tip">请从列表中选择居民</div> |
|||
</div> --> |
|||
<el-form :inline="true" |
|||
:model="formData2" |
|||
ref="ref_form2" |
|||
:label-width="'90px'"> |
|||
<el-form-item label="已选择人数" |
|||
label-width="100px" |
|||
style="display: block"> |
|||
<span> {{selectionAll.length}}</span> |
|||
</el-form-item> |
|||
<el-form-item label="备注" |
|||
prop="remark" |
|||
label-width="100px" |
|||
style="display: block"> |
|||
<el-input class="item_width_1" |
|||
type="textarea" |
|||
maxlength="500" |
|||
show-word-limit |
|||
:autosize="{ minRows: 2, maxRows: 5 }" |
|||
clearable |
|||
placeholder="请输入通知备注" |
|||
v-model="formData2.remark"></el-input> |
|||
</el-form-item> |
|||
|
|||
<el-form-item label="通知渠道" |
|||
prop="channel" |
|||
label-width="100px" |
|||
style="display: block"> |
|||
<el-checkbox-group v-model="formData2.channel"> |
|||
<el-checkbox key="0" |
|||
label="0">小程序通知</el-checkbox> |
|||
<el-checkbox key="1" |
|||
label="1">短信通知</el-checkbox> |
|||
|
|||
</el-checkbox-group> |
|||
</el-form-item> |
|||
|
|||
<el-form-item label="通知内容" |
|||
prop="content" |
|||
label-width="100px" |
|||
style="display: block"> |
|||
<el-input class="item_width_1" |
|||
type="textarea" |
|||
maxlength="1000" |
|||
show-word-limit |
|||
:autosize="{ minRows: 4, maxRows: 10 }" |
|||
clearable |
|||
placeholder="请输入通知内容" |
|||
v-model="formData2.content"></el-input> |
|||
</el-form-item> |
|||
</el-form> |
|||
</div> |
|||
</el-tab-pane> |
|||
</el-tabs> |
|||
|
|||
</div> |
|||
|
|||
<div class="form_div_btn"> |
|||
<el-button size="small" |
|||
@click="handleCancle">取 消</el-button> |
|||
<el-button size="small" |
|||
type="primary" |
|||
:disabled="btnDisable" |
|||
@click="handleComfirm">确 定</el-button> |
|||
</div> |
|||
|
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
|
|||
import { Loading } from 'element-ui' // 引入Loading服务 |
|||
import { requestPost } from '@/js/dai/request' |
|||
import { mapGetters } from 'vuex' |
|||
|
|||
|
|||
let loading // 加载动画 |
|||
export default { |
|||
data () { |
|||
return { |
|||
|
|||
activeName: "first", |
|||
|
|||
gridList: [], |
|||
|
|||
btnDisable: false, |
|||
|
|||
formDataSearch: { |
|||
gridId: '', |
|||
vaccineCount: undefined, |
|||
}, |
|||
|
|||
formData1: { |
|||
attentionType: 1, |
|||
name: '', |
|||
idCard: '', |
|||
mobile: '', |
|||
remark: '', |
|||
channel: [], |
|||
content: '', |
|||
|
|||
}, |
|||
|
|||
formData2: { |
|||
attentionType: 1, |
|||
remark: '', |
|||
channel: [], |
|||
content: '', |
|||
}, |
|||
tableData: [], |
|||
total: 0, |
|||
pageSize: 20, |
|||
pageNo: 1, |
|||
tableLoading: false, |
|||
|
|||
selectionAll: [],//选中的人员 |
|||
|
|||
} |
|||
}, |
|||
components: {}, |
|||
async mounted () { |
|||
const { user } = this.$store.state |
|||
this.agencyId = user.agencyId |
|||
//获取网格下拉框数据 |
|||
await this.loadGrid() |
|||
}, |
|||
|
|||
methods: { |
|||
|
|||
async initForm () { |
|||
|
|||
this.$refs['ref_form1'].resetFields(); |
|||
this.$refs['ref_form2'].resetFields(); |
|||
|
|||
await this.loadTable() |
|||
|
|||
}, |
|||
|
|||
handleSearch () { |
|||
this.loadTable() |
|||
}, |
|||
|
|||
async loadTable () { |
|||
this.tableLoading = true |
|||
|
|||
// const url = "/epmetuser/epidemicPrevention/page" |
|||
const url = "http://yapi.elinkservice.cn/mock/245/epmetuser/epidemicPrevention/page" |
|||
let params = { |
|||
pageSize: this.pageSize, |
|||
pageNo: this.pageNo, |
|||
...this.formDataSearch |
|||
} |
|||
|
|||
const { data, code, msg } = await requestPost(url, params) |
|||
|
|||
if (code === 0) { |
|||
this.total = data.total |
|||
data.list.forEach(element => { |
|||
element.isSel = false |
|||
}); |
|||
this.tableData = data.list |
|||
|
|||
this.analysisTableSelection() |
|||
|
|||
|
|||
} else { |
|||
this.$message.error(msg) |
|||
} |
|||
this.tableLoading = false |
|||
}, |
|||
|
|||
handleSelectTable (selection, row) { |
|||
|
|||
row.isSel = !row.isSel |
|||
|
|||
if (row.isSel) { |
|||
this.selectionAll.push(row) |
|||
} else { |
|||
for (let i = 0; i < this.selectionAll.length; i++) { |
|||
let item = this.selectionAll[i] |
|||
if (item.idCard === row.idCard) { |
|||
this.selectionAll.splice(i, 1) |
|||
break |
|||
} |
|||
|
|||
} |
|||
} |
|||
|
|||
}, |
|||
|
|||
handleSelAll (selection) { |
|||
let selFlag = selection.length > 0//全选选中 还是 全选不选中 |
|||
for (let i = 0; i < this.tableData.length; i++) { |
|||
let tableItem = this.tableData[i] |
|||
tableItem.isSel = selFlag |
|||
let isHasItem = false |
|||
for (let j = 0; j < this.selectionAll.length; j++) { |
|||
let selectionItem = this.selectionAll[j] |
|||
if (selectionItem.idCard === tableItem.idCard) { |
|||
isHasItem = true |
|||
if (!selFlag) { |
|||
this.selectionAll.splice(j, 1) |
|||
break |
|||
} |
|||
} |
|||
|
|||
} |
|||
|
|||
if (!isHasItem && selFlag) { |
|||
this.selectionAll.push(tableItem) |
|||
} |
|||
|
|||
} |
|||
|
|||
}, |
|||
|
|||
//删除标签 |
|||
handleCloseTag (tag, index) { |
|||
for (let i = 0; i < this.tableData.length; i++) { |
|||
|
|||
let tableItem = this.tableData[i] |
|||
if (tag.idCard === tableItem.idCard) {//如果表中存在这个数据 |
|||
tableItem.isSel = false |
|||
this.$refs.ref_table.toggleRowSelection(tableItem); |
|||
break |
|||
} |
|||
|
|||
} |
|||
|
|||
for (let i = 0; i < this.selectionAll.length; i++) { |
|||
let item = this.selectionAll[i] |
|||
if (item.idCard === tag.idCard) { |
|||
this.selectionAll.splice(i, 1) |
|||
break |
|||
} |
|||
|
|||
} |
|||
}, |
|||
|
|||
//回显列表选中的行 |
|||
analysisTableSelection () { |
|||
this.$nextTick(() => { |
|||
this.tableData.forEach(tableItem => { |
|||
|
|||
|
|||
for (let j = 0; j < this.selectionAll.length; j++) { |
|||
let selectionItem = this.selectionAll[j] |
|||
|
|||
if (selectionItem.idCard === tableItem.idCard) { |
|||
tableItem.isSel = true |
|||
break |
|||
|
|||
} |
|||
} |
|||
if (tableItem.isSel) { |
|||
this.$refs.ref_table.toggleRowSelection(tableItem); |
|||
} |
|||
}); |
|||
}) |
|||
|
|||
|
|||
}, |
|||
|
|||
handleClick () { |
|||
|
|||
}, |
|||
|
|||
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 handleComfirm () { |
|||
this.btnDisable = true |
|||
setTimeout(() => { |
|||
this.btnDisable = false |
|||
}, 5000) |
|||
|
|||
|
|||
await this.addVero() |
|||
|
|||
|
|||
}, |
|||
async addVero () { |
|||
let list = [] |
|||
if (this.activeName === 'first') { |
|||
list.push(this.formData1) |
|||
|
|||
const regPhone = /^1(3|4|5|6|7|8|9)\d{9}$/; //手机号码 |
|||
// if (regPhone.test(this.formData.mobile) === false) { |
|||
// this.btnDisable = false |
|||
// this.$message({ |
|||
// type: 'warning', |
|||
// message: '请输入正确的手机号码' |
|||
// }) |
|||
// return false; |
|||
// } |
|||
} else { |
|||
if (this.selectionAll.length === 0) { |
|||
this.$message.info('请选择批量添加的人员') |
|||
return false |
|||
} |
|||
|
|||
this.selectionAll.forEach(element => { |
|||
let obj = { |
|||
name: element.name, |
|||
idCard: element.idCard, |
|||
mobile: element.mobile, |
|||
|
|||
...this.formData2 |
|||
} |
|||
|
|||
list.push(obj) |
|||
}); |
|||
|
|||
} |
|||
console.log(list) |
|||
return false |
|||
|
|||
|
|||
let url = '' |
|||
|
|||
url = '/epmetuser/icEpidemicSpecialAttention/vaccination-add' |
|||
// url = "http://yapi.elinkservice.cn/mock/245/gov/project/memoConcern/save" |
|||
this.formData.id = '' |
|||
|
|||
|
|||
|
|||
|
|||
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 |
|||
this.$store.dispatch('setTipsList') |
|||
this.$store.dispatch('setTipsTime') |
|||
} else { |
|||
this.btnDisable = false |
|||
this.$message.error(msg) |
|||
} |
|||
|
|||
}, |
|||
|
|||
handleCancle () { |
|||
|
|||
this.resetData() |
|||
this.$emit('dialogCancle') |
|||
|
|||
}, |
|||
|
|||
resetSearch () { |
|||
this.formDataSearch = { |
|||
gridId: '', |
|||
vaccineCount: undefined, |
|||
|
|||
|
|||
} |
|||
}, |
|||
|
|||
destroyed () { |
|||
console.log(11111111) |
|||
}, |
|||
|
|||
resetData () { |
|||
|
|||
this.formData1 = { |
|||
name: '', |
|||
idCard: '', |
|||
mobile: '', |
|||
remark: '', |
|||
channel: [], |
|||
content: '', |
|||
attentionType: 1, |
|||
} |
|||
|
|||
this.formData2 = { |
|||
attentionType: 1, |
|||
remark: '', |
|||
channel: [], |
|||
content: '', |
|||
} |
|||
this.formDataSearch = { |
|||
gridId: '', |
|||
vaccineCount: undefined, |
|||
} |
|||
|
|||
this.selectionAll = []//选中的人员 |
|||
|
|||
|
|||
}, |
|||
|
|||
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 300 |
|||
|
|||
}, |
|||
...mapGetters(['clientHeight', 'iframeHeight']), |
|||
|
|||
dataRule1 () { |
|||
|
|||
return { |
|||
name: [ |
|||
{ required: true, message: '姓名不能为空', trigger: 'blur' } |
|||
], |
|||
idCard: [ |
|||
{ required: true, message: '身份证号不能为空', trigger: 'blur' } |
|||
], |
|||
mobile: [ |
|||
{ required: true, message: '手机号不能为空', trigger: 'blur' }, |
|||
], |
|||
|
|||
|
|||
|
|||
|
|||
} |
|||
}, |
|||
|
|||
}, |
|||
props: { |
|||
|
|||
|
|||
|
|||
// serviceList: { |
|||
// type: Array, |
|||
// default: [] |
|||
// }, |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
|
|||
<style lang="scss" scoped > |
|||
@import "@/assets/scss/modules/management/epidemic.scss"; |
|||
</style> |
|||
|
|||
|
|||
@ -0,0 +1,302 @@ |
|||
<template> |
|||
<div class="epidemic-form"> |
|||
<div class="dialog-h-content scroll-h"> |
|||
|
|||
<el-form ref="ref_form1" |
|||
:inline="true" |
|||
:model="formData" |
|||
:rules="dataRule" |
|||
:disabled="formType==='detail'" |
|||
class="form"> |
|||
|
|||
<el-form-item label="姓名" |
|||
prop="name" |
|||
label-width="150px" |
|||
style="display: block"> |
|||
<el-input class="item_width_2" |
|||
placeholder="请输入姓名" |
|||
clearable |
|||
v-model="formData.name"> |
|||
</el-input> |
|||
|
|||
</el-form-item> |
|||
|
|||
<el-form-item label="手机号" |
|||
prop="mobile" |
|||
label-width="150px" |
|||
style="display: block"> |
|||
<el-input class="item_width_2" |
|||
placeholder="请输入手机号" |
|||
clearable |
|||
v-model="formData.mobile"> |
|||
</el-input> |
|||
</el-form-item> |
|||
<el-form-item label="身份证号" |
|||
prop="idCard" |
|||
label-width="150px" |
|||
style="display: block"> |
|||
<el-input class="item_width_2" |
|||
placeholder="请输入身份证号" |
|||
clearable |
|||
v-model="formData.idCard"> |
|||
</el-input> |
|||
</el-form-item> |
|||
<el-form-item label="备注" |
|||
prop="remark" |
|||
label-width="150px" |
|||
style="display: block"> |
|||
<el-input class="item_width_1" |
|||
type="textarea" |
|||
maxlength="500" |
|||
show-word-limit |
|||
:autosize="{ minRows: 2, maxRows: 5 }" |
|||
clearable |
|||
placeholder="请输入通知备注" |
|||
v-model="formData.remark"></el-input> |
|||
</el-form-item> |
|||
|
|||
<el-form-item label="通知渠道" |
|||
prop="channel" |
|||
label-width="150px" |
|||
style="display: block"> |
|||
<el-checkbox-group v-model="formData.channel"> |
|||
<el-checkbox key="0" |
|||
label="0">小程序通知</el-checkbox> |
|||
<el-checkbox key="1" |
|||
label="1">短信通知</el-checkbox> |
|||
|
|||
</el-checkbox-group> |
|||
</el-form-item> |
|||
|
|||
<el-form-item label="通知内容" |
|||
prop="content" |
|||
label-width="150px" |
|||
style="display: block"> |
|||
<el-input class="item_width_1" |
|||
type="textarea" |
|||
maxlength="1000" |
|||
show-word-limit |
|||
:autosize="{ minRows: 4, maxRows: 10 }" |
|||
clearable |
|||
placeholder="请输入通知内容" |
|||
v-model="formData.content"></el-input> |
|||
</el-form-item> |
|||
|
|||
</el-form> |
|||
|
|||
</div> |
|||
|
|||
<div class="form_div_btn"> |
|||
<el-button size="small" |
|||
@click="handleCancle">取 消</el-button> |
|||
<el-button v-if="formType!=='detail'" |
|||
size="small" |
|||
type="primary" |
|||
:disabled="btnDisable" |
|||
@click="handleComfirm">确 定</el-button> |
|||
</div> |
|||
|
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
|
|||
import { Loading } from 'element-ui' // 引入Loading服务 |
|||
import { requestPost } from '@/js/dai/request' |
|||
import { mapGetters } from 'vuex' |
|||
|
|||
|
|||
let loading // 加载动画 |
|||
export default { |
|||
data () { |
|||
return { |
|||
|
|||
formType: "edit", |
|||
|
|||
gridList: [], |
|||
|
|||
btnDisable: false, |
|||
|
|||
formData: { |
|||
attentionType: 1, |
|||
name: '', |
|||
idCard: '', |
|||
mobile: '', |
|||
remark: '', |
|||
channel: [], |
|||
content: '', |
|||
}, |
|||
|
|||
} |
|||
}, |
|||
components: {}, |
|||
async mounted () { |
|||
|
|||
}, |
|||
|
|||
methods: { |
|||
|
|||
async initForm (formType, row) { |
|||
this.formType = formType |
|||
this.$refs['ref_form1'].resetFields(); |
|||
|
|||
this.formData = JSON.parse(JSON.stringify(row)) |
|||
}, |
|||
|
|||
async handleComfirm () { |
|||
this.btnDisable = true |
|||
setTimeout(() => { |
|||
this.btnDisable = false |
|||
}, 5000) |
|||
|
|||
|
|||
await this.addVero() |
|||
|
|||
}, |
|||
async addVero () { |
|||
|
|||
const regPhone = /^1(3|4|5|6|7|8|9)\d{9}$/; //手机号码 |
|||
// if (regPhone.test(this.formData.mobile) === false) { |
|||
// this.btnDisable = false |
|||
// this.$message({ |
|||
// type: 'warning', |
|||
// message: '请输入正确的手机号码' |
|||
// }) |
|||
// return false; |
|||
// } |
|||
|
|||
|
|||
let url = '' |
|||
|
|||
// url = '/epmetuser/icEpidemicSpecialAttention/vaccination-update' |
|||
url = "http://yapi.elinkservice.cn/mock/245/epmetuser/icEpidemicSpecialAttention/vaccination-update" |
|||
|
|||
|
|||
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.veroId = '' |
|||
|
|||
this.formData = { |
|||
name: '', |
|||
idCard: '', |
|||
mobile: '', |
|||
remark: '', |
|||
channel: [], |
|||
content: '', |
|||
|
|||
} |
|||
}, |
|||
|
|||
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 200 |
|||
|
|||
}, |
|||
|
|||
...mapGetters(['clientHeight', 'iframeHeight']), |
|||
dataRule () { |
|||
return { |
|||
name: [ |
|||
{ required: true, message: '姓名不能为空', trigger: 'blur' } |
|||
], |
|||
idCard: [ |
|||
{ required: true, message: '身份证号不能为空', trigger: 'blur' } |
|||
], |
|||
mobile: [ |
|||
{ required: true, message: '手机号不能为空', trigger: 'blur' }, |
|||
], |
|||
checkTime: [ |
|||
{ required: true, message: '检测时间不能为空', trigger: 'blur' }, |
|||
], |
|||
|
|||
address: [ |
|||
{ required: false }, |
|||
], |
|||
result: [ |
|||
{ required: true }, |
|||
], |
|||
address: [ |
|||
{ required: false }, |
|||
], |
|||
channel: [ |
|||
{ required: false }, |
|||
], |
|||
content: [ |
|||
{ required: false }, |
|||
], |
|||
|
|||
} |
|||
}, |
|||
|
|||
}, |
|||
props: { |
|||
|
|||
|
|||
|
|||
// serviceList: { |
|||
// type: Array, |
|||
// default: [] |
|||
// }, |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
|
|||
<style lang="scss" scoped > |
|||
@import "@/assets/scss/modules/management/epidemic.scss"; |
|||
</style> |
|||
|
|||
|
|||
@ -0,0 +1,782 @@ |
|||
<template> |
|||
<div class="div_main"> |
|||
<div class="div_search"> |
|||
<el-form :inline="true" |
|||
:model="formData" |
|||
ref="ref_searchform" |
|||
:label-width="'90px'"> |
|||
<div> |
|||
|
|||
<el-form-item label="姓名" |
|||
prop="name"> |
|||
<el-input v-model="formData.name" |
|||
size="small" |
|||
class="list_item_width_1" |
|||
clearable |
|||
placeholder="请输入姓名"> |
|||
</el-input> |
|||
|
|||
</el-form-item> |
|||
<el-form-item label="手机号" |
|||
prop="mobile"> |
|||
<el-input v-model="formData.mobile" |
|||
size="small" |
|||
class="list_item_width_1" |
|||
clearable |
|||
placeholder="请输入手机号"> |
|||
</el-input> |
|||
|
|||
</el-form-item> |
|||
|
|||
<el-form-item label="身份证" |
|||
prop="mobile"> |
|||
<el-input v-model="formData.idCard" |
|||
size="small" |
|||
class="list_item_width_1" |
|||
clearable |
|||
placeholder="请输入身份证"> |
|||
</el-input> |
|||
|
|||
</el-form-item> |
|||
|
|||
<el-form-item label="接种针次" |
|||
prop="vaccinationCount"> |
|||
<el-select class="list_item_width_1" |
|||
v-model.trim="formData.vaccinationCount" |
|||
placeholder="请选择" |
|||
clearable> |
|||
<el-option v-for="item in veroNumList" |
|||
:key="item.value" |
|||
:label="item.label" |
|||
:value="item.value"> |
|||
</el-option> |
|||
</el-select> |
|||
|
|||
</el-form-item> |
|||
|
|||
<el-button style="margin-left:30px" |
|||
size="small" |
|||
class="diy-button--search" |
|||
@click="handleSearch">查询</el-button> |
|||
<el-button style="margin-left:10px" |
|||
size="small" |
|||
class="diy-button--reset" |
|||
@click="resetSearch">重置</el-button> |
|||
</div> |
|||
</el-form> |
|||
</div> |
|||
<div class="div_table"> |
|||
<div class="div_btn"> |
|||
<el-button class="diy-button--add" |
|||
size="small" |
|||
@click="addFormShow=true">新增</el-button> |
|||
|
|||
<el-button style="float:left" |
|||
class="diy-button--export" |
|||
size="small" |
|||
@click="handleExportModule">下载模板</el-button> |
|||
<el-upload ref="upload" |
|||
:multiple='false' |
|||
:show-file-list='false' |
|||
:before-upload="beforeUpload" |
|||
action="" |
|||
accept=".xlsx" |
|||
:limit="1" |
|||
:on-exceed="handleExceed" |
|||
:http-request="uploadFile"> |
|||
<el-button style="margin-left:10px" |
|||
size="small" |
|||
class="diy-button--delete">导入</el-button> |
|||
</el-upload> |
|||
|
|||
<el-button style="float:left;margin-left:10px" |
|||
class="diy-button--reset" |
|||
size="small" |
|||
@click="handleExport">导出</el-button> |
|||
|
|||
<el-button style="margin-left:15px" |
|||
class="diy-button--more" |
|||
size="small" |
|||
@click="handleSendNotice">发送通知</el-button> |
|||
<el-button style="margin-left:15px" |
|||
class="diy-button--more" |
|||
size="small" |
|||
@click="handleDelete">取消关注</el-button> |
|||
</div> |
|||
|
|||
<el-table ref="ref_table" |
|||
class="table" |
|||
:data="tableData" |
|||
border |
|||
:height="tableHeight" |
|||
v-loading="tableLoading" |
|||
:header-cell-style="{background:'#2195FE',color:'#FFFFFF'}" |
|||
@select="handleSelectTable" |
|||
@select-all="handleSelAll" |
|||
style="width: 100%"> |
|||
<el-table-column type="selection" |
|||
width="55"></el-table-column> |
|||
<el-table-column label="序号" |
|||
header-align="center" |
|||
align="center" |
|||
type="index" |
|||
width="50"></el-table-column> |
|||
|
|||
<el-table-column prop="name" |
|||
header-align="center" |
|||
align="center" |
|||
label="姓名" |
|||
width="90"> |
|||
</el-table-column> |
|||
<el-table-column prop="mobile" |
|||
header-align="center" |
|||
align="center" |
|||
label="手机号" |
|||
width="110"> |
|||
</el-table-column> |
|||
<el-table-column prop="idCard" |
|||
header-align="center" |
|||
align="center" |
|||
label="身份证" |
|||
min-width="170"> |
|||
</el-table-column> |
|||
<el-table-column prop="vaccinationCount" |
|||
header-align="center" |
|||
align="center" |
|||
label="接种针次" |
|||
width="100"> |
|||
</el-table-column> |
|||
<el-table-column prop="remark" |
|||
header-align="center" |
|||
align="center" |
|||
show-overflow-tooltip |
|||
label="备注" |
|||
min-width="230"> |
|||
</el-table-column> |
|||
<el-table-column prop="lastInformTime" |
|||
header-align="center" |
|||
align="center" |
|||
show-overflow-tooltip |
|||
label="最后一次通知时间" |
|||
min-width="120"> |
|||
</el-table-column> |
|||
|
|||
<el-table-column label="操作" |
|||
fixed="right" |
|||
width="140" |
|||
header-align="center" |
|||
align="center" |
|||
class="operate"> |
|||
<template slot-scope="scope"> |
|||
|
|||
<el-button type="text" |
|||
class="div-table-button--detail" |
|||
size="small" |
|||
@click="handleDetail(scope.row)">查看</el-button> |
|||
<el-button type="text" |
|||
class="div-table-button--edit" |
|||
size="small" |
|||
@click="handleEdit(scope.row)">修改</el-button> |
|||
|
|||
<el-popover popper-class="btn-popper" |
|||
placement="bottom" |
|||
style="margin-left:10px" |
|||
width="20" |
|||
trigger="click"> |
|||
<div class="more-btn"> |
|||
<el-button type="text" |
|||
class="div-table-button--detail--noline" |
|||
size="small" |
|||
@click="handleNoticeList(scope.row)">通知记录</el-button> |
|||
</div> |
|||
|
|||
<div class="more-btn"> |
|||
<el-button type="text" |
|||
class="div-table-button--detail--noline" |
|||
size="small" |
|||
@click="handleVisiteList(scope.row) ">随访记录</el-button> |
|||
</div> |
|||
|
|||
<el-button type="text" |
|||
size="small" |
|||
class="div-table-button--more" |
|||
slot="reference">更多<i class="el-icon-caret-bottom"></i></el-button> |
|||
</el-popover> |
|||
|
|||
</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="pageSize" |
|||
layout="sizes, prev, pager, next, total" |
|||
:total="total"> |
|||
</el-pagination> |
|||
</div> |
|||
|
|||
</div> |
|||
|
|||
<!-- 新增弹出框 --> |
|||
<el-dialog :visible.sync="addFormShow" |
|||
:close-on-click-modal="false" |
|||
:close-on-press-escape="false" |
|||
title="新增" |
|||
width="1050px" |
|||
top="5vh" |
|||
class="dialog-h" |
|||
@closed="diaClose"> |
|||
<vero-focus-add ref="ref_form_add" |
|||
@dialogCancle="diaClose" |
|||
@dialogOk="addFormOk"></vero-focus-add> |
|||
</el-dialog> |
|||
<!-- 修改弹出框 --> |
|||
<el-dialog :visible.sync="editFormShow" |
|||
:close-on-click-modal="false" |
|||
:close-on-press-escape="false" |
|||
title="修改" |
|||
width="1050px" |
|||
top="5vh" |
|||
class="dialog-h" |
|||
@closed="diaClose"> |
|||
<vero-focus-edit ref="ref_form_edit" |
|||
@dialogCancle="diaClose" |
|||
@dialogOk="addFormOk"></vero-focus-edit> |
|||
</el-dialog> |
|||
<!-- 发送通知弹出框 --> |
|||
<el-dialog :visible.sync="sendNoticeFormShow" |
|||
:close-on-click-modal="false" |
|||
:close-on-press-escape="false" |
|||
title="发送通知" |
|||
width="1050px" |
|||
top="5vh" |
|||
class="dialog-h" |
|||
@closed="diaClose"> |
|||
<vf-send-notice ref="ref_sendnotice" |
|||
@dialogCancle="diaClose"></vf-send-notice> |
|||
</el-dialog> |
|||
<!-- 随访记录弹出框 --> |
|||
<el-dialog :visible.sync="noticeListFormShow" |
|||
:close-on-click-modal="false" |
|||
:close-on-press-escape="false" |
|||
title="随访记录" |
|||
width="1050px" |
|||
top="5vh" |
|||
class="dialog-h" |
|||
@closed="diaClose"> |
|||
<vf-notice-list ref="ref_visitelist" |
|||
@dialogCancle="diaClose"></vf-notice-list> |
|||
</el-dialog> |
|||
<!-- 通知记录弹出框 --> |
|||
<el-dialog :visible.sync="visiteListFormShow" |
|||
:close-on-click-modal="false" |
|||
:close-on-press-escape="false" |
|||
title="通知记录" |
|||
width="1050px" |
|||
top="5vh" |
|||
class="dialog-h" |
|||
@closed="diaClose"> |
|||
<vf-notice-list ref="ref_noticelist" |
|||
@dialogCancle="diaClose"></vf-notice-list> |
|||
</el-dialog> |
|||
|
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
|
|||
import veroFocusAdd from './veroFocusAdd' |
|||
import veroFocusEdit from './veroFocusEdit' |
|||
import vfNoticeList from './vfNoticeList' |
|||
import vfSendNotice from './vfSendNotice' |
|||
import vfVisiteList from './vfVisiteList' |
|||
|
|||
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: 20, |
|||
pageNo: 1, |
|||
tableLoading: false, |
|||
|
|||
selection: [], |
|||
|
|||
agencyId: '', |
|||
|
|||
formData: { |
|||
attentionType: 1,//关注类型,核酸检测:2,疫苗接种:1 |
|||
name: '', |
|||
mobile: '', |
|||
idCard: '', |
|||
vaccinationCount: '', |
|||
}, |
|||
veroNumList: [], |
|||
|
|||
tableData: [], |
|||
selectionAll: [], |
|||
|
|||
//form相关 |
|||
addFormShow: false, |
|||
editFormShow: false, |
|||
sendNoticeFormShow: false, |
|||
noticeListFormShow: false, |
|||
visiteListFormShow: false, |
|||
|
|||
|
|||
} |
|||
}, |
|||
components: { |
|||
veroFocusAdd, veroFocusEdit, vfNoticeList, vfSendNotice, vfVisiteList |
|||
}, |
|||
async created () { |
|||
|
|||
}, |
|||
activated () { |
|||
this.$refs['ref_table'].doLayout() |
|||
}, |
|||
async mounted () { |
|||
for (let i = 0; i < 11; i++) { |
|||
let obj = { |
|||
value: i + '', |
|||
label: i + '次' |
|||
} |
|||
this.veroNumList.push(obj) |
|||
} |
|||
|
|||
await this.loadTable() |
|||
}, |
|||
|
|||
methods: { |
|||
handleSearch () { |
|||
this.loadTable() |
|||
}, |
|||
|
|||
async loadTable () { |
|||
this.tableLoading = true |
|||
|
|||
const url = "/epmetuser/icEpidemicSpecialAttention/list" |
|||
// const url = "http://yapi.elinkservice.cn/mock/245/epmetuser/icEpidemicSpecialAttention/list" |
|||
let params = { |
|||
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 |
|||
|
|||
this.tableData.forEach(item => { |
|||
if (item.time) { |
|||
let timeArray = item.time.split(' ') |
|||
item.time = timeArray[0] |
|||
} |
|||
|
|||
}); |
|||
} else { |
|||
this.$message.error(msg) |
|||
} |
|||
this.tableLoading = false |
|||
}, |
|||
|
|||
handleSelectTable (selection, row) { |
|||
|
|||
row.isSel = !row.isSel |
|||
|
|||
if (row.isSel) { |
|||
this.selectionAll.push(row) |
|||
} else { |
|||
for (let i = 0; i < this.selectionAll.length; i++) { |
|||
let item = this.selectionAll[i] |
|||
if (item.ID_CARD === row.ID_CARD) { |
|||
this.selectionAll.splice(i, 1) |
|||
break |
|||
} |
|||
|
|||
} |
|||
} |
|||
|
|||
}, |
|||
|
|||
handleSelAll (selection) { |
|||
let selFlag = selection.length > 0//全选选中 还是 全选不选中 |
|||
for (let i = 0; i < this.tableData.length; i++) { |
|||
let tableItem = this.tableData[i] |
|||
tableItem.isSel = selFlag |
|||
let isHasItem = false |
|||
for (let j = 0; j < this.selectionAll.length; j++) { |
|||
let selectionItem = this.selectionAll[j] |
|||
if (selectionItem.ID_CARD === tableItem.ID_CARD) { |
|||
isHasItem = true |
|||
if (!selFlag) { |
|||
this.selectionAll.splice(j, 1) |
|||
break |
|||
} |
|||
} |
|||
|
|||
} |
|||
|
|||
if (!isHasItem && selFlag) { |
|||
this.selectionAll.push(tableItem) |
|||
} |
|||
|
|||
} |
|||
|
|||
}, |
|||
|
|||
|
|||
//回显列表选中的行 |
|||
analysisTableSelection () { |
|||
this.$nextTick(() => { |
|||
this.tableData.forEach(tableItem => { |
|||
|
|||
|
|||
for (let j = 0; j < this.selectionAll.length; j++) { |
|||
let selectionItem = this.selectionAll[j] |
|||
|
|||
if (selectionItem.ID_CARD === tableItem.ID_CARD) { |
|||
tableItem.isSel = true |
|||
break |
|||
|
|||
} |
|||
} |
|||
if (tableItem.isSel) { |
|||
this.$refs.ref_table.toggleRowSelection(tableItem); |
|||
} |
|||
}); |
|||
}) |
|||
|
|||
|
|||
}, |
|||
|
|||
diaClose () { |
|||
this.addFormShow = false |
|||
this.editFormShow = false |
|||
this.sendNoticeFormShow = false |
|||
this.noticeListFormShow = false |
|||
this.visiteListFormShow = false |
|||
|
|||
}, |
|||
|
|||
handleAdd () { |
|||
this.addFormShow = true |
|||
this.$nextTick(() => { |
|||
this.$refs.ref_form_add.initForm(null, this.agencyId) |
|||
}) |
|||
}, |
|||
|
|||
handleEdit (row) { |
|||
this.editFormShow = true |
|||
this.$nextTick(() => { |
|||
this.$refs.ref_form_edit.initForm('edit', row) |
|||
}) |
|||
}, |
|||
|
|||
handleDetail (row) { |
|||
this.editFormShow = true |
|||
this.$nextTick(() => { |
|||
this.$refs.ref_form_edit.initForm('detail', row) |
|||
}) |
|||
}, |
|||
|
|||
handleSendNotice () { |
|||
if (this.selectionAll.length === 0) { |
|||
this.$message.info('请选择要通知的人员') |
|||
return false |
|||
} |
|||
this.sendNoticeFormShow = true |
|||
this.$nextTick(() => { |
|||
this.$refs.ref_sendnotice.initForm(this.selectionAll) |
|||
}) |
|||
|
|||
}, |
|||
|
|||
handleNoticeList (row) { |
|||
this.noticeListFormShow = true |
|||
this.$nextTick(() => { |
|||
this.$refs.ref_visitelist.initForm(row) |
|||
}) |
|||
|
|||
}, |
|||
handleVisiteList (row) { |
|||
|
|||
this.visiteListFormShow = true |
|||
this.$nextTick(() => { |
|||
this.$refs.ref_noticelist.initForm(row) |
|||
}) |
|||
|
|||
}, |
|||
|
|||
|
|||
addFormOk () { |
|||
this.addFormShow = false |
|||
this.editFormShow = false |
|||
this.loadTable() |
|||
|
|||
}, |
|||
|
|||
async handleDelete (row) { |
|||
if (this.selectionAll.length === 0) { |
|||
this.$message.info('请选择要取消关注的名单') |
|||
return false |
|||
} |
|||
this.$confirm("确认取消关注选择的名单?", "提示", { |
|||
confirmButtonText: "确定", |
|||
cancelButtonText: "取消", |
|||
type: "warning" |
|||
}) |
|||
.then(() => { |
|||
this.deleteFocus(row) |
|||
}) |
|||
.catch(err => { |
|||
if (err == "cancel") { |
|||
|
|||
} |
|||
|
|||
}); |
|||
}, |
|||
|
|||
async deleteFocus (row) { |
|||
const url = "/epmetuser/icEpidemicSpecialAttention/cancel-attention" |
|||
// const url = "http://yapi.elinkservice.cn/mock/245/gov/org/placepatrolteam/del" |
|||
let idCards = [] |
|||
|
|||
this.selectionAll.forEach(element => { |
|||
idCards.push(element.idCard) |
|||
}); |
|||
let params = { |
|||
attentionType: 1, |
|||
idCards: idCards |
|||
} |
|||
|
|||
const { data, code, msg } = await requestPost(url, params) |
|||
|
|||
if (code === 0) { |
|||
this.$message({ |
|||
type: "success", |
|||
message: "操作成功" |
|||
}); |
|||
|
|||
this.loadTable() |
|||
} else { |
|||
this.$message.error(msg) |
|||
} |
|||
}, |
|||
|
|||
//重置搜索条件 |
|||
resetSearch () { |
|||
this.formData = { |
|||
attentionType: 1,//关注类型,核酸检测:2,疫苗接种:1 |
|||
name: '', |
|||
mobile: '', |
|||
idCard: '', |
|||
vaccinationCount: '', |
|||
} |
|||
|
|||
this.pageNo = 1 |
|||
// this.loadTable() |
|||
}, |
|||
|
|||
|
|||
handleSizeChange (val) { |
|||
this.pageSize = val |
|||
this.pageNo = 1 |
|||
this.loadTable() |
|||
}, |
|||
handleCurrentChange (val) { |
|||
this.pageNo = val |
|||
this.loadTable() |
|||
}, |
|||
|
|||
//导出表格 |
|||
async handleExport () { |
|||
let title = this.agencyObj.label |
|||
title = title + '—房屋列表' |
|||
|
|||
const url = "/gov/org/house/exporthouseinfo" |
|||
let params = { |
|||
ownerName: this.ownerName, |
|||
ownerPhone: this.ownerPhone, |
|||
buildingId: this.agencyObj.id |
|||
} |
|||
|
|||
app.ajax.exportFilePost( |
|||
url, |
|||
params, |
|||
(data, rspMsg) => { |
|||
|
|||
this.download(data, title + '.xlsx') |
|||
}, |
|||
(rspMsg, data) => { |
|||
this.$message.error(rspMsg); |
|||
} |
|||
); |
|||
|
|||
}, |
|||
|
|||
// 下载文件 |
|||
download (data, fileName) { |
|||
if (!data) { |
|||
return |
|||
} |
|||
|
|||
var csvData = new Blob([data]) |
|||
|
|||
if (window.navigator && window.navigator.msSaveOrOpenBlob) { |
|||
window.navigator.msSaveOrOpenBlob(csvData, fileName); |
|||
} |
|||
// for Non-IE (chrome, firefox etc.) |
|||
else { |
|||
var a = document.createElement('a'); |
|||
document.body.appendChild(a); |
|||
a.style = 'display: none'; |
|||
var url = window.URL.createObjectURL(csvData); |
|||
a.href = url; |
|||
a.download = fileName; |
|||
a.click(); |
|||
a.remove(); |
|||
window.URL.revokeObjectURL(url); |
|||
} |
|||
|
|||
}, |
|||
|
|||
handleExportModule () { |
|||
let title = '' |
|||
title = '房屋模板' |
|||
|
|||
const url = "/gov/org/house/exporttemplate" |
|||
let params = {} |
|||
|
|||
app.ajax.exportFilePost( |
|||
url, |
|||
params, |
|||
(data, rspMsg) => { |
|||
|
|||
this.download(data, title + '.xlsx') |
|||
}, |
|||
(rspMsg, data) => { |
|||
this.$message.error(rspMsg); |
|||
} |
|||
); |
|||
}, |
|||
|
|||
|
|||
// 上传文件之前的钩子 |
|||
beforeUpload (file) { |
|||
|
|||
const array = file.name.split('.') |
|||
const extension = array[array.length - 1] |
|||
// const isLt1M = (file.size / 1024 / 1024) < 5 |
|||
if (extension !== 'xlsx') { |
|||
this.$message.error('只能上传xlsx文件!') |
|||
return false |
|||
} else { |
|||
this.files = file; |
|||
this.fileName = file.name; |
|||
return true |
|||
} |
|||
|
|||
}, |
|||
// 上传文件个数超过定义的数量 |
|||
handleExceed (files, fileList) { |
|||
this.$message.warning(`当前限制选择 1 个文件,请删除后继续上传`) |
|||
}, |
|||
|
|||
async uploadFile () { |
|||
if (this.fileName == "") { |
|||
this.$message.warning('请选择要上传的文件!') |
|||
return false |
|||
} |
|||
|
|||
this.$message({ |
|||
showClose: true, |
|||
message: '导入中,请到系统管理-导入记录中查看进度', |
|||
duration: 0 |
|||
}) |
|||
|
|||
//清空上传列表 |
|||
this.$refs['upload'].clearFiles() |
|||
|
|||
var url = '/gov/org/house/houseimport' |
|||
|
|||
let fileFormData = new FormData(); |
|||
fileFormData.append('file', this.files);//filename是键,file是值,就是要传的文件,test.zip是要传的文件名 |
|||
fileFormData.append('orgId', this.agencyObj.id);//filename是键,file是值,就是要传的文件,test.zip是要传的文件名 |
|||
fileFormData.append('orgType', this.agencyObj.level);//filename是键,file是值,就是要传的文件,test.zip是要传的文件名 |
|||
|
|||
|
|||
window.app.ajax.post2(url, fileFormData, |
|||
(data, rspMsg) => { |
|||
|
|||
if (data.code === 0 && data.msg == 'success') { |
|||
// this.$message.success('导入成功') |
|||
} else { |
|||
// this.$message({ |
|||
// showClose: true, |
|||
// message: rspMsg, |
|||
// duration: 0, |
|||
// type: "error" |
|||
// }) |
|||
// this.$message.error(rspMsg) |
|||
} |
|||
|
|||
// this.loadTable() |
|||
|
|||
}, |
|||
(rspMsg, data) => { |
|||
|
|||
}, { headers: { 'Content-Type': 'multipart/form-data' } }) |
|||
|
|||
|
|||
}, |
|||
|
|||
|
|||
// 开启加载动画 |
|||
startLoading () { |
|||
loading = Loading.service({ |
|||
lock: true, // 是否锁定 |
|||
text: '正在加载……', // 加载中需要显示的文字 |
|||
background: 'rgba(0,0,0,.7)' // 背景颜色 |
|||
}) |
|||
}, |
|||
// 结束加载动画 |
|||
endLoading () { |
|||
// clearTimeout(timer); |
|||
if (loading) { |
|||
loading.close() |
|||
} |
|||
} |
|||
}, |
|||
computed: { |
|||
tableHeight () { |
|||
return this.$store.state.inIframe ? this.clientHeight - 360 + this.iframeHeight : this.clientHeight - 360 |
|||
|
|||
}, |
|||
|
|||
...mapGetters(['clientHeight', 'iframeHeight']) |
|||
}, |
|||
watch: { |
|||
|
|||
}, |
|||
props: { |
|||
|
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss" scoped > |
|||
@import "@/assets/scss/modules/management/epidemic.scss"; |
|||
</style> |
|||
|
|||
|
|||
|
|||
@ -0,0 +1,447 @@ |
|||
<template> |
|||
<div class="dialog-h-content scroll-h "> |
|||
<div class="div_table"> |
|||
|
|||
<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="reviewTime" |
|||
header-align="center" |
|||
align="center" |
|||
label="复查时间" |
|||
width="250"> |
|||
<template slot-scope="scope"> |
|||
<div v-if="scope.row.isEdit"> |
|||
<el-date-picker v-model="scope.row.reviewTime" |
|||
value-format="yyyy-MM-dd" |
|||
type="date" |
|||
placeholder="选择日期"> |
|||
</el-date-picker> |
|||
</div> |
|||
<span v-else>{{scope.row.reviewTime}}</span> |
|||
</template> |
|||
|
|||
</el-table-column> |
|||
<el-table-column prop="ninePlaceName" |
|||
header-align="center" |
|||
align="center" |
|||
label="分队名称" |
|||
width="280"> |
|||
|
|||
<template slot-scope="scope"> |
|||
<div v-if="scope.row.isEdit"> |
|||
<el-select class="item_width_1" |
|||
v-model="scope.row.placePatrolTeamId" |
|||
placeholder="请选择" |
|||
clearable> |
|||
<el-option v-for="(item,index) in teamsList" |
|||
@click.native="hancleChangeTeam(scope.row,index,scope.$index)" |
|||
:key="item.teamId" |
|||
:label="item.teamName" |
|||
:value="item.teamId"> |
|||
</el-option> |
|||
</el-select> |
|||
</div> |
|||
<span v-else>{{scope.row.placePatrolTeamName}}</span> |
|||
</template> |
|||
</el-table-column> |
|||
|
|||
<el-table-column prop="inspectorsNames" |
|||
header-align="center" |
|||
align="center" |
|||
label="检查人员" |
|||
min-width="380"> |
|||
|
|||
<template slot-scope="scope"> |
|||
<div v-if="scope.row.isEdit"> |
|||
<el-checkbox-group style="display:flex;flex-wrap:wrap" |
|||
v-model="scope.row.inspectorArray"> |
|||
<el-checkbox v-for="item in scope.row.inspectorsList" |
|||
:key="item.id" |
|||
:label="item.id">{{item.name}}</el-checkbox> |
|||
|
|||
</el-checkbox-group> |
|||
</div> |
|||
<span v-else>{{scope.row.inspectorsNames}}</span> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column prop="reviewResult" |
|||
header-align="center" |
|||
align="center" |
|||
label="复查结论" |
|||
width="120"> |
|||
<template slot-scope="scope"> |
|||
<div v-if="scope.row.isEdit"> |
|||
<el-select class="item_width_2" |
|||
v-model="scope.row.reviewResult" |
|||
placeholder="全部" |
|||
clearable> |
|||
<el-option v-for="item in resultList" |
|||
:key="item.value" |
|||
:label="item.label" |
|||
:value="item.value"> |
|||
</el-option> |
|||
</el-select> |
|||
</div> |
|||
<span v-else>{{scope.row.reviewResult==='0'?'合格':'不合格'}}</span> |
|||
</template> |
|||
</el-table-column> |
|||
|
|||
<el-table-column label="操作" |
|||
fixed="right" |
|||
width="180" |
|||
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, |
|||
placePatrolRecordId: '', |
|||
tableData: [], |
|||
|
|||
|
|||
} |
|||
}, |
|||
components: {}, |
|||
mounted () { |
|||
|
|||
}, |
|||
|
|||
methods: { |
|||
|
|||
async initTable (placePatrolRecordId) { |
|||
this.placePatrolRecordId = placePatrolRecordId |
|||
await this.loadTeams() |
|||
|
|||
await this.loadTable() |
|||
|
|||
}, |
|||
|
|||
|
|||
//加载分队 |
|||
async loadTeams () { |
|||
const url = '/gov/org/placepatrolteam/getlist' |
|||
// const url = 'http://yapi.elinkservice.cn/mock/245/gov/org/placepatrolteam/getlist' |
|||
let params = { |
|||
isPage: false |
|||
} |
|||
|
|||
const { data, code, msg } = await requestPost(url, params) |
|||
|
|||
if (code === 0) { |
|||
this.teamsList = data.list |
|||
|
|||
|
|||
} else { |
|||
this.$message.error(msg) |
|||
} |
|||
}, |
|||
|
|||
//点击分队切换人员 |
|||
async hancleChangeTeam (row, index, tableIndex) { |
|||
this.tableData[tableIndex].inspectorArray = [...[]] |
|||
let teamId = this.teamsList[index].teamId |
|||
await this.loadInspectors(teamId, tableIndex) |
|||
}, |
|||
|
|||
//加载分队下人员 |
|||
async loadInspectors (teamId, tableIndex) { |
|||
|
|||
const url = '/gov/org/placepatrolteamstaff/getlist' |
|||
// const url = 'http://yapi.elinkservice.cn/mock/245/gov/org/placepatrolteamstaff/getlist' |
|||
let params = { |
|||
teamId: teamId |
|||
} |
|||
|
|||
const { data, code, msg } = await requestPost(url, params) |
|||
|
|||
if (code === 0) { |
|||
// let obj = this.tableData[tableIndex] |
|||
this.tableData[tableIndex].inspectorsList = [...data] |
|||
// this.tableData[tableIndex]= |
|||
// obj.inspectorsList = data |
|||
// this.$set(this.tableData, tableIndex, obj) |
|||
console.log(this.tableData) |
|||
} else { |
|||
this.$message.error(msg) |
|||
} |
|||
}, |
|||
//加载form |
|||
async loadTable () { |
|||
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 = { |
|||
isNew: true,//是否新增 |
|||
isEdit: true,//是否编辑 |
|||
placePatrolRecordId: this.placePatrolRecordId, |
|||
reviewTime: '', |
|||
placePatrolTeamId: '', |
|||
inspectors: '', |
|||
inspectorArray: [], |
|||
inspectorsList: [], |
|||
reviewResult: '', |
|||
} |
|||
this.tableData.push(obj) |
|||
}, |
|||
|
|||
async handleEdit (row, tableIndex) { |
|||
let teamId = row.placePatrolTeamId |
|||
await this.loadInspectors(teamId, tableIndex) |
|||
|
|||
let rowData = JSON.parse(JSON.stringify(row)) |
|||
rowData.isEdit = true |
|||
rowData.isNew = false |
|||
rowData.inspectorArray = rowData.inspectors.split(',') |
|||
|
|||
console.log(rowData) |
|||
this.$set(this.tableData, tableIndex, rowData) |
|||
}, |
|||
|
|||
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) { |
|||
|
|||
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.reviewTime === '') { |
|||
message = message + '复查时间不能为空;' |
|||
} |
|||
if (row.placePatrolTeamId === '') { |
|||
message = message + '分队名称不能为空;' |
|||
} |
|||
if (row.inspectorArray.length === 0) { |
|||
message = message + '检查人员不能为空;' |
|||
} |
|||
if (row.reviewResult === '') { |
|||
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: { |
|||
|
|||
|
|||
resultList: { |
|||
type: Array, |
|||
default: [] |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
|
|||
<style lang="scss" scoped > |
|||
@import "@/assets/scss/buttonstyle.scss"; |
|||
.item_width_1 { |
|||
width: 250px; |
|||
} |
|||
.item_width_2 { |
|||
width: 100px; |
|||
} |
|||
.div_table { |
|||
// 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,247 @@ |
|||
<template> |
|||
<div class="epidemic-form"> |
|||
<div class="dialog-h-content scroll-h"> |
|||
|
|||
<el-form ref="ref_form1" |
|||
:inline="true" |
|||
:model="formData" |
|||
:rules="dataRule" |
|||
class="form"> |
|||
|
|||
<el-form-item label="通知渠道" |
|||
prop="noticeWay" |
|||
label-width="150px" |
|||
style="display: block"> |
|||
<el-checkbox-group v-model="formData.noticeWay"> |
|||
<el-checkbox key="1" |
|||
label="1">小程序通知</el-checkbox> |
|||
<el-checkbox key="2" |
|||
label="2">短信通知</el-checkbox> |
|||
|
|||
</el-checkbox-group> |
|||
</el-form-item> |
|||
|
|||
<el-form-item label="通知内容" |
|||
prop="noticeContent" |
|||
label-width="150px" |
|||
style="display: block"> |
|||
<el-input class="item_width_1" |
|||
type="textarea" |
|||
maxlength="1000" |
|||
show-word-limit |
|||
:autosize="{ minRows: 4, maxRows: 10 }" |
|||
clearable |
|||
placeholder="请输入通知内容" |
|||
v-model="formData.noticeContent"></el-input> |
|||
</el-form-item> |
|||
|
|||
</el-form> |
|||
|
|||
</div> |
|||
|
|||
<div class="form_div_btn"> |
|||
<el-button size="small" |
|||
@click="handleCancle">取 消</el-button> |
|||
<el-button size="small" |
|||
type="primary" |
|||
:disabled="btnDisable" |
|||
@click="handleComfirm">确 定</el-button> |
|||
</div> |
|||
|
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
|
|||
import { Loading } from 'element-ui' // 引入Loading服务 |
|||
import { requestPost } from '@/js/dai/request' |
|||
import { mapGetters } from 'vuex' |
|||
|
|||
|
|||
let loading // 加载动画 |
|||
export default { |
|||
data () { |
|||
return { |
|||
|
|||
activeName: "second", |
|||
|
|||
gridList: [], |
|||
|
|||
btnDisable: false, |
|||
|
|||
formData: { |
|||
|
|||
noticeWay: [], |
|||
noticeContent: '', |
|||
|
|||
}, |
|||
selectionAll: [] |
|||
|
|||
|
|||
|
|||
|
|||
} |
|||
}, |
|||
components: {}, |
|||
async mounted () { |
|||
|
|||
}, |
|||
|
|||
methods: { |
|||
|
|||
async initForm (selectionAll) { |
|||
|
|||
this.$refs['ref_form1'].resetFields(); |
|||
this.selectionAll = selectionAll |
|||
|
|||
|
|||
}, |
|||
|
|||
async handleComfirm () { |
|||
this.btnDisable = true |
|||
setTimeout(() => { |
|||
this.btnDisable = false |
|||
}, 5000) |
|||
|
|||
|
|||
await this.sendNotice() |
|||
|
|||
}, |
|||
async sendNotice () { |
|||
console.log(this.formData) |
|||
return false |
|||
|
|||
let url = '' |
|||
|
|||
url = '/gov/project/memoConcern/update' |
|||
// url = "http://yapi.elinkservice.cn/mock/245/gov/project/memoConcern/update" |
|||
|
|||
|
|||
const { data, code, msg } = await requestPost(url, this.formData) |
|||
|
|||
if (code === 0) { |
|||
this.$message({ |
|||
type: 'success', |
|||
message: '操作成功' |
|||
}) |
|||
this.resetData() |
|||
this.$emit('dialogCancle') |
|||
this.btnDisable = false |
|||
|
|||
} else { |
|||
this.btnDisable = false |
|||
this.$message.error(msg) |
|||
} |
|||
|
|||
}, |
|||
|
|||
handleCancle () { |
|||
|
|||
this.resetData() |
|||
this.$emit('dialogCancle') |
|||
|
|||
}, |
|||
|
|||
|
|||
|
|||
resetData () { |
|||
|
|||
|
|||
this.formData = { |
|||
name: '', |
|||
idCard: '', |
|||
phone: '', |
|||
remark: '', |
|||
noticeWay: [], |
|||
noticeContent: '', |
|||
|
|||
} |
|||
}, |
|||
|
|||
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 200 |
|||
|
|||
}, |
|||
|
|||
...mapGetters(['clientHeight', 'iframeHeight']), |
|||
dataRule () { |
|||
return { |
|||
name: [ |
|||
{ required: true, message: '姓名不能为空', trigger: 'blur' } |
|||
], |
|||
idCard: [ |
|||
{ required: true, message: '身份证号不能为空', trigger: 'blur' } |
|||
], |
|||
phone: [ |
|||
{ required: true, message: '手机号不能为空', trigger: 'blur' }, |
|||
], |
|||
checkTime: [ |
|||
{ required: true, message: '检测时间不能为空', trigger: 'blur' }, |
|||
], |
|||
|
|||
address: [ |
|||
{ required: false }, |
|||
], |
|||
result: [ |
|||
{ required: true }, |
|||
], |
|||
address: [ |
|||
{ required: false }, |
|||
], |
|||
noticeWay: [ |
|||
{ required: false }, |
|||
], |
|||
noticeContent: [ |
|||
{ required: false }, |
|||
], |
|||
|
|||
} |
|||
}, |
|||
|
|||
}, |
|||
props: { |
|||
|
|||
|
|||
|
|||
// serviceList: { |
|||
// type: Array, |
|||
// default: [] |
|||
// }, |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
|
|||
<style lang="scss" scoped > |
|||
@import "@/assets/scss/modules/management/epidemic.scss"; |
|||
</style> |
|||
|
|||
|
|||
@ -0,0 +1,450 @@ |
|||
<template> |
|||
<div class="dialog-h-content scroll-h"> |
|||
<div class="div_table"> |
|||
<el-button size="small" |
|||
class="diy-button--add" |
|||
@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="reviewTime" |
|||
header-align="center" |
|||
align="center" |
|||
label="复查时间" |
|||
width="250"> |
|||
<template slot-scope="scope"> |
|||
<div v-if="scope.row.isEdit"> |
|||
<el-date-picker v-model="scope.row.reviewTime" |
|||
value-format="yyyy-MM-dd" |
|||
type="date" |
|||
placeholder="选择日期"> |
|||
</el-date-picker> |
|||
</div> |
|||
<span v-else>{{scope.row.reviewTime}}</span> |
|||
</template> |
|||
|
|||
</el-table-column> |
|||
<el-table-column prop="ninePlaceName" |
|||
header-align="center" |
|||
align="center" |
|||
label="分队名称" |
|||
width="280"> |
|||
|
|||
<template slot-scope="scope"> |
|||
<div v-if="scope.row.isEdit"> |
|||
<el-select class="item_width_1" |
|||
v-model="scope.row.placePatrolTeamId" |
|||
placeholder="请选择" |
|||
clearable> |
|||
<el-option v-for="(item,index) in teamsList" |
|||
@click.native="hancleChangeTeam(scope.row,index,scope.$index)" |
|||
:key="item.teamId" |
|||
:label="item.teamName" |
|||
:value="item.teamId"> |
|||
</el-option> |
|||
</el-select> |
|||
</div> |
|||
<span v-else>{{scope.row.placePatrolTeamName}}</span> |
|||
</template> |
|||
</el-table-column> |
|||
|
|||
<el-table-column prop="inspectorsNames" |
|||
header-align="center" |
|||
align="center" |
|||
label="检查人员" |
|||
min-width="380"> |
|||
|
|||
<template slot-scope="scope"> |
|||
<div v-if="scope.row.isEdit"> |
|||
<el-checkbox-group style="display:flex;flex-wrap:wrap" |
|||
v-model="scope.row.inspectorArray"> |
|||
<el-checkbox v-for="item in scope.row.inspectorsList" |
|||
:key="item.id" |
|||
:label="item.id">{{item.name}}</el-checkbox> |
|||
|
|||
</el-checkbox-group> |
|||
</div> |
|||
<span v-else>{{scope.row.inspectorsNames}}</span> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column prop="reviewResult" |
|||
header-align="center" |
|||
align="center" |
|||
label="复查结论" |
|||
width="120"> |
|||
<template slot-scope="scope"> |
|||
<div v-if="scope.row.isEdit"> |
|||
<el-select class="item_width_2" |
|||
v-model="scope.row.reviewResult" |
|||
placeholder="全部" |
|||
clearable> |
|||
<el-option v-for="item in resultList" |
|||
:key="item.value" |
|||
:label="item.label" |
|||
:value="item.value"> |
|||
</el-option> |
|||
</el-select> |
|||
</div> |
|||
<span v-else>{{scope.row.reviewResult==='0'?'合格':'不合格'}}</span> |
|||
</template> |
|||
</el-table-column> |
|||
|
|||
<el-table-column label="操作" |
|||
fixed="right" |
|||
width="180" |
|||
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, |
|||
placePatrolRecordId: '', |
|||
tableData: [], |
|||
|
|||
|
|||
} |
|||
}, |
|||
components: {}, |
|||
mounted () { |
|||
|
|||
}, |
|||
|
|||
methods: { |
|||
|
|||
async initTable (placePatrolRecordId) { |
|||
this.placePatrolRecordId = placePatrolRecordId |
|||
await this.loadTeams() |
|||
|
|||
await this.loadTable() |
|||
|
|||
}, |
|||
|
|||
|
|||
//加载分队 |
|||
async loadTeams () { |
|||
const url = '/gov/org/placepatrolteam/getlist' |
|||
// const url = 'http://yapi.elinkservice.cn/mock/245/gov/org/placepatrolteam/getlist' |
|||
let params = { |
|||
isPage: false |
|||
} |
|||
|
|||
const { data, code, msg } = await requestPost(url, params) |
|||
|
|||
if (code === 0) { |
|||
this.teamsList = data.list |
|||
|
|||
|
|||
} else { |
|||
this.$message.error(msg) |
|||
} |
|||
}, |
|||
|
|||
//点击分队切换人员 |
|||
async hancleChangeTeam (row, index, tableIndex) { |
|||
this.tableData[tableIndex].inspectorArray = [...[]] |
|||
let teamId = this.teamsList[index].teamId |
|||
await this.loadInspectors(teamId, tableIndex) |
|||
}, |
|||
|
|||
//加载分队下人员 |
|||
async loadInspectors (teamId, tableIndex) { |
|||
|
|||
const url = '/gov/org/placepatrolteamstaff/getlist' |
|||
// const url = 'http://yapi.elinkservice.cn/mock/245/gov/org/placepatrolteamstaff/getlist' |
|||
let params = { |
|||
teamId: teamId |
|||
} |
|||
|
|||
const { data, code, msg } = await requestPost(url, params) |
|||
|
|||
if (code === 0) { |
|||
// let obj = this.tableData[tableIndex] |
|||
this.tableData[tableIndex].inspectorsList = [...data] |
|||
// this.tableData[tableIndex]= |
|||
// obj.inspectorsList = data |
|||
// this.$set(this.tableData, tableIndex, obj) |
|||
console.log(this.tableData) |
|||
} else { |
|||
this.$message.error(msg) |
|||
} |
|||
}, |
|||
//加载form |
|||
async loadTable () { |
|||
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 = { |
|||
isNew: true,//是否新增 |
|||
isEdit: true,//是否编辑 |
|||
placePatrolRecordId: this.placePatrolRecordId, |
|||
reviewTime: '', |
|||
placePatrolTeamId: '', |
|||
inspectors: '', |
|||
inspectorArray: [], |
|||
inspectorsList: [], |
|||
reviewResult: '', |
|||
} |
|||
this.tableData.push(obj) |
|||
}, |
|||
|
|||
async handleEdit (row, tableIndex) { |
|||
let teamId = row.placePatrolTeamId |
|||
await this.loadInspectors(teamId, tableIndex) |
|||
|
|||
let rowData = JSON.parse(JSON.stringify(row)) |
|||
rowData.isEdit = true |
|||
rowData.isNew = false |
|||
rowData.inspectorArray = rowData.inspectors.split(',') |
|||
|
|||
console.log(rowData) |
|||
this.$set(this.tableData, tableIndex, rowData) |
|||
}, |
|||
|
|||
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) { |
|||
|
|||
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.reviewTime === '') { |
|||
message = message + '复查时间不能为空;' |
|||
} |
|||
if (row.placePatrolTeamId === '') { |
|||
message = message + '分队名称不能为空;' |
|||
} |
|||
if (row.inspectorArray.length === 0) { |
|||
message = message + '检查人员不能为空;' |
|||
} |
|||
if (row.reviewResult === '') { |
|||
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: { |
|||
|
|||
|
|||
resultList: { |
|||
type: Array, |
|||
default: [] |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
|
|||
<style lang="scss" scoped > |
|||
@import "@/assets/scss/buttonstyle.scss"; |
|||
.item_width_1 { |
|||
width: 250px; |
|||
} |
|||
.item_width_2 { |
|||
width: 100px; |
|||
} |
|||
.div_table { |
|||
// 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> |
|||
Loading…
Reference in new issue