Commit 083e4d98 by wangchunyang

现场项目代码覆盖

parent 8978ca8c
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -11,6 +11,7 @@
"test:e2e": "vue-cli-service test:e2e"
},
"dependencies": {
"@riophae/vue-treeselect": "^0.4.0",
"@turf/turf": "^7.0.0",
"axios": "^0.18.0",
"clipboard": "^2.0.0",
......@@ -20,11 +21,11 @@
"dayjs": "^1.8.13",
"echarts": "^4.2.1",
"html2canvas": "^1.0.0-rc.7",
"im-plugin-vue2-iview": "^0.1.2",
"image-conversion": "^2.1.1",
"iview": "^3.4.0",
"iview-area": "^1.5.17",
"iview-layout-themes": "^0.6.43",
"im-plugin-vue2-iview": "^0.1.2",
"js-cookie": "^2.2.0",
"qr-image": "^3.2.0",
"qrcode2": "^1.2.3",
......@@ -39,13 +40,13 @@
"video.js": "^7.15.4",
"view-design": "^4.1.3",
"vue": "^2.6.10",
"vue-qr": "^4.0.9",
"vue-amap": "0.5.8",
"vue-i18n": "^7.8.0",
"vue-json-views": "^1.3.0",
"vue-pdf": "^4.0.6",
"vue-photo-preview": "^1.1.3",
"vue-print-nb": "^1.0.3",
"vue-qr": "^4.0.9",
"vue-router": "^3.0.6",
"vue-scroll-ad": "^1.1.0",
"vuedraggable": "^2.20.0",
......
......@@ -201,6 +201,13 @@ export const findEventPageList = (param) => { // 政法委和综治中心数据
data: param
})
}
export const findEventAllList = (param) => { // 矛盾纠纷列表查询
return axios.request({
url: '/api/ac/jilinsscgsdp/eventService/findEventAllList',
method: 'post',
data: param
})
}
export const findSafeSoundEventLogByOfficeStatusList = (param) => { // 政法委和综治中心数据列表
return axios.request({
url: '/api/ac/jilinsscgsdp/safeSound/findSafeSoundEventLogByOfficeStatusList',
......@@ -1049,3 +1056,135 @@ export const rejectSafeSoundEvent = (param) => { // 驳回事件
data: param
})
}
// 区划树
export const findNodes = (data) => {
return axios.request({
url: '/api/ac/jilinsscgsdp/noticeService/findNodes',
data: data,
method: 'post'
})
}
export const updateStatus = (data) => {
return axios.request({
url: '/api/ac/jilinsscgsdp/noticeService/updateStatus',
data: data,
method: 'post'
})
}
// 综治中心规范化建设运行情况表相关接口
export const getComprehensiveCenterList = (param) => { // 获取列表
return axios.request({
url: '/api/ac/jilinsscgsdp/constructionSelection/selectComprehensiveGovernanceList',
method: 'post',
data: param
})
}
export const getComprehensiveCenterById = (param) => { // 根据ID获取详情
return axios.request({
url: '/api/ac/jilinsscgsdp/constructionSelection/getComprehensiveGovernance',
method: 'post',
data: param
})
}
export const insertComprehensiveCenter = (param) => { // 新增
return axios.request({
url: '/api/ac/jilinsscgsdp/constructionSelection/insertComprehensiveGovernance',
method: 'post',
data: param
})
}
export const updateComprehensiveCenter = (param) => { // 更新
return axios.request({
url: '/api/ac/jilinsscgsdp/constructionSelection/updateComprehensiveGovernance',
method: 'post',
data: param
})
}
export const deleteComprehensiveCenter = (param) => { // 删除
return axios.request({
url: '/api/ac/jilinsscgsdp/constructionSelection/updateComprehensiveGovernance',
method: 'post',
data: param
})
}
export const getOtherOptions = (param) => { // 获取"其他"选项列表(用于动态加载)
return axios.request({
url: '/api/ac/jilinsscgsdp/comprehensiveCenter/getOtherOptions',
method: 'post',
data: param
})
}
// 综合谈判预警历史-卡片统计
export const getWarningStatisticsCountHistory = (param) => { // 获取预警统计数据
return axios.request({
url: '/api/ac/jilinsscgsdp/waringService/getWarningStatisticsCountHistory',
method: 'post',
data: param
})
}
// 综合谈判预警历史列表-风险因子预警历史
export const findEventRiskFactorHistoryPageList = (param) => { // 获取预警统计数据
return axios.request({
url: '/api/ac/jilinsscgsdp/eventService/findEventRiskFactorHistoryPageList',
method: 'post',
data: param
})
}
// 综合谈判预警历史列表-群体性事件预警历史
export const findEventTriggerHistoryPageList = (param) => { // 获取预警统计数据
return axios.request({
url: '/api/ac/jilinsscgsdp/eventService/findEventTriggerHistoryPageList',
method: 'post',
data: param
})
}
// 综合谈判预警历史列表-涉众预警历史
export const findInvolveEveryoneHistoryPageList = (param) => { // 获取预警统计数据
return axios.request({
url: '/api/ac/jilinsscgsdp/eventService/findInvolveEveryoneHistoryPageList',
method: 'post',
data: param
})
}
// 综合谈判预警历史列表-重点人历史
export const findImportantUserHistoryPageList = (param) => { // 获取预警统计数据
return axios.request({
url: '/api/ac/jilinsscgsdp/waringService/findImportantUserHistoryPageList',
method: 'post',
data: param
})
}
// 综合谈判预警历史列表-矛盾超期历史
export const findOverdueEventHistoryPageList = (param) => { // 获取预警统计数据
return axios.request({
url: '/api/ac/jilinsscgsdp/eventService/findOverdueEventHistoryPageList',
method: 'post',
data: param
})
}
// 综合谈判预警历史列表-重点领域预警历史
export const selectWarningAreaPageHistoryList = (param) => { // 获取重点领域预警列表(新版)
return axios.request({
url: '/api/as/jilinsscgsdp/event/selectWarningAreaPageHistoryList',
method: 'post',
data: param
})
}
// 综合谈判预警历史列表-重点领域预警历史-详情列表
export const fousAreaWarringPageHistoryList = (param) => { // 获取重点领域预警列表(新版)
return axios.request({
url: '/api/ac/jilinsscgsdp/eventService/fousAreaWarringPageHistoryList',
method: 'post',
data: param
})
}
......@@ -161,6 +161,14 @@ export const findKeyPersonList = (param) => {
data: param
})
}
// 五种重点人员查询-去重了
export const findPersonListByRiskLevel = (param) => {
return axios.request({
url: '/api/ac/jilinsscgsdp/murderManagementService/findPersonListByRiskLevel',
method: 'post',
data: param
})
}
// 删除
export const deleteKeyPersonById = (param) => {
return axios.request({
......
......@@ -20,4 +20,66 @@ div.ivu-table th {
-moz-user-select: text !important;
-ms-user-select: text !important;
user-select: text !important;
}
\ No newline at end of file
}
/* ========== 文本省略样式类 ========== */
/* 单行省略 */
.text-ellipsis-1 {
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 1;
line-clamp: 1;
overflow: hidden;
text-overflow: ellipsis;
word-break: break-all;
line-height: 1.5;
max-height: 1.5em;
}
/* 两行省略 */
.text-ellipsis-2 {
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
line-clamp: 2;
overflow: hidden;
text-overflow: ellipsis;
word-break: break-all;
line-height: 1.5;
max-height: 3em;
}
/* 三行省略 */
.text-ellipsis-3 {
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 3;
line-clamp: 3;
overflow: hidden;
text-overflow: ellipsis;
word-break: break-all;
line-height: 1.5;
max-height: 4.5em;
}
/* 四行省略 */
.text-ellipsis-4 {
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 4;
line-clamp: 4;
overflow: hidden;
text-overflow: ellipsis;
word-break: break-all;
line-height: 1.5;
max-height: 6em;
}
/* iView 组件禁用样式全局设置 */
.ivu-input-disabled {
color: #515a6e !important;
}
.ivu-select-disabled .ivu-select-selection {
color: #515a6e !important;
}
<template>
<Modal
v-model="isOpen"
title="图片"
@on-cancel="cancel">
<img :src="imgSrc" width="100%" />
</Modal>
</template>
<script>
export default {
name: 'CImage',
data () {
return {
isOpen: false,
imgSrc: ''
}
},
methods: {
init (info) {
this.imgSrc = info.src
this.isOpen = true
},
cancel () {
this.isOpen = false
this.imgSrc = ''
}
}
}
</script>
<style scoped>
</style>
<template>
<Tooltip :content="text || ''" placement="top" :max-width="maxWidth">
<div :class="ellipsisClass">{{ text || '' }}</div>
</Tooltip>
</template>
<script>
export default {
name: 'TableTextEllipsis',
props: {
// 要显示的文本内容
text: {
type: [String, Number],
default: ''
},
// 显示的行数,默认为2行
lines: {
type: Number,
default: 2,
validator: (value) => [1, 2, 3, 4].includes(value)
},
// Tooltip 的最大宽度
maxWidth: {
type: Number,
default: 300
}
},
computed: {
ellipsisClass () {
return `text-ellipsis-${this.lines}`
}
}
}
</script>
<style scoped>
/* 样式已在 global.css 中定义 */
</style>
......@@ -26,6 +26,9 @@
<div class="tag-nav-wrapper">
<tags-nav :value="$route" @input="handleClick" :list="tagNavList" @on-close="handleCloseTag"/>
</div>
<div class="breadcrumb-wrapper" style="padding: 10px 20px; background: #fff; border-bottom: 1px solid #e8e8e8;">
<custom-bread-crumb show-icon :list="breadCrumbList"></custom-bread-crumb>
</div>
<Content class="content-wrapper">
<keep-alive :include="cacheList">
<router-view/>
......@@ -48,6 +51,7 @@ import Fullscreen from './components/fullscreen'
import Clear from './components/clear'
import Language from './components/language'
import ErrorStore from './components/error-store'
import CustomBreadCrumb from './components/header-bar/custom-bread-crumb'
import { mapMutations, mapActions, mapGetters } from 'vuex'
import { getNewTagList, routeEqual, getMenuByRouter, localSave, localRead } from '@/libs/util'
import { getRouterReq } from '@/api/routers'
......@@ -69,7 +73,8 @@ export default {
ErrorStore,
User,
ABackTop,
Clear
Clear,
CustomBreadCrumb
},
data () {
return {
......@@ -102,6 +107,9 @@ export default {
menuList () {
return this.$store.getters.menuList
},
breadCrumbList () {
return this.$store.state.app.breadCrumbList
},
local () {
return this.$store.state.app.local
},
......
......@@ -169,7 +169,7 @@ export default {
}
},
mounted () {
this.getAllApi()
// this.getAllApi()
},
methods: {
showOption () {
......
const constentObject = {
keyPopulationTypes: [
{ label: '刑满释放人员', value: '1' },
{ label: '严重精神障碍患者', value: '2' },
{ label: '"三失一偏"人员', value: '3' },
{ label: '涉重点涉法涉诉类矛盾人员', value: '4' },
{ label: '涉重点信访事项人员', value: '5' },
{ label: '社区矫正人员', value: '6' },
{ label: '吸毒人员', value: '7' },
{ label: '问题青少年', value: '8' }
],
keyPopulationObject: {
'1': '刑满释放人员',
'2': '严重精神障碍患者',
'3': '"三失一偏"人员',
'4': '涉重点涉法涉诉类矛盾人员',
'5': '涉重点信访事项人员',
'6': '社区矫正人员',
'7': '吸毒人员',
'8': '问题青少年'
}
}
export default constentObject
......@@ -29,8 +29,12 @@ import 'video.js/dist/video-js.css'
import imPluginVue2Iview from 'im-plugin-vue2-iview'
import 'im-plugin-vue2-iview/lib/im-plugin-vue2-iview.css'
import * as echarts from 'echarts'
// 导入全局表格文本省略组件
import TableTextEllipsis from '@/components/common/TableTextEllipsis.vue'
Vue.prototype.$video = Video
// 注册全局表格文本省略组件
Vue.component('TableTextEllipsis', TableTextEllipsis)
// 实际打包时应该不引入mock
/* eslint-disable */
// if (process.env.NODE_ENV !== 'production') require('@/mock')
......
......@@ -158,6 +158,30 @@ export default [
component: () => import('@/view/people-info/index1')
},
{
path: '/special/peopleInfoall',
name: 'peopleInfo',
meta: {
title: '特殊人员管理-特殊人员列表'
},
component: () => import('@/view/people-info/indexall')
},
{
path: '/special/peopleInfoByRiskLevel',
name: 'peopleInfoByRiskLevel',
meta: {
title: '特殊人员管理-按风险等级查询'
},
component: () => import('@/view/people-info/indexByRiskLevel')
},
{
path: '/special/peopleInfoDetail',
name: 'peopleInfoDetail',
meta: {
title: '特殊人员管理-人员详情'
},
component: () => import('@/view/people-info/indexall')
},
{
path: '/special/peopleInfo2',
name: 'peopleInfo',
meta: {
......@@ -326,6 +350,14 @@ export default [
component: () => import('@/view/contradiction/riskWarning/focusAreaList')
},
{
path: '/contradiction/riskWarning/focusAreaListHistory',
name: 'riskWarningFocusAreaList',
meta: {
title: '矛盾-风险预警-重点领域历史'
},
component: () => import('@/view/contradiction/riskWarning/focusAreaList2')
},
{
path: '/contradiction/riskWarning/focusRegionList',
name: 'riskWarningFocusRegionList',
meta: {
......@@ -334,6 +366,14 @@ export default [
component: () => import('@/view/contradiction/riskWarning/focusRegionList')
},
{
path: '/contradiction/riskWarning/focusRegionListHistory',
name: 'riskWarningFocusRegionList',
meta: {
title: '矛盾-风险预警-重点地区历史'
},
component: () => import('@/view/contradiction/riskWarning/focusRegionList2')
},
{
path: '/keyPerson',
name: 'keyPerson',
meta: {
......@@ -377,6 +417,33 @@ export default [
props: (route) => ({ alarmLevel: '3', ...route.params })
},
{
path: '/firstLevelWarnHistory',
name: 'firstLevelWarnHistory',
meta: {
title: '矛盾-一级预警历史'
},
component: () => import('@/view/contradiction/levelWarnHistory.vue'),
props: (route) => ({ alarmLevel: '1', ...route.params })
},
{
path: '/secondLevelWarnHistory',
name: 'secondLevelWarnHistory',
meta: {
title: '矛盾-二级预警历史'
},
component: () => import('@/view/contradiction/levelWarnHistory.vue'),
props: (route) => ({ alarmLevel: '2', ...route.params })
},
{
path: '/thirdLevelWarnHistory',
name: 'thirdLevelWarnHistory',
meta: {
title: '矛盾-三级预警历史'
},
component: () => import('@/view/contradiction/levelWarnHistory.vue'),
props: (route) => ({ alarmLevel: '3', ...route.params })
},
{
path: '/levelWarn',
name: 'levelWarn',
meta: {
......@@ -513,5 +580,30 @@ export default [
title: '矛盾-重复类型统计'
},
component: () => import('@/view/people-info/repetitiveType/index.vue')
},
{
path: '/WorkStatistics',
name: 'WorkStatistics',
meta: {
title: '综治中心工作统计'
},
component: () => import('@/view/contradiction/WorkStatistics.vue')
},
{
path: '/contradiction/comprehensiveCenterList',
name: 'ComprehensiveCenterList',
meta: {
title: '综治中心规范化建设运行情况表-列表'
},
component: () => import('@/view/contradiction/ComprehensiveCenterList.vue')
},
{
path: '/contradiction/comprehensiveCenterForm',
name: 'ComprehensiveCenterForm',
meta: {
title: '综治中心规范化建设运行情况表-表单',
hideInMenu: true
},
component: () => import('@/view/contradiction/ComprehensiveCenterForm.vue')
}
]
......@@ -198,5 +198,13 @@ export default [
title: '回访按钮可见权限'
},
component: () => import('@/view/key-person/key-person-power/index')
},
{
path: '/people-info/personManageTabs',
name: 'personManageTabs',
meta: {
title: '居住外地人员管理'
},
component: () => import('@/view/people-info/personManageTabs')
}
]
......@@ -38,17 +38,18 @@ export default {
console.log(obj.token)
const encryptedToken = window.btoa(encodeURIComponent(JSON.stringify(obj)))
// 使用 randomParamName key名伪装token 避免暴露token
// 使用协议相对 URL(//)自动匹配当前页面的协议(http 或 https)
if (num === 1) {
console.log(this.domain, 'this.domain')
window.open(`http://${this.domain}/screen-md/#/?randomParamName=${encryptedToken}`, '_blank')
window.open(`//${this.domain}/screen-md/#/?randomParamName=${encryptedToken}`, '_blank')
// window.open(`http://jilinmdjf.lngov.top:8088/screen-md/#/?randomParamName=${encryptedToken}`, '_blank')
}
if (num === 2) {
window.open(`http://${this.domain}/screen-md/#/keyGroups?randomParamName=${encryptedToken}`, '_blank')
window.open(`//${this.domain}/screen-md/#/keyGroups?randomParamName=${encryptedToken}`, '_blank')
// window.open(`http://jilinmdjf.lngov.top:8088/screen-md/#/keyGroups?randomParamName=${encryptedToken}`, '_blank')
}
if (num === 3) {
window.open(`http://${this.domain}/screen-md/#/homicideCase?randomParamName=${encryptedToken}`, '_blank')
window.open(`//${this.domain}/screen-md/#/homicideCase?randomParamName=${encryptedToken}`, '_blank')
// window.open(`http://jilinmdjf.lngov.top:8088/screen-md/#/homicideCase?randomParamName=${encryptedToken}`, '_blank')
}
}
......
<template>
<div class="comprehensive-center-list">
<div class="search-div">
<Row class="mb10">
<!-- <Col span="6">
<span>市州:</span>
<Select v-model="searchInfo.cityId" :clearable="true" style="width:70%" placeholder="请选择市州">
<Option v-for="item in cityList" :value="item.value" :key="item.value">{{ item.label }}</Option>
</Select>
</Col>
<Col span="6">
<span>县(市、区):</span>
<Select v-model="searchInfo.areaId" :clearable="true" style="width:70%" placeholder="请选择县区">
<Option v-for="item in areaList" :value="item.value" :key="item.value">{{ item.label }}</Option>
</Select>
</Col> -->
<Col span="6">
<Button type="primary" @click="handleSearch">搜索</Button>
<Button style="margin-left: 10px;" type="primary" @click="handleAdd">新增</Button>
<!-- <Button style="margin-left: 10px;" @click="handleReset">重置</Button> -->
</Col>
<!-- <Col span="6" style="text-align: right;">
<Button type="primary" @click="handleAdd">新增</Button>
</Col> -->
</Row>
</div>
<div class="table-div">
<Table
:columns="columns"
:data="tableData"
:loading="loading"
border
stripe
>
<template slot-scope="{ row }" slot="action">
<Button type="primary" size="small" style="margin-right: 5px;" @click="handleEdit(row)">编辑</Button>
<Button type="error" size="small" @click="handleDelete(row)">删除</Button>
</template>
</Table>
<Page
:total="total"
:current="pageInfo.page"
:page-size="pageInfo.pageSize"
show-total
show-elevator
@on-change="handlePageChange"
@on-page-size-change="handlePageSizeChange"
style="margin-top: 20px; text-align: right;"
/>
</div>
</div>
</template>
<script>
import { getComprehensiveCenterList, deleteComprehensiveCenter } from '@/api/contradiction'
export default {
name: 'ComprehensiveCenterList',
data () {
return {
loading: false,
searchInfo: {
cityId: '',
areaId: ''
},
cityList: [
{ label: '长春', value: '1' },
{ label: '吉林', value: '2' },
{ label: '四平', value: '3' },
{ label: '辽源', value: '4' },
{ label: '通化', value: '5' },
{ label: '白山', value: '6' },
{ label: '松原', value: '7' },
{ label: '白城', value: '8' },
{ label: '延边', value: '9' },
{ label: '梅河口', value: '10' }
],
areaList: [],
tableData: [],
total: 0,
pageInfo: {
page: 1,
pageSize: 10
},
columns: [
{
title: '序号',
type: 'index',
width: 80,
align: 'center'
},
{
title: '市州',
key: 'city_name',
align: 'center',
minWidth: 100
},
{
title: '县(市、区)',
key: 'area_name',
align: 'center',
minWidth: 120
},
{
title: '面积(平方米)',
key: 'square_measure',
align: 'center',
minWidth: 120
},
{
title: '编制人数',
key: 'authorized_strength',
align: 'center',
minWidth: 100
},
{
title: '实有人数',
key: 'actual_number',
align: 'center',
minWidth: 100
},
{
title: '操作',
slot: 'action',
align: 'center',
width: 150,
fixed: 'right'
}
]
}
},
mounted () {
this.loadData()
},
methods: {
// 加载数据
async loadData () {
this.loading = true
try {
const params = {
...this.searchInfo,
page: this.pageInfo.page,
pageSize: this.pageInfo.pageSize
}
const response = await getComprehensiveCenterList(params)
if (response.data && response.data.errcode === 0) {
this.tableData = response.data.data || []
this.total = response.data.data.total || 0
} else {
this.$Message.error(response.data.errmsg || '加载数据失败')
}
} catch (error) {
console.error('加载数据失败:', error)
this.$Message.error('加载数据失败')
} finally {
this.loading = false
}
},
// 搜索
handleSearch () {
this.pageInfo.page = 1
this.loadData()
},
// 重置
handleReset () {
this.searchInfo = {
cityId: '',
areaId: ''
}
this.pageInfo.page = 1
this.loadData()
},
// 新增
handleAdd () {
this.$router.push({
name: 'ComprehensiveCenterForm',
params: { type: 'add' }
})
},
// 编辑
handleEdit (row) {
this.$router.push({
name: 'ComprehensiveCenterForm',
params: { type: 'edit', id: row.id }
})
},
// 删除
handleDelete (row) {
this.$Modal.confirm({
title: '确认删除',
content: '确定要删除这条记录吗?',
onOk: async () => {
try {
const response = await deleteComprehensiveCenter({ id: row.id, del_flag: 1 })
if (response.data && response.data.errcode === 0) {
this.$Message.success('删除成功')
this.loadData()
} else {
this.$Message.error(response.data.errmsg || '删除失败')
}
} catch (error) {
console.error('删除失败:', error)
this.$Message.error('删除失败')
}
}
})
},
// 分页变化
handlePageChange (page) {
this.pageInfo.page = page
this.loadData()
},
// 每页条数变化
handlePageSizeChange (pageSize) {
this.pageInfo.pageSize = pageSize
this.pageInfo.page = 1
this.loadData()
}
}
}
</script>
<style scoped lang="less">
.comprehensive-center-list {
padding: 20px;
.search-div {
background: #f5f5f5;
padding: 15px;
margin-bottom: 20px;
border-radius: 4px;
}
.mb10 {
margin-bottom: 10px;
}
.table-div {
background: #fff;
padding: 15px;
border-radius: 4px;
}
}
</style>
......@@ -21,7 +21,7 @@
</div>
<div class="body">
<!-- 矛盾纠纷 -->
<div class="menus" @click="skipTo('contradictionmyWorkbench', '6abe0f99-2e14-11ef-9b4b-0242c0a81f02,0d101144-2a50-11f0-bf22-0242ac110002,0c46f5bc-2a17-11f0-bf22-0242ac110002,84a62a17-2bb5-11f0-bf22-0242ac110002,6210f6cf-2bb9-11f0-bf22-0242ac110002,5c6619c9-e8e7-11ef-bd30-0242c0a81f03,f29089c3-f4e0-11ef-acc3-0242c0a81f03,328fa2e1-18f6-11f0-86a6-0242ac110002,0e213e9f-f9a4-11ef-92d1-0242ac110002')">
<div class="menus" @click="skipTo('contradictionmyWorkbench', '6abe0f99-2e14-11ef-9b4b-0242c0a81f02,0d101144-2a50-11f0-bf22-0242ac110002,0c46f5bc-2a17-11f0-bf22-0242ac110002,17e5e1a9-cccd-11f0-8e0b-fa163eb6e42a,548193ad-cc09-11f0-8e0b-fa163eb6e42a,84a62a17-2bb5-11f0-bf22-0242ac110002,6210f6cf-2bb9-11f0-bf22-0242ac110002,5c6619c9-e8e7-11ef-bd30-0242c0a81f03,f29089c3-f4e0-11ef-acc3-0242c0a81f03,328fa2e1-18f6-11f0-86a6-0242ac110002,0e213e9f-f9a4-11ef-92d1-0242ac110002')">
<a href="javascript:void(0);">
<!-- <img :src="mdjf" alt=""> -->
<img :src="img2" alt="">
......
<template>
<div class="contradiction-div">
<div class="head-title">群体性事件预警</div>
<div class="head-title">{{ pageTitle }}</div>
<div class="search-div">
<div style="width:100%;">
<Row class="mb10">
......@@ -105,7 +105,8 @@
import {
findEventTrigger,
findTriggerEventIdListForTriggerList,
selectDictList
selectDictList,
findEventTriggerHistoryPageList
// findTriggerEventIdList
} from '@/api/contradiction.js'
import { desensitizationIDCard } from '@/libs/tools.js'
......@@ -143,6 +144,8 @@ export default {
],
status: '',
alarmLevel: '',
list_url: '',
pageTitle: '',
params: {
pageNo: 1,
pageSize: 10,
......@@ -158,10 +161,59 @@ export default {
type: ''
}
},
beforeDestroy () {
this.list_url = ''
this.searchInfo = {}
this.params.pageNo = 1
this.params.pageSize = 10
},
deactivated () {
this.list_url = ''
this.searchInfo = {}
this.params.pageNo = 1
this.params.pageSize = 10
},
mounted () {
// 重点事 type:'0' 一级预警 type :'1' 二级预警 type :'2' 三级预警 type :'3' 重点事触发历史 type: '4'
this.status = this.$route.query.type || ''
this.alarmLevel = this.$route.query.alarmLevel || ''
const { history, cityId, areaId } = this.$route.query
// 综合谈判预警历史 判断 // 群体性事件预警
if (history) {
this.list_url = findEventTriggerHistoryPageList
this.pageTitle = '群体性事件预警历史'
} else {
this.list_url = findEventTrigger
this.pageTitle = '群体性事件预警'
}
if (cityId) {
this.searchInfo.cityId = cityId
}
if (areaId) {
this.searchInfo.areaId = areaId
}
this.getList()
this.getDictList('1')
},
activated () {
// 重点事 type:'0' 一级预警 type :'1' 二级预警 type :'2' 三级预警 type :'3' 重点事触发历史 type: '4'
this.status = this.$route.query.type || ''
this.alarmLevel = this.$route.query.alarmLevel || ''
const { history, cityId, areaId } = this.$route.query
// 综合谈判预警历史 判断 // 群体性事件预警
if (history) {
this.list_url = findEventTriggerHistoryPageList
this.pageTitle = '群体性事件预警历史'
} else {
this.list_url = findEventTrigger
this.pageTitle = '群体性事件预警'
}
if (cityId) {
this.searchInfo.cityId = cityId
}
if (areaId) {
this.searchInfo.areaId = areaId
}
this.getList()
this.getDictList('1')
},
......@@ -236,10 +288,15 @@ export default {
params.status = '1'
}
// 发送请求获取列表数据
findEventTrigger(params).then(res => {
this.list_url(params).then(res => {
if (res.data.errcode === 0) {
this.dataList = res.data.data.results
this.params.totalRecord = res.data.data.totalRecord
if (res.data.data.totalRecord <= this.params.pageSize && res.data.data.pageNo > 1) {
this.params.pageNo = 1
this.getList()
} else {
this.dataList = res.data.data.results
this.params.totalRecord = res.data.data.totalRecord
}
} else {
this.$Message.error(res.data.errmsg)
}
......@@ -250,15 +307,22 @@ export default {
},
size (pageSize) {
this.params.pageSize = pageSize
this.changePageNo()
this.searchData()
},
changePageNo (pageNo) {
this.params.pageNo = pageNo
this.getList(this.params)
this.getList()
},
searchData () {
// 重置页码
this.params.pageNo = 1
const { cityId, areaId } = this.$route.query
if (cityId) {
this.searchInfo.cityId = cityId
}
if (areaId) {
this.searchInfo.areaId = areaId
}
// 调用getList方法,传入搜索条件
this.getList()
},
......@@ -304,6 +368,8 @@ export default {
id: row.id,
level: '',
type: this.type
// isShowInfo: true, // 控制化解过程显隐
// isInfo: true
}
})
}
......
<template>
<div class="contradiction-div">
<div class="head-title">重点领域预警</div>
<div class="head-title">{{ pageTitle }}</div>
<div class="search-div">
<div style="width:100%;">
<Row class="mb10">
......@@ -20,6 +20,7 @@
</Col>
<Col span="6">
<Button type="primary" @click="searchData">搜索</Button>
<Button type="primary" @click="resert" style="margin-left: 10px;">重置</Button>
</Col>
</Row>
<Row class="">
......@@ -130,7 +131,14 @@
</div>
</template>
<script>
import { selectDictList, selectCityList, updateFocusAreasType, selectWarningAreaPageList, fousAreaWarringPageList } from '@/api/contradiction.js'
import {
selectDictList,
selectCityList,
updateFocusAreasType,
selectWarningAreaPageList,
fousAreaWarringPageList,
fousAreaWarringPageHistoryList, selectWarningAreaPageHistoryList
} from '@/api/contradiction.js'
import { date2str } from '@/api/eventlist.js'
export default {
name: 'register',
......@@ -200,15 +208,39 @@ export default {
totalRecord: 0,
event_category_id: ''
},
id: ''
id: '',
list_url: '',
pageTitle: '',
fid: ''
}
},
beforeDestroy () {
this.list_url = ''
this.searchInfo = {}
this.params.pageNo = 1
this.params.pageSize = 10
},
mounted () {
// 重点事 type:'0' 一级预警 type :'1' 二级预警 type :'2' 三级预警 type :'3' 重点事触发历史 type: '4'
this.type = this.$route.query.type
// 新增 搜索条件默认时间 当前年1-12月
this.searchInfo.start_time = new Date().getFullYear() + '-01'
this.searchInfo.end_time = new Date().getFullYear() + '-12'
const { history, cityId, areaId } = this.$route.query
// 重点领域预警历史
if (history) {
this.list_url = selectWarningAreaPageHistoryList
this.pageTitle = '重点领域预警历史'
} else {
this.list_url = selectWarningAreaPageList
this.pageTitle = '重点领域预警'
}
if (cityId) {
this.searchInfo.cityId = cityId
}
if (areaId) {
this.searchInfo.areaId = areaId
}
this.getDictList('1')
this.getCityData('1')
this.getList()
......@@ -291,10 +323,15 @@ export default {
areaId: this.$route.query.areaId,
cityId: this.$route.query.cityId
}
selectWarningAreaPageList(params).then(res => {
this.list_url(params).then(res => {
if (res.data.errcode === 0) {
this.dataList = res.data.data.results
this.params.totalRecord = res.data.data.totalRecord
if (res.data.data.totalRecord <= this.params.pageSize && res.data.data.pageNo > 1) {
this.params.pageNo = 1
this.getList()
} else {
this.dataList = res.data.data.results
this.params.totalRecord = res.data.data.totalRecord
}
return
}
this.$Message.error(res.data.errmsg)
......@@ -305,13 +342,14 @@ export default {
},
size (pageSize) {
this.params.pageSize = pageSize
this.changePageNo()
this.searchData()
},
changePageNo (pageNo) {
this.params.pageNo = pageNo
this.getList(this.params)
this.getList()
},
searchData () { // 搜索
this.params.pageNo = 1
// 检查开始月份和结束月份的有效性
if (this.searchInfo.start_time && this.searchInfo.end_time) {
// 对于月份选择器,我们只需要比较年和月
......@@ -324,9 +362,26 @@ export default {
return
}
}
const { cityId, areaId } = this.$route.query
if (cityId) {
this.searchInfo.cityId = cityId
}
if (areaId) {
this.searchInfo.areaId = areaId
}
this.getList(this.searchInfo)
},
resert () {
this.searchInfo = {}
this.params.pageNo = 1
this.searchInfo.start_time = new Date().getFullYear() + '-01'
this.searchInfo.end_time = new Date().getFullYear() + '-12'
this.searchData()
},
getInfo (item) {
if (item.fid) {
this.fid = item.fid
}
console.log(item, 'dddd')
this.id = item.event_category_id
this.params1.event_category_id = item.eventCategoryId
......@@ -355,7 +410,15 @@ export default {
// 从 Vuex 获取 company_id 和 company_grade 并添加到 searchInfo1
this.params1.company_id = this.serverUserInfo.company_id
this.params1.company_grade = this.serverUserInfo.company_grade
fousAreaWarringPageList(this.params1).then(res => {
const { history } = this.$route.query
let fetch = null
if (history) {
this.params1.fid = this.fid
fetch = fousAreaWarringPageHistoryList
} else {
fetch = fousAreaWarringPageList
}
fetch(this.params1).then(res => {
if (res.data.errcode === 0) {
this.monthFocusList = res.data.data.results
this.params1.totalRecord = res.data.data.totalRecord
......@@ -413,6 +476,8 @@ export default {
id: row.id,
level: '',
type: '5'
// isShowInfo: true, // 控制化解过程显隐
// isInfo: true
}
})
},
......
<template>
<div>
<div>
<Form
:model="formInline"
ref="form1"
label-position="left"
>
<Col span="5" v-if="user_level ==='2'">
<FormItem label="" key="cityId" prop="cityId" :rules="[{ required: true, message: '必填', trigger: 'change' },]">
<Select
v-model="formInline.cityId"
@on-change="changeArea('2', formInline.cityId)"
placeholder="请选择市"
style="width: 90%"
>
<Option
v-for="item in areaData.list1"
:value="item.parent_id"
:key="item.parent_id"
>{{ item.name }}</Option
>
</Select>
</FormItem>
</Col>
<Col span="5" v-if="user_level ==='3' || user_level ==='2'">
<FormItem
prop="areaId"
key="areaId"
:label-width="0"
:rules="[
{ required: true, message: '必填', trigger: 'change' },
]"
>
<Select
v-model="formInline.areaId"
placeholder="请选择区"
style="width: 90%"
>
<Option
v-for="item in areaData.list2"
:value="item.parent_id"
:key="item.parent_id"
>{{ item.name }}</Option
>
</Select>
</FormItem>
</Col>
</Form>
</div>
<div class="box" style="width:100%;height: 80vh">
<div class="top-box" @click="toPage('/riskFactorWarn?type=1')">
<img src="@/assets/contradictionImgs/warn1-1.png" alt="">
<div class="num">2123</div>
<div class="title">风险因子预警</div>
</div>
<div class="top-box" @click="toPage('/groupEventWarn?type=1')">
<img src="@/assets/contradictionImgs/warn1-2.png" alt="">
<div class="num">222</div>
<div class="title">群体性事件预警</div>
</div>
<div class="top-box" @click="toPage('/keyAreaWarn?type=1')">
<img src="@/assets/contradictionImgs/warn1-3.png" alt="">
<div class="num">2334</div>
<div class="title">重点领域预警</div>
</div>
<div class="top-box" @click="toPage('/riskFactorWarn?type=1')">
<img src="@/assets/contradictionImgs/warn1-4.png" alt="">
<div class="num">1232</div>
<div class="title">涉众预警</div>
</div>
</div>
</div>
</template>
<script>
import { selectCityList } from '@/api/contradiction'
export default {
data () {
return {
formInline: {},
user_level: '',
areaData: {
list1: [],
list2: [],
list3: [],
list4: []
}
}
},
async mounted () {
this.user_level = this.$store.state.user.severUserInfo.company_grade
if (this.user_level === '2') {
await this.getCityData('1')
}
if (this.user_level === '3') {
await this.getCityData('2', this.$store.state.user.severUserInfo.company_id)
}
},
methods: {
async getCityData (level, id) {
let res = await selectCityList({ parent_id: id })
if (res.data.errcode === 0) {
this.areaData['list' + level] = res.data.data
return
}
this.$Message.error(res.errmsg)
},
async changeArea (level, parent_id) {
await this.getCityData(level, parent_id)
},
toPage (url) {
this.$router.push({
path: url
})
}
}
}
</script>
<style scoped lang="less">
.box{
display: flex;
justify-content: space-around;
align-items: flex-start;
.top-box{
display: flex;
flex-direction:column;
justify-content: center;
align-items: center;
width: 24%;
height: 200px;
border-radius: 16px;
background: #ffeeec;
border: 1px solid #c53535;
cursor: pointer;
.title{
font-family: "PingFang SC";
font-weight: 400;
font-size: 14px;
text-align: center;
color: #2e3038;
}
.num{
font-family: "Montserrat";
font-weight: 500;
font-size: 36px;
text-align: center;
color: #c53535;
}
}
}
</style>
<template>
<div class="contradiction-div">
<div class="head-title">重点领域预警列表</div>
<div class="head-title">{{ pageTitle }}</div>
<div class="search-div clearfix">
<div class="search-area">
<div class="search-content">
......@@ -233,7 +233,7 @@
import {
selectDictList,
selectCityList,
findInvolveEveryonePageList
findInvolveEveryonePageList, findInvolveEveryoneHistoryPageList
} from '@/api/contradiction.js'
import { date2str } from '@/api/eventlist.js'
export default {
......@@ -262,13 +262,41 @@ export default {
totalRecord: 0,
eventType: '2'
},
isRouteEntered: false
isRouteEntered: false,
list_url: '',
pageTitle: '涉众预警'
}
},
beforeDestroy () {
this.list_url = ''
this.dataList = []
this.pageTitle = ''
this.searchInfo = {}
this.params.pageNo = 1
this.params.pageSize = 10
this.params.totalRecord = 0
},
mounted () {
this.getDictList('1')
this.getCityData('1')
// 立即加载数据
const { history, cityId, areaId } = this.$route.query
// 综合谈判预警历史 判断
if (history) {
this.list_url = findInvolveEveryoneHistoryPageList
this.pageTitle = '涉众预警历史'
} else {
this.list_url = findInvolveEveryonePageList
this.pageTitle = '涉众预警'
}
if (cityId) {
this.searchInfo.cityId = cityId
this.changeArea('2', this.searchInfo.cityId)
}
if (areaId) {
this.searchInfo.areaId = areaId
this.changeArea('3', this.searchInfo.areaId)
}
this.getList()
},
created () {
......@@ -278,6 +306,24 @@ export default {
console.log('组件更新 - updated')
},
activated () {
// 立即加载数据
const { history, cityId, areaId } = this.$route.query
// 综合谈判预警历史 判断
if (history) {
this.list_url = findInvolveEveryoneHistoryPageList
this.pageTitle = '涉众预警历史'
} else {
this.list_url = findInvolveEveryonePageList
this.pageTitle = '涉众预警'
}
if (cityId) {
this.searchInfo.cityId = cityId
this.changeArea('2', this.searchInfo.cityId)
}
if (areaId) {
this.searchInfo.areaId = areaId
this.changeArea('3', this.searchInfo.areaId)
}
this.getList()
},
......@@ -323,11 +369,11 @@ export default {
pageSize: this.params.pageSize
}
// 处理搜索条件
if (item) {
if (this.searchInfo) {
// 合并搜索条件
Object.keys(item).forEach(key => {
if (item[key] !== null && item[key] !== undefined && item[key] !== '') {
requestParams[key] = item[key]
Object.keys(this.searchInfo).forEach(key => {
if (this.searchInfo[key] !== null && this.searchInfo[key] !== undefined && this.searchInfo[key] !== '') {
requestParams[key] = this.searchInfo[key]
}
})
// 处理日期格式
......@@ -350,19 +396,24 @@ export default {
// 显示加载中
this.loading = true
// 调用API
findInvolveEveryonePageList(requestParams).then(res => {
this.list_url(requestParams).then(res => {
this.loading = false
if (res.data.errcode === 0) {
// 处理返回数据
if (res.data.data && Array.isArray(res.data.data.results)) {
this.dataList = res.data.data.results
this.dataList.forEach(item => {
item.place = item.city + item.area + item.street + item.community
})
this.params.totalRecord = res.data.data.totalRecord || 0
if (res.data.data.totalRecord <= this.params.pageSize && res.data.data.pageNo > 1) {
this.params.pageNo = 1
this.getList()
} else {
this.dataList = []
this.params.totalRecord = 0
// 处理返回数据
if (res.data.data && Array.isArray(res.data.data.results)) {
this.dataList = res.data.data.results
this.dataList.forEach(item => {
item.place = item.city + item.area + item.street + item.community
})
this.params.totalRecord = res.data.data.totalRecord || 0
} else {
this.dataList = []
this.params.totalRecord = 0
}
}
} else {
this.$Message.error(res.data.errmsg || '获取数据失败')
......@@ -376,11 +427,11 @@ export default {
},
size (pageSize) {
this.params.pageSize = pageSize
this.changePageNo()
this.searchData()
},
changePageNo (pageNo) {
this.params.pageNo = pageNo
this.getList(this.params)
this.getList()
},
searchData () {
// 重置页码
......@@ -395,7 +446,15 @@ export default {
console.error('解析纠纷大类信息失败:', e)
}
}
const { cityId, areaId } = this.$route.query
if (cityId) {
this.searchInfo.cityId = cityId
this.changeArea('2', this.searchInfo.cityId)
}
if (areaId) {
this.searchInfo.areaId = areaId
this.changeArea('3', this.searchInfo.areaId)
}
// 调用getList方法,传递处理后的搜索条件
this.getList(this.searchInfo)
},
......@@ -426,6 +485,13 @@ export default {
deactivated () {
console.log('组件停用 - deactivated,页面离开时调用')
// 可以在这里清除一些资源或状态
this.list_url = ''
this.dataList = []
this.pageTitle = ''
this.searchInfo = {}
this.params.pageNo = 1
this.params.pageSize = 10
this.params.totalRecord = 0
},
inject: {
reload: {
......
......@@ -47,26 +47,29 @@
</Select>
</FormItem>
</Col>
<Col span="2" v-if="user_level ==='3' || user_level ==='2'">
<Button @click="revert">重置</Button>
</Col>
</Form>
</div>
<!-- 一级预警 -->
<div v-if="currentAlarmLevel === '1'" class="box" style="width:100%;height: 80vh">
<div class="top-box" @click="toPage('/riskFactorWarn?type=1&status=2')">
<div class="top-box" @click="toPage(`/riskFactorWarn?type=1&status=2&cityId=${formInline.cityId || ''}&areaId=${formInline.areaId || ''}`)">
<img src="@/assets/contradictionImgs/warn1-1.png" alt="">
<div class="num">{{ warningData.eventRiskFactor || 0 }}</div>
<div class="title">风险因子预警</div>
</div>
<div class="top-box" @click="toPage('/groupEventWarn?alarmLevel=1')">
<div class="top-box" @click="toPage(`/groupEventWarn?alarmLevel=1&cityId=${formInline.cityId || ''}&areaId=${formInline.areaId || ''}`)">
<img src="@/assets/contradictionImgs/warn1-2.png" alt="">
<div class="num">{{ warningData.groupEvent || 0 }}</div>
<div class="title">群体性事件预警</div>
</div>
<div class="top-box" @click="toPage('/keyAreaWarn?type=1')">
<div class="top-box" @click="toPage(`/keyAreaWarn?type=1&cityId=${formInline.cityId || ''}&areaId=${formInline.areaId || ''}`)">
<img src="@/assets/contradictionImgs/warn1-3.png" alt="">
<div class="num">{{ warningData.focusAreas || 0 }}</div>
<div class="title">重点领域预警</div>
</div>
<div class="top-box" @click="toPage('/keyAreaWarnList?is_involve_everyone_count=2&alarmLevel=1')">
<div class="top-box" @click="toPage(`/keyAreaWarnList?is_involve_everyone_count=2&alarmLevel=1&cityId=${formInline.cityId || ''}&areaId=${formInline.areaId || ''}`)">
<img src="@/assets/contradictionImgs/warn1-4.png" alt="">
<div class="num">{{ warningData.involveEveryone || 0 }}</div>
<div class="title">涉众预警</div>
......@@ -75,22 +78,22 @@
<!-- 二级预警 -->
<div v-else-if="currentAlarmLevel === '2'" class="box" style="width:100%;height: 80vh">
<div class="top-box" @click="toPage('/riskFactorWarn?type=2&status=2')">
<div class="top-box" @click="toPage(`/riskFactorWarn?type=2&status=2&cityId=${formInline.cityId || ''}&areaId=${formInline.areaId || ''}`)">
<img src="@/assets/contradictionImgs/warn1-1.png" alt="">
<div class="num">{{ warningData.eventRiskFactor || 0 }}</div>
<div class="title">风险因子预警</div>
</div>
<div class="top-box" @click="toPage('/groupEventWarn?alarmLevel=2')">
<div class="top-box" @click="toPage(`/groupEventWarn?alarmLevel=2&cityId=${formInline.cityId || ''}&areaId=${formInline.areaId || ''}`)">
<img src="@/assets/contradictionImgs/warn1-2.png" alt="">
<div class="num">{{ warningData.groupEvent || 0 }}</div>
<div class="title">群体性事件预警</div>
</div>
<div class="top-box" @click="toPage('/keyAreaWarn?type=2')">
<div class="top-box" @click="toPage(`/keyAreaWarn?type=2&cityId=${formInline.cityId || ''}&areaId=${formInline.areaId || ''}`)">
<img src="@/assets/contradictionImgs/warn1-3.png" alt="">
<div class="num">{{ warningData.focusAreas || 0 }}</div>
<div class="title">重点领域预警</div>
</div>
<div class="top-box" @click="toPage('/keyAreaWarnList?is_involve_everyone_count=1&alarmLevel=2')">
<div class="top-box" @click="toPage(`/keyAreaWarnList?is_involve_everyone_count=1&alarmLevel=2&cityId=${formInline.cityId || ''}&areaId=${formInline.areaId || ''}`)">
<img src="@/assets/contradictionImgs/warn1-4.png" alt="">
<div class="num">{{ warningData.involveEveryone || 0 }}</div>
<div class="title">涉众预警</div>
......@@ -99,27 +102,27 @@
<!-- 三级预警 -->
<div v-else-if="currentAlarmLevel === '3'" class="box box-level-3" style="width:100%;height: 80vh">
<div class="top-box" @click="toPage('/levelWarnList')">
<div class="top-box" @click="toPage(`/levelWarnList?cityId=${formInline.cityId || ''}&areaId=${formInline.areaId || ''}`)">
<img src="@/assets/contradictionImgs/warn2-1.png" alt="" class="topimg">
<div class="num">{{ warningData.importantUser || 0 }}</div>
<div class="title">重点人预警</div>
</div>
<div class="top-box" @click="toPage('/overdueEventWarn?alarmLevel=3')">
<div class="top-box" @click="toPage(`/overdueEventWarn?alarmLevel=3&cityId=${formInline.cityId || ''}&areaId=${formInline.areaId || ''}`)">
<img src="@/assets/contradictionImgs/warn2-2.png" alt="" class="topimg">
<div class="num">{{ warningData.overdueEvent || 0 }}</div>
<div class="title">矛盾超期预警</div>
</div>
<div class="top-box" @click="toPage('/riskFactorWarn?type=3&status=2')">
<div class="top-box" @click="toPage(`/riskFactorWarn?type=3&status=2&cityId=${formInline.cityId || ''}&areaId=${formInline.areaId || ''}`)">
<img src="@/assets/contradictionImgs/warn2-3.png" alt="" class="topimg">
<div class="num">{{ warningData.eventRiskFactor || 0 }}</div>
<div class="title">风险因子预警</div>
</div>
<div class="top-box" @click="toPage('/groupEventWarn?alarmLevel=3')">
<div class="top-box" @click="toPage(`/groupEventWarn?alarmLevel=3&cityId=${formInline.cityId || ''}&areaId=${formInline.areaId || ''}`)">
<img src="@/assets/contradictionImgs/warn2-4.png" alt="" class="topimg">
<div class="num">{{ warningData.groupEvent || 0 }}</div>
<div class="title">群体性事件预警</div>
</div>
<div class="top-box" @click="toPage('/keyAreaWarnList?is_involve_everyone_count=0&alarmLevel=3')">
<div class="top-box" @click="toPage(`/keyAreaWarnList?is_involve_everyone_count=0&alarmLevel=3&cityId=${formInline.cityId || ''}&areaId=${formInline.areaId || ''}`)">
<img src="@/assets/contradictionImgs/warn2-5.png" alt="" class="topimg">
<div class="num">{{ warningData.involveEveryone || 0 }}</div>
<div class="title">涉众预警</div>
......@@ -191,12 +194,22 @@ export default {
// this.getWarningStatisticsCount()
},
methods: {
revert () {
// 清空表单数据
this.formInline = {}
// 清除表单验证状态,避免显示必填提示
this.$refs.form1.resetFields()
},
// 更新当前预警等级
updateAlarmLevel () {
// 优先使用props,其次使用路由参数
this.currentAlarmLevel = this.alarmLevel || this.$route.query.alarmLevel || '1'
},
async getCityData (level, id) {
if (!id && level === '2') {
this.areaData['list' + level] = []
return
}
let res = await selectCityList({ parent_id: id })
if (res.data.errcode === 0) {
this.areaData['list' + level] = res.data.data
......
<template>
<div class="contradiction-div">
<div class="head-title">重点人员</div>
<div class="head-title">{{ pageTitle }}</div>
<div class="search-div">
<div style="width:90%;float: left;">
<Row class="mb10">
......@@ -25,11 +25,7 @@
<Col span="16">
<span>重点人员类别:</span>
<Select style="width: 81%;" multiple v-model="user_types" :clearable="true">
<Option value="1">刑满释放人员</Option>
<Option value="2">严重精神障碍患者</Option>
<Option value="3">“三失一偏”人员</Option>
<Option value="4">涉重点涉法涉诉类矛盾人员</Option>
<Option value="5">涉重点信访事项人员</Option>
<Option v-for="item in constentObject.keyPopulationTypes" :key="item.value" :value="item.value">{{ item.label }}</Option>
</Select>
</Col>
</Row>
......@@ -120,9 +116,10 @@
</template>
<script>
import {
findTriggerEventList, findTriggerEventIdList
findTriggerEventList, findTriggerEventIdList, findImportantUserHistoryPageList
} from '@/api/contradiction.js'
import { desensitizationIDCard } from '@/libs/tools.js'
import constentObject from '@/libs/constentObject'
export default {
name: 'register',
data () {
......@@ -149,7 +146,7 @@ export default {
{ title: '纠纷编号', key: 'event_code', align: 'center', width: '160px' },
{ title: '超时提示', slot: 'is_early_warning', align: 'center', width: '90px' },
{ title: '风险等级', slot: 'risk_level', align: 'center', width: '140px' },
{ title: '预计办结时间', key: 'term_time', align: 'center', width: '150px' },
// { title: '预计办结时间', key: 'term_time', align: 'center', width: '150px' },
// { title: '重点矛盾', slot: 'is_point_event', align: 'center', width: '90px' },
{ title: '纠纷大类', key: 'event_category_id', align: 'center', width: '90px' },
{ title: '纠纷小类', key: 'event_type_id', align: 'center', width: '200px' },
......@@ -172,10 +169,59 @@ export default {
totalRecord: 0,
trigger_event_id: ''
},
id: ''
id: '',
list_url: '',
pageTitle: ''
}
},
beforeDestroy () {
this.list_url = ''
this.searchInfo = {}
this.params.pageNo = 1
this.params.pageSize = 10
this.user_types = []
},
deactivated () {
this.list_url = ''
this.searchInfo = {}
this.params.pageNo = 1
this.params.pageSize = 10
this.user_types = []
},
mounted () {
const { history, cityId, areaId } = this.$route.query
// 综合谈判预警历史 判断
if (history) {
this.list_url = findImportantUserHistoryPageList
this.pageTitle = '重点人员历史'
} else {
this.list_url = findTriggerEventList
this.pageTitle = '重点人员'
}
if (cityId) {
this.searchInfo.cityId = cityId
}
if (areaId) {
this.searchInfo.areaId = areaId
}
this.getList()
},
activated () {
const { history, cityId, areaId } = this.$route.query
// 综合谈判预警历史 判断
if (history) {
this.list_url = findImportantUserHistoryPageList
this.pageTitle = '重点人员历史'
} else {
this.list_url = findTriggerEventList
this.pageTitle = '重点人员'
}
if (cityId) {
this.searchInfo.cityId = cityId
}
if (areaId) {
this.searchInfo.areaId = areaId
}
this.getList()
},
methods: {
......@@ -183,16 +229,27 @@ export default {
return desensitizationIDCard(idCard)
},
getList (item) {
let params = {
pageNo: this.params.pageNo,
pageSize: this.params.pageSize,
totalRecord: this.params.totalRecord,
user_type: this.user_types.join('|') || undefined
}
if (item) {
this.params = Object.assign(this.params, item)
if (this.user_types) {
this.params.user_type = this.user_types.join('|')
}
params = Object.assign(params, item)
} else {
params = Object.assign(params, this.searchInfo)
}
findTriggerEventList(this.params).then(res => {
this.list_url(params).then(res => {
if (res.data.errcode === 0) {
this.dataList = res.data.data.results
this.params.totalRecord = res.data.data.totalRecord
// 总数小于每页分页数(例如:10) 且 当前页大于1(例如 2)
if (res.data.data.totalRecord <= this.params.pageSize && res.data.data.pageNo > 1) {
this.params.pageNo = 1
this.getList()
} else {
this.dataList = res.data.data.results
this.params.totalRecord = res.data.data.totalRecord
}
return
}
this.$Message.error(res.data.errmsg)
......@@ -200,13 +257,21 @@ export default {
},
size (pageSize) {
this.params.pageSize = pageSize
this.changePageNo()
this.searchData()
},
changePageNo (pageNo) {
this.params.pageNo = pageNo
this.getList(this.params)
this.getList()
},
searchData () { // 搜索
this.params.pageNo = 1
const { cityId, areaId } = this.$route.query
if (cityId) {
this.searchInfo.cityId = cityId
}
if (areaId) {
this.searchInfo.areaId = areaId
}
this.getList(this.searchInfo)
},
resert () {
......@@ -247,13 +312,17 @@ export default {
params: {
what: 'edit',
id: row.id,
level: '',
type: this.type
type: row.type
// isShowInfo: true, // 控制化解过程显隐
// isInfo: true
}
})
}
},
computed: {
constentObject () {
return constentObject
},
serverUserInfo () {
return this.$store.state.user.severUserInfo
}
......
......@@ -133,10 +133,19 @@
</div>
</div>
<Table stripe :columns="columns" :data="dataList">
<!-- 纠纷描述-->
<template slot-scope="{ row, index }" slot="disputeDescriptionText">
<TableTextEllipsis :text="row.disputeDescription" :lines="2" />
</template>
<template slot-scope="{ row, index }" slot="status">
<div v-if="row.status == '1'">待受理</div>
<div v-else-if="row.status == '2'">已受理</div>
<div v-else-if="row.status == '3'">已完成</div>
<!-- <div v-if="row.status == '1'">待受理</div>-->
<!-- <div v-else-if="row.status == '2'">已受理</div>-->
<!-- <div v-else-if="row.status == '3'">已完成</div>-->
<div v-if="row.status == '1'">已办结</div>
<!-- <div v-else-if="row.status == '2'">处理中</div>-->
<div v-else>处理中</div>
</template>
<template slot-scope="{ row, index }" slot="riskLevel">
<div class="flex-div">
......@@ -202,6 +211,7 @@
</template>
<script>
import {
findOverdueEventHistoryPageList,
findOverdueEventPageList,
selectCityList,
selectDictList
......@@ -247,15 +257,15 @@ export default {
},
{
title: '纠纷描述',
key: 'disputeDescription',
slot: 'disputeDescriptionText',
align: 'center',
width: '200px'
minWidth: 140
},
{
title: '纠纷发生地',
slot: 'occurrenceAddress',
align: 'center',
width: '140px'
minWidth: 140
},
{
title: '上报人',
......@@ -300,10 +310,52 @@ export default {
list2: [],
list3: [],
list4: []
}
},
list_url: ''
}
},
beforeDestroy () {
this.list_url = ''
this.searchInfo = {}
this.params.pageNo = 1
this.params.pageSize = 10
this.user_types = []
},
deactivated () {
this.list_url = ''
this.searchInfo = {}
this.params.pageNo = 1
this.params.pageSize = 10
this.user_types = []
},
mounted () {
const { history, cityId, areaId } = this.$route.query
// 综合谈判预警历史 判断
this.list_url = history ? findOverdueEventHistoryPageList : findOverdueEventPageList
if (cityId) {
this.searchInfo.cityId = cityId
this.changeArea('2', this.searchInfo.cityId)
}
if (areaId) {
this.searchInfo.areaId = areaId
this.changeArea('3', this.searchInfo.areaId)
}
this.getList()
this.getDictList('1')
this.getCityData('1')
},
activated () {
const { history, cityId, areaId } = this.$route.query
// 综合谈判预警历史 判断
this.list_url = history ? findOverdueEventHistoryPageList : findOverdueEventPageList
if (cityId) {
this.searchInfo.cityId = cityId
this.changeArea('2', this.searchInfo.cityId)
}
if (areaId) {
this.searchInfo.areaId = areaId
this.changeArea('3', this.searchInfo.areaId)
}
this.getList()
this.getDictList('1')
this.getCityData('1')
......@@ -366,8 +418,25 @@ export default {
this.getCityData(level, parent_id)
},
getList (item) {
let params = {
pageNo: this.params.pageNo,
pageSize: this.params.pageSize,
totalRecord: this.params.totalRecord
}
if (item) {
this.params = Object.assign(this.params, item)
this.params = Object.assign(params, item)
if (this.params.occurrenceTimeStart) {
this.params.occurrenceTimeStart = datetime2str(
this.params.occurrenceTimeStart
)
}
if (this.params.occurrenceTimeEnd) {
this.params.occurrenceTimeEnd = datetime2str(
this.params.occurrenceTimeEnd
)
}
} else {
this.params = Object.assign(params, this.searchInfo)
if (this.params.occurrenceTimeStart) {
this.params.occurrenceTimeStart = datetime2str(
this.params.occurrenceTimeStart
......@@ -382,10 +451,15 @@ export default {
if (this.$route.query.status) {
this.params.status = this.$route.query.status
}
findOverdueEventPageList(this.params).then((res) => {
this.list_url(this.params).then((res) => {
if (res.data.errcode === 0) {
this.dataList = res.data.data.results || []
this.params.totalRecord = res.data.data.totalRecord || 0
if (res.data.data.totalRecord <= this.params.pageSize && res.data.data.pageNo > 1) {
this.params.pageNo = 1
this.getList()
} else {
this.dataList = res.data.data.results
this.params.totalRecord = res.data.data.totalRecord
}
} else {
this.$Message.error(res.data.errmsg || '获取数据失败')
}
......@@ -393,7 +467,7 @@ export default {
},
size (pageSize) {
this.params.pageSize = pageSize
this.getList()
this.searchData()
},
changePageNo (pageNo) {
this.params.pageNo = pageNo
......@@ -401,6 +475,15 @@ export default {
},
searchData () {
this.params.pageNo = 1 // 搜索时重置为第一页
const { cityId, areaId } = this.$route.query
if (cityId) {
this.searchInfo.cityId = cityId
this.changeArea('2', this.searchInfo.cityId)
}
if (areaId) {
this.searchInfo.areaId = areaId
this.changeArea('3', this.searchInfo.areaId)
}
this.getList(this.searchInfo)
},
resetSearch () {
......@@ -417,6 +500,8 @@ export default {
id: row.id,
level: 'street',
type: '3'
// isInfo: true,
// isShowInfo: true // 控制化解过程显隐
}
})
},
......
......@@ -61,14 +61,7 @@
]"
>
<Select v-model="item.keynoteType" style="width: 90%">
<Option value="1">刑满释放人员</Option>
<Option value="2">严重精神障碍患者</Option>
<Option value="3">"三失一偏"人员</Option>
<Option value="4">涉重点涉法涉诉类矛盾人员</Option>
<Option value="5">涉重点信访事项人员</Option>
<Option value="6">社区矫正人员</Option>
<Option value="7">吸毒人员</Option>
<Option value="8">问题青少年</Option>
<Option v-for="item in constentObject.keyPopulationTypes" :key="item.value" :value="item.value">{{ item.label }}</Option>
</Select>
</FormItem>
</Col>
......@@ -1221,7 +1214,7 @@
]"
>
<DatePicker
type="datetime"
type="date"
v-model="formInline.resolveTime"
placeholder="请选择化解时间"
:options="dateOptions"
......@@ -1499,7 +1492,7 @@
<p>{{ confirmTtile }}</p>
<div slot="footer">
<Button type="default" @click="modal1 = false">取消</Button>
<Button type="primary" @click="save">确定</Button>
<Button type="primary" :loading="reportLoading" @click="save">确定</Button>
</div>
</Modal>
<Modal title="查看图片" v-model="visible">
......@@ -1817,6 +1810,7 @@ import {
} from '@/api/contradiction.js'
import { datetime2str } from '@/api/eventlist.js'
import axios from 'axios'
import constentObject from '@/libs/constentObject'
export default {
inject: ['reload'],
......@@ -1992,6 +1986,9 @@ export default {
}
},
computed: {
constentObject () {
return constentObject
},
serverUserInfo () {
return this.$store.state.user.severUserInfo
}
......@@ -2060,12 +2057,12 @@ export default {
},
resolveTimeChange () {
console.log(this.formInline.resolveTime, 'formInline.resolveTime')
const time1 = this.formInline.occurrenceTime.getTime() // 发生时间
const time2 = this.formInline.resolveTime.getTime() // 化解时间
if (time1 > time2) {
this.formInline.resolveTime = ''
this.$Message.error('化解时间不能早于发生时间')
}
// const time1 = this.formInline.occurrenceTime.getTime() // 发生时间
// const time2 = this.formInline.resolveTime.getTime() // 化解时间
// if (time1 > time2) {
// this.formInline.resolveTime = ''
// this.$Message.error('化解时间不能早于发生时间')
// }
},
detailPeopleLog (row) {
this.title = '回访记录详情'
......@@ -2912,6 +2909,7 @@ export default {
if (this.formInline.resolveTime) {
this.dataParam.resolveTime = datetime2str(this.formInline.resolveTime)
}
console.log(this.dataParam, 'this.dataParam')
this.url(this.dataParam).then((res) => {
this.reportLoading = false
if (res.data.errcode === 0) {
......@@ -2926,6 +2924,10 @@ export default {
return
}
this.$Message.error(res.data.errmsg)
}).catch((err) => {
this.reportLoading = false
this.$Message.error('提交失败,请重试')
console.error('提交失败:', err)
})
},
async getInfo () {
......
......@@ -110,12 +110,12 @@
</Select>
</Col>
<Col span="6">
<span>发生纠纷地区</span>
<span>发生纠纷县(市、区)</span>
<Select
v-model="searchInfo.areaId"
@on-change="changeArea('3', searchInfo.areaId)"
:clearable="true"
placeholder="请选择"
placeholder="请选择县(市、区)"
style="width: 61%"
>
<Option
......@@ -275,6 +275,22 @@
type="datetime"
></DatePicker>
</Col>
<Col v-if="type !== '3'" span="6">
<span>化解方式:</span>
<Select v-model="searchInfo.resolveWay" :clearable="true" placeholder="请选择化解方式" style="width: 70%">
<Option value="1">人民调解</Option>
<Option value="2">行政调解</Option>
<Option value="3">司法调解</Option>
<Option value="4">行业调解</Option>
<Option value="5">仲裁</Option>
<Option value="8">行政复议</Option>
<Option value="9">行政裁决</Option>
<Option value="10">法律监督</Option>
<Option value="6">诉讼</Option>
<Option value="11">信访三级办理</Option>
<Option value="7">其他</Option>
</Select>
</Col>
</Row>
<Row class="mb10" style="margin-top: 10px;">
<Col span="6">
......@@ -327,6 +343,22 @@
</div>
</div>
<Table stripe :columns="columns" :data="dataList">
<!-- 风险因子名称-->
<template slot-scope="{ row, index }" slot="riskNameText">
<TableTextEllipsis :text="row.riskName" :lines="2" />
</template>
<!-- 纠纷描述-->
<template slot-scope="{ row, index }" slot="disputeDescriptionText">
<TableTextEllipsis :text="row.disputeDescription" :lines="2" />
</template>
<!-- 详细地址-->
<template slot-scope="{ row, index }" slot="addressText">
<TableTextEllipsis :text="row.address" :lines="2" />
</template>
<template slot-scope="{ row, index }" slot="eventStatus">
<div v-if="row.eventStatus == '1'">已处置</div>
<div v-else-if="row.eventStatus == '2'">处理中</div>
......@@ -342,6 +374,7 @@
<template slot-scope="{ row, index }" slot="riskName">
{{ row.riskName ? row.riskName.split(',').length : '' }}
</template>
<template slot-scope="{ row, index }" slot="warningLight">
<span v-if="row.warningLight === false"></span>
<img v-else
......@@ -1098,9 +1131,9 @@ export default {
},
{
title: '风险因子名称',
key: 'riskName',
slot: 'riskNameText',
align: 'center',
width: '200px'
width: '140px'
},
{
......@@ -1136,9 +1169,9 @@ export default {
{
title: '纠纷描述',
key: 'disputeDescription',
slot: 'disputeDescriptionText',
align: 'center',
width: '200px'
width: '140px'
},
{
title: '纠纷发生地',
......@@ -1146,7 +1179,12 @@ export default {
align: 'center',
width: '140px'
},
{ title: '详细地址', key: 'address', align: 'center', width: '140px' },
{ title: '详细地址',
slot: 'addressText',
align: 'center',
width: '140px'
},
{
title: '上报人',
key: 'reportingName',
......@@ -1462,6 +1500,7 @@ export default {
this.searchInfo.is_involve_everyone = ''
this.searchInfo.is_involve_everyone_count = ''
this.searchInfo.createTime = ''
this.searchInfo.resolveWay = ''
this.searchInfo.status = ''
this.params.pageNo = 1
this.params.pageSize = 10
......
......@@ -6,40 +6,42 @@
<Row class="mb10">
<Col span="8">
<span>身份证号码:</span>
<Input style="width: 70%;" clearable v-model="searchInfo.cardno" />
<Input style="width: 70%;" clearable v-model="searchInfo.cardno"/>
</Col>
<Col span="8">
<span>姓名:</span>
<Input style="width: 70%;" clearable v-model="searchInfo.name" />
<Input style="width: 70%;" clearable v-model="searchInfo.name"/>
</Col>
<Col span="8">
<span>联系电话:</span>
<Input style="width: 70%;" clearable v-model="searchInfo.tel" />
</Col>
</Row>
<Row class="mb10">
<Col span="8">
<Col span="8">
<span>触发时间:</span>
<DatePicker style="width: 70%;" type="daterange" v-model="dateRange" format="yyyy-MM-dd" placeholder="选择日期范围" clearable />
<DatePicker style="width: 70%;" type="daterange" v-model="dateRange" format="yyyy-MM-dd"
placeholder="选择日期范围" clearable/>
</Col>
<!-- <Col span="16">-->
<!-- <span>重点人员类别:</span>-->
<!-- <Select style="width: 81%;" multiple v-model="user_types" :clearable="true">-->
<!-- <Option value="1">刑满释放人员</Option>-->
<!-- <Option value="2">严重精神障碍患者</Option>-->
<!-- <Option value="3">"三失一偏"人员</Option>-->
<!-- <Option value="4">涉重点涉法涉诉类矛盾人员</Option>-->
<!-- <Option value="5">涉重点信访事项人员</Option>-->
<!-- </Select>-->
<!-- </Col>-->
<!-- <Col span="8">
<span>联系电话:</span>
<Input style="width: 70%;" clearable v-model="searchInfo.tel"/>
</Col> -->
</Row>
<!-- <Row class="mb10"> -->
<!-- <Col span="16">-->
<!-- <span>重点人员类别:</span>-->
<!-- <Select style="width: 81%;" multiple v-model="user_types" :clearable="true">-->
<!-- <Option value="1">刑满释放人员</Option>-->
<!-- <Option value="2">严重精神障碍患者</Option>-->
<!-- <Option value="3">"三失一偏"人员</Option>-->
<!-- <Option value="4">涉重点涉法涉诉类矛盾人员</Option>-->
<!-- <Option value="5">涉重点信访事项人员</Option>-->
<!-- </Select>-->
<!-- </Col>-->
<!-- </Row> -->
</div>
<div style="width:10%;float: left;">
<Row>
<Col span="12" >
<Col span="12">
<Button type="primary" @click="searchData">搜索</Button>
</Col>
<Col span="12">
<Col span="12">
<Button type="primary" @click="resert">重置</Button>
</Col>
</Row>
......@@ -47,10 +49,10 @@
</div>
<Table stripe :columns="columns" :data="dataList">
<template slot-scope="{row, index}" slot="name">
<div style="">{{row.name}}</div>
<div style="">{{ row.name }}</div>
</template>
<template slot-scope="{row, index}" slot="cardno">
<div style="">{{row.cardno}}</div>
<div style="">{{ row.cardno }}</div>
</template>
<template slot-scope="{row, index}" slot="user_type">
<div v-if="row.user_type">
......@@ -107,14 +109,15 @@
</div>
</template>
<template slot-scope="{ row, index }" slot="occurrence_address">
<span>{{row.city}}{{row.area}}{{row.street}}{{row.community}}</span>
<span>{{ row.city }}{{ row.area }}{{ row.street }}{{ row.community }}</span>
</template>
<template slot-scope="{row, index}" slot="action">
<Button type="primary" class="mr5" @click="getEventInfo(row)">详情</Button>
</template>
</Table>
<Page class="page_style" :total="params1.totalRecord" :current="params1.pageNo"
:page-size="params1.pageSize" @on-change="changePageNo1" show-total show-sizer @on-page-size-change="size1"/>
:page-size="params1.pageSize" @on-change="changePageNo1" show-total show-sizer
@on-page-size-change="size1"/>
</Modal>
</div>
</template>
......@@ -124,6 +127,7 @@ import {
getTriggerEventHistory, findTriggerEventIdList
} from '@/api/contradiction.js'
import { desensitizationIDCard } from '@/libs/tools.js'
import { date2str } from '@/api/eventlist'
export default {
name: 'keyTriggerHistoryList',
......@@ -211,8 +215,8 @@ export default {
// 处理日期范围
if (this.dateRange && this.dateRange.length === 2) {
params.startTime = this.dateRange[0] ? this.dateRange[0].getTime() : ''
params.endTime = this.dateRange[1] ? this.dateRange[1].getTime() : ''
params.startTime = date2str(this.dateRange[0])
params.endTime = date2str(this.dateRange[1])
}
// 处理人员类别
......@@ -341,11 +345,13 @@ export default {
<style scoped lang="less">
.contradiction-div {
padding: 10px;
.head-title {
font-size: 18px;
font-weight: bold;
padding: 10px 0;
}
.search-div {
float: left;
width: 100%;
......@@ -355,43 +361,52 @@ export default {
background-color: #f6fdfd;
margin-bottom: 15px;
}
.mb10 {
margin-bottom: 10px;
}
.search-input {
width: 50%;
}
.page_style {
margin-top: 10px;
text-align: right;
}
.flex-div {
display: flex;
align-items: center;
justify-content: center;
}
.circle-div1 {
width: 8px;
height: 8px;
border-radius: 50%;
background: #ed4014;
}
.circle-div2 {
width: 8px;
height: 8px;
border-radius: 50%;
background: #ff9900;
}
.circle-div3 {
width: 8px;
height: 8px;
border-radius: 50%;
background: #2d8cf0;
}
.level-option-img {
width: 16px;
height: 16px;
}
.mr5 {
margin-right: 5px;
}
......
<template>
<div>
<div>
<Form
:model="formInline"
ref="form1"
label-position="left"
>
<Col span="5" v-if="user_level ==='2'">
<FormItem label="" key="cityId" prop="cityId" :rules="[{ required: true, message: '必填', trigger: 'change' },]">
<Select
v-model="formInline.cityId"
@on-change="changeArea('2', formInline.cityId)"
placeholder="请选择市"
style="width: 90%"
>
<Option
v-for="item in areaData.list1"
:value="item.parent_id"
:key="item.parent_id"
>{{ item.name }}</Option
>
</Select>
</FormItem>
</Col>
<Col span="5" v-if="user_level ==='3' || user_level ==='2'">
<FormItem
prop="areaId"
key="areaId"
:label-width="0"
:rules="[
{ required: true, message: '必填', trigger: 'change' },
]"
>
<Select
v-model="formInline.areaId"
placeholder="请选择区"
style="width: 90%"
>
<Option
v-for="item in areaData.list2"
:value="item.parent_id"
:key="item.parent_id"
>{{ item.name }}</Option
>
</Select>
</FormItem>
</Col>
</Form>
</div>
<div class="box" style="width:100%;height: 80vh">
<div class="top-box" @click="toPage('/riskFactorWarn?type=2')">
<img src="@/assets/contradictionImgs/warn1-1.png" alt="">
<div class="num">3123</div>
<div class="title">风险因子预警</div>
</div>
<!-- 未改-->
<div class="top-box" @click="toPage('/groupEventWarn?type=2')">
<img src="@/assets/contradictionImgs/warn1-2.png" alt="">
<div class="num">4422</div>
<div class="title">群体性事件预警</div>
</div>
<!-- 未改-->
<div class="top-box" @click="toPage('/keyAreaWarn?type=2')">
<img src="@/assets/contradictionImgs/warn1-3.png" alt="">
<div class="num">7334</div>
<div class="title">重点领域预警</div>
</div>
<div class="top-box" @click="toPage('/riskFactorWarn?type=2')">
<img src="@/assets/contradictionImgs/warn1-4.png" alt="">
<div class="num">12232</div>
<div class="title">涉众预警</div>
</div>
</div>
</div>
</template>
<script>
import { selectCityList } from '@/api/contradiction'
export default {
data () {
return {
formInline: {},
user_level: '',
areaData: {
list1: [],
list2: [],
list3: [],
list4: []
}
}
},
async mounted () {
this.user_level = this.$store.state.user.severUserInfo.company_grade
if (this.user_level === '2') {
await this.getCityData('1')
}
if (this.user_level === '3') {
await this.getCityData('2', this.$store.state.user.severUserInfo.company_id)
}
},
methods: {
async getCityData (level, id) {
let res = await selectCityList({ parent_id: id })
if (res.data.errcode === 0) {
this.areaData['list' + level] = res.data.data
return
}
this.$Message.error(res.errmsg)
},
async changeArea (level, parent_id) {
await this.getCityData(level, parent_id)
},
toPage (url) {
this.$router.push({
path: url
})
}
}
}
</script>
<style scoped lang="less">
.box{
display: flex;
justify-content: space-around;
align-items: flex-start;
.top-box{
display: flex;
flex-direction:column;
justify-content: center;
align-items: center;
width: 24%;
height: 200px;
border-radius: 16px;
background: #ffeeec;
border: 1px solid #c53535;
cursor: pointer;
.title{
font-family: "PingFang SC";
font-weight: 400;
font-size: 14px;
text-align: center;
color: #2e3038;
}
.num{
font-family: "Montserrat";
font-weight: 500;
font-size: 36px;
text-align: center;
color: #c53535;
}
}
}
</style>
<template>
<div>
<div>
<Form
:model="formInline"
ref="form1"
label-position="left"
>
<Col span="5" v-if="user_level ==='2'">
<FormItem label="" key="cityId" prop="cityId" :rules="[{ required: true, message: '必填', trigger: 'change' },]">
<Select
v-model="formInline.cityId"
@on-change="changeArea('2', formInline.cityId)"
placeholder="请选择市"
style="width: 90%"
>
<Option
v-for="item in areaData.list1"
:value="item.parent_id"
:key="item.parent_id"
>{{ item.name }}</Option
>
</Select>
</FormItem>
</Col>
<Col span="5" v-if="user_level ==='3' || user_level ==='2'">
<FormItem
prop="areaId"
key="areaId"
:label-width="0"
:rules="[
{ required: true, message: '必填', trigger: 'change' },
]"
>
<Select
v-model="formInline.areaId"
placeholder="请选择区"
style="width: 90%"
>
<Option
v-for="item in areaData.list2"
:value="item.parent_id"
:key="item.parent_id"
>{{ item.name }}</Option
>
</Select>
</FormItem>
</Col>
</Form>
</div>
<div class="box" style="width:100%;height: 80vh">
<div class="top-box" @click="toPage('/levelWarnList')">
<img src="@/assets/contradictionImgs/warn2-1.png" alt="" class="topimg">
<div class="num">3123</div>
<div class="title">重点人预警</div>
</div>
<div class="top-box" @click="toPage('/riskFactorWarn?type=3')">
<img src="@/assets/contradictionImgs/warn2-2.png" alt="" class="topimg">
<div class="num">3123</div>
<div class="title">矛盾超期预警</div>
</div>
<div class="top-box" @click="toPage('/riskFactorWarn?type=3')">
<img src="@/assets/contradictionImgs/warn2-3.png" alt="" class="topimg">
<div class="num">3123</div>
<div class="title">风险因子预警</div>
</div>
<div class="top-box" @click="toPage('/groupEventWarn?type=3')">
<img src="@/assets/contradictionImgs/warn2-4.png" alt="" class="topimg">
<div class="num">3123</div>
<div class="title">群体性事件预警</div>
</div>
<div class="top-box" @click="toPage('/riskFactorWarn?type=3')">
<img src="@/assets/contradictionImgs/warn2-5.png" alt="" class="topimg">
<div class="num">3123</div>
<div class="title">涉众预警</div>
</div>
</div>
</div>
</template>
<script>
import { selectCityList } from '@/api/contradiction'
export default {
data () {
return {
formInline: {},
user_level: '',
areaData: {
list1: [],
list2: [],
list3: [],
list4: []
}
}
},
async mounted () {
this.user_level = this.$store.state.user.severUserInfo.company_grade
if (this.user_level === '2') {
await this.getCityData('1')
}
if (this.user_level === '3') {
await this.getCityData('2', this.$store.state.user.severUserInfo.company_id)
}
},
methods: {
async getCityData (level, id) {
let res = await selectCityList({ parent_id: id })
if (res.data.errcode === 0) {
this.areaData['list' + level] = res.data.data
return
}
this.$Message.error(res.errmsg)
},
async changeArea (level, parent_id) {
await this.getCityData(level, parent_id)
},
toPage (url) {
this.$router.push({
path: url
})
}
}
}
</script>
<style scoped lang="less">
.box{
display: flex;
justify-content: space-around;
align-items: flex-start;
.top-box{
display: flex;
flex-direction:column;
justify-content: center;
align-items: center;
width: 19%;
height: 200px;
border-radius: 16px;
background: #ffeeec;
border: 1px solid #c53535;
cursor: pointer;
.title{
font-family: "PingFang SC";
font-weight: 400;
font-size: 14px;
text-align: center;
color: #2e3038;
}
.num{
font-family: "Montserrat";
font-weight: 500;
font-size: 36px;
text-align: center;
color: #c53535;
}
}
}
</style>
......@@ -34,6 +34,13 @@
@click="editUser(row)"
>编辑</Button
>
<Button
type="warning"
size="small"
class="mr5"
@click="resetPassword(row)"
>重置密码</Button
>
<Button type="error" size="small" @click="deleteUser(row)"
>删除</Button
>
......@@ -140,7 +147,8 @@ import {
selectDictList,
insertUser,
selectOfficeTypeParentList,
updateUser
updateUser,
updateUserById
} from '@//api/contradiction.js'
import { testid } from '@/api/common.js'
export default {
......@@ -257,13 +265,18 @@ export default {
if (valid) {
if (testid(this.formData.cardno)) {
let url = this.what === 'add' ? insertUser : updateUser
if (this.user_level === '6') {
this.formData.id = this.$store.state.user.severUserInfo.company_id
this.formData.officeType = '2'
} else {
// if (this.user_level === '6') {
// this.formData.id = this.$store.state.user.severUserInfo.company_id
// this.formData.officeType = '2'
// } else {
// this.formData.id = this.pageParams.id
// this.formData.officeType = '2'
// }
// 如果是添加模式且formData.id为空,才使用pageParams.id
if (this.what === 'add' && !this.formData.id) {
this.formData.id = this.pageParams.id
this.formData.officeType = '2'
}
this.formData.officeType = '2'
url(this.formData).then((res) => {
if (res.data.errcode === 0) {
this.$Message.success('操作成功')
......@@ -308,6 +321,38 @@ export default {
})
}
},
resetPassword (item) {
this.$Modal.confirm({
title: '提示',
content: '确定重置该用户密码?',
loading: true,
onOk: () => {
const params = {
password: 'reset'
}
if (item.id) {
params.id = item.id
params.userId = item.id
}
if (item.userId) {
params.userId = item.userId
}
updateUserById(params).then((res) => {
if (res.data.errcode === 0) {
this.$Message.success('密码重置成功')
} else {
this.$Message.error(res.data.errmsg)
}
this.$Modal.remove()
}).catch(() => {
this.$Modal.remove()
})
},
onCancel: () => {
this.$Modal.remove()
}
})
},
changeTab (name) {
this.what = 'add'
if (name === '2' && this.what === 'add') {
......
......@@ -513,10 +513,10 @@ export default {
// 指定图表的配置项和数据
var option = {
legend: {
top: 'bottom',
textStyle: {
color: ['#b63636', '#ffe757', '#90EE90'] // 图例文字颜色
}
top: 'bottom'
// textStyle: {
// color: ['#b63636', '#ffe757', '#90EE90'] // 图例文字颜色
// }
},
title: {
// text: '阅读书籍分布',
......@@ -527,7 +527,7 @@ export default {
// fontSize: 14
// }
},
color: ['#b63636', '#ffe757', '#90EE90'],
color: ['#b63636', '#ffe757', '#00CC00'],
series: chartData.map(function (data, idx) {
var top = idx * 33.3
console.log('data', data)
......@@ -622,10 +622,10 @@ export default {
// 指定图表的配置项和数据
var option = {
legend: {
top: 'bottom',
textStyle: {
color: ['#b63636', '#ffe757', '#90EE90'] // 图例文字颜色
}
top: 'bottom'
// textStyle: {
// color: ['#b63636', '#ffe757', '#90EE90'] // 图例文字颜色
// }
},
title: {
// text: '阅读书籍分布',
......@@ -636,7 +636,7 @@ export default {
// fontSize: 14
// }
},
color: ['#b63636', '#ffe757', '#90EE90'],
color: ['#b63636', '#ffe757', '#00CC00'],
series: chartData.map(function (data, idx) {
var top = idx * 33.3
console.log('data', data)
......@@ -731,10 +731,10 @@ export default {
// 指定图表的配置项和数据
var option = {
legend: {
top: 'bottom',
textStyle: {
color: ['#b63636', '#ffe757', '#90EE90'] // 图例文字颜色
}
top: 'bottom'
// textStyle: {
// color: ['#b63636', '#ffe757', '#90EE90'] // 图例文字颜色
// }
},
title: {
// text: '阅读书籍分布',
......@@ -745,7 +745,7 @@ export default {
// fontSize: 14
// }
},
color: ['#b63636', '#ffe757', '#90EE90'],
color: ['#b63636', '#ffe757', '#00CC00'],
series: chartData.map(function (data, idx) {
var top = idx * 33.3
console.log('data', data)
......@@ -852,19 +852,19 @@ export default {
switch (statusType) {
case 'completed':
// 已办:不设置 visit_status,因为已办是已完成的状态
query = {}
query = { rt: '1' }
break
case 'uncompleted':
// 正常待办 -> 正常待访:visit_status=1
query = { visit_status: '1' }
query = { visit_status: '1', rt: '1' }
break
case 'nearOverdue':
// 临期待办 -> 临期待访:visit_status=2
query = { visit_status: '2' }
query = { visit_status: '2', rt: '1' }
break
case 'overdue':
// 超期未办 -> 超期待访:visit_status=3
query = { visit_status: '3' }
query = { visit_status: '3', rt: '1' }
break
}
......@@ -955,7 +955,7 @@ export default {
display: flex;
}
.i-top {
color: #b63636;
color: #237bb5;
text-align: center;
font-size: 24px;
font-face: "Montserrat";
......@@ -965,7 +965,7 @@ export default {
}
.i-top-ii {
color: #ba6807;
color: #237bb5;
text-align: center;
font-size: 24px;
font-face: "Montserrat";
......@@ -992,7 +992,7 @@ export default {
font-size: 14px;
font-size: 24px;
/* text-align: left; */
color: #b63636;
color: #237bb5;
}
.i-center-ii {
......@@ -1003,7 +1003,7 @@ export default {
font-size: 14px;
font-size: 24px;
/* text-align: left; */
color: #ba6807;
color: #237bb5;
}
.i-center-iii {
......@@ -1022,7 +1022,7 @@ export default {
width: 95%;
padding: 10px;
border-radius: 8px;
background: linear-gradient(to bottom, #ffc8c8, #ffecec);
background: linear-gradient(207.31deg, #99d6ff 0%, #def2ff 100%);
/* linear-gradient(246.01deg, #ff8181 0%, #fff 100%); */
border: 1px solid #fff;
display: flex;
......@@ -1034,7 +1034,7 @@ export default {
display: flex;
/* width: calc(20% - 8px); */
width: 95%;
background: linear-gradient(236.56deg, #ffed83 0%, #fffbe6 100%);
background: linear-gradient(207.31deg, #99d6ff 0%, #def2ff 100%);
border: 1px solid #fff;
display: flex;
flex-direction: column;
......
<template>
<div class="dual-wrapper">
<div v-if="pushBadgeShow" class="pushCls">
<div class='pushIconCls'></div>
</div>
<Tabs v-model="activeTab" @on-click="handleTabChange">
<TabPane label="接收中人员" name="receiving">
<div class="search-div">
......@@ -544,9 +547,6 @@
<Option v-for="c in forwardModal.areaState.streetList" :key="c.parent_id" :value="c.parent_id">{{ c.name }}</Option>
</Select>
</FormItem>
<FormItem label="转发负责人电话" required>
<Input type="text" v-model="forwardModal.form.push_duty_phone" placeholder="请输入转发负责人电话" />
</FormItem>
<FormItem label="转发原因" required>
<Input type="textarea" :rows="3" v-model="forwardModal.form.push_reason" placeholder="请输入转发原因" />
</FormItem>
......@@ -934,7 +934,8 @@ export default {
{ title: '联系电话', key: 'phone_number', align: 'center' },
{ title: '操作', slot: 'phoneAction', align: 'center', width: 160, fixed: 'right' }
],
otherUserInfo: {}
otherUserInfo: {},
pushBadgeShow: false // 推送标签页气泡显示控制变量
}
},
computed: {
......@@ -957,6 +958,7 @@ export default {
this.loadCityOptions()
this.fetchList(this.activeTab)
this.otherUserInfo = this.$store.state.user.otherUserInfo || {}
this.loadWarnPush()
},
methods: {
loadDicts () {
......@@ -1017,6 +1019,9 @@ export default {
const data = ret.data.data || {}
this.tables[tab] = data.results || []
this.pagers[tab].totalRecord = data.totalRecord || 0
if (tab === 'warnPush') {
this.pushBadgeShow = this.tables[tab].length > 0
}
} else {
this.$Notice.error({ title: '查询失败', desc: ret.data.errmsg || '请稍后重试' })
}
......@@ -1806,6 +1811,17 @@ export default {
} else {
return false
}
},
loadWarnPush () {
getDualWarnPushList({ sys_type: this.currentCategory }).then(ret => {
if (ret.data && ret.data.errcode === 0) {
let data = ret.data.data || {}
let result = data.results || []
this.pushBadgeShow = result.length > 0
} else {
this.$Notice.error({ title: '查询失败', desc: ret.data.errmsg || '请稍后重试' })
}
}).finally()
}
}
}
......@@ -1853,4 +1869,19 @@ export default {
.row-selected td {
background-color: #e6f7ff !important;
}
.pushCls {
position: absolute;
z-index:4000;
}
.pushIconCls {
position: relative;
z-index:4001;
cursor: pointer;
color: red;
font-weight: bold;
font-size: 18px;
top: 0px;
left: 566px;
}
</style>
......@@ -47,9 +47,18 @@
<FormItem label="回访人"><Input :value="recordModal.data.visit_user || recordModal.data.do_user_name || recordModal.data.operator_name || recordModal.data.create_user_name || '-'" disabled /></FormItem>
<FormItem label="回访记录"><Input type="textarea" :rows="4" :value="recordModal.data.visit_record || '-'" disabled /></FormItem>
<FormItem label="回访图片">
<div class="img-list">
<!-- <div class="img-list">
<img v-for="(src,idx) in recordModalImgs" :key="idx" :src="src" style="width:80px;height:80px;margin-right:8px" @click="openImagePreview(src)" />
</div>
</div> -->
<span
class="demo-upload-list"
v-for="(item, index) in preview_imgs"
:key="index"
>
<span class="hover-effect" @click="checkFile(item,index)">
图片{{index+1}}-{{item.originalFilename}}
</span>
</span>
</FormItem>
</Form>
</div>
......@@ -63,6 +72,7 @@
<img :src="imagePreview.src" style="max-width: 100%; max-height: 100%;" />
</div>
</Modal>
<CImage ref="cImageRef" />
</Modal>
</template>
......@@ -70,8 +80,11 @@
import { getVisitRecordDetail, selectVisitHistoryPage } from '@/api/key-person'
import { getDictList } from '@/api/common'
import { findMZList } from '@/api/peopleInfo'
import axios from 'axios'
import CImage from '_c/c-image/index.vue'
export default {
name: 'VisitHistoryModal',
components: { CImage },
props: {
rating_dict_type: { type: String, required: true },
key_person_id: { type: [String, Number], default: '' },
......@@ -92,19 +105,13 @@ export default {
ratingTypeOptions: [],
nationMap: {},
recordModal: { visible: false, data: {} },
imagePreview: { visible: false, src: '' }
imagePreview: { visible: false, src: '' },
suffixList: ['jpg', 'jpeg', 'png'],
preview_imgs: []
}
},
computed: {
useRecord () { return !!this.jl_key_person_visit_record_id },
recordModalImgs () {
const data = this.recordModal && this.recordModal.data ? this.recordModal.data : {}
const img = data.img
if (!img) return []
if (Array.isArray(img)) return img.filter(Boolean)
if (typeof img === 'string') return img.split(',').map(s => s.trim()).filter(Boolean)
return []
}
useRecord () { return !!this.jl_key_person_visit_record_id }
},
created () {
this.loadDicts()
......@@ -176,8 +183,28 @@ export default {
this.imagePreview.visible = true
},
openRecord (row) {
console.log('visitdetail', row)
this.preview_imgs = []
this.recordModal.data = Object.assign({}, row)
this.recordModal.visible = true
this.recordModalImgs()
},
recordModalImgs () {
const data = this.recordModal && this.recordModal.data ? this.recordModal.data : {}
const img = data.img
if (!img) return []
let imgs = []
try {
imgs = JSON.parse(img)
} catch (e) {
imgs = []
}
console.log('imgs', imgs)
if (imgs.length > 0) {
imgs.forEach(img => {
this.getImgUrl(img.uuid, img.suffix, img.originalFilename, img.url)
})
}
},
loadDicts () {
getDictList({ type: 'rating_level' }).then((ret) => {
......@@ -226,6 +253,50 @@ export default {
const MM = String(d.getMinutes()).padStart(2, '0')
const SS = String(d.getSeconds()).padStart(2, '0')
return `${y}-${mm}-${dd} ${HH}:${MM}:${SS}`
},
checkFile (item, index) {
console.log('item, index>>', item, index)
// window.open
if (this.suffixList.includes(item.suffix)) {
this.$refs.cImageRef.init({ src: item.url })
} else {
window.open(item.url, '_blank')
}
console.log(item, index)
},
getImgUrl (uuid, suffix, originalFilename, imgurl) {
let that = this
axios({
method: 'get',
responseType: 'arraybuffer',
url:
'/api/ac/jilinsscgsdp/uploadService/getObsObject?uuid=' +
uuid +
'&&suffix=' +
suffix
}).then(function (res) {
// 构建完整的附件对象,包含所有必要信息
let fileObj = {
uuid: uuid,
suffix: suffix,
originalFilename: originalFilename,
url: imgurl
}
if (that.suffixList.includes(suffix)) {
const base64String = btoa(
new Uint8Array(res.data).reduce(
(data, byte) => data + String.fromCharCode(byte),
''
)
)
fileObj.url = 'data:image/png;base64,' + base64String
} else {
fileObj.url = res.data
}
that.preview_imgs.push(fileObj)
// 调用下载方法,把后端传过来的流传给fileDownload方法
// this.fileDownload(res.data, fileName)
})
}
}
}
......@@ -240,4 +311,14 @@ export default {
width: 100% !important;
border-collapse: collapse;
}
.hover-effect {
cursor: pointer; /* 小手效果 */
transition: all 0.3s ease; /* 添加过渡效果使变化更平滑 */
}
.hover-effect:hover {
color: #1890ff; /* 文字变蓝色 */
background-color: #e6f7ff; /* 背景变浅蓝色 */
border-color: #1890ff; /* 边框变蓝色 */
}
</style>
......@@ -121,7 +121,8 @@ import {
saveKeyPersonVisit,
updatePersonVisitStatus
} from '@/api/key-person'
import { getDictList } from '@/api/common'
// import { getDictList } from '@/api/common'
import { selectDictList } from '@/api/contradiction'
export default {
name: 'index',
props: { category: { type: String, default: '' } },
......@@ -264,22 +265,24 @@ export default {
})
},
loadRatingLevelDict () {
getDictList({ type: 'rating_level' }).then((ret) => {
selectDictList({ type: 'rating_level' }).then((ret) => {
if (ret.data && ret.data.errcode === 0) {
const results = ret.data.data && ret.data.data.results ? ret.data.data.results : []
// ensure structure: [{ label, value }]
this.ratingTypeOptions = results.map(it => ({ label: it.label || it.name, value: it.value || it.dictValue }))
const list = (ret && ret.data && (ret.data.data || ret.data.results)) || []
this.ratingTypeOptions = (Array.isArray(list) ? list : (list.results || []))
.map(it => ({ label: String(it.label || it.name || ''), value: String(it.value || it.dictValue || '') }))
.filter(it => it.label && it.value)
} else {
this.$Notice.error({ title: '加载风险等级失败!', desc: (ret.data && ret.data.errmsg) || '' })
}
})
},
loadOfficeTypeDict () {
getDictList({ type: 'sys_type_office' }).then((ret) => {
selectDictList({ type: 'sys_type_office' }).then((ret) => {
if (ret.data && ret.data.errcode === 0) {
const results = ret.data.data && ret.data.data.results ? ret.data.data.results : []
// ensure structure: [{ label, value }]
this.officeTypeOptions = results.map(it => ({ label: it.label || it.name, value: it.value || it.dictValue }))
const list = (ret && ret.data && (ret.data.data || ret.data.results)) || []
this.officeTypeOptions = (Array.isArray(list) ? list : (list.results || []))
.map(it => ({ label: String(it.label || it.name || ''), value: String(it.value || it.dictValue || '') }))
.filter(it => it.label && it.value)
} else {
this.$Notice.error({ title: '加载部门类型失败!', desc: (ret.data && ret.data.errmsg) || '' })
}
......
......@@ -34,27 +34,28 @@
<Row>
<Col span="4" v-if="imgArr.length !== 0" :key="index" v-for="(item, index) in imgArr">
<span class="hover-effect" @click="checkFile(item,index)">
附件{{index +1}}
附件{{index+1}}-{{item.originalFilename}}
</span>
</Col>
</Row>
<div slot="footer">
<Button type="default" @click="modal1 = false">取消</Button>
<Button type="primary" @click="modal1 = false">确定</Button>
<Button type="default" @click="cancel">取消</Button>
</div>
</Modal>
<CImage ref="cImageRef" />
</div>
</template>
<script>
import {
selectEventIdByAttachList,
selectListPage
selectListPage, selectNoticeIdByAttachList
} from '@/api/contradiction.js'
import axios from 'axios'
import CImage from '_c/c-image/index.vue'
// import { datetime2str, date2str } from '@/api/eventlist.js'
export default {
name: 'register',
components: { CImage },
data () {
return {
modal1: false,
......@@ -68,6 +69,7 @@ export default {
align: 'center',
width: '260px'
},
{ title: '信息类型', key: 'label', align: 'center', minWidth: 150 },
{
title: '发布者',
key: 'department',
......@@ -89,11 +91,14 @@ export default {
],
dataList: [],
params: {
pageNo: 1,
pageSize: 10,
totalRecord: 0,
eventType: '2'
}
'publish_status': 1,
'company_grade': this.$store.state.user.severUserInfo.company_grade,
'company_id': this.$store.state.user.severUserInfo.company_id,
'parent_ids': this.$store.state.user.severUserInfo.parent_ids,
id: this.$store.state.user.severUserInfo.id,
flag: 1
},
suffixList: ['jpg', 'jpeg', 'png']
}
},
mounted () {
......@@ -101,20 +106,19 @@ export default {
},
methods: {
getImg (row) {
selectEventIdByAttachList({ id: row.id }).then((res) => {
selectNoticeIdByAttachList({ id: row.id }).then((res) => {
if (res.data.errcode === 0) {
let imgList = res.data.data
imgList.forEach((element) => {
// 把后台返回的uuid传给接口
let url = this.getImgUrl(element.uuid, element.suffix)
console.log(url, 'memeiemiei')
// 把后台返回的uuid传给接口,同时传递完整的附件信息
this.getImgUrl(element.uuid, element.suffix, element)
})
return
}
this.$Message.error(res.data.errmsg)
})
},
getImgUrl (uuid, suffix) {
getImgUrl (uuid, suffix, fileInfo) {
let that = this
axios({
method: 'get',
......@@ -125,23 +129,50 @@ export default {
'&&suffix=' +
suffix
}).then(function (res) {
const base64String = btoa(
new Uint8Array(res.data).reduce(
(data, byte) => data + String.fromCharCode(byte),
''
// 构建完整的附件对象,包含所有必要信息
let fileObj = {
uuid: fileInfo.uuid,
suffix: suffix,
originalFilename: fileInfo.original_name
}
if (that.suffixList.includes(suffix)) {
const base64String = btoa(
new Uint8Array(res.data).reduce(
(data, byte) => data + String.fromCharCode(byte),
''
)
)
)
let url = 'data:image/png;base64,' + base64String
that.imgArr.push({ url: url })
fileObj.url = 'data:image/png;base64,' + base64String
} else {
fileObj.url = res.data
}
that.imgArr.push(fileObj)
// 调用下载方法,把后端传过来的流传给fileDownload方法
// this.fileDownload(res.data, fileName)
})
},
checkFile (item, index) {
window.open(item.url, '_blank')
if (this.suffixList.includes(item.suffix)) {
this.$refs.cImageRef.init({ src: item.url })
} else if (item.suffix === 'pdf') {
// 关键步骤:ArrayBuffer 转 Blob(指定 MIME 类型为 PDF)
const pdfBlob = new Blob([item.url], { type: 'application/pdf' })
// 生成 Blob URL(无长度限制,浏览器原生支持)
const blobUrl = URL.createObjectURL(pdfBlob)
// 打开预览(window.open 直接用 Blob URL,不会被截断)
window.open(blobUrl, '_blank') // _blank 新建标签页
// 可选:页面卸载时释放 Blob URL(避免内存泄漏)
window.addEventListener('unload', () => {
URL.revokeObjectURL(blobUrl)
})
} else {
window.open(item.url, '_blank')
}
console.log(item, index)
},
acceptance (row) {
this.imgArr = []
this.getImg(row)
this.modal1 = true
......@@ -169,11 +200,15 @@ export default {
// this.params.resolveTimeEnd = datetime2str(this.params.resolveTimeEnd)
// }
// }
selectListPage({ 'publish_status': 1 }).then((res) => {
selectListPage(this.params).then((res) => {
if (res.data.errcode === 0) {
this.dataList = res.data.data.results
}
})
},
cancel () {
this.modal1 = false
this.imgArr = []
}
},
computed: {
......@@ -247,4 +282,14 @@ export default {
vertical-align: middle;
margin-bottom: 3px;
}
.hover-effect {
cursor: pointer; /* 小手效果 */
transition: all 0.3s ease; /* 添加过渡效果使变化更平滑 */
}
.hover-effect:hover {
color: #1890ff; /* 文字变蓝色 */
background-color: #e6f7ff; /* 背景变浅蓝色 */
border-color: #1890ff; /* 边框变蓝色 */
}
</style>
......@@ -3,12 +3,17 @@
<div class="search-div">
<Form :model="dataParam" :label-width="60">
<Row :gutter="20">
<Col span="6">
<Col span="4">
<FormItem label="标题:" style="margin-bottom: 15px;">
<Input v-model="searchInfo.title" placeholder="请输入标题" />
</FormItem>
</Col>
<Col span="6">
<Col span="4">
<FormItem label="内容:" style="margin-bottom: 15px;">
<Input v-model="searchInfo.context" placeholder="请输入内容" />
</FormItem>
</Col>
<Col span="4">
<FormItem label="状态:" style="margin-bottom: 15px;">
<i-select clearable style="width: 100%;" placeholder="任务状态" v-model="searchInfo.publish_status">
<i-option value="0">待发布</i-option>
......@@ -20,7 +25,7 @@
<Col span="12">
<Button type="primary" @click="searchData" style="margin-left: 10px;">查询</Button>
<Button type="primary" @click="reset" style="margin-left: 10px;">重置</Button>
<Button type="primary" v-if="user_level=== '2'" @click="add" style="margin-left: 10px;">新增</Button>
<Button type="primary" @click="add" style="margin-left: 10px;">新增</Button>
</Col>
</Row>
</Form>
......@@ -28,11 +33,11 @@
<Table stripe :columns="columns" :data="dataList">
<template slot-scope="{ row, index }" slot="action">
<div class="flex-div">
<Button type="primary" v-if="row.publish_status === 0 && user_level=== '2'" class="mr5" @click="updateNoticeStatus(row, 1)">发布</Button>
<Button type="warning" v-if="row.publish_status === 1 && user_level=== '2'" class="mr5" @click="updateNoticeStatus(row, 2)">撤销</Button>
<Button type="primary" v-if="(row.publish_status === 2 || row.publish_status === 0)" class="mr5" @click="updateNoticeStatus(row, 1)">发布</Button>
<Button type="warning" v-if="row.publish_status === 1 " class="mr5" @click="updateNoticeStatus(row, 2)">撤销</Button>
<Button type="info" class="mr5" @click="showNotice(row)">查看</Button>
<Button type="success" :disabled="row.publish_status === 0 && user_level=== '2'" class="mr5" @click="editNotice(row)">修改</Button>
<Button type="error" :disabled="row.publish_status === 0 &&user_level=== '2'" class="mr5" @click="deleteNotice(row)">删除</Button>
<Button type="success" :disabled="row.publish_status === 1" class="mr5" @click="editNotice(row)">修改</Button>
<Button type="error" :disabled="row.publish_status === 1 &&user_level=== '2'" class="mr5" @click="deleteNotice(row)">删除</Button>
</div>
</template>
<template slot-scope="{ row, index }" slot="publish_status">
......@@ -46,21 +51,27 @@
</div>
</template>
<script>
import { selectListPage, deleteNotice, updateNotice } from '@/api/contradiction.js'
import { selectListPage, deleteNotice, updateStatus } from '@/api/contradiction.js'
export default {
name: 'register',
data () {
return {
searchInfo: {},
searchInfo: {
// 'company_grade': this.$store.state.user.severUserInfo.company_grade,
// 'company_id': this.$store.state.user.severUserInfo.company_id,
// 'parent_ids': this.$store.state.user.severUserInfo.parent_ids,
// id: this.$store.state.user.severUserInfo.id,
},
dataParam: {},
user_level: '',
company_id: '',
columns: [
{ type: 'index', title: '序号', align: 'center', width: '80px' },
{ title: '标题', key: 'title', align: 'center', minWidth: 150 },
{ title: '信息类型', key: 'label', align: 'center', minWidth: 150 },
{ title: '内容', key: 'context', align: 'center', minWidth: 150, ellipsis: true },
{ title: '部门', key: 'department', align: 'center', minWidth: 150 },
{ title: '发布范围', key: 'department', align: 'center', minWidth: 150 },
{ title: '时间', key: 'create_time', align: 'center', minWidth: 120 },
{ title: '排序', key: 'sort', align: 'center', minWidth: 100 },
{ title: '状态', slot: 'publish_status', align: 'center', minWidth: 100 },
{ title: '操作', slot: 'action', fixed: 'right', align: 'center', width: '300' }
],
......@@ -74,6 +85,7 @@ export default {
},
mounted () {
this.user_level = this.$store.state.user.severUserInfo.company_grade
this.company_id = this.$store.state.user.severUserInfo.company_id
this.getList()
},
methods: {
......@@ -100,7 +112,8 @@ export default {
title: '确认' + str + '此通知吗?',
content: '请仔细核对后再操作',
onOk: () => {
updateNotice({ id: row.id, publish_status: status }).then(res => {
// updateNotice({ id: row.id, publish_status: status }).then(res => {
updateStatus({ id: row.id, publish_status: status }).then(res => {
if (res.data.errcode === 0) {
this.$Message.success('操作成功')
this.getList()
......@@ -145,7 +158,7 @@ export default {
return tempDiv.innerText || tempDiv.textContent || ''
},
getList () {
selectListPage({ ...this.params, ...this.searchInfo }).then(res => {
selectListPage({ ...this.params, ...this.searchInfo, flag: 0 }).then(res => {
if (res.data.errcode === 0) {
this.dataList = res.data.data.results
this.dataList.forEach(item => {
......
......@@ -17,7 +17,7 @@
</FormItem>
<FormItem style="margin-bottom: 0">
<Button type="primary" @click="handleSubmit()">搜索</Button>
<Button style="margin-left: 8px" @click="handleReset()">重置</Button>
<Button type="primary" style="margin-left: 8px" @click="handleReset()">重置</Button>
</FormItem>
</Form>
</div>
......
......@@ -1186,12 +1186,7 @@ export default {
{ id: 2, name: '有重大疾病' },
{ id: 3, name: '有暴力倾向' },
{ id: 4, name: '有弃世厌世倾向' },
{ id: 5, name: '扬言报复社会' },
{ id: 6, name: '重新犯罪' },
{ id: 7, name: '黑恶' },
{ id: 8, name: '恶性犯罪' },
{ id: 9, name: '邪教' },
{ id: 10, name: '三无人员' }
{ id: 5, name: '扬言报复社会' }
],
ruleValidate: {
key_focus_personnel_type: [
......
......@@ -932,12 +932,7 @@ export default {
{ highlyConcernedSituation: '有重大疾病' },
{ highlyConcernedSituation: '有暴力倾向' },
{ highlyConcernedSituation: '有弃世厌世倾向' },
{ highlyConcernedSituation: '扬言报复社会' },
{ highlyConcernedSituation: '重新犯罪' },
{ highlyConcernedSituation: '黑恶' },
{ highlyConcernedSituation: '恶性犯罪' },
{ highlyConcernedSituation: '邪教' },
{ highlyConcernedSituation: '三无人员' }
{ highlyConcernedSituation: '扬言报复社会' }
],
ruleValidate: {
name: [
......@@ -990,23 +985,23 @@ export default {
url: ceShiImg,
tableColumns: [
// 市 区 街道 社区 姓名 身份证号 联系方式 矛盾风险等级 高度关注情形
{ type: 'index', title: '序号', align: 'center', width: '100' },
{ title: '市(州)', key: 'cityName', align: 'center', width: '100' },
{ title: '县(市、区)', key: 'areaName', align: 'center', width: '120' },
{ title: '街道(乡镇)', key: 'streetName', align: 'center', width: '120' },
{ title: '社区(村)', key: 'communityName', align: 'center', width: '120' },
{ title: '姓名', key: 'name', align: 'center', width: '100' },
{ title: '身份证号 ', key: 'cardNo', align: 'center', width: '280' },
{ title: '联系方式', key: 'phone', align: 'center', width: '180' },
// { title: '是否涉矛盾纠纷', slot: 'involvingConflictsDisputes', align: 'center', width: '100' },
{ title: '矛盾风险等级', key: 'riskLevel', align: 'center', width: '90' },
{ title: '高度关注情形', slot: 'keyPersonHighlyConcernedRel', align: 'center', width: '250' },
{ type: 'index', title: '序号', align: 'center', width: 80 },
{ title: '市(州)', key: 'cityName', align: 'center', minWidth: 120 },
{ title: '县(市、区)', key: 'areaName', align: 'center', minWidth: 140 },
{ title: '街道(乡镇)', key: 'streetName', align: 'center', minWidth: 140 },
{ title: '社区(村)', key: 'communityName', align: 'center', minWidth: 140 },
{ title: '姓名', key: 'name', align: 'center', minWidth: 100 },
{ title: '身份证号 ', key: 'cardNo', align: 'center', minWidth: 220 },
{ title: '联系方式', key: 'phone', align: 'center', minWidth: 160 },
// { title: '是否涉矛盾纠纷', slot: 'involvingConflictsDisputes', align: 'center', minWidth: 100 },
{ title: '矛盾风险等级', key: 'riskLevel', align: 'center', minWidth: 110 },
{ title: '高度关注情形', slot: 'keyPersonHighlyConcernedRel', align: 'center', minWidth: 260 },
{
title: '操作',
slot: 'action',
fixed: 'right',
align: 'center',
width: '340'
minWidth: 320
}
],
loading: false,
......
......@@ -174,7 +174,7 @@
@click="getDistCard"
>身份证查重</Button
>
<Button style="margin-left: 10px;" @click="$router.go(-1)" v-if="this.$route.query.riskLevel || this.$route.query.doStatus || this.$route.query.isOverdue">返回重点人员统计</Button>
<Button type="primary" style="margin-left: 10px;" @click="$router.go(-1)" v-if="this.$route.query.riskLevel || this.$route.query.doStatus || this.$route.query.isOverdue">返回重点人员统计</Button>
</Col>
</Row>
</div>
......@@ -182,17 +182,12 @@
<!-- <span>正常待办:{{ this.doneCount }}</span> -->
<span>临期待办:{{ this.todoCount }}</span>
</div>
<Table border :columns="cityType?changChunTableColumns:tableColumns" :data="tableData">
<Table border :columns="canRatingColumn() && cityType?changChunTableColumns:tableColumns" :data="tableData">
<template slot-scope="{ row, index }" slot="criminalTendency">
{{ row.criminalTendency == "1" ? "有" : "无" }}
</template>
<template slot-scope="{ row, index }" slot="criminalTendencySituation">
{{
getHighlyConcernedRelStr(
JSON.parse(row.criminalTendencySituation),
"str"
)
}}
<TableTextEllipsis :text="getHighlyConcernedRelStr(JSON.parse(row.criminalTendencySituation),'str')" :lines="2" />
</template>
<template
slot="keyPersonHighlyConcernedRel"
......@@ -269,7 +264,7 @@
<Button
type="info"
size="small"
v-if="cityType"
v-if="canShowRating(row) && cityType"
style="margin-right: 5px"
@click="showRatingHistoryList(row)"
>评分列表</Button
......@@ -1246,12 +1241,7 @@ export default {
{ highlyConcernedSituation: '有重大疾病' },
{ highlyConcernedSituation: '有暴力倾向' },
{ highlyConcernedSituation: '有弃世厌世倾向' },
{ highlyConcernedSituation: '扬言报复社会' },
{ highlyConcernedSituation: '重新犯罪' },
{ highlyConcernedSituation: '黑恶' },
{ highlyConcernedSituation: '恶性犯罪' },
{ highlyConcernedSituation: '邪教' },
{ highlyConcernedSituation: '三无人员' }
{ highlyConcernedSituation: '扬言报复社会' }
],
ruleValidate: {
name: [{ required: true, message: '必填', trigger: 'blur' }],
......@@ -1295,7 +1285,7 @@ export default {
title: '县(市、区)',
key: 'areaName',
align: 'center',
width: '100'
width: '120'
},
{
title: '街道(乡镇)',
......@@ -1335,7 +1325,7 @@ export default {
title: '具体表现',
slot: 'criminalTendencySituation',
align: 'center',
width: '500'
width: '250'
},
{
title: '风险等级',
......@@ -1392,7 +1382,7 @@ export default {
title: '县(市、区)',
key: 'areaName',
align: 'center',
width: '100'
width: '120'
},
{
title: '街道(乡镇)',
......@@ -1432,7 +1422,7 @@ export default {
title: '具体表现',
slot: 'criminalTendencySituation',
align: 'center',
width: '500'
width: '250'
},
{
title: '操作',
......@@ -1630,6 +1620,28 @@ export default {
if (type === '6') return !!power['km_rating']
return false
},
canShowRating (row) {
const isAdmin = (this.severUserInfo.loginName === 'admin')
const power = this.visitButtonPower || {}
const type = String(row.sysType || '')
if (isAdmin) return true
if (type === '2') return !!power['rucs_rating'] || !!power['rucs_view_rating']
if (type === '3') return !!power['psmd_rating'] || !!power['psmd_view_rating']
if (type === '6') return !!power['km_rating'] || !!power['km_view_rating']
return false
},
canRatingColumn () {
const isAdmin = (this.severUserInfo.loginName === 'admin')
const power = this.visitButtonPower || {}
const type = '2'
if (isAdmin) return true
if (type === '2') return !!power['rucs_rating'] || !!power['rucs_view_rating']
if (type === '3') return !!power['psmd_rating'] || !!power['psmd_view_rating']
if (type === '6') return !!power['km_rating'] || !!power['km_view_rating']
return false
},
getArea () {
selectDictList({ type: 'jl_key_person_region' }).then((res) => {
if (res.data.errcode === 0) {
......@@ -2643,6 +2655,14 @@ export default {
} else if (this.severUserInfo.area_id === '220100000000' || this.severUserInfo.loginName === 'admin') {
this.cityType = true
}
if (this.cityType) {
this.situationList.push({ highlyConcernedSituation: '重新犯罪' })
this.situationList.push({ highlyConcernedSituation: '黑恶' })
this.situationList.push({ highlyConcernedSituation: '恶性犯罪' })
this.situationList.push({ highlyConcernedSituation: '邪教' })
this.situationList.push({ highlyConcernedSituation: '三无人员' })
this.situationList.push({ highlyConcernedSituation: '其他' })
}
// 接收来自图表点击的风险等级参数
const riskLevel = this.$route.query.riskLevel
if (riskLevel) {
......
......@@ -134,13 +134,13 @@
<Col
style="text-align: right"
>
<Button type="primary" v-if="showImport()" @click="importShow = true" style="margin-right: 10px;">导入</Button>
<Button
type="primary"
@click="searchData"
style="margin-right: 10px"
>搜索</Button
>
<Button type="primary" v-if="showImport()" @click="importShow = true" style="margin-right: 10px;">导入</Button>
<!-- <Button type="primary" @click="handleDownload" style="margin-right: 10px;">导出</Button>-->
<!-- v-if="severUserInfo.company_grade === '6'"-->
<Button type="primary" @click="searchPeople">新增</Button>
......@@ -154,7 +154,7 @@
@click="getDistCard"
>身份证查重</Button
>
<Button style="margin-left: 10px;" @click="$router.go(-1)" v-if="this.$route.query.riskLevel || this.$route.query.doStatus || this.$route.query.isOverdue">返回重点人员统计</Button>
<Button type="primary" style="margin-left: 10px;" @click="$router.go(-1)" v-if="this.$route.query.riskLevel || this.$route.query.doStatus || this.$route.query.isOverdue">返回重点人员统计</Button>
</Col>
</Row>
</div>
......@@ -162,7 +162,7 @@
<!-- <span>正常待办:{{ this.doneCount }}</span> -->
<span>临期待办:{{ this.todoCount }}</span>
</div>
<Table border :columns="cityType?changChunTableColumns:tableColumns" :data="tableData">
<Table border :columns="canRatingColumn() && cityType?changChunTableColumns:tableColumns" :data="tableData">
<template
slot="keyPersonHighlyConcernedRel"
slot-scope="{ row, index }"
......@@ -225,7 +225,7 @@
<Button
type="info"
size="small"
v-if="cityType"
v-if="canShowRating(row) && cityType"
style="margin-right: 5px"
@click="showRatingHistoryList(row)"
>评分列表</Button
......@@ -1151,12 +1151,7 @@ export default {
{ highlyConcernedSituation: '有重大疾病' },
{ highlyConcernedSituation: '有暴力倾向' },
{ highlyConcernedSituation: '有弃世厌世倾向' },
{ highlyConcernedSituation: '扬言报复社会' },
{ highlyConcernedSituation: '重新犯罪' },
{ highlyConcernedSituation: '黑恶' },
{ highlyConcernedSituation: '恶性犯罪' },
{ highlyConcernedSituation: '邪教' },
{ highlyConcernedSituation: '三无人员' }
{ highlyConcernedSituation: '扬言报复社会' }
],
ruleValidate: {
name: [{ required: true, message: '必填', trigger: 'blur' }],
......@@ -1209,7 +1204,7 @@ export default {
title: '县(市、区)',
key: 'areaName',
align: 'center',
width: '100'
width: '120'
},
{
title: '街道(乡镇)',
......@@ -1294,7 +1289,7 @@ export default {
title: '县(市、区)',
key: 'areaName',
align: 'center',
width: '100'
width: '120'
},
{
title: '街道(乡镇)',
......@@ -1516,6 +1511,28 @@ export default {
if (type === '6') return !!power['km_rating']
return false
},
canShowRating (row) {
const isAdmin = (this.severUserInfo.loginName === 'admin')
const power = this.visitButtonPower || {}
const type = String(row.sysType || '')
if (isAdmin) return true
if (type === '2') return !!power['rucs_rating'] || !!power['rucs_view_rating']
if (type === '3') return !!power['psmd_rating'] || !!power['psmd_view_rating']
if (type === '6') return !!power['km_rating'] || !!power['km_view_rating']
return false
},
canRatingColumn () {
const isAdmin = (this.severUserInfo.loginName === 'admin')
const power = this.visitButtonPower || {}
const type = '3'
if (isAdmin) return true
if (type === '2') return !!power['rucs_rating'] || !!power['rucs_view_rating']
if (type === '3') return !!power['psmd_rating'] || !!power['psmd_view_rating']
if (type === '6') return !!power['km_rating'] || !!power['km_view_rating']
return false
},
getArea () {
selectDictList({ type: 'jl_key_person_region' }).then((res) => {
if (res.data.errcode === 0) {
......@@ -2497,6 +2514,14 @@ export default {
} else if (this.severUserInfo.area_id === '220100000000' || this.severUserInfo.loginName === 'admin') {
this.cityType = true
}
if (this.cityType) {
this.situationList.push({ highlyConcernedSituation: '重新犯罪' })
this.situationList.push({ highlyConcernedSituation: '黑恶' })
this.situationList.push({ highlyConcernedSituation: '恶性犯罪' })
this.situationList.push({ highlyConcernedSituation: '邪教' })
this.situationList.push({ highlyConcernedSituation: '三无人员' })
this.situationList.push({ highlyConcernedSituation: '其他' })
}
// 接收来自图表点击的风险等级参数
const riskLevel = this.$route.query.riskLevel
if (riskLevel) {
......@@ -2514,6 +2539,7 @@ export default {
if (isOverdue) {
this.params.isOverdue = isOverdue
}
this.fetchVisitButtonPower()
this.init()
this.findMZList()
this.findLabelList()
......
......@@ -1026,12 +1026,7 @@ export default {
{ highlyConcernedSituation: '有重大疾病' },
{ highlyConcernedSituation: '有暴力倾向' },
{ highlyConcernedSituation: '有弃世厌世倾向' },
{ highlyConcernedSituation: '扬言报复社会' },
{ highlyConcernedSituation: '重新犯罪' },
{ highlyConcernedSituation: '黑恶' },
{ highlyConcernedSituation: '恶性犯罪' },
{ highlyConcernedSituation: '邪教' },
{ highlyConcernedSituation: '三无人员' }
{ highlyConcernedSituation: '扬言报复社会' }
],
ruleValidate: {
name: [{ required: true, message: '必填', trigger: 'blur' }],
......@@ -1069,48 +1064,48 @@ export default {
url: ceShiImg,
tableColumns: [
// 市 区 街道 社区 姓名 身份证号 联系方式 矛盾风险等级 高度关注情形
{ type: 'index', title: '序号', align: 'center', width: '100' },
{ title: '市(州)', key: 'cityName', align: 'center', width: '100' },
{ type: 'index', title: '序号', align: 'center', width: 80 },
{ title: '市(州)', key: 'cityName', align: 'center', minWidth: 120 },
{
title: '县(市、区)',
key: 'areaName',
align: 'center',
width: '100'
minWidth: 140
},
{
title: '街道(乡镇)',
key: 'streetName',
align: 'center',
width: '120'
minWidth: 140
},
{
title: '社区(村)',
key: 'communityName',
align: 'center',
width: '120'
minWidth: 140
},
{ title: '姓名', key: 'name', align: 'center', width: '100' },
{ title: '身份证号 ', key: 'cardNo', align: 'center', width: '280' },
{ title: '联系方式', key: 'phone', align: 'center', width: '180' },
// { title: '是否涉矛盾纠纷', slot: 'involvingConflictsDisputes', align: 'center', width: '100' },
{ title: '姓名', key: 'name', align: 'center', minWidth: 100 },
{ title: '身份证号 ', key: 'cardNo', align: 'center', minWidth: 220 },
{ title: '联系方式', key: 'phone', align: 'center', minWidth: 160 },
// { title: '是否涉矛盾纠纷', slot: 'involvingConflictsDisputes', align: 'center', minWidth: 100 },
{
title: '矛盾风险等级',
key: 'riskLevel',
align: 'center',
width: '90'
minWidth: 110
},
{
title: '高度关注情形',
slot: 'keyPersonHighlyConcernedRel',
align: 'center',
width: '250'
minWidth: 260
},
{
title: '操作',
slot: 'action',
fixed: 'right',
align: 'center',
width: '340'
minWidth: 320
}
],
tableData: [],
......
......@@ -1015,12 +1015,7 @@ export default {
{ highlyConcernedSituation: '有重大疾病' },
{ highlyConcernedSituation: '有暴力倾向' },
{ highlyConcernedSituation: '有弃世厌世倾向' },
{ highlyConcernedSituation: '扬言报复社会' },
{ highlyConcernedSituation: '重新犯罪' },
{ highlyConcernedSituation: '黑恶' },
{ highlyConcernedSituation: '恶性犯罪' },
{ highlyConcernedSituation: '邪教' },
{ highlyConcernedSituation: '三无人员' }
{ highlyConcernedSituation: '扬言报复社会' }
],
ruleValidate: {
name: [{ required: true, message: '必填', trigger: 'blur' }],
......@@ -1058,48 +1053,48 @@ export default {
url: ceShiImg,
tableColumns: [
// 市 区 街道 社区 姓名 身份证号 联系方式 矛盾风险等级 高度关注情形
{ type: 'index', title: '序号', align: 'center', width: '100' },
{ title: '市(州)', key: 'cityName', align: 'center', width: '100' },
{ type: 'index', title: '序号', align: 'center', width: 80 },
{ title: '市(州)', key: 'cityName', align: 'center', minWidth: 120 },
{
title: '县(市、区)',
key: 'areaName',
align: 'center',
width: '100'
minWidth: 140
},
{
title: '街道(乡镇)',
key: 'streetName',
align: 'center',
width: '120'
minWidth: 140
},
{
title: '社区(村)',
key: 'communityName',
align: 'center',
width: '120'
minWidth: 140
},
{ title: '姓名', key: 'name', align: 'center', width: '100' },
{ title: '身份证号 ', key: 'cardNo', align: 'center', width: '280' },
{ title: '联系方式', key: 'phone', align: 'center', width: '180' },
// { title: '是否涉矛盾纠纷', slot: 'involvingConflictsDisputes', align: 'center', width: '100' },
{ title: '姓名', key: 'name', align: 'center', minWidth: 100 },
{ title: '身份证号 ', key: 'cardNo', align: 'center', minWidth: 220 },
{ title: '联系方式', key: 'phone', align: 'center', minWidth: 160 },
// { title: '是否涉矛盾纠纷', slot: 'involvingConflictsDisputes', align: 'center', minWidth: 100 },
{
title: '矛盾风险等级',
key: 'riskLevel',
align: 'center',
width: '90'
minWidth: 110
},
{
title: '高度关注情形',
slot: 'keyPersonHighlyConcernedRel',
align: 'center',
width: '250'
minWidth: 260
},
{
title: '操作',
slot: 'action',
fixed: 'right',
align: 'center',
width: '340'
minWidth: 320
}
],
tableData: [],
......
......@@ -156,7 +156,7 @@
@click="getDistCard"
>身份证查重</Button
>
<Button style="margin-left: 10px;" @click="$router.go(-1)" v-if="this.$route.query.riskLevel || this.$route.query.doStatus || this.$route.query.isOverdue">返回重点人员统计</Button>
<Button type="primary" style="margin-left: 10px;" @click="$router.go(-1)" v-if="this.$route.query.riskLevel || this.$route.query.doStatus || this.$route.query.isOverdue">返回重点人员统计</Button>
</Col>
</Row>
</div>
......@@ -235,6 +235,7 @@
<Button
type="info"
size="small"
v-if="canShowRating(row) && cityType"
style="margin-right: 5px"
@click="showRatingHistoryList(row)"
>评分列表</Button
......@@ -1122,7 +1123,8 @@ export default {
{ highlyConcernedSituation: '黑恶' },
{ highlyConcernedSituation: '恶性犯罪' },
{ highlyConcernedSituation: '邪教' },
{ highlyConcernedSituation: '三无人员' }
{ highlyConcernedSituation: '三无人员' },
{ highlyConcernedSituation: '其他' }
],
ruleValidate: {
name: [{ required: true, message: '必填', trigger: 'blur' }],
......@@ -1412,7 +1414,8 @@ export default {
doneCount: '',
visitButtonPower: {},
importShow: false,
impBtnDisabled: false
impBtnDisabled: false,
cityType: false
}
},
methods: {
......@@ -1437,6 +1440,28 @@ export default {
if (type === '6') return !!power['km_rating']
return false
},
canShowRating (row) {
const isAdmin = (this.severUserInfo.loginName === 'admin')
const power = this.visitButtonPower || {}
const type = String(row.sysType || '')
if (isAdmin) return true
if (type === '2') return !!power['rucs_rating'] || !!power['rucs_view_rating']
if (type === '3') return !!power['psmd_rating'] || !!power['psmd_view_rating']
if (type === '6') return !!power['km_rating'] || !!power['km_view_rating']
return false
},
canRatingColumn () {
const isAdmin = (this.severUserInfo.loginName === 'admin')
const power = this.visitButtonPower || {}
const type = '6'
if (isAdmin) return true
if (type === '2') return !!power['rucs_rating'] || !!power['rucs_view_rating']
if (type === '3') return !!power['psmd_rating'] || !!power['psmd_view_rating']
if (type === '6') return !!power['km_rating'] || !!power['km_view_rating']
return false
},
getArea () {
selectDictList({ type: 'jl_key_person_region' }).then((res) => {
if (res.data.errcode === 0) {
......@@ -2434,7 +2459,15 @@ export default {
}
},
mounted () {
this.severUserInfo = this.$store.state.user.severUserInfo
// 只有长春市才显示评分相关功能和后端走新的横行权限
this.severUserInfo = this.$store.state.user.otherUserInfo
if (this.severUserInfo.parent_ids.includes('220100000000') || this.severUserInfo.loginName === 'admin') {
this.cityType = true
} else if (this.severUserInfo.company_id === '220100000000' || this.severUserInfo.loginName === 'admin') {
this.cityType = true
} else if (this.severUserInfo.area_id === '220100000000' || this.severUserInfo.loginName === 'admin') {
this.cityType = true
}
// 接收来自图表点击的风险等级参数
const riskLevel = this.$route.query.riskLevel
if (riskLevel) {
......
......@@ -22,7 +22,7 @@
</FormItem>
<FormItem style="margin-bottom: 0">
<Button type="primary" @click="handleSubmit()">搜索</Button>
<Button style="margin-left: 8px" @click="handleReset()">重置</Button>
<Button type="primary" style="margin-left: 8px" @click="handleReset()">重置</Button>
</FormItem>
</Form>
</div>
......
......@@ -102,11 +102,15 @@
padding: 12.5px 10px;
display: flex;
width: 180px;
height: 45px;
min-height: 45px;
height: auto;
line-height: 1.6;
font-family: "PingFang SC";
font-weight: 400;
font-size: 14px;
color: #161616;
word-wrap: break-word;
white-space: normal;
}
.jczl-menu-v2 .ivu-menu-vertical .ivu-menu-item:hover {
color: #B40001;
......@@ -119,6 +123,9 @@
text-align: left;
background: #EFEFEF;
border-radius: 5px;
min-height: 45px;
height: auto;
line-height: 1.6;
}
.jczl-menu-v2 .ivu-menu-child-item-active {
background-color: #ffffff;
......@@ -126,6 +133,11 @@
}
.jczl-menu-v2 .ivu-menu-vertical .ivu-menu-submenu .ivu-menu-item {
color: #161616;
min-height: 45px;
height: auto;
line-height: 1.6;
word-wrap: break-word;
white-space: normal;
}
.jczl-menu-v2 .ivu-menu-vertical .ivu-menu-submenu-title-icon {
right: 0px;
......@@ -364,4 +376,4 @@
text-align: center;
color: #161616;
margin-left: 0px;
}
\ No newline at end of file
}
......@@ -2,6 +2,10 @@
<Layout style="height: 100%" class="main">
<Header>
<div class="logo-v3">
<div class="header-back-btn" @click="handleGoBack">
<Icon type="ios-arrow-back" />
<span>后退</span>
</div>
<div class="user-div-new">
<Dropdown
class="drop-down-v2"
......@@ -26,8 +30,8 @@
</Col>
<Col span="3" offset="1">
<Avatar style="background-color: #db4b00">{{
personData.name
}}</Avatar>
personData.name
}}</Avatar>
</Col>
</Row>
<DropdownMenu slot="list">
......@@ -261,7 +265,7 @@ export default {
return {
headerBarHeight: '80px',
animate: false,
marqueeList: [{ content: '公告内容1' }, { content: '公告内容2' }], // 通告内容
marqueeList: [], // 通告内容
siderMenuList: [],
menuItemList: [
{
......@@ -435,7 +439,7 @@ export default {
return this.$store.state.user.menuName
}
},
created () {
async created () {
// 在页面加载时读取sessionStorage里的状态信息
if (sessionStorage.getItem('store')) {
this.$store.replaceState(
......@@ -452,17 +456,7 @@ export default {
sessionStorage.setItem('store', JSON.stringify(this.$store.state))
})
// 获取通告
selectListPage({ 'publish_status': 1 }).then(res => {
if (res.data.errcode === 0) {
this.marqueeList = res.data.data.results.map(item => {
return {
content: item.title
}
})
return
}
this.$Message.error(res.data.errmsg)
})
await this._selectListPage()
setInterval(this.showMarquee, 5000)
},
methods: {
......@@ -485,6 +479,25 @@ export default {
}, 500)
}
},
async _selectListPage () {
const res = await selectListPage({
'publish_status': 1,
'company_grade': this.$store.state.user.severUserInfo.company_grade,
'company_id': this.$store.state.user.severUserInfo.company_id,
'parent_ids': this.$store.state.user.severUserInfo.parent_ids,
id: this.$store.state.user.severUserInfo.id,
flag: 1
})
if (res.data.errcode === 0) {
this.marqueeList = res.data.data.results.map((item) => {
return {
content: item.title
}
})
} else {
this.$Message.error(res.data.errmsg)
}
},
backTo (name) {
this.$router.push({
name: name
......@@ -945,6 +958,15 @@ export default {
// this.setFirstMenuId(id)
localSave('first-menus-data', JSON.stringify(menusData))
this.$store.dispatch('getAjaxRouterData', id)
},
// 处理后退操作
handleGoBack () {
if (window.history.length > 1) {
this.$router.go(-1)
} else {
// 如果没有历史记录,可以跳转到首页
this.$router.push({ name: 'allHomePage' })
}
}
},
watch: {
......@@ -1107,18 +1129,29 @@ export default {
padding: 0 2px;
}
.new-menu
.ivu-menu-light.ivu-menu-vertical
.ivu-menu-item-active:not(.ivu-menu-submenu) {
.ivu-menu-light.ivu-menu-vertical
.ivu-menu-item-active:not(.ivu-menu-submenu) {
color: #b40001;
background: white;
z-index: 2;
height: 45px;
min-height: 45px;
height: auto;
line-height: 1.6;
border-radius: 5px;
background: #efefef;
margin-left: 10px;
margin-right: 10px;
padding-left: 10px;
padding-right: 0px;
word-wrap: break-word;
white-space: normal;
}
.new-menu .ivu-menu-item {
min-height: 45px;
height: auto;
line-height: 1.6;
word-wrap: break-word;
white-space: normal;
}
.new-menu .ivu-menu-item:hover {
color: #b40001;
......@@ -1180,4 +1213,53 @@ export default {
display: none;
}
/* 隐藏滑动条 */
/* Header后退按钮样式 */
.header-back-btn {
position: absolute;
right: 20px;
top: 130%;
transform: translateY(-50%);
display: flex;
align-items: center;
justify-content: center;
padding: 4px 12px;
height: 32px;
background: #1C5DB1;
border: 1px solid #1C5DB1;
border-radius: 4px;
color: #ffffff;
font-size: 12px;
font-weight: 500;
cursor: pointer;
transition: all 0.3s ease;
z-index: 10;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
line-height: 1;
margin-left: 10px;
}
.header-back-btn:hover {
background: #1a4fa0;
border-color: #1a4fa0;
transform: translateY(-50%) translateX(2px);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
}
.header-back-btn:active {
transform: translateY(-50%) translateX(0);
background: #16408f;
}
.header-back-btn i {
margin-right: 4px;
font-size: 14px;
font-weight: bold;
}
.header-back-btn span {
font-family: "PingFang SC";
font-weight: 500;
letter-spacing: 0.5px;
}
</style>
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论