!146 fix(inspectTask): 修复前端页面 QA 审查发现的问题

Merge pull request !146 from wsm/fix/fix_according_to_qa
This commit is contained in:
wsm
2026-08-11 09:45:00 +00:00
committed by Gitee
11 changed files with 100 additions and 56 deletions
@@ -77,8 +77,8 @@ export function useTreeBiz(treeRef, getList, props, realProps, emit) {
* 树节点选择
*/
function onSelect(keys, info) {
if (props.checkable == false) {
checkedKeys.value = props.checkStrictly ? keys.checked : keys;
if (props.checkable != true) {
checkedKeys.value = Array.isArray(keys) ? keys : [keys];
const { selectedNodes } = info;
let rows = <any[]>[];
selectedNodes.forEach((item) => {
@@ -62,9 +62,12 @@ onMounted(fetchUserList);
watch(
() => [props.deptId, props.roleId],
() => {
modelValue.value = '';
fetchUserList();
async () => {
await fetchUserList();
const current = modelValue.value;
if (current && !userList.value.some((u) => u.username === current)) {
modelValue.value = '';
}
},
);
+7 -1
View File
@@ -22,7 +22,13 @@ export function useMethods() {
*/
async function exportXls(name, url, params, isXlsx = false) {
//update-begin---author:wangshuai---date:2024-01-25---for:【QQYUN-8118】导出超时时间设置长点---
const data = await defHttp.get({ url: url, params: params, responseType: 'blob', timeout: 60000 }, { isTransformResponse: false });
let data;
try {
data = await defHttp.get({ url: url, params: params, responseType: 'blob', timeout: 60000 }, { isTransformResponse: false });
} catch (error) {
createMessage.error('导出失败,请稍后重试');
return;
}
//update-end---author:wangshuai---date:2024-01-25---for:【QQYUN-8118】导出超时时间设置长点---
if (!data) {
createMessage.warning('文件下载失败');
@@ -195,7 +195,7 @@
import FlowScheduleStartModalForBG from '/src/components/semri/process/FlowScheduleStartModalForBG.vue';
import SUploadFile from '/@/components/semri/fileComponent/SUploadFile.vue';
import { columns, superQuerySchema, bgPartymatterFeedbackColumns } from './BgPartymatter.data';
import { list, statusStats, deleteOne, batchDelete, getImportUrl, getExportUrl, getImportExcelByEasyExcelUrl, getCheckExcelByEasyExcelUrl, getExportXlsHeadersUrl, bgPartymatterFeedbackList, saveOrUpdate } from './BgPartymatter.api';
import { list, statusStats, deleteOne, batchDelete, getImportUrl, getExportXlsByEasyExcelUrl, getImportExcelByEasyExcelUrl, getCheckExcelByEasyExcelUrl, getExportXlsHeadersUrl, bgPartymatterFeedbackList, saveOrUpdate } from './BgPartymatter.api';
import { defHttp } from '/@/utils/http/axios';
import { showImportValidationErrors } from '/@/utils/helper/importError';
import { useMessage } from '/@/hooks/web/useMessage';
@@ -252,7 +252,7 @@
const registerModal = ref();
const flowScheduleModalRef = ref();
const businessProcessListModalRef = ref();
const toggleSearchStatus = ref<boolean>(false);
const toggleSearchStatus = ref<boolean>(true);
const queryParam = reactive<any>({});
const expandedRowKeys = ref<Array<string | number>>([]);
const feedbackTableData = reactive<Record<string, Recordable[]>>({});
@@ -302,7 +302,7 @@
},
exportConfig: {
name: props.meetingType === 'office' ? '所务会' : '党委会',
url: getExportUrl,
url: getExportXlsByEasyExcelUrl,
params: getLedgerQueryParams,
},
importConfig: {
@@ -441,6 +441,7 @@
selectedRowKeys.value = [];
resetFeedbackExpand();
reload({ page: 1 });
fetchStatusStats();
}
async function fetchStatusStats() {
@@ -510,6 +511,7 @@
selectedRowKeys.value = [];
resetFeedbackExpand();
reload();
fetchStatusStats();
}
/**
@@ -793,6 +795,7 @@
resetFeedbackExpand();
//刷新数据
reload({ page: 1 });
fetchStatusStats();
}
</script>
@@ -1,6 +1,6 @@
<template>
<a-spin :spinning="confirmLoading">
<JFormContainer :disabled="disabled">
<JFormContainer :disabled="disabled" :class="{ 'form-readonly': disabled }">
<template #detail>
<a-form ref="formRef" class="antd-modal-form" labelAlign="left" :labelCol="labelCol" :wrapperCol="wrapperCol" name="BgPartymatterForm">
<a-row class="form-content-row" :gutter="[12, 4]">
@@ -225,7 +225,7 @@
const validatorRules = reactive({
year: [{ required: true, message: '请选择年份' }],
secretLevel: [{ required: true, message: '请选择密级' }],
number: [{ required: true, message: '请输入序号' }],
number: [],
matterTime: [{ required: true, message: '请选择会议时间' }],
title: [{ required: true, message: '请输入事项名称' }],
content: [{ required: true, message: '请输入会议决议' }],
@@ -233,7 +233,7 @@
{
validator: async (_rule, value) => {
if (value === undefined || value === null || value === '' || (Array.isArray(value) && value.length === 0)) {
return Promise.reject('请选择责任部门');
return Promise.reject('请选择主办部门');
}
return Promise.resolve();
},
@@ -403,7 +403,7 @@
await saveOrUpdate(model, isUpdate.value)
.then((res) => {
if (res.success) {
createMessage.success(res.message);
createMessage.success(res.message || '保存成功');
emit('ok');
} else {
createMessage.warning(res.message);
@@ -456,4 +456,22 @@
min-height: 30px;
}
}
.form-readonly {
:deep(.ant-input),
:deep(.ant-input-affix-wrapper),
:deep(.ant-input-number),
:deep(.ant-picker),
:deep(.ant-select-selector) {
background: #f5f5f5 !important;
color: rgba(0, 0, 0, 0.65);
cursor: not-allowed;
}
:deep(.ant-select-arrow),
:deep(.ant-picker-suffix),
:deep(.ant-input-number-handler-wrap) {
display: none !important;
}
}
</style>
@@ -156,6 +156,7 @@ export const columns: BasicColumn[] = [
align:"center",
dataIndex: 'bpmStatus_dictText',
width: '80px',
fixed: 'right',
},
];
+17 -8
View File
@@ -9,7 +9,7 @@
<template #label>
<a-tooltip title="支持模糊查询,输入意见主题关键词">意见主题</a-tooltip>
</template>
<a-tooltip title="支持模糊查询,输入意见主题关键词"><JInput v-model:value="queryParam.title" type="like" placeholder="请输入意见主题" allow-clear trim @change="searchQuery" /></a-tooltip>
<a-tooltip title="支持模糊查询,输入意见主题关键词"><JInput v-model:value="queryParam.title" type="like" placeholder="请输入意见主题" allow-clear trim @change="debouncedSearchQuery" /></a-tooltip>
</a-form-item>
</a-col>
<a-col :xl="4" :lg="6" :md="8" :sm="12">
@@ -25,7 +25,7 @@
<template #label>
<a-tooltip title="按牵头部门筛选">牵头部门</a-tooltip>
</template>
<a-tooltip title="按牵头部门筛选"><sz-select-dept placeholder="请选择牵头部门" v-model:value="selectedResponDept" checkStrictly allow-clear @change="handleResponDeptChange" /></a-tooltip>
<a-tooltip title="按牵头部门筛选"><sz-select-dept placeholder="请选择牵头部门" v-model:value="selectedResponDept" :checkable="false" checkStrictly allow-clear @change="handleResponDeptChange" /></a-tooltip>
</a-form-item>
</a-col>
<a-col :xl="5" :lg="6" :md="8" :sm="12">
@@ -33,7 +33,7 @@
<template #label>
<a-tooltip title="按协办部门筛选">协办部门</a-tooltip>
</template>
<a-tooltip title="按协办部门筛选"><sz-select-dept placeholder="请选择协办部门" v-model:value="selectedAssistDept" checkStrictly allow-clear @change="handleAssistDeptChange" /></a-tooltip>
<a-tooltip title="按协办部门筛选"><sz-select-dept placeholder="请选择协办部门" v-model:value="selectedAssistDept" :checkable="false" checkStrictly allow-clear @change="handleAssistDeptChange" /></a-tooltip>
</a-form-item>
</a-col>
<a-col :xl="4" :lg="6" :md="8" :sm="12">
@@ -83,7 +83,7 @@
<template v-slot:bodyCell="{ column, record, index, text }">
<template v-if="column.dataIndex === 'title'">
<a-tooltip title="点击查看详情">
<a style="font-weight: 500" @click="handleDetail(record)">{{ text }}</a>
<a style="font-weight: 500" @click.stop="handleDetail(record)">{{ text }}</a>
</a-tooltip>
</template>
</template>
@@ -155,11 +155,12 @@
import {useModal} from '/@/components/Modal';
import BgTakepulseModal from './components/BgTakepulseModal.vue'
import {columns, superQuerySchema} from './BgTakepulse.data';
import {list, statusStats, deleteOne, getImportUrl, getExportUrl, getImportExcelByEasyExcelUrl, getCheckExcelByEasyExcelUrl, getExportXlsHeadersUrl, saveOrUpdate, bgTakepulseFeedbackList} from './BgTakepulse.api';
import {list, statusStats, deleteOne, getImportUrl, getExportXlsByEasyExcelUrl, getImportExcelByEasyExcelUrl, getCheckExcelByEasyExcelUrl, getExportXlsHeadersUrl, saveOrUpdate, bgTakepulseFeedbackList} from './BgTakepulse.api';
import { defHttp } from '/@/utils/http/axios';
import { showImportValidationErrors } from '/@/utils/helper/importError';
import { useMessage } from '/@/hooks/web/useMessage';
import { countFeedbackStatus } from '/@/views/bg/utils/feedbackStatusCount';
import { useDebounceFn } from '@vueuse/core';
import SzSelectDept from '/@/components/Form/src/jeecg/components/SzSelectDept.vue';
import JInput from '/@/components/Form/src/jeecg/components/JInput.vue';
import DeptRoleUserSelectDropDown from '/@/components/semri/userComponent/DeptRoleUserSelectDropDown.vue';
@@ -235,7 +236,7 @@
},
exportConfig: {
name:"我为四所把把脉",
url: getExportUrl,
url: getExportXlsByEasyExcelUrl,
params: queryParam,
},
importConfig: {
@@ -361,8 +362,12 @@
selectedRowKeys.value = [];
resetFeedbackExpand();
reload({ page: 1 });
fetchStatusStats();
}
// 输入框逐字触发的查询做防抖,查询按钮仍走未防抖的 searchQuery
const debouncedSearchQuery = useDebounceFn(searchQuery, 500);
async function fetchStatusStats() {
try {
const params: Recordable = {};
@@ -432,6 +437,7 @@
selectedRowKeys.value = [];
resetFeedbackExpand();
reload();
fetchStatusStats();
}
/**
* 操作栏
@@ -471,13 +477,13 @@
onClick: handleQueryProcess.bind(null, record),
}
];
if(record.bpmStatus == '1' || !record.bpmStatus){
if(!record.bpmStatus || record.bpmStatus == '1'){
dropDownAction.push({
label: '发起督办流程',
onClick: handleProcess.bind(null, record),
})
}
if(record.bpmStatus == '2' || !record.bpmStatus){
if(record.bpmStatus == '2'){
dropDownAction.push({
label: '再次督办',
onClick: handleProcess.bind(null, record),
@@ -713,6 +719,7 @@
delete queryParam.responDeptid;
}
searchQuery();
fetchStatusStats();
}
function handleAssistDeptChange(values) {
@@ -722,6 +729,7 @@
delete queryParam.assistDeptid;
}
searchQuery();
fetchStatusStats();
}
function searchReset() {
@@ -732,6 +740,7 @@
resetFeedbackExpand();
//刷新数据
reload({ page: 1 });
fetchStatusStats();
}
/**
@@ -66,12 +66,12 @@
</a-col>
<a-col :xs="24" :md="12">
<a-form-item label="牵头部门" v-bind="validateInfos.responDeptid" id="BgTakepulseForm-responDeptid" name="responDeptid">
<sz-select-dept v-model:value="formData.responDeptid" :multiple="true" checkStrictly allow-clear />
<sz-select-dept v-model:value="formData.responDeptid" :multiple="true" :checkable="false" checkStrictly allow-clear />
</a-form-item>
</a-col>
<a-col :xs="24" :md="12">
<a-form-item label="协办部门" v-bind="validateInfos.assistDeptid" id="BgTakepulseForm-assistDeptid" name="assistDeptid">
<sz-select-dept v-model:value="formData.assistDeptid" :multiple="true" checkStrictly allow-clear />
<sz-select-dept v-model:value="formData.assistDeptid" :multiple="true" :checkable="false" checkStrictly allow-clear />
</a-form-item>
</a-col>
<a-col :xs="24" :md="12">
@@ -172,6 +172,7 @@
<script lang="ts">
import { defineComponent, ref, reactive, computed, toRaw, onMounted, watch } from 'vue';
import { defHttp } from '/@/utils/http/axios';
import { useMessage } from '/@/hooks/web/useMessage';
import { queryDataById, saveOrUpdate } from '../BgTakepulse.api';
import JDictSelectTag from '/@/components/Form/src/jeecg/components/JDictSelectTag.vue';
import JSwitch from '/@/components/Form/src/jeecg/components/JSwitch.vue';
@@ -215,6 +216,7 @@
setup(props, {emit}) {
const SUP_LEADER_DEPT_ID = SUOBAN_DEPT_ID;
const SUP_LEADER_ROLE_ID = MEASURE_RES_LEADER_ROLE_ID;
const { createMessage } = useMessage();
const loading = ref(false);
const formRef = ref();
const formData = reactive<Record<string, any>>({
@@ -258,6 +260,7 @@
secretLevel: [{ required: true, message: '请选择密级' }],
title: [{ required: true, message: '请输入意见主题' }],
responDeptid: [
{ required: true, message: '请选择牵头部门' },
{
validator: async (_rule, value) => {
if (value === undefined || value === null || value === '' || (Array.isArray(value) && value.length === 0)) {
@@ -394,6 +397,7 @@
console.log('表单提交数据', values)
const isUpdate = values.id ? true : false
await saveOrUpdate(values, isUpdate);
createMessage.success('保存成功');
//关闭弹窗
emit('success');
}
@@ -172,7 +172,7 @@ export const dqInspectProgressColumns: JVxeColumn[] = [
// 高级查询数据
export const superQuerySchema = {
problemId: {title: '具体问题ID',order: 0,view: 'text', type: 'string',},
problemId: {title: '具体问题',order: 0,view: 'text', type: 'string',},
secretLevel: {title: '密级',order: 1,view: 'list', type: 'string',dictCode: 'secret_level',},
improveMeasure: {title: '整改措施',order: 2,view: 'text', type: 'string',},
deadline: {title: '完成时限',order: 3,view: 'date', type: 'string',},
@@ -186,7 +186,7 @@ export const superQuerySchema = {
inspectionStatus: {title: '检查情况',order: 11,view: 'text', type: 'string',},
supervisoryOpinion: {title: '监督意见',order: 12,view: 'text', type: 'string',},
measureCount: {title: '措施数量',order: 13,view: 'number', type: 'number',},
bpmProcessId: {title: '流程实例ID',order: 14,view: 'text', type: 'string',},
bpmProcessId: {title: '流程实例',order: 14,view: 'text', type: 'string',},
bpmStatus: {title: '流程状态',order: 15,view: 'list', type: 'string',dictCode: 'super_status',},
taskStatus: {title: '整改状态',order: 16,view: 'text', type: 'string',},
superviseCount: {title: '督办次数',order: 17,view: 'text', type: 'string',},
@@ -196,9 +196,9 @@ export const superQuerySchema = {
title: '工作进展反馈',
view: 'table',
fields: {
feedbackDeptId: {title: '反馈部门ID',order: 0,view: 'text', type: 'string',},
feedbackDeptId: {title: '反馈部门',order: 0,view: 'text', type: 'string',},
feedbackDeptName: {title: '反馈部门名称',order: 1,view: 'text', type: 'string',},
feedbackPersonId: {title: '反馈人ID',order: 2,view: 'text', type: 'string',},
feedbackPersonId: {title: '反馈人',order: 2,view: 'text', type: 'string',},
feedbackPersonName: {title: '反馈人姓名',order: 3,view: 'text', type: 'string',},
actualTime: {title: '实际完成时间',order: 4,view: 'datetime', type: 'string',},
workProgress: {title: '工作进展',order: 5,view: 'text', type: 'string',},
@@ -254,7 +254,7 @@ export const ledgerColumns: BasicColumn[] = [
{
title: '措施责任领导',
align:"center",
dataIndex: 'measureResDept_dictText'
dataIndex: 'measureResLeader_dictText'
},
{
title: '密级',
+27 -28
View File
@@ -6,7 +6,7 @@
<a-row :gutter="24">
<a-col :xl="6" :lg="6" :md="8" :sm="12">
<a-form-item label="整改措施" name="improveMeasure">
<JInput v-model:value="queryParam.improveMeasure" type="like" placeholder="请输入整改措施" allow-clear trim @change="reload" />
<a-input v-model:value="queryParam.improveMeasure" placeholder="请输入整改措施" allow-clear @pressEnter="reload" @change="reload" />
</a-form-item>
</a-col>
<a-col :xl="6" :lg="6" :md="8" :sm="12">
@@ -150,7 +150,6 @@
import { downloadFile } from '/@/utils/common/renderUtils';
import { useMessage } from '/@/hooks/web/useMessage';
import Icon from '/@/components/Icon/index';
import JInput from '/@/components/Form/src/jeecg/components/JInput.vue';
import SzSelectDept from '/@/components/Form/src/jeecg/components/SzSelectDept.vue';
import DeptRoleUserSelectDropDown from '/@/components/semri/userComponent/DeptRoleUserSelectDropDown.vue';
import { PARTY_COMMITTEE_DEPT_ID, CHARGE_LEADER_ROLE_ID } from '/@/constant/supervision';
@@ -386,12 +385,12 @@
*/
function getFlowMenuList(record) {
const list: any[] = [];
// if ((record.bpmStatus == '1' || !record.bpmStatus) && record.completedStage === 0) {
list.push({ text: '发起巡视整改流程', icon: 'ant-design:play-circle-outlined', event: 'process', onClick: handleProcess.bind(null, record) });
// }
// if (record.bpmStatus && record.bpmStatus !== '1' && record.completedStage === 2) {
list.push({ text: '发起销号流程', icon: 'ant-design:stop-outlined', event: 'deleteProcess', onClick: handleDeleteProcess.bind(null, record) });
// }
if ((record.bpmStatus == '1' || !record.bpmStatus) && record.completedStage === 0) {
list.push({ text: '发起巡视整改流程', icon: 'ant-design:play-circle-outlined', event: 'process', onClick: handleProcess.bind(null, record) });
}
if (record.bpmStatus && record.bpmStatus !== '1' && record.completedStage === 2) {
list.push({ text: '发起销号流程', icon: 'ant-design:stop-outlined', event: 'deleteProcess', onClick: handleDeleteProcess.bind(null, record) });
}
list.push({
text: '查询督办流程',
icon: 'ant-design:search-outlined',
@@ -399,26 +398,26 @@
divider: true,
onClick: handleQueryProcess.bind(null, record),
});
// if (!record.bpmStatus || record.bpmStatus == '1') {
// list.push({
// text: '调整为未发起巡视整改流程状态',
// icon: 'ant-design:rollback-outlined',
// event: 'adj0',
// onClick: () => adjustCompletedStage(record, 0),
// });
// list.push({
// text: '调整为未发起销号流程状态',
// icon: 'ant-design:check-circle-outlined',
// event: 'adj2',
// onClick: () => adjustCompletedStage(record, 2),
// });
// list.push({
// text: '调整为已完成销号流程状态',
// icon: 'ant-design:check-circle-outlined',
// event: 'adj4',
// onClick: () => adjustCompletedStage(record, 4),
// });
//}
if (!record.bpmStatus || record.bpmStatus == '1') {
list.push({
text: '调整为未发起巡视整改流程状态',
icon: 'ant-design:rollback-outlined',
event: 'adj0',
onClick: () => adjustCompletedStage(record, 0),
});
list.push({
text: '调整为未发起销号流程状态',
icon: 'ant-design:check-circle-outlined',
event: 'adj2',
onClick: () => adjustCompletedStage(record, 2),
});
list.push({
text: '调整为已完成销号流程状态',
icon: 'ant-design:check-circle-outlined',
event: 'adj4',
onClick: () => adjustCompletedStage(record, 4),
});
}
return list;
}
@@ -6,6 +6,7 @@
<a-radio value="immediate">立即发起</a-radio>
<a-radio value="recurring">重复发起</a-radio>
</a-radio-group>
<div style="color: #999; font-size: 12px; line-height: 1.6; margin-top: 4px">立即发起仅发起一次重复发起按周期重复发起</div>
</a-form-item>
<a-form-item v-if="deptOptions.length" label="牵头部门">