From c22da8a67add8bdbe4e4056adaa4e4168ee9bfff Mon Sep 17 00:00:00 2001 From: ye1023 <12588209+ye1023@user.noreply.gitee.com> Date: Fri, 29 May 2026 15:31:47 +0800 Subject: [PATCH] =?UTF-8?q?yxk-20260529-=E5=B7=A1=E8=A7=86=E6=95=B4?= =?UTF-8?q?=E6=94=B9=E6=8F=90=E5=8D=87=E5=8F=B0=E8=B4=A6=EF=BC=8C=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E6=B8=85=E5=8D=95=201=E3=80=81=E5=B0=86=E6=95=B4?= =?UTF-8?q?=E6=94=B9=E4=BB=BB=E5=8A=A1=E5=88=97=E8=A1=A8=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E4=B8=BA=E2=80=9C=E9=97=AE=E9=A2=98=E6=B8=85=E5=8D=95=20+=20?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E6=B8=85=E5=8D=95=E2=80=9D=E7=9A=84=E6=89=81?= =?UTF-8?q?=E5=B9=B3=E5=8F=B0=E8=B4=A6=E3=80=82=202=E3=80=81=E6=AF=8F?= =?UTF-8?q?=E4=B8=80=E8=A1=8C=E4=BB=8D=E4=BB=A3=E8=A1=A8=E4=B8=80=E6=9D=A1?= =?UTF-8?q?=E6=95=B4=E6=94=B9=E4=BB=BB=E5=8A=A1=EF=BC=8C=E8=A1=A5=E9=BD=90?= =?UTF-8?q?=E5=B1=95=E7=A4=BA=E5=85=B6=E6=89=80=E5=B1=9E=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98=E5=88=86=E7=B1=BB=E3=80=81=E9=9D=A2=E4=B8=8A=E9=97=AE?= =?UTF-8?q?=E9=A2=98=E3=80=81=E5=85=B7=E4=BD=93=E9=97=AE=E9=A2=98=E3=80=82?= =?UTF-8?q?=203=E3=80=81=E7=9B=B8=E5=90=8C=E7=9A=84=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E5=88=86=E7=B1=BB=E3=80=81=E9=9D=A2=E4=B8=8A=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E3=80=81=E5=85=B7=E4=BD=93=E9=97=AE=E9=A2=98=E5=9C=A8=E8=A1=A8?= =?UTF-8?q?=E6=A0=BC=E4=B8=AD=E4=BD=BF=E7=94=A8=20rowSpan=20=E5=90=88?= =?UTF-8?q?=E5=B9=B6=E5=8D=95=E5=85=83=E6=A0=BC=EF=BC=8C=E5=BD=A2=E6=88=90?= =?UTF-8?q?=E7=9B=B4=E8=A7=82=E5=8F=B0=E8=B4=A6=E3=80=82=204=E3=80=81?= =?UTF-8?q?=E5=8F=91=E8=B5=B7=E6=B5=81=E7=A8=8B=E4=BB=8D=E4=BB=A5=E2=80=9C?= =?UTF-8?q?=E6=95=B4=E6=94=B9=E4=BB=BB=E5=8A=A1=E2=80=9D=E4=B8=BA=E7=B2=92?= =?UTF-8?q?=E5=BA=A6=EF=BC=8C=E5=8D=B3=E6=AF=8F=E6=9D=A1=E6=95=B4=E6=94=B9?= =?UTF-8?q?=E6=8E=AA=E6=96=BD=E5=8D=95=E7=8B=AC=E5=8F=91=E8=B5=B7=E6=B5=81?= =?UTF-8?q?=E7=A8=8B=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/dq/inspectTask/DqInspectTask.api.ts | 8 ++ .../dq/inspectTask/DqInspectTask.data.ts | 110 ++++++++++++++++++ .../dq/inspectTask/DqInspectTaskList.vue | 49 ++++++-- 3 files changed, 159 insertions(+), 8 deletions(-) diff --git a/src/views/dq/inspectTask/DqInspectTask.api.ts b/src/views/dq/inspectTask/DqInspectTask.api.ts index 699ea66..5fd0a19 100644 --- a/src/views/dq/inspectTask/DqInspectTask.api.ts +++ b/src/views/dq/inspectTask/DqInspectTask.api.ts @@ -5,6 +5,7 @@ const { createConfirm } = useMessage(); enum Api { list = '/dqinspecttask/dqInspectTask/list', + ledgerList = '/dqinspecttask/dqInspectTask/ledgerList', save='/dqinspecttask/dqInspectTask/add', edit='/dqinspecttask/dqInspectTask/edit', deleteOne = '/dqinspecttask/dqInspectTask/delete', @@ -44,6 +45,13 @@ export const specificProblemOptions = () => defHttp.get({url: Api.specificProble export const list = (params) => defHttp.get({url: Api.list, params}); +/** + * 整改任务台账列表接口 + * @param params + */ +export const ledgerList = (params) => + defHttp.get({url: Api.ledgerList, params}); + /** * 删除单个 */ diff --git a/src/views/dq/inspectTask/DqInspectTask.data.ts b/src/views/dq/inspectTask/DqInspectTask.data.ts index 2541eba..9a437ae 100644 --- a/src/views/dq/inspectTask/DqInspectTask.data.ts +++ b/src/views/dq/inspectTask/DqInspectTask.data.ts @@ -206,3 +206,113 @@ export const superQuerySchema = { } }, }; + +const mergeCell = (field: string) => { + return (record) => ({ rowSpan: record[field] ?? 1 }); +}; + +// 整改任务台账列:前三列按问题层级合并,后续列仍按整改任务逐行展示。 +export const ledgerColumns: BasicColumn[] = [ + { + title: '问题分类', + align:"center", + dataIndex: 'categoryName', + customCell: mergeCell('_categoryRowSpan'), + }, + { + title: '面上问题', + align:"center", + dataIndex: 'surfaceName', + customCell: mergeCell('_surfaceRowSpan'), + }, + { + title: '具体问题', + align:"center", + dataIndex: 'specificName', + customCell: mergeCell('_specificRowSpan'), + }, + { + title: '巡视建议', + align:"center", + dataIndex: 'inspectAdvice' + }, + { + title: '密级', + align:"center", + dataIndex: 'secretLevel_dictText' + }, + { + title: '整改措施', + align:"center", + dataIndex: 'improveMeasure' + }, + { + title: '完成时限', + align:"center", + dataIndex: 'deadline', + customRender:({text}) =>{ + text = !text ? "" : (text.length > 10 ? text.substr(0,10) : text); + return text; + }, + }, + { + title: '目标节点', + align:"center", + dataIndex: 'targetNode' + }, + { + title: '措施责任领导', + align:"center", + dataIndex: 'measureResLeader_dictText' + }, + { + title: '措施责任部门', + align:"center", + dataIndex: 'measureResDept_dictText' + }, + { + title: '整改交付成果', + align:"center", + dataIndex: 'rectificationEvidence' + }, + { + title: '成效评价标准', + align:"center", + dataIndex: 'evaluationCriterion' + }, + { + title: '检查情况', + align:"center", + dataIndex: 'inspectionStatus' + }, + { + title: '监督意见', + align:"center", + dataIndex: 'supervisoryOpinion' + }, + { + title: '措施数量', + align:"center", + dataIndex: 'measureCount' + }, + { + title: '流程状态', + align:"center", + dataIndex: 'bpmStatus_dictText' + }, + { + title: '整改状态', + align:"center", + dataIndex: 'taskStatus' + }, + { + title: '督办次数', + align:"center", + dataIndex: 'superviseCount' + }, + { + title: '排序', + align:"center", + dataIndex: 'sortNo' + }, +]; diff --git a/src/views/dq/inspectTask/DqInspectTaskList.vue b/src/views/dq/inspectTask/DqInspectTaskList.vue index 64e8b7f..e58978f 100644 --- a/src/views/dq/inspectTask/DqInspectTaskList.vue +++ b/src/views/dq/inspectTask/DqInspectTaskList.vue @@ -83,8 +83,8 @@ import { useListPage } from '/@/hooks/system/useListPage' import {useModal} from '/@/components/Modal'; import DqInspectTaskModal from './components/DqInspectTaskModal.vue' - import {columns, superQuerySchema} from './DqInspectTask.data'; - import {list, deleteOne, batchDelete, getImportUrl,getExportUrl} from './DqInspectTask.api'; + import {ledgerColumns, superQuerySchema} from './DqInspectTask.data'; + import {ledgerList, deleteOne, batchDelete, getImportUrl,getExportUrl} from './DqInspectTask.api'; import {downloadFile} from '/@/utils/common/renderUtils'; import { useMessage } from '/@/hooks/web/useMessage'; import JSelectDept from '/@/components/Form/src/jeecg/components/JSelectDept.vue'; @@ -105,8 +105,8 @@ const { prefixCls,tableContext,onExportXls,onImportXls } = useListPage({ tableProps:{ title: 'dq_inspect_task', - api: list, - columns, + api: ledgerList, + columns: ledgerColumns, canResize:false, useSearchForm: false, actionColumn: { @@ -116,6 +116,9 @@ beforeFetch: async (params) => { return Object.assign(params, queryParam); }, + afterFetch: async (items) => { + return calcLedgerRowSpan(items); + }, }, exportConfig: { name:"dq_inspect_task", @@ -190,9 +193,39 @@ function handleSuccess() { (selectedRowKeys.value = []) && reload(); } - /** - * 操作栏 - */ + /** + * 只在当前页内计算台账合并行,避免跨页合并导致表格分页行为不可控。 + */ + function calcLedgerRowSpan(items) { + if (!items || items.length === 0) { + return items; + } + calcGroupRowSpan(items, (item) => item.categoryId || item.categoryName, '_categoryRowSpan'); + calcGroupRowSpan(items, (item) => `${item.categoryId || item.categoryName}_${item.surfaceId || item.surfaceName}`, '_surfaceRowSpan'); + calcGroupRowSpan(items, (item) => `${item.categoryId || item.categoryName}_${item.surfaceId || item.surfaceName}_${item.specificId || item.specificName}`, '_specificRowSpan'); + return items; + } + + function calcGroupRowSpan(items, getKey, field) { + let start = 0; + while (start < items.length) { + const key = getKey(items[start]); + let end = start + 1; + while (end < items.length && getKey(items[end]) === key) { + end++; + } + const span = end - start; + items[start][field] = span; + for (let i = start + 1; i < end; i++) { + items[i][field] = 0; + } + start = end; + } + } + + /** + * 操作栏 + */ function getTableAction(record){ return [ { @@ -320,4 +353,4 @@ width: 100%; } } - \ No newline at end of file +