Browse Source

行程记录

feature
jiangyy 3 years ago
parent
commit
be66a5e144
  1. 26
      src/views/modules/base/epidemic/epidRisk/risk.vue
  2. 21
      src/views/modules/base/epidemic/epidRisk/riskForm.vue
  3. 148
      src/views/modules/base/epidemic/travelPanshi/travelPanshi.vue
  4. 68
      src/views/modules/base/epidemic/travelPanshi/travelPanshiDetail.vue
  5. 387
      src/views/modules/base/epidemic/travelPanshi/travelPanshiForm.vue
  6. 163
      src/views/modules/visual/communityGovern/zhongdianxingcheng/detail.vue
  7. 175
      src/views/modules/visual/communityGovern/zhongdianxingcheng/pieOption.js
  8. 506
      src/views/modules/visual/communityGovern/zhongdianxingcheng/zhongdianxingcheng.vue

26
src/views/modules/base/epidemic/epidRisk/risk.vue

@ -7,7 +7,7 @@
ref="ref_searchform"
:label-width="'110px'">
<el-form-item label="来自地区"
<el-form-item label="所属地区"
prop="name">
<el-cascader ref="sourceArea"
v-model="sourceAllCode"
@ -84,10 +84,10 @@
v-loading="tableLoading"
:header-cell-style="{background:'#2195FE',color:'#FFFFFF'}"
style="width: 100%">
<el-table-column type="selection"
<!-- <el-table-column type="selection"
width="55"
fixed="left">
</el-table-column>
</el-table-column> -->
<el-table-column label="序号"
header-align="center"
align="center"
@ -102,7 +102,7 @@
min-width="150"
fixed="left">
</el-table-column>
<el-table-column prop="dangerLevel"
<el-table-column prop="dangerLevelShow"
header-align="center"
align="center"
label="风险等级"
@ -310,8 +310,8 @@ export default {
async loadTable () {
this.tableLoading = true
// const url = "/epmetuser/icDangerArea/list"
const url = "http://yapi.elinkservice.cn/mock/245/epmetuser/icDangerArea/list"
const url = "/epmetuser/icDangerArea/list"
// const url = "http://yapi.elinkservice.cn/mock/245/epmetuser/icDangerArea/list"
let params = {
pageSize: this.pageSize,
pageNo: this.pageNo,
@ -323,7 +323,13 @@ export default {
if (code === 0) {
this.total = data.total
this.tableData = data.list
this.tableData.forEach(item => {
let selItem = this.dangerLevelList.filter((levelItem) =>
item.dangerLevel === levelItem.value);
if (selItem && selItem.length > 0)
item.dangerLevelShow = selItem[0].label
});
} else {
this.$message.error(msg)
@ -333,10 +339,14 @@ export default {
handleAreaChange (val) {
if (val.length > 0) {
const labels = this.$refs.sourceArea.getCheckedNodes()[0].pathLabels
this.formData.name = labels.join('-')
this.formData.name = val.join('-')
} else {
this.formData.name = ''
this.formData.allName = ''
}
},

21
src/views/modules/base/epidemic/epidRisk/riskForm.vue

@ -9,7 +9,7 @@
class="form">
<el-form-item label="风险地区"
prop="allNameCode"
prop="allName"
style="display: block">
<el-cascader v-if="formType==='add'"
@ -82,7 +82,7 @@ export default {
},
dataRule: {
allNameCode: [
allName: [
{ required: true, message: '风险地区不能为空', trigger: 'change' }
],
@ -143,7 +143,7 @@ export default {
if (type === 'edit') {
this.formData = JSON.parse(JSON.stringify(row))
this.sourceAllCode = this.formData.allNameCode.split('-')
// this.sourceAllCode = this.formData.allNameCode.split('-')
} else {
const { user } = this.$store.state
@ -179,8 +179,6 @@ export default {
},
async getArea (node, resolve) {
const url = "/commonservice/areacode/nextarea"
@ -218,8 +216,19 @@ export default {
}, 5000)
let url = '/epmetuser/icDangerArea/add'
let paramas = {}
if (this.formType === 'edit') {
url = '/epmetuser/icDangerArea/update'
paramas.id = this.formData.id
paramas.dangerLevel = this.formData.dangerLevel
const { data, code, msg } = await requestPost(url, this.formData)
} else {
url = '/epmetuser/icDangerArea/add'
paramas = { ...this.formData }
this.formData.id = ''
}
const { data, code, msg } = await requestPost(url, paramas)
if (code === 0) {
this.$message({

148
src/views/modules/base/epidemic/travelPanshi/travelPanshi.vue

@ -5,7 +5,7 @@
<el-form :inline="true"
:model="formData"
ref="ref_searchform"
:label-width="'110px'">
:label-width="'120px'">
<div>
<el-form-item label="姓名"
@ -39,11 +39,25 @@
</el-input>
</el-form-item>
<el-form-item label="7天内旅居情况"
prop="idCard">
<el-select class="list_item_width_1"
v-model.trim="formData.sojournHistory"
placeholder="请选择"
clearable>
<el-option v-for="item in dangerLevelList"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
</div>
<div>
<el-form-item label="来自地区"
<el-form-item label="来源地"
prop="sourceAddress">
<el-input v-model="formData.sourceAddress"
size="small"
@ -161,40 +175,72 @@
label="证件号"
width="180">
</el-table-column>
<el-table-column prop="detailAddress"
<el-table-column prop="registeredResidence"
header-align="center"
align="center"
label="现居地"
label="户籍地"
show-overflow-tooltip
min-width="160">
<template slot-scope="scope">
<!-- <template slot-scope="scope">
{{scope.row.presentAddress + scope.row.detailAddress}}
</template>
</template> -->
</el-table-column>
<el-table-column prop="sourceAddress"
header-align="center"
align="center"
label="来自地区"
label="来源地"
show-overflow-tooltip
min-width="180">
</el-table-column>
<el-table-column prop="describe"
header-align="center"
align="center"
label="来曹事由"
show-overflow-tooltip
min-width="180">
</el-table-column>
<el-table-column prop="natOutcomeName"
header-align="center"
align="center"
label="48小时核酸"
show-overflow-tooltip
min-width="100">
</el-table-column>
<el-table-column prop="arriveDate"
header-align="center"
align="center"
label="来到本地时间"
width="160">
</el-table-column>
<el-table-column prop="leaveDate"
<el-table-column prop="detailAddress"
header-align="center"
align="center"
label="离开本地时间"
label="在曹居住地点"
width="160">
</el-table-column>
<el-table-column prop="trafficTypeName"
header-align="center"
align="center"
label="返回方式"
width="100">
</el-table-column>
<el-table-column prop="sojournHistoryName"
header-align="center"
align="center"
label="7天内旅居情况"
width="100">
</el-table-column>
<el-table-column prop="isolateTypeName"
header-align="center"
align="center"
label="隔离状态"
width="100">
</el-table-column>
<el-table-column prop="latestNoticeTime"
header-align="center"
align="center"
label="最近一次通知时间"
width="160">
width="140">
</el-table-column>
<el-table-column prop="remark"
header-align="center"
@ -203,12 +249,6 @@
label="备注"
min-width="120">
</el-table-column>
<el-table-column prop="heSuanCheckDesc"
header-align="center"
align="center"
label="重点人群关注名单"
width="160">
</el-table-column>
<el-table-column label="操作"
fixed="right"
@ -222,42 +262,12 @@
class="div-table-button--detail"
size="small"
@click="handleDetail(scope.row)">查看</el-button>
<!-- v-if="scope.row.userType != 'resi'" -->
<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="table-more-btn">
<el-button type="text"
class="div-table-button--detail--noline"
size="small"
@click="handleNoticeList(scope.row)">通知记录</el-button>
</div>
<div class="table-more-btn">
<el-button type="text"
class="div-table-button--detail--noline"
size="small"
@click="handleVisiteList(scope.row) ">随访记录</el-button>
</div>
<div v-if="scope.row.userType != 'resi'" class="table-more-btn">
<el-button type="text"
class="div-table-button--delete--noline "
size="small"
@click="handleDelete(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> -->
<el-dropdown trigger="hover">
<span class="el-dropdown-link"
style="margin-left:10px;">
@ -409,9 +419,12 @@ export default {
sourceAddress: '',
sourceAddressCode: '',
startDate: '',
endDate: ''
endDate: '',
sojournHistory: ''
},
dangerLevelList: [],
tableData: [],
//form
@ -444,12 +457,31 @@ export default {
console.log('user-----', user)
this.agencyId = user.agencyId
this.getDangerLevel()
await this.loadTable()
this.sHeight = this.$refs.div_search.offsetHeight + 270
},
methods: {
async getDangerLevel () {
const url = "/sys/dict/data/dictlist";
let params = {
dictType: "sojourn_history",
};
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.dangerLevelList = data
} else {
this.$message.error(msg)
}
},
lzayLoadArea (node, resolve) {
this.getArea(node, resolve)
// setTimeout(() => {
@ -685,6 +717,7 @@ export default {
// this.formTitle = ''
this.detailShow = true
this.$nextTick(() => {
this.$refs.ref_detail.initForm(row)
})
},
@ -756,12 +789,21 @@ export default {
//
resetSearch () {
this.$refs.ref_searchform.resetFields()
this.formData.startDate = ''
this.formData.endDate = ''
this.formData = {
name: '',//
mobile: '',//
idCard: '',
sourceAddress: '',
sourceAddressCode: '',
startDate: '',
endDate: '',
sojournHistory: ''
}
this.searchAreacode = []
this.timeRange = []
this.pageSize = 20
// this.pageSize = 20
this.pageNo = 1
this.loadTable()
},

68
src/views/modules/base/epidemic/travelPanshi/travelPanshiDetail.vue

@ -6,44 +6,86 @@
class="m-row">
<div class="m-info">
<div class="info-prop">
<span class="info-title-4">姓名</span>
<span class="info-title-3">姓名</span>
<span>{{ formData.name||'--' }}</span>
</div>
<div class="info-prop">
<span class="info-title-4">手机号</span>
<span class="info-title-3">手机号</span>
<span>{{ formData.mobile||'--' }}</span>
</div>
<div class="info-prop">
<span class="info-title-4">证件号</span>
<span class="info-title-3">证件号</span>
<span>{{ formData.idCard||'--' }}</span>
</div>
<div class="info-prop">
<span class="info-title-3">户籍地</span>
<span>{{ formData.registeredResidence||'--' }}</span>
</div>
<div class="info-prop">
<span class="info-title-3">来源地</span>
<span>{{ formData.sourceAddress||'--' }}</span>
</div>
<div class="info-prop">
<span class="info-title-3">详细地址</span>
<span>{{ formData.sourceDetailAddress||'--' }}</span>
</div>
<div class="info-prop">
<span class="info-title-3">来曹事由</span>
<span>{{ formData.describe||'--' }}</span>
</div>
<div class="info-prop">
<span class="info-title-3">48小时核酸</span>
<span>{{ formData.natOutcome||'--' }}</span>
</div>
<div class="info-prop">
<span class="info-title-4">现居地</span>
<span class="info-title-3">来到本地时间</span>
<span>{{ formData.arriveDate||'--' }}</span>
</div>
<div class="info-prop">
<span class="info-title-3">来曹居住地点</span>
<span>{{ formData.presentAddress||'--' }}</span>
</div>
<div class="info-prop">
<span class="info-title-4">详细地址</span>
<span class="info-title-3">详细地址</span>
<span>{{ formData.detailAddress||'--' }}</span>
</div>
<div class="info-prop">
<span class="info-title-4">来自地区</span>
<span>{{ formData.sourceAddress||'--' }}</span>
<span class="info-title-3">返回方式</span>
<span>{{ formData.trafficType||'--' }}</span>
</div>
<div class="info-prop">
<span class="info-title-4">来到本地时间</span>
<span>{{ formData.arriveDate||'--' }}</span>
<span class="info-title-3">7天内旅居史情况</span>
<span>{{ formData.sojournHistory||'--' }}</span>
</div>
<div class="info-prop">
<span class="info-title-4">离开本地时间</span>
<span>{{ formData.leaveDate||'--' }}</span>
<span class="info-title-3">隔离状态</span>
<span>{{ formData.isolateType||'--' }}</span>
</div>
<div class="info-prop">
<span class="info-title-4">备注</span>
<span class="info-title-3">备注</span>
<span>{{ formData.remark||'--' }}</span>
</div>
<div class="info-prop">
<span class="info-title-3">是否落实"落地检"</span>
<span>{{ formData.isArriveCheck||'--' }}</span>
</div>
<div class="info-prop">
<span class="info-title-3">是否到达曹县</span>
<span>{{ formData.isArrive||'--' }}</span>
</div>
<div class="info-prop">
<span class="info-title-3">上报时间</span>
<span>{{ formData.reportingTime||'--' }}</span>
</div>
<div class="info-prop">
<span class="info-title-3">类型</span>
<span>{{ formData.tripDataType||'--' }}</span>
</div>
</div>
</div>
@ -102,7 +144,7 @@ export default {
await this.loadFormData(row.id)
this.initLoading = true
console.log('formtype', type)
},

387
src/views/modules/base/epidemic/travelPanshi/travelPanshiForm.vue

@ -5,12 +5,11 @@
:inline="true"
:model="formData"
:rules="dataRule"
:disabled="formType==='detail'"
label-width="150px"
class="form">
<el-form-item v-if="formType==='add'"
label="录入方式"
label-width="150px"
style="display: block">
<el-radio-group v-model="enterType"
@change="handleChangeEnterType">
@ -24,8 +23,7 @@
<el-form-item v-if="formType==='add'"
label="所属网格"
style="display: block"
label-width="150px">
style="display: block">
<el-select class="item_width_2"
v-model.trim="formData.gridId"
placeholder="请选择"
@ -42,8 +40,7 @@
<el-form-item v-if="formType==='add'"
label="居民"
prop="userId"
style="display: block"
label-width="150px">
style="display: block">
<el-select class="item_width_2"
v-model.trim="formData.userId"
placeholder="请选择"
@ -61,20 +58,19 @@
<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" style="margin-right:10px;">
v-model="formData.name"
style="margin-right:10px;">
</el-input>
<el-checkbox v-model="formData.heSuanCheck">添加到核酸检测关注名单</el-checkbox>
</el-form-item>
<el-form-item label="手机号"
prop="mobile"
label-width="150px"
style="display: block">
<el-input class="item_width_2"
placeholder="请输入手机号"
@ -85,7 +81,6 @@
</el-form-item>
<el-form-item label="证件号"
prop="idCard"
label-width="150px"
style="display: block">
<el-input class="item_width_2"
placeholder="请输入身份证号或证件号"
@ -94,54 +89,58 @@
v-model="formData.idCard">
</el-input>
</el-form-item>
<el-form-item
label="现居地"
prop="presentAddress"
style="display: block"
label-width="150px">
<el-input v-if="formType == 'detail'" class="item_width_2"
placeholder="请输入现居地"
clearable
:disabled="isFromResi"
:style="'width: ' + computedWd(formData.presentAddress)"
v-model="formData.presentAddress" />
<template v-else>
<el-input v-if="isFromResi" class="item_width_2 mw180"
placeholder="请输入现居地"
<el-form-item label="户籍地"
prop="registeredResidence"
style="display: block">
<el-input class="item_width_2"
placeholder="请输入户籍地"
clearable
:disabled="isFromResi"
v-model="formData.presentAddress" />
<el-cascader v-else ref="nowArea" class="item_width_2" :props="areaProps"
v-model="nowAllCode" clearable @change="handleNowArea"></el-cascader>
</template>
v-model="formData.registeredResidence">
</el-input>
</el-form-item>
<el-form-item label="来源地"
prop="sourceAddress"
style="display: block">
<el-cascader ref="sourceArea"
v-model="sourceAllCode"
class="item_width_2"
:props="areaProps"
@change="handleSourceArea"
clearable></el-cascader>
</el-form-item>
<el-form-item label="详细地址"
prop="detailAddress"
label-width="150px"
prop="sourceDetailAddress"
style="display: block">
<el-input class="item_width_2"
placeholder="请输入详细地址"
clearable
:disabled="isFromResi"
v-model="formData.detailAddress">
v-model="formData.sourceDetailAddress">
</el-input>
</el-form-item>
<el-form-item label="来自地区" prop="sourceAddress" style="display: block" label-width="150px">
<el-input v-if="formType == 'detail'" class="item_width_2"
placeholder=""
<el-form-item label="来曹事由"
prop="describe"
style="display: block">
<el-input class="item_width_2"
placeholder="请输入来曹事由"
clearable
:disabled="isFromResi"
v-model="formData.sourceAddress"
:style="'width: ' + computedWd(formData.sourceAddress)">
v-model="formData.describe">
</el-input>
<el-cascader v-else ref="sourceArea" v-model="sourceAllCode" class="item_width_2" :props="areaProps"
@change="handleSourceArea" clearable></el-cascader>
</el-form-item>
<el-form-item label="48小时核酸"
prop="natOutcome"
style="display: block">
<el-radio v-model="formData.natOutcome"
label="1">阴性</el-radio>
<el-radio v-model="formData.natOutcome"
label="2">阳性</el-radio>
</el-form-item>
<el-form-item label="来到本地时间"
style="display: block"
prop="arriveDate"
label-width="150px">
prop="arriveDate">
<el-date-picker class="item_width_2"
v-model="formData.arriveDate"
:picker-options="pickerOptions"
@ -152,22 +151,79 @@
placeholder="选择时间">
</el-date-picker>
</el-form-item>
<el-form-item label="离开本地时间"
<el-form-item label="来曹居住地点"
prop="presentAddress"
style="display: block">
<template>
<el-cascader ref="nowArea"
class="item_width_2"
:props="areaProps"
v-model="nowAllCode"
clearable
@change="handleNowArea"></el-cascader>
</template>
</el-form-item>
<el-form-item label="详细地址"
prop="detailAddress"
style="display: block">
<el-input class="item_width_2"
placeholder="请输入详细地址"
clearable
v-model="formData.detailAddress">
</el-input>
</el-form-item>
<el-form-item label="返回方式"
style="display: block"
prop="leaveDate"
label-width="150px">
<el-date-picker class="item_width_2"
v-model="formData.leaveDate"
format="yyyy-MM-dd HH:mm"
value-format="yyyy-MM-dd HH:mm"
type="datetime"
clearable
placeholder="选择时间">
</el-date-picker>
prop="trafficType">
<el-select class="item_width_2"
v-model.trim="formData.trafficType"
placeholder="请选择"
clearable>
<el-option v-for="item in trafficTypeList"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="7天内旅居史情况"
style="display: block"
prop="sojournHistory">
<el-select class="item_width_2"
v-model.trim="formData.sojournHistory"
placeholder="请选择"
clearable>
<el-option v-for="item in dangerLevelList"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="隔离状态"
prop="isolateType">
<el-select class="item_width_2"
v-model.trim="formData.isolateType"
placeholder="请选择"
clearable>
<el-option v-for="item in isolateTypeList"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="备注"
prop="remark"
label-width="150px"
style="display: block">
<el-input class="item_width_1"
type="textarea"
@ -179,23 +235,68 @@
v-model="formData.remark"></el-input>
</el-form-item>
<template v-if="formType != 'detail'">
<el-form-item label="是否落实“落地检”"
prop="isArriveCheck"
style="display: block">
<el-radio v-model="formData.isArriveCheck"
label="1"></el-radio>
<el-radio v-model="formData.isArriveCheck"
label="0"></el-radio>
</el-form-item>
<el-form-item label="是否到达曹县"
prop="isArrive"
style="display: block">
<el-radio v-model="formData.isArrive"
label="1"></el-radio>
<el-radio v-model="formData.isArrive"
label="0"></el-radio>
</el-form-item>
<el-form-item label="上报时间"
style="display: block"
prop="reportingTime">
<el-date-picker class="item_width_2"
v-model="formData.reportingTime"
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="tripDataType">
<el-select class="item_width_2"
v-model.trim="formData.tripDataType"
placeholder="请选择"
clearable>
<el-option v-for="item in tripDataTypeList"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<template>
<el-form-item label="通知渠道"
prop="channel"
label-width="150px"
prop="channel"
style="display: block">
<el-checkbox-group v-model="formData.channel">
<el-checkbox key="0"
label="0">小程序通知</el-checkbox>
label="0">小程序通知</el-checkbox>
<!-- <el-checkbox key="1"
label="1">短信通知</el-checkbox> -->
</el-checkbox-group>
</el-form-item>
<el-form-item v-show="formData.channel.length > 0" label="通知内容"
<el-form-item v-show="formData.channel.length > 0"
label="通知内容"
prop="content"
label-width="150px"
style="display: block">
<el-input class="item_width_1"
type="textarea"
@ -213,8 +314,7 @@
<div class="form_div_btn">
<el-button size="small"
@click="handleCancle"> </el-button>
<el-button v-if="formType != 'detail'"
size="small"
<el-button size="small"
type="primary"
:disabled="btnDisable"
@click="handleComfirm('ref_form')"> </el-button>
@ -263,7 +363,7 @@ export default {
gridList: [],
personList: [],
pickerOptions: {
disabledDate(time) {
disabledDate (time) {
return time.getTime() > Date.now();
}
},
@ -292,30 +392,67 @@ export default {
leaveDate: '',
userType: 'input',
content: '',
channel: []
channel: [],
registeredResidence: '',//
sourceDetailAddress: '',//--
describe: '',//
natOutcome: '',//48 1 2
trafficType: '',//(traffic_type)
sojournHistory: '',//7(sojourn_history)
isolateType: '',//(isolate_type)
isArriveCheck: '',//"" 0: 1:
isArrive: '',// 0: 1:
reportingTime: '',//
tripDataType: '',//(trip_data_type)
},
trafficTypeList: [],
dangerLevelList: [],
isolateTypeList: [],
tripDataTypeList: [],
dataRule: {
name: [
{ required: true, message: '姓名不能为空', trigger: 'blur' }
],
idCard: [
{ required: true, validator: checkIdCard, trigger: 'blur' }
{ required: true, message: '姓名不能为空', trigger: 'change' }
],
mobile: [
{ required: true, validator: checkMObile, trigger: 'blur' },
{ required: true, validator: checkMObile, trigger: 'change' },
],
presentAddress: [
{ required: true, message: '现居地不能为空', trigger: 'blur' },
idCard: [
{ required: true, validator: checkIdCard, trigger: 'change' }
],
detailAddress: [
{ required: true, message: '详细地址不能为空', trigger: 'blur' },
registeredResidence: [
{ required: true, message: '户籍地不能为空', trigger: 'change' },
],
sourceAddress: [
{ required: true, message: '来自地区不能为空', trigger: 'blur' },
{ required: true, message: '来源地不能为空', trigger: 'change' },
],
sourceDetailAddress: [
{ required: true, message: '来源地详细地址不能为空', trigger: 'change' },
],
describe: [
{ required: true, message: '来曹事由不能为空', trigger: 'change' },
],
natOutcome: [
{ required: true, message: '48小时核酸不能为空', trigger: 'change' },
],
arriveDate: [
{ required: true, message: '来到本地时间不能为空', trigger: 'blur' },
{ required: true, message: '来到本地时间不能为空', trigger: 'change' },
],
presentAddress: [
{ required: true, message: '来曹居住地点不能为空', trigger: 'change' },
],
// detailAddress: [
// { required: true, message: '', trigger: 'change' },
// ],
trafficType: [
{ required: true, message: '返回方式不能为空', trigger: 'change' },
]
},
areaProps: {
@ -332,12 +469,17 @@ export default {
this.agencyId = user.agencyId
//
await this.loadGrid()
this.getDangerLevel()
this.getTrafficType()
this.getIsolateType()
this.getTripDataType()
},
destroyed() {
destroyed () {
this.nowAllCode = []
},
methods: {
computedWd(val) {
computedWd (val) {
const len = val.length
const wd = len * 18
let w = ''
@ -345,7 +487,7 @@ export default {
else w = 220
return w + 'px'
},
lzayLoadArea(node, resolve) {
lzayLoadArea (node, resolve) {
// this.getArea(node, resolve)
setTimeout(() => {
this.getArea(node, resolve)
@ -389,7 +531,7 @@ export default {
},
handleSourceArea(val) {
handleSourceArea (val) {
console.log('val-----', val)
console.log('label-----', this.$refs.sourceArea.getCheckedNodes())
if (val.length > 0) {
@ -405,7 +547,7 @@ export default {
}
},
handleNowArea(val) {
handleNowArea (val) {
console.log('val-----', val)
console.log('label-----', this.$refs.nowArea.getCheckedNodes())
if (val.length > 0) {
@ -482,7 +624,7 @@ export default {
}
},
async handleSelAddress(value) {
async handleSelAddress (value) {
const url = "/gov/org/house/gethouseinfo/" + value
@ -546,6 +688,8 @@ export default {
if (this.formType === 'add') url = '/epmetuser/tripreport/save'
else url = '/epmetuser/tripreport/update'
console.log(' this.formData', this.formData)
return false
const { data, code, msg } = await requestPost(url, this.formData)
if (code === 0) {
@ -585,6 +729,84 @@ export default {
this.sourceAllCode = []
this.nowAllCode = []
},
async getDangerLevel () {
const url = "/sys/dict/data/dictlist";
let params = {
dictType: "sojourn_history",
};
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.dangerLevelList = data
} else {
this.$message.error(msg)
}
},
async getTrafficType () {
const url = "/sys/dict/data/dictlist";
let params = {
dictType: "traffic_type",
};
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.trafficTypeList = data
} else {
this.$message.error(msg)
}
},
async getIsolateType () {
const url = "/sys/dict/data/dictlist";
let params = {
dictType: "isolate_type",
};
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.isolateTypeList = data
} else {
this.$message.error(msg)
}
},
async getTripDataType () {
const url = "/sys/dict/data/dictlist";
let params = {
dictType: "trip_data_type",
};
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.tripDataTypeList = data
} else {
this.$message.error(msg)
}
},
//
startLoading () {
loading = Loading.service({
@ -613,7 +835,6 @@ export default {
min-width: 260px;
}
}
</style>
<style lang='scss'>

163
src/views/modules/visual/communityGovern/zhongdianxingcheng/detail.vue

@ -0,0 +1,163 @@
<template>
<div class="m-pop">
<div class="wrap">
<cpt-card>
<div class="title">
<img src="@/assets/img/shuju/title-tip.png" />
<span>详情</span>
</div>
<div class="btn-close"
@click="handleClose">
<img src="@/assets/img/shuju/people/close.png" />
</div>
<div class="m-content">
<div class="m-info">
<div class="info-prop">
<span class="info-title-2">姓名</span>
<span>{{ info.name||'--' }}</span>
</div>
<div class="info-prop">
<span class="info-title-2">手机</span>
<span>{{ info.mobile||'--' }}</span>
</div>
<div class="info-prop">
<span class="info-title-2">证件号</span>
<span>{{ info.idCard||'--' }}</span>
</div>
<div class="info-prop">
<span class="info-title-2">来源地</span>
<span>{{ info.sourceAddress||'--' }}</span>
</div>
<div class="info-prop">
<span class="info-title-2">来曹事由</span>
<span>{{ info.describe||'--' }}</span>
</div>
<div class="info-prop">
<span class="info-title-2">核酸检测结果</span>
<span>{{ info.natOutcome||'--' }}</span>
</div>
<div class="info-prop">
<span class="info-title-2">7天旅居史</span>
<span>{{ info.sojournHistory||'--' }}</span>
</div>
<div class="info-prop">
<span class="info-title-2">隔离状态</span>
<span>{{ info.isolateType||'--' }}</span>
</div>
<div class="info-prop">
<span class="info-title-2">来曹时间</span>
<span>{{ info.arriveDate||'--' }}</span>
</div>
</div>
</div>
</cpt-card>
</div>
</div>
</template>
<script>
import cptCard from "@/views/modules/visual/cpts/card";
import screenLoading from "@/views/modules/visual/cpts/loading";
import { requestPost } from "@/js/dai/request";
import dateFormat from "dai-js/tools/dateFormat";
export default {
name: "demandInfo",
props: {
detailId: {
type: String,
default: "",
},
},
components: {
cptCard,
screenLoading,
},
data () {
return {
info: {
name: "",
mobile: "",
idCard: "",
sourceAddress: "",
describe: "",
natOutcome: "",
sojournHistory: "",
isolateType: "",
arriveDate: '',
},
};
},
computed: {},
watch: {
detailId () {
this.getApiData();
},
},
mounted () {
this.getApiData();
},
methods: {
handleClose () {
this.$emit("close");
},
async getApiData () {
await this.getInfo();
},
//
async getInfo () {
// const url = "/epmetuser/icTripReportRecord/emphasisTripDetail";
const url = "http://yapi.elinkservice.cn/mock/245/epmetuser/icTripReportRecord/emphasisTripDetail";
let params = {
id: this.detailId,
};
const { data, code, msg } = await requestPost(url, params);
if (code === 0) {
this.info = data
if (this.info.topicInfo && this.info.topicInfo.publishedTime) {
this.info.topicInfo.publishedTimeShow = dateFormat(new Date(this.info.topicInfo.publishedTime * 1000), "yyyy-MM-dd")
}
} else {
this.$message.error(msg);
}
},
},
};
</script>
<style
lang="scss"
src="@/assets/scss/modules/visual/issue-info.scss"
scoped
></style>

175
src/views/modules/visual/communityGovern/zhongdianxingcheng/pieOption.js

@ -0,0 +1,175 @@
export function pieOption (_charts) {
const center= ['50%', '240px']
return {
title: {
text: '0',
top: 215,
left: 'center',
textStyle: {
width: '100%',
fontSize: 26,
color: '#FFFFFF',
fontWeight: 400
},
itemGap: 5,
subtext: '总数',
subtextStyle: {
fontSize: 18,
color: '#fff',
fontWeight: 400
}
},
tooltip: {
show: false
},
legend: {
bottom: 150,
itemWidth: 20,
itemHeight: 10,
textStyle: {
color: '#D2E7FF',
fontSize: 14,
lineHeight: 20,
},
},
series: [
// 外侧圆环
{
type: 'pie',
// 起始刻度的角度,默认为 90 度,即圆心的正上方。0 度为圆心的正右方。
startAngle: 0,
hoverAnimation: false,
// tooltip: {
// },
center: center,
radius: ['48%', '48.3%'],
label: {
show: false
},
labelLine: {
show: false
},
data: [{
value: 360,
itemStyle: {
color: 'rgba(40, 101, 250, 0)',
width:0,
borderColor: 'rgba(40, 101, 250, 0.5)',
borderWidth: 1,
borderType: 'dotted'
}
}
]
},
// 突出的
{
hoverAnimation: false,
// name: 'Access From',
type: 'pie',
center: center,
radius: ['25%', '38%'],
avoidLabelOverlap: false,
// top: top + '%',
// height: '80%',
selectedMode: 'single',
left: 'center',
width: 480,
label: {
// show: false,
position: 'outside',
alignTo: 'edge',
// formatter: '{a|{c}}\n\n{name|{b}}',
formatter: '{a|{c}}\n{r|}\n{name|{b}}',
minMargin: 5,
edgeDistance: 1,
lineHeight: 15,
color: '#fff',
fontSize: 10,
// distanceToLabelLine: -60,
rich: {
name: {
padding: [0, 6, 0, 6]
},
a: {
fontSize: 18,
color: '#fff',
padding: [0, 6, 6, 6]
},
r: {
backgroundColor: 'auto',
borderRadius: 6,
width: 6,
height: 6,
// padding: [3, 3, 0, -12]
}
}
},
labelLine: {
show: false,
smooth: 0.2,
length: 20,
length2: 0,
maxSurfaceAngle: 80
},
labelLayout: function (params) {
const isLeft = params.labelRect.x < _charts.getWidth() / 2;
const points = params.labelLinePoints;
// Update the end point.
if (points) {
points[2][0] = isLeft
? params.labelRect.x
: params.labelRect.x + params.labelRect.width;
}
return {
labelLinePoints: points
};
},
itemStyle: {
color:function(params) {
return params.data.color
}
},
data: [],
},
// 中间圆环
{
type: 'pie',
// 起始刻度的角度,默认为 90 度,即圆心的正上方。0 度为圆心的正右方。
startAngle: 0,
hoverAnimation: false,
center: center,
// tooltip: {
// },
radius: ['0%', '20%'],
label: {
show: false
},
labelLine: {
show: false
},
data: [{
value: 360,
itemStyle: {
normal: {
color: 'rgba(8, 37, 134, 1)',
}
}
}
]
},
]
}
}

506
src/views/modules/visual/communityGovern/zhongdianxingcheng/zhongdianxingcheng.vue

@ -0,0 +1,506 @@
<template>
<cpt-card style="margin-top:40px">
<div class="title">
<img src="@/assets/img/shuju/title-tip.png" />
<span>重点行程名单统计</span>
<div class="search">
<div class="second-select cascader">
<!-- <el-cascader class="customer_cascader"
ref="myCascader"
v-model="agencyIdArray"
:key="iscascaderShow"
:options="casOptions"
:props="optionProps"
:show-all-levels="false"
@change="handleChangeAgency"></el-cascader> -->
<el-cascader ref="sourceArea"
v-model="sourceAllCode"
class="customer_cascader"
:props="areaProps"
@change="handleAreaChange"
clearable></el-cascader>
</div>
</div>
</div>
<div class="g-cpt-resi">
<div class="g-l">
<screen-echarts-frame v-if=" !dataLoading"
class="echart-wr"
@myChartMethod="pieInitOk"
ref="pieChart"></screen-echarts-frame>
<div class="table-status"
v-if="dataLoading">
<screen-loading>加载中</screen-loading>
</div>
</div>
<div class="g-r">
<div class="m-tb">
<div class="tb">
<cpt-tb :col-list="demand.colList"
:loading="demand.loading"
:header="demand.header"
:list="demand.list"
@operate="toIssueInfo"></cpt-tb>
</div>
<div class="m-pagination">
<el-pagination hide-on-single-page
:current-page="demand.pageNo"
:page-size="demand.pageSize"
:total="demand.total"
background
layout="prev, pager, next,total"
@current-change="handlePageNoChange_demand">
</el-pagination>
</div>
</div>
</div>
</div>
<detail v-if="showDetail"
:detailId="detailId"
@close="showDetail = false" />
</cpt-card>
</template>
<script>
import { Loading } from "element-ui"; //Loading
import { requestPost } from "@/js/dai/request";
import cptCard from "@/views/modules/visual/cpts/card";
import cptTb from "@/views/modules/visual/cpts/tb";
import screenEchartsFrame from "@/views/modules/visual/components/screen-echarts-frame";
import ScreenLoading from "@/views/modules/visual/components/screen-loading";
import ScreenNodata from "@/views/modules/visual/components/screen-nodata";
import { pieOption } from './pieOption.js'
import detail from "./detail";
export default {
name: "HomeMap",
data () {
return {
dataLoading: true,
pieChartS: null,
pieChart: '',
pieOption: {},
pieInitState: false,
pieTotal: 0,
colorArray: [],
pieData: [],
code: '',
dangerLevel: '',
tableList: [],
demand: {
loading: true,
colList: [
{
align: "center",
width: "5%",
},
{
align: "center",
width: "5%",
},
{
align: "center",
width: "10%",
},
{
align: "center",
width: "10%",
},
{
align: "center",
width: "15%",
},
{
align: "center",
width: "15%",
},
{
align: "center",
width: "10%",
},
{
align: "center",
width: "15%",
},
{
align: "center",
width: "10%",
},
{
align: "center",
width: "10%",
},
{
align: "center",
width: "10%",
},
],
header: ["序号", "姓名", "手机号", "证件号", "来源地", "来曹事由", "48小时核酸", "来曹时间", "七天内旅居", "隔离状态", "操作"],
list: [],
pageSize: 10,
pageNo: 1,
total: 0,
},
showDetail: false,
detailId: '',
sourceAllCode: [],
areaProps: {
checkStrictly: true,
lazy: true,
lazyLoad: this.lzayLoadArea
},
};
},
// mixins: [animate]
beforeDestroy () {
},
async mounted () {
this.dataLoading = true
await this.getDangerLevel()//
await this.getApiData()
this.dataLoading = false
this.getPie()
},
methods: {
async getApiData () {
await this.getPieChart()
await this.getTable();
},
async handleAreaChange (val) {
if (val.length > 0) {
// this.code = val.join('-')
this.code = val[val.length - 1]
} else {
this.code = ''
}
await this.getPieChart()
this.getPie()
},
lzayLoadArea (node, resolve) {
// this.getArea(node, resolve)
setTimeout(() => {
this.getArea(node, resolve)
}, 200)
},
async getArea (node, resolve) {
const url = "/commonservice/areacode/nextarea"
let params = {
parentLevel: node.data ? node.data.level : '',
parentAreaCode: node.data ? node.data.code : ''
}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
const nodes = data.map(item => ({
value: item.areaCode, //
label: item.areaName,
code: item.areaCode,
level: item.level,
leaf: node.level >= 1 // 2
}))
resolve(nodes)
} else {
this.$message.error(msg)
}
},
//
async getDangerLevel () {
const url = "/sys/dict/data/dictlist";
let params = {
dictType: "dangerAreaLevel",
};
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.dangerLevelList = data
} else {
this.$message.error(msg)
}
},
//
async getPieChart () {
if (this.$refs.pieChart) {
this.$refs.pieChart.clear()
this.$refs.pieChart.showLoading()
}
// const url = "/epmetuser/tripreport/emphasisTripPieDetail";
const url = "http://yapi.elinkservice.cn/mock/245/epmetuser/tripreport/emphasisTripPieDetail";
let params = {
code: this.code,
};
const { data, code, msg } = await requestPost(url, params);
if (code === 0) {
let dataTemp = [
{ total: 50, dangerLevelName: '低风险', color: '#fac858', dangerLevel: '0' },
{ total: 20, dangerLevelName: '中风险', color: '#fc8452', dangerLevel: '1' },
{ total: 20, dangerLevelName: '高风险', color: '#ee6666', dangerLevel: '2' },
]
this.pieData = []
this.pieTotal = 0
dataTemp.forEach(element => {
this.pieTotal = this.pieTotal + element.total
let color = ''
if (element.dangerLevel === '2') {
color = '#ee6666'
} else if (element.dangerLevel === '1') {
color = '#fc8452'
} else {
color = '#fac858'
}
let obj = {
name: element.dangerLevelName,
value: element.total,
color: color
}
this.pieData.push(obj)
});
if (this.$refs.pieChart) {
this.$refs.pieChart.hideLoading()
}
} else {
this.$message.error(msg);
}
},
pieInitOk (dom) {
console.log('pie准备好了', dom)
this.pieChartS = dom
this.pieInitState = true
},
getPie () {
if (this.pieInitState) {
this.assignPieChart()
} else {
setTimeout(() => {
this.getPie()
}, 500)
}
},
assignPieChart () {
const _that = this;
// pieChart
this.pieOption = pieOption(this.pieChartS);
this.pieData[0].selected = false;
this.pieData[1].selected = false;
this.pieOption.title.text = this.pieTotal;
this.clickPie();
let fun = function (params) {
_that.clickPie(params);
};
this.$refs.pieChart.handleClick(fun);
},
clickPie (params) {
console.log('clickPie', params)
let dataIndex = params ? params.dataIndex : null;
let componentIndex = params ? params.componentIndex : null;
let data = params ? params.data : null
if (componentIndex === 1) {
//
if (data.name === '低风险') {
this.dangerLevel = "0";
} else if (data.name === '中风险') {
this.dangerLevel = "1";
} else if (data.name === '高风险') {
this.dangerLevel = "2";
}
} else if (componentIndex === 2) {
//
this.dangerLevel = "";
dataIndex = 3;
}
if (dataIndex === 3) {
this.$refs.pieChart.clear();
}
this.pieData.forEach((element, index) => {
if (index === dataIndex) {
element.selected = true;
element.label = {
show: true,
};
element.labelLine = {
show: true,
lineStyle: {
opacity: 1,
},
};
// element.selected = !element.selected
} else {
element.selected = false;
element.label = {
show: false,
};
element.labelLine = {
show: false,
lineStyle: {
opacity: 0,
color: "rgba(255,255,255,0)",
},
};
element.selected = false;
}
});
this.pieOption.series[1].data = this.pieData;
this.demand.pageNo = 1;
this.getTable();
// this.$refs.pieChart.hideLoading()
this.$refs.pieChart.setOption(this.pieOption);
},
//
async getTable () {
// const url = "/epmetuser/tripreport/list";
const url = "http://yapi.elinkservice.cn/mock/245/epmetuser/tripreport/list";
let params = {
code: this.code,
dangerLevel: this.dangerLevel,
pageNo: this.demand.pageNo,
pageSize: this.demand.pageSize,
};
const { data, code, msg } = await requestPost(url, params);
this.demand.loading = false;
if (code === 0) {
this.demand.total = data.total;
this.tableList = data.list
this.demand.list = data.list.map((item, index) => {
return [
index + 1,
item.name ? item.name : '--',
item.mobile ? item.mobile : '',
item.idCard ? item.idCard : '',
item.sourceAddress ? item.sourceAddress : '',
item.describe ? item.describe : '',
item.natOutcome ? item.natOutcome : '',
item.arriveDate ? item.arriveDate : 0,
item.sojournHistory ? item.sojournHistory : '',
item.isolateType ? item.isolateType : '',
{ type: "operate", list: ["查看"] },
];
});
} else {
this.$message.error(msg);
}
},
handlePageNoChange_demand (val) {
this.demand.pageNo = val;
this.getTable();
},
async toIssueInfo (index) {
const { tableList } = this;
this.detailId = tableList[index].id
this.showDetail = true
},
},
props: {
uid: {
type: String,
default: "",
// default: "8ada68cb6f1e4b9a8333348a39ef3aee",
},
},
computed: {},
components: {
cptCard,
cptTb,
screenEchartsFrame,
ScreenLoading,
ScreenNodata,
detail
},
watch: {
uid (id) {
this.userId = id;
},
userId () {
this.getApiData();
window.scrollTo(0, 0);
},
},
};
</script>
<style
lang="scss"
src="@/assets/scss/modules/visual/resibuzz.scss"
scoped
></style>
<style
lang="scss"
src="@/assets/scss/modules/visual/search_1.scss"
scoped
></style>
Loading…
Cancel
Save