Browse Source

fix: 修复BUG

main
wxc 1 year ago
parent
commit
6fdd1ac451
  1. 9
      .idea/libraries/v2.xml
  2. 6
      .idea/misc.xml
  3. 8
      .idea/modules.xml
  4. 9
      .idea/supervision-vue.iml
  5. 6
      .idea/vcs.xml
  6. 7
      src/api/sensitivePerception/modelClueTask.ts
  7. 7
      src/api/work/negative.ts
  8. 30
      src/components/file/list.vue
  9. 12
      src/components/file/upload-group.vue
  10. 85
      src/components/home/work/my-fav.vue
  11. 89
      src/components/home/work/my-todo.vue
  12. 2
      src/components/negative/add.vue
  13. 1
      src/components/negative/dialog.vue
  14. 14
      src/components/negative/verify-description.vue
  15. 89
      src/components/negative/verify.vue
  16. 4
      src/style/public.scss
  17. 14
      src/views/sensitivePerception/DepartNegative.vue
  18. 25
      src/views/sensitivePerception/ModelClueTask.vue
  19. 10
      src/views/sensitivePerception/PoliceNegative.vue
  20. 41
      src/views/work/Done.vue
  21. 273
      src/views/work/Query.vue

9
.idea/libraries/v2.xml

@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="v2">
<CLASSES>
<root url="jar://$PROJECT_DIR$/v2.zip!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

6
.idea/misc.xml

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="17" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>

8
.idea/modules.xml

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/supervision-vue.iml" filepath="$PROJECT_DIR$/.idea/supervision-vue.iml" />
</modules>
</component>
</project>

9
.idea/supervision-vue.iml

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

6
.idea/vcs.xml

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>

7
src/api/sensitivePerception/modelClueTask.ts

@ -12,3 +12,10 @@ export function listModelClueByDepart(taskId) {
url: `/model/clue/tasks/${taskId}/byDepart`
});
}
export function listModelClues(taskId, query) {
return request.get({
url: `/model/clue/tasks/${taskId}/clues`,
query
});
}

7
src/api/work/negative.ts

@ -22,6 +22,13 @@ export function addNegative(body) {
});
}
export function updateNegative(body) {
return request.put({
url: `/negative`,
body
});
}
export function negativeExecute(id, body) {
return request.post({
url: `/negative/${id}/execute`,

30
src/components/file/list.vue

@ -110,11 +110,11 @@
<template
v-else-if="getFileType(activeFile.fileName) === FileType.MP3"
>
<audio
controls
style="width: 50vw"
>
<source :src="`${BASE_PATH}/file/stream/${activeFile.filePath}`" type="audio/mp3">
<audio controls style="width: 50vw">
<source
:src="`${BASE_PATH}/file/stream/${activeFile.filePath}`"
type="audio/mp3"
/>
</audio>
</template>
<template
@ -128,7 +128,10 @@
</video>
</template>
<template
v-else-if="getFileType(activeFile.fileName) === FileType.WORD && activeFile.fileName.toLocaleLowerCase().endsWith('.docx')"
v-else-if="
getFileType(activeFile.fileName) === FileType.WORD &&
activeFile.fileName.toLocaleLowerCase().endsWith('.docx')
"
>
<vue-office-docx
:src="`${BASE_PATH}/file/stream/${activeFile.filePath}`"
@ -144,7 +147,10 @@
</div>
</template>
<template
v-else-if="getFileType(activeFile.fileName) === FileType.EXCEL && activeFile.fileName.toLocaleLowerCase().endsWith('.xlsx')"
v-else-if="
getFileType(activeFile.fileName) === FileType.EXCEL &&
activeFile.fileName.toLocaleLowerCase().endsWith('.xlsx')
"
>
<vue-office-excel
:src="`${BASE_PATH}/file/stream/${activeFile.filePath}`"
@ -165,9 +171,13 @@
icon="error"
title="不支持预览"
sub-title="该文件格式暂不支持预览,请下载预览"
style="background: #fff; width: 400px"
style="background: #fff; width: 600px; height: 400px"
@click.stop
></el-result>
>
<template #extra>
<el-button type="primary" text size="large" @click="download">下载文件</el-button>
</template>
</el-result>
</div>
</template>
<div class="file-number" @click.stop>
@ -200,7 +210,7 @@
class="download-btn"
@click="download"
type="primary"
size="large"
plain
>
<template #icon>
<icon name="el-icon-Download" :size="20" />

12
src/components/file/upload-group.vue

@ -27,7 +27,8 @@
<el-icon class="el-icon--upload"><upload-filled /></el-icon>
<div class="el-upload__text">
<div>将文件拖拽到此处或<em>点击上传</em></div>
<div class="text-small">文件大小限制为 100MB</div>
<div class="text-small">文件类型支持图片/录音/MP4/PDF/WORD/EXCEL/压缩文件文件大小限制为 100MB</div>
<div class="text-small">如遇到无法正常上传的情况请将文件压缩之后再上传</div>
</div>
</el-upload>
<h4>未分类文件</h4>
@ -203,6 +204,9 @@ const emit = defineEmits(["update:files"]);
const show = ref(false);
const fileList = ref(props.files);
watch(() => props.files, (val => {
fileList.value = val
}))
const fileClasss = ref([]);
if (props.problemSourcesCode === ProblemSources.JWDC) {
@ -312,4 +316,10 @@ h4 {
.file-list-item_active {
background: #f1f3ff;
}
.img-box {
width: 40px;
height: 40px;
background-position: center;
background-size: cover;
}
</style>

85
src/components/home/work/my-fav.vue

@ -3,8 +3,8 @@
<el-table :data="favs">
<el-table-column type="expand">
<template #default="{ row }">
<div class="row mt-10">
<div class="col col-6">
<div class="row mt-12">
<div class="col col-12">
<label>样本源头编号</label>
<span>{{ row.originId }}</span>
</div>
@ -14,48 +14,54 @@
</div>
<div class="col col-6">
<label>问题发生时间</label>
<span>{{ row.happenTime }}</span>
</div>
<div class="col col-6">
<label>问题来源</label>
<span>{{ row.problemSources }}</span>
</div>
<span>{{ row.happenTime || "/" }}</span>
</div>
<div class="row mt-10">
<div class="col col-6">
<label>投诉反映人</label>
<span>{{ row.responderName }}</span>
<label>问题录入时间</label>
<span>{{ row.crtTime || "/" }}</span>
</div>
<div class="col col-6">
<label>联系电话</label>
<span>{{ row.contactPhone }}</span>
</div>
<label>问题来源</label>
<span>{{ row.problemSources }}</span>
</div>
<div class="row mt-10">
<div class="col col-6">
<label>业务类别</label>
<span>{{ row.businessTypeName }}</span>
</div>
<div class="col col-6">
<label>涉及警种</label>
<span>{{ row.policeTypeName || "/" }}</span>
</div>
<div class="col col-12">
<label>涉嫌问题</label>
<span>{{}}</span>
<span>{{
getInvolveProblem(row.involveProblem) || "/"
}}</span>
</div>
<div class="col col-6" v-if="row.responderName">
<label>投诉反映人</label>
<span>{{ row.responderName }}</span>
</div>
<div class="row mt-10">
<div class="col col-6">
<label>涉及警种</label>
<span>{{ row.policeTypeName }}</span>
<div class="col col-6" v-if="row.contactPhone">
<label>联系电话</label>
<span>{{ row.contactPhone }}</span>
</div>
<div class="col col-6">
<label>涉及单位</label>
<span>{{ row.involveDepartName }}</span>
<span>{{ row.involveDepartName || "/" }}</span>
</div>
</div>
<div class="row mt-12">
<div class="col col-24">
<label>事情简要描述</label>
<span>{{ row.thingDesc }}</span>
</div>
</div>
</template>
</el-table-column>
<el-table-column
label="问题发生时间"
prop="happenTime"
label="问题发时间"
prop="discoveryTime"
width="164"
/>
<el-table-column
@ -68,23 +74,40 @@
prop="businessTypeName"
width="98"
/>
<el-table-column label="涉嫌问题" width="100" />
<el-table-column label="涉嫌问题" width="100" >
<template #default="{ row }">
<span>{{
getInvolveProblem(row.involveProblem)
}}</span>
</template>
</el-table-column>
<el-table-column
label="问题内容"
prop="thingDesc"
show-overflow-tooltip
/>
<el-table-column label="办理状态" width="98">
<el-table-column label="办理状态" width="140" align="center">
<template #default="{ row }">
<el-tag>{{
<el-tag
>{{
getDictLable(
dict.processingStatus,
row.processingStatus
)
}}</el-tag>
}}</el-tag
>
</template>
</el-table-column>
<el-table-column label="流程节点" width="120" show-overflow-tooltip>
<template #default="{ row }">
<span>{{
flowNodes.filter(
(item) => item.flowKey === row.flowKey
)[0]?.flowName
}}</span>
</template>
</el-table-column>
<el-table-column label="流程节点" prop="" width="98" />
<el-table-column label="操作" width="98">
<template #default="{ row }">
<el-button type="primary" link @click="handleAction(row)"
@ -104,10 +127,12 @@
</template>
<script setup>
import { listFav } from "@/api/work/fav";
import { getDictLable } from "@/utils/util";
import { getDictLable, getInvolveProblem } from "@/utils/util";
import useCatchStore from "@/stores/modules/catch";
const dict = useCatchStore().getDicts(["processingStatus"]);
const catchStore = useCatchStore();
const dict = catchStore.getDicts(["processingStatus"]);
const flowNodes = catchStore.getFlowNodes();
const favs = ref([]);

89
src/components/home/work/my-todo.vue

@ -22,8 +22,7 @@
v-perms="['negative:add']"
plain
class="add-btn"
><template #icon>
<icon name="el-icon-Plus" /> </template
><template #icon> <icon name="el-icon-Plus" /> </template
>问题下发</el-button
>
</div>
@ -31,8 +30,8 @@
<el-table :data="todos">
<el-table-column type="expand">
<template #default="{ row }">
<div class="row mt-10">
<div class="col col-6">
<div class="row mt-12">
<div class="col col-12">
<label>样本源头编号</label>
<span>{{ row.originId }}</span>
</div>
@ -42,41 +41,47 @@
</div>
<div class="col col-6">
<label>问题发生时间</label>
<span>{{ row.happenTime }}</span>
</div>
<div class="col col-6">
<label>问题来源</label>
<span>{{ row.problemSources }}</span>
</div>
<span>{{ row.happenTime || "/" }}</span>
</div>
<div class="row mt-10">
<div class="col col-6">
<label>投诉反映人</label>
<span>{{ row.responderName }}</span>
<label>问题录入时间</label>
<span>{{ row.crtTime || "/" }}</span>
</div>
<div class="col col-6">
<label>联系电话</label>
<span>{{ row.contactPhone }}</span>
</div>
<label>问题来源</label>
<span>{{ row.problemSources }}</span>
</div>
<div class="row mt-10">
<div class="col col-6">
<label>业务类别</label>
<span>{{ row.businessTypeName }}</span>
</div>
<div class="col col-6">
<label>涉及警种</label>
<span>{{ row.policeTypeName || "/" }}</span>
</div>
<div class="col col-12">
<label>涉嫌问题</label>
<span>{{}}</span>
<span>{{
getInvolveProblem(row.involveProblem) || "/"
}}</span>
</div>
<div class="col col-6" v-if="row.responderName">
<label>投诉反映人</label>
<span>{{ row.responderName }}</span>
</div>
<div class="row mt-10">
<div class="col col-6">
<label>涉及警种</label>
<span>{{ row.policeTypeName }}</span>
<div class="col col-6" v-if="row.contactPhone">
<label>联系电话</label>
<span>{{ row.contactPhone }}</span>
</div>
<div class="col col-6">
<label>涉及单位</label>
<span>{{ row.involveDepartName }}</span>
<span>{{ row.involveDepartName || "/" }}</span>
</div>
</div>
<div class="row mt-12">
<div class="col col-24">
<label>事情简要描述</label>
<span>{{ row.thingDesc }}</span>
</div>
</div>
</template>
@ -84,12 +89,13 @@
<el-table-column
label="问题发现时间"
prop="discoveryTime"
width="164"
width="156"
/>
<el-table-column
label="问题来源"
prop="problemSources"
width="84"
width="108"
show-overflow-tooltip
/>
<el-table-column
label="业务类别"
@ -101,18 +107,30 @@
prop="thingDesc"
show-overflow-tooltip
/>
<el-table-column label="办理状态" width="98">
<el-table-column label="办理状态" width="140" align="center">
<template #default="{ row }">
<el-tag>{{
<el-tag
>{{
getDictLable(
dict.processingStatus,
row.processingStatus
)
}}</el-tag>
}}{{
row.extensionApplyFlag ? "" : "(延期申请)"
}}</el-tag
>
</template>
</el-table-column>
<el-table-column label="流程节点" prop="" width="98" />
<el-table-column label="操作" width="98">
<el-table-column label="流程节点" width="120" show-overflow-tooltip>
<template #default="{ row }">
<span>{{
flowNodes.filter(
(item) => item.flowKey === row.flowKey
)[0]?.flowName
}}</span>
</template>
</el-table-column>
<el-table-column label="操作" width="90">
<template #default="{ row }">
<el-button
type="primary"
@ -134,17 +152,16 @@
:disabled="false"
/>
<negative-add
v-model="addShow"
@close="addShow = false"
/>
<negative-add v-model="addShow" @close="addShow = false" />
</template>
<script setup>
import { listTodos } from "@/api/work";
import { getDictLable } from "@/utils/util";
import { getDictLable, getInvolveProblem } from "@/utils/util";
import useCatchStore from "@/stores/modules/catch";
const dict = useCatchStore().getDicts(["processingStatus"]);
const catchStore = useCatchStore();
const dict = catchStore.getDicts(["processingStatus"]);
const flowNodes = catchStore.getFlowNodes();
const props = defineProps({
data: {

2
src/components/negative/add.vue

@ -11,7 +11,7 @@
ref="formRef"
style="padding: 0 16px"
>
<h2 style="">问题信息</h2>
<h2>问题信息</h2>
<div class="add-negation-container">
<el-row>

1
src/components/negative/dialog.vue

@ -263,7 +263,6 @@ const setActionItemRef = (actionKey, el) => {
const activeAction = ref({});
async function handleExecute(action, data) {
if (action.validateForm) {
debugger
if (action.actionKey !== FlowActionEnum.SAVE) {
try {
data = await componentRef.value.validate();

14
src/components/negative/verify-description.vue

@ -42,7 +42,7 @@
</div>
<div class="col col-6">
<label>人员属性</label>
<span>{{ blame.ivPersonType }}</span>
<span>{{ getDictLable(dict.personType, blame.ivPersonTypeCode) }}</span>
</div>
<div class="col col-6" v-if="blame.superviseMeasuresCode">
<label>督察措施</label>
@ -50,7 +50,7 @@
</div>
</div>
<div class="row" v-for="(problem, index) in blame.problems">
<div class="row" v-for="(problem, index) in blame.problems" :key="index">
<div class="col col-24">
<label>问题类型{{ index + 1 }}</label>
<span>{{ problem.oneLevelContent }} / {{ problem.twoLevelContent }} / {{ problem.threeLevelContent }}</span>
@ -61,7 +61,7 @@
<label>主观方面</label>
<span>{{ blame.subjectiveAspectName }}</span>
</div>
<div class="col col-6">
<div class="col col-6" v-if="blame.responsibilityTypeName">
<label>责任类别</label>
<span>{{ blame.responsibilityTypeName }}</span>
</div>
@ -94,7 +94,7 @@
<span>{{ blame.leadIdCode }}</span>
</div>
<div class="col col-6">
<div class="col col-6" v-if="blame.leadResponsibilityTypeName">
<label>责任类别</label>
<span>{{ blame.leadResponsibilityTypeName }}</span>
</div>
@ -124,10 +124,10 @@
</div>
<div class="col col-6">
<label>人员属性</label>
<span>{{ blame.ivPersonType }}</span>
<span>{{ getDictLable(dict.personType, blame.ivPersonTypeCode) }}</span>
</div>
</div>
<div class="row" v-for="problem in blame.problems">
<div class="row" v-for="problem in blame.problems" :key="problem">
<div class="col col-6">
<label>问题类型</label>
<span>{{ problem.oneLevelContent }}</span>
@ -168,7 +168,7 @@ import {
import { getDictLable } from "@/utils/util";
import useCatchStore from "@/stores/modules/catch";
const dict = useCatchStore().getDicts(["accountabilityTarget"]);
const dict = useCatchStore().getDicts(["accountabilityTarget", "personType"]);
const activeNames = ref(['verify', 'involved_department', 'completionAttachment'])
const negative = inject('negative');

89
src/components/negative/verify.vue

@ -2,7 +2,7 @@
<h5>核查办理</h5>
<el-form :label-width="146" :model="form" ref="formRef">
<el-row>
<el-col :span="24">
<el-col :span="12">
<el-form-item label="涉及案件/警情编号" prop="caseNumber">
<el-input
v-model="form.caseNumber"
@ -11,6 +11,21 @@
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="涉及单位"
prop="involveDepartId"
:rules="{
required: true,
message: '请选择涉及单位',
trigger: ['blur'],
}"
>
<div style="width: 280px">
<depart-tree-select v-model="form.involveDepartId" />
</div>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="核查情况"
@ -177,10 +192,7 @@
"
v-model="item.blameEmpNo"
@change="
(police) => {
item.blameName = police.name;
item.blameIdCode = police.idCode;
}
(police) => handleChangePolice(police, item)
"
/>
</el-form-item>
@ -347,6 +359,7 @@
message: '请选择责任类别',
trigger: ['blur'],
}"
v-if="form.checkStatus !== InspectCase.FALSE"
>
<el-radio-group
v-model="item.responsibilityTypeCode"
@ -642,6 +655,7 @@
message: '请选择责任类别',
trigger: ['blur'],
}"
v-if="form.checkStatus !== InspectCase.FALSE"
>
<el-radio-group
v-model="item.leadResponsibilityTypeCode"
@ -839,14 +853,6 @@
>
<el-radio-group
v-model="item.ivPersonTypeCode"
@change="
(val) =>
(item.ivPersonType =
dict.personType.filter(
(item) =>
item.dictValue === val
)[0].dictLabel)
"
>
<el-radio :value="PersonType.POLICE"
>民警</el-radio
@ -1010,6 +1016,7 @@
message: '请选择责任类别',
trigger: ['blur'],
}"
v-if="form.checkStatus !== InspectCase.FALSE"
>
<el-radio-group
v-model="item.responsibilityTypeCode"
@ -1155,14 +1162,15 @@ const dictContent = catchSotre.getDictContent();
const negative = inject("negative");
const form = ref({});
getFormData()
getFormData();
watch(negative, () => {
getFormData()
getFormData();
});
function getFormData() {
form.value = {
involveDepartId: negative.value.involveDepartId,
caseNumber: negative.value.caseNumber,
checkStatus: negative.value.checkStatus,
checkStatusName: negative.value.checkStatusName,
@ -1260,47 +1268,6 @@ function handleAccountabilityTargetChange(val) {
}
}
const fileClasss = [
{
id: 1,
classTitle: "容错免责样本申请表",
classRemarks: "",
},
{
id: 2,
classTitle:
"针对群众不满意原因,提供无过错的音视频、微信或短信截图等证明资料",
classRemarks: "",
},
{
id: 3,
classTitle: "110、122接处警开始、结束及处置过程中的视频截图",
classRemarks: "",
},
{
id: 4,
classTitle: "自动回访不满意后所对的回访录音",
classRemarks: "",
},
{
id: 5,
classTitle: "单位/个人所做其他工作",
classRemarks: "",
},
];
function validatFiles(rule, value, callback) {
const keys = Object.keys(value);
if (keys.length === 0) {
return callback(new Error("请上传佐证材料"));
}
const sum = keys.map((key) => value[key].length).reduce((a, b) => a + b, 0);
if (sum === 0) {
return callback(new Error("请上传佐证材料"));
}
return callback();
}
function handleChangeCheckStatus(val, item) {
form.value.checkStatusName = dict.inspectCase.filter(
(item) => item.dictValue === val
@ -1313,6 +1280,14 @@ function handleChangeCheckStatus(val, item) {
}
}
function handleChangePolice(police, item) {
console.log(police)
item.blameName = police.name;
item.blameIdCode = police.idCode;
item.ivPersonTypeCode = police.personType
}
function handleChangeSubjectiveAspect(val, item) {
if (val === SubjectiveAspect.OTHER) {
item.subjectiveAspectName = "";
@ -1348,7 +1323,7 @@ function getData() {
defineExpose({
validate,
getData
getData,
});
</script>
<style lang="scss" scoped>

4
src/style/public.scss

@ -389,7 +389,9 @@ svg+span {
top: 0;
right: 0;
bottom: 0;
background-color: rgba(0, 0, 0, 0.8);
background-color: #4d515d80;
-webkit-backdrop-filter: blur(10px);
backdrop-filter: blur(10px);
z-index: 999;
}

14
src/views/sensitivePerception/DepartNegative.vue

@ -94,7 +94,7 @@
type="primary"
link
@click="handleShowProfile(row)"
>问题画像</el-button
>问题详情</el-button
>
</template>
</el-table-column>
@ -117,7 +117,7 @@
</div>
<el-dialog
title="单位问题画像"
title="单位问题详情"
v-model="show"
width="85vw"
top="1vh"
@ -137,7 +137,7 @@
<el-scrollbar
max-height="calc(98vh - 120px)"
v-loading="loading"
element-loading-text="单位问题画像加载中..."
element-loading-text="单位问题详情加载中..."
>
<main>
<el-row class="mb-20">
@ -202,7 +202,7 @@
</el-col>
<el-col :span="18">
<el-row>
<el-col :span="12" class="mb-20">
<el-col :span="12" class="mb-20" v-if="negativeInfo.jcj110BusinessSize || negativeInfo.jcj110Size">
<description-pair
label1="110接处警量"
label2="问题数"
@ -212,7 +212,7 @@
:value2="negativeInfo.jcj110Size"
/>
</el-col>
<el-col :span="12">
<el-col :span="12" v-if="negativeInfo.jcj122BusinessSize || negativeInfo.jcj122Size">
<description-pair
label1="122接处警量"
label2="问题数"
@ -298,7 +298,7 @@
<el-row class="mb-20">
<el-col :span="8">
<h5>个人问题排名</h5>
<el-scrollbar max-height="500px">
<el-scrollbar max-height="300px">
<datav-chart-bar
size="small"
:data="policeBarList"
@ -310,7 +310,7 @@
<el-col :span="8">
<h5>突出问题排名</h5>
<el-scrollbar max-height="500px">
<el-scrollbar max-height="300px">
<datav-chart-bar
size="small"
:data="problemTypeBarList"

25
src/views/sensitivePerception/ModelClueTask.vue

@ -76,6 +76,7 @@
label="涉及单位数"
align="center"
prop="departSize"
width="130"
/>
<el-table-column
label="涉及人数"
@ -90,6 +91,12 @@
@click="handleStatisticsShow(row.id)"
>任务统计</el-button
>
<el-button
type="primary"
link
@click="handleCluesShow(row.id)"
>查看详情</el-button
>
</template>
</el-table-column>
</el-table>
@ -152,9 +159,13 @@
</div>
</div>
</el-dialog>
<el-dialog title="分发详情" v-model="show" width="80vw">
</el-dialog>
</template>
<script lang="ts" setup>
import { listModelClueTask, listModelClueByDepart } from "@/api/sensitivePerception/modelClueTask";
import { listModelClueTask, listModelClueByDepart, listModelClues } from "@/api/sensitivePerception/modelClueTask";
import useCatchStore from "@/stores/modules/catch";
import { getDictLable } from "@/utils/util";
@ -195,6 +206,18 @@ async function handleStatisticsShow(id) {
departList.value = data;
statisticsShow.value = true;
}
const show = ref(false)
const modelClues = ref([])
const modelClueQuery = ref({
current: 1,
size: 10
})
async function handleCluesShow(id) {
const data = await listModelClues(id, modelClueQuery.value)
modelClues.value = data.records;
show.value = true;
}
</script>
<style lang="scss" scoped>
</style>

10
src/views/sensitivePerception/PoliceNegative.vue

@ -96,7 +96,7 @@
type="primary"
link
@click="handleShowProfile(row)"
>问题画像</el-button
>问题详情</el-button
>
</template>
</el-table-column>
@ -119,7 +119,7 @@
</div>
<el-dialog
title="个人问题画像"
title="个人问题详情"
v-model="show"
width="85vw"
top="1vh"
@ -139,7 +139,7 @@
<el-scrollbar
max-height="calc(98vh - 120px)"
v-loading="loading"
element-loading-text="个人问题画像加载中..."
element-loading-text="个人问题详情加载中..."
>
<main>
<el-row class="mb-20">
@ -215,7 +215,7 @@
</el-col>
<el-col :span="18">
<el-row>
<el-col :span="12" class="mb-20">
<el-col :span="12" class="mb-20" v-if="negativeInfo.jcj110BusinessSize || negativeInfo.jcj110Size">
<description-pair
label1="110接处警量"
label2="问题数"
@ -225,7 +225,7 @@
:value2="negativeInfo.jcj110Size"
/>
</el-col>
<el-col :span="12">
<el-col :span="12" v-if="negativeInfo.jcj122BusinessSize || negativeInfo.jcj122Size">
<description-pair
label1="122接处警量"
label2="问题数"

41
src/views/work/Done.vue

@ -79,33 +79,40 @@
</div>
<div class="col col-6">
<label>问题发生时间</label>
<span>{{ row.happenTime }}</span>
<span>{{ row.happenTime || "/" }}</span>
</div>
<div class="col col-6">
<label>问题来源</label>
<span>{{ row.problemSources }}</span>
<label>问题录入时间</label>
<span>{{ row.crtTime }}</span>
</div>
</div>
<div class="row mt-10">
<div class="col col-6">
<label>投诉反映人</label>
<span>{{ row.responderName }}</span>
<label>问题来源</label>
<span>{{ row.problemSources }}</span>
</div>
<div class="col col-6">
<label>联系电话</label>
<span>{{ row.contactPhone }}</span>
<label>业务类别</label>
<span>{{ row.businessTypeName }}</span>
</div>
<div class="col col-12">
<label>涉嫌问题</label>
<span>{{
getInvolveProblem(row.involveProblem)
}}</span>
</div>
</div>
<div class="row mt-10">
<div class="col col-6">
<label>业务类别</label>
<span>{{ row.businessTypeName }}</span>
<label>投诉反映人</label>
<span>{{ row.responderName }}</span>
</div>
<div class="col col-6">
<label>涉嫌问题</label>
<span>{{ getInvolveProblem(row.involveProblem) }}</span>
<label>联系电话</label>
<span>{{ row.contactPhone }}</span>
</div>
</div>
<div class="row mt-10">
<div class="col col-6">
<label>涉及警种</label>
@ -113,7 +120,15 @@
</div>
<div class="col col-6">
<label>涉及单位</label>
<span>{{ row.involveDepartName }}</span>
<span>{{
row.involveDepartName || "/"
}}</span>
</div>
</div>
<div class="row mt-10">
<div class="col col-24">
<label>事情简要描述</label>
<span>{{ row.thingDesc }}</span>
</div>
</div>
</template>
@ -129,7 +144,7 @@
<el-table-column label="问题内容" prop="thingDesc" show-overflow-tooltip />
<el-table-column label="涉及单位" show-overflow-tooltip>
<template #default="{ row }">
<span>{{row.involveDepartName}}</span>
<span>{{ row.involveDepartName }}</span>
</template>
</el-table-column>
<el-table-column label="办理单位" show-overflow-tooltip>

273
src/views/work/Query.vue

@ -361,14 +361,6 @@
>办理超时
{{ formatTimeText(row.handleTimeout) }}</el-tag
>
<el-tag
v-else-if="
row.processingStatus ===
ProcessingStatus.COMPLETED
"
type="success"
>未超时</el-tag
>
</template>
</el-table-column>
<el-table-column label="办理状态" width="110">
@ -408,7 +400,7 @@
}}</span>
</template>
</el-table-column>
<el-table-column label="操作" width="120">
<el-table-column label="操作" width="160">
<template #default="{ row }">
<el-button
type="primary"
@ -416,6 +408,13 @@
@click="handleAction(row)"
>详情</el-button
>
<el-button
type="primary"
link
@click="handleEdit(row)"
v-perms="['negative:edit']"
>编辑</el-button
>
<el-button
type="danger"
link
@ -448,15 +447,246 @@
:id="activeNegativeId"
@close="show = false"
/>
<el-dialog v-model="editShow" title="问题编辑" width="900px">
<el-form
label-width="148"
:model="formData"
ref="formRef"
>
<div style="margin-bottom: 80px">
<el-row>
<el-col :span="12">
<el-form-item
label="问题来源"
prop="problemSourcesCode"
:rules="{
required: true,
message: '请选择问题来源',
trigger: ['blur'],
}"
>
<dict-select
name="problemSources"
v-model="formData.problemSourcesCode"
@change="
(nodeData) =>
(formData.problemSources = nodeData.label)
"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="业务类别"
prop="businessTypeCode"
:rules="{
required: true,
message: '请选择业务类别',
trigger: ['blur'],
}"
>
<el-select
v-model="formData.businessTypeCode"
@change="
(val) =>
(formData.businessTypeName =
dict.businessType.filter(
(item) => item.dictValue === val
)[0].dictLabel)
"
>
<el-option
v-for="item in dict.businessType"
:key="item.id"
:label="item.dictLabel"
:value="item.dictValue"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="涉及案件/警情编号"
prop="caseNumber"
>
<el-input
v-model="formData.caseNumber"
placeholder="请输入"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="涉嫌问题"
prop="involveProblem"
:rules="{
required: true,
message: '请选择涉嫌问题',
trigger: ['blur'],
}"
>
<el-select
v-model="formData.involveProblemCode"
multiple
@change="handleSelectInvolveProblem"
clearable
>
<el-option
v-for="item in dict.suspectProblem"
:key="item.id"
:label="item.dictLabel"
:value="item.dictValue"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item-ext
label="涉及警种"
content="囊括了市局除分县市局以外的所有业务警种,便于后期统计分析业务条线的问题。"
prop="policeType"
>
<el-select
v-model="formData.policeType"
@change="
(val) =>
(formData.policeTypeName =
dict.policeType.filter(
(item) => item.dictValue === val
)[0].dictLabel)
"
clearable
>
<el-option
v-for="item in dict.policeType"
:key="item.id"
:label="item.dictLabel"
:value="item.dictValue"
/>
</el-select>
</el-form-item-ext>
</el-col>
<el-col :span="12">
<el-form-item
label="问题涉及单位"
prop="involveDepartId"
:rules="{
required: true,
message: '请选择问题涉及单位',
trigger: ['blur'],
}"
>
<depart-tree-select
v-model="formData.involveDepartId"
:check-strictly="true"
@node-click="
(row) =>
(formData.involveDepartName = row.shortName)
"
/>
</el-form-item>
</el-col>
</el-row>
<el-row
v-if="ProblemSources_XFTS.includes(formData.problemSourcesCode)"
>
<el-col :span="12">
<el-form-item label="投诉反映人" prop="responderName">
<el-input
placeholder="请输入"
v-model="formData.responderName"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="联系电话" prop="contactPhone">
<el-input
v-model="formData.contactPhone"
placeholder="请输入"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item
label="问题发现时间"
prop="discoveryTime"
:rules="{
required: true,
message: '请选择问题发现时间',
trigger: ['blur'],
}"
>
<el-date-picker
v-model="formData.discoveryTime"
type="datetime"
placeholder="请选择"
value-format="YYYY-MM-DD HH:mm"
time-format="HH:mm"
style="width: 100%"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="问题发生时间" prop="happenTime">
<el-date-picker
v-model="formData.happenTime"
type="datetime"
placeholder="请选择"
value-format="YYYY-MM-DD HH:mm"
time-format="HH:mm"
style="width: 100%"
/>
</el-form-item>
</el-col>
</el-row>
<el-form-item
label="事情简要描述"
prop="thingDesc"
:rules="{
required: true,
message: '请输入事情简要描述',
trigger: ['blur'],
}"
>
<el-input
type="textarea"
placeholder="请输入"
v-model="formData.thingDesc"
:autosize="{ minRows: 4 }"
/>
</el-form-item>
</div>
</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>
</template>
<script setup>
import moment from "moment";
import { ElLoading } from "element-plus";
import { listNegative, negativeExport, delNegative } from "@/api/work/negative";
import { listNegative, negativeExport, delNegative, updateNegative } from "@/api/work/negative";
import { getDictLable, formatTimeText, getInvolveProblem } from "@/utils/util";
import feedback from "@/utils/feedback";
import { ProcessingStatus } from "@/enums/flowEnums";
import {
ProblemSources_XFTS,
} from "@/enums/dictEnums";
import useCatchStore from "@/stores/modules/catch";
const catchStore = useCatchStore();
@ -465,6 +695,8 @@ const dict = catchStore.getDicts([
"inspectCase",
"isRectify",
"processingStatus",
"suspectProblem",
"policeType",
]);
const flowNodes = catchStore.getFlowNodes();
const dictProblemSources = catchStore.getDictProblemSources();
@ -505,7 +737,7 @@ const route = useRoute();
watch(
() => route.query,
() => {
updateQuery()
updateQuery();
getList();
}
);
@ -527,7 +759,7 @@ function updateQuery() {
}
onMounted(() => {
updateQuery()
updateQuery();
getList();
});
@ -559,6 +791,23 @@ async function handleDel(row) {
feedback.msgSuccess("操作成功");
getList();
}
const editShow = ref(false)
const formData = ref({})
const formRef = ref(null)
function handleEdit(row) {
formData.value = {...row}
editShow.value = true
}
async function handleSumbit() {
await formRef.value.validate()
await updateNegative(formData.value)
editShow.value = false
feedback.msgSuccess("操作成功");
getList();
}
</script>
<style lang="scss" scoped>
.form-row {

Loading…
Cancel
Save