!159 fix(bqtakepulse): 筛选条件文案改为意见类型

* fix(bqtakepulse): 筛选条件文案改为意见类型
* fix(bgpartymatter): 反馈弹窗字段对齐
* fix(inspectProblem): 上级问题字段按问题种类动态显示必填星号
* fix(bqtakepulse): 督办次数改为数字输入
* fix(bqtakepulse): 反馈弹窗字段对齐并支持长label换行
* feat(bpm): 各流程表单默认抄送改用角色查询接口
* fix(bgpartymatter): 所办负责人审批改为单选并调整编辑表单布局
* fix(modal): 详情弹窗支持点击遮罩关闭
This commit is contained in:
wsm
2026-08-18 02:58:09 +00:00
parent e0c438dcd6
commit 2b939ed260
14 changed files with 146 additions and 95 deletions
@@ -45,8 +45,11 @@
</a-form-item> </a-form-item>
<template v-if="showSuoleaderFields"> <template v-if="showSuoleaderFields">
<a-form-item label="是否所办负责人审批"> <a-form-item label="所办负责人审批">
<j-switch v-model:value="formData.isNeedAppro" /> <a-radio-group v-model:value="formData.isNeedAppro">
<a-radio value="1"></a-radio>
<a-radio value="0"></a-radio>
</a-radio-group>
</a-form-item> </a-form-item>
<a-form-item label="所办负责人"> <a-form-item label="所办负责人">
@@ -100,7 +103,6 @@
import { reactive, ref, watch } from 'vue'; import { reactive, ref, watch } from 'vue';
import JModal from '/src/components/Modal/src/JModal/JModal.vue'; import JModal from '/src/components/Modal/src/JModal/JModal.vue';
import JDictSelectTag from '/src/components/Form/src/jeecg/components/JDictSelectTag.vue'; import JDictSelectTag from '/src/components/Form/src/jeecg/components/JDictSelectTag.vue';
import JSwitch from '/src/components/Form/src/jeecg/components/JSwitch.vue';
import DeptRoleUserSelectRadioGroup from '/@/components/semri/userComponent/DeptRoleUserSelectRadioGroup.vue'; import DeptRoleUserSelectRadioGroup from '/@/components/semri/userComponent/DeptRoleUserSelectRadioGroup.vue';
import { SUOBAN_DEPT_ID, MEASURE_RES_LEADER_ROLE_ID } from '/@/constant/supervision'; import { SUOBAN_DEPT_ID, MEASURE_RES_LEADER_ROLE_ID } from '/@/constant/supervision';
import { useMessage } from '/src/hooks/web/useMessage'; import { useMessage } from '/src/hooks/web/useMessage';
@@ -46,20 +46,20 @@
</a-form-item> </a-form-item>
</a-tooltip> </a-tooltip>
</a-col> </a-col>
<a-col :span="12"> <a-col :span="24">
<a-tooltip :title="isEdit ? '' : '该信息后续不可编辑,请谨慎填写'"> <a-tooltip :title="isEdit ? '' : '该信息后续不可编辑,请谨慎填写'">
<a-form-item label="计划完成日期" name="planTime"> <a-form-item label="计划完成日期" name="planTime" :labelCol="wideLabelCol" :wrapperCol="wideWrapperCol">
<a-date-picker v-model:value="formData.planTime" value-format="YYYY-MM-DD" style="width: 100%" :disabled="isEdit" allow-clear /> <a-date-picker v-model:value="formData.planTime" value-format="YYYY-MM-DD" style="width: 100%" :disabled="isEdit" allow-clear />
</a-form-item> </a-form-item>
</a-tooltip> </a-tooltip>
</a-col> </a-col>
<a-col :span="12"> <a-col :span="24">
<a-form-item label="完成状态" name="bpmStatus"> <a-form-item label="完成状态" name="bpmStatus" :labelCol="wideLabelCol" :wrapperCol="wideWrapperCol">
<JDictSelectTag v-model:value="formData.bpmStatus" dictCode="feedback_status" placeholder="请选择完成状态" allow-clear /> <JDictSelectTag v-model:value="formData.bpmStatus" dictCode="feedback_status" placeholder="请选择完成状态" allow-clear />
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :span="12"> <a-col :span="24">
<a-form-item label="实际完成日期" name="actualTime"> <a-form-item label="实际完成日期" name="actualTime" :labelCol="wideLabelCol" :wrapperCol="wideWrapperCol">
<a-date-picker v-model:value="formData.actualTime" value-format="YYYY-MM-DD" placeholder="请选择实际完成日期" style="width: 100%" :disabled="isEdit" allow-clear /> <a-date-picker v-model:value="formData.actualTime" value-format="YYYY-MM-DD" placeholder="请选择实际完成日期" style="width: 100%" :disabled="isEdit" allow-clear />
</a-form-item> </a-form-item>
</a-col> </a-col>
@@ -300,11 +300,7 @@
import SUploadFile from '/@/components/semri/fileComponent/SUploadFile.vue'; import SUploadFile from '/@/components/semri/fileComponent/SUploadFile.vue';
import SzDeptUserModal from '/@/components/semri/deptUserComponent/SzDeptUserModal.vue'; import SzDeptUserModal from '/@/components/semri/deptUserComponent/SzDeptUserModal.vue';
import DeptRoleUserSelectDropDown from '/@/components/semri/userComponent/DeptRoleUserSelectDropDown.vue'; import DeptRoleUserSelectDropDown from '/@/components/semri/userComponent/DeptRoleUserSelectDropDown.vue';
import { import { PARTY_COMMITTEE_DEPT_ID, PARTY_COMMITTEE_DEPT_ID as CHARGE_LEADER_DEPT_ID, CHARGE_LEADER_ROLE_ID } from '/@/constant/supervision';
PARTY_COMMITTEE_DEPT_ID,
PARTY_COMMITTEE_DEPT_ID as CHARGE_LEADER_DEPT_ID,
CHARGE_LEADER_ROLE_ID,
} from '/@/constant/supervision';
const { initBpmFormData } = usePermission(); const { initBpmFormData } = usePermission();
const props = defineProps({ const props = defineProps({
@@ -509,7 +505,7 @@
try { try {
// 默认抄送按分管所领导角色跨部门查询,与台账分管所领导下拉逻辑一致 // 默认抄送按分管所领导角色跨部门查询,与台账分管所领导下拉逻辑一致
const res = await defHttp.get({ const res = await defHttp.get({
url: '/sys/user/queryUserRoleComponentData', url: '/sys/user/queryUserByRoleId',
params: { roleId: CHARGE_LEADER_ROLE_ID, searchSecurityLevel: 5, pageNo: 1, pageSize: 999 }, params: { roleId: CHARGE_LEADER_ROLE_ID, searchSecurityLevel: 5, pageNo: 1, pageSize: 999 },
}); });
const records = res?.records || res?.result?.records || []; const records = res?.records || res?.result?.records || [];
@@ -5,7 +5,7 @@
:width="width" :width="width"
centered centered
:footer="null" :footer="null"
:maskClosable="false" :maskClosable="true"
:bodyStyle="{ maxHeight: '70vh', overflowY: 'auto', padding: '16px 24px 20px' }" :bodyStyle="{ maxHeight: '70vh', overflowY: 'auto', padding: '16px 24px 20px' }"
wrapClassName="partymatter-detail-modal" wrapClassName="partymatter-detail-modal"
destroyOnClose destroyOnClose
@@ -124,20 +124,16 @@
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :xs="24" :md="12"> <a-col :xs="24" :md="12">
<a-form-item label="是否急件" v-bind="validateInfos.urgencyLevel" id="BgPartymatterForm-urgencyLevel" name="urgencyLevel">
<j-dict-select-tag v-model:value="formData.urgencyLevel" dictCode="yn" placeholder="请选择是否急件" allow-clear />
</a-form-item>
</a-col>
<a-col :span="24">
<a-form-item <a-form-item
label="需所办负责人审批" label="需所办负责人审批"
v-bind="validateInfos.isNeedAppro" v-bind="validateInfos.isNeedAppro"
id="BgPartymatterForm-isNeedAppro" id="BgPartymatterForm-isNeedAppro"
name="isNeedAppro" name="isNeedAppro"
:labelCol="wideLabelCol"
:wrapperCol="wideWrapperCol"
> >
<j-switch v-model:value="formData.isNeedAppro"></j-switch> <a-radio-group v-model:value="formData.isNeedAppro">
<a-radio value="1"></a-radio>
<a-radio value="0"></a-radio>
</a-radio-group>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col v-if="showSupDeptLeader" :xs="24" :md="12"> <a-col v-if="showSupDeptLeader" :xs="24" :md="12">
@@ -150,6 +146,11 @@
/> />
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :xs="24" :md="12">
<a-form-item label="是否急件" v-bind="validateInfos.urgencyLevel" id="BgPartymatterForm-urgencyLevel" name="urgencyLevel">
<j-dict-select-tag v-model:value="formData.urgencyLevel" dictCode="yn" placeholder="请选择是否急件" allow-clear />
</a-form-item>
</a-col>
<!-- <a-col :span="12">--> <!-- <a-col :span="12">-->
<!-- <a-form-item label="是否抄送所领导" v-bind="validateInfos.isNeedSuoleader" id="BgPartymatterForm-isNeedSuoleader" name="isNeedSuoleader">--> <!-- <a-form-item label="是否抄送所领导" v-bind="validateInfos.isNeedSuoleader" id="BgPartymatterForm-isNeedSuoleader" name="isNeedSuoleader">-->
<!-- <j-switch v-model:value="formData.isNeedSuoleader" ></j-switch>--> <!-- <j-switch v-model:value="formData.isNeedSuoleader" ></j-switch>-->
@@ -194,7 +195,6 @@
import { ref, reactive, defineExpose, nextTick, defineProps, computed, onMounted, watch } from 'vue'; import { ref, reactive, defineExpose, nextTick, defineProps, computed, onMounted, watch } from 'vue';
import { defHttp } from '/@/utils/http/axios'; import { defHttp } from '/@/utils/http/axios';
import { useMessage } from '/@/hooks/web/useMessage'; import { useMessage } from '/@/hooks/web/useMessage';
import JSwitch from '/@/components/Form/src/jeecg/components/JSwitch.vue';
import JSelectDept from '/@/components/Form/src/jeecg/components/JSelectDept.vue'; import JSelectDept from '/@/components/Form/src/jeecg/components/JSelectDept.vue';
import JSelectUser from '/@/components/Form/src/jeecg/components/JSelectUser.vue'; import JSelectUser from '/@/components/Form/src/jeecg/components/JSelectUser.vue';
import JDictSelectTag from '/@/components/Form/src/jeecg/components/JDictSelectTag.vue'; import JDictSelectTag from '/@/components/Form/src/jeecg/components/JDictSelectTag.vue';
+4 -9
View File
@@ -17,13 +17,13 @@
<a-col :xl="3" :lg="6" :md="8" :sm="12"> <a-col :xl="3" :lg="6" :md="8" :sm="12">
<a-form-item name="taskType"> <a-form-item name="taskType">
<template #label> <template #label>
<a-tooltip title="按会议类型筛选">会议类型</a-tooltip> <a-tooltip title="按意见类型筛选">意见类型</a-tooltip>
</template> </template>
<a-tooltip title="按会议类型筛选" <a-tooltip title="按意见类型筛选"
><JDictSelectTag ><JDictSelectTag
v-model:value="queryParam.taskType" v-model:value="queryParam.taskType"
dictCode="super_takepulse_type" dictCode="super_takepulse_type"
placeholder="请选择会议类型" placeholder="请选择意见类型"
allow-clear allow-clear
@change="searchQuery" @change="searchQuery"
/></a-tooltip> /></a-tooltip>
@@ -116,12 +116,7 @@
@click="handleImportByTemplate" @click="handleImportByTemplate"
>模板导入</j-upload-button >模板导入</j-upload-button
> >
<a-button <a-button v-if="selectedRowKeys.length > 0" v-auth="'bqtakepulse:bg_takepulse:deleteBatch'" danger @click="batchHandleDelete">
v-if="selectedRowKeys.length > 0"
v-auth="'bqtakepulse:bg_takepulse:deleteBatch'"
danger
@click="batchHandleDelete"
>
<Icon icon="ant-design:delete-outlined"></Icon> <Icon icon="ant-design:delete-outlined"></Icon>
删除 删除
</a-button> </a-button>
@@ -10,7 +10,7 @@
@cancel="handleCancel" @cancel="handleCancel"
> >
<a-alert v-if="!isEdit" message="可以多次添加反馈信息" type="info" showIcon style="margin-bottom: 12px" /> <a-alert v-if="!isEdit" message="可以多次添加反馈信息" type="info" showIcon style="margin-bottom: 12px" />
<a-form ref="formRef" class="bpm-feedback-modal-form" :model="formData" :rules="formRules" :labelCol="labelCol" :wrapperCol="wrapperCol"> <a-form ref="formRef" class="bpm-feedback-modal-form" :model="formData" :rules="formRules" :labelCol="labelCol" :wrapperCol="wrapperCol" labelWrap>
<a-row :gutter="16"> <a-row :gutter="16">
<a-col :span="24"> <a-col :span="24">
<a-tooltip :title="isEdit ? '' : '该信息后续不可编辑,请谨慎填写'"> <a-tooltip :title="isEdit ? '' : '该信息后续不可编辑,请谨慎填写'">
@@ -19,20 +19,20 @@
</a-form-item> </a-form-item>
</a-tooltip> </a-tooltip>
</a-col> </a-col>
<a-col :span="12"> <a-col :span="24">
<a-tooltip :title="isEdit ? '' : '该信息后续不可编辑,请谨慎填写'"> <a-tooltip :title="isEdit ? '' : '该信息后续不可编辑,请谨慎填写'">
<a-form-item label="计划完成日期" name="planTime"> <a-form-item label="计划完成日期" name="planTime" :labelCol="wideLabelCol" :wrapperCol="wideWrapperCol">
<a-date-picker v-model:value="formData.planTime" value-format="YYYY-MM-DD" style="width: 100%" :disabled="isEdit" allow-clear /> <a-date-picker v-model:value="formData.planTime" value-format="YYYY-MM-DD" style="width: 100%" :disabled="isEdit" allow-clear />
</a-form-item> </a-form-item>
</a-tooltip> </a-tooltip>
</a-col> </a-col>
<a-col :span="12"> <a-col :span="24">
<a-form-item label="完成状态" name="bpmStatus"> <a-form-item label="完成状态" name="bpmStatus" :labelCol="wideLabelCol" :wrapperCol="wideWrapperCol">
<JDictSelectTag v-model:value="formData.bpmStatus" dictCode="feedback_status" placeholder="请选择完成状态" allow-clear /> <JDictSelectTag v-model:value="formData.bpmStatus" dictCode="feedback_status" placeholder="请选择完成状态" allow-clear />
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :span="12"> <a-col :span="24">
<a-form-item label="实际完成日期" name="actualTime"> <a-form-item label="实际完成日期" name="actualTime" :labelCol="wideLabelCol" :wrapperCol="wideWrapperCol">
<a-date-picker v-model:value="formData.actualTime" value-format="YYYY-MM-DD" placeholder="请选择实际完成日期" style="width: 100%" :disabled="isEdit" allow-clear /> <a-date-picker v-model:value="formData.actualTime" value-format="YYYY-MM-DD" placeholder="请选择实际完成日期" style="width: 100%" :disabled="isEdit" allow-clear />
</a-form-item> </a-form-item>
</a-col> </a-col>
@@ -1,7 +1,14 @@
<template> <template>
<a-spin :spinning="loading"> <a-spin :spinning="loading">
<div class="bg-takepulse-bpm-form"> <div class="bg-takepulse-bpm-form">
<a-form class="main-form" :class="{ 'main-form-readonly': mainDisabled }" labelAlign="left" :labelCol="labelCol" :wrapperCol="wrapperCol" :model="mainForm"> <a-form
class="main-form"
:class="{ 'main-form-readonly': mainDisabled }"
labelAlign="left"
:labelCol="labelCol"
:wrapperCol="wrapperCol"
:model="mainForm"
>
<div class="base-info-header section-toolbar"> <div class="base-info-header section-toolbar">
<div class="section-title">基础信息</div> <div class="section-title">基础信息</div>
<a-space class="section-actions"> <a-space class="section-actions">
@@ -9,7 +16,12 @@
<Icon icon="ant-design:save-outlined" /> <Icon icon="ant-design:save-outlined" />
保存 保存
</a-button> </a-button>
<a-button class="section-action-button" :type="showBaseInfoDetail ? 'default' : 'link'" size="small" @click="showBaseInfoDetail = !showBaseInfoDetail"> <a-button
class="section-action-button"
:type="showBaseInfoDetail ? 'default' : 'link'"
size="small"
@click="showBaseInfoDetail = !showBaseInfoDetail"
>
<Icon :icon="showBaseInfoDetail ? 'ant-design:up-outlined' : 'ant-design:down-outlined'" /> <Icon :icon="showBaseInfoDetail ? 'ant-design:up-outlined' : 'ant-design:down-outlined'" />
{{ showBaseInfoDetail ? '收起基础信息' : '展开全部信息' }} {{ showBaseInfoDetail ? '收起基础信息' : '展开全部信息' }}
</a-button> </a-button>
@@ -30,7 +42,15 @@
<a-divider /> <a-divider />
<a-col :span="12"> <a-col :span="12">
<a-form-item label="年份" name="year"> <a-form-item label="年份" name="year">
<a-date-picker v-model:value="mainForm.year" picker="year" value-format="YYYY" :disabled="mainDisabled" placeholder="请选择年份" style="width: 100%" allow-clear /> <a-date-picker
v-model:value="mainForm.year"
picker="year"
value-format="YYYY"
:disabled="mainDisabled"
placeholder="请选择年份"
style="width: 100%"
allow-clear
/>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :span="12"> <a-col :span="12">
@@ -133,7 +153,14 @@
</a-col> </a-col>
<a-col :span="12"> <a-col :span="12">
<a-form-item label="实际完成时间" name="actualTime"> <a-form-item label="实际完成时间" name="actualTime">
<a-date-picker v-model:value="mainForm.actualTime" showTime value-format="YYYY-MM-DD HH:mm:ss" :disabled="mainDisabled" style="width: 100%" allow-clear /> <a-date-picker
v-model:value="mainForm.actualTime"
showTime
value-format="YYYY-MM-DD HH:mm:ss"
:disabled="mainDisabled"
style="width: 100%"
allow-clear
/>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :span="12"> <a-col :span="12">
@@ -143,7 +170,15 @@
</a-col> </a-col>
<a-col :span="12"> <a-col :span="12">
<a-form-item label="督办次数" name="superviseCount"> <a-form-item label="督办次数" name="superviseCount">
<a-input v-model:value="mainForm.superviseCount" :disabled="mainDisabled" allow-clear /> <a-input-number
v-model:value="mainForm.superviseCount"
:disabled="mainDisabled"
:min="0"
:precision="0"
:step="1"
style="width: 100%"
allow-clear
/>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :span="12"> <a-col :span="12">
@@ -239,11 +274,7 @@
</a-col> </a-col>
<a-col v-if="showSubApproveUserSelector" :xs="24" :md="{ span: 22, offset: 1 }"> <a-col v-if="showSubApproveUserSelector" :xs="24" :md="{ span: 22, offset: 1 }">
<a-form-item label="部门经办人" :labelCol="processLabelCol" :wrapperCol="processUserWrapperCol"> <a-form-item label="部门经办人" :labelCol="processLabelCol" :wrapperCol="processUserWrapperCol">
<sz-dept-user-modal <sz-dept-user-modal class="process-user-selector" v-model:value="subApproveUser" :disabled="savingSubApproveUser" />
class="process-user-selector"
v-model:value="subApproveUser"
:disabled="savingSubApproveUser"
/>
</a-form-item> </a-form-item>
</a-col> </a-col>
</a-row> </a-row>
@@ -289,13 +320,9 @@
import TaskHandleInnerContent from '/@/views/super/bpm/process/personalOffice/myHandleTask/content/TaskHandleInnerContent.vue'; import TaskHandleInnerContent from '/@/views/super/bpm/process/personalOffice/myHandleTask/content/TaskHandleInnerContent.vue';
import BgTakepulseBPMFeedbackModal from './BgTakepulseBPMFeedbackModal.vue'; import BgTakepulseBPMFeedbackModal from './BgTakepulseBPMFeedbackModal.vue';
import SUploadFile from '/@/components/semri/fileComponent/SUploadFile.vue'; import SUploadFile from '/@/components/semri/fileComponent/SUploadFile.vue';
import SzDeptUserModal from "@/components/semri/deptUserComponent/SzDeptUserModal.vue"; import SzDeptUserModal from '@/components/semri/deptUserComponent/SzDeptUserModal.vue';
import DeptRoleUserSelectDropDown from '/@/components/semri/userComponent/DeptRoleUserSelectDropDown.vue'; import DeptRoleUserSelectDropDown from '/@/components/semri/userComponent/DeptRoleUserSelectDropDown.vue';
import { import { PARTY_COMMITTEE_DEPT_ID, PARTY_COMMITTEE_DEPT_ID as CHARGE_LEADER_DEPT_ID, CHARGE_LEADER_ROLE_ID } from '/@/constant/supervision';
PARTY_COMMITTEE_DEPT_ID,
PARTY_COMMITTEE_DEPT_ID as CHARGE_LEADER_DEPT_ID,
CHARGE_LEADER_ROLE_ID,
} from '/@/constant/supervision';
const { initBpmFormData } = usePermission(); const { initBpmFormData } = usePermission();
@@ -374,7 +401,7 @@
proposerConfirm: '', proposerConfirm: '',
bpmStatus: '', bpmStatus: '',
actSt: '', actSt: '',
superviseCount: '', superviseCount: null,
urgencyLevel: '', urgencyLevel: '',
isNeedAppro: '', isNeedAppro: '',
supDeptleaderid: '', supDeptleaderid: '',
@@ -393,9 +420,21 @@
customRender: ({ text }) => (!text ? '' : String(text).slice(0, 10)), customRender: ({ text }) => (!text ? '' : String(text).slice(0, 10)),
}, },
{ title: '实际执行情况', dataIndex: 'actualExect', align: 'left', width: 280 }, { title: '实际执行情况', dataIndex: 'actualExect', align: 'left', width: 280 },
{ title: '实际完成日期', dataIndex: 'actualTime', align: 'center', width: 155, customRender: ({ text }) => (!text ? '' : String(text).slice(0, 10)) }, {
title: '实际完成日期',
dataIndex: 'actualTime',
align: 'center',
width: 155,
customRender: ({ text }) => (!text ? '' : String(text).slice(0, 10)),
},
{ title: '调整落实措施及执行情况', dataIndex: 'actSt', align: 'left', width: 260 }, { title: '调整落实措施及执行情况', dataIndex: 'actSt', align: 'left', width: 260 },
{ title: '完成状态', dataIndex: 'bpmStatus', align: 'center', width: 95, customRender: ({ record }) => record?.bpmStatus_dictText || record?.bpmStatus }, {
title: '完成状态',
dataIndex: 'bpmStatus',
align: 'center',
width: 95,
customRender: ({ record }) => record?.bpmStatus_dictText || record?.bpmStatus,
},
{ title: '附件', dataIndex: 'id', key: 'attachments', align: 'left', width: 340 }, { title: '附件', dataIndex: 'id', key: 'attachments', align: 'left', width: 340 },
]; ];
const feedbackActionColumn = { title: '操作', dataIndex: 'action', key: 'action', align: 'center', width: 120, fixed: 'right' }; const feedbackActionColumn = { title: '操作', dataIndex: 'action', key: 'action', align: 'center', width: 120, fixed: 'right' };
@@ -458,7 +497,7 @@
try { try {
// 默认抄送按分管所领导角色跨部门查询,与台账分管所领导下拉逻辑一致 // 默认抄送按分管所领导角色跨部门查询,与台账分管所领导下拉逻辑一致
const res = await defHttp.get({ const res = await defHttp.get({
url: '/sys/user/queryUserRoleComponentData', url: '/sys/user/queryUserByRoleId',
params: { roleId: CHARGE_LEADER_ROLE_ID, searchSecurityLevel: 5, pageNo: 1, pageSize: 999 }, params: { roleId: CHARGE_LEADER_ROLE_ID, searchSecurityLevel: 5, pageNo: 1, pageSize: 999 },
}); });
const records = res?.records || res?.result?.records || []; const records = res?.records || res?.result?.records || [];
@@ -5,7 +5,7 @@
:width="width" :width="width"
centered centered
:footer="null" :footer="null"
:maskClosable="false" :maskClosable="true"
:bodyStyle="{ maxHeight: '70vh', overflowY: 'auto', padding: '16px 24px 20px' }" :bodyStyle="{ maxHeight: '70vh', overflowY: 'auto', padding: '16px 24px 20px' }"
wrapClassName="takepulse-detail-modal" wrapClassName="takepulse-detail-modal"
destroyOnClose destroyOnClose
@@ -184,7 +184,15 @@
<!-- </a-col>--> <!-- </a-col>-->
<a-col :xs="24" :md="12"> <a-col :xs="24" :md="12">
<a-form-item label="督办次数" v-bind="validateInfos.superviseCount" id="BgTakepulseForm-superviseCount" name="superviseCount"> <a-form-item label="督办次数" v-bind="validateInfos.superviseCount" id="BgTakepulseForm-superviseCount" name="superviseCount">
<a-input v-model:value="formData.superviseCount" placeholder="请输入督办次数" allow-clear></a-input> <a-input-number
v-model:value="formData.superviseCount"
placeholder="请输入督办次数"
:min="0"
:precision="0"
:step="1"
style="width: 100%"
allow-clear
/>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :xs="24" :md="12"> <a-col :xs="24" :md="12">
@@ -290,7 +298,7 @@
proposerConfirm: '', proposerConfirm: '',
bpmStatus: '1', bpmStatus: '1',
actSt: '', actSt: '',
superviseCount: '', superviseCount: null,
urgencyLevel: '', urgencyLevel: '',
isNeedAppro: '', isNeedAppro: '',
supDeptleaderid: '', supDeptleaderid: '',
@@ -127,7 +127,7 @@
<!-- </a-form-item>--> <!-- </a-form-item>-->
<!-- </a-col>--> <!-- </a-col>-->
<a-col :span="12"> <a-col :span="12">
<a-form-item label="是否需要督办领导" name="needSdwApproval"> <a-form-item label="是否需要督办负责人" name="needSdwApproval">
<a-radio-group v-model:value="mainForm.needSdwApproval" :disabled="mainDisabled"> <a-radio-group v-model:value="mainForm.needSdwApproval" :disabled="mainDisabled">
<a-radio :value="1"></a-radio> <a-radio :value="1"></a-radio>
<a-radio :value="0"></a-radio> <a-radio :value="0"></a-radio>
@@ -135,7 +135,7 @@
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col v-if="mainForm.needSdwApproval === 1" :span="12"> <a-col v-if="mainForm.needSdwApproval === 1" :span="12">
<a-form-item label="督导领导列表" name="sdwLeaderList"> <a-form-item label="督导负责人列表" name="sdwLeaderList">
<DeptRoleUserSelectRadioGroup <DeptRoleUserSelectRadioGroup
v-model:value="mainForm.sdwLeaderList" v-model:value="mainForm.sdwLeaderList"
:deptId="PARTY_COMMITTEE_DEPT_ID" :deptId="PARTY_COMMITTEE_DEPT_ID"
@@ -213,7 +213,9 @@
<span v-else>-</span> <span v-else>-</span>
</template> </template>
<template v-if="column.key === 'feedbackAction'"> <template v-if="column.key === 'feedbackAction'">
<a-button type="link" size="small" @click="handleEditFeedback(record)">{{ showJiJianFields && nonJiJianFieldsReadonly ? '督察' : '编辑' }}</a-button> <a-button type="link" size="small" @click="handleEditFeedback(record)">{{
showJiJianFields && nonJiJianFieldsReadonly ? '督察' : '编辑'
}}</a-button>
<a-popconfirm title="确定删除该反馈吗?" @confirm="handleDeleteFeedback(record)"> <a-popconfirm title="确定删除该反馈吗?" @confirm="handleDeleteFeedback(record)">
<a-button type="link" size="small" danger>删除</a-button> <a-button type="link" size="small" danger>删除</a-button>
</a-popconfirm> </a-popconfirm>
@@ -246,7 +248,12 @@
</a-col> </a-col>
<a-col v-if="showSubApproveUserSelector" :xs="24" :md="{ span: 22, offset: 1 }"> <a-col v-if="showSubApproveUserSelector" :xs="24" :md="{ span: 22, offset: 1 }">
<a-form-item label="部门经办人" :labelCol="processLabelCol" :wrapperCol="processUserWrapperCol"> <a-form-item label="部门经办人" :labelCol="processLabelCol" :wrapperCol="processUserWrapperCol">
<sz-dept-user-modal class="process-user-selector" v-model:value="subApproveUser" :disabled="savingSubApproveUser" @confirm="setDisplayNames" /> <sz-dept-user-modal
class="process-user-selector"
v-model:value="subApproveUser"
:disabled="savingSubApproveUser"
@confirm="setDisplayNames"
/>
</a-form-item> </a-form-item>
</a-col> </a-col>
</a-row> </a-row>
@@ -285,17 +292,17 @@
import BgXiSpeakBPMFeedbackModal from './BgXiSpeakBPMFeedbackModal.vue'; import BgXiSpeakBPMFeedbackModal from './BgXiSpeakBPMFeedbackModal.vue';
import SUploadFile from '/@/components/semri/fileComponent/SUploadFile.vue'; import SUploadFile from '/@/components/semri/fileComponent/SUploadFile.vue';
import DeptRoleUserSelectRadioGroup from '/@/components/semri/userComponent/DeptRoleUserSelectRadioGroup.vue'; import DeptRoleUserSelectRadioGroup from '/@/components/semri/userComponent/DeptRoleUserSelectRadioGroup.vue';
import { PARTY_COMMITTEE_DEPT_ID, SDW_LEADER_ROLE_ID, CHARGE_LEADER_ROLE_ID } from '/@/constant/supervision'; import { PARTY_COMMITTEE_DEPT_ID, SDW_LEADER_ROLE_ID, CHARGE_LEADER_ROLE_ID } from '/@/constant/supervision';
import { import {
buildApproveReason, buildApproveReason,
buildDeptHandlerFeedbackReason, buildDeptHandlerFeedbackReason,
buildDeptLeaderAssignReason, buildDeptLeaderAssignReason,
buildDeptLeaderDirectFeedbackReason, buildDeptLeaderDirectFeedbackReason,
buildSuperviseConfirmAllReason, buildSuperviseConfirmAllReason,
buildSuperviseCheckReason, buildSuperviseCheckReason,
buildJiJianCheckReason, buildJiJianCheckReason,
normalizeDeptNames, normalizeDeptNames,
} from '/@/composables/useDefaultApprovalReason'; } from '/@/composables/useDefaultApprovalReason';
const { isDisabledAuth, hasPermission, initBpmFormData } = usePermission(); const { isDisabledAuth, hasPermission, initBpmFormData } = usePermission();
const userStore = useUserStore(); const userStore = useUserStore();
@@ -500,7 +507,10 @@ import {
})); }));
provide('extraVars', formScope); provide('extraVars', formScope);
provide('flowVars', computed(() => props.formData?.vars || {})); provide(
'flowVars',
computed(() => props.formData?.vars || {})
);
provide('formDefaultReason', defaultHandleReason); provide('formDefaultReason', defaultHandleReason);
provide('defaultCcUsers', defaultCcUsers); provide('defaultCcUsers', defaultCcUsers);
@@ -542,7 +552,7 @@ import {
try { try {
// 默认抄送按分管所领导角色跨部门查询,与 bgpartymatter/bqtakepulse 保持一致 // 默认抄送按分管所领导角色跨部门查询,与 bgpartymatter/bqtakepulse 保持一致
const res = await defHttp.get({ const res = await defHttp.get({
url: '/sys/user/queryUserRoleComponentData', url: '/sys/user/queryUserByRoleId',
params: { roleId: CHARGE_LEADER_ROLE_ID, searchSecurityLevel: 5, pageNo: 1, pageSize: 999 }, params: { roleId: CHARGE_LEADER_ROLE_ID, searchSecurityLevel: 5, pageNo: 1, pageSize: 999 },
}); });
const records = res?.records || res?.result?.records || []; const records = res?.records || res?.result?.records || [];
@@ -601,7 +611,10 @@ import {
const res = await getProcessVariable({ taskId, key: 'impl_dept_id', isLocal: true }); const res = await getProcessVariable({ taskId, key: 'impl_dept_id', isLocal: true });
const value = res?.result?.value ?? res?.value; const value = res?.result?.value ?? res?.value;
if (value) { if (value) {
const result = String(value).split(',').map((s: string) => s.trim()).filter(Boolean); const result = String(value)
.split(',')
.map((s: string) => s.trim())
.filter(Boolean);
return result; return result;
} }
} catch (e) { } catch (e) {
@@ -614,12 +627,18 @@ import {
if (value) { if (value) {
const result = Array.isArray(value) const result = Array.isArray(value)
? value.map((v: any) => String(v).trim()).filter(Boolean) ? value.map((v: any) => String(v).trim()).filter(Boolean)
: String(value).split(',').map((s: string) => s.trim()).filter(Boolean); : String(value)
.split(',')
.map((s: string) => s.trim())
.filter(Boolean);
return result; return result;
} }
// 最终 fallback 到主表已保存的牵头部门 // 最终 fallback 到主表已保存的牵头部门
if (mainForm.implDept) { if (mainForm.implDept) {
const result = String(mainForm.implDept).split(',').map((s: string) => s.trim()).filter(Boolean); const result = String(mainForm.implDept)
.split(',')
.map((s: string) => s.trim())
.filter(Boolean);
return result; return result;
} }
return []; return [];
@@ -793,7 +812,6 @@ import {
.join(','); .join(',');
} }
function handleProcessSuccess() { function handleProcessSuccess() {
emit('success'); emit('success');
} }
@@ -5,7 +5,7 @@
:width="width" :width="width"
centered centered
:footer="null" :footer="null"
:maskClosable="false" :maskClosable="true"
:bodyStyle="{ maxHeight: '70vh', overflowY: 'auto', padding: '16px 24px 20px' }" :bodyStyle="{ maxHeight: '70vh', overflowY: 'auto', padding: '16px 24px 20px' }"
destroyOnClose destroyOnClose
> >
@@ -128,14 +128,7 @@
nodeType: [{ required: true, message: '请选择问题种类' }], nodeType: [{ required: true, message: '请选择问题种类' }],
problemName: [{ required: true, message: '请输入问题名称' }], problemName: [{ required: true, message: '请输入问题名称' }],
pid: [ pid: [
{ { required: true, message: '请选择上一级问题' },
validator: async (_rule, value) => {
if (showParentSelect.value && !value) {
return Promise.reject('请选择上一级问题');
}
return Promise.resolve();
},
},
], ],
}); });
const { resetFields, validate, validateInfos } = useForm(formData, validatorRules, { immediate: false }); const { resetFields, validate, validateInfos } = useForm(formData, validatorRules, { immediate: false });
@@ -5,7 +5,7 @@
:width="width" :width="width"
centered centered
:footer="null" :footer="null"
:maskClosable="false" :maskClosable="true"
:bodyStyle="{ maxHeight: '70vh', overflowY: 'auto', padding: '16px 24px 20px' }" :bodyStyle="{ maxHeight: '70vh', overflowY: 'auto', padding: '16px 24px 20px' }"
destroyOnClose destroyOnClose
> >