Browse Source

3. 优化:问题详情-多个签收退回默认只展示最新退回,其他退回默认收起,可通过右下角的按钮控制 展开/收起。

4. 修复模型超市-修改模型图标颜色不生效的问题。
5. 修改办理时限字典,改为147工作制、30+30工作制。
main
wxc 12 months ago
parent
commit
2103bccfe8
  1. BIN
      public/imgs/401.gif
  2. 2
      src/components/alarm/dialog.vue
  3. 75
      src/components/alarm/reply.vue
  4. 7
      src/components/data/distrbute.vue
  5. 14
      src/components/home/work/my-alarm.vue
  6. 2
      src/components/model-icon-picker.vue
  7. 42
      src/components/negative/sign-return-description.vue
  8. 4
      src/router/routes.ts
  9. 31
      src/views/error/401.vue
  10. 2
      src/views/sensitivePerception/Model.vue
  11. 671
      src/views/sensitivePerception/ModelClue.vue
  12. 15
      src/views/sensitivePerception/ModelClueManual.vue
  13. 109
      src/views/work/Alarm.vue
  14. 9
      src/views/work/Query.vue

BIN
public/imgs/401.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 KiB

2
src/components/alarm/dialog.vue

@ -94,7 +94,7 @@
</el-form-item>
</el-form>
<footer class="flex end">
<el-button @click="showNotification = false" size="large"
<el-button @click="emit('close')" size="large"
>取消</el-button
>
<el-button type="primary" @click="handleNotification" size="large"

75
src/components/alarm/reply.vue

@ -0,0 +1,75 @@
<template>
<el-dialog title="回复问题" width="900px">
<div class="row mb-10 mt-20">
<div class="col col-12">
<label>提醒类型</label>
<span>{{ data.alarmType }}</span>
</div>
<div class="col col-12">
<label>提醒时间</label>
<span>{{ data.alarmTime }}</span>
</div>
<div class="col col-24">
<label>提醒内容</label>
<span>{{ data.alarmContent }}</span>
</div>
</div>
<el-form label-width="100" :model="formData" ref="formRef" style="min-height: 200px">
<el-form-item
label="回复问题"
prop="replyResultContent"
:rules="{
required: true,
message: '请输入回复内容',
trigger: ['blur'],
}"
>
<el-input
type="textarea"
placeholder="请输入回复内容"
v-model="formData.replyResultContent"
:autosize="{ minRows: 5 }"
/>
</el-form-item>
<!-- <el-form-item
label="附件"
>
<file-upload />
</el-form-item> -->
</el-form>
<footer class="flex end">
<el-button @click="emit('close')" size="large">取消</el-button>
<el-button type="primary" @click="handleSumbit" size="large"
>确定
</el-button>
</footer>
</el-dialog>
</template>
<script setup>
import {
alarmNotificationReply,
} from "@/api/work/alarm";
import feedback from "@/utils/feedback";
const props = defineProps({
data: {
type: Object,
default: {}
}
})
const emit = defineEmits(['close', 'update'])
const show = ref(false)
const formData = ref({})
const formRef = ref()
async function handleSumbit() {
await formRef.value.validate();
formData.value.id = props.data.id
await alarmNotificationReply(formData.value);
feedback.msgSuccess("操作成功");
emit('close')
emit('update')
}
</script>
<style scoped>
</style>

7
src/components/data/distrbute.vue

@ -80,7 +80,7 @@
</el-dialog>
<el-dialog title="任务分发" v-model="distributeShow" width="50vw" top="5vh">
<el-form :label-width="120" ref="formRef" :model="form">
<el-form :label-width="120" ref="formRef" :model="form" v-loading="loading">
<el-form-item
label="办理时限"
prop="timeLimit"
@ -124,7 +124,7 @@
</el-form-item>
</el-form>
<footer class="flex end mt-20">
<el-button type="primary" size="large" @click="handleSubmit"
<el-button type="primary" size="large" @click="handleSubmit" v-loading="loading"
>确认下发</el-button
>
</footer>
@ -173,10 +173,13 @@ function handleShowDistributeDialog() {
distributeShow.value = true;
}
const loading = ref(false)
async function handleSubmit() {
await formRef.value.validate();
loading.value = true
form.value.data = props.data;
await distributePetitionComplaint(form.value);
loading.value = false
form.value = {};
distributeShow.value = false;
show.value = false;

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

@ -20,16 +20,18 @@
</el-table-column>
<el-table-column label="操作" width="120">
<template #default="{ row }">
<!-- <el-button
<el-button
type="primary"
link
@click="handleEdit(row)"
>立即回复
</el-button> -->
</el-button>
</template>
</el-table-column>
</el-table>
</div>
<alarm-reply v-model="show" :data="activeRow" @close="show = false" @update="emit('update')" />
</template>
<script setup>
@ -40,12 +42,14 @@ defineProps({
}
})
const emit = defineEmits(['update'])
const show = ref(false);
const activeNegativeId = ref("");
const activeRow = ref("");
function handleAction(row) {
function handleEdit(row) {
show.value = true;
activeNegativeId.value = row.negativeId;
activeRow.value = row;
}
</script>
<style lang="scss" scoped>

2
src/components/model-icon-picker.vue

@ -61,12 +61,12 @@ watch(() => props.ico, (val) => {
const activeColor = ref(props.color || 'linear-gradient( 180deg, #3A7DDB 0%, #2731DB 100%)')
function handleChangeColorClick(item) {
activeColor.value = item;
emit("update:color", activeColor.value)
}
function handleClick(item) {
activeIcon.value = item;
emit("update:ico", item);
emit("update:color", activeColor.value);
}
</script>
<style lang="scss" scoped>

42
src/components/negative/sign-return-description.vue

@ -1,27 +1,40 @@
<template>
<div class="box" v-for="item in signReturns" :key="item.id">
<div class="flex mb-10">
<div class="flex v-center gap">
<icon name="el-icon-Warning" :size="20" class="danger" />
<span class="danger">问题已退回</span>
<span>{{ item.handlerDepartName }}</span>
<span>{{ item.handlerName }}</span>
<div v-for="(item, index) in signReturns" :key="index">
<template v-if="index === 0 || expandFlag">
<div class="box">
<div class="flex mb-10">
<div class="flex v-center gap">
<icon
name="el-icon-Warning"
:size="20"
class="danger"
/>
<span class="danger">问题已退回</span>
<span>{{ item.handlerDepartName }}</span>
<span>{{ item.handlerName }}</span>
</div>
</div>
<div class="col">
<label class="mt-8">退回理由</label>
<div class="content">{{ item.comments }}</div>
</div>
<el-button type="primary" size="small" plain class="expand-btn" @click="expandFlag = !expandFlag" v-if="index === 0"
>{{ !expandFlag ? '展开' : '收起' }}</el-button
>
</div>
</div>
<div class="col">
<label class="mt-8">退回理由</label>
<div class="content">{{ item.comments }}</div>
</div>
</template>
</div>
</template>
<script setup>
const signReturns = inject("signReturns");
const expandFlag = ref(false);
</script>
<style lang="scss" scoped>
.box {
border: 1px solid #ffe3e3;
padding: 16px;
margin-bottom: 12px;
position: relative;
.danger {
color: #ff1414;
font-weight: bold;
@ -31,4 +44,9 @@ const signReturns = inject("signReturns");
width: calc(100% - 100px);
}
}
.expand-btn {
position: absolute;
bottom: -12px;
right: 16px;
}
</style>

4
src/router/routes.ts

@ -74,6 +74,10 @@ export const routes = [
path: '/datav/subOneVideoInsp',
component: () => import('@/views/datav/subonedatav/SubOneVideoInsp.vue'),
},
{
path: '/401',
component: () => import('@/views/error/401.vue'),
},
];

31
src/views/error/401.vue

@ -0,0 +1,31 @@
<template>
<div class="container">
<el-row>
<el-col :span="12">
<h1 style="margin-top: 160px; margin-bottom: 30px">您没有权限</h1>
<p class="mb-20">如有疑问请联系系统管理员</p>
<p class="mb-8">可选择</p>
<el-button type="primary" link @click="goLogin">返回登录</el-button>
</el-col>
<el-col :span="12">
<img src="/imgs/401.gif">
</el-col>
</el-row>
</div>
</template>
<script setup>
import { deleteToken } from '@/utils/token'
const router = useRouter()
function goLogin() {
deleteToken()
router.push('/login')
}
</script>
<style lang="scss" scoped>
.container {
width: 800px;
margin: auto;
margin-top: 10vh;
}
</style>

2
src/views/sensitivePerception/Model.vue

@ -1017,7 +1017,7 @@ async function handleDetailConfigShow() {
size: 1,
});
if (data.records.length && data.records[0].data) {
console.log(data.records);
} else {
modelClueData.value = JSON.parse(data.records[0].data);
}

671
src/views/sensitivePerception/ModelClue.vue

@ -1,323 +1,361 @@
<template>
<div class="container h100">
<el-row :gutter="20" class="h100">
<el-col :span="6" class="h100">
<model-tree v-model="query.modelIds"/>
</el-col>
<el-col :span="18">
<header>
<el-form :label-width="140">
<el-row>
<el-col :span="8">
<el-form-item label="预警时间">
<date-time-range-picker-ext
v-model="query.createTime"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="涉及单位">
<depart-tree-select
v-model="query.involveDepartId"
:check-strictly="false"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="预警内容">
<el-input
placeholder="请输入"
v-model="query.thingDesc"
clearable
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="分发状态">
<el-select
v-model="query.distributionState"
clearable
>
<el-option
v-for="item in dict.distributionState"
:label="item.dictLabel"
:value="item.dictValue"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div class="flex end mb-20">
<div>
<el-button type="primary" @click="getList">
<template #icon>
<icon name="el-icon-Search"/>
</template>
查询
</el-button
>
<el-button @click="reset">重置</el-button>
</div>
</div>
</header>
<div class="table-container">
<el-table :data="list">
<el-table-column
label="预警时间"
prop="createTime"
width="150"
/>
<!-- <el-table-column-->
<!-- label="预警模型"-->
<!-- prop="modelName"-->
<!-- width="160"-->
<!-- show-overflow-tooltip-->
<!-- />-->
<el-table-column
label="涉及单位"
show-overflow-tooltip
width="200"
>
<template #default="{ row }">
<span>{{ row.involveParentDepartName }}</span><span
v-if="row.involveDepartName"><br>{{ row.involveDepartName }}</span>
</template>
</el-table-column>
<el-table-column
label="涉及人员"
prop="involvePoliceName"
width="100"
>
<template #default="{ row }">
<div v-if="row.involvePoliceName">
<div v-for="item in row.involvePoliceName.split(' ')" class="text-nowrap">{{
item
}}
</div>
<div class="container h100">
<el-row :gutter="20" class="h100">
<el-col :span="6" class="h100">
<model-tree v-model="query.modelIds" />
</el-col>
<el-col :span="18">
<header>
<el-form :label-width="140">
<el-row>
<el-col :span="8">
<el-form-item label="预警时间">
<date-time-range-picker-ext
v-model="query.createTime"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="涉及单位">
<depart-tree-select
v-model="query.involveDepartId"
:check-strictly="false"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="预警内容">
<el-input
placeholder="请输入"
v-model="query.thingDesc"
clearable
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="分发状态">
<el-select
v-model="query.distributionState"
clearable
>
<el-option
v-for="item in dict.distributionState"
:label="item.dictLabel"
:value="item.dictValue"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8" v-if="query.distributionState === '1'">
<el-form-item label="办理状态">
<el-select
placeholder="办理状态"
clearable
v-model="query.processingStatus"
>
<el-option
v-for="item in dict.processingStatus"
:key="item.id"
:label="item.dictLabel"
:value="item.dictValue"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div class="flex end mb-20">
<div>
<el-button type="primary" @click="getList">
<template #icon>
<icon name="el-icon-Search" />
</template>
查询
</el-button>
<el-button @click="reset">重置</el-button>
</div>
</div>
</header>
<div class="table-container">
<el-table :data="list">
<el-table-column
label="预警时间"
prop="createTime"
width="150"
/>
<!-- <el-table-column-->
<!-- label="预警模型"-->
<!-- prop="modelName"-->
<!-- width="160"-->
<!-- show-overflow-tooltip-->
<!-- />-->
<el-table-column
label="涉及单位"
show-overflow-tooltip
width="160"
>
<template #default="{ row }">
<span>{{ row.involveParentDepartName }}</span
><span v-if="row.involveDepartName"
><br />{{ row.involveDepartName }}</span
>
</template>
</el-table-column>
<el-table-column
label="涉及人员"
prop="involvePoliceName"
width="100"
>
<template #default="{ row }">
<div v-if="row.involvePoliceName">
<div
v-for="item in row.involvePoliceName.split(
' '
)"
class="text-nowrap"
>
{{ item }}
</div>
</div>
<div v-else></div>
</template>
</el-table-column>
<el-table-column
label="预警内容"
prop="thingDesc"
show-overflow-tooltip
/>
<el-table-column
label="分发状态"
align="center"
width="130"
>
<template #default="{ row }">
<el-tag
v-if="row.distributionState === '0'"
type="info"
>未分发</el-tag
>
<el-tag
v-if="row.distributionState === '1'"
type="success"
>已分发
<span v-if="row.processingStatus">{{ row.processingStatus ? `(${getDictLable(dict.processingStatus, row.processingStatus)})` : "" }}</span>
</el-tag
>
<el-tag v-if="row.distributionState === '2'"
>已处置{{
row.negativeId ? "" : " (未分发)"
}}</el-tag
>
</template>
</el-table-column>
<el-table-column label="操作" width="180">
<template #default="{ row }">
<el-button
type="primary"
link
@click="handleShowDetail(row)"
>查看详情
</el-button>
<el-button
v-if="row.negativeId"
type="primary"
link
@click="handleAction(row)"
>处理详情
</el-button>
<el-button
type="primary"
link
v-if="row.notificationId"
@click="handleClue(row)"
>查看提醒
</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div v-else></div>
</template>
</el-table-column>
<el-table-column
label="预警内容"
prop="thingDesc"
show-overflow-tooltip
/>
<el-table-column
label="分发状态"
align="center"
width="130"
>
<template #default="{ row }">
<el-tag v-if="row.distributionState === '0'" type="info">未分发</el-tag>
<el-tag v-if="row.distributionState === '1'" type="success">已分发</el-tag>
<el-tag v-if="row.distributionState === '2'">已处置{{ row.negativeId ? '' : '(未分发)' }}</el-tag>
</template>
</el-table-column>
<el-table-column label="操作" width="180">
<template #default="{ row }">
<el-button
type="primary"
link
@click="handleShowDetail(row)"
>查看详情
</el-button
>
<el-button
v-if="row.negativeId"
type="primary"
link
@click="handleAction(row)"
>处理详情
</el-button
>
<el-button
type="primary"
link
v-if="row.notificationId"
@click="handleClue(row)"
>查看提醒
</el-button
>
</template>
</el-table-column>
</el-table>
</div>
<div class="flex end mt-8">
<el-pagination
@size-change="getList"
@current-change="getList"
:current-page="query.current"
:page-sizes="[9, 18, 36]"
v-model:page-size="query.size"
v-model:current-page="query.current"
layout="total, sizes, prev, pager, next"
:total="total"
v-if="list.length"
>
</el-pagination>
</div>
</el-col>
</el-row>
</div>
<div class="flex end mt-8">
<el-pagination
@size-change="getList"
@current-change="getList"
:current-page="query.current"
:page-sizes="[9, 18, 36]"
v-model:page-size="query.size"
v-model:current-page="query.current"
layout="total, sizes, prev, pager, next"
:total="total"
v-if="list.length"
>
</el-pagination>
</div>
</el-col>
</el-row>
</div>
<el-dialog title="预警线索数据详情" v-model="show" width="80vw">
<div class="dialog-container">
<div class="row mt-10">
<div class="col col-6">
<label>预警时间</label>
<span>{{ activeModelClue.createTime }}</span>
</div>
<div class="col col-6">
<label>预警模型</label>
<span>{{ activeModelClue.modelName }}</span>
</div>
<div class="col col-6">
<label>涉及单位</label>
<span>
<el-dialog title="预警线索数据详情" v-model="show" width="80vw">
<div class="dialog-container">
<div class="row mt-10">
<div class="col col-6">
<label>预警时间</label>
<span>{{ activeModelClue.createTime }}</span>
</div>
<div class="col col-6">
<label>预警模型</label>
<span>{{ activeModelClue.modelName }}</span>
</div>
<div class="col col-6">
<label>涉及单位</label>
<span>
<span>{{
activeModelClue.involveParentDepartName
}}</span><span>{{
activeModelClue.involveDepartName ? '/' + activeModelClue.involveDepartName : ''
}}</span>
}}</span
><span>{{
activeModelClue.involveDepartName
? "/" + activeModelClue.involveDepartName
: ""
}}</span>
</span>
</div>
<div class="col col-6">
<label>涉及人员</label>
<span>{{ activeModelClue.involvePoliceName }}</span>
</div>
</div>
<div class="row mt-10">
<div class="col col-24">
<label>预警内容</label>
<span>{{ activeModelClue.thingDesc }}</span>
</div>
</div>
<div class="row mt-10">
<div class="col col-6">
<label>分发状态</label>
<span>{{
getDictLable(
dict.distributionState,
activeModelClue.distributionState
)
}}</span>
</div>
</div>
<h3>详细信息</h3>
<div style="min-height: 200px">
<el-empty description="无数据" />
</div>
</div>
<div class="col col-6">
<label>涉及人员</label>
<span>{{ activeModelClue.involvePoliceName }}</span>
</div>
</div>
<div class="row mt-10">
<div class="col col-24">
<label>预警内容</label>
<span>{{ activeModelClue.thingDesc }}</span>
</div>
</div>
<div class="row mt-10">
<div class="col col-6">
<label>分发状态</label>
<span>{{
getDictLable(
dict.distributionState,
activeModelClue.distributionState
)
}}</span>
</div>
</div>
<h3>详细信息</h3>
<div style="min-height: 200px">
<el-empty description="无数据"/>
</div>
</div>
</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
</el-dialog>
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" :z-index="index"/>
</div>
</el-form-item>
</el-row>
</el-form>
<footer class="flex end">
<el-button @click="dialogShow = false">关闭</el-button>
</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"
:z-index="index"
/>
</div>
</el-form-item>
</el-row>
</el-form>
<footer class="flex end">
<el-button @click="dialogShow = false">关闭</el-button>
</footer>
</el-dialog>
<negative-dialog
v-model="negativeShow"
:id="activeNegativeId"
@close="negativeShow = false"
/>
<negative-dialog
v-model="negativeShow"
:id="activeNegativeId"
@close="negativeShow = false"
/>
</template>
<script lang="ts" setup>
import {listModelClue} from "@/api/sensitivePerception/modelClue";
import {alarmDetails} from "@/api/work/alarm"
import { listModelClue } from "@/api/sensitivePerception/modelClue";
import { alarmDetails } from "@/api/work/alarm";
import useCatchStore from "@/stores/modules/catch";
import {getDictLable} from "@/utils/util";
import { getDictLable } from "@/utils/util";
const catchStore = useCatchStore();
const dict = catchStore.getDicts(["distributionState", "handleState"]);
const dict = catchStore.getDicts(["distributionState", "handleState", "processingStatus",]);
const query = ref({});
const list = ref([]);
const total = ref(0);
let showData = ref({})
let dialogShow = ref(false)
let previewList = ref([])
let showData = ref({});
let dialogShow = ref(false);
let previewList = ref([]);
const handleClue = (row) => {
alarmDetails(row.notificationId).then(res => {
showData.value = res
let arr = []
if(res.files != undefined) {
res.files.forEach(item => {
arr.push(item.path)
})
}
previewList.value = arr
dialogShow.value = true
})
}
alarmDetails(row.notificationId).then((res) => {
showData.value = res;
let arr = [];
if (res.files != undefined) {
res.files.forEach((item) => {
arr.push(item.path);
});
}
previewList.value = arr;
dialogShow.value = true;
});
};
onMounted(() => {
if (route.query.modelId) {
@ -330,46 +368,45 @@ const route = useRoute();
watch(
() => route.query.modelId,
(val) => {
query.value.modelIds = [val];
query.value.modelIds = [val];
}
);
watch(
() => query.value.modelIds,
(newVal, oldVal) => {
if (newVal !== oldVal) {
query.value.current = 1;
getList();
}
if (newVal !== oldVal) {
query.value.current = 1;
getList();
}
}
);
function getList() {
listModelClue(query.value).then((data) => {
list.value = data.records;
total.value = data.total;
});
listModelClue(query.value).then((data) => {
list.value = data.records;
total.value = data.total;
});
}
function reset() {
query.value = {};
getList();
query.value = {};
getList();
}
const show = ref(false);
const activeModelClue = ref({});
function handleShowDetail(row) {
activeModelClue.value = row;
show.value = true;
activeModelClue.value = row;
show.value = true;
}
const activeNegativeId = ref('')
const negativeShow = ref(false)
const activeNegativeId = ref("");
const negativeShow = ref(false);
function handleAction(row) {
negativeShow.value = true;
activeNegativeId.value = row.negativeId;
negativeShow.value = true;
activeNegativeId.value = row.negativeId;
}
</script>
<style lang="scss" scoped>

15
src/views/sensitivePerception/ModelClueManual.vue

@ -275,7 +275,7 @@
</el-dialog>
<el-dialog title="任务分发" v-model="distributeShow" width="50vw" top="5vh">
<el-form :label-width="120" ref="formRef" :model="form">
<el-form :label-width="120" ref="formRef" :model="form" v-loading="submitLoading">
<el-form-item
label="任务名称"
prop="taskName"
@ -290,7 +290,7 @@
placeholder="请输入"
/>
</el-form-item>
<el-form-item label="指定办理单位" prop="departId">
<el-form-item label="指定办理单位" prop="handleDepartId">
<div class="flex gap">
<div style="width: 280px">
<depart-tree-select v-model="form.handleDepartId" />
@ -459,6 +459,7 @@
type="primary"
size="large"
@click="handleSubmitManuelModelClueTask"
v-loading="submitLoading"
>确认下发</el-button
>
</footer>
@ -632,10 +633,18 @@ function handleRemoveProblem(index) {
form.value.problems.splice(index, 1)
}
const submitLoading = ref(false)
async function handleSubmitManuelModelClueTask() {
await formRef.value.validate();
form.value.modelClues = filterManualList.value;
await manuelModelClueTask(form.value);
submitLoading.value = true
try {
await manuelModelClueTask(form.value);
} catch(e) {
submitLoading.value = false
return
}
submitLoading.value = false
feedback.msgSuccess("下发成功");
form.value = {
modelClues: [],

109
src/views/work/Alarm.vue

@ -49,13 +49,8 @@
}"
>
<depart-tree-select
v-model="formData.involveDepartId"
v-model="query.involveDepartId"
:check-strictly="true"
@node-click="
(row) =>
(formData.involveDepartName =
row.shortName)
"
/>
</el-form-item>
</el-col>
@ -99,15 +94,10 @@
<el-table-column
label="被通知单位"
prop="notificationDepartName"
width="90"
width="100"
show-overflow-tooltip
/>
<el-table-column
label="被通知民警"
prop="policeName"
width="90"
/>
<el-table-column label="提醒内容" prop="alarmContent" />
<el-table-column label="提醒内容" prop="alarmContent" show-overflow-tooltip />
<el-table-column label="回复情况" width="110">
<template #default="{ row }">
<el-text v-if="row.replyState == 1" class="mx-1"
@ -126,13 +116,6 @@
@click="showFiles(row)"
>查看详情
</el-button>
<el-button
type="primary"
link
@click="handleEdit(row)"
v-perms="['negative:edit']"
>立即回复
</el-button>
</template>
</el-table-column>
</el-table>
@ -151,66 +134,7 @@
</el-pagination>
</div>
</main>
<el-dialog v-model="editShow" title="回复问题" width="900px">
<el-form label-width="148" :model="formData" ref="formRef">
<el-row>
<el-col :span="12">
<el-form-item label="提醒类型">
<div>{{ formData.alarmType }}</div>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="提醒时间">
<el-text>{{ formData.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>{{
formData.notificationDepartName
}}</el-text>
</el-form-item>
</el-col>
<el-col :span="12" v-if="formData.policeName != undefined">
<el-form-item label="被通知民警">
<el-text>{{ formData.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">{{
formData.alarmContent
}}</el-text>
</el-form-item>
</el-row>
<el-form-item
label="回复问题"
:rules="{
required: true,
message: '请输入回复内容',
trigger: ['blur'],
}"
>
<el-input
type="textarea"
placeholder="请输入回复内容"
v-model="formData.replyResultContent"
:autosize="{ minRows: 6 }"
/>
</el-form-item>
</el-form>
<footer class="flex end">
<el-button @click="editShow = false" size="large"
>取消</el-button
>
<el-button type="primary" @click="handleSumbit" size="large"
>确定
</el-button>
</footer>
</el-dialog>
<el-dialog title="查看详情" v-model="dialogShow" width="800">
<el-form :model="showData" :label-width="120" ref="fomrRef">
@ -288,6 +212,7 @@
</footer>
</el-dialog>
</div>
</template>
<script setup>
import moment from "moment";
@ -295,7 +220,6 @@ import { Clock } from "@element-plus/icons-vue";
import {
alarmNotificationPages,
alarmNotificationReply,
alarmFiles,
} from "@/api/work/alarm";
import feedback from "@/utils/feedback";
@ -352,9 +276,6 @@ function getList() {
param["startTime"] = query.value.discoveryTime[0];
param["endTime"] = query.value.discoveryTime[1];
}
if (formData.value.involveDepartId != undefined) {
param["notificationDepartCode"] = formData.value.involveDepartId;
}
if (query.value.alarmContent != undefined) {
param["alarmContent"] = query.value.alarmContent;
}
@ -423,26 +344,6 @@ function handleAction(row) {
const router = useRouter();
const editShow = ref(false);
const formData = ref({});
const formRef = ref(null);
function handleEdit(row) {
editShow.value = true;
formData.value = { ...row };
}
async function handleSumbit() {
await formRef.value.validate();
let data = {
replyResultContent: formData.value.replyResultContent,
id: formData.value.id,
};
await alarmNotificationReply(data);
editShow.value = false;
feedback.msgSuccess("操作成功");
getList();
}
</script>
<style lang="scss" scoped>
.form-row {

9
src/views/work/Query.vue

@ -444,6 +444,15 @@
"
>转待办</el-button
>
<el-button
type="primary"
link
v-if="
row.processingStatus ===
ProcessingStatus.COMPLETED
"
>抽查</el-button
>
</template>
</el-table-column>
</el-table>

Loading…
Cancel
Save