Browse Source

fix: BUG修复

main
wxc 1 year ago
parent
commit
cc2b7e7dd6
  1. 11
      src/components/home/work/index.vue
  2. 69
      src/components/home/work/my-alarm.vue
  3. 4
      src/components/model-tree.vue
  4. 6
      src/components/negative/add.vue
  5. 28
      src/components/negative/countersign-description.vue
  6. 1
      src/components/negative/dialog.vue
  7. 2
      src/components/negative/verify.vue
  8. 3
      src/enums/dictEnums.ts
  9. 4
      src/style/public.scss
  10. 213
      src/views/sensitivePerception/Model.vue
  11. 4
      src/views/sensitivePerception/ModelClueManual.vue
  12. 4
      src/views/sensitivePerception/RiskPersonnel.vue
  13. 782
      src/views/work/Alarm.vue
  14. 14
      src/views/work/Fav.vue
  15. 6
      src/views/work/Query.vue

11
src/components/home/work/index.vue

@ -7,10 +7,11 @@
</el-badge> </el-badge>
<span class="tab-nav-title" v-else>我的待办</span> <span class="tab-nav-title" v-else>我的待办</span>
</template> </template>
<div v-loading="loading" class="mt-20"> <div v-loading="loading" class="pt-20">
<home-work-my-todo :data="todos" @refresh="getList" /> <home-work-my-todo :data="todos" @refresh="getList" />
</div> </div>
</el-tab-pane> </el-tab-pane>
<el-tab-pane name="second"> <el-tab-pane name="second">
<template #label> <template #label>
<el-badge :value="todoToExpires.length" v-if="todoToExpires.length"> <el-badge :value="todoToExpires.length" v-if="todoToExpires.length">
@ -22,6 +23,14 @@
<home-work-my-todo :data="todoToExpires" @refresh="getList" /> <home-work-my-todo :data="todoToExpires" @refresh="getList" />
</div> </div>
</el-tab-pane> </el-tab-pane>
<el-tab-pane name="alarm">
<template #label>
<span class="tab-nav-title">通知提醒</span>
</template>
<div v-loading="loading" class="pt-20">
<home-work-my-alarm />
</div>
</el-tab-pane>
<el-tab-pane name="third"> <el-tab-pane name="third">
<template #label> <template #label>
<span class="tab-nav-title">我的收藏</span> <span class="tab-nav-title">我的收藏</span>

69
src/components/home/work/my-alarm.vue

@ -0,0 +1,69 @@
<template>
<div class="table-container" v-loading="loading">
<el-table :data="list">
<el-table-column label="提醒时间" prop="alarmTime" width="170" />
<el-table-column label="提醒类型" prop="alarmType" width="90" />
<el-table-column
label="被通知单位"
prop="notificationDepartName"
width="110"
show-overflow-tooltip
/>
<el-table-column label="被通知民警" prop="policeName" width="110" />
<el-table-column label="提醒内容" prop="alarmContent" show-overflow-tooltip />
<el-table-column label="回复情况" width="110" align="center">
<template #default="{ row }">
<el-text v-if="row.replyState == 1" class="mx-1"
>已回复</el-text
>
<el-text v-else type="warning" class="mx-1">未回复</el-text>
</template>
</el-table-column>
<el-table-column label="操作" width="120">
<template #default="{ row }">
<el-button
type="primary"
link
@click="handleEdit(row)"
v-perms="['negative:edit']"
>立即回复
</el-button>
</template>
</el-table-column>
</el-table>
</div>
</template>
<script setup>
import {
alarmNotificationPages
} from "@/api/work/alarm";
const list = ref([]);
const loading = ref(true);
function getList() {
loading.value = true;
alarmNotificationPages({
current: 1,
size: 100,
}).then((data) => {
list.value = data.records;
loading.value = false;
});
}
onMounted(() => {
getList();
});
const show = ref(false);
const activeNegativeId = ref("");
function handleAction(row) {
show.value = true;
activeNegativeId.value = row.negativeId;
}
</script>
<style lang="scss" scoped>
</style>

4
src/components/model-tree.vue

@ -14,6 +14,7 @@
:filter-node-method="filterNode" :filter-node-method="filterNode"
@node-click="handleClick" @node-click="handleClick"
ref="treeRef" ref="treeRef"
/> />
</el-scrollbar> </el-scrollbar>
</div> </div>
@ -139,4 +140,7 @@ function getModelId(arr, node) {
.tree-container { .tree-container {
height: calc(100% - 42px); height: calc(100% - 42px);
} }
.el-tree {
width: fit-content;
}
</style> </style>

6
src/components/negative/add.vue

@ -67,8 +67,8 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row v-if="form.problemSourcesCode === ProblemSources.ZXDC"> <el-row >
<el-col :span="12"> <el-col :span="12" v-if="form.problemSourcesCode === ProblemSources.ZXDC">
<el-form-item <el-form-item
label="专项督察" label="专项督察"
prop="specialSupervision" prop="specialSupervision"
@ -92,7 +92,7 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12" v-if="form.problemSourcesCode === ProblemSources.ZXDC || form.problemSourcesCode === ProblemSources.XCDC">
<el-form-item <el-form-item
label="通报期数" label="通报期数"
prop="reportNumber" prop="reportNumber"

28
src/components/negative/countersign-description.vue

@ -18,19 +18,20 @@
<div class="col col-12"> <div class="col col-12">
<label>会签单位</label> <label>会签单位</label>
<span> <span>
<div <div class="flex gap wrap">
v-for="depart in item.countersigns" <div
:key="depart" v-for="depart in item.countersigns"
class="flex gap wrap" :key="depart"
>
<span>{{ depart.departName }}</span>
<span
>({{
depart.state === "uncompleted"
? "未提交"
: "已提交"
}})</span
> >
<span>{{ depart.departName }}</span>
<span
>({{
depart.state === "uncompleted"
? "未提交"
: "已提交"
}})</span
>
</div>
</div> </div>
</span> </span>
</div> </div>
@ -48,6 +49,7 @@
<div class="text-primary mb-8"> <div class="text-primary mb-8">
{{ countersign.departName }}的会签意见 {{ countersign.departName }}的会签意见
</div> </div>
<div class="flex end text-small">{{ countersign.createTime }}</div>
<div class="text-wrap mb-10">{{ countersign.comments }}</div> <div class="text-wrap mb-10">{{ countersign.comments }}</div>
<div class="row" v-if="countersign.files"> <div class="row" v-if="countersign.files">
<div class="col col-24"> <div class="col col-24">
@ -69,7 +71,7 @@ const countersignApplys = inject("countersignApplys");
const activeNames = ref([]); const activeNames = ref([]);
watch(countersignApplys, () => { watch(countersignApplys, () => {
for (let i = 0; i < countersignApplys.value.length; i++) { for (let i = 0; i < countersignApplys.value.length; i++) {
console.log(i) console.log(i);
activeNames.value.push(`countersign${i}`); activeNames.value.push(`countersign${i}`);
} }
}); });

1
src/components/negative/dialog.vue

@ -275,6 +275,7 @@ watch(
() => props.id, () => props.id,
() => { () => {
getDetails(); getDetails();
verifyEditFlag.value = false;
} }
); );

2
src/components/negative/verify.vue

@ -139,6 +139,7 @@
type="textarea" type="textarea"
placeholder="请输入问题核查情况" placeholder="请输入问题核查情况"
v-model="form.checkStatusDesc" v-model="form.checkStatusDesc"
:autosize="{ minRows: 4 }"
/> />
</el-form-item> </el-form-item>
<el-form-item <el-form-item
@ -158,6 +159,7 @@
type="textarea" type="textarea"
placeholder="请输入问题整改情况" placeholder="请输入问题整改情况"
v-model="form.rectifyDesc" v-model="form.rectifyDesc"
:autosize="{ minRows: 4 }"
/> />
</el-form-item> </el-form-item>

3
src/enums/dictEnums.ts

@ -55,8 +55,11 @@ export enum ProblemSources {
JZXX = '23', JZXX = '23',
// 12337信访 // 12337信访
XF12337 = '24', XF12337 = '24',
XCDC = '13',
// 专项督察 // 专项督察
ZXDC = '15', ZXDC = '15',
// 现场督察
// 其他 // 其他
XF_QT = '25' XF_QT = '25'
} }

4
src/style/public.scss

@ -190,6 +190,10 @@ svg + span {
position: relative; position: relative;
} }
.pt-20 {
padding-top: 20px;
}
.m-1 { .m-1 {
margin: 1px; margin: 1px;
} }

213
src/views/sensitivePerception/Model.vue

@ -197,83 +197,100 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item <el-row>
label="模型类型" <el-col :span="12">
prop="classId" <el-form-item
:rules="{ label="模型类型"
required: true, prop="classId"
message: '请选择模型类型', :rules="{
}" required: true,
> message: '请选择模型类型',
<el-select v-model="form.classId" style="width: 340px"> }"
<el-option
v-for="item in classes"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item
label="风险因素"
:rules="{
required: true,
message: '请选择风险因素',
}"
prop="riskScoreRuleId"
v-if="form.classId === GRJDBLFX_CLASS_ID"
>
<el-tree-select
class="flex-1"
v-model="form.riskScoreRuleId"
:data="treeOptions"
clearable
node-key="id"
:props="{
label: 'riskName',
}"
placeholder="请选择风险因素"
filterable
style="width: 340px"
/>
</el-form-item>
<el-form-item
label="数据类型"
prop="modelDataType"
:rules="{
required: true,
message: '请选择数据类型',
}"
v-else
>
<el-radio-group v-model="form.modelDataType" class="block">
<el-radio
v-for="item in dict.modelDataType"
:key="item.dictCode"
:value="item.dictValue"
>{{ item.dictLabel
}}{{ item.remark ? `(${item.remark})` : "" }}</el-radio
> >
</el-radio-group> <el-select v-model="form.classId" style="width: 340px">
</el-form-item> <el-option
<el-form-item v-for="item in classes"
label="预警通知处置" :key="item.id"
prop="modelDataType" :label="item.name"
:rules="{ :value="item.id"
required: true, />
message: '请选择数据类型', </el-select>
}" </el-form-item>
v-if="form.modelDataType === '2'" </el-col>
> <el-col :span="12">
<el-select <el-form-item
style="width: 280px" label="风险因素"
clearable :rules="{
v-model="form.warningHandling" required: true,
> message: '请选择风险因素',
<el-option label="预警处置" :value="1" /> }"
<el-option label="提醒通知" :value="2" /> prop="riskScoreRuleId"
</el-select> v-if="form.classId === GRJDBLFX_CLASS_ID"
</el-form-item> >
<el-tree-select
class="flex-1"
v-model="form.riskScoreRuleId"
:data="treeOptions"
clearable
node-key="id"
:props="{
label: 'riskName',
}"
placeholder="请选择风险因素"
filterable
style="width: 340px"
/>
</el-form-item>
</el-col>
</el-row>
<el-row v-if="form.classId !== GRJDBLFX_CLASS_ID">
<el-col :span="12">
<el-form-item
label="数据类型"
prop="modelDataType"
:rules="{
required: true,
message: '请选择数据类型',
}"
>
<el-radio-group
v-model="form.modelDataType"
class="block"
>
<el-radio
v-for="item in dict.modelDataType"
:key="item.dictCode"
:value="item.dictValue"
>{{ item.dictLabel
}}{{
item.remark ? `(${item.remark})` : ""
}}</el-radio
>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="通知类型"
prop="modelDataType"
:rules="{
required: true,
message: '请选择通知类型',
}"
v-if="form.modelDataType === '2'"
>
<el-select
style="width: 280px"
clearable
v-model="form.warningHandling"
>
<el-option label="预警处置" :value="1" />
<el-option label="提醒通知" :value="2" />
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-form-item <el-form-item
label="分发方式" label="分发方式"
prop="distributionMethod" prop="distributionMethod"
@ -281,7 +298,6 @@
required: true, required: true,
message: '请选择分发方式', message: '请选择分发方式',
}" }"
v-if="form.modelDataType === ModelDataType.NEGATIVE"
> >
<el-radio-group v-model="form.distributionMethod" class="block"> <el-radio-group v-model="form.distributionMethod" class="block">
<el-radio <el-radio
@ -296,11 +312,11 @@
<template <template
v-if=" v-if="
form.modelDataType === ModelDataType.NEGATIVE &&
form.distributionMethod === form.distributionMethod ===
DistributionMethod.DIRECTLY_DISTRIBUTE DistributionMethod.DIRECTLY_DISTRIBUTE
" "
> >
<el-divider />
<el-form-item <el-form-item
label="分发周期" label="分发周期"
prop="distributionCycle" prop="distributionCycle"
@ -337,7 +353,7 @@
DistributionCycle.WEEKLY DistributionCycle.WEEKLY
" "
> >
<el-select style="width: 120px" clearable> <el-select style="width: 120px" clearable v-model="form.distributionCycleDayOfWeek">
<el-option <el-option
v-for="(item, index) in WEEKS" v-for="(item, index) in WEEKS"
:key="index" :key="index"
@ -365,10 +381,7 @@
</el-form-item> </el-form-item>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item <el-form-item label="指定办理单位" prop="departId">
label="指定办理单位"
prop="departId"
>
<div class="flex gap"> <div class="flex gap">
<div style="width: 280px"> <div style="width: 280px">
<depart-tree-select v-model="form.handleDepartId" /> <depart-tree-select v-model="form.handleDepartId" />
@ -450,10 +463,21 @@
添加问题 添加问题
</el-button> </el-button>
</div> </div>
<el-form-item label="问题类型" prop="" v-for="(item, index) in form.problems" :key="index"> <el-form-item
label="问题类型"
prop=""
v-for="(item, index) in form.problems"
:key="index"
>
<div class="flex v-center"> <div class="flex v-center">
<problem-type-select v-model="item.threeLevelCode" /> <problem-type-select v-model="item.threeLevelCode" />
<el-button plain type="danger" size="small" class="ml-20" @click="handleRemoveProblem(index)"> <el-button
plain
type="danger"
size="small"
class="ml-20"
@click="handleRemoveProblem(index)"
>
<template #icon> <template #icon>
<icon name="el-icon-Delete" /> <icon name="el-icon-Delete" />
</template> </template>
@ -778,6 +802,9 @@ onMounted(() => {
listModelClass().then((data) => { listModelClass().then((data) => {
classes.value = data; classes.value = data;
}); });
listRiskScoreRuleTree().then((data) => {
treeOptions.value = data
})
}); });
function handleChangeClass(id) { function handleChangeClass(id) {
@ -789,7 +816,7 @@ const show = ref(false);
const mode = ref("add"); const mode = ref("add");
const form = ref({ const form = ref({
distributionMethod: "1", distributionMethod: "1",
problems: [] problems: [],
}); });
watch(mode, (val) => { watch(mode, (val) => {
@ -801,8 +828,8 @@ watch(mode, (val) => {
function initForm() { function initForm() {
form.value = { form.value = {
distributionMethod: "1", distributionMethod: "1",
problems: [] problems: [],
}; };
} }
const formRef = ref(null); const formRef = ref(null);
@ -815,15 +842,15 @@ function handleEdit() {
show.value = true; show.value = true;
mode.value = "edit"; mode.value = "edit";
form.value = { ...activeModel.value }; form.value = { ...activeModel.value };
form.value.problems = [] form.value.problems = [];
} }
function handleAddProblem() { function handleAddProblem() {
form.value.problems.push({}) form.value.problems.push({});
} }
function handleRemoveProblem(index) { function handleRemoveProblem(index) {
form.value.problems.splice(index, 1) form.value.problems.splice(index, 1);
} }
async function handleSubmit() { async function handleSubmit() {
@ -903,8 +930,6 @@ function handleSelectInvolveProblem(vals) {
}; };
}); });
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.menu { .menu {

4
src/views/sensitivePerception/ModelClueManual.vue

@ -1,6 +1,6 @@
<template> <template>
<div class="container"> <div class="container h100">
<el-row :gutter="20"> <el-row :gutter="20" class="h100">
<el-col :span="4"> <el-col :span="4">
<model-tree v-model="query.modelIds" /> <model-tree v-model="query.modelIds" />
</el-col> </el-col>

4
src/views/sensitivePerception/RiskPersonnel.vue

@ -42,12 +42,12 @@
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item label="人员标签"> <el-form-item label="人员标签">
<el-input v-model="query.tags" /> <el-input v-model="query.tags" placeholder="请输入" clearable />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item label="高风险因素"> <el-form-item label="高风险因素">
<el-input v-model="query.smallTags" /> <el-input v-model="query.smallTags" placeholder="请输入" clearable />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>

782
src/views/work/Alarm.vue

@ -1,303 +1,302 @@
<template> <template>
<div class="container"> <div class="container">
<header> <header>
<el-form :label-width="120"> <el-form :label-width="120">
<el-row> <el-row>
<el-col :span="6"> <el-col :span="6">
<el-form-item label="提醒类型"> <el-form-item label="提醒类型">
<div class="flex gap"> <div class="flex gap">
<el-select <el-select
v-model="query.alarmTypeId" v-model="query.alarmTypeId"
style="min-width: 185px" style="min-width: 185px"
> >
<el-option :value="-1" label="全部"/> <el-option :value="-1" label="全部" />
<el-option :value="1" label="预警问题"/> <el-option :value="1" label="预警问题" />
<el-option :value="2" label="风险问题"/> <el-option :value="2" label="风险问题" />
<el-option :value="3" label="提醒通知"/> <el-option :value="3" label="提醒通知" />
</el-select> </el-select>
</div> </div>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item label="提醒时间"> <el-form-item label="提醒时间">
<date-time-range-picker-ext <date-time-range-picker-ext
v-model="query.discoveryTime" v-model="query.discoveryTime"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item label="回复情况"> <el-form-item label="回复情况">
<div class="flex gap"> <div class="flex gap">
<el-select <el-select
v-model="query.replyState" v-model="query.replyState"
style="min-width: 185px" style="min-width: 185px"
> >
<el-option :value="-1" label="全部"/> <el-option :value="-1" label="全部" />
<el-option :value="1" label="已回复"/> <el-option :value="1" label="已回复" />
<el-option :value="0" label="未回复"/> <el-option :value="0" label="未回复" />
</el-select> </el-select>
</div> </div>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item <el-form-item
label="被通知单位" label="被通知单位"
prop="involveDepartId" prop="involveDepartId"
:rules="{ :rules="{
message: '请选择问题涉及单位', message: '请选择问题涉及单位',
trigger: ['blur'], trigger: ['blur'],
}" }"
> >
<depart-tree-select <depart-tree-select
v-model="formData.involveDepartId" v-model="formData.involveDepartId"
:check-strictly="true" :check-strictly="true"
@node-click=" @node-click="
(row) => (row) =>
(formData.involveDepartName = (formData.involveDepartName =
row.shortName) row.shortName)
" "
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item label="提醒内容"> <el-form-item label="提醒内容">
<el-input <el-input
placeholder="请输入" placeholder="请输入"
v-model="query.alarmContent" v-model="query.alarmContent"
clearable clearable
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
</el-form> </el-form>
<div class="flex between mt-20 mb-26"> <div class="flex between mt-20 mb-26">
<div></div> <div></div>
<div> <div>
<el-button type="primary" @click="getList"> <el-button type="primary" @click="getList">
<template #icon <template #icon>
> <icon name="el-icon-Search" />
<icon name="el-icon-Search" </template>
/> 查询
</template> </el-button>
查询 <el-button @click="reset">重置</el-button>
</el-button </div>
> </div>
<el-button @click="reset">重置</el-button> </header>
</div> <main>
</div> <div class="table-container" v-loading="loading">
</header> <el-table :data="list" ref="tableRef">
<main> <el-table-column
<div class="table-container" v-loading="loading"> label="提醒时间"
<el-table :data="list" ref="tableRef"> prop="alarmTime"
<el-table-column width="150"
label="提醒时间" />
prop="alarmTime" <el-table-column
width="150" label="提醒类型"
/> prop="alarmType"
<el-table-column width="90"
label="提醒类型" />
prop="alarmType" <el-table-column
width="90" label="被通知单位"
/> prop="notificationDepartName"
<el-table-column width="90"
label="被通知单位" show-overflow-tooltip
prop="notificationDepartName" />
width="90" <el-table-column
show-overflow-tooltip label="被通知民警"
/> prop="policeName"
<el-table-column width="90"
label="被通知民警" />
prop="policeName" <el-table-column label="提醒内容" prop="alarmContent" />
width="90" <el-table-column label="回复情况" width="110">
/> <template #default="{ row }">
<el-table-column <el-text v-if="row.replyState == 1" class="mx-1"
label="提醒内容" >已回复</el-text
prop="alarmContent" >
/> <el-text v-else type="warning" class="mx-1"
<el-table-column label="回复情况" width="110"> >未回复</el-text
<template #default="{ row }"> >
<el-text v-if="row.replyState==1" class="mx-1">已回复</el-text> </template>
<el-text v-else type="warning" class="mx-1">未回复</el-text> </el-table-column>
</template> <el-table-column label="操作" width="160">
</el-table-column> <template #default="{ row }">
<el-table-column label="操作" width="160"> <el-button
<template #default="{ row }"> type="primary"
<el-button link
type="primary" @click="showFiles(row)"
link >查看详情
@click="showFiles(row)" </el-button>
>查看详情 <el-button
</el-button> type="primary"
<el-button link
type="primary" @click="handleEdit(row)"
link v-perms="['negative:edit']"
@click="handleEdit(row)" >立即回复
v-perms="['negative:edit']" </el-button>
>立即回复 </template>
</el-button> </el-table-column>
</template> </el-table>
</el-table-column> </div>
</el-table> <div class="flex end mt-8">
</div> <el-pagination
<div class="flex end mt-8"> @size-change="getList"
<el-pagination @current-change="getList"
@size-change="getList" :current-page="query.current"
@current-change="getList" :page-sizes="[10, 20, 50]"
:current-page="query.current" :page-size="query.size"
:page-sizes="[10, 20, 50]" v-model:current-page="query.current"
:page-size="query.size" layout="total, sizes, prev, pager, next"
v-model:current-page="query.current" :total="total"
layout="total, sizes, prev, pager, next" >
:total="total" </el-pagination>
> </div>
</el-pagination> </main>
</div> <el-dialog v-model="editShow" title="回复问题" width="900px">
</main> <el-form label-width="148" :model="formData" ref="formRef">
<el-dialog v-model="editShow" title="回复问题" width="900px"> <el-row>
<el-form label-width="148" :model="formData" ref="formRef"> <el-col :span="12">
<el-row> <el-form-item label="提醒类型">
<el-col :span="12"> <div>{{ formData.alarmType }}</div>
<el-form-item </el-form-item>
label="提醒类型" </el-col>
> <el-col :span="12">
<div >{{formData.alarmType}}</div> <el-form-item label="提醒时间">
</el-form-item> <el-text>{{ formData.alarmTime }}</el-text>
</el-col> </el-form-item>
<el-col :span="12"> </el-col>
<el-form-item </el-row>
label="提醒时间" <el-row style="margin-top: 5px">
> <el-col :span="12">
<el-text>{{formData.alarmTime}}</el-text> <el-form-item label="被通知单位">
</el-form-item> <el-text>{{
</el-col> formData.notificationDepartName
</el-row> }}</el-text>
<el-row style="margin-top: 5px;"> </el-form-item>
<el-col :span="12"> </el-col>
<el-form-item <el-col :span="12" v-if="formData.policeName != undefined">
label="被通知单位" <el-form-item label="被通知民警">
> <el-text>{{ formData.policeName }}</el-text>
<el-text>{{formData.notificationDepartName}}</el-text> </el-form-item>
</el-form-item> </el-col>
</el-col> </el-row>
<el-col :span="12" v-if="formData.policeName != undefined"> <el-row style="margin-top: 5px">
<el-form-item <el-form-item label="提醒内容">
label="被通知民警" <el-text style="width: 588px">{{
> formData.alarmContent
<el-text>{{formData.policeName}}</el-text> }}</el-text>
</el-form-item> </el-form-item>
</el-col> </el-row>
</el-row> <el-form-item
<el-row style="margin-top: 5px;"> label="回复问题"
<el-form-item :rules="{
label="提醒内容"
>
<el-text style="width: 588px;">{{formData.alarmContent}}</el-text>
</el-form-item>
</el-row>
<el-form-item
label="回复问题"
:rules="{
required: true, required: true,
message: '请输入回复内容', message: '请输入回复内容',
trigger: ['blur'], trigger: ['blur'],
}" }"
> >
<el-input <el-input
type="textarea" type="textarea"
placeholder="请输入回复内容" placeholder="请输入回复内容"
v-model="formData.replyResultContent" v-model="formData.replyResultContent"
:autosize="{ minRows: 6 }" :autosize="{ minRows: 6 }"
/> />
</el-form-item> </el-form-item>
</el-form> </el-form>
<footer class="flex end"> <footer class="flex end">
<el-button @click="editShow = false" size="large">取消</el-button> <el-button @click="editShow = false" size="large"
<el-button type="primary" @click="handleSumbit" size="large" >取消</el-button
>确定 >
</el-button <el-button type="primary" @click="handleSumbit" size="large"
> >确定
</footer> </el-button>
</el-dialog> </footer>
</el-dialog>
<el-dialog
title="查看详情"
v-model="dialogShow"
width="800"
>
<el-form :model="showData" :label-width="120" ref="fomrRef">
<el-row>
<el-col :span="12">
<el-form-item
label="提醒类型"
>
<div >{{showData.alarmType}}</div>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="提醒时间"
>
<el-text>{{showData.alarmTime}}</el-text>
</el-form-item>
</el-col>
</el-row>
<el-row style="margin-top: 5px;">
<el-col :span="12">
<el-form-item
label="被通知单位"
>
<el-text>{{showData.notificationDepartName}}</el-text>
</el-form-item>
</el-col>
<el-col :span="12" v-if="showData.policeName != undefined">
<el-form-item
label="被通知民警"
>
<el-text>{{showData.policeName}}</el-text>
</el-form-item>
</el-col>
</el-row>
<el-row style="margin-top: 5px;">
<el-form-item
label="提醒内容"
>
<el-text style="width: 588px;">{{showData.alarmContent}}</el-text>
</el-form-item>
</el-row>
<el-row style="margin-top: 5px;" v-if="showData.replyState == 1">
<el-form-item
label="回复内容"
>
<el-text style="width: 588px;">{{showData.replyResultContent}}</el-text>
</el-form-item>
</el-row>
<el-row style="margin-top: 10px;" v-if="showData.files != undefined && showData.files.length > 0">
<el-form-item
label="问题附件"
>
<div v-for="(item, index) in showData.files" :key="index" style="margin-top: 10px;">
<el-image :preview-src-list="previewList" style="width: 100px; height: 100px;margin-right: 8px"
:initial-index="index" :src="item.path" fit="cover" :hide-on-click-modal="true" :lazy="true" />
</div>
</el-form-item>
</el-row>
</el-form>
<footer class="flex end">
<el-button @click="dialogShow = false">关闭</el-button>
</footer>
</el-dialog>
</div>
<el-dialog title="查看详情" v-model="dialogShow" width="800">
<el-form :model="showData" :label-width="120" ref="fomrRef">
<el-row>
<el-col :span="12">
<el-form-item label="提醒类型">
<div>{{ showData.alarmType }}</div>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="提醒时间">
<el-text>{{ showData.alarmTime }}</el-text>
</el-form-item>
</el-col>
</el-row>
<el-row style="margin-top: 5px">
<el-col :span="12">
<el-form-item label="被通知单位">
<el-text>{{
showData.notificationDepartName
}}</el-text>
</el-form-item>
</el-col>
<el-col :span="12" v-if="showData.policeName != undefined">
<el-form-item label="被通知民警">
<el-text>{{ showData.policeName }}</el-text>
</el-form-item>
</el-col>
</el-row>
<el-row style="margin-top: 5px">
<el-form-item label="提醒内容">
<el-text style="width: 588px">{{
showData.alarmContent
}}</el-text>
</el-form-item>
</el-row>
<el-row style="margin-top: 5px" v-if="showData.replyState == 1">
<el-form-item label="回复内容">
<el-text style="width: 588px">{{
showData.replyResultContent
}}</el-text>
</el-form-item>
</el-row>
<el-row
style="margin-top: 10px"
v-if="
showData.files != undefined && showData.files.length > 0
"
>
<el-form-item label="问题附件">
<div
v-for="(item, index) in showData.files"
:key="index"
style="margin-top: 10px"
>
<el-image
:preview-src-list="previewList"
style="
width: 100px;
height: 100px;
margin-right: 8px;
"
:initial-index="index"
:src="item.path"
fit="cover"
:hide-on-click-modal="true"
:lazy="true"
/>
</div>
</el-form-item>
</el-row>
</el-form>
<footer class="flex end">
<el-button @click="dialogShow = false">关闭</el-button>
</footer>
</el-dialog>
</div>
</template> </template>
<script setup> <script setup>
import moment from "moment"; import moment from "moment";
import { Clock } from '@element-plus/icons-vue' import { Clock } from "@element-plus/icons-vue";
import { import {
alarmNotificationPages, alarmNotificationPages,
alarmNotificationReply, alarmNotificationReply,
alarmFiles alarmFiles,
} from "@/api/work/alarm"; } from "@/api/work/alarm";
import feedback from "@/utils/feedback"; import feedback from "@/utils/feedback";
@ -306,171 +305,172 @@ import useCatchStore from "@/stores/modules/catch";
const catchStore = useCatchStore(); const catchStore = useCatchStore();
const query = ref({ const query = ref({
current: 1, current: 1,
size: 10, size: 10,
alarmTypeId: -1, alarmTypeId: -1,
replyState: -1 replyState: -1,
}); });
const list = ref([]); const list = ref([]);
const total = ref(0); const total = ref(0);
let showData = ref({}) let showData = ref({});
let dialogShow = ref(false) let dialogShow = ref(false);
let previewList = ref([]) let previewList = ref([]);
const loading = ref(true); const loading = ref(true);
const showFiles = (data) => { const showFiles = (data) => {
alarmFiles(data.id).then(res => { alarmFiles(data.id).then((res) => {
showData.value = data; showData.value = data;
showData.value['files'] = res; showData.value["files"] = res;
let arr = [] let arr = [];
res.forEach(item => { res.forEach((item) => {
arr.push(item.path) arr.push(item.path);
}) });
previewList.value = arr previewList.value = arr;
console.log(showData.value) console.log(showData.value);
dialogShow.value = true; dialogShow.value = true;
}) });
} };
function getList() { function getList() {
let param = { let param = {
current: query.value.current, current: query.value.current,
size: query.value.size, size: query.value.size,
} };
if (query.value.alarmTypeId != -1) { if (query.value.alarmTypeId != -1) {
param['alarmTypeId'] = query.value.alarmTypeId param["alarmTypeId"] = query.value.alarmTypeId;
} }
if (query.value.replyState != -1) { if (query.value.replyState != -1) {
param['replyState'] = query.value.replyState param["replyState"] = query.value.replyState;
} }
if (query.value.discoveryTime != undefined && query.value.discoveryTime != null) { if (
param['startTime'] = query.value.discoveryTime[0] query.value.discoveryTime != undefined &&
param['endTime'] = query.value.discoveryTime[1] query.value.discoveryTime != null
} ) {
if (formData.value.involveDepartId != undefined) { param["startTime"] = query.value.discoveryTime[0];
param['notificationDepartCode'] = formData.value.involveDepartId param["endTime"] = query.value.discoveryTime[1];
} }
if (query.value.alarmContent != undefined) { if (formData.value.involveDepartId != undefined) {
param['alarmContent'] = query.value.alarmContent; param["notificationDepartCode"] = formData.value.involveDepartId;
} }
loading.value = true; if (query.value.alarmContent != undefined) {
alarmNotificationPages(param).then((data) => { param["alarmContent"] = query.value.alarmContent;
list.value = data.records; }
total.value = data.total; loading.value = true;
loading.value = false; alarmNotificationPages(param).then((data) => {
}); list.value = data.records;
total.value = data.total;
loading.value = false;
});
} }
const tableRef = ref() const tableRef = ref();
function reset() { function reset() {
query.value = { query.value = {
current: 1, current: 1,
size: 10, size: 10,
responderKey: "name", responderKey: "name",
}; };
tableRef.value.clearSort() tableRef.value.clearSort();
getList(); getList();
// //
router.push("/query"); router.push("/query");
} }
const route = useRoute(); const route = useRoute();
watch( watch(
() => route.query, () => route.query,
() => { () => {
updateQuery(); updateQuery();
getList(); getList();
} }
); );
function updateQuery() { function updateQuery() {
if (route.query.processingStatus) { if (route.query.processingStatus) {
query.value.processingStatus = [route.query.processingStatus]; query.value.processingStatus = [route.query.processingStatus];
} else { } else {
query.value.processingStatus = []; query.value.processingStatus = [];
} }
if (route.query.crtTime === "today") { if (route.query.crtTime === "today") {
query.value.crtTime = [ query.value.crtTime = [
moment().startOf("day").format("YYYY-MM-DD HH:mm:ss"), moment().startOf("day").format("YYYY-MM-DD HH:mm:ss"),
moment().endOf("day").format("YYYY-MM-DD HH:mm:ss"), moment().endOf("day").format("YYYY-MM-DD HH:mm:ss"),
]; ];
} else { } else {
query.value.crtTime = []; query.value.crtTime = [];
} }
if (route.query.extensionFlag === "true") { if (route.query.extensionFlag === "true") {
query.value.extensionFlag = true query.value.extensionFlag = true;
} else { } else {
query.value.extensionFlag = ''; query.value.extensionFlag = "";
} }
} }
onMounted(() => { onMounted(() => {
updateQuery(); updateQuery();
getList(); getList();
}); });
const show = ref(false); const show = ref(false);
function handleAction(row) { function handleAction(row) {
show.value = true; show.value = true;
} }
const router = useRouter(); const router = useRouter();
const editShow = ref(false); const editShow = ref(false);
const formData = ref({}); const formData = ref({});
const formRef = ref(null); const formRef = ref(null);
function handleEdit(row) { function handleEdit(row) {
editShow.value = true; editShow.value = true;
formData.value = {...row}; formData.value = { ...row };
} }
async function handleSumbit() { async function handleSumbit() {
await formRef.value.validate(); await formRef.value.validate();
let data = { let data = {
replyResultContent: formData.value.replyResultContent, replyResultContent: formData.value.replyResultContent,
id: formData.value.id id: formData.value.id,
} };
await alarmNotificationReply(data); await alarmNotificationReply(data);
editShow.value = false; editShow.value = false;
feedback.msgSuccess("操作成功"); feedback.msgSuccess("操作成功");
getList(); getList();
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.form-row { .form-row {
padding: 8px 0; padding: 8px 0;
box-shadow: inset 0px -1px 0px 0px #ebebeb; box-shadow: inset 0px -1px 0px 0px #ebebeb;
label { label {
width: 120px; width: 120px;
line-height: 24px; line-height: 24px;
padding-right: 12px; padding-right: 12px;
box-sizing: border-box; box-sizing: border-box;
text-align: right; text-align: right;
& + * { & + * {
width: calc(100% - 126px); width: calc(100% - 126px);
}
} }
}
.btn-box { .btn-box {
width: 70px; width: 70px;
} }
.el-form-item { .el-form-item {
margin-bottom: 0; margin-bottom: 0;
} }
} }
.query-box { .query-box {
gap: 10px 20px; gap: 10px 20px;
} }
</style> </style>

14
src/views/work/Fav.vue

@ -108,29 +108,27 @@
</div> </div>
</div> </div>
<div class="row mt-10"> <div class="row mt-10">
<div class="col col-6"> <div class="col col-6" v-if="row.responderName">
<label>投诉反映人</label> <label>投诉反映人</label>
<span>{{}}</span> <span>{{ row.responderName }}</span>
</div> </div>
<div class="col col-6"> <div class="col col-6" v-if="row.contactPhone">
<label>联系电话</label> <label>联系电话</label>
<span>{{ row.contactPhone }}</span> <span>{{ row.contactPhone }}</span>
</div> </div>
</div>
<div class="row mt-10">
<div class="col col-6"> <div class="col col-6">
<label>业务类别</label> <label>业务类别</label>
<span>{{ row.businessTypeName }}</span> <span>{{ row.businessTypeName }}</span>
</div> </div>
<div class="col col-6"> <div class="col col-6">
<label>涉嫌问题</label> <label>涉嫌问题</label>
<span>{{}}</span> <span>{{ getInvolveProblem(row.involveProblem) || '/' }}</span>
</div> </div>
</div> </div>
<div class="row mt-10"> <div class="row mt-10">
<div class="col col-6"> <div class="col col-6">
<label>涉及警种</label> <label>涉及警种</label>
<span>{{ row.policeTypeName }}</span> <span>{{ row.policeTypeName || '/' }}</span>
</div> </div>
<div class="col col-6"> <div class="col col-6">
<label>涉及单位</label> <label>涉及单位</label>
@ -139,7 +137,7 @@
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="问题发生时间" prop="happenTime" /> <el-table-column label="问题发现时间" prop="discoveryTime" />
<el-table-column label="问题来源" prop="problemSources" /> <el-table-column label="问题来源" prop="problemSources" />
<el-table-column label="业务类别" prop="businessTypeName" /> <el-table-column label="业务类别" prop="businessTypeName" />
<el-table-column label="涉嫌问题"> <el-table-column label="涉嫌问题">

6
src/views/work/Query.vue

@ -521,8 +521,8 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row v-if="formData.problemSourcesCode === ProblemSources.ZXDC"> <el-row >
<el-col :span="12"> <el-col :span="12" v-if="formData.problemSourcesCode === ProblemSources.ZXDC">
<el-form-item <el-form-item
label="专项督察" label="专项督察"
prop="specialSupervision" prop="specialSupervision"
@ -545,7 +545,7 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12" v-if="form.problemSourcesCode === ProblemSources.ZXDC || form.problemSourcesCode === ProblemSources.XCDC">
<el-form-item <el-form-item
label="通报期数" label="通报期数"
prop="reportNumber" prop="reportNumber"

Loading…
Cancel
Save