Browse Source

fit: 核查办理新增信访相关字段。

fit: 测酒任务-发布任务-新增excel导入人员
main
wxc 9 months ago
parent
commit
b9b2990d90
  1. 7
      src/api/mobileSupervision/testingAlcohol.ts
  2. 40
      src/components/negative/verify-description.vue
  3. 332
      src/components/negative/verify.vue
  4. 2
      src/views/mobileSupervise/Inspection.vue
  5. 81
      src/views/mobileSupervise/TestingAlcohol.vue

7
src/api/mobileSupervision/testingAlcohol.ts

@ -26,4 +26,11 @@ export function listTestingAlcoholPeoples(taskId, query) {
url: `/task/testingAlcohol/${taskId}/people`,
query
});
}
export function importTestingAlcoholPeople(body) {
return request.post({
url: `/task/testingAlcohol/importPeople`,
body
});
}

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

@ -47,12 +47,19 @@
<span>{{ negative.unrectifyReason }}</span>
</div>
</div>
</el-collapse-item>
<el-collapse-item
title="信访情况"
name="mail"
v-if="
negative.problemSourcesCode === ProblemSources.GJXFPT ||
negative.problemSourcesCode === ProblemSources.GABXF ||
negative.problemSourcesCode === ProblemSources.JZXX ||
negative.problemSourcesCode === ProblemSources.XF12337
"
>
<div class="row" >
<div class="col col-6" v-if="negative.resolveSituation">
<label>化解情况</label>
<span>{{ negative.resolveSituation }}</span>
</div>
<div class="col col-18" v-if="negative.handlePolices.length > 0">
<div class="col col-24" v-if="negative.handlePolices.length > 0">
<label>经办人</label>
<span>
<div v-for="item in negative.handlePolices" :key="item" class="mr-20">
@ -61,6 +68,18 @@
</div>
</span>
</div>
<div class="col col-24" v-if="negative.visitingLeaderName">
<label>接访领导</label>
<span>{{ negative.visitingLeaderName }} {{ negative.visitingLeaderEmpNo }}</span>
</div>
<div class="col col-6">
<label>化解情况</label>
<span>{{ negative.resolveSituation }}</span>
</div>
<div class="col col-6" v-if="negative.resolveStatus">
<label>当前状态</label>
<span>{{ negative.resolveStatus }}</span>
</div>
</div>
</el-collapse-item>
<el-collapse-item
@ -122,14 +141,14 @@
<span v-if="blame.handleResultNameOther">({{ blame.handleResultNameOther }})</span>
</span>
</div>
<div class="col col-6" v-if="blame.superviseMeasuresCode">
<label>督察措施</label>
<span>{{ blame.superviseMeasuresName }}</span>
</div>
<div class="col col-6" v-if="blame.protectRightsName">
<label>维权容错</label>
<span>{{ blame.protectRightsName }}</span>
</div>
<div class="col col-6" v-if="blame.superviseMeasuresCode">
<label>督察措施</label>
<span>{{ blame.superviseMeasuresName }}</span>
</div>
</div>
<div v-perms="['negative:score']">
<div
@ -258,7 +277,8 @@
</el-collapse>
</template>
<script setup>
import { BlameType } from "@/enums/dictEnums";
import { BlameType, ProblemSources } from "@/enums/dictEnums";
import { ProcessingStatus } from "@/enums/flowEnums";
import { getDictLable } from "@/utils/util";
import useCatchStore from "@/stores/modules/catch";

332
src/components/negative/verify.vue

@ -191,33 +191,7 @@
:autosize="{ minRows: 4 }"
/>
</el-form-item>
<el-form-item
label="化解情况"
prop="resolveSituation"
v-if="
negative.problemSourcesCode === ProblemSources.GJXFPT ||
negative.problemSourcesCode === ProblemSources.GABXF
"
:rules="{
required: true,
message: '请选择信访化解情况',
trigger: ['blur'],
}"
>
<el-select
v-model="form.resolveSituation"
clearable
style="width: 280px"
placeholder="请选择信访化解情况"
>
<el-option
v-for="item in dict.resolveSituation"
:key="item.id"
:label="item.dictLabel"
:value="item.dictValue"
/>
</el-select>
</el-form-item>
<template v-if="form.checkStatus !== InspectCase.UNABLE">
<div
v-if="
@ -560,7 +534,7 @@
:prop="`blames.${index}.subjectiveAspectName`"
:rules="{
required: true,
message: '请输入其他主观方面',
message: '其他主观方面不能为空',
trigger: ['blur'],
}"
v-if="
@ -575,80 +549,12 @@
item.subjectiveAspectName
"
placeholder="请输入其他主观方面"
style="width: 120px"
style="width: 160px"
/>
</el-form-item>
</div>
</el-form-item>
</el-col>
<template v-if="problemIsTrue">
<el-col :span="12">
<el-form-item
label="督察措施"
:prop="`blames[${index}].superviseMeasuresCode`"
>
<el-radio-group
v-model="item.superviseMeasuresCode"
clearabled
>
<el-radio
v-for="dictItem in dict.superviseMeasures"
:key="dictItem.dictCode"
:value="dictItem.dictValue"
@click.native.prevent="
() => {
if (
item.superviseMeasuresCode ===
dictItem.dictValue
) {
item.superviseMeasuresCode =
'';
item.superviseMeasuresName =
'';
} else {
item.superviseMeasuresCode =
dictItem.dictValue;
item.superviseMeasuresName =
dictItem.dictLabel;
}
}
"
>{{ dictItem.dictLabel }}
</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="维权容错"
:prop="`blames.${index}.protectRightsCode`"
v-if="
negative.problemSourcesCode !==
ProblemSources.JWDC
"
>
<el-radio-group
v-model="item.protectRightsCode"
@change="
(val) =>
(item.protectRightsName =
dict.protectRights.filter(
(item) =>
item.dictValue ===
val
)[0].dictLabel)
"
>
<el-radio
v-for="item in dict.protectRights"
:key="item.dictCode"
:value="item.dictValue"
>{{ item.dictLabel }}
</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</template>
<el-col :span="12" v-if="problemIsTrue">
<el-form-item
label="处理结果"
@ -719,6 +625,76 @@
/>
</el-form-item>
</el-col>
<template v-if="problemIsTrue">
<el-col :span="12">
<el-form-item
label="维权容错"
:prop="`blames.${index}.protectRightsCode`"
v-if="
negative.problemSourcesCode !==
ProblemSources.JWDC
"
>
<el-radio-group
v-model="item.protectRightsCode"
@change="
(val) =>
(item.protectRightsName =
dict.protectRights.filter(
(item) =>
item.dictValue ===
val
)[0].dictLabel)
"
>
<el-radio
v-for="item in dict.protectRights"
:key="item.dictCode"
:value="item.dictValue"
>{{ item.dictLabel }}
</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="督察措施"
:prop="`blames[${index}].superviseMeasuresCode`"
>
<el-radio-group
v-model="item.superviseMeasuresCode"
clearabled
>
<el-radio
v-for="dictItem in dict.superviseMeasures"
:key="dictItem.dictCode"
:value="dictItem.dictValue"
@click.native.prevent="
() => {
if (
item.superviseMeasuresCode ===
dictItem.dictValue
) {
item.superviseMeasuresCode =
'';
item.superviseMeasuresName =
'';
} else {
item.superviseMeasuresCode =
dictItem.dictValue;
item.superviseMeasuresName =
dictItem.dictLabel;
}
}
"
>{{ dictItem.dictLabel }}
</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</template>
</el-row>
</div>
<div class="flex center" style="width: 100%">
@ -763,7 +739,7 @@
<el-row style="background: #f9faff">
<el-col :span="24">
<el-form-item
label="涉及人员"
label="关联涉及人员"
:prop="`blameLeaders.${index}.blameIdCodes`"
:rules="{
required: true,
@ -896,67 +872,7 @@
</el-form-item>
</el-col>
<el-col :span="12" v-if="problemIsTrue">
<el-form-item
label="督察措施"
:prop="`blameLeaders.${index}.leadMeasuresCode`"
>
<el-radio-group
v-model="item.leadMeasuresCode"
>
<el-radio
v-for="dictItem in dict.superviseMeasures"
:key="dictItem.dictCode"
:value="dictItem.dictValue"
@click.native.prevent="
() => {
if (
item.leadMeasuresCode ===
dictItem.dictValue
) {
item.leadMeasuresCode =
'';
item.leadMeasuresName =
'';
} else {
item.leadMeasuresCode =
dictItem.dictValue;
item.leadMeasuresName =
dictItem.dictLabel;
}
}
"
>{{ dictItem.dictLabel }}
</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12" v-if="problemIsTrue">
<el-form-item
label="维权容错"
:prop="`blameLeaders.${index}.leadProtectRightsCode`"
>
<el-radio-group
v-model="item.leadProtectRightsCode"
@change="
(val) =>
(item.leadProtectRightsName =
dict.protectRights.filter(
(item) =>
item.dictValue ===
val
)[0].dictLabel)
"
>
<el-radio
v-for="item in dict.protectRights"
:key="item.dictCode"
:value="item.dictValue"
>{{ item.dictLabel }}
</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="处理结果"
@ -1401,6 +1317,7 @@
"
>
<el-divider />
<h5>信访办理</h5>
<el-form-item
prop="handlePolices"
label="经办人"
@ -1409,11 +1326,11 @@
validator: validateHandlePolices,
}"
>
<div>
<div
<div
class="mb-8 flex gap v-center"
v-for="(item, index) in form.handlePolices"
:key="index"
style="width: 100%"
>
<police-select
:depart-id="negative.handleSecondDepartId"
@ -1426,9 +1343,11 @@
}
"
/>
<span class="ml-20 text-right" style="width: 80px">联系电话</span>
<el-input
placeholder="联系方式"
v-model="item.mobile"
style="width: 240px"
/>
<el-button
plain
@ -1453,8 +1372,91 @@
删除经办人
</el-button>
</div>
</el-form-item>
<el-form-item
prop="visitingLeaderName"
label="接访领导"
:rules="{
required: true,
message: '请选择接访领导',
trigger: ['blur'],
}"
v-if="
negative.problemSourcesCode === ProblemSources.GJXFPT ||
negative.problemSourcesCode === ProblemSources.GABXF
"
>
<div class="flex gap" style="width: 100%">
<police-select
:host-level="negative.hostLevel"
:depart-id="
negative.hostLevel ===
HostLevel.SECOND
? negative.handleSecondDepartId
: negative.handleThreeDepartId
"
v-model="form.visitingLeaderEmpNo"
@change="(police) => form.visitingLeaderName = police.name"
:isLeader="true"
/>
<span class="ml-20 text-right" style="width: 80px">警号</span>
<el-input v-model="form.visitingLeaderEmpNo" placeholder="接访领导警号" style="width: 240px" />
</div>
</el-form-item>
<el-form-item
label="化解情况"
prop="resolveSituation"
v-if="
negative.problemSourcesCode === ProblemSources.GJXFPT ||
negative.problemSourcesCode === ProblemSources.GABXF
"
:rules="{
required: true,
message: '请选择信访化解情况',
trigger: ['blur'],
}"
>
<el-select
v-model="form.resolveSituation"
clearable
style="width: 240px"
placeholder="请选择信访化解情况"
>
<el-option
v-for="item in dict.resolveSituation"
:key="item.id"
:label="item.dictLabel"
:value="item.dictValue"
/>
</el-select>
</el-form-item>
<el-form-item
prop="resolveStatus"
label="当前状态"
:rules="{
required: true,
message: '请选择信访当前状态',
trigger: ['blur'],
}"
v-if="
negative.problemSourcesCode === ProblemSources.GJXFPT ||
negative.problemSourcesCode === ProblemSources.GABXF
"
>
<el-select
v-model="form.resolveStatus"
clearable
style="width: 240px"
placeholder="请选择信访化当前状态"
>
<el-option
v-for="item in dict.resolveStatus"
:key="item.id"
:label="item.dictLabel"
:value="item.dictValue"
/>
</el-select>
</el-form-item>
</div>
<el-form-item
@ -1539,10 +1541,10 @@ const dict = catchSotre.getDicts([
"handleResult",
"departHandleResult",
"protectRights",
"assistCase",
"accountabilityTarget",
"leadResponsibilityType",
"resolveSituation",
"resolveStatus"
]);
const negative = inject("negative");
@ -1572,7 +1574,6 @@ function getFormData() {
rectifyDesc: negative.value.rectifyDesc,
rectifyRestrictionDays: negative.value.rectifyRestrictionDays,
accountabilityTarget: negative.value.accountabilityTarget,
resolveSituation: negative.value.resolveSituation,
unrectifyReason: negative.value.unrectifyReason,
blames: negative.value.blames,
blameLeaders: negative.value.blameLeaders,
@ -1582,6 +1583,11 @@ function getFormData() {
negative.value.handlePolices.length === 0
? [{}]
: negative.value.handlePolices,
//
resolveSituation: negative.value.resolveSituation,
resolveStatus: negative.value.resolveStatus,
visitingLeaderName: negative.value.visitingLeaderName,
visitingLeaderEmpNo: negative.value.visitingLeaderEmpNo
};
if (negative.value.accountabilityTarget != undefined) {
form.value.accountabilityTarget = negative.value.accountabilityTarget;

2
src/views/mobileSupervise/Inspection.vue

@ -99,7 +99,7 @@
type="primary"
link
@click="handleProblemsShow(row)"
>问题清单</el-button
>督察详情</el-button
>
</template>
</el-table-column>

81
src/views/mobileSupervise/TestingAlcohol.vue

@ -194,20 +194,50 @@
</el-radio-group>
</el-form-item>
<template v-if="form.dataGenerationMethod === 'Excel导入人员'">
<el-upload
drag
:multiple="false"
:auto-upload="false"
:show-file-list="false"
accept="application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
>
<el-icon class="el-icon--upload"
><upload-filled
/></el-icon>
<div class="el-upload__text">
<p>点击或拖拽文件到此区域上传</p>
<div v-loading="importLoading">
<el-upload
drag
:multiple="false"
:auto-upload="false"
:show-file-list="false"
v-model:file-list="fileList"
@change="handleImport"
accept="application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
>
<template v-if="fileList.length === 0">
<el-icon class="el-icon--upload"
><upload-filled
/></el-icon>
<div class="el-upload__text">
<p>点击或拖拽文件到此区域上传</p>
</div>
</template>
<template v-else>
<el-icon class="el-icon--upload"
><Select
/></el-icon>
<div class="el-upload__text">
已选择文件{{
fileList[fileList.length - 1].name
}}
</div>
</template>
</el-upload>
<div class="mt-20">
<span>文件模板</span>
<a
class="link"
:href="`${BASE_PATH}/templates/测酒任务人员模板.xlsx`"
target="__blank"
>测酒任务被测人员模板.xlsx 下载</a
>
</div>
</el-upload>
<div class="flex gap wrap pepole-container mt-20">
<el-tag v-for="item in form.peoples" :key="item"
>{{ item.name }}-{{ item.empNo }}</el-tag
>
</div>
</div>
</template>
<template v-if="form.dataGenerationMethod === '自定义人员'">
<h5>筛选条件</h5>
@ -599,11 +629,11 @@
</el-row>
<el-divider />
<div class="row">
<div class="col col-24">
<div class="col col-24" v-if="activePeople.testingResult">
<label>检测情况</label>
<span>{{ activePeople.testingResult }}</span>
</div>
<div class="col col-12">
<div class="col col-12" v-if="activePeople.drinkResult">
<label>饮酒结果</label>
<span>{{ activePeople.drinkResult }}</span>
</div>
@ -633,6 +663,7 @@ import {
addTestingAlcohol,
getPersonNumber,
listTestingAlcoholPeoples,
importTestingAlcoholPeople
} from "@/api/mobileSupervision/testingAlcohol";
import feedback from "@/utils/feedback";
import useCatchStore from "@/stores/modules/catch";
@ -782,6 +813,26 @@ function handleShowPeople(row) {
activePeople.value = row;
peopleDetailShow.value = true;
}
const fileList = ref([])
const importLoading = ref(false)
watch(fileList, async () => {
if (fileList.value.length === 0) {
return;
}
importLoading.value = true
const formData = new FormData();
formData.append("file", fileList.value[fileList.value.length - 1].raw);
try {
form.value.peoples = await importTestingAlcoholPeople(formData);
} catch (e) {
importLoading.value = false
throw e;
}
importLoading.value = false
})
</script>
<style lang="scss" scoped>
h5 {

Loading…
Cancel
Save