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

43
src/components/data/import.vue

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

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

@ -8,12 +8,30 @@
start-placeholder="开始日期" start-placeholder="开始日期"
end-placeholder="结束日期" end-placeholder="结束日期"
format="YYYY年MM月DD日" 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" style="--el-input-bg-color: transparent; box-shadow: none; --el-text-color-regular: #fff; --el-text-color-primary: #fff"
/> />
</div> </div>
</template> </template>
<script setup> <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> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.datav-col { .datav-col {

5
src/components/datav/statistic.vue

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

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

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

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

@ -6,15 +6,33 @@
<header class="flex"> <header class="flex">
<span class="primary">延期申请中</span> <span class="primary">延期申请中</span>
<div class="step-item flex v-center"> <div class="step-item flex v-center">
<div class="number" active="true">1</div> <div class="number" :active="true">1</div>
<span>延期申请</span> <span>延期申请</span>
</div> </div>
<div class="step-item flex v-center"> <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> <span>二级机构专班审批</span>
</div> </div>
<div class="step-item flex v-center"> <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> <span>市局专班审批</span>
</div> </div>
</header> </header>
@ -39,6 +57,7 @@
<script setup> <script setup>
const extensionApply = inject('extensionApply') const extensionApply = inject('extensionApply')
console.log('extensionApply', extensionApply)
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.card-info { .card-info {

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

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

12
src/components/negative/description.vue

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

46
src/components/negative/dialog.vue

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

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

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

7
src/components/negative/verify.vue

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

25
src/enums/dictEnums.ts

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

50
src/views/data/Ajhc.vue

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

27
src/views/data/Gabxf.vue

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

47
src/views/data/Gjxf.vue

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

50
src/views/datav/CaseVerif.vue

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

25
src/views/sensitivePerception/Model.vue

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

2
src/views/system/Police.vue

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

92
src/views/work/Query.vue

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

Loading…
Cancel
Save