Browse Source

fix: 完善问题查询

fix: 完善信访投诉、案件核查导入
fit: 大屏完善
main
wxc 1 year ago
parent
commit
7a7f33e1e5
  1. BIN
      public/imgs/lmgz/2.png
  2. BIN
      public/imgs/lmgz/3.png
  3. BIN
      public/imgs/lmgz/4.png
  4. 7
      src/api/datav.ts
  5. 36
      src/components/data/import-case.vue
  6. 43
      src/components/data/import.vue
  7. 20
      src/components/datav/date-picker.vue
  8. 5
      src/components/datav/statistic.vue
  9. 6
      src/components/file/upload-group.vue
  10. 25
      src/components/negative/apply-extension-description.vue
  11. 2
      src/components/negative/apply-extension.vue
  12. 12
      src/components/negative/description.vue
  13. 46
      src/components/negative/dialog.vue
  14. 18
      src/components/negative/verify-description.vue
  15. 7
      src/components/negative/verify.vue
  16. 25
      src/enums/dictEnums.ts
  17. 52
      src/views/data/Ajhc.vue
  18. 27
      src/views/data/Gabxf.vue
  19. 47
      src/views/data/Gjxf.vue
  20. 50
      src/views/datav/CaseVerif.vue
  21. 25
      src/views/sensitivePerception/Model.vue
  22. 2
      src/views/system/Police.vue
  23. 92
      src/views/work/Query.vue

BIN
public/imgs/lmgz/2.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 269 KiB

BIN
public/imgs/lmgz/3.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 210 KiB

BIN
public/imgs/lmgz/4.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 266 KiB

7
src/api/datav.ts

@ -0,0 +1,7 @@
import request from "./request";
export function getCaseVerifData(times) {
return request.get({
url: `/datav/caseVerif?beginTime=${times[0]}&endTime=${times[1]}`
});
}

36
src/components/data/import-case.vue

@ -102,14 +102,15 @@
prop="policeTypeName"
/>
<el-table-column
label="涉及单位"
prop="involveDepartName"
>
<template #default="{ row }">
<span>{{ involveSecondDepartName }}</span>
<span>{{ involveThirdDepartName }}</span>
</template>
</el-table-column>
label="涉及单位二级机构"
prop="secondDepartName"
show-overflow-tooltip
/>
<el-table-column
label="涉及单位所队"
prop="thirdDepartName"
show-overflow-tooltip
/>
<el-table-column
label="具体内容"
prop="thingDesc"
@ -118,6 +119,7 @@
<el-table-column
label="数据校验"
width="120"
align="center"
>
<template #default="{ row }">
<el-tag
@ -207,8 +209,14 @@
prop="policeTypeName"
/>
<el-table-column
label="涉及单位"
prop="complainedDepartName"
label="涉及单位二级机构"
prop="secondDepartName"
show-overflow-tooltip
/>
<el-table-column
label="涉及单位所队"
prop="thirdDepartName"
show-overflow-tooltip
/>
<el-table-column
label="具体内容"
@ -217,7 +225,8 @@
/>
<el-table-column
label="数据校验"
width="120"
width="100"
align="center"
>
<template #default="{ row }">
<el-tooltip
@ -318,11 +327,6 @@
<el-form-item
label="涉及单位"
prop="involveThirdDepartId"
:rules="{
required: true,
message: '请选择',
trigger: ['blur'],
}"
>
<depart-tree-select
v-model="form.involveThirdDepartId"

43
src/components/data/import.vue

@ -65,6 +65,7 @@
<el-table-column
label="投诉渠道"
prop="channelForFilingComplaints"
show-overflow-tooltip
/>
<el-table-column
label="受理层级"
@ -73,6 +74,7 @@
<el-table-column
label="登记时间"
prop="discoveryTime"
width="100"
show-overflow-tooltip
/>
<el-table-column
@ -88,7 +90,7 @@
<el-table-column
label="初重信访"
align="center"
width="90"
width="85"
>
<template #default="{ row }">
<span>{{
@ -101,7 +103,7 @@
</el-table-column>
<el-table-column
label="缠访闹访"
width="90"
width="85"
align="center"
>
<template #default="{ row }">
@ -123,7 +125,7 @@
</el-table-column>
<el-table-column
label="群众集访"
width="90"
width="85"
align="center"
>
<template #default="{ row }">
@ -141,16 +143,8 @@
>
</template>
</el-table-column>
<el-table-column label="被投诉机构" show-overflow-tooltip>
<template #default="{ row }">
<span>{{
row.involveSecondDepartName
}}</span>
<span>{{
row.involveThirdDepartName
}}</span>
</template>
</el-table-column>
<el-table-column label="被投诉二级机构" prop="involveSecondDepartName" show-overflow-tooltip />
<el-table-column label="被投诉所队" prop="involveThirdDepartName" show-overflow-tooltip />
<el-table-column
label="具体内容"
prop="thingDesc"
@ -158,7 +152,8 @@
/>
<el-table-column
label="数据校验"
width="120"
width="90"
align="center"
>
<template #default="{ row }">
<el-tag
@ -182,7 +177,7 @@
</el-table-column>
<el-table-column
label="操作"
width="120"
width="100"
>
<template #default="{ row }">
<el-button
@ -291,16 +286,8 @@
>
</template>
</el-table-column>
<el-table-column label="被投诉机构" show-overflow-tooltip>
<template #default="{ row }">
<span>{{
row.involveSecondDepartName
}}</span>
<span>{{
row.involveThirdDepartName
}}</span>
</template>
</el-table-column>
<el-table-column label="被投诉二级机构" prop="involveSecondDepartName" show-overflow-tooltip />
<el-table-column label="被投诉所队" prop="involveThirdDepartName" show-overflow-tooltip />
<el-table-column
label="具体内容"
prop="thingDesc"
@ -449,11 +436,7 @@
<el-form-item
label="被投诉机构"
prop="involveThirdDepartId"
:rules="{
required: true,
message: '请选择',
trigger: ['blur'],
}"
>
<depart-tree-select
v-model="form.involveThirdDepartId"

20
src/components/datav/date-picker.vue

@ -8,12 +8,30 @@
start-placeholder="开始日期"
end-placeholder="结束日期"
format="YYYY年MM月DD日"
value-format="YYYY-MM-DD"
:clearable="false"
@change="handleChange"
style="--el-input-bg-color: transparent; box-shadow: none; --el-text-color-regular: #fff; --el-text-color-primary: #fff"
/>
</div>
</template>
<script setup>
const value = ref([])
import moment from 'moment'
const props = defineProps({
modelValue: {
type: Array,
required: true
}
})
const emit = defineEmits(['update:modelValue', 'change'])
const value = ref(props.modelValue)
function handleChange() {
emit('update:modelValue', value.value)
emit('change', value.value)
}
</script>
<style lang="scss" scoped>
.datav-col {

5
src/components/datav/statistic.vue

@ -22,11 +22,12 @@ const props = defineProps({
},
});
const value = ref(0);
watch(() => props.value, (val) => {
value.value = val;
})
const outputValue = useTransition(value, {
duration: 1500,
});
value.value = props.value;
</script>
<style lang="scss" scoped>
.statistic {

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

@ -282,7 +282,6 @@ const activeFileIds = ref([]);
const fileClassId = ref("");
const fileClasss = ref([]);
if (props.problemSourcesCode === ProblemSources.JWDC) {
fileClasss.value = [
{
@ -366,10 +365,7 @@ function handleSubmit() {
}
function remove(index) {
debugger;
const files = [...props.files];
files.splice(index, 1);
emit("update:files", files);
fileList.value.splice(index, 1);
}
</script>
<style lang="scss" scoped>

25
src/components/negative/apply-extension-description.vue

@ -6,15 +6,33 @@
<header class="flex">
<span class="primary">延期申请中</span>
<div class="step-item flex v-center">
<div class="number" active="true">1</div>
<div class="number" :active="true">1</div>
<span>延期申请</span>
</div>
<div class="step-item flex v-center">
<div class="number">2</div>
<el-tooltip
effect="dark"
:content="extensionApply.approves[extensionApply.approves.length - 1].comments"
raw-content
placement="top"
v-if="extensionApply.approves.length > 0"
>
<div class="number" :active="extensionApply.approves.length > 0">2</div>
</el-tooltip>
<div class="number" :active="extensionApply.approves.length > 0" v-else>2</div>
<span>二级机构专班审批</span>
</div>
<div class="step-item flex v-center">
<div class="number" >3</div>
<el-tooltip
effect="dark"
:content="extensionApply.approves[extensionApply.approves.length - 2].comments"
raw-content
placement="top"
v-if="extensionApply.approves.length > 1"
>
<div class="number" :active="extensionApply.approves.length === 2">3</div>
</el-tooltip>
<div class="number" :active="extensionApply.approves.length === 2" v-else>3</div>
<span>市局专班审批</span>
</div>
</header>
@ -39,6 +57,7 @@
<script setup>
const extensionApply = inject('extensionApply')
console.log('extensionApply', extensionApply)
</script>
<style lang="scss" scoped>
.card-info {

2
src/components/negative/apply-extension.vue

@ -2,7 +2,7 @@
<el-dialog width="50vw" title="申请延期" v-model="show">
<div>
<p>
全流程可延期的总时长不超过30(中间包括节假日)申请延期必需经过
全流程可延期的总时长不超过{{ negative.maxExtensionDuration }}(中间包括节假日)申请延期必需经过
</p>
<h3>二级专班 市局</h3>
<p>

12
src/components/negative/description.vue

@ -35,8 +35,8 @@
<span>{{ negative.businessTypeName }}</span>
</div>
<div class="col col-6">
<label>案件/警情编号</label>
<span>{{ negative.caseNumber || '/' }}</span>
<label>涉及警种</label>
<span>{{ negative.policeTypeName }}</span>
</div>
<div class="col col-12">
<label>涉嫌问题</label>
@ -44,11 +44,11 @@
</div>
</div>
<div class="row">
<div class="col col-6">
<label>涉及警种</label>
<span>{{ negative.policeTypeName }}</span>
<div class="col col-12">
<label>案件/警情编号</label>
<span>{{ negative.caseNumber || '/' }}</span>
</div>
<div class="col col-18">
<div class="col col-12">
<label>涉及单位</label>
<span>{{ negative.involveDepartName || '/' }}</span>
</div>

46
src/components/negative/dialog.vue

@ -70,15 +70,24 @@
<el-row style="height: 100%">
<el-col :span="5" style="height: 100%">
<div ref="leftContainerRef" class="left-container h100">
<template v-if="negative.flowKey !== FlowNodeEnum.FIRST_DISTRIBUTE && negative.processingStatus !== ProcessingStatus.COMPLETED">
<negative-countdown v-model:time="remainingDuration" :max-time="maxDuration" />
<template
v-if="
negative.flowKey !==
FlowNodeEnum.FIRST_DISTRIBUTE &&
negative.processingStatus !==
ProcessingStatus.COMPLETED
"
>
<negative-countdown
v-model:time="remainingDuration"
:max-time="maxDuration"
/>
</template>
<negative-action-history />
</div>
</el-col>
<el-col :span="19" style="height: 100%">
<el-scrollbar max-height="100%" class="main-container">
<negative-sign-return-description />
<negative-apply-extension-description />
<negative-description />
@ -173,7 +182,11 @@
</el-dialog>
</template>
<script lang="ts" setup>
import { FlowActionEnum, FlowNodeEnum, ProcessingStatus } from "@/enums/flowEnums";
import {
FlowActionEnum,
FlowNodeEnum,
ProcessingStatus,
} from "@/enums/flowEnums";
import { getNegativeDetails, negativeExecute } from "@/api/work/negative";
import { addFav, delFav } from "@/api/work/fav";
import feedback from "@/utils/feedback";
@ -202,7 +215,7 @@ const loading = ref(false);
const negative = ref({});
const actionHistory = ref([]);
const signReturns = ref([]);
const approves = ref([])
const approves = ref([]);
const extensionApply = ref({});
provide("negative", negative);
provide("actionHistory", actionHistory);
@ -211,8 +224,8 @@ provide("approves", approves);
provide("extensionApply", extensionApply);
const isFav = ref(false);
const remainingDuration = ref(0)
const maxDuration = ref(0)
const remainingDuration = ref(0);
const maxDuration = ref(0);
const flowActions = ref([]);
const components = ref([]);
watch(
@ -229,11 +242,11 @@ function getDetails() {
flowActions.value = data.flowActions;
actionHistory.value = data.actionHistory;
signReturns.value = data.signReturns;
approves.value = data.approves
approves.value = data.approves;
extensionApply.value = data.extensionApply || {};
isFav.value = data.isFav;
remainingDuration.value = data.remainingDuration;
console.log(remainingDuration.value)
console.log(remainingDuration.value);
maxDuration.value = data.maxDuration;
components.value = getComponents(data.flowNode?.flowKey);
loading.value = false;
@ -250,11 +263,16 @@ const setActionItemRef = (actionKey, el) => {
const activeAction = ref({});
async function handleExecute(action, data) {
if (action.validateForm) {
try {
data = await componentRef.value.validate();
} catch (e) {
feedback.msgWarning("请检查输入项");
throw e;
debugger
if (action.actionKey !== FlowActionEnum.SAVE) {
try {
data = await componentRef.value.validate();
} catch (e) {
feedback.msgWarning("请检查输入项");
throw e;
}
} else {
data = componentRef.value.getData();
}
}
if (action.openDialog) {

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

@ -44,9 +44,9 @@
<label>人员属性</label>
<span>{{ blame.ivPersonType }}</span>
</div>
<div class="col col-6">
<div class="col col-6" v-if="blame.superviseMeasuresCode">
<label>督察措施</label>
<span>{{ blame.superviseMeasuresName || '/' }}</span>
<span>{{ blame.superviseMeasuresName }}</span>
</div>
</div>
@ -57,7 +57,7 @@
</div>
</div>
<div class="row">
<div class="col col-6">
<div class="col col-6" v-if="blame.subjectiveAspectCode">
<label>主观方面</label>
<span>{{ blame.subjectiveAspectName }}</span>
</div>
@ -65,7 +65,7 @@
<label>责任类别</label>
<span>{{ blame.responsibilityTypeName }}</span>
</div>
<div class="col col-6">
<div class="col col-6" v-if="blame.handleResultCode">
<label>处置结果</label>
<span>{{ blame.handleResultName }}</span>
</div>
@ -98,11 +98,11 @@
<label>责任类别</label>
<span>{{ blame.leadResponsibilityTypeName }}</span>
</div>
<div class="col col-6">
<div class="col col-6" v-if="blame.leadMeasuresCode">
<label>督察措施</label>
<span>{{ blame.leadMeasuresName || '/' }}</span>
<span>{{ blame.leadMeasuresName }}</span>
</div>
<div class="col col-6">
<div class="col col-6" v-if="blame.leadHandleResultCode">
<label>处置结果</label>
<span>{{ blame.leadHandleResultName }}</span>
</div>
@ -138,7 +138,7 @@
</div>
</div>
<div class="row">
<div class="col col-6">
<div class="col col-6" v-if="blame.subjectiveAspectCode">
<label>主观方面</label>
<span>{{ blame.subjectiveAspectName }}</span>
</div>
@ -146,7 +146,7 @@
<label>责任类别</label>
<span>{{ blame.responsibilityTypeName }}</span>
</div>
<div class="col col-6">
<div class="col col-6" v-if="blame.handleResultCode">
<label>处置结果</label>
<span>{{ blame.handleResultName }}</span>
</div>

7
src/components/negative/verify.vue

@ -1118,7 +1118,7 @@
:problemSourcesCode="negative.problemSourcesCode"
/>
</div>
<file-list :files="form.files" />
<file-list v-model:files="form.files" :removeEnable="true" />
</el-form-item>
</el-form>
</template>
@ -1342,8 +1342,13 @@ async function validate() {
}
}
async function getData() {
return form.value;
}
defineExpose({
validate,
getData
});
</script>
<style lang="scss" scoped>

25
src/enums/dictEnums.ts

@ -37,29 +37,26 @@ export enum AssistCase {
// 问题来源
export enum ProblemSources {
// 警务调查
JWDC = 2,
// 警务评议
JWDC = '2',
// 警意调查
JYDC = 3,
JYDC = '3',
// 执法监督
JFZD = 4,
// 360度网上测评
WSCP = 5,
// 钉钉考勤
DDKQ = 6,
JFZD = '4',
// 监督管理
JDGL = 7,
JDGL = '10',
// 国家信访平台
GJXFPT = 21,
GJXFPT = '21',
// 公安部信访
GABXF = 22,
GABXF = '22',
// 局长信箱
JZXX = 23,
JZXX = '23',
// 12337信访
XF12337 = 24,
XF12337 = '24',
// 其他
XF_QT = 25
XF_QT = '25'
}
export const ProblemSources_XFTS = [ProblemSources.GJXFPT, ProblemSources.GABXF, ProblemSources.JZXX, ProblemSources.XF12337, ProblemSources.XF_QT]

52
src/views/data/Ajhc.vue

@ -122,7 +122,12 @@
<el-table-column label="业务类别" prop="businessTypeName" />
<el-table-column label="涉嫌问题" prop="involveProblem" />
<el-table-column label="涉及警种" prop="policeTypeName" />
<el-table-column label="涉及单位" prop="involveDepartName" />
<el-table-column label="涉及单位" show-overflow-tooltip>
<template #default="{ row }">
<span>{{ row.secondDepartName }}</span>
<span>{{ row.thirdDepartName }}</span>
</template>
</el-table-column>
<el-table-column
label="具体内容"
prop="thingDesc"
@ -140,7 +145,6 @@
</el-table-column>
<el-table-column label="操作" width="200">
<template #default="{ row }">
<template
v-if="
row.distributionState ===
@ -166,7 +170,7 @@
>移除</el-button
>
</template>
<el-button type="danger" link @click="handleDel(row)"
>删除</el-button
>
@ -226,7 +230,11 @@
prop="discoveryTime"
show-overflow-tooltip
/>
<el-table-column label="问题发生时间" prop="happenTime" show-overflow-tooltip />
<el-table-column
label="问题发生时间"
prop="happenTime"
show-overflow-tooltip
/>
<el-table-column
label="问题来源"
prop="problemSources"
@ -245,10 +253,12 @@
<el-table-column label="业务类别" prop="businessTypeName" />
<el-table-column label="涉嫌问题" prop="involveProblem" />
<el-table-column label="涉及警种" prop="policeTypeName" />
<el-table-column
label="涉及单位"
prop="involveDepartName"
/>
<el-table-column label="涉及单位" show-overflow-tooltip>
<template #default="{ row }">
<span>{{ row.secondDepartName }}</span>
<span>{{ row.thirdDepartName }}</span>
</template>
</el-table-column>
<el-table-column
label="具体内容"
prop="thingDesc"
@ -256,7 +266,6 @@
/>
<el-table-column label="操作" width="140">
<template #default="{ row }">
<el-button
type="info"
link
@ -324,10 +333,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"
>确认下发</el-button
>
</footer>
@ -350,7 +356,7 @@ const catchStore = useCatchStore();
const dict = catchStore.getDicts([
"distributionState",
"timeLimit",
"approvalFlow"
"approvalFlow",
]);
const query = ref({
@ -399,7 +405,7 @@ function handleShowDistributeDialog() {
distributeShow.value = true;
}
const form = ref({});
const formRef = ref()
const formRef = ref();
function handleRemoveDistribute(row) {
distributeList.value.splice(
@ -411,14 +417,14 @@ function handleRemoveDistribute(row) {
}
async function handleSubmit() {
await formRef.value.validate()
form.value.data = distributeList.value
await distributeCaseVerif(form.value)
form.value = {}
distributeShow.value = false
distributeListShow.value = false
feedback.msgSuccess('下发成功')
getList()
await formRef.value.validate();
form.value.data = distributeList.value;
await distributeCaseVerif(form.value);
form.value = {};
distributeShow.value = false;
distributeListShow.value = false;
feedback.msgSuccess("下发成功");
getList();
}
</script>
<style lang="scss" scoped>

27
src/views/data/Gabxf.vue

@ -106,19 +106,28 @@
align="center"
width="90"
/>
<el-table-column
label="缠访闹访"
prop="entanglementVisits"
align="center"
width="90"
/>
<el-table-column label="群众集访" prop="massVisits" />
<el-table-column label="缠访闹访" width="85" align="center">
<template #default="{ row }">
<span v-if="row.entanglementVisits === true"></span>
<span v-if="row.entanglementVisits === false"></span>
</template>
</el-table-column>
<el-table-column label="群众集访" width="85" align="center">
<template #default="{ row }">
<span v-if="row.massVisits === true"></span>
<span v-if="row.massVisits === false"></span>
</template>
</el-table-column>
<el-table-column label="涉嫌问题" prop="involveProblem" />
<el-table-column
label="被投诉机构"
prop="involveDepartName"
show-overflow-tooltip
/>
>
<template #default="{ row }">
<span>{{ row.secondDepartName }}</span>
<span>{{ row.thirdDepartName}}</span>
</template>
</el-table-column>
<el-table-column
label="具体内容"
prop="thingDesc"

47
src/views/data/Gjxf.vue

@ -100,25 +100,38 @@
width="90"
/>
<el-table-column label="电话" prop="responderPhone" />
<el-table-column
label="初重信访"
prop="initialPetition"
align="center"
width="90"
/>
<el-table-column
label="缠访闹访"
prop="entanglementVisits"
align="center"
width="90"
/>
<el-table-column label="群众集访" prop="massVisits" />
<el-table-column label="初重信访" align="center" width="85">
<template #default="{ row }">
<span>{{
getDictLable(
dict.initialPetition,
row.initialPetition
)
}}</span>
</template>
</el-table-column>
<el-table-column label="缠访闹访" width="85" align="center">
<template #default="{ row }">
<span v-if="row.entanglementVisits === true"></span>
<span v-if="row.entanglementVisits === false"></span>
</template>
</el-table-column>
<el-table-column label="群众集访" width="85" align="center">
<template #default="{ row }">
<span v-if="row.massVisits === true"></span>
<span v-if="row.massVisits === false"></span>
</template>
</el-table-column>
<el-table-column label="涉嫌问题" prop="involveProblem" />
<el-table-column
label="被投诉机构"
prop="involveDepartName"
show-overflow-tooltip
/>
>
<template #default="{ row }">
<span>{{ row.secondDepartName }}</span>
<span>{{ row.thirdDepartName}}</span>
</template>
</el-table-column>
<el-table-column
label="具体内容"
prop="thingDesc"
@ -208,9 +221,7 @@ import { getDictLable } from "@/utils/util";
import useCatchStore from "@/stores/modules/catch";
const catchStore = useCatchStore();
const dict = catchStore.getDicts([
"distributionState"
]);
const dict = catchStore.getDicts(["distributionState"]);
const query = ref({
size: 10,

50
src/views/datav/CaseVerif.vue

@ -36,52 +36,44 @@
/>
</datav-tab-item>
<datav-tab-item label="服务管理" name="2">
<v-charts
style="height: 340px"
:option="option2"
autoresize
/>
</datav-tab-item>
<datav-tab-item label="警纪警规" name="3">
<v-charts
style="height: 340px"
:option="option2"
autoresize
/>
</datav-tab-item>
</datav-tabs>
</datav-card>
</el-col>
<el-col :span="12">
<datav-date-picker />
<datav-date-picker v-model="time" />
<div class="flex gap-42">
<datav-statistic
:value="67"
:value="overview.total"
title="案件总数(起)"
style="width: 16.66%"
/>
<datav-statistic
:value="0"
:value="overview.confirmed"
title="查实案件数"
style="width: 16.66%"
/>
<datav-statistic
:value="67"
:value="overview.investigateAndPunish"
title="查处问题(个)"
style="width: 16.66%"
/>
<datav-statistic
:value="65"
:value="overview.accountablePeopleNumber"
title="问责人次"
style="width: 16.66%"
/>
<datav-statistic
:value="89"
:value="overview.accountableDepartNumber"
title="问责单位数"
style="width: 16.66%"
/>
<datav-statistic
:value="100"
:value="overview.confirmedRate"
value-unit="%"
title="查实率"
style="width: 16.66%"
@ -137,6 +129,30 @@
import vCharts from "vue-echarts";
import changshaMap from "@/assets/data/changsha.json";
import * as echarts from "echarts/core";
import moment from 'moment'
import { getCaseVerifData } from '@/api/datav'
const time = ref([moment().startOf('year').format('YYYY-MM-DD'), moment().format('YYYY-MM-DD')])
const overview = ref({
total: 0,
confirmed: 0,
investigateAndPunish: 0,
accountablePeopleNumber: 0,
accountableDepartNumber: 0,
confirmedRate: 0
})
function getData() {
getCaseVerifData(time.value).then(data => {
overview.value = data.overview
})
}
onMounted(() => {
getData()
})
echarts.registerMap("changsha", changshaMap);
const option = {

25
src/views/sensitivePerception/Model.vue

@ -520,7 +520,7 @@
"
>查看线索数据</el-button
>
<el-button type="primary" plain>
<el-button type="primary" plain @click="handleDetailConfigShow">
<template #icon>
<icon name="el-icon-Edit" />
</template>
@ -559,7 +559,7 @@
placement="top-start"
v-else
>
<el-tag type="error">失败</el-tag>
<el-tag type="danger">失败</el-tag>
</el-tooltip>
</template>
</el-table-column>
@ -576,6 +576,10 @@
>
</footer>
</el-dialog>
<el-dialog title="线索详细信息配置" v-model="detailConfigShow" width="800px">
</el-dialog>
</template>
<script setup>
import {
@ -591,6 +595,7 @@ import {
delModel,
listModel,
} from "@/api/sensitivePerception/model";
import { listModelClue } from "@/api/sensitivePerception/modelClue";
import { listTopModelClueRecords } from "@/api/sensitivePerception/modelClue";
import useCatchStore from "@/stores/modules/catch";
import { getDictLable } from "@/utils/util";
@ -702,6 +707,22 @@ async function openDetail(item) {
tableData.value = await listTopModelClueRecords(item.id);
detailShow.value = true;
}
const detailConfigShow = ref(false)
const modelClueData = ref({})
async function handleDetailConfigShow() {
const data = await listModelClue({
modelIds: [activeModel.value.id],
current: 1,
size: 1
})
if (data.records.length && data.records[0].data) {
console.log(data.records)
} else {
modelClueData.value = JSON.parse(data.records[0].data)
}
detailConfigShow.value = true
}
</script>
<style lang="scss" scoped>
.menu {

2
src/views/system/Police.vue

@ -304,7 +304,7 @@
}"
>
<div style="width: 280px">
<depart-tree-select v-model="form.orgId" />
<depart-tree-select v-model="form.orgId" :showRoot="true" />
</div>
</el-form-item>
<el-form-item label="人员属性">

92
src/views/work/Query.vue

@ -18,6 +18,27 @@
<label class="text-center">常规选项</label>
<div>
<el-row>
<el-col :span="6">
<el-form-item label="问题发现时间">
<date-time-range-picker-ext
v-model="query.discoveryTime"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="问题发生时间">
<date-time-range-picker-ext
v-model="query.happenTime"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="问题录入时间">
<date-time-range-picker-ext
v-model="query.crtTime"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="样本源头编号">
<el-input
@ -27,16 +48,28 @@
/>
</el-form-item>
</el-col>
</el-row>
</div>
</div>
<div class="form-row flex v-center">
<label class="text-center">问题选项</label>
<div>
<el-row>
<el-col :span="6">
<el-form-item label="问题发现时间">
<date-time-range-picker-ext v-model="query.discoveryTime"/>
<el-form-item label="涉及单位">
<depart-tree-select
v-model="query.involveDepartId"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="问题发生时间">
<date-time-range-picker-ext v-model="query.happenTime"/>
<el-form-item label="办理单位">
<depart-tree-select
v-model="query.handleDepartId"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="投诉反映人">
<div class="flex gap">
@ -64,14 +97,7 @@
</div>
</el-form-item>
</el-col>
</el-row>
</div>
</div>
<div class="form-row flex v-center">
<label class="text-center">问题选项</label>
<div>
<el-row>
<el-col :span="12">
<el-col :span="6">
<el-form-item label="事情简述">
<el-input
placeholder="请输入"
@ -191,9 +217,7 @@
</div>
</el-form>
<div class="flex between mt-20 mb-26">
<el-button
type="primary"
@click="handleExport"
<el-button type="primary" @click="handleExport"
>数据导出</el-button
>
<div>
@ -241,7 +265,9 @@
</div>
<div class="col col-12">
<label>涉嫌问题</label>
<span>{{ getInvolveProblem(row.involveProblem) }}</span>
<span>{{
getInvolveProblem(row.involveProblem)
}}</span>
</div>
</div>
<div class="row mt-10">
@ -341,7 +367,6 @@
ProcessingStatus.COMPLETED
"
type="success"
effect="dark"
>未超时</el-tag
>
</template>
@ -365,7 +390,24 @@
>
</template>
</el-table-column>
<el-table-column label="当前处理对象" prop="currentProcessingObject" show-overflow-tooltip />
<el-table-column
label="当前处理对象"
prop="currentProcessingObject"
show-overflow-tooltip
>
<template #default="{ row }">
<span
v-if="
row.processingStatus ===
ProcessingStatus.COMPLETED
"
></span
>
<span v-else>{{
row.currentProcessingObject
}}</span>
</template>
</el-table-column>
<el-table-column label="操作" width="120">
<template #default="{ row }">
<el-button
@ -409,7 +451,7 @@
/>
</template>
<script setup>
import { ElLoading } from 'element-plus'
import { ElLoading } from "element-plus";
import { listNegative, negativeExport, delNegative } from "@/api/work/negative";
import { getDictLable, formatTimeText, getInvolveProblem } from "@/utils/util";
import feedback from "@/utils/feedback";
@ -469,7 +511,7 @@ function handleAction(row) {
activeNegativeId.value = row.id;
}
const router = useRouter()
const router = useRouter();
async function handleExport() {
await feedback.confirm("请确定导出当前页面所有数据");
const loading = ElLoading.service({
@ -478,16 +520,16 @@ async function handleExport() {
background: "rgba(0, 0, 0, 0.5)",
});
await negativeExport(query.value);
loading.close()
loading.close();
await feedback.confirm("导出任务已生成,请到“导出记录”页面查看");
router.push('/negative/export')
router.push("/negative/export");
}
async function handleDel(row) {
await feedback.confirm(`确定删除该数据?`)
await feedback.confirm(`确定删除该数据?`);
await delNegative(row.id);
feedback.msgSuccess('操作成功')
getList()
feedback.msgSuccess("操作成功");
getList();
}
</script>
<style lang="scss" scoped>

Loading…
Cancel
Save