Browse Source

fix. 修复修改核查内容 涉及单位修改不生效的问题。

fix 修复单位会签,当连续会签时会保留上一个件会签的记录的问题。

fit. 模型超市-模型分类,增加模型数量显示。
fit. 问题下发,新增是否开启流程选项。如果选择关闭流程,问题下发后对应办理单位无待办任务;
perf. 问题下发调整: a、枪支管理:监督管理-专项督察-选择“枪支管理”取消“通报期数”的必填项 b、主办层级描述修改,并将标红后半句:如主办层级为 市局主办,则由督察支队办理;如主办层级为 二级机构主办,则由督察部门办理,可进一步下发;如主办层级为 三级机构主办,则由所队办理。 c、指定具体办理单位 修改为 “指定办理单位” d、主办层级与指定办理单位需灵活关联,a.如“主办层级”选择二级主办,关联办理单位为三级机构,需友好提示“当前选择二级机构主办,指定办理单位请选择二级机构!”b.需根据主办层级的修改,关联办理单位可选择的范围,并提示。
main
wxc 12 months ago
parent
commit
fdcf5530a0
  1. 57
      src/components/file/list.vue
  2. 15
      src/components/model-risk-tree.vue
  3. 282
      src/components/negative/add.vue
  4. 8
      src/components/negative/apply-countersign.vue
  5. 6
      src/components/negative/countersign.vue
  6. 4
      src/views/sensitivePerception/Model.vue
  7. 2
      src/views/sensitivePerception/RiskPersonnel.vue
  8. 15
      src/views/system/Police.vue

57
src/components/file/list.vue

@ -26,23 +26,22 @@
</a>
</template>
<template v-else>
<div
class="item flex end v-center column text-center"
:title="item.fileName"
@click="filePreview(item)"
<div
class="item flex end v-center column text-center"
:title="item.fileName"
@click="filePreview(item)"
v-else
>
<icon :name="getIconName(item.fileName)" :size="40" />
<span class="filename">{{ item.fileName }}</span>
<a
class="remove-btn"
@click.stop="remove(index)"
v-if="removeEnable"
>
<icon :name="getIconName(item.fileName)" :size="40" />
<span class="filename">{{ item.fileName }}</span>
<a
class="remove-btn"
@click.stop="remove(index)"
v-if="removeEnable"
>
<icon name="el-icon-CircleCloseFilled" :size="16" />
</a>
</div>
</template>
<icon name="el-icon-CircleCloseFilled" :size="16" />
</a>
</div>
</div>
</div>
@ -61,10 +60,7 @@
</section>
</div>
</el-scrollbar>
<div
class="file-content flex center v-center"
@click="preview = false"
>
<div class="file-content flex center v-center" @click="preview = false">
<div
class="img-container flex center"
v-if="getFileType(activeFile.fileName) === FileType.IMG"
@ -128,9 +124,7 @@
</video>
</template>
<template
v-else-if="
getFileType(activeFile.fileName) === FileType.WORD
"
v-else-if="getFileType(activeFile.fileName) === FileType.WORD"
>
<vue-office-docx
:src="`${BASE_PATH}/file/stream/${activeFile.filePath}`"
@ -174,7 +168,13 @@
@click.stop
>
<template #extra>
<el-button type="primary" text size="large" @click="download">下载文件</el-button>
<el-button
type="primary"
text
size="large"
@click="download"
>下载文件</el-button
>
</template>
</el-result>
</div>
@ -205,12 +205,7 @@
<icon name="el-icon-Close" :size="28" />
</button>
<el-button
class="download-btn"
@click="download"
type="primary"
plain
>
<el-button class="download-btn" @click="download" type="primary" plain>
<template #icon>
<icon name="el-icon-Download" :size="20" />
</template>
@ -290,7 +285,6 @@ function next() {
}
}
function wheel(event) {
if (event.deltaY > 0 && scale.value > 0.5) {
scale.value -= 0.1;
@ -348,7 +342,6 @@ function rotateRight() {
rotate.value -= 90;
}
}
</script>
<style lang="scss" scoped>
.file-container {

15
src/components/model-risk-tree.vue

@ -13,7 +13,7 @@
:default-expanded-keys="[ROOT_ID]"
:props="{
label: 'riskName',
value: 'id'
value: 'id',
}"
:filter-node-method="filterNode"
@node-click="handleClick"
@ -24,9 +24,7 @@
</template>
<script lang="ts" setup>
import Icon from "@/components/icon/index.vue";
import {
listRiskScoreRuleTree
} from "@/api/sensitivePerception/riskScoreRule";
import { listRiskScoreRuleTree } from "@/api/sensitivePerception/riskScoreRule";
const ROOT_ID = 0;
const treeData = ref([
@ -41,7 +39,7 @@ const list = ref([]);
const total = ref(0);
onMounted(() => {
listRiskScoreRuleTree().then((data) => {
listRiskScoreRuleTree().then((data) => {
treeData.value[0].children = data;
});
});
@ -75,16 +73,16 @@ function renderContent(
h(
"span",
{
title: node.label + '('+node.ruleDesc+')',
title: node.label + "(" + node.ruleDesc + ")",
},
node.label
),
h(
"span",
{
class: 'ml-8 text-primary'
class: "ml-8 text-primary",
},
node.data.size ? `(${node.data.size })` : ''
node.data.size ? `(${node.data.size})` : ""
)
);
}
@ -126,6 +124,7 @@ function getModelId(arr, node) {
getModelId(arr, item);
});
}
</script>
<style lang="scss" scoped>
:deep() {

282
src/components/negative/add.vue

@ -1,5 +1,5 @@
<template>
<el-dialog title="问题录入" width="54vw" :lock-scroll="false" top="5vh">
<el-dialog title="问题下发" width="54vw" :lock-scroll="false" top="5vh">
<el-scrollbar
height="75vh"
v-loading="loading"
@ -108,8 +108,8 @@
label="通报期数"
prop="reportNumber"
:rules="{
required: true,
message: '请选择通报期数',
required: form.specialSupervision !== '2',
message: '请输入通报期数',
trigger: ['blur'],
}"
>
@ -293,147 +293,170 @@
tips="为便于“办理单位”更全面了解问题详情,请上传相关附件,如现场督察、数字督察等相关照片、视频及其他佐证材料。"
/>
</el-form-item>
</div>
<h2>办理单位</h2>
<div class="add-negation-container">
<el-form-item
label="主办层级"
prop="hostLevel"
:rules="{
required: true,
message: '请选择主办层级',
trigger: ['blur'],
}"
>
<el-select
style="width: 280px"
v-model="form.hostLevel"
@change="handleChangeHostLevel"
>
<el-option
v-for="item in dict.hostLevel"
:key="item.id"
:label="item.dictLabel"
:value="item.dictValue"
/>
</el-select>
<div class="tips mt-10">
<p>
如主办层级 市局主办 则由市局直属支队办理
</p>
<p>
如主办层级
二级机构主办时则由涉及单位的二级机构办理
</p>
<p>
如主办层级 三级机构主办时
则由涉及单位办理
</p>
</div>
</el-form-item>
<el-form-item
label="指定具体办理单位"
prop="departId"
:rules="{
required: true,
message: '请选择办理单位',
trigger: ['blur'],
}"
>
<div class="flex gap">
<div style="width: 280px">
<template
v-if="form.hostLevel === HostLevel.THREE"
>
<depart-tree-select
v-model="form.departId"
v-loading="departLoading"
/>
</template>
<el-tree-select
v-else
:data="departs"
:props="{ label: 'shortName', value: 'id' }"
node-key="id"
clearable
filterable
v-model="form.departId"
@node-click="handleSelectDepart"
check-strictly
style="width: 280px"
v-loading="departLoading"
/>
</div>
<el-button
type="primary"
@click="handleLinkDepart"
text
v-if="form.hostLevel !== HostLevel.FIRST"
>关联问题涉及单位</el-button
>
</div>
<div class="tips mt-10">
<p>问题涉及单位 指与该问题相关的单位</p>
<p>指定具体办理单位 指将问题分派给哪个单位办理</p>
</div>
</el-form-item>
</div>
<h2>办理时限</h2>
<div class="add-negation-container">
<el-form-item
label="办理时限"
prop="timeLimit"
:rules="{
required: true,
message: '请选择办理时限',
trigger: ['blur'],
}"
>
<time-limit-select
v-model="form.timeLimit"
v-model:maxSignDuration="form.maxSignDuration"
v-model:maxHandleDuration="form.maxHandleDuration"
v-model:maxExtensionDuration="
form.maxExtensionDuration
"
<el-form-item label="流程" prop="">
<el-switch
v-model="form.flowFlag"
inline-prompt
active-text="开启"
inactive-text="关闭"
:active-value="true"
:inactive-value="false"
/>
</el-form-item>
</div>
<div>
<h2>审批流程</h2>
<template v-if="form.flowFlag">
<el-divider />
<h2>办理单位</h2>
<div class="add-negation-container">
<el-form-item
label="审批流程"
prop="approvalFlow"
label="主办层级"
prop="hostLevel"
:rules="{
required: true,
message: '请选择审批流程',
message: '请选择主办层级',
trigger: ['blur'],
}"
>
<el-radio-group v-model="form.approvalFlow">
<el-radio
v-for="item in dict.approvalFlow"
:key="item.dictCode"
<el-select
style="width: 280px"
v-model="form.hostLevel"
@change="handleChangeHostLevel"
>
<el-option
v-for="item in dict.hostLevel"
:key="item.id"
:label="item.dictLabel"
:value="item.dictValue"
>{{ item.dictLabel
}}{{
item.remark ? `(${item.remark})` : ""
}}</el-radio
>
</el-radio-group>
/>
</el-select>
<div class="tips mt-10">
<p>
三级审核 在问题提交办结时需经过所队>二级机构>市局三级审核通过后方可办结
如主办层级 市局主办
则由督察支队办理
</p>
<p>
二级审核 在问题提交办结时仅需经过所队>二级机构两级审核通过后即可办结
如主办层级为 二级机构主办则由督察部门办理可进一步下发
</p>
<p style="color: var(--danger-color)">
如主办层级为 三级机构主办则由所队办理
</p>
</div>
</el-form-item>
<el-form-item
label="指定办理单位"
prop="departId"
:rules="{
required: true,
message: '请选择办理单位',
trigger: ['blur'],
}"
>
<div class="flex gap">
<div style="width: 280px">
<template
v-if="
form.hostLevel === HostLevel.THREE
"
>
<depart-tree-select
v-model="form.departId"
v-loading="departLoading"
/>
</template>
<el-tree-select
v-else
:data="departs"
:props="{
label: 'shortName',
value: 'id',
}"
node-key="id"
clearable
filterable
v-model="form.departId"
@node-click="handleSelectDepart"
check-strictly
style="width: 280px"
v-loading="departLoading"
/>
</div>
<el-button
type="primary"
@click="handleLinkDepart"
text
v-if="form.hostLevel !== HostLevel.FIRST"
>关联问题涉及单位</el-button
>
</div>
<div class="tips mt-10">
<p>问题涉及单位 指与该问题相关的单位</p>
<p>
指定具体办理单位
指将问题分派给哪个单位办理
</p>
</div>
</el-form-item>
</div>
</div>
<h2>办理时限</h2>
<div class="add-negation-container">
<el-form-item
label="办理时限"
prop="timeLimit"
:rules="{
required: true,
message: '请选择办理时限',
trigger: ['blur'],
}"
>
<time-limit-select
v-model="form.timeLimit"
v-model:maxSignDuration="form.maxSignDuration"
v-model:maxHandleDuration="
form.maxHandleDuration
"
v-model:maxExtensionDuration="
form.maxExtensionDuration
"
/>
</el-form-item>
</div>
<div>
<h2>审批流程</h2>
<div class="add-negation-container">
<el-form-item
label="审批流程"
prop="approvalFlow"
:rules="{
required: true,
message: '请选择审批流程',
trigger: ['blur'],
}"
>
<el-radio-group v-model="form.approvalFlow">
<el-radio
v-for="item in dict.approvalFlow"
:key="item.dictCode"
:value="item.dictValue"
>{{ item.dictLabel
}}{{
item.remark
? `(${item.remark})`
: ""
}}</el-radio
>
</el-radio-group>
<div class="tips mt-10">
<p>
三级审核 在问题提交办结时需经过所队>二级机构>市局三级审核通过后方可办结
</p>
<p>
二级审核 在问题提交办结时仅需经过所队>二级机构两级审核通过后即可办结
</p>
</div>
</el-form-item>
</div>
</div>
</template>
</el-form>
</el-scrollbar>
<footer class="flex end">
@ -449,7 +472,7 @@
</el-dialog>
</template>
<script lang="ts" setup>
import moment from 'moment'
import moment from "moment";
import {
HostLevel,
TimeLimit,
@ -487,6 +510,7 @@ const form = ref({
hostLevel: HostLevel.THREE,
timeLimit: TimeLimit.WORK_137,
approvalFlow: ApprovalFlow.SECOND,
flowFlag: true
});
watch(
@ -546,6 +570,10 @@ function handleSelectDepart(row, node) {
}
function handleLinkDepart() {
if (form.value.hostLevel === HostLevel.SECOND) {
feedback.msgWarning('当前选择二级机构主办,指定办理单位请选择二级机构!')
return
}
form.value.departId = form.value.involveDepartId;
form.value.departName = form.value.involveDepartName;
}
@ -560,7 +588,7 @@ function handleChangeHostLevel(val) {
}
function disabledDate(time) {
return time.getTime() < moment('1949-10-01', 'YYYY-MM-DD').valueOf()
return time.getTime() < moment("1949-10-01", "YYYY-MM-DD").valueOf();
}
</script>
<style lang="scss" scoped>

8
src/components/negative/apply-countersign.vue

@ -65,6 +65,14 @@ const formData = ref({
})
const formRef = ref()
const negative = inject('negative')
watch(() => negative.value.id, () => {
formData.value = {
countersignDeparts: [{}]
}
})
function handleAddDepart() {
formData.value.countersignDeparts.push({})
}

6
src/components/negative/countersign.vue

@ -20,6 +20,12 @@
const formData = ref({});
const formRef = ref();
const negative = inject('negative')
watch(() => negative.value.id, () => {
formData.value = {}
})
async function validate() {
await formRef.value.validate();
return formData.value;

4
src/views/sensitivePerception/Model.vue

@ -12,7 +12,8 @@
@click="handleChangeClass(item.id)"
:active="query.classId === item.id"
>
{{ item.name }}
<span :title="item.name">{{ item.name }}</span>
<span class="ml-8 text-primary text-bold">{{ item.size }}</span>
</div>
</div>
</el-col>
@ -980,6 +981,7 @@ function goClue() {
line-height: 47px;
padding-left: 36px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
&:hover,
&[active="true"] {

2
src/views/sensitivePerception/RiskPersonnel.vue

@ -66,7 +66,7 @@
</header>
<div class="table-container">
<el-table :data="list">
<el-table-column label="姓名" prop="name" width="100" />
<el-table-column label="姓名" prop="name" width="80" />
<el-table-column
label="性别"
prop="gender"

15
src/views/system/Police.vue

@ -475,6 +475,19 @@
<el-button type="primary" @click="submit">确定</el-button>
</footer>
</el-dialog>
<el-dialog title="删除" v-model="delDialog">
<el-form>
<el-form-item title="删除原因">
<el-select>
<el-option></el-option>
</el-select>
</el-form-item>
<el-form-item title="其他原因">
<el-input />
</el-form-item>
</el-form>
</el-dialog>
</template>
<script setup>
import { BASE_PATH } from "@/api/request";
@ -651,6 +664,8 @@ function handleError(result) {
importLoading.close();
feedback.msgError(result.message || "上传失败!");
}
const delDialog = ref(false)
</script>
<style lang="scss" scoped>
</style>
Loading…
Cancel
Save