This commit is contained in:
2025-10-24 22:12:54 +08:00
parent d4ff2a9423
commit 5e34284eb2
5 changed files with 1567 additions and 1312 deletions

BIN
src/assets/word.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

View File

@@ -15,6 +15,7 @@
:columns="columns"
:customRow="customRow"
:pagination="false"
:selection="selection"
>
<template #toolbar>
<div class="ele-cell">
@@ -33,6 +34,19 @@
<span>上传视频</span>
</a-button>
</a-upload>
<a-upload
v-else-if="type == 'file'"
:show-upload-list="false"
accept="*"
:customRequest="onUpload"
>
<a-button type="primary" class="ele-btn-icon">
<template #icon>
<UploadOutlined />
</template>
<span>上传文件</span>
</a-button>
</a-upload>
<a-upload
v-else
:show-upload-list="false"
@@ -222,6 +236,7 @@
}
]);
const selection = ref([])
// 表格数据源
const datasource: DatasourceFunction = ({ page, limit, where, orders }) => {
where = {};

View File

@@ -1,5 +1,6 @@
<template>
<a-image-preview-group>
<div style="display: inline">
<a-image-preview-group v-if="type !== 'file'">
<a-space>
<template v-for="(item, index) in data" :key="index">
<div class="image-upload-item" v-if="isImage(item.url)">
@@ -32,7 +33,8 @@
</a-button>
</a-space>
</a-image-preview-group>
<a-button v-else @click="openEdit" type="primary">选择文件</a-button>
</div>
<!-- 选择弹窗 -->
<SelectData
v-model:visible="showEdit"
@@ -44,11 +46,15 @@
</template>
<script lang="ts" setup>
import { PlusOutlined, CloseOutlined, YoutubeOutlined } from '@ant-design/icons-vue';
import {
PlusOutlined,
CloseOutlined,
YoutubeOutlined
} from '@ant-design/icons-vue';
import { ref } from 'vue';
import SelectData from './components/select-data.vue';
import { FileRecord } from '@/api/system/file/model';
import { isImage } from "@/utils/common";
import { isImage } from '@/utils/common';
const props = withDefaults(
defineProps<{

View File

@@ -1,7 +1,7 @@
<!-- 用户编辑弹窗 -->
<template>
<a-drawer
:width="`70%`"
:width="`95%`"
:visible="visible"
:confirm-loading="loading"
:maxable="maxAble"
@@ -138,11 +138,16 @@
:id="`section-${index}`"
class="audit-section"
>
<a-card
:title="`${item.number}、${item.name}`"
style="margin-bottom: 20px"
:bordered="false"
>
<a-card style="margin-bottom: 20px" :bordered="false">
<template #title>
<span class="font-bold">{{ `${item.number}${item.name}` }}</span>
<span class="ml-4 text-gray-400" v-if="item.extra3">{{
table3Title
}}</span>
<span class="ml-4 text-gray-400" v-if="item.file3">
<SelectFile :data="file3List" type="file"/>
</span>
</template>
<template #extra>
<a-button
type="primary"
@@ -155,7 +160,47 @@
AI生成
</a-button>
</template>
<a-table :columns="item.columns" bordered :data-source="item.data"></a-table>
<template v-if="item.extra3">
<div class="mb-2">
<a-space>
<div
class="btn"
:class="[
table3Title === '重大经济决策调查表'
? 'btn-green'
: 'btn-gray'
]"
@click="changeTable3('重大经济决策调查表')"
>重大经济决策调查表</div
>
<div
class="btn"
:class="[
table3Title === '三重一大' ? 'btn-green' : 'btn-gray'
]"
@click="changeTable3('三重一大')"
>三重一大</div
>
</a-space>
</div>
</template>
<a-table :columns="item.columns" bordered :data-source="item.data">
<template #bodyCell="{ column, record }">
<template v-if="column.key === 'action'">
<a-button type="primary" danger>删除</a-button>
</template>
<template v-if="column.key === 'testResult'">
<span class="text-green-400" v-if="record.testResult === '通过'">通过</span>
<span class="text-red-400" v-else>不通过</span>
</template>
<template v-if="column.key === 'fileIndex'">
<div v-for="(item, index) in record.fileIndex" :key="index">
<img src="@/assets/word.png" style="width: 20px; height: 20px" alt="">
<span class="cursor-pointer text-wrap">{{ item }}</span>
</div>
</template>
</template>
</a-table>
<!-- <div v-if="item.description" class="section-description">-->
<!-- {{ item.description }}-->
<!-- </div>-->
@@ -307,17 +352,20 @@
{
title: '会议时间',
dataIndex: 'content',
key: 'content'
key: 'content',
width: 120
},
{
title: '决策事项金额',
dataIndex: 'amount',
key: 'amount'
key: 'amount',
width: 120
},
{
title: '程序程序',
dataIndex: 'progress',
key: 'progress'
key: 'progress',
width: 300
},
{
title: '执行情况(是/否)',
@@ -329,11 +377,11 @@
children: [
{
title: '好',
dataIndex: 'goods',
dataIndex: 'goods'
},
{
title: '一般',
dataIndex: 'normal',
dataIndex: 'normal'
},
{
title: '差',
@@ -354,11 +402,12 @@
const combinedKbIds = ref('');
// 九大审计项目导航配置
const table3Title = ref('重大经济决策调查表');
const navigationItems = ref([
{
number: '一',
name: '审计内容1',
title: '1、审计依据',
title: '',
description: '点击"AI生成"按钮让AI为您生成该部分内容或直接在下方编辑',
placeholder: '请输入审计依据内容...',
content: '',
@@ -371,7 +420,7 @@
{
number: '二',
name: '审计内容2',
title: '2、审计目标',
title: '',
description: '点击"AI生成"按钮让AI为您生成该部分内容或直接在下方编辑',
placeholder: '请输入审计目标内容...',
content: '',
@@ -384,9 +433,11 @@
{
number: '三',
name: '审计内容3',
title: '3、重大经济决策调查表',
title: '重大经济决策调查表',
description: '点击"AI生成"按钮生成重大经济决策调查表数据',
generating: false,
extra3: true,
file3: true,
columns: [
{
title: '序号',
@@ -400,14 +451,14 @@
dataIndex: 'name',
key: 'name',
width: 200,
align: 'center'
},
{
title: '会议时间',
dataIndex: 'meetingTime',
key: 'meetingTime',
width: 120,
align: 'center'
align: 'center',
width: 120
},
{
title: '决策事项金额',
@@ -420,14 +471,14 @@
title: '程序',
dataIndex: 'procedure',
key: 'procedure',
width: 180,
align: 'center',
customRender: ({ text }) => text || '程序未记录'
},
{
title: '执行情况(是/否)',
dataIndex: 'executionStatus',
key: 'executionStatus',
width: 100,
width: 80,
align: 'center'
},
{
@@ -439,7 +490,7 @@
key: 'goods',
width: 60,
align: 'center',
customRender: ({ text }) => text === '是' ? '✅' : ''
customRender: ({ text }) => (text === '是' ? '✅' : '')
},
{
title: '一般',
@@ -447,7 +498,7 @@
key: 'normal',
width: 60,
align: 'center',
customRender: ({ text }) => text === '是' ? '✅' : ''
customRender: ({ text }) => (text === '是' ? '✅' : '')
},
{
title: '差',
@@ -455,9 +506,15 @@
key: 'bad',
width: 60,
align: 'center',
customRender: ({ text }) => text === '是' ? '✅' : ''
customRender: ({ text }) => (text === '是' ? '✅' : '')
}
]
},
{
title: '操作',
key: 'action',
align: 'center',
width: 140
}
],
data: []
@@ -465,7 +522,7 @@
{
number: '四',
name: '审计内容4',
title: '4、被审计单位基本情况',
title: '',
description: '点击"AI生成"按钮让AI为您生成该部分内容或直接在下方编辑',
generating: false,
columns: columns.value
@@ -473,7 +530,7 @@
{
number: '五',
name: '审计内容5',
title: '5、审计内容和重点及审计方法',
title: '',
description: '点击"AI生成"按钮让AI为您生成该部分内容或直接在下方编辑',
generating: false,
columns: [
@@ -560,7 +617,7 @@
{
number: '六',
name: '审计内容6',
title: '6、重要风险的识别及应对',
title: '',
description: '点击"AI生成"按钮让AI为您生成该部分内容或直接在下方编辑',
generating: false,
columns: columns.value
@@ -568,7 +625,7 @@
{
number: '七',
name: '审计内容7',
title: '7、审计技术方法',
title: '',
description: '点击"AI生成"按钮让AI为您生成该部分内容或直接在下方编辑',
placeholder: '请输入审计技术方法内容...',
content: '',
@@ -581,7 +638,7 @@
{
number: '八',
name: '审计内容8',
title: '8、工作步骤与时间安排',
title: '',
description: '点击"AI生成"按钮让AI为您生成该部分内容或直接在下方编辑',
placeholder: '请输入工作步骤与时间安排内容...',
content: '',
@@ -594,7 +651,7 @@
{
number: '九',
name: '审计内容9',
title: '9、审计工作的组织实施',
title: '',
description: '点击"AI生成"按钮让AI为您生成该部分内容或直接在下方编辑',
placeholder: '请输入审计工作的组织实施内容...',
content: '',
@@ -606,6 +663,170 @@
}
]);
const file3List = ref([])
const changeTable3 = (title) => {
table3Title.value = title;
if (title === '三重一大') {
navigationItems.value[2].columns = [
{
title: '',
dataIndex: 'index',
key: 'index',
width: 120,
align: 'center'
},
{
title: '政策内容',
dataIndex: 'content',
key: 'content',
align: 'center'
},
{
title: '集团制度',
dataIndex: 'groupSystem',
key: 'groupSystem',
align: 'center'
},
{
title: '公司制定',
dataIndex: 'companyCustom',
key: 'companyCustom',
align: 'center'
},
{
title: '检查的证据及测试内容',
dataIndex: 'testContent',
key: 'testContent',
align: 'center'
},
{
title: '测试结果',
dataIndex: 'testResult',
key: 'testResult',
align: 'center'
},
{
title: '工作底稿索引',
dataIndex: 'fileIndex',
key: 'fileIndex',
align: 'center',
width: 140,
ellipsis: true,
},
{
title: '操作',
key: 'action',
align: 'center',
width: 100,
}
];
navigationItems.value[2].data = [
{
index: '重大决策',
content: '',
groupSystem: '',
companyCustom: '',
testContent: '',
testResult: '通过',
fileIndex: ['中央部门单位2023年预算执行等情况审计结果.doc']
}
];
} else {
navigationItems.value[2].columns = [
{
title: '序号',
dataIndex: 'index',
key: 'index',
width: 80,
align: 'center'
},
{
title: '重大经济决策事项',
dataIndex: 'name',
key: 'name',
width: 200,
align: 'center'
},
{
title: '会议时间',
dataIndex: 'meetingTime',
key: 'meetingTime',
align: 'center',
width: 120
},
{
title: '决策事项金额',
dataIndex: 'decisionAmount',
key: 'decisionAmount',
width: 120,
align: 'center'
},
{
title: '程序',
dataIndex: 'procedure',
key: 'procedure',
align: 'center',
customRender: ({ text }) => text || '程序未记录'
},
{
title: '执行情况(是/否)',
dataIndex: 'executionStatus',
key: 'executionStatus',
width: 80,
align: 'center'
},
{
title: '执行效果(是否实现决策目标)',
children: [
{
title: '好',
dataIndex: 'goods',
key: 'goods',
width: 60,
align: 'center',
customRender: ({ text }) => (text === '是' ? '✅' : '')
},
{
title: '一般',
dataIndex: 'normal',
key: 'normal',
width: 60,
align: 'center',
customRender: ({ text }) => (text === '是' ? '✅' : '')
},
{
title: '差',
dataIndex: 'bad',
key: 'bad',
width: 60,
align: 'center',
customRender: ({ text }) => (text === '是' ? '✅' : '')
}
]
},
{
title: '操作',
key: 'action',
align: 'center',
width: 140
}
];
navigationItems.value[2].data = [
{
index: 1,
name: '千汇公司废水处理站扩容升级改造项目',
meetingTime: '2024-01-03',
decisionAmount: '190万元',
procedure:
'经专题会议研究并组织外部专家二次评勖审(《2023年第九次总办会会议材料汇总》),形成方案后提交总经理办公会审鈀还户,以记名投票方式全票通过。议案履行了可行性论证、专家咨询、集体讨论和会议决策程序,符台《广西千汇食品有限公司总经理办公会议事规则(试行)》第十条、第十八条关于重大项目投资业务决策程序的要求。',
executionStatus: '是',
goods: '是'
}
];
}
};
const emit = defineEmits<{
(e: 'done'): void;
(e: 'update:visible', visible: boolean): void;
@@ -938,7 +1159,8 @@
section.generating = true;
// 构建history - 将当前已有的数据作为历史记录
const history = section.data && section.data.length > 0
const history =
section.data && section.data.length > 0
? JSON.stringify(section.data, null, 2)
: '';
@@ -991,7 +1213,6 @@
section.suggestion = '';
message.success(`成功生成 ${tableData.length} 条重大经济决策记录`);
} else {
const errorMsg = result.data?.error || result.message || '生成失败';
throw new Error(errorMsg);
@@ -1393,4 +1614,17 @@
right: 30px;
bottom: 30px;
}
.btn {
padding: 5px 10px;
color: white;
border-radius: 999px;
cursor: pointer;
}
.btn-gray {
background-color: #bbbbbb;
}
.btn-green {
background-color: #479b33;
}
</style>

View File

@@ -99,7 +99,7 @@
<div>
<a-space>
<a class="action-btn bg-blue-500" @click="openReport(record)"
>1生成报告</a
>1生成审计方案</a
>
<a class="action-btn bg-green-600" @click="openReportContent(record)">2审计内容</a>
<a class="action-btn bg-red-600" @click="openAuditCheck(record)"
@@ -578,7 +578,7 @@
{
title: '操作',
key: 'action',
width: 220,
width: 260,
fixed: 'right',
align: 'center',
hideInSetting: true