Compare commits

..

31 Commits

Author SHA1 Message Date
b74bc2d1e7 feat:项目管理-取证单-优化取证单导出word功能 2026-02-04 17:12:16 +08:00
a0a833c534 feat:项目管理-取证单-优化取证单生成、取证单项目名称 2026-02-04 15:03:43 +08:00
8cf26ca53a 修改工作底稿可以直接预览 2026-02-02 16:02:21 +08:00
4ed51bb06a 修改工作底稿索引字段 2026-02-02 15:38:28 +08:00
f2c726c5c6 feat:项目管理-取证单-附件优化 2026-02-02 11:08:18 +08:00
79db6cbcc9 feat:项目管理-项目详情-添加字段案引号 2026-02-02 10:21:34 +08:00
859a396fab 修改工作底稿索引字段 2026-01-30 19:53:09 +08:00
fb71c9e54e 1、调整取证单审计人员数据来源
2、调整工作底稿索引格式
2026-01-30 19:50:23 +08:00
3abf43e054 调整取证单样式 2026-01-30 19:04:01 +08:00
3cf727430a 调整取证单样式 2026-01-30 18:05:19 +08:00
43a8e6e599 feat:项目管理-审计内容7-工作底稿索引优化 2026-01-27 18:03:37 +08:00
b742b80abe feat:项目管理-审计内容-取证单生成 2026-01-16 17:42:52 +08:00
29f6579c8c feat:项目管理-审计内容9-福利费超范围支出明细清单 2026-01-14 18:28:53 +08:00
c3c3a8c3d1 修复编辑、删除无法操作的问题 2026-01-14 09:56:19 +08:00
1adf7de021 修复编辑、删除无法操作的问题 2026-01-14 09:10:29 +08:00
d8b4cba12d 1、审计内容里的操作功能优化
2、审计内容9增加一个表的内容生成
3、添加取证单弹窗
2026-01-13 12:23:55 +08:00
d574975c97 feat:项目管理-审计内容-优化工作底稿索引 2026-01-09 14:50:56 +08:00
f751d5eda4 feat:项目管理-审计内容-优化表格内容编辑、保存、删除功能 2026-01-08 11:20:37 +08:00
20675364e5 feat:项目管理-审计内容-优化表格内容编辑、保存、删除功能 2026-01-08 11:20:25 +08:00
392e51701d feat:项目管理-审计内容-优化工作底稿索引 2026-01-07 17:28:03 +08:00
d2ad31bb34 feat:项目管理-审计内容9-优化表格生成功能 2026-01-06 14:43:41 +08:00
156d5357cd feat:项目管理-历史记录-优化历史记录列表查询 2025-12-23 10:29:15 +08:00
e43e34f3c6 feat:项目管理-审计内容11-优化表格生成功能 2025-12-12 15:59:21 +08:00
db483e30f3 feat:项目管理-审计内容10-优化表格生成功能 2025-12-12 15:20:11 +08:00
86d8726491 feat:项目管理-审计内容8-优化表格生成功能 2025-12-11 11:38:00 +08:00
2632b33f18 feat:项目管理-审计内容7-优化表格生成功能 2025-12-10 16:50:01 +08:00
c1082d42f3 feat:项目管理-审计内容5-优化表格生成功能 2025-12-09 15:31:49 +08:00
41c633ef8b feat:项目管理-审计内容6-表格调整 2025-12-05 10:32:58 +08:00
1771be190b feat:项目管理-审计内容-总体页面调整 2025-12-04 17:17:57 +08:00
b6a602badd feat:项目管理-审计内容1-新增生成决策支出表 2025-12-02 15:47:06 +08:00
c8eb5bbd2d feat:项目管理-审计内容1-新增生成领导班子列表分析表 2025-11-24 09:55:22 +08:00
25 changed files with 5050 additions and 2177 deletions

View File

@@ -2,7 +2,8 @@ VITE_APP_NAME=后台管理系统
VITE_SOCKET_URL=wss://server.websoft.top
VITE_SERVER_URL=https://server.websoft.top/api
#VITE_API_URL=https://cms-api.websoft.top/api
VITE_API_URL=https://jfsj.wsdns.cn/api
#VITE_API_URL=https://jfsj.wsdns.cn/api
VITE_API_URL=http://1.14.159.185:9200/api
#VITE_SOCKET_URL=ws://127.0.0.1:9191
#VITE_SERVER_URL=http://127.0.0.1:8000/api

View File

@@ -6,6 +6,8 @@ import type { PageParam } from '@/api';
export interface AiHistory {
// 主键ID
id?: number;
// 项目ID
projectId?: number;
// 请求哈希值
requestHash?: string;
// 接口名称
@@ -31,6 +33,7 @@ export interface AiHistory {
*/
export interface AiHistoryParam extends PageParam {
id?: number;
projectId?: number;
requestHash?: string;
interfaceName?: string;
userId?: number;

View File

@@ -2,6 +2,141 @@ import request from '@/utils/request';
import type { ApiResult } from '@/api';
import { MODULES_API_URL } from '@/config/setting';
/**
* 生成领导班子列表分析表
*/
export async function generateLeaderListTable(data: {
kbIds?: string;
libraryIds?: string;
projectLibrary?: string;
history?: string;
suggestion?: string;
docList?: any[];
fileList?: any[];
}) {
const res = await request.post<ApiResult<any>>(
MODULES_API_URL + '/ai/auditContent1/generateLeaderListTable',
data
);
if (res.data.code === 0) {
return res.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 导出领导班子列表分析表到Excel
*/
export async function exportLeaderListTable(data: {
data?: any[];
companyName?: string;
auditTime?: string;
}) {
const res = await request.post(
MODULES_API_URL + '/ai/auditContent1/exportLeaderListTable',
data,
{
responseType: 'blob'
}
);
if (res.status === 200) {
return res.data;
}
return Promise.reject(new Error('导出失败'));
}
/**
* 生成支出情况表
*/
export async function generateExpenseTable(data: {
kbIds?: string;
libraryIds?: string;
projectLibrary?: string;
history?: string;
suggestion?: string;
docList?: any[];
fileList?: any[];
}) {
const res = await request.post<ApiResult<any>>(
MODULES_API_URL + '/ai/auditContent1/generateExpenseTable',
data
);
if (res.data.code === 0) {
return res.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 导出支出情况表到Excel
*/
export async function exportExpenseTable(data: {
data?: any[];
companyName?: string;
auditTime?: string;
}) {
const res = await request.post(
MODULES_API_URL + '/ai/auditContent1/exportExpenseTable',
data,
{
responseType: 'blob'
}
);
if (res.status === 200) {
return res.data;
}
return Promise.reject(new Error('导出失败'));
}
/**
* 生成单位发展战略执行审计表
*/
export async function generateStrategyAuditTable(data: {
kbIds?: string;
libraryIds?: string;
projectLibrary?: string;
history?: string;
suggestion?: string;
docList?: any[];
fileList?: any[];
}) {
const res = await request.post<ApiResult<any>>(
MODULES_API_URL + '/ai/auditContent2/generateStrategyAuditTable',
data
);
if (res.data.code === 0) {
return res.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 导出单位发展战略执行审计表到Excel
*/
export async function exportStrategyAuditTable(data: {
data?: any[];
companyName?: string;
auditTime?: string;
}) {
const res = await request.post(
MODULES_API_URL + '/ai/auditContent2/exportStrategyAuditTable',
data,
{
responseType: 'blob'
}
);
if (res.status === 200) {
return res.data;
}
return Promise.reject(new Error('导出失败'));
}
/**
* 生成八项规定对比分析表
*/
@@ -136,4 +271,547 @@ export async function exportDecisionTable(data: {
return res.data;
}
return Promise.reject(new Error('导出失败'));
}
// =============== 审计内容4目标完成情况 ===============
/**
* 生成目标责任完成情况表
*/
export async function generateTargetTable(data: {
kbIds?: string;
libraryIds?: string;
projectLibrary?: string;
history?: string;
suggestion?: string;
docList?: any[];
fileList?: any[];
}) {
const res = await request.post<ApiResult<any>>(
MODULES_API_URL + '/ai/auditContent4/generateTargetTable',
data
);
if (res.data.code === 0) {
return res.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 导出目标责任完成情况表到Excel
*/
export async function exportTargetTable(data: {
data?: any[];
companyName?: string;
auditTime?: string;
}) {
const res = await request.post(
MODULES_API_URL + '/ai/auditContent4/exportTargetTable',
data,
{
responseType: 'blob'
}
);
if (res.status === 200) {
return res.data;
}
return Promise.reject(new Error('导出失败'));
}
// =============== 审计内容5财务管理情况 ===============
/**
* 生成预算管理审计表
*/
export async function generateBudgetManageTable(data: {
kbIds?: string;
libraryIds?: string;
projectLibrary?: string;
history?: string;
suggestion?: string;
data?: any;
docList?: any[];
fileList?: any[];
}) {
const res = await request.post<ApiResult<any>>(
MODULES_API_URL + '/ai/auditContent5/generateBudgetManageTable',
data
);
if (res.data.code === 0) {
return res.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 导出预算管理审计表到Excel
*/
export async function exportBudgetManageTable(data: {
data?: any[];
companyName?: string;
auditTime?: string;
}) {
const res = await request.post(
MODULES_API_URL + '/ai/auditContent5/exportBudgetManageTable',
data,
{
responseType: 'blob'
}
);
if (res.status === 200) {
return res.data;
}
return Promise.reject(new Error('导出失败'));
}
/**
* 生成预算执行情况审计表
*/
export async function generateBudgetExecutionTable(data: {
kbIds?: string;
libraryIds?: string;
projectLibrary?: string;
history?: string;
suggestion?: string;
data?: any;
docList?: any[];
fileList?: any[];
}) {
const res = await request.post<ApiResult<any>>(
MODULES_API_URL + '/ai/auditContent5/generateBudgetExecutionTable',
data
);
if (res.data.code === 0) {
return res.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 导出预算执行情况审计表到Excel
*/
export async function exportBudgetExecutionTable(data: {
data?: any[];
companyName?: string;
auditTime?: string;
}) {
const res = await request.post(
MODULES_API_URL + '/ai/auditContent5/exportBudgetExecutionTable',
data,
{
responseType: 'blob'
}
);
if (res.status === 200) {
return res.data;
}
return Promise.reject(new Error('导出失败'));
}
// =============== 审计内容6国资管理情况 ===============
/**
* 生成国有资产管理审计表
*/
export async function generateAssetsTable(data: {
kbIds?: string;
libraryIds?: string;
projectLibrary?: string;
history?: string;
suggestion?: string;
docList?: any[];
fileList?: any[];
}) {
const res = await request.post<ApiResult<any>>(
MODULES_API_URL + '/ai/auditContent6/generateAssetsTable',
data
);
if (res.data.code === 0) {
return res.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 导出国有资产管理审计表到Excel
*/
export async function exportAssetsTable(data: {
data?: any[];
companyName?: string;
auditTime?: string;
}) {
const res = await request.post(
MODULES_API_URL + '/ai/auditContent6/exportAssetsTable',
data,
{
responseType: 'blob'
}
);
if (res.status === 200) {
return res.data;
}
return Promise.reject(new Error('导出失败'));
}
// =============== 审计内容7重大投资情况 ===============
/**
* 生成重大投资情况审计表
*/
export async function generateInvestmentSituationTable(data: {
kbIds?: string;
libraryIds?: string;
projectLibrary?: string;
history?: string;
suggestion?: string;
docList?: any[];
fileList?: any[];
}) {
const res = await request.post<ApiResult<any>>(
MODULES_API_URL + '/ai/auditContent7/generateInvestmentSituationTable',
data
);
if (res.data.code === 0) {
return res.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 导出重大投资情况审计表到Excel
*/
export async function exportInvestmentSituationTable(data: {
data?: any[];
companyName?: string;
auditTime?: string;
}) {
const res = await request.post(
MODULES_API_URL + '/ai/auditContent7/exportInvestmentSituationTable',
data,
{
responseType: 'blob'
}
);
if (res.status === 200) {
return res.data;
}
return Promise.reject(new Error('导出失败'));
}
// =============== 审计内容8治理结构与内部控制 ===============
/**
* 生成内部控制测试表
*/
export async function generateInternalControlTable(data: {
kbIds?: string;
libraryIds?: string;
projectLibrary?: string;
history?: string;
suggestion?: string;
docList?: any[];
fileList?: any[];
}) {
const res = await request.post<ApiResult<any>>(
MODULES_API_URL + '/ai/auditContent8/generateInternalControlTable',
data
);
if (res.data.code === 0) {
return res.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 导出内部控制测试表到Excel
*/
export async function exportInternalControlTable(data: {
data?: any[];
companyName?: string;
auditTime?: string;
}) {
const res = await request.post(
MODULES_API_URL + '/ai/auditContent8/exportInternalControlTable',
data,
{
responseType: 'blob'
}
);
if (res.status === 200) {
return res.data;
}
return Promise.reject(new Error('导出失败'));
}
// =============== 审计内容9人员编制管理 ===============
/**
* 生成人员编制管理审计表
*/
export async function generatePersonnelTable(data: {
kbIds?: string;
libraryIds?: string;
projectLibrary?: string;
history?: string;
suggestion?: string;
docList?: any[];
fileList?: any[];
}) {
const res = await request.post<ApiResult<any>>(
MODULES_API_URL + '/ai/auditContent9/generatePersonnelTable',
data
);
if (res.data.code === 0) {
return res.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 导出人员编制管理审计表到Excel
*/
export async function exportPersonnelTable(data: {
data?: any[];
companyName?: string;
auditTime?: string;
}) {
const res = await request.post(
MODULES_API_URL + '/ai/auditContent9/exportPersonnelTable',
data,
{
responseType: 'blob'
}
);
if (res.status === 200) {
return res.data;
}
return Promise.reject(new Error('导出失败'));
}
// =============== 审计内容10廉政情况 ===============
/**
* 生成党风廉政建设责任制审计表
*/
export async function generatePartyConductTable(data: {
kbIds?: string;
libraryIds?: string;
projectLibrary?: string;
history?: string;
suggestion?: string;
docList?: any[];
fileList?: any[];
}) {
const res = await request.post<ApiResult<any>>(
MODULES_API_URL + '/ai/auditContent10/generatePartyConductTable',
data
);
if (res.data.code === 0) {
return res.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 导出党风廉政建设责任制审计表到Excel
*/
export async function exportPartyConductTable(data: {
data?: any[];
companyName?: string;
auditTime?: string;
}) {
const res = await request.post(
MODULES_API_URL + '/ai/auditContent10/exportPartyConductTable',
data,
{
responseType: 'blob'
}
);
if (res.status === 200) {
return res.data;
}
return Promise.reject(new Error('导出失败'));
}
// =============== 审计内容11历史审计问题整改 ===============
/**
* 生成历史审计问题整改表
*/
export async function generateHistoryTable(data: {
kbIds?: string;
libraryIds?: string;
projectLibrary?: string;
history?: string;
suggestion?: string;
docList?: any[];
fileList?: any[];
}) {
const res = await request.post<ApiResult<any>>(
MODULES_API_URL + '/ai/auditContent11/generateHistoryTable',
data
);
if (res.data.code === 0) {
return res.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 导出历史审计问题整改表到Excel
*/
export async function exportHistoryTable(data: {
data?: any[];
companyName?: string;
auditTime?: string;
}) {
const res = await request.post(
MODULES_API_URL + '/ai/auditContent11/exportHistoryTable',
data,
{
responseType: 'blob'
}
);
if (res.status === 200) {
return res.data;
}
return Promise.reject(new Error('导出失败'));
}
// =============== 审计内容1贯策决策部署情况 - 补充缺失的接口 ===============
/**
* 生成贯策决策部署表
*/
export async function generateDefault1Table(data: {
kbIds?: string;
libraryIds?: string;
projectLibrary?: string;
history?: string;
suggestion?: string;
docList?: any[];
fileList?: any[];
}) {
const res = await request.post<ApiResult<any>>(
MODULES_API_URL + '/ai/auditContent1/generateDefault1Table',
data
);
if (res.data.code === 0) {
return res.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 导出贯策决策部署表到Excel
*/
export async function exportDefault1Table(data: {
data?: any[];
companyName?: string;
auditTime?: string;
}) {
const res = await request.post(
MODULES_API_URL + '/ai/auditContent1/exportDefault1Table',
data,
{
responseType: 'blob'
}
);
if (res.status === 200) {
return res.data;
}
return Promise.reject(new Error('导出失败'));
}
/**
* 生成取证单
*/
export async function generateAuditEvidence(data: {
// 基础信息
caseIndex?: string; // 案引号
projectName?: string; // 项目名称
auditedTarget?: string; // 被审计单位或个人
auditMatter?: string; // 审计事项
summaryTitle?: string; // 标题
auditRecord?: string; // 审计记录
auditFinding?: string; // 审计发现
evidenceBasis?: string; // 定性依据
handling?: string; // 处理
suggestion?: string; // 建议
attachment?: string; // 附件
auditors?: string; // 审计人员
compileDate?: string; // 编制日期
providerOpinion?: string; // 证据提供单位意见
providerDate?: string; // 证据提供日期
attachmentPages?: string; // 附件页数
feedbackDeadline?: string; // 反馈期限
history?: string; // 历史内容(用于工作流生成)
}) {
const res = await request.post<ApiResult<any>>(
MODULES_API_URL + '/ai/auditEvidence/generate',
data
);
if (res.data.code === 0) {
return res.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 下载审计取证单Word文档
*/
export async function downloadAuditEvidence(data: {
caseIndex?: string;
pageIndex?: string;
pageTotal?: string;
projectName?: string;
auditedTarget?: string;
auditMatter?: string;
summaryTitle?: string;
auditRecord?: string;
auditFinding?: string;
evidenceBasis?: string;
handling?: string;
attachment?: string;
auditors?: string;
compileDate?: string;
providerOpinion?: string;
providerDate?: string;
attachmentPages?: string;
feedbackDeadline?: string;
}) {
const res = await request.post(
MODULES_API_URL + '/ai/auditEvidence/download',
data,
{
responseType: 'blob' // 处理二进制流响应
}
);
if (res.status === 200) {
return res.data;
}
return Promise.reject(new Error('文件下载失败'));
}

View File

@@ -10,6 +10,8 @@ export interface PwlProject {
name?: string;
// 项目标识
code?: string;
// 案引号
caseIndex?: string;
// 上级id, 0是顶级
parentId?: number;
// 项目类型

View File

@@ -0,0 +1,296 @@
<template>
<a-modal
:visible="visible"
title="编辑行数据"
@ok="handleOk"
@cancel="handleCancel"
:confirm-loading="loading"
width="600px"
>
<template #title>
<div class="modal-title">
<span>编辑行数据</span>
<a-tag v-if="displayRecords.length > 1" color="blue" class="ml-2">
同步编辑 {{ displayRecords.length }}
</a-tag>
</div>
</template>
<a-alert
v-if="displayRecords.length > 1"
type="info"
show-icon
style="margin-bottom: 12px"
:message="`已选择 ${displayRecords.length} 条记录,将把当前修改同步到这些记录`"
/>
<a-list
v-if="displayRecords.length > 1"
size="small"
bordered
:data-source="displayRecords"
style="margin-bottom: 12px; max-height: 160px; overflow-y: auto"
>
<template #renderItem="{ item, index }">
<a-list-item
:class="['record-item', { active: index === selectedRecordIndex }]"
@click="selectRecord(index)"
>
<span class="record-label">#{{ index + 1 }}</span>
</a-list-item>
</template>
</a-list>
<a-form layout="vertical">
<template v-for="field in processedFields" :key="field.key">
<a-form-item :label="field.title" v-if="!field.children">
<template v-if="field.type === 'textarea'">
<a-textarea
v-model:value="activeFormData[field.dataIndex]"
:rows="4"
:placeholder="`请输入${field.title}`"
/>
</template>
<template v-else-if="field.dataIndex === 'workPaperIndex'">
<a-textarea
v-model:value="activeFormData[field.dataIndex]"
:rows="4"
:placeholder="'每行一个文件格式为file_id||文件名||url'"
/>
</template>
<template v-else>
<a-input
v-model:value="activeFormData[field.dataIndex]"
:placeholder="`请输入${field.title}`"
/>
</template>
</a-form-item>
<!-- 处理嵌套字段如职务下的党内行政 -->
<template v-else-if="field.children">
<div class="nested-fields">
<div class="field-group-title">{{ field.title }}</div>
<div class="field-group-content">
<a-form-item
v-for="childField in field.children"
:key="childField.key"
:label="childField.title"
class="nested-field-item"
>
<a-input
v-model:value="activeFormData[childField.dataIndex]"
:placeholder="`请输入${childField.title}`"
/>
</a-form-item>
</div>
</div>
</template>
</template>
</a-form>
</a-modal>
</template>
<script lang="ts" setup>
import { ref, watch, computed } from 'vue';
import { message } from 'ant-design-vue';
const props = defineProps<{
visible: boolean;
record: any;
fields: any[];
records?: any[];
}>();
const emit = defineEmits(['update:visible', 'save']);
const loading = ref(false);
const formDataList = ref<any[]>([]);
const selectedRecordIndex = ref(0);
const displayRecords = computed(() => {
if (props.records && Array.isArray(props.records) && props.records.length) {
return props.records;
}
if (props.record) return [props.record];
return [];
});
const transformRecordToFormData = (record: any) => {
if (!record) return {};
const recordCopy = JSON.parse(JSON.stringify(record));
if (
hasWorkPaperIndexField.value &&
recordCopy.workPaperIndex &&
Array.isArray(recordCopy.workPaperIndex)
) {
recordCopy.workPaperIndex = recordCopy.workPaperIndex
.map((item: any) => {
if (typeof item === 'object') {
return `${item.fileId || ''}||${item.fileName || ''}||${item.fileUrl || ''}`;
}
return item;
})
.join('\n');
}
return recordCopy;
};
const hasWorkPaperIndexField = computed(() => {
return (props.fields || []).some((field) => {
return field?.dataIndex === 'workPaperIndex' || field?.key === 'workPaperIndex';
});
});
// 处理字段,将嵌套结构展平
const processedFields = computed(() => {
const processed: any[] = [];
(props.fields || []).forEach(field => {
if (field.children && Array.isArray(field.children)) {
// 处理有子字段的情况(如职务)
processed.push({
...field,
children: field.children.flatMap(child =>
child.children && Array.isArray(child.children)
? child.children // 如果是多层嵌套,直接取孙子字段
: child // 否则就是子字段
)
});
} else {
processed.push(field);
}
});
return processed;
});
watch(
() => props.visible,
(visible) => {
if (visible) {
selectedRecordIndex.value = 0;
formDataList.value = displayRecords.value.map((rec) =>
transformRecordToFormData(rec)
);
}
},
{ immediate: true }
);
const handleOk = () => {
if (!formDataList.value || formDataList.value.length === 0) {
message.warning('没有数据可保存');
return;
}
// 处理workPaperIndex将字符串转换回对象数组
const dataToSave = formDataList.value.map((item) => {
const cloned = JSON.parse(JSON.stringify(item || {}));
if (hasWorkPaperIndexField.value && cloned.workPaperIndex && typeof cloned.workPaperIndex === 'string') {
const lines = cloned.workPaperIndex.split('\n').filter((line: string) => line.trim() !== '');
cloned.workPaperIndex = lines.map((line: string) => {
const parts = line.split('||');
if (parts.length >= 3) {
return {
fileId: parts[0] || '',
fileName: parts[1] || '',
fileUrl: parts[2] || ''
};
}
return line;
});
}
return cloned;
});
loading.value = true;
emit('save', dataToSave);
loading.value = false;
emit('update:visible', false);
};
const handleCancel = () => {
emit('update:visible', false);
};
const selectRecord = (index: number) => {
if (index < 0 || index >= displayRecords.value.length) return;
selectedRecordIndex.value = index;
if (!formDataList.value[index]) {
formDataList.value[index] = transformRecordToFormData(
displayRecords.value[index]
);
}
};
const activeFormData = computed({
get() {
if (!displayRecords.value.length) return {};
if (!formDataList.value[selectedRecordIndex.value]) {
formDataList.value[selectedRecordIndex.value] = transformRecordToFormData(
displayRecords.value[selectedRecordIndex.value]
);
}
return formDataList.value[selectedRecordIndex.value] || {};
},
set(val) {
if (!displayRecords.value.length) return;
formDataList.value[selectedRecordIndex.value] = val || {};
}
});
</script>
<style scoped>
.nested-fields {
margin-bottom: 16px;
border: 1px solid #f0f0f0;
border-radius: 4px;
padding: 12px;
background-color: #fafafa;
}
.field-group-title {
font-weight: 600;
margin-bottom: 8px;
color: #1890ff;
}
.field-group-content {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
gap: 12px;
}
.nested-field-item {
margin-bottom: 0;
}
.modal-title {
display: flex;
align-items: center;
}
.record-label {
display: inline-block;
width: 36px;
color: #888;
}
.record-text {
color: #333;
}
.record-item {
cursor: pointer;
transition: background-color 0.2s;
}
.record-item:hover {
background-color: #f5f5f5;
}
.record-item.active {
background-color: #e6f7ff;
}
</style>

View File

@@ -0,0 +1,847 @@
<template>
<a-modal
:visible="visible"
title="审计取证单预览"
:width="1100"
:footer="null"
@cancel="handleCancel"
destroy-on-close
>
<div class="evidence-actions">
<a-space>
<a-button @click="resetFields">重置内容</a-button>
<a-button type="primary" @click="handleExport" :loading="exporting">
导出Word文档
</a-button>
<a-button v-if="false" @click="printEvidence">打印预览</a-button>
</a-space>
<div class="action-tip"
>可直接在表格中编辑导出即可生成与效果图一致的取证单</div
>
</div>
<div class="evidence-container">
<div class="evidence-sheet" ref="printArea">
<div class="sheet-title">审计取证单</div>
<div class="sheet-meta">
<div class="meta-left">
<span>索引号</span>
<input
v-model="form.caseIndex"
class="inline-input long"
placeholder="填写索引号"
/>
</div>
<div class="meta-right">
<span></span>
<input v-model="form.pageIndex" class="inline-input small" />
<span></span>
<input v-model="form.pageTotal" class="inline-input small" />
<span></span>
</div>
</div>
<table class="sheet-table">
<colgroup>
<col style="width: 16%" />
<col style="width: 84%" />
</colgroup>
<tbody>
<tr>
<th>项目名称</th>
<td>
<textarea
v-model="form.projectName"
class="cell-input single"
placeholder="填写项目名称"
></textarea>
</td>
</tr>
<tr>
<th>被审计调查单位或个人</th>
<td>
<textarea
v-model="form.auditedTarget"
class="cell-input single"
placeholder="填写被审计(调查)单位或个人"
></textarea>
</td>
</tr>
<tr>
<th>审计调查事项</th>
<td>
<textarea
v-model="form.auditMatter"
class="cell-input single"
placeholder="填写审计(调查)事项"
></textarea>
</td>
</tr>
<tr>
<th class="vertical-header">
<div class="vertical-text">
<span>审计</span>
<span>调查</span>
<span>事项</span>
<span>摘要</span>
</div>
</th>
<td class="summary-cell">
<div class="summary-title">
审计调查事项摘要包括标题审计记录审计发现定性依据
</div>
<!-- <div class="summary-content">-->
<!-- <div class="summary-item">-->
<!-- <strong>1.标题</strong-->
<!-- >突出核心问题采用观点性语句一般为审计内容审计目标的结论性描述例如-->
<!-- </div>-->
<!-- <div class="summary-example">-->
<!-- 在审计期间XX单位存在"服务费,其流通"行为-->
<!-- </div>-->
<!-- <div class="summary-item">-->
<!-- <strong>2.审计记录</strong-->
<!-- >仅客观记录审计核查的具体事实时间地点主体行为数据等不使用主观评价性语言"违规""不合理"或问题定性引证合同条款凭证等等原始凭证形式"经核查[凭证描述]……"例如-->
<!-- </div>-->
<!-- <div class="summary-example">-->
<!-- -->
<!-- 经查2019年1月1日签订的XX服务合同编号XYZ-2019-001第3条约定"乙方(服务商)员工薪酬中甲方考勤费,甲方有权对乙方员工薪酬进行审核并支付"-->
<!-- </div>-->
<!-- <div class="summary-example">-->
<!-- -->
<!-- 调取2019年6月外包人员考勤表显示实际出勤人数为8人缺勤2人由甲方部门主管确认缺勤2人由甲方资源部核实无-->
<!-- </div>-->
<!-- <div class="summary-example">-->
<!-- -->
<!-- 查证2020年3月服务费结算凭证凭证号FV20200315所附明细清单显示人员名单为8人且月计薪资×工资标准结算费用-->
<!-- </div>-->
<!-- </div>-->
<div class="summary-editor">
<div class="summary-field">
<div class="summary-field-label">标题</div>
<textarea
v-model="form.summaryTitle"
class="cell-input summary-textarea medium"
placeholder="填写核心标题或要点"
></textarea>
</div>
<div class="summary-field">
<div class="summary-field-label">审计记录</div>
<textarea
v-model="form.auditRecord"
class="cell-input summary-textarea tall"
placeholder="客观记录审计核查的过程与事实"
></textarea>
</div>
<div class="summary-field">
<div class="summary-field-label">审计发现</div>
<textarea
v-model="form.auditFinding"
class="cell-input summary-textarea tall"
placeholder="写明审计发现的事实、性质及影响"
></textarea>
</div>
<div class="summary-field">
<div class="summary-field-label">定性依据</div>
<textarea
v-model="form.evidenceBasis"
class="cell-input summary-textarea medium"
placeholder="引用法规、制度或合同条款作为依据"
></textarea>
</div>
</div>
</td>
</tr>
<tr>
<th>处理建议</th>
<td>
<textarea
v-model="form.handling"
class="cell-input medium"
placeholder="拟采取的处理措施"
></textarea>
</td>
</tr>
<tr>
<th>附件</th>
<td>
<textarea
v-model="form.attachment"
class="cell-input single"
placeholder="列示随附的证明材料"
></textarea>
</td>
</tr>
<tr>
<th>审计人员</th>
<td>
<div class="split-row">
<div class="split-left">
<input
v-model="form.auditors"
class="cell-input input-line"
placeholder="填写审计人员"
/>
</div>
<div class="split-right">
<span class="label">编制日期</span>
<input
v-model="form.compileDate"
class="cell-input input-line"
placeholder="YYYY-MM-DD"
/>
</div>
</div>
</td>
</tr>
<tr>
<th>证据提供单位或个人意见</th>
<td>
<div class="provider-row">
<div class="provider-opinion">
<textarea
v-model="form.providerOpinion"
class="cell-input tall"
placeholder="证据提供单位盖章,负责人或其他定的人员签名"
></textarea>
</div>
<div class="provider-date">
<div class="date-label">日期</div>
<input
v-model="form.providerDate"
class="cell-input input-line"
placeholder="YYYY-MM-DD"
/>
</div>
</div>
</td>
</tr>
</tbody>
</table>
<div class="footer-note">
<div class="note-row">
附件
<input
v-model="form.attachmentPages"
class="inline-input small"
placeholder="页数"
/>
</div>
<div class="note">
说明1. 请你单位在
<input
v-model="form.feedbackDeadline"
class="inline-input long"
placeholder="填写反馈期限"
/>
前反馈意见以生成的编制日期为基础往后推10天填充日期
</div>
<!-- <div class="note">-->
<!-- 2. 证据提供单位意见栏如填写不下可另附说明-->
<!-- </div>-->
</div>
</div>
</div>
</a-modal>
</template>
<script lang="ts" setup>
import { PropType, reactive, ref, watch } from 'vue';
import { message } from 'ant-design-vue';
import { PwlProject } from '@/api/pwl/pwlProject/model';
import { downloadAuditEvidence } from '@/api/ai/auditContent';
type BaseInfo = {
caseIndex?: string;
projectName?: string;
auditedTarget?: string;
auditMatter?: string;
};
const props = defineProps({
visible: {
type: Boolean,
default: false
},
baseInfo: {
type: Object as PropType<BaseInfo>,
default: () => ({})
},
project: {
type: Object as PropType<PwlProject>,
default: () => ({})
},
selectedRows: {
type: Array as PropType<any[]>,
default: () => []
}
});
const emit = defineEmits<{
(e: 'update:visible', value: boolean): void;
}>();
const printArea = ref<HTMLElement | null>(null);
const exporting = ref(false);
const defaultForm = () => ({
caseIndex: '',
pageIndex: '1',
pageTotal: '1',
projectName: '',
auditedTarget: '',
auditMatter: '',
summaryTitle: '',
auditRecord: '',
auditFinding: '',
evidenceBasis: '',
handling: '',
suggestion: '',
attachment: '',
auditors: '',
compileDate: '',
providerOpinion: '',
providerDate: '',
attachmentPages: '',
feedbackDeadline: ''
});
const form = reactive(defaultForm());
const formatAttachmentText = (caseIndex: string, raw: string) => {
const safeCaseIndex = (caseIndex || '').trim();
const items = (raw || '')
.split(/[\n\r,,、;\s]+/)
.map((s) => s.trim())
.filter(Boolean);
if (!safeCaseIndex || items.length === 0) return raw || '';
const escaped = safeCaseIndex.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
const prefixRe = new RegExp(`^${escaped}-\\d{3}-`);
return items
.map((name, idx) => {
const no = String(idx + 1).padStart(3, '0');
const baseName = name.replace(prefixRe, '');
return `${safeCaseIndex}-${no}-${baseName}`;
})
.join('\n');
};
const applyBaseInfo = () => {
console.log('applyBaseInfo called, selectedRows:', props.selectedRows);
console.log('baseInfo:', props.baseInfo);
// 重置表单为默认值
Object.assign(form, defaultForm(), props.baseInfo || {});
// 如果有传入的selectedRows直接使用第一个对象的数据生成取证单时通常只有一个
if (props.selectedRows && props.selectedRows.length > 0) {
const evidenceData = props.selectedRows[0] || {};
console.log('Evidence data from selectedRows:', evidenceData);
// 直接将后端返回的数据映射到表单字段
form.caseIndex =
props.baseInfo?.caseIndex || props.project?.caseIndex || form.caseIndex || '';
form.projectName = props.project?.code || evidenceData.projectName || form.projectName || '';
form.auditedTarget =
evidenceData.auditedTarget || form.auditedTarget || '';
form.auditMatter = evidenceData.auditMatter || form.auditMatter || '';
form.summaryTitle = evidenceData.summaryTitle || form.summaryTitle || '';
form.auditRecord = evidenceData.auditRecord || form.auditRecord || '';
form.auditFinding = evidenceData.auditFinding || form.auditFinding || '';
form.evidenceBasis =
evidenceData.evidenceBasis || form.evidenceBasis || '';
form.handling = evidenceData.handling || form.handling || '';
form.suggestion = evidenceData.suggestion || form.suggestion || '';
// form.auditors = evidenceData.auditors || form.auditors || '';
form.auditors = '';
if (props.project && props.project.saleUser) {
const saleUser = JSON.parse(props.project.saleUser);
form.auditors = saleUser.join();
}
form.compileDate = evidenceData.compileDate || form.compileDate || '';
// form.providerOpinion =
// evidenceData.providerOpinion || form.providerOpinion || '';
// form.providerDate = evidenceData.providerDate || form.providerDate || '';
form.providerOpinion = '';
form.providerDate = '';
form.attachmentPages =
evidenceData.attachmentPages || form.attachmentPages || '';
// form.feedbackDeadline =
// evidenceData.feedbackDeadline || form.feedbackDeadline || '';
form.feedbackDeadline = 'XX年XX月XX日';
// 处理attachment字段数组转字符串
if (evidenceData.attachment) {
const rawAttachment = Array.isArray(evidenceData.attachment)
? evidenceData.attachment.join('\n')
: evidenceData.attachment;
form.attachment = formatAttachmentText(form.caseIndex, rawAttachment);
}
// 特殊处理如果evidenceData中有title字段也填充到summaryTitle
if (evidenceData.title && !form.summaryTitle) {
form.summaryTitle = evidenceData.title;
}
}
// 设置默认编制日期(如果没有的话)
if (!form.compileDate) {
const now = new Date();
form.compileDate = `${now.getFullYear()}-${String(
now.getMonth() + 1
).padStart(2, '0')}-${String(now.getDate()).padStart(2, '0')}`;
}
// 确保页码字段有值
if (!form.pageIndex) form.pageIndex = '1';
if (!form.pageTotal) form.pageTotal = '1';
console.log(
'Form data after applyBaseInfo:',
JSON.stringify(form, null, 2)
);
};
watch(
() => props.visible,
(visible) => {
if (visible) {
applyBaseInfo();
}
}
);
watch(
() => props.baseInfo,
() => {
if (props.visible) {
applyBaseInfo();
}
},
{ deep: true }
);
watch(
() => props.project,
() => {
if (props.visible) {
applyBaseInfo();
}
},
{ deep: true }
);
watch(
() => props.selectedRows,
() => {
if (props.visible) {
applyBaseInfo();
}
},
{ deep: true }
);
const handleCancel = () => {
emit('update:visible', false);
};
const resetFields = () => {
applyBaseInfo();
message.success('内容已重置');
};
/**
* 导出Word文档
*/
const handleExport = async () => {
try {
exporting.value = true;
// 准备导出数据
const exportData = {
caseIndex: form.caseIndex,
pageIndex: form.pageIndex,
pageTotal: form.pageTotal,
projectName: form.projectName,
auditedTarget: form.auditedTarget,
auditMatter: form.auditMatter,
summaryTitle: form.summaryTitle,
auditRecord: form.auditRecord,
auditFinding: form.auditFinding,
evidenceBasis: form.evidenceBasis,
handling: form.handling,
attachment: form.attachment,
auditors: form.auditors,
compileDate: form.compileDate,
providerOpinion: form.providerOpinion,
providerDate: form.providerDate,
attachmentPages: form.attachmentPages,
feedbackDeadline: form.feedbackDeadline
};
// 调用后端下载接口
const blob = await downloadAuditEvidence(exportData);
// 创建下载链接
const url = window.URL.createObjectURL(new Blob([blob]));
const link = document.createElement('a');
link.href = url;
// 设置文件名
const fileName = `审计取证单_${form.projectName || '取证单'}_${form.caseIndex || ''}.docx`;
link.setAttribute('download', fileName);
// 触发下载
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
// 释放URL对象
window.URL.revokeObjectURL(url);
message.success('取证单导出成功');
} catch (error) {
console.error('导出失败:', error);
message.error('取证单导出失败');
} finally {
exporting.value = false;
}
};
/**
* 打印预览
*/
const printEvidence = () => {
const area = printArea.value;
if (!area) {
message.warning('暂无可打印的内容');
return;
}
const newWindow = window.open('', '_blank');
if (!newWindow) {
message.error('浏览器阻止了弹窗,请允许弹窗后重试');
return;
}
const style = `
* { box-sizing: border-box; }
body { margin: 0; padding: 12px; font-family: 'SimSun', 'Songti SC', serif; color: #000; }
.evidence-sheet { padding: 14px 16px; border: 1px solid #000; }
.sheet-title { text-align: center; font-size: 24px; letter-spacing: 8px; margin-bottom: 6px; font-weight: 700; }
.sheet-meta { display: flex; justify-content: space-between; align-items: flex-end; font-size: 14px; margin-bottom: 8px; }
.meta-left, .meta-right { display: flex; align-items: flex-end; gap: 4px; }
.inline-input { border: none; border-bottom: 1px solid #000; min-width: 70px; padding: 2px 4px; font-size: 14px; background: transparent; outline: none; height: 20px; line-height: 20px; }
.inline-input.small { width: 44px; text-align: center; }
.inline-input.long { min-width: 180px; }
.sheet-table { width: 100%; border-collapse: collapse; table-layout: fixed; }
.sheet-table th, .sheet-table td { border: 1px solid #000; padding: 6px 8px; vertical-align: top; font-size: 14px; line-height: 1.6; }
.sheet-table th { background: #fff; font-weight: 600; text-align: center; vertical-align: middle; }
.vertical-header { padding: 4px 2px; font-weight: 600; }
.vertical-text { display: flex; flex-direction: column; align-items: center; gap: 2px; }
.vertical-text span { display: block; line-height: 1.1; }
.cell-input { width: 100%; border: none; resize: none; min-height: 32px; font-size: 14px; line-height: 1.6; font-family: inherit; background: transparent; overflow: hidden; field-sizing: content; }
.cell-input:focus { outline: none; }
.cell-input.single { min-height: 30px; }
.cell-input.medium { min-height: 90px; }
.cell-input.tall { min-height: 170px; }
.input-line { height: 30px; }
.summary-cell { padding: 8px 12px; }
.summary-title { font-weight: 600; margin-bottom: 6px; text-align: left; }
.summary-content { text-align: left; line-height: 1.7; font-size: 12px; }
.summary-item { margin-bottom: 6px; }
.summary-example { margin-left: 16px; margin-bottom: 6px; color: #000; }
.summary-editor { margin-top: 8px; }
.summary-field { margin-bottom: 6px; }
.summary-field-label { font-weight: 600; margin-bottom: 4px; }
.summary-textarea { margin: 0; padding: 0; }
.split-row { display: flex; align-items: stretch; gap: 0; min-height: 36px; }
.split-left { flex: 1; padding-right: 8px; }
.split-right { display: flex; align-items: center; gap: 4px; white-space: nowrap; border-left: 1px solid #000; padding-left: 8px; }
.provider-row { display: flex; gap: 0; min-height: 140px; align-items: stretch; }
.provider-opinion { flex: 1; padding-right: 8px; }
.provider-date { width: 110px; display: flex; flex-direction: column; gap: 8px; justify-content: center; align-items: center; border-left: 1px solid #000; padding-left: 6px; }
.date-label { font-weight: 600; }
.footer-note { margin-top: 10px; font-size: 12px; line-height: 1.6; }
.note-row { margin-bottom: 6px; text-align: right; }
.note { margin-bottom: 4px; }
.note input { vertical-align: middle; }
`;
newWindow.document.write(`
<html>
<head>
<title>审计取证单</title>
<style>${style}</style>
</head>
<body>${area.innerHTML}</body>
</html>
`);
newWindow.document.close();
newWindow.focus();
newWindow.print();
};
</script>
<style scoped>
.evidence-actions {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 12px;
}
.action-tip {
color: #666;
font-size: 13px;
}
.evidence-container {
max-height: 70vh;
overflow: auto;
background: #f2f2f2;
padding: 16px;
}
.evidence-sheet {
background: #fff;
padding: 14px 16px;
border: 1px solid #000;
box-shadow: none;
width: 794px;
max-width: 100%;
min-height: 1123px;
margin: 0 auto;
font-family: 'SimSun', 'Songti SC', serif;
color: #000;
}
.sheet-title {
text-align: center;
font-size: 24px;
letter-spacing: 8px;
margin-bottom: 6px;
font-weight: 700;
}
.sheet-meta {
display: flex;
justify-content: space-between;
align-items: flex-end;
font-size: 14px;
margin-bottom: 8px;
}
.meta-left,
.meta-right {
display: flex;
align-items: flex-end;
gap: 4px;
}
.inline-input {
border: none;
border-bottom: 1px solid #000;
min-width: 70px;
padding: 2px 4px;
font-size: 14px;
background: transparent;
outline: none;
height: 20px;
line-height: 20px;
}
.inline-input.small {
width: 44px;
text-align: center;
}
.inline-input.long {
min-width: 180px;
}
.sheet-table {
width: 100%;
border-collapse: collapse;
table-layout: fixed;
}
.sheet-table th,
.sheet-table td {
border: 1px solid #000;
padding: 6px 8px;
vertical-align: top;
font-size: 14px;
line-height: 1.6;
}
.sheet-table th {
background: #fff;
font-weight: 600;
text-align: center;
vertical-align: middle;
}
.vertical-header {
padding: 4px 2px;
font-weight: 600;
}
.vertical-text {
display: flex;
flex-direction: column;
align-items: center;
gap: 2px;
}
.vertical-text span {
display: block;
line-height: 1.1;
}
.cell-input {
width: 100%;
border: none;
resize: none;
min-height: 32px;
font-size: 14px;
line-height: 1.6;
font-family: inherit;
background: transparent;
overflow: hidden;
field-sizing: content;
}
.cell-input:focus {
outline: none;
}
.cell-input.single {
min-height: 30px;
}
.cell-input.medium {
min-height: 90px;
}
.cell-input.tall {
min-height: 170px;
}
.input-line {
height: 30px;
}
.summary-cell {
padding: 8px 12px;
}
.summary-title {
font-weight: 600;
margin-bottom: 6px;
text-align: left;
}
.summary-content {
text-align: left;
line-height: 1.7;
font-size: 12px;
}
.summary-item {
margin-bottom: 6px;
}
.summary-example {
margin-left: 16px;
margin-bottom: 6px;
color: #000;
}
.summary-editor {
margin-top: 8px;
}
.summary-field {
margin-bottom: 6px;
}
.summary-field-label {
font-weight: 600;
margin-bottom: 4px;
}
.summary-textarea {
margin: 0;
padding: 0;
}
.split-row {
display: flex;
align-items: stretch;
gap: 0;
min-height: 36px;
}
.split-left {
flex: 1;
padding-right: 8px;
}
.split-right {
display: flex;
align-items: center;
gap: 4px;
white-space: nowrap;
border-left: 1px solid #000;
padding-left: 8px;
}
.provider-row {
display: flex;
gap: 0;
min-height: 140px;
align-items: stretch;
}
.provider-opinion {
flex: 1;
padding-right: 8px;
}
.provider-date {
width: 110px;
display: flex;
flex-direction: column;
gap: 8px;
justify-content: center;
align-items: center;
border-left: 1px solid #000;
padding-left: 6px;
}
.date-label {
font-weight: 600;
}
.footer-note {
margin-top: 10px;
font-size: 12px;
line-height: 1.6;
}
.note-row {
margin-bottom: 6px;
text-align: right;
}
.note {
margin-bottom: 4px;
}
</style>

View File

@@ -79,6 +79,7 @@ import type { AiHistoryParam } from '@/api/ai/aiHistory/model';
const props = defineProps<{
visible: boolean;
interfaceName?: string;
projectId?: number;
}>();
const emit = defineEmits<{
@@ -98,11 +99,14 @@ const datasource: DatasourceFunction = async ({ page, limit, orders }) => {
if (orders) {
Object.assign(params, orders);
}
console.log(props,'props');
// 使用传入的接口名称进行过滤
if (props.interfaceName) {
params.interfaceName = props.interfaceName;
}
if (props.projectId) {
params.projectId = props.projectId;
}
try {
const result = await pageAiHistory(params);

View File

@@ -1,5 +1,10 @@
import navigationItems from '@/views/pwl/pwlProject/components/data/navigationItems';
// 导入Vue相关依赖
import { ref } from 'vue';
// 当前章节的ref
const currentSection = ref(0);
// 滚动到指定章节
export const scrollToSection = (index: number) => {
const element = document.getElementById(`section-${index}`);
if (element) {
@@ -10,88 +15,71 @@ export const scrollToSection = (index: number) => {
}
};
// 获取滚动容器
export const getScrollContainer = () => {
return document.querySelector('.ant-modal-body');
const drawer = document.querySelector('.ant-drawer-body');
return drawer || document.querySelector('.ant-modal-body') || document.documentElement;
};
/* 监听滚动位置更新当前章节 */
// 监听滚动位置更新当前章节
export const handleScroll = () => {
const sections = navigationItems.map((_, index) =>
document.getElementById(`section-${index}`)
);
const scrollContainer = getScrollContainer();
if (!scrollContainer) return;
const containerTop = scrollContainer.getBoundingClientRect().top;
const containerScrollTop = scrollContainer.scrollTop || document.documentElement.scrollTop;
// 获取所有章节元素
const sections = Array.from(document.querySelectorAll('.audit-section'));
for (let i = sections.length - 1; i >= 0; i--) {
const section = sections[i];
if (section) {
const sectionTop = section.getBoundingClientRect().top - containerTop;
if (sectionTop <= 100) {
// 100px 的偏移量
currentSection.value = i;
break;
}
const sectionTop = section.offsetTop;
if (sectionTop - 100 <= containerScrollTop) {
currentSection.value = i;
break;
}
}
};
// 检查章节是否有内容
export const hasContent = (section: any) => {
if (!section) return false;
/* 新增:构建导出数据的公共方法 */
if (section.mode === 'table') {
return section.data && section.data.length > 0;
} else if (section.textareaList) {
return section.textareaList.some(textarea => textarea.content && textarea.content.trim());
} else {
return !!section.content?.trim();
}
};
// 构建导出数据
export const buildExportData = () => {
// 这里根据实际情况构建数据
// 由于navigationItems现在是函数返回的ref需要先获取值
const items = navigationItems ? navigationItems.value : [];
const exportData: any = {
from00: form.code,
from10: navigationItems[0].content,
from20: navigationItems[1].content,
from30: navigationItems[2].content
companyName: form?.name || '',
auditTime: form?.expirationTime || ''
};
// 被审计单位基本情况
const basicInfoSection: any = navigationItems[3];
if (basicInfoSection?.children) {
exportData.from41 = basicInfoSection.children[0].content;
exportData.from42 = basicInfoSection.children[1].content;
exportData.from43 = basicInfoSection.children[2].content;
exportData.from44 = [basicInfoSection.children[3].content];
exportData.from45 = basicInfoSection.children[4].content;
}
// 审计内容和重点及审计方法
const auditContentSection: any = navigationItems[4];
if (auditContentSection?.children) {
exportData.from51 = auditContentSection.children[0].content;
exportData.from52 = auditContentSection.children[1].content;
exportData.from53 = auditContentSection.children[2].content;
exportData.from54 = auditContentSection.children[3].content;
exportData.from55 = auditContentSection.children[4].content;
exportData.from56 = auditContentSection.children[5].content;
exportData.from57 = auditContentSection.children[6].content;
exportData.from58 = auditContentSection.children[7].content;
}
// 重要风险的识别及应对
const riskSection: any = navigationItems[5];
if (riskSection?.children) {
exportData.from61 = riskSection.children[0].content;
exportData.from62 = riskSection.children[1].content;
}
// 其他部分
exportData.from70 = navigationItems[6].content;
exportData.from80 = navigationItems[7].content;
exportData.from90 = navigationItems[8].content;
// 收集所有表格数据
items.forEach((item, index) => {
if (item.mode === 'table' && item.data && item.data.length > 0) {
const currentTable = item.tableOptions[item.currentTableIndex];
if (currentTable) {
exportData[`table${index + 1}_${currentTable.value}`] = item.data;
}
} else if (item.content) {
exportData[`content${index + 1}`] = item.content;
}
});
return exportData;
};
export const hasContent = (section: any) => {
if (!section) return false;
if (section.children) {
return section.children.some((child) => child.content?.trim());
}
return !!section.content?.trim();
};
// 导出currentSection以便其他文件使用
export { currentSection };

View File

@@ -1,647 +1,48 @@
import columns from './columns';
import table3Columns from '@/views/pwl/pwlProject/components/data/table3Columns';
import table1Columns from '@/views/pwl/pwlProject/components/data/table1Columns';
import table4Columns from '@/views/pwl/pwlProject/components/data/table4Columns';
import { ref } from 'vue';
import { getTableConfig } from './tableCommon';
export default ref([
{
number: '一',
name: '审计内容1',
title: '',
description: '点击"AI生成"按钮让AI为您生成该部分内容或直接在下方编辑',
placeholder: '请输入审计依据内容...',
content: '',
suggestion: '',
formCommit: 10,
rows: 10,
generating: false,
extra1: true,
file1: true,
mode: 'table',
columns: table1Columns.columns0,
count: 1
},
{
number: '二',
name: '审计内容2',
title: '',
description: '点击"AI生成"按钮让AI为您生成该部分内容或直接在下方编辑',
placeholder: '请输入审计目标内容...',
content: '',
suggestion: '',
formCommit: 20,
rows: 6,
generating: false,
mode: 'text',
count: 2
},
{
number: '三',
name: '审计内容3',
title: '重大经济决策调查表',
description: '点击"AI生成"按钮生成重大经济决策调查表数据',
generating: false,
extra3: true,
file3: true,
generateMethod: null,
mode: 'table',
columns: table3Columns.columns0,
data: [],
count: 3
},
{
number: '四',
name: '审计内容4',
title: '',
description: '点击"AI生成"按钮让AI为您生成该部分内容或直接在下方编辑',
generating: false,
mode: 'table',
columns: table4Columns.columns0,
count: 4
},
{
number: '五',
name: '审计内容5',
title: '',
description: '点击"AI生成"按钮让AI为您生成该部分内容或直接在下方编辑',
generating: false,
mode: 'text',
columns: [],
count: 5
},
{
number: '六',
name: '审计内容6',
title: '',
description: '点击"AI生成"按钮让AI为您生成该部分内容或直接在下方编辑',
generating: false,
mode: 'text',
count: 6,
textareaList: [
{
label: '审查财务支出凭据',
rows: 8,
content: ''
},
{
label: '是否存在应报政府采购而未报的情',
rows: 8,
content: ''
},
{
label: '已执行政府采购的名单',
rows: 8,
content: ''
},
{
label: '单一采购来源',
rows: 8,
content: ''
}
],
columns: []
},
{
number: '七',
name: '审计内容7',
title: '',
description: '点击"AI生成"按钮让AI为您生成该部分内容或直接在下方编辑',
placeholder: '请输入审计技术方法内容...',
content: '',
suggestion: '',
formCommit: 70,
rows: 8,
generating: false,
mode: 'text',
columns,
count: 7
},
{
number: '八',
name: '审计内容8',
title: '',
description: '点击"AI生成"按钮让AI为您生成该部分内容或直接在下方编辑',
placeholder: '请输入工作步骤与时间安排内容...',
content: '',
suggestion: '',
formCommit: 80,
rows: 10,
generating: false,
mode: 'radio',
count: 8,
radioList: [
{
label: '1审计是否确定内部控制职能部门或牵头部门。',
content: ''
},
{
label: '2审计是否建立单位各部门在内部控制中的沟通协调和联动机制。',
content: ''
},
{
label:
'3审计是否建立健全集体研究、专家论证和技术咨询相结合的议事决策机制是否建立经济活动风险定期评估机制。',
content: ''
},
{
label:
'4审计是否建立健全岗位责任制明确各岗位职责与分工办理业务和事项的权限范围、审批程序和相关责任。',
content: ''
},
{
label:
'5审计是否建立健全内部监督机制明确各相关部门或岗位在内部监督中的职责权限规定内部监督的程序和要求是否定期对内部控制建立与实施情况进行内部监督检查与自我评价。重点关注内部审计监督制度和内部审计机构是否健全等。',
content: ''
},
{
label:
'6审计是否建立工作人员的培训、评价、轮岗制度应持从业资格证上岗的岗位人员是否都持有从业资格证书。',
content: ''
},
{
label:
'7是否建立健全预算编制、审批、执行、决算与评价等预算内部管理制度。',
content: ''
},
{
label:
'8是否按照国家统一的会计制度对经济业务进行账务处理并编制财务会计报告。',
content: ''
},
{
label:
'9是否建立健全单位财务管理制度、收入、支出内部管理制度明确单位经济活动的各项支出标准、明确支出报销流程是否建立健全票据管理制度是否建立健全债务内部管理制度。重点关注货币资金管理制度和财务报销制度包括货币资金业务岗位责任货币资金业务不相容岗位分离、制约和监督货币资金收支控制现金日记账登记与核对银行账户管理资金管理关键岗位的稽核等方面有无制度规定。财务报销管理中支出审批权限和报销审核、不相容职务分离等方面有无控制制度',
content: ''
},
{
label:
'10是否建立健全政府采购预算与计划管理、政府采购活动管理、验收管理等政府采购内部管理制度。物资采购重点关注预算、政府采购、验收、付款等物资采购关键环节的内部管理与控制制度是否健全',
content: ''
},
{
label:
'11是否建立健全资产内部管理制度重点关注资产的购置、验收、分配、使用、维修、处置、财务核算等管理制度是否健全是否建立健全对外投资的责任追究制度。',
content: ''
},
{
label:
'12是否建立健全业务管理制度。关注各业务管理环节的管理办法或制度是否健全。',
content: ''
},
{
label: '13是否建立健全合同内部管理制度',
content: ''
}
],
textareaList: [
{
label: '内部控制的有效性',
rows: 8,
content: ''
},
{
label: '对所属单位(企业)的管理和监督的情况',
rows: 8,
content: ''
},
{
label: '被审计领导干部任职期间新增加或新变动的重要管理或业务',
rows: 8,
content: ''
},
{
label: '单一采购来源',
rows: 8,
content: ''
}
]
},
{
number: '九',
name: '审计内容9',
title: '',
description: '点击"AI生成"按钮让AI为您生成该部分内容或直接在下方编辑',
placeholder: '请输入审计工作的组织实施内容...',
content: '',
suggestion: '',
formCommit: 90,
rows: 8,
generating: false,
mode: 'text',
count: 9
},
{
number: '十',
name: '审计内容10',
title: '',
description: '点击"AI生成"按钮让AI为您生成该部分内容或直接在下方编辑',
placeholder: '请输入审计工作的组织实施内容...',
content: '',
suggestion: '',
formCommit: 90,
rows: 8,
generating: false,
mode: 'table',
count: 10,
columns: [
{
title: '大类',
dataIndex: 'col0',
key: '',
align: 'center',
customCell: (_, index) => {
if (index === 0) return { rowSpan: 37 };
else if (index === 37) return { rowSpan: 3 };
else if (index === 40) return { rowSpan: 3 };
return { rowSpan: 0 };
}
},
{
title: '子类',
dataIndex: 'col1',
key: '',
align: 'center',
customCell: (_, index) => {
if (index === 0) return { rowSpan: 17 };
else if (index === 17) return { rowSpan: 8 };
else if (index === 25) return { rowSpan: 8 };
else if (index === 33) return { rowSpan: 4 };
else if (index === 37) return { rowSpan: 3 };
else if (index === 40) return { rowSpan: 3 };
return { rowSpan: 0 };
}
},
{
title: '小类',
dataIndex: 'col2',
key: '',
align: 'center',
customCell: (row, index) => {
console.log(index, row);
if (
[4, 17, 22, 25, 26, 27, 28, 29, 32, 33, 34, 37, 38, 39, 42].includes(
index
)
)
return { rowSpan: 1 };
else if ([18, 20, 23, 30, 35, 40].includes(index)) return { rowSpan: 2 };
if (index === 0) return { rowSpan: 4 };
else if (index === 5) return { rowSpan: 4 };
else if (index === 9) return { rowSpan: 5 };
else if (index === 14) return { rowSpan: 3 };
return { rowSpan: 0 };
}
},
{
title: '内容',
dataIndex: 'content',
key: '',
align: 'center'
},
{
title: '执行情况',
dataIndex: 'result',
key: '',
align: 'center'
},
{
title: '工作底稿索引',
dataIndex: 'workPaperIndex',
key: 'workPaperIndex',
align: 'center',
width: 140,
ellipsis: true
},
{
title: '操作',
key: 'action',
align: 'center',
width: 140
}
],
data: [
{
id: 1,
col0: '一、落实党风廉政建设责任制',
col1: '落实主体责任和监督责任',
col2: '强化组织领导',
content: '建立责任清单、明确党组、纪检责任'
},
{
id: 2,
col0: '',
col1: '',
col2: '',
content:
'建立健全反腐败领导机制,人员调整后及时进行分工,并全年召开两次以上协调会'
},
{
id: 3,
col0: '',
col1: '',
col2: '',
content:
'主要领导认真履行第一责任人责任对党风廉政建设重要工作亲自部署、重大问题亲自过问、重点环节亲自协调、重要案件亲自督办5次以上'
},
{
id: 4,
col0: '',
col1: '',
col2: '',
content:
'领导班子其他成员对职责范围内的党风廉政建设承担主要责任与分管联系部门研究安排党风廉政建设工作4次以上'
},
{
id: 5,
col0: '',
col1: '',
col2: '及时部署工作任务',
content:
'有党风廉政建设任务分工方案党组专题研究部署党风廉政建设工作4次以上'
},
{
id: 6,
col0: '',
col1: '',
col2: '层层传到责任和压力',
content:
'主要领导检查和调研党风廉政建设各一次以上,每年听取分管联系部门的党风廉政建设一次以上且每年亲自上廉政党课不少于1次'
},
{
id: 7,
col0: '',
col1: '',
col2: '',
content:
'分管领导对分管联系部门党风廉政建设检查和调研各1次以上每年听取分管联系部门的党风廉政建设情况汇报一次以上到分管联系部门上廉政党课1次以上'
},
{
id: 8,
col0: '',
col1: '',
col2: '',
content:
'党组、纪检组注重抓早抓小经常进行咬耳扯袖、红脸出汗及时开展约谈、集体廉政谈话等工作3次以上'
},
{
id: 9,
col0: '',
col1: '',
col2: '',
content: '开展述责评议工作'
},
{
id: 10,
col0: '',
col1: '',
col2: '坚持“一案双查”',
content:
'对发生在本单位的较严重的违反政治纪律、组织纪律等问题进行“一案双查”'
},
{
id: 11,
col0: '',
col1: '',
col2: '',
content: '出现“四风”和腐败等顶风违纪问题的'
},
{
id: 12,
col0: '',
col1: '',
col2: '',
content: '出现区域性系统性违纪违法问题突出的'
},
{
id: 13,
col0: '',
col1: '',
col2: '',
content: '出现上级交办的党风廉政建设事项不传达部署和落实的'
},
{
id: 14,
col0: '',
col1: '',
col2: '',
content:
'出现违纪行为隐瞒不报压案不查等问题而未进行责任追究被中央、自治区进行挂牌督办或直接问责、约谈'
},
{
id: 15,
col0: '',
col1: '',
col2: '及时汇报工作情况',
content: '党组、纪检组向自治区党委、纪委汇报“两个”责任落实情况两次以上'
},
{
id: 16,
col0: '',
col1: '',
col2: '',
content: '班子成员年底向自治区纪委报送个人落实“两个责任”情况报告'
},
{
id: 17,
col0: '',
col1: '',
col2: '',
content: '按照自治区纪委部署开展其他工作,并按时报送总结报告的'
},
{
id: 18,
col0: '',
col1: '落实中央八项规定精神工作',
col2: '开展监督检查',
content: '部署开展监督检查3次以上'
},
{
id: 19,
col0: '',
col1: '',
col2: '报送数据和资料',
content: '每月按时报送中央八项规定精神案件有关统计数据和有关资料'
},
{
id: 20,
col0: '',
col1: '',
col2: '',
content: '每月不按时报送或未按要求报送的'
},
{
id: 21,
col0: '',
col1: '',
col2: '查办违反中央八项规定精神案件',
content: '及时查处监督检查中发现的问题和中央、自治区转办督办的问题线索'
},
{
id: 22,
col0: '',
col1: '',
col2: '',
content:
'出现违反中央八项规定精神问题被上级查处的,或查处但问责太轻,被上级责令重新查办'
},
{
id: 23,
col0: '',
col1: '',
col2: '通报曝光',
content: '对受到党纪政纪处分的问题全部进行通报曝光的'
},
{
id: 24,
col0: '',
col1: '',
col2: '清退干部职工多占住房',
content: '到年底还不能完成干部职工多占住房清退的'
},
{
id: 25,
col0: '',
col1: '',
col2: '',
content: '信访反映清房工作不到位被查实的'
},
{
id: 26,
col0: '',
col1: '开展查处发生在群众身边的“四风”和腐败问题专项工作',
col2: '及时梳理处置问题线索',
content: '对收到或者上级交办问题线索进行转办督办或直接查办的'
},
{
id: 27,
col0: '',
col1: '',
col2: '查处一批案件',
content: '因查处案件不力被自治区约谈或通报批评的'
},
{
id: 28,
col0: '',
col1: '',
col2: '通报曝光一批典型案件',
content: '对查处的案件进行通报曝光'
},
{
id: 29,
col0: '',
col1: '',
col2: '营造氛围',
content: '加大宣传力度,用典型案例进行警示教育'
},
{
id: 30,
col0: '',
col1: '',
col2: '督促违纪人员主动交代问题',
content:
'以文件形式或在网络、报纸、电视等媒介上发布公告,督促违纪人员主动交代问题并主动上缴违纪所得'
},
{
id: 31,
col0: '',
col1: '',
col2: '进行总结并建立长效机制',
content: '没有在6月20日前进行总结'
},
{
id: 32,
col0: '',
col1: '',
col2: '',
content: '没有结合专项工作中发现存在的突出问题建立完善制度措施'
},
{
id: 33,
col0: '',
col1: '',
col2: '专项工作纳入常态化治理',
content: '6月后在全部二层单位开展专项工作'
},
{
id: 34,
col0: '',
col1: '严明纪律确保政令畅通',
col2: '严明政治纪律和组织纪律',
content: '有违反政治纪律等问题被中央、自治区查处的'
},
{
id: 35,
col0: '',
col1: '',
col2: '按时完成中央和自治区重大决策部署',
content: '出现问题被中央、自治区问责的'
},
{
id: 36,
col0: '',
col1: '',
col2: '按时完成转办督办案件',
content: '按时完成自治区纪委转办督办的党风政风类案件'
},
{
id: 37,
col0: '',
col1: '',
col2: '',
content: '不按时完成或不完成的'
},
{
id: 38,
col0: '二、巡视整改工作',
col1: '',
col2: '',
content: '严格执行月报告制度'
},
{
id: 39,
col0: '',
col1: '',
col2: '',
content: '按时完成整改任务'
},
{
id: 40,
col0: '',
col1: '',
col2: '',
content: '因巡视整改不给力被追究'
},
{
id: 41,
col0: '三、深化纪律检查体制改革',
col1: '',
col2: '聚焦主业主责,持续深化“三转”工作',
content: '纪检组长或纪工委书记不分管具体业务工作,专职抓执纪监督问责工作'
},
{
id: 42,
col0: '',
col1: '',
col2: '',
content: '检查发现有参与业务工作'
},
{
id: 43,
col0: '',
col1: '',
col2: '健全完善深化纪检体制改革的相关制度文件并抓好贯彻落实',
content: '年底前制定有1项以上配套制度文件'
}
]
const navigationItems = ref([]);
// 初始化导航项
export function initNavigationItems() {
navigationItems.value = Array.from({ length: 11 }, (_, index) => {
const config = getTableConfig(index);
return {
number: getChineseNumber(index + 1),
name: `审计内容${index + 1}`,
title: config?.title || `审计内容${index + 1}`,
description: '点击"AI生成"按钮让AI为您生成该部分内容或直接在下方编辑',
generating: false,
suggestion: '',
mode: 'table',
showFileSelect: true, // 所有项都显示文件选择
data: [],
extraData: [],
currentTableIndex: 0, // 当前选中的表格索引
columns: null,
extraTableTitle: config?.extraTableTitle || null,
extraColumns: config?.extraColumns || [],
tableOptions: config?.options || [],
count: index + 1,
tableType: config?.type || `auditContent${index + 1}`,
content: '',
rows: 8
};
});
return navigationItems;
}
// 获取中文数字
function getChineseNumber(num) {
const chineseNumbers = ['一', '二', '三', '四', '五', '六', '七', '八', '九', '十', '十一'];
return chineseNumbers[num - 1] || num;
}
// 导出初始化的导航项
export default function useNavigationItems() {
if (navigationItems.value.length === 0) {
initNavigationItems();
}
]);
return navigationItems;
}

View File

@@ -0,0 +1,81 @@
// 党风廉政建设责任制表格列
export const partyConductColumns = [
{
title: '大类',
dataIndex: 'category',
key: 'category',
align: 'center',
width: 120,
customCell: (_, index) => {
if (index === 0) return { rowSpan: 37 };
else if (index === 37) return { rowSpan: 3 };
else if (index === 40) return { rowSpan: 3 };
return { rowSpan: 0 };
}
},
{
title: '子类',
dataIndex: 'subCategory',
key: 'subCategory',
align: 'center',
width: 120,
customCell: (_, index) => {
if (index === 0) return { rowSpan: 17 };
else if (index === 17) return { rowSpan: 8 };
else if (index === 25) return { rowSpan: 8 };
else if (index === 33) return { rowSpan: 4 };
else if (index === 37) return { rowSpan: 3 };
else if (index === 40) return { rowSpan: 3 };
return { rowSpan: 0 };
}
},
{
title: '小类',
dataIndex: 'detailCategory',
key: 'detailCategory',
align: 'center',
width: 120,
customCell: (_, index) => {
if ([4, 17, 22, 25, 26, 27, 28, 29, 32, 33, 34, 37, 38, 39, 42].includes(index))
return { rowSpan: 1 };
else if ([18, 20, 23, 30, 35, 40].includes(index)) return { rowSpan: 2 };
if (index === 0) return { rowSpan: 4 };
else if (index === 5) return { rowSpan: 4 };
else if (index === 9) return { rowSpan: 5 };
else if (index === 14) return { rowSpan: 3 };
return { rowSpan: 0 };
}
},
{
title: '内容',
dataIndex: 'content',
key: 'content',
align: 'center',
width: 200
},
{
title: '执行情况',
dataIndex: 'executionStatus',
key: 'executionStatus',
align: 'center',
width: 300
},
{
title: '工作底稿索引',
dataIndex: 'workPaperIndex',
key: 'workPaperIndex',
align: 'center',
width: 200,
// ellipsis: true
},
// {
// title: '操作',
// key: 'action',
// align: 'center',
// width: 100
// }
];
export default {
partyConductColumns
};

View File

@@ -0,0 +1,94 @@
// 历史审计问题整改表格列
export const auditHistoryColumns = [
{
title: '序号',
dataIndex: 'index',
key: 'index',
width: 80,
align: 'center'
},
{
title: '审计年度',
dataIndex: 'auditYear',
key: 'auditYear',
align: 'center',
width: 100
},
{
title: '审计类型',
dataIndex: 'auditType',
key: 'auditType',
align: 'center',
width: 120
},
{
title: '审计发现的问题',
dataIndex: 'problemFound',
key: 'problemFound',
align: 'center',
width: 250,
// ellipsis: true
},
{
title: '整改要求',
dataIndex: 'rectificationRequirement',
key: 'rectificationRequirement',
align: 'center',
width: 200,
// ellipsis: true
},
{
title: '整改措施',
dataIndex: 'rectificationMeasures',
key: 'rectificationMeasures',
align: 'center',
width: 200,
// ellipsis: true
},
{
title: '整改完成情况',
dataIndex: 'rectificationStatus',
key: 'rectificationStatus',
align: 'center',
width: 120
},
{
title: '整改完成时间',
dataIndex: 'completionDate',
key: 'completionDate',
align: 'center',
width: 120
},
{
title: '整改责任人',
dataIndex: 'responsiblePerson',
key: 'responsiblePerson',
align: 'center',
width: 120
},
{
title: '备注',
dataIndex: 'remark',
key: 'remark',
align: 'center',
width: 150
},
{
title: '工作底稿索引',
dataIndex: 'workPaperIndex',
key: 'workPaperIndex',
align: 'center',
width: 200,
// ellipsis: true
},
// {
// title: '操作',
// key: 'action',
// align: 'center',
// width: 100
// }
];
export default {
auditHistoryColumns
};

View File

@@ -1,4 +1,14 @@
export const columns0 = [
// 创建测试结果渲染函数
export function createTestResultRender() {
return ({ text }) => {
if (text === '通过') return '<span style="color: #52c41a">通过</span>';
if (text === '不通过') return '<span style="color: #ff4d4f">不通过</span>';
return text || '待检查';
};
}
// 贯彻决策部署表格列
export const default1Columns = [
{
title: '序号',
dataIndex: 'index',
@@ -8,26 +18,26 @@ export const columns0 = [
},
{
title: '单位名称',
dataIndex: '',
key: '',
dataIndex: 'unitName',
key: 'unitName',
align: 'center'
},
{
title: '规格',
dataIndex: '',
key: '',
dataIndex: 'specification',
key: 'specification',
align: 'center'
},
{
title: '经费来源',
dataIndex: '',
key: '',
dataIndex: 'fundSource',
key: 'fundSource',
align: 'center'
},
{
title: '编制数额',
dataIndex: '',
key: '',
dataIndex: 'establishmentNum',
key: 'establishmentNum',
align: 'center'
},
{
@@ -36,14 +46,14 @@ export const columns0 = [
children: [
{
title: '其他编制',
dataIndex: '',
key: '',
dataIndex: 'otherEstablishment',
key: 'otherEstablishment',
align: 'center'
},
{
title: '事业编制',
dataIndex: '',
key: '',
dataIndex: 'institutionEstablishment',
key: 'institutionEstablishment',
align: 'center'
}
]
@@ -54,14 +64,14 @@ export const columns0 = [
children: [
{
title: '参公人数',
dataIndex: '',
key: '',
dataIndex: 'publicServantNum',
key: 'publicServantNum',
align: 'center'
},
{
title: '聘用人数',
dataIndex: '',
key: '',
dataIndex: 'employedNum',
key: 'employedNum',
align: 'center'
}
]
@@ -76,14 +86,14 @@ export const columns0 = [
children: [
{
title: '核定数',
dataIndex: '',
key: '',
dataIndex: 'departmentApproved',
key: 'departmentApproved',
align: 'center'
},
{
title: '核定数',
dataIndex: '',
key: '',
title: '实有数',
dataIndex: 'departmentActual',
key: 'departmentActual',
align: 'center'
}
]
@@ -94,14 +104,14 @@ export const columns0 = [
children: [
{
title: '核定数',
dataIndex: '',
key: '',
dataIndex: 'sectionApproved',
key: 'sectionApproved',
align: 'center'
},
{
title: '核定数',
dataIndex: '',
key: '',
title: '实有数',
dataIndex: 'sectionActual',
key: 'sectionActual',
align: 'center'
}
]
@@ -112,14 +122,14 @@ export const columns0 = [
children: [
{
title: '核定数',
dataIndex: '',
key: '',
dataIndex: 'teamApproved',
key: 'teamApproved',
align: 'center'
},
{
title: '核定数',
dataIndex: '',
key: '',
title: '实有数',
dataIndex: 'teamActual',
key: 'teamActual',
align: 'center'
}
]
@@ -136,14 +146,14 @@ export const columns0 = [
children: [
{
title: '核定数',
dataIndex: '',
key: '',
dataIndex: 'nonLeaderDeptApproved',
key: 'nonLeaderDeptApproved',
align: 'center'
},
{
title: '核定数',
dataIndex: '',
key: '',
title: '实有数',
dataIndex: 'nonLeaderDeptActual',
key: 'nonLeaderDeptActual',
align: 'center'
}
]
@@ -154,14 +164,14 @@ export const columns0 = [
children: [
{
title: '核定数',
dataIndex: '',
key: '',
dataIndex: 'nonLeaderSectionApproved',
key: 'nonLeaderSectionApproved',
align: 'center'
},
{
title: '核定数',
dataIndex: '',
key: '',
title: '实有数',
dataIndex: 'nonLeaderSectionActual',
key: 'nonLeaderSectionActual',
align: 'center'
}
]
@@ -172,14 +182,14 @@ export const columns0 = [
children: [
{
title: '核定数',
dataIndex: '',
key: '',
dataIndex: 'nonLeaderTeamApproved',
key: 'nonLeaderTeamApproved',
align: 'center'
},
{
title: '核定数',
dataIndex: '',
key: '',
title: '实有数',
dataIndex: 'nonLeaderTeamActual',
key: 'nonLeaderTeamActual',
align: 'center'
}
]
@@ -192,20 +202,20 @@ export const columns0 = [
children: [
{
title: '管理岗位',
dataIndex: '',
key: '',
dataIndex: 'managementPosition',
key: 'managementPosition',
align: 'center'
},
{
title: '专业技术岗位',
dataIndex: '',
key: '',
dataIndex: 'technicalPosition',
key: 'technicalPosition',
align: 'center'
},
{
title: '工勤技能岗位',
dataIndex: '',
key: '',
dataIndex: 'workerPosition',
key: 'workerPosition',
align: 'center'
}
]
@@ -215,7 +225,7 @@ export const columns0 = [
dataIndex: 'workPaperIndex',
key: 'workPaperIndex',
align: 'center',
width: 140,
width: 200,
ellipsis: true
},
{
@@ -226,24 +236,28 @@ export const columns0 = [
}
];
export const columns1 = [
// 领导班子名单列
export const leaderListColumns = [
{
title: '单位',
dataIndex: '',
key: '',
align: 'center'
dataIndex: 'unit',
key: 'unit',
align: 'center',
width: 120
},
{
title: '姓名',
dataIndex: '',
key: '',
align: 'center'
dataIndex: 'name',
key: 'name',
align: 'center',
width: 100
},
{
title: '部门',
dataIndex: '',
key: '',
align: 'center'
dataIndex: 'department',
key: 'department',
align: 'center',
width: 120
},
{
title: '职务',
@@ -251,113 +265,140 @@ export const columns1 = [
children: [
{
title: '党内',
dataIndex: '',
key: '',
align: 'center'
dataIndex: 'partyPosition',
key: 'partyPosition',
align: 'center',
width: 100
},
{
title: '行政',
dataIndex: '',
key: '',
align: 'center'
dataIndex: 'adminPosition',
key: 'adminPosition',
align: 'center',
width: 120
}
]
},
{
title: '任职期间',
dataIndex: '',
key: '',
align: 'center'
dataIndex: 'tenurePeriod',
key: 'tenurePeriod',
align: 'center',
width: 150
},
{
title: '主要工作责任',
dataIndex: '',
key: '',
align: 'center'
dataIndex: 'mainResponsibilities',
key: 'mainResponsibilities',
align: 'center',
width: 200
},
{
title: '备注',
dataIndex: '',
key: '',
align: 'center'
dataIndex: 'remark',
key: 'remark',
align: 'center',
width: 120
},
{
title: '工作底稿索引',
dataIndex: 'workPaperIndex',
key: 'workPaperIndex',
align: 'center',
width: 140,
width: 200,
ellipsis: true
},
{
title: '操作',
key: 'action',
align: 'center',
width: 140
width: 100
}
];
export const columns2 = [
// 决策支出表列
export const expenseColumns = [
{
title: '内容',
dataIndex: '',
key: '',
align: 'center'
title: '支出类型',
dataIndex: 'expenseType',
key: 'expenseType',
align: 'center',
width: 120
},
{
title: '2020年',
dataIndex: '',
key: '',
align: 'center'
title: '年',
dataIndex: 'year',
key: 'year',
align: 'center',
width: 100
},
{
title: '2021年',
dataIndex: '',
key: '',
align: 'center'
title: '决算报表数(元)',
dataIndex: 'finalStatementAmount',
key: 'finalStatementAmount',
align: 'center',
width: 150
},
{
title: '2022年',
dataIndex: '',
key: '',
align: 'center'
title: '年初预算数(元)',
dataIndex: 'initialBudgetAmount',
key: 'initialBudgetAmount',
align: 'center',
width: 150
},
{
title: '2023年',
dataIndex: '',
key: '',
align: 'center'
title: '增减情况(%',
dataIndex: 'changePercentage',
key: 'changePercentage',
align: 'center',
width: 120
},
{
title: '占年初预算比例(%',
dataIndex: 'budgetRatio',
key: 'budgetRatio',
align: 'center',
width: 120
},
{
title: '备注',
dataIndex: 'remark',
key: 'remark',
align: 'center',
width: 150
},
{
title: '数据来源',
dataIndex: 'dataSource',
key: 'dataSource',
align: 'center',
width: 180
},
{
title: '工作底稿索引',
dataIndex: 'workPaperIndex',
key: 'workPaperIndex',
align: 'center',
width: 140,
width: 200,
ellipsis: true
},
{
title: '操作',
key: 'action',
align: 'center',
width: 140
width: 100
}
];
export const columns3 = [
{
title: '审计内容',
dataIndex: 'title',
key: 'title',
align: 'center',
width: 120,
// customCell: (_, index) => {
// // 保持原有的行合并逻辑
// if (index === 0) return { rowSpan: 8 };
// else if (index === 8) return { rowSpan: 30 };
// return { rowSpan: 0 };
// }
},
// 八项规定表格列
export const eightRegColumns = [
{
title: '审计内容',
dataIndex: 'title',
key: 'title',
align: 'center',
width: 120
},
{
title: '审计内容',
dataIndex: 'content',
@@ -377,333 +418,29 @@ export const columns3 = [
dataIndex: 'result',
key: 'result',
align: 'center',
width: 100
width: 100,
customRender: createTestResultRender()
},
{
title: '工作底稿索引',
dataIndex: 'workPaperIndex',
key: 'workPaperIndex',
align: 'center',
width: 140,
width: 200,
ellipsis: true
},
{
title: '操作',
key: 'action',
align: 'center',
width: 140
}
// {
// title: '操作',
// key: 'action',
// align: 'center',
// width: 140
// }
];
export const columns3Data = [
{
title: '《中共中央八项规定》',
content:
'一、中央政治局全体同志要改进调查研究,到基层调研要深入了解真实情况,总结经验、研究问题、解决困难、指导工作,向群众学习、向实践学习,多同群众座谈,多同干部谈心,多商量讨论,多解剖典型。',
testContent: '',
result: '',
workPaperIndex: ''
},
{
title: '《中共中央八项规定》',
content:
'二、 要精简会议活动,切实改进会风,严格控制以中央名义召开的各类全国性会议和举行的重大活动,不开泛泛部署工作和提要求的会,未经中央批准一律不出席各类剪彩、奠基活动和庆祝会、纪念会、表彰会、博览会、研讨会及各类论坛;提高会议实效,开短会、讲短话,力戒空话、套话。',
testContent: '',
result: '',
workPaperIndex: ''
},
{
title: '《中共中央八项规定》',
content:
'三、 要精简文件简报,切实改进文风,没有实质内容、可发可不发的文件、简报一律不发。',
testContent: '',
result: '',
workPaperIndex: ''
},
{
title: '《中共中央八项规定》',
content:
'四、要规范出访活动,从外交工作大局需要出发合理安排出访活动,严格控制出访随行人员,严格按照规定乘坐交通工具,一般不安排中资机构、华侨华人、留学生代表等到机场迎送。',
testContent: '',
result: '',
workPaperIndex: ''
},
{
title: '《中共中央八项规定》',
content:
'五、要改进警卫工作,坚持有利于联系群众的原则,减少交通管制,一般情况下不得封路、不清场闭馆。',
testContent: '',
result: '',
workPaperIndex: ''
},
{
title: '《中共中央八项规定》',
content:
'六、要改进新闻报道,中央政治局同志出席会议和活动应根据工作需要、新闻价值、社会效果决定是否报道,进一步压缩报道的数量、字数、时长。',
testContent: '',
result: '',
workPaperIndex: ''
},
{
title: '《中共中央八项规定》',
content:
'七、要严格文稿发表,除中央统一安排外,个人不公开出版著作、讲话单行本,不发贺信、贺电,不题词、题字。',
testContent: '',
result: '',
workPaperIndex: ''
},
{
title: '《中共中央八项规定》',
content:
'八、 要厉行勤俭节约,严格遵守廉洁从政有关规定,严格执行住房、车辆配备等有关工作和生活待遇的规定。',
testContent: '',
result: '',
workPaperIndex: ''
},
{
title: '《中央八项规定实施细则》',
content:
'1.注重实际效果。安排中央政治局委员(含中央政治局常委,下同)到基层调研要紧紧围调研主题,实事求是地安排考查内容,为领导同志深入基层、深入群众、深入实际创造条件,既要到工作开展好的地方去总结经验,更要到困难较多、情况复杂、矛盾尖锐的地方去调研解决问题。在考察点上,要使领导同志有更多的自主活动,力求准确、全面、深入了解情况,防止调研工作走形式、走过场。中央政治局常委可结合分管工作听取省(自治区、直辖市)工作汇报,一般不召开全省(自治区、直辖市)性工作汇报会和由省级几个领导班子成员参加的会议。各考察点现场要真实,不能为迎接考察装修布置,更不能弄虚作假。汇报工作时要讲真话、报实情。',
testContent: '',
result: '',
workPaperIndex: ''
},
{
title: '《中央八项规定实施细则》',
content:
'2.减少陪同人员。中央政治局常委到地方考察调研陪同的中央和国家机关有关部门负责同志不超过5人省(自治区、直辖市)陪同的负责同志不超过3人;其他中央政治局委员到地方考察调研时陪同的中央和国家机关有关部门负责同志不超过2人省(自治区、直辖市)由1位负责同志陪同省(自治区、直辖市)主要负责同志可不陪同。中央政治局委员到地方考察调研,不搞层层多人陪同,市(地、州、盟)、县(市、区、旗)只安排1位负责同志陪同;考察企事业单位和条条管理部门时,其在异地的上级单位和主管部门的负责同志不到现场陪同。',
testContent: '',
result: '',
workPaperIndex: ''
},
{
title: '《中央八项规定实施细则》',
content:
'3.简化接待工作。中央政治局委员在地方考察调研期间,不张贴悬挂横幅标语,不安排群众迎送,不铺设迎宾地毯,不摆放花草,不组织专场文艺表演,不安排超规格套房,一般不安排接见合影,不赠送各类纪念品或土特产,不安排宴请,不上高档菜肴,自助餐也要注意节俭。除工作需要外,不安排中央政治局委员到名胜古迹、风景区参观。中央政治局常委外出考察时根据工作需要可由空军安排飞机,也可乘坐民航飞机;其他中央政治局委员外出考察乘坐民航班机,如有特殊情况需要乘坐空军飞机,须经中央办公厅报中央批准。',
testContent: '',
result: '',
workPaperIndex: ''
},
{
title: '《中央八项规定实施细则》',
content:
'4.改进警卫工作。中央政治局委员的警卫工作,要坚持有利于联系群众的原则,实行内紧外松的警卫方式,减少扰民。中央政治局委员出行时要减少交通管制,不得封路。中央政治局委员如因工作需要前往名胜古迹、风景区考察,一律不得封山、封园、封路。在公务活动现场,要合理安排警力,尽可能缩小警戒控制范围,不清场闭馆,不得停止、限制正常的生产经营活动。警卫部门要根据中央关于改进工作作风、密切联系群众的要求,进一步修改完善有关安全警卫工作的具体规定,严格按照相关规定部署组织警卫工作,不得违反规定扩大警卫范围、提高警卫规格。',
testContent: '',
result: '',
workPaperIndex: ''
},
{
title: '《中央八项规定实施细则》',
content:
'5.减少会议活动。各地区各部门要本着务实高效的原则严格清理、切实减少各类会议活动能不开的坚决不开可以合并的坚决合并。各部门召开本系统全国性会议每年不超过1次。未经中央批准不在地方任职的中央政治局委员一律不出席各类剪彩、奠基活动和庆祝会、纪念会、表彰会、博览会、研讨会及各类论坛等在地方任职的中央政治局委员出席上述活动也要从严掌握。要严格会议活动审批程序以党中央、国务院名义召开的全国性会议和举行的重大活动由中央办公厅、国务院办公厅统筹安排。中央各议事协调机构及其办公室、中央和国家机关各部门召开的全国性会议和举行的重要活动须经中央办公厅、国务院办公厅审核后报批涉外会议和重要活动还须送中央外办、外交部审核。',
testContent: '',
result: '',
workPaperIndex: ''
},
{
title: '《中央八项规定实施细则》',
content:
'6.控制会议活动规模和时间。严格控制各类会议活动规模减少参加人员。各部门召开的全国性会议只安排与会议内容密切相关的部门参加人数不超过300人时间不超过2天不请各省(自治区、直辖市)党委和政府主要负责同志、分管负责同志出席。中央政治局常委不出席各部门召开的工作会议。要坚持开短会、讲短话,力戒空话、套话。各类会议活动不安排中央政治局委员接见会议代表并合影。',
testContent: '',
result: '',
workPaperIndex: ''
},
{
title: '《中央八项规定实施细则》',
content:
'7.提高会议活动效率和质量。各地区各部门要充分运用现代信息技术手段改进会议形式,提高会议效率。全国性会议可视情采用电视电话会议形式召开,在不涉密且技术条件允许的情况下,有的会议可直接开到基层。电视电话会议的主会场和分会场都要控制规模、简化形式,不请外地同志到主会场参会,各地分会场布置要因地制宜、精简节约。需要安排讨论的会议,要精心设置议题,充分安排讨论时间,提高讨论深度。中央政治局委员会见外宾的形式、地点可灵活安排,注重实效。',
testContent: '',
result: '',
workPaperIndex: ''
},
{
title: '《中央八项规定实施细则》',
content:
'8.严格控制会议活动经费。各地区各部门举办会议活动,要严格执行有关规定,厉行节约,反对铺张浪费。严禁提高会议用餐、住宿标准,严禁组织高消费娱乐、健身活动。会议活动现场布置要简朴,工作会议一律不摆花草、不制作背景板。严禁以任何名义发放纪念品。',
testContent: '',
result: '',
workPaperIndex: ''
},
{
title: '《中央八项规定实施细则》',
content:
'9.减少各类文件简报。凡国家法律法规和党内法规已作出明确规定的,一律不再制发文件。没有实质内容、可发可不发的文件简报,一律不发。由部门发文或部门联合发文能够解决的,不再由中共中央、国务院(含中央办公厅、国务院办公厅)转发或印发。未经党中央、国务院批准中央和国家机关各部门、各议事协调机构不得向地方党委和政府发布指示性公文不得要求地方党委和政府报文。各地区各部门要严格按程序报文不得多头报文。各部门报送党中央、国务院的简报原则上只保留1种。各部门内设机构和下属单位的简报一律不报送党中央、国务院。',
testContent: '',
result: '',
workPaperIndex: ''
},
{
title: '《中央八项规定实施细则》',
content:
'10.提高文件简报的质量和时效。各地区各部门应严格按照中央办公厅、国务院办公厅的有关要求,对文件和简报资料的报送程序和格式进行规范,加强综合协调和审核把关,切实提高运转效率。文件要突出思想性、针对性和可操作性,严格控制篇幅;简报要重点反映重要动态、经验、问题和工作建议等内容,减少一般性工作情况汇报。各地区各部门要加快推进机关信息化建设,积极推广电子公文和二维条码应用,逐步实现文件和简报资料网络传输和网上办理,减少纸质文件和简报资料,降低运行成本,提高工作效率。',
testContent: '',
result: '',
workPaperIndex: ''
},
{
title: '《中央八项规定实施细则》',
content:
'11.合理安排出访。围绕外交工作需要合理制定年度出访总体方案中央政治局委员每人每年出访不超过1次时间不超过10天。中央政治局常委每次出访不超过4个国家(包括经停国家)其他中央政治局委员每次出访不超过3个国家(包括经停国家)。中央政治局常委同一期出访安排不超过2人;中共中央总书记、国务院总理根据工作需要安排出访,原则上不安排同期出访。出席全球性或地区性会议、双边和多边机制活动、外国执政党重要会议以及特殊情况需要出访的,另行报批。',
testContent: '',
result: '',
workPaperIndex: ''
},
{
title: '《中央八项规定实施细则》',
content:
'12.控制随行人员。严格根据工作需要安排陪同人员和工作人员,中共中央总书记、国务院总理出访,陪同人员(不含领导同志配偶和我驻往访国大使夫妇,下同)不超过6人工作人员总数原则上不超过50人其他中央政治局常委出访陪同人员不超过5人工作人员不超过40人;其他中央政治局委员出访陪同人员不超过4人工作人员不超过16人。出席全球性或地区性会议、双边机制性会晤活动陪同人员根据实际需要经中央外办或外交部报中央批准。',
testContent: '',
result: '',
workPaperIndex: ''
},
{
title: '《中央八项规定实施细则》',
content:
'13.规范乘机安排。严格按照规定乘坐交通工具,中共中央总书记、国务院总理出访乘坐专机,其他中央政治局常委出访根据工作需要可乘坐民航包机或班机,如需乘坐民航包机,须经中央外办报中央批准;其他中央政治局委员出访乘坐民航班机,一律不乘坐民航包机。中央政治局委员一律不乘坐私人包机、企业包机和外国航空公司包机。',
testContent: '',
result: '',
workPaperIndex: ''
},
{
title: '《中央八项规定实施细则》',
content:
'14.简化机场迎送和接待工作。中央政治局常委出访抵离京时可安排出访主办部门、中国民航局各1位负责同志到机场迎送其他部门不安排负责同志前往迎送;其他中央政治局委员出访抵离京时,不安排有关部门负责同志前往机场迎送。中央政治局委员出访,各有关驻外使领馆不安排中资机构、华侨华人和留学生代表到机场迎送。驻外使领馆和其他驻外机构一律不得向代表团赠送礼品,外方所赠礼品应严格按国家有关规定处理。',
testContent: '',
result: '',
workPaperIndex: ''
},
{
title: '《中央八项规定实施细则》',
content:
'15.加强统筹协调。中央政治局委员出访由中央外办商有关部门统筹安排年度出访计划每年1月底前报中央批准当年年中进行1次综合协调。年度出访计划和年中协调安排经中央批准后有关单位原则上不再临时安排中央政治局委员出访。',
testContent: '',
result: '',
workPaperIndex: ''
},
{
title: '《中央八项规定实施细则》',
content:
'16.简化中央政治局委员出席会议活动新闻报道。要根据工作需要、新闻价值、社会效果决定是否报道。出席一般性会议和活动不作报道。要按照精简务实、注重效果的原则,进一步压缩数量、字数和时长,有的可刊播简短消息,有的只报标题新闻。中央政治局委员新闻报道中的职务称谓根据会议活动主题内容确定,不必报道担任的全部职务。要遵循新闻传播规律,进一步优化中央政治局委员会议活动报道内容和结构,调整播发顺序,除涉及重大会议活动和重大事件外,一般可安排在报刊、电视的头条新闻之后,以突出民生和社会新闻,增强传播效果。除具有全局意义和重大影响的会议活动外,一般情况下不安排广播电视直播。除中共中央总书记外,其他中央政治局委员出席会议活动,中央电视台报道时不出同期声。',
testContent: '',
result: '',
workPaperIndex: ''
},
{
title: '《中央八项规定实施细则》',
content:
'17.精简全国性会议活动新闻报道。经中央批准举办的全国性会议活动除中共中央总书记外中央政治局常委出席的文字稿不超过1000字中央电视台新闻联播播出时间不超过2分钟;其他中央政治局委员出席的文字稿不超过500字中央电视台新闻联播不作报道晚间新闻播出时间不超过1分钟未经中央批准的不作报道。中央各类议事协调机构及其办公室召开的会议原则上不作报道;特殊情况需作报道的,须报中央批准,字数和时长参照上述标准执行。',
testContent: '',
result: '',
workPaperIndex: ''
},
{
title: '《中央八项规定实施细则》',
content:
'18.规范中央政治局委员考察调研活动新闻报道。考察调研活动新闻报道要多反映群众关心的实质性内容更好贴近实际、贴近生活、贴近群众。除中共中央总书记外中央政治局常委考察调研时随行中央媒体记者一般不超过5人其中包括2名摄像记者、1名编辑、1名摄影记者和1名文字记者地方媒体一般不派记者参加;中央媒体报道中央政治局常委考察调研活动新华社发文字信息通稿不超过1000字中央电视台新闻联播播出时间不超过3分钟不刊发侧记、特写、综述等。其他中央政治局委员的考察调研活动如需公开报道新华社发文字消息通稿不超过800字可安排在中央电视台晚间新闻播出时间不超过1分钟。',
testContent: '',
result: '',
workPaperIndex: ''
},
{
title: '《中央八项规定实施细则》',
content:
'19.简化治丧活动新闻报道。担任“四副两高”以上领导职务的领导同志逝世后,中央政治局委员出席遗体送别活动的,新华社消息稿中只列名报道中央政治局常委和曾担任中共中央总书记、国家主席、中央军委主席职务的同志名单,其他中央政治局委员不再列名。中共中央总书记出席可配发慰问亲属的照片,其他中央政治局委员一般不配发照片。中央电视台新闻联播可播出中央政治局常委和曾担任中共中央总书记、国家主席、中央军委主席职务的同志送别画面,不再播出其他中央政治局委员画面。省部级领导干部及社会知名人士逝世后,中央政治局委员出席遗体送别活动或以其他方式表示哀悼、慰问的,中央电视台不报道,新华社消息稿中不列名报道中央政治局委员名单。',
testContent: '',
result: '',
workPaperIndex: ''
},
{
title: '《中央八项规定实施细则》',
content:
'20.简化诞辰纪念活动新闻报道。曾任中央政治局常委职务的已故党和国家领导人的诞辰纪念活动中央政治局常委出席并讲话的文字稿不超过1000字中央电视台新闻联播播出时间不超过2分钟讲话全文另发人民日报摘发座谈会发言;中共中央总书记出席的纪念活动可适当放宽有关标准。曾任其他领导职务的已故党和国家领导人的诞辰纪念活动中央政治局常委出席中央有关领导同志出席并讲话的文字稿不超过300字中央电视台新闻联播播出时间不超过1分钟讲话全文另发人民日报不摘发座谈会发言。',
testContent: '',
result: '',
workPaperIndex: ''
},
{
title: '《中央八项规定实施细则》',
content:
'21.优化中央政治局委员外事活动新闻报道。提高外事报道针对性增加信息量减少一般性报道。中央政治局委员同日会见多批外宾或多位中央政治局委员同日分别会见同一批外宾人民日报、中央电视台新闻联播、晚间新闻发一条综合消息不单独报道每场会见。除中共中央总书记、国务院总理外中央政治局委员出访人民日报、中央电视台新闻联播每个国家综合报道1次新闻消息稿不超过1200字电视新闻时间不超过3分钟。除中共中央总书记外其他中央政治局委员不发侧记、特写、综述等其他形式报道;其他中央政治局委员出访期间会见外国元首、政府首脑等活动可作报道新闻消息稿不超过500字不配发照片可安排在中央电视台晚间新闻中播出时间不超过1分钟出访的其他活动一般不作报道。出访活动新闻报道的报纸截稿时间为凌晨1时新闻联播截稿时间为19时20分此后主要政治局委员的外事活动可在次日安排报道。',
testContent: '',
result: '',
workPaperIndex: ''
},
{
title: '《中央八项规定实施细则》',
content:
'22.规范重大专项工作新闻报道。中央政治局委员受中央委托到地方指导特大抢险救灾、处理重大安全事故、处理重大突发事件等重大专项工作在应急阶段文字稿不超过1000字中央电视台新闻联播节目播出时间不超过2分钟;上述专项工作转入常态后中央电视台新闻联播节目一般只综合报道工作进展情况不单独报道中央政治局委员参加活动或讲话改由晚间新闻节目报道文字稿不超过500字晚间新闻播出时间不超过1分钟。',
testContent: '',
result: '',
workPaperIndex: ''
},
{
title: '《中央八项规定实施细则》',
content:
'23.规范其他新闻报道。经中央批准中央政治局常委和从中央政治局常委职务上退下来的同志出版著作等作品由新华社播发简短出版消息字数不超过200字中央电视台不作报道。除经中央批准的重大展览和文艺演出活动外中央政治局委员参观展览、观看一般性文艺演出以及出席其他文艺活动一律不作报道。中央政治局委员给部门、地方的指示、批示等一般不作报道。',
testContent: '',
result: '',
workPaperIndex: ''
},
{
title: '《中央八项规定实施细则》',
content:
'24.加强新闻报道统筹协调。探索运用网络等新手段加强中央主要领导同志与群众的直接联系。充分发挥中央职能部门的作用,中央政治局委员的新闻报道工作由中央宣传部负责统筹协调和日常管理,并督促指导中央新闻媒体落实有关规定。涉及中央重大会议活动的新闻报道工作,中央宣传部商中央办公厅统筹安排。领导同志处不直接向新闻单位就报道字数、时长、版面、画面等提出要求,有关要求可按中央规定,由中央宣传部向新闻单位提出或由新闻单位根据实际情况自行确定。从中央政治局常委职务上退下来、仍担任国家机构主要负责人的领导同志,新闻报道工作仍按原标准执行;如有特殊情况,由中央宣传部研究解决。',
testContent: '',
result: '',
workPaperIndex: ''
},
{
title: '《中央八项规定实施细则》',
content:
'25.改进工作作风、密切联系群众,关系党的形象,关系党和人民事业成败。各级党政机关和领导干部要坚持以人为本、执政为民,带头改进工作作风,带头深入基层调查研究,带头密切联系群众,带头解决实际问题。各地区各部门要严格按照本细则,结合实际情况,制定涵盖各级领导干部的更加具体、更便于操作的贯彻落实办法,狠抓落实,确保抓出成效。',
testContent: '',
result: '',
workPaperIndex: ''
},
{
title: '《中央八项规定实施细则》',
content:
'26.各地区各部门要严格执行本细则每年年底对执行情况进行1次专项检查并将检查结果分别报送中央办公厅、国务院办公厅。',
testContent: '',
result: '',
workPaperIndex: ''
},
{
title: '《中央八项规定实施细则》',
content:
'27. 中央办公厅、国务院办公厅要定期督促检查,每年底通报执行情况,并向中央政治局常委会会议、中央政治局会议汇报执行情况,对违反规定的要建议有关部门进行处理。各级纪检监察机关要把监督执行本细则作为改进党风政风的一项经常性工作来抓。审计部门每年要对各地区各部门会议活动等经费的使用情况进行审查。',
testContent: '',
result: '',
workPaperIndex: ''
},
{
title: '《中央八项规定实施细则》',
content:
'28.人大、政协、军队、人民团体机关参照本细则执行。',
testContent: '',
result: '',
workPaperIndex: ''
},
{
title: '《中央八项规定实施细则》',
content:
'29.本细则由中央办公厅、国务院办公厅负责解释。',
testContent: '',
result: '',
workPaperIndex: ''
},
{
title: '《中央八项规定实施细则》',
content:
'30.本细则自发布之日起施行。此前发布的有关规定,凡与本细则不一致的,以本细则为准。',
testContent: '',
result: '',
workPaperIndex: ''
},
];
export default { columns0, columns1, columns2, columns3, columns3Data }
export default {
default1Columns,
leaderListColumns,
expenseColumns,
eightRegColumns,
createTestResultRender
};

View File

@@ -0,0 +1,62 @@
// 创建测试结果渲染函数
export function createTestResultRender() {
return ({ text }) => {
if (text === '通过') return '<span style="color: #52c41a">通过</span>';
if (text === '不通过') return '<span style="color: #ff4d4f">不通过</span>';
return text || '待检查';
};
}
// 审计内容2表格列
export const strategyAuditColumns = [
{
title: '序号',
dataIndex: 'index',
key: 'index',
width: 60,
align: 'center'
},
{
title: '审计内容',
dataIndex: 'auditContent',
key: 'auditContent',
width: 150,
align: 'center',
// ellipsis: true
},
{
title: '检查的证据及测试内容',
dataIndex: 'checkEvidence',
key: 'checkEvidence',
width: 350,
align: 'center',
// ellipsis: true
},
{
title: '测试结果',
dataIndex: 'testResult',
key: 'testResult',
width: 100,
align: 'center',
customRender: createTestResultRender()
},
{
title: '工作底稿索引',
dataIndex: 'workPaperIndex',
key: 'workPaperIndex',
width: 200,
align: 'center',
// ellipsis: true
},
// {
// title: '操作',
// key: 'action',
// width: 100,
// align: 'center'
// }
];
export default {
strategyAuditColumns,
createTestResultRender
};

View File

@@ -1,4 +1,7 @@
export const columns0 = [
import { createTestResultRender } from './table2Columns';
// 三重一大表格列
export const tripleOneColumns = [
{
title: '',
dataIndex: 'category',
@@ -35,19 +38,15 @@ export const columns0 = [
dataIndex: 'testResult',
key: 'testResult',
align: 'center',
customRender: ({ text }) => {
if (text === '通过') return '<span style="color: #52c41a">通过</span>';
if (text === '不通过')
return '<span style="color: #ff4d4f">不通过</span>';
return text;
}
width: 80,
customRender: createTestResultRender()
},
{
title: '工作底稿索引',
dataIndex: 'workPaperIndex',
key: 'workPaperIndex',
align: 'center',
width: 140,
width: 200,
ellipsis: true
},
{
@@ -58,7 +57,8 @@ export const columns0 = [
}
];
export const columns1 = [
// 重大经济决策表格列
export const decisionTableColumns = [
{
title: '序号',
dataIndex: 'index',
@@ -68,8 +68,8 @@ export const columns1 = [
},
{
title: '重大经济决策事项',
dataIndex: 'name',
key: 'name',
dataIndex: 'decisionItem',
key: 'decisionItem',
width: 200,
align: 'center'
},
@@ -126,12 +126,15 @@ export const columns1 = [
}
]
},
{
title: '操作',
key: 'action',
align: 'center',
width: 140
}
// {
// title: '操作',
// key: 'action',
// align: 'center',
// width: 140
// }
];
export default { columns0, columns1 };
export default {
tripleOneColumns,
decisionTableColumns
};

View File

@@ -1,16 +1,17 @@
export const columns0 = [
{
title: '序号',
dataIndex: '',
key: '',
width: 120,
dataIndex: 'index',
key: 'index',
width: 80,
align: 'center'
},
{
title: '年度',
dataIndex: '',
key: '',
align: 'center'
dataIndex: 'year',
key: 'year',
align: 'center',
width: 120
},
{
title: '上级主管部门下达目标责任制',
@@ -18,21 +19,24 @@ export const columns0 = [
children: [
{
title: '下达文件',
dataIndex: '',
key: '',
align: 'center'
dataIndex: 'superiorFile',
key: 'superiorFile',
align: 'center',
width: 200
},
{
title: '完成情况',
dataIndex: '',
key: '',
align: 'center'
dataIndex: 'superiorCompletion',
key: 'superiorCompletion',
align: 'center',
width: 120
},
{
title: '未完成原因',
dataIndex: '',
key: '',
align: 'center'
dataIndex: 'superiorReason',
key: 'superiorReason',
align: 'center',
width: 200
},
]
},
@@ -42,44 +46,42 @@ export const columns0 = [
children: [
{
title: '计划文件',
dataIndex: '',
key: '',
align: 'center'
dataIndex: 'selfPlan',
key: 'selfPlan',
align: 'center',
width: 200
},
{
title: '完成情况',
dataIndex: '',
key: '',
align: 'center'
dataIndex: 'selfCompletion',
key: 'selfCompletion',
align: 'center',
width: 120
},
{
title: '未完成原因',
dataIndex: '',
key: '',
align: 'center'
dataIndex: 'selfReason',
key: 'selfReason',
align: 'center',
width: 200
},
]
},
{
title: '备注',
dataIndex: '',
key: '',
align: 'center'
dataIndex: 'remark',
key: 'remark',
align: 'center',
width: 200
},
{
title: '工作底稿索引',
dataIndex: 'workPaperIndex',
key: 'workPaperIndex',
align: 'center',
width: 140,
width: 200,
ellipsis: true
},
{
title: '操作',
key: 'action',
align: 'center',
width: 100
}
];
export default { columns0 };
export default { columns0 };

View File

@@ -0,0 +1,178 @@
export const budgetManageColumns = [
{
title: '预算科目名称',
dataIndex: 'budgetSubject',
key: 'budgetSubject',
align: 'center',
width: 150
},
{
title: '指标来源',
dataIndex: 'indicatorSource',
key: 'indicatorSource',
align: 'center',
width: 120
},
{
title: '合计',
dataIndex: 'total',
key: 'total',
align: 'center',
width: 100
},
{
title: '上年结余',
dataIndex: 'lastYearBalance',
key: 'lastYearBalance',
align: 'center',
width: 100
},
{
title: '年初部门预算',
dataIndex: 'initialBudget',
key: 'initialBudget',
align: 'center',
width: 120
},
{
title: '追加(减)预算',
dataIndex: 'additionalBudget',
key: 'additionalBudget',
align: 'center',
width: 120
},
{
title: '指标运用',
align: 'center',
children: [
{
title: '合计',
dataIndex: 'indicatorUseTotal',
key: 'indicatorUseTotal',
align: 'center',
width: 80
},
{
title: '拨款小计',
dataIndex: 'appropriationSubtotal',
key: 'appropriationSubtotal',
align: 'center',
width: 100
},
{
title: '拨款',
dataIndex: 'appropriation',
key: 'appropriation',
align: 'center',
width: 80
},
{
title: '工资统发',
dataIndex: 'salaryPayment',
key: 'salaryPayment',
align: 'center',
width: 100
},
{
title: '政府采购',
dataIndex: 'govProcurement',
key: 'govProcurement',
align: 'center',
width: 100
}
]
},
{
title: '指标结余',
dataIndex: 'indicatorBalance',
key: 'indicatorBalance',
align: 'center',
width: 100
},
{
title: '工作底稿索引',
dataIndex: 'workPaperIndex',
key: 'workPaperIndex',
align: 'center',
width: 200,
ellipsis: true
},
{
title: '操作',
key: 'action',
align: 'center',
width: 100
}
];
// 预算执行情况列
export const budgetExecutionColumns = [
{
title: '项目',
dataIndex: 'project',
key: 'project',
align: 'center',
width: 150
},
{
title: '上年结转',
dataIndex: 'lastYearCarryOver',
key: 'lastYearCarryOver',
align: 'center',
width: 100
},
{
title: '本年预算小计',
dataIndex: 'currentYearBudgetTotal',
key: 'currentYearBudgetTotal',
align: 'center',
width: 120
},
{
title: '年初批复预算数',
dataIndex: 'initialApprovedBudget',
key: 'initialApprovedBudget',
align: 'center',
width: 120
},
{
title: '追加预算数',
dataIndex: 'additionalBudgetAmount',
key: 'additionalBudgetAmount',
align: 'center',
width: 100
},
{
title: '实际拨款数',
dataIndex: 'actualAppropriation',
key: 'actualAppropriation',
align: 'center',
width: 120
},
{
title: '指标结余',
dataIndex: 'indicatorBalance',
key: 'indicatorBalance',
align: 'center',
width: 100
},
{
title: '工作底稿索引',
dataIndex: 'workPaperIndex',
key: 'workPaperIndex',
align: 'center',
width: 200,
ellipsis: true
},
// {
// title: '操作',
// key: 'action',
// align: 'center',
// width: 100
// }
];
export default {
budgetManageColumns,
budgetExecutionColumns
};

View File

@@ -0,0 +1,118 @@
export const stateAssetsManageColumns = [
{
title: '序号',
dataIndex: 'index',
key: 'index',
width: 60,
align: 'center'
},
{
title: '国有资产名称',
dataIndex: 'assetName',
key: 'assetName',
align: 'center',
width: 120
},
{
title: '取得方式',
dataIndex: 'acquisitionMethod',
key: 'acquisitionMethod',
align: 'center',
width: 100
},
{
title: '资产价值',
dataIndex: 'assetValue',
key: 'assetValue',
align: 'center',
width: 100
},
{
title: '资产地址',
dataIndex: 'assetAddress',
key: 'assetAddress',
align: 'center',
width: 150
},
{
title: '面积',
dataIndex: 'area',
key: 'area',
align: 'center',
width: 80
},
{
title: '承租方',
dataIndex: 'tenant',
key: 'tenant',
align: 'center',
width: 100
},
{
title: '合同金额',
dataIndex: 'contractAmount',
key: 'contractAmount',
align: 'center',
width: 100
},
{
title: '租赁起止时间',
dataIndex: 'leasePeriod',
key: 'leasePeriod',
align: 'center',
width: 150
},
{
title: '租金缴纳时间',
dataIndex: 'rentPaymentTime',
key: 'rentPaymentTime',
align: 'center',
width: 120
},
{
title: '是否上平台',
dataIndex: 'platformLease',
key: 'platformLease',
align: 'center',
width: 100
},
{
title: '审批文件',
dataIndex: 'approvalDoc',
key: 'approvalDoc',
align: 'center',
width: 150
},
{
title: '纳入预算',
dataIndex: 'inBudget',
key: 'inBudget',
align: 'center',
width: 80
},
{
title: '备注',
dataIndex: 'remark',
key: 'remark',
align: 'center',
width: 150
},
{
title: '工作底稿索引',
dataIndex: 'workPaperIndex',
key: 'workPaperIndex',
align: 'center',
width: 200,
ellipsis: true
},
// {
// title: '操作',
// key: 'action',
// align: 'center',
// width: 100
// }
];
export default {
stateAssetsManageColumns
};

View File

@@ -0,0 +1,55 @@
import { createTestResultRender } from './table2Columns';
// 重大投资情况审计表格列
export const investmentSituationColumns = [
{
title: '',
dataIndex: 'category',
key: 'category',
width: 150,
align: 'center',
},
{
title: '审计内容',
dataIndex: 'auditContent',
key: 'auditContent',
align: 'center',
width: 300,
// ellipsis: true
},
{
title: '检查的证据及测试内容',
dataIndex: 'checkEvidence',
key: 'checkEvidence',
align: 'center',
width: 400,
// ellipsis: true
},
{
title: '测试结果',
dataIndex: 'testResult',
key: 'testResult',
align: 'center',
width: 100,
customRender: createTestResultRender()
},
{
title: '工作底稿索引',
dataIndex: 'workPaperIndex',
key: 'workPaperIndex',
align: 'center',
width: 200,
// ellipsis: true
},
// {
// title: '操作',
// key: 'action',
// align: 'center',
// width: 100
// }
];
// 删除不再需要的单独列配置
export default {
investmentSituationColumns
};

View File

@@ -0,0 +1,83 @@
import { createTestResultRender } from './table2Columns';
// 内部控制测试表格列
export const internalControlTestColumns = [
{
title: '序号',
dataIndex: 'index',
key: 'index',
width: 80,
align: 'center'
},
{
title: '控制环节',
dataIndex: 'controlLink',
key: 'controlLink',
align: 'center',
width: 150
},
{
title: '控制要求',
dataIndex: 'controlRequirement',
key: 'controlRequirement',
align: 'center',
width: 200
},
{
title: '控制活动描述',
dataIndex: 'controlActivity',
key: 'controlActivity',
align: 'center',
width: 300,
// ellipsis: true
},
{
title: '控制职责岗位',
dataIndex: 'controlPosition',
key: 'controlPosition',
align: 'center',
width: 150
},
{
title: '测试步骤',
dataIndex: 'testSteps',
key: 'testSteps',
align: 'center',
width: 250,
// ellipsis: true
},
{
title: '测试结果',
dataIndex: 'testResult',
key: 'testResult',
align: 'center',
width: 100,
customRender: createTestResultRender()
},
{
title: '检查证据',
dataIndex: 'checkEvidence',
key: 'checkEvidence',
align: 'center',
width: 250,
// ellipsis: true
},
{
title: '工作底稿索引',
dataIndex: 'workPaperIndex',
key: 'workPaperIndex',
align: 'center',
width: 200,
// ellipsis: true
},
// {
// title: '操作',
// key: 'action',
// align: 'center',
// width: 100
// }
];
export default {
internalControlTestColumns
};

View File

@@ -0,0 +1,55 @@
export const personnelEstablishmentColumns = [
{
title: '序号',
dataIndex: 'index',
key: 'index',
width: 80,
align: 'center'
},
{
title: '审计内容',
dataIndex: 'auditContent',
key: 'auditContent',
align: 'center',
width: 200,
},
{
title: '审计目标',
dataIndex: 'auditTarget',
key: 'auditTarget',
align: 'center',
width: 250,
},
{
title: '审计证据',
dataIndex: 'auditEvidence',
key: 'auditEvidence',
align: 'center',
width: 300,
},
{
title: '生成结果',
dataIndex: 'generationResult',
key: 'generationResult',
align: 'center',
width: 300,
},
{
title: '工作底稿索引',
dataIndex: 'workPaperIndex',
key: 'workPaperIndex',
align: 'center',
width: 200,
},
// {
// title: '操作',
// key: 'action',
// align: 'center',
// width: 100
// }
];
export default {
personnelEstablishmentColumns
};

View File

@@ -0,0 +1,60 @@
export const benefitEstablishmentColumns = [
{
title: '序号',
dataIndex: 'index',
key: 'index',
width: 80,
align: 'center'
},
{
title: '凭证号',
dataIndex: 'voucher',
key: 'voucher',
align: 'center'
},
{
title: '支出日期',
dataIndex: 'expenditureDate',
key: 'expenditureDate',
align: 'center'
},
{
title: '用途',
dataIndex: 'usage',
key: 'usage',
align: 'center'
},
{
title: '收款方',
dataIndex: 'payee',
key: 'payee',
align: 'center'
},
{
title: '金额(元)',
dataIndex: 'amount',
key: 'amount',
align: 'center'
},
{
title: '归属部门/人员',
dataIndex: 'belongTo',
key: 'belongTo',
align: 'center'
},
{
title: '款项性质说明',
dataIndex: 'natureDesc',
key: 'natureDesc',
align: 'center'
},
{
title: '违规说明',
dataIndex: 'violationDesc',
key: 'violationDesc',
align: 'center'
}
];
export default benefitEstablishmentColumns;

View File

@@ -0,0 +1,482 @@
import table9ExtraColumns from './table9ExtraColumns';
export const tableConfigs = {
// 审计内容1表格配置
auditContent1: {
type: 'auditContent1',
title: '贯彻决策部署情况',
options: [
// { title: '贯彻决策部署', value: 'default1', columns: () => import('./table1Columns').then(m => m.default1Columns) },
{
title: '领导班子名单',
value: 'leaderList',
columns: () =>
import('./table1Columns').then((m) => m.leaderListColumns)
},
{
title: '决策支出表',
value: 'expense',
columns: () => import('./table1Columns').then((m) => m.expenseColumns)
},
{
title: '八项规定',
value: 'eightReg',
columns: () => import('./table1Columns').then((m) => m.eightRegColumns)
}
],
// 接口映射
interfaceMap: {
default1: '/api/ai/auditContent1/generateDefault1Table',
leaderList: '/api/ai/auditContent1/generateLeaderListTable',
expense: '/api/ai/auditContent1/generateExpenseTable',
eightReg: '/api/ai/auditContent1/generateEightRegTable'
}
},
// 审计内容2表格配置
auditContent2: {
type: 'auditContent2',
title: '单位发展战略执行',
options: [
{
title: '单位发展战略执行',
value: 'strategyAudit',
columns: () =>
import('./table2Columns').then((m) => m.strategyAuditColumns)
}
],
interfaceMap: {
strategyAudit: '/api/ai/auditContent2/generateStrategyAuditTable'
}
},
// 审计内容3表格配置
auditContent3: {
type: 'auditContent3',
title: '重大经济决策调查',
options: [
{
title: '重大经济决策调查表',
value: 'decisionTable',
columns: () =>
import('./table3Columns').then((m) => m.decisionTableColumns)
},
{
title: '三重一大',
value: 'tripleOne',
columns: () => import('./table3Columns').then((m) => m.tripleOneColumns)
}
],
interfaceMap: {
tripleOne: '/api/ai/auditContent3/generateTripleOneTable',
decisionTable: '/api/ai/auditContent3/generateDecisionTable'
}
},
// 审计内容4表格配置
auditContent4: {
type: 'auditContent4',
title: '目标完成情况',
options: [
{
title: '目标责任完成情况表',
value: 'target',
columns: () => import('./table4Columns').then((m) => m.columns0)
}
],
interfaceMap: {
target: '/api/ai/auditContent4/generateTargetTable'
}
},
// 审计内容5表格配置
auditContent5: {
type: 'auditContent5',
title: '财务管理情况',
options: [
{
title: '预算管理审计',
value: 'budgetManage',
columns: () =>
import('./table5Columns').then((m) => m.budgetManageColumns)
},
{
title: '预算执行情况审计',
value: 'budgetExecution',
columns: () =>
import('./table5Columns').then((m) => m.budgetExecutionColumns)
}
],
interfaceMap: {
budgetManage: '/api/ai/auditContent5/generateBudgetManageTable',
budgetExecution: '/api/ai/auditContent5/generateBudgetExecutionTable'
}
},
// 审计内容6表格配置
auditContent6: {
type: 'auditContent6',
title: '国资管理情况',
options: [
{
title: '国有资产管理审计',
value: 'assets',
columns: () =>
import('./table6Columns').then((m) => m.stateAssetsManageColumns)
}
],
interfaceMap: {
assets: '/api/ai/auditContent6/generateAssetsTable'
}
},
auditContent7: {
type: 'auditContent7',
title: '重大投资情况',
options: [
{
title: '重大投资情况审计',
value: 'investmentSituation',
columns: () =>
import('./table7Columns').then((m) => m.investmentSituationColumns)
}
],
interfaceMap: {
investmentSituation:
'/api/ai/auditContent7/generateInvestmentSituationTable'
}
},
auditContent8: {
type: 'auditContent8',
title: '治理结构与内部控制',
options: [
{
title: '内部控制测试',
value: 'internalControl',
columns: () =>
import('./table8Columns').then((m) => m.internalControlTestColumns)
}
],
interfaceMap: {
internalControl: '/api/ai/auditContent8/generateInternalControlTable'
}
},
auditContent9: {
type: 'auditContent9',
title: '人员编制管理',
options: [
{
title: '人员编制管理审计',
value: 'personnel',
columns: () =>
import('./table9Columns').then((m) => m.personnelEstablishmentColumns)
}
],
extraTableTitle: '福利费超范围支出明细清单',
extraColumns: table9ExtraColumns,
interfaceMap: {
personnel: '/api/ai/auditContent9/generatePersonnelTable'
}
},
auditContent10: {
type: 'auditContent10',
title: '廉政情况',
options: [
{
title: '党风廉政建设责任制审计',
value: 'partyConduct',
columns: () =>
import('./table10Columns').then((m) => m.partyConductColumns)
}
],
interfaceMap: {
partyConduct: '/api/ai/auditContent10/generatePartyConductTable'
}
},
auditContent11: {
type: 'auditContent11',
title: '历史审计问题整改',
options: [
{
title: '历史审计问题整改',
value: 'history',
columns: () =>
import('./table11Columns').then((m) => m.auditHistoryColumns)
}
],
interfaceMap: {
history: '/api/ai/auditContent11/generateHistoryTable'
}
}
};
// 获取表格配置
export function getTableConfig(sectionIndex: number) {
const configKeys = Object.keys(tableConfigs);
if (sectionIndex >= 0 && sectionIndex < configKeys.length) {
return tableConfigs[configKeys[sectionIndex]];
}
return null;
}
// 获取所有表格配置
export function getAllTableConfigs() {
return tableConfigs;
}
// 通过接口名称查找表格配置
export function findTableConfigByInterface(interfaceName: string) {
for (const [key, config] of Object.entries(tableConfigs)) {
for (const [tableValue, tableInterface] of Object.entries(
config.interfaceMap || {}
)) {
if (tableInterface === interfaceName) {
return {
sectionType: key,
tableValue,
config
};
}
}
}
return null;
}
// 解析workPaperIndex字符串为对象数组
function parseWorkPaperIndex(workPaperIndex) {
if (!workPaperIndex || !Array.isArray(workPaperIndex)) return [];
return workPaperIndex.map((item) => {
if (item && typeof item === 'object') {
return {
fileId: item.fileId || item.file_id || '',
fileName: item.fileName || item.file_name || '',
fileUrl: item.fileUrl || item.url || ''
};
}
if (typeof item === 'string') {
const parts = item.split('||');
if (parts.length >= 3) {
return {
fileId: parts[0] || '',
fileName: parts[1] || '',
fileUrl: parts[2] || ''
};
}
}
// 兼容旧格式
return {
fileId: '',
fileName: typeof item === 'string' ? item : '',
fileUrl: ''
};
});
}
// 通用数据映射函数
export function createDataMapper(type: string) {
const mappers = {
default1: (data) =>
data.map((item, index) => ({
key: index,
index: index + 1,
...item,
workPaperIndex: parseWorkPaperIndex(item.workPaperIndex)
})),
leaderList: (data) =>
data.map((item, index) => ({
key: index,
...item,
workPaperIndex: parseWorkPaperIndex(item.workPaperIndex)
})),
expense: (data) =>
data.map((item, index) => ({
key: index,
...item,
finalStatementAmount: formatAmount(item.finalStatementAmount),
initialBudgetAmount: formatAmount(item.initialBudgetAmount),
workPaperIndex: parseWorkPaperIndex(item.workPaperIndex)
})),
eightReg: (data) =>
data.map((item, index) => ({
key: index,
...item,
workPaperIndex: parseWorkPaperIndex(item.workPaperIndex)
})),
strategyAudit: (data) =>
data.map((item, index) => ({
key: index,
index: index + 1,
...item,
workPaperIndex: parseWorkPaperIndex(item.workPaperIndex)
})),
tripleOne: (data) =>
data.map((item, index) => ({
key: index,
...item,
workPaperIndex: parseWorkPaperIndex(item.workPaperIndex)
})),
decisionTable: (data) =>
data.map((item, index) => ({
key: index,
index: index + 1,
goods: item.executionEffect?.good || item.goods || '否',
normal: item.executionEffect?.normal || item.normal || '否',
bad: item.executionEffect?.bad || item.bad || '否',
...item,
workPaperIndex: parseWorkPaperIndex(item.workPaperIndex)
})),
budgetManage: (data) =>
data.map((item, index) => ({
key: index,
index: index + 1,
...item,
budgetSubject: item.budgetSubject || '-',
indicatorSource: item.indicatorSource,
total: formatAmount(item.indicatorSourceTotal),
lastYearBalance: formatAmount(item.indicatorSourceLastYearBalance),
initialBudget: formatAmount(item.indicatorSourceInitialBudget),
additionalBudget: formatAmount(item.indicatorSourceAdditionalBudget),
indicatorUseTotal: formatAmount(item.indicatorUseTotal),
appropriationSubtotal: formatAmount(
item.indicatorUseAppropriationSubtotal
),
appropriation: formatAmount(item.indicatorUseAppropriation),
salaryPayment: formatAmount(item.indicatorUseSalaryPayment),
govProcurement: formatAmount(item.indicatorUseGovProcurement),
indicatorBalance: formatAmount(item.indicatorBalance),
workPaperIndex: parseWorkPaperIndex(item.workPaperIndex)
})),
investmentSituation: (data) =>
data.map((item, index) => ({
key: index,
index: index + 1,
category: item.category || '未分类',
auditContent: item.auditContent || item.content || '',
checkEvidence: item.checkEvidence || item.evidence || '',
testResult: item.testResult || '待检查',
...item,
workPaperIndex: parseWorkPaperIndex(item.workPaperIndex)
})),
personnel: (data) => {
const mainData = data.map((item, index) => {
const { ext, ...rest } = item;
return {
key: index,
index: item.index || index + 1,
...rest,
workPaperIndex: parseWorkPaperIndex(item.workPaperIndex)
};
});
const extraData = data.reduce((acc, item) => {
if (item.ext && Array.isArray(item.ext)) {
return [...acc, ...item.ext];
}
return acc;
}, []);
return {
mainData: mainData,
extraData: extraData.map((item, idx) => ({
key: idx,
...item,
index: item.index || idx + 1
}))
};
},
// 其他类型的映射...
default: (data) =>
data.map((item, index) => ({
key: index,
index: index + 1,
...item,
workPaperIndex: parseWorkPaperIndex(item.workPaperIndex)
}))
};
return mappers[type] || mappers.default;
}
// 格式化金额
function formatAmount(amount) {
if (!amount) return '0.00';
if (typeof amount === 'string' && amount.includes(',')) return amount;
const num = parseFloat(amount);
return isNaN(num)
? '0.00'
: num.toLocaleString('zh-CN', {
minimumFractionDigits: 2,
maximumFractionDigits: 2
});
}
// 生成接口映射
export const apiMethodMap = {
// 审计内容1
default1: {
generate: 'generateDefault1Table',
export: 'exportDefault1Table'
},
leaderList: {
generate: 'generateLeaderListTable',
export: 'exportLeaderListTable'
},
expense: { generate: 'generateExpenseTable', export: 'exportExpenseTable' },
eightReg: {
generate: 'generateEightRegTable',
export: 'exportEightRegTable'
},
// 审计内容2
strategyAudit: {
generate: 'generateStrategyAuditTable',
export: 'exportStrategyAuditTable'
},
// 审计内容3
tripleOne: {
generate: 'generateTripleOneTable',
export: 'exportTripleOneTable'
},
decisionTable: {
generate: 'generateDecisionTable',
export: 'exportDecisionTable'
},
// 审计内容4
target: { generate: 'generateTargetTable', export: 'exportTargetTable' },
// 审计内容5
budgetManage: {
generate: 'generateBudgetManageTable',
export: 'exportBudgetManageTable'
},
budgetExecution: {
generate: 'generateBudgetExecutionTable',
export: 'exportBudgetExecutionTable'
},
// 审计内容6
assets: { generate: 'generateAssetsTable', export: 'exportAssetsTable' },
// 审计内容7
investmentSituation: {
generate: 'generateInvestmentSituationTable',
export: 'exportInvestmentSituationTable'
},
// 审计内容8
internalControl: {
generate: 'generateInternalControlTable',
export: 'exportInternalControlTable'
},
// 审计内容9
personnel: {
generate: 'generatePersonnelTable',
export: 'exportPersonnelTable'
},
// 审计内容10
partyConduct: {
generate: 'generatePartyConductTable',
export: 'exportPartyConductTable'
},
// 审计内容11
history: { generate: 'generateHistoryTable', export: 'exportHistoryTable' },
// 默认
default: { generate: 'generateDefaultTable', export: 'exportDefaultTable' }
};
export default {
tableConfigs,
getTableConfig,
getAllTableConfigs,
findTableConfigByInterface,
createDataMapper,
apiMethodMap
};

View File

@@ -49,6 +49,14 @@
v-model:value="form.code"
/>
</a-form-item>
<a-form-item label="案引号" name="caseIndex">
<a-input
allow-clear
style="width: 400px"
placeholder="请输入项目名称"
v-model:value="form.caseIndex"
/>
</a-form-item>
<!-- 行业库 -->
<a-form-item label="行业库" name="bizLibIds">
@@ -355,6 +363,7 @@ const form = reactive<PwlProject>({
id: undefined,
name: undefined,
code: undefined,
caseIndex: undefined,
parentId: undefined,
type: undefined,
image: undefined,

File diff suppressed because it is too large Load Diff

View File

@@ -383,6 +383,14 @@
sorter: true,
align: 'center'
},
{
title: '案引号',
dataIndex: 'caseIndex',
key: 'caseIndex',
width: 240,
sorter: true,
align: 'center'
},
{
title: '项目完成进度',
dataIndex: 'status',