From 59a4f02701ef3b232b9f1d54ba0b29a1e8764704 Mon Sep 17 00:00:00 2001
From: zhouwx <1175765986@qq.com>
Date: 星期三, 03 十二月 2025 14:54:53 +0800
Subject: [PATCH] 修改
---
src/views/system/clauseManage/index.vue | 13 +
src/utils/exportWord.js | 228 +++++++++++++++++++--------
package.json | 2
src/views/system/clauseManage/components/editDialog.vue | 34 +++
src/views/work/selfProblems/internalAudit/innerReviewSheet/components/editDialog.vue | 176 +++++++++++++--------
public/innerReviewExport.docx | 0
src/views/work/selfProblems/internalAudit/innerReviewSheet/index.vue | 17 -
src/components/Tinymce/Tinymce.vue | 2
8 files changed, 315 insertions(+), 157 deletions(-)
diff --git a/package.json b/package.json
index 7391ec2..1ecbd96 100644
--- a/package.json
+++ b/package.json
@@ -25,6 +25,7 @@
"angular-expressions": "^1.5.0",
"axios": "0.27.2",
"buffer": "^6.0.3",
+ "cssom": "^0.5.0",
"docx": "^9.5.1",
"docx-preview": "^0.3.5",
"docx-templates": "^4.14.1",
@@ -37,6 +38,7 @@
"fuse.js": "6.6.2",
"html-docx-js": "^0.3.1",
"html2canvas": "^1.4.1",
+ "htmlparser2": "^10.0.0",
"js-base64": "^3.7.5",
"js-cookie": "3.0.1",
"jsdom": "^27.0.0",
diff --git a/public/innerReviewExport.docx b/public/innerReviewExport.docx
index 032e0e9..a6883d3 100644
--- a/public/innerReviewExport.docx
+++ b/public/innerReviewExport.docx
Binary files differ
diff --git a/src/components/Tinymce/Tinymce.vue b/src/components/Tinymce/Tinymce.vue
index fef35bd..99d9735 100644
--- a/src/components/Tinymce/Tinymce.vue
+++ b/src/components/Tinymce/Tinymce.vue
@@ -85,7 +85,7 @@
fontsize_formats: "8pt 10pt 12pt 13pt 14pt 18pt 24pt 36pt",
// 字体样式应用到文本时使用 <span> 而非 <font>
- inline_styles: true,
+ // inline_styles: true,
images_upload_handler: async (blobInfo, success, failure) => {
const formData = new FormData(); // 和后端协商后用formData格式进行传参
formData.append("file", blobInfo.blob());// 传递的参数
diff --git a/src/utils/exportWord.js b/src/utils/exportWord.js
index 53b0013..584f673 100644
--- a/src/utils/exportWord.js
+++ b/src/utils/exportWord.js
@@ -1,22 +1,22 @@
-//引入工具
+// 引入工具(已修正 htmlparser2 导入)
import PizZip from 'pizzip';
import Docxtemplater from 'docxtemplater';
import JSZipUtils from 'jszip-utils';
import { saveAs } from 'file-saver';
-import ImageModule from 'docxtemplater-image-module-free'; // 新增:图片处理模
+import ImageModule from 'docxtemplater-image-module-free';
+import { Parser } from 'htmlparser2';
+import CSSOM from 'cssom';
-// 加载 .docx 模板文件
+// 加载 .docx 模板文件(不变)
function loadFile(url, callback) {
JSZipUtils.getBinaryContent(url, callback);
}
-// 下载生成的文档
-export function download(file, name) {
+// 下载生成的文档(不变)
+export function download(file, name) { }
-}
-// 辅助函数:将 base64 图片转为 Uint8Array(图片模块需要此格式)
+// 辅助函数:base64 转 Uint8Array(不变)
function base64ToUint8Array(base64) {
- // 去掉 base64 前缀(如 "data:image/png;base64,")
const base64WithoutPrefix = base64.replace(/^data:image\/\w+;base64,/, '');
const binaryString = atob(base64WithoutPrefix);
const length = binaryString.length;
@@ -27,24 +27,147 @@
return uint8Array;
}
+// -------------------------- 富文本处理核心函数(不变) --------------------------
+function getFontSizeFromStyle(styleStr) {
+ if (!styleStr) return 12;
+ try {
+ const style = CSSOM.parse(`.temp { ${styleStr} }`).cssRules[0].style;
+ const fontSize = style.getPropertyValue('font-size');
+ if (!fontSize) return 12;
+ const sizeNum = parseInt(fontSize.replace(/[^\d]/g, ''), 10);
+ return isNaN(sizeNum) ? 12 : sizeNum;
+ } catch (e) {
+ return 12;
+ }
+}
-// 生成并下载 Word 文档(templatePath是word文档模版地址,data是对应的数据)
-export function generateWordDocument(templatePath, data, name) {
- loadFile(templatePath, function (error, content) {
- if (error) {
- throw error
- return;
+function htmlToDocxXml(html) {
+ let xml = '';
+ let currentFontSize = 12;
+
+ const entityMap = {
+ ' ': ' ',
+ '<': '<',
+ '>': '>',
+ '&': '&',
+ '"': '"',
+ ''': "'"
+ };
+
+ const parser = new Parser({
+ onopentag: (name, attributes) => {
+
+ switch (name) {
+ case 'p':
+ xml += '<w:p><w:r>';
+ break;
+ case 'span':
+ const fontSize = getFontSizeFromStyle(attributes.style);
+ currentFontSize = fontSize;
+ const szVal = currentFontSize * 2;
+ xml += `<w:rPr><w:sz w:val="${szVal}"/><w:szCs w:val="${szVal}"/></w:rPr>`;
+ break;
+ case 'b':
+ case 'strong':
+ xml += '<w:rPr><w:b/></w:rPr>';
+ break;
+ case 'br':
+ xml += '<w:br/>';
+ break;
}
+ },
+ ontext: (text) => {
+ const processedText = text
+ .replace(/ |<|>|&|"|'/g, match => entityMap[match])
+ .replace(/\n/g, '<w:br/>');
+ xml += `<w:t>${processedText}</w:t>`;
+ },
+ onclosetag: (name) => {
+ switch (name) {
+ case 'p':
+ xml += '</w:r></w:p>';
+ currentFontSize = 12;
+ break;
+ case 'span':
+ case 'b':
+ case 'strong':
+ xml += '</w:rPr>';
+ break;
+ }
+ }
+ }, { decodeEntities: true });
- try {
- // 新版创建解析器的正确方式(无需 import AngularParser)
- const parser = (tag, _variable) => {
+ parser.write(html);
+ parser.end();
+ return xml;
+}
+
+function processRichTextData(data, richTextFields = []) {
+ const process = (obj) => {
+ if (typeof obj !== 'object' || obj === null) return obj;
+ if (Array.isArray(obj)) {
+ return obj.map(item => process(item));
+ }
+ const processedObj = { ...obj };
+ for (const key in processedObj) {
+ if (processedObj.hasOwnProperty(key)) {
+ if (richTextFields.includes(key) && typeof processedObj[key] === 'string') {
+ const filteredHtml = processedObj[key].replace(/<p>\s*( )?\s*<\/p>/g, '');
+ processedObj[key] = htmlToDocxXml(filteredHtml);
+ } else {
+ processedObj[key] = process(processedObj[key]);
+ }
+ }
+ }
+ return processedObj;
+ };
+ return process(data);
+}
+
+// -------------------------- 核心:生成 Word 文档(修正构造函数配置) --------------------------
+export function generateWordDocument(templatePath, data, name, richTextFields = []) {
+ loadFile(templatePath, function (error, content) {
+ if (error) {
+ console.error('加载模板失败:', error);
+ return;
+ }
+
+ try {
+
+ const processedData = processRichTextData(data, richTextFields);
+
+ // 图片处理模块(不变)
+ const imageModule = new ImageModule({
+ getImage: function (tagValue, tagName) {
+ return base64ToUint8Array(tagValue);
+ },
+ getSize: function (tagValue, tagName) {
+ switch (tagName) {
+ case 'avatar':
+ return [200, 200];
+ case 'coverImg':
+ return [600, 300];
+ default:
+ return [80, 130];
+ }
+ }
+ });
+
+ // 关键修正:将 parser 直接传入构造函数 options,删除 setOptions()
+ const zip = new PizZip(content);
+ const doc = new Docxtemplater(zip, {
+ paragraphLoop: true,
+ linebreaks: true,
+ raw: true, // 富文本核心:允许插入原始 XML
+ modules: [imageModule], // 图片模块
+ nullGetter: () => '', // 空值处理
+ // 直接在这里传入 parser 配置(无需 setOptions())
+ parser: (tag, _variable) => {
return {
get(scope) {
if (scope[tag] !== undefined) {
return scope[tag] || '';
}
- // 处理特殊变量(如 $first)
if (tag.startsWith('$')) {
const varName = tag.slice(1);
return scope[varName] || '';
@@ -52,61 +175,26 @@
return '';
}
};
- };
- // 1. 配置图片处理规则(核心)
- const imageModule = new ImageModule({
- // 获取图片:根据传入的图片数据(base64)转为模块需要的格式
- getImage: function (tagValue, tagName) {
- // tagValue:data 中对应图片键的值(必须是 base64 字符串)
- // tagName:图片占位符的键名(如 "avatar")
- return base64ToUint8Array(tagValue);
- },
- // 设置图片尺寸:返回 [宽度, 高度](单位:px),可动态调整
- getSize: function (tagValue, tagName) {
+ }
+ });
- // 示例:根据不同的图片键,返回不同尺寸
- switch (tagName) {
- case 'avatar': // 头像:200x200
- return [200, 200];
- case 'coverImg': // 封面图:600x300
- return [600, 300];
- default: // 默认尺寸:400x300
- return [80, 130];
- }
- }
- });
- // 加载模板文件内容到 PizZip
- const zip = new PizZip(content);
- const doc = new Docxtemplater(zip, {
- paragraphLoop: true,
- linebreaks: true,
- modules: [imageModule] // 关键:注入图片模块
- });
+ // 删除这一行!!!v4 构造函数已包含 parser,无需手动 setOptions
+ // doc.setOptions({ parser });
- // const parser = new AngularParser();
- // doc.setOptions({ parser });
+ // 注入数据并渲染(不变)
+ doc.setData(processedData);
+ doc.render();
+ const fileWord = doc.getZip().generate({
+ type: 'blob',
+ mimeType: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
+ });
- // 设置模板中的占位符数据
- doc.setData(data);
+ saveAs(fileWord, name);
+ console.log('导出成功!');
- // 渲染文档
- doc.render();
-
- // 生成最终的文档 Blob
- const fileWord = doc.getZip().generate({
- type: 'blob',
- mimeType: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
- });
-
- saveAs(fileWord, name);
-
- // // 返回生成的文档 Blob
- // resolve(fileWord);
- } catch (error) {
- console.error('Error rendering document:', error);
- throw error
- }
- });
-
+ } catch (error) {
+ console.error('生成文档失败:', error);
+ }
+ });
}
diff --git a/src/views/system/clauseManage/components/editDialog.vue b/src/views/system/clauseManage/components/editDialog.vue
index 8cb1680..b514f35 100644
--- a/src/views/system/clauseManage/components/editDialog.vue
+++ b/src/views/system/clauseManage/components/editDialog.vue
@@ -15,9 +15,20 @@
<el-form-item label="条款内容:" prop="name">
<el-input v-model.trim="state.form.name" :disabled="state.title =='查看'" placeholder="条款内容"></el-input>
</el-form-item>
- <el-form-item label="审核要点:" prop="points">
- <el-input v-model.trim="state.form.points" :disabled="state.title =='查看'" placeholder="审核要点"></el-input>
+ <el-form-item label="审核要点:" v-if="showEditor" >
+ <t-editor style="width: 500px" ref="myEditor" :toolbar="toolbar"
+ :value="state.form.points"></t-editor>
</el-form-item>
+ <el-form-item label="审核要点:" v-else>
+ <div class="ql-container ql-snow" style="height: 500px;width: 100%;margin-top: 10px;">
+ <div class="ql-editor">
+ <div class="reviewTable" v-html="state.form.points" ></div>
+ </div>
+ </div>
+ </el-form-item>
+<!-- <el-form-item label="审核要点:" prop="points">-->
+<!-- <el-input v-model.trim="state.form.points" :disabled="state.title =='查看'" placeholder="审核要点"></el-input>-->
+<!-- </el-form-item>-->
</el-form>
<template #footer v-if="state.title !='查看'">
<span class="dialog-footer">
@@ -35,10 +46,13 @@
import {Base64} from "js-base64"
import {getCompany} from "@/api/onlineEducation/company";
import {updateInfoPlatforms, updateSysClause} from "@/api/staffManage/staff";
+import TEditor from "@/components/Tinymce/Tinymce.vue";
const emit = defineEmits(["getList"]);
const dialogVisible = ref(false)
const superRef = ref()
+const toolbar = ref('fontsizeselect | undo redo')
+const showEditor = ref(true);
const state = reactive({
title: '',
form: {
@@ -51,7 +65,7 @@
formRules:{
clauseNum: [{ required: true, message: '请输入条款编码', trigger: 'blur' }],
name: [{ required: true, message: '请输入条款内容', trigger: 'blur' }],
- points: [{ required: true, message: '请输入审核要点', trigger: 'blur' }],
+ // points: [{ required: true, message: '请输入审核要点', trigger: 'blur' }],
}
})
onMounted(() => {
@@ -61,6 +75,7 @@
const openDialog = async (type, value,companyId) => {
state.title = type === 'add' ? '新增' : type ==='edit' ? '编辑' : '查看'
state.form.companyId = companyId
+ showEditor.value = false
if(state.title == '编辑'||state.title == '查看'){
Object.keys(state.form).forEach(key => {
if (key in value) {
@@ -68,11 +83,19 @@
}
})
}
+ if (state.title === '查看') {
+ showEditor.value = false
+
+ }
+ if (type === 'edit' || type === 'add') {
+ showEditor.value = true;
+ }
dialogVisible.value = true
}
const onSubmit = async () => {
+ state.form.points = tinyMCE.activeEditor.getContent();
const valid = await superRef.value.validate();
if(valid){
let data = {}
@@ -80,7 +103,8 @@
data = {
clauseNum: state.form.clauseNum,
name: state.form.name,
- companyId: state.form.companyId
+ companyId: state.form.companyId,
+ points:state.form.points
}
}else{
data = state.form
@@ -89,6 +113,7 @@
if(res.code == 200){
ElMessage.success(res.message)
emit('getList')
+ showEditor.value = false
handleClose()
dialogVisible.value = false;
}else{
@@ -106,6 +131,7 @@
companyId: null,
points:''
}
+ showEditor.value = false
superRef.value.clearValidate();
superRef.value.resetFields()
dialogVisible.value = false;
diff --git a/src/views/system/clauseManage/index.vue b/src/views/system/clauseManage/index.vue
index caa2eaa..2c86f35 100644
--- a/src/views/system/clauseManage/index.vue
+++ b/src/views/system/clauseManage/index.vue
@@ -30,10 +30,15 @@
<!-- 表格数据 -->
<el-table v-loading="loading" :data="dataList" :border="true">
<el-table-column label="序号" type="index" align="center" width="80"/>
- <el-table-column label="条款编号" prop="clauseNum" align="center"/>
- <el-table-column label="条款内容" prop="name" align="center"/>
- <el-table-column label="审核要点" prop="points" align="center"/>
- <el-table-column label="操作" align="center" class-name="small-padding fixed-width" >
+ <el-table-column label="条款编号" prop="clauseNum" align="center" width="90"/>
+ <el-table-column label="条款内容" prop="name" align="center" width="150"/>
+<!-- <el-table-column label="审核要点" prop="points" align="center"/>-->
+ <el-table-column label="审核要点" prop="points" align="center" >
+ <template #default="scope">
+ <div v-html="scope.row.points" ></div>
+ </template>
+ </el-table-column>
+ <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="180">
<template #default="scope">
<el-button link type="primary" @click="openDialog('view',scope.row)">查看</el-button>
<el-button link type="primary" @click="openDialog('edit',scope.row)" v-hasPermi="['clauseManage:edit']">编辑</el-button>
diff --git a/src/views/work/selfProblems/internalAudit/innerReviewSheet/components/editDialog.vue b/src/views/work/selfProblems/internalAudit/innerReviewSheet/components/editDialog.vue
index 2d2c883..80cd0bc 100644
--- a/src/views/work/selfProblems/internalAudit/innerReviewSheet/components/editDialog.vue
+++ b/src/views/work/selfProblems/internalAudit/innerReviewSheet/components/editDialog.vue
@@ -3,7 +3,7 @@
<el-dialog
v-model="dialogVisible"
:title="state.title"
- width="950px"
+ width="1200px"
:before-close="handleClose"
:close-on-press-escape="false"
:close-on-click-modal="false"
@@ -85,54 +85,67 @@
</div>
<el-table style="margin-top: 15px;margin-bottom: 20px" :data="state.form.checkCatalogues" :border="true">
<el-table-column label="适用条款" align="center">
- <el-table-column label="体系标准款项" prop="number" align="center"></el-table-column>
- <el-table-column label="标题" prop="mess" align="center"></el-table-column>
+ <el-table-column label="体系标准款项" prop="number" align="center" width="110"></el-table-column>
+ <el-table-column label="标题" prop="mess" align="center" width="150"></el-table-column>
</el-table-column>
- <el-table-column label="审核要点" prop="pointKey" align="center" width="180">
+ <el-table-column label="审核要点" prop="pointKey" align="left" header-align="center">
<template #default="{row,$index}">
- <div v-for="(i,index) in row.checkContents" :key="index">
- <el-form-item :prop="'checkCatalogues.' + '[' + $index + '].' +'checkContents.' + '[' + index + ']' + '.pointKey'" :rules="state.formRules.pointKey">
- <el-input style="margin-top: 10px" :disabled="state.title === '查看'" type="textarea" :rows="4" v-model="i.pointKey" placeholder="请输入"></el-input>
- </el-form-item>
- </div>
+ <el-form-item :prop="'checkCatalogues.' + '[' + $index + ']' + '.pointKey'" :rules="state.formRules.pointKey">
+ <div v-if="showEditor" >
+ <t-editor style="width: 380px;" :height="250" ref="myEditor" :toolbar="toolbar"
+ :value="row.pointKey" @input="inputPonit($event,$index)"></t-editor>
+ </div>
+ <div v-else >
+ <div class="reviewTable" v-html="row.pointKey" ></div>
+ </div>
+ </el-form-item>
</template>
</el-table-column>
- <el-table-column label="审核发现" prop="find" align="center" width="300">
+ <el-table-column label="审核发现" prop="find" align="left" header-align="center">
<template #default="{row,$index}">
- <div v-for="(i,index) in row.checkContents" :key="index">
- <el-form-item :prop="'checkCatalogues.' + '[' + $index + '].' +'checkContents.' + '[' + index + ']' + '.find'" :rules="state.formRules.find">
- <el-input style="margin-top: 10px" :disabled="state.title === '查看'" type="textarea" :rows="4" v-model="i.find" placeholder="请输入"></el-input>
- </el-form-item>
- </div>
+ <el-form-item :prop="'checkCatalogues.' + '[' + $index + ']' + '.find'" :rules="state.formRules.find">
+ <div v-if="showEditor" >
+ <t-editor style="width: 380px;" :height="250" ref="myEditor" :toolbar="toolbar"
+ :value="row.find" @input="inputFind($event,$index)"></t-editor>
+ </div>
+ <div v-else >
+ <div class="reviewTable" v-html="row.find" ></div>
+ </div>
+ </el-form-item>
</template>
</el-table-column>
<el-table-column label="审核结果" align="center" >
- <el-table-column label="符合" prop="conform" align="center" width="70">
- <template #default="{row,$index}">
- <div v-for="(i,index) in row.checkContents" :key="index">
- <el-form-item :prop="'checkCatalogues.' + '[' + $index + '].' +'checkContents.' + '[' + index + ']' + '.result'" :rules="state.formRules.result">
- <el-radio
- style="height: 100px"
- v-model="i.result"
- :label="1"
- :disabled="state.title === '查看'"
- > </el-radio>
- </el-form-item>
- </div>
- </template>
- </el-table-column>
+<!-- <el-table-column label="符合" prop="conform" align="center" width="70">-->
+<!-- <template #default="{row,$index}">-->
+<!-- <div v-for="(i,index) in row.checkContents" :key="index">-->
+<!-- <el-form-item :prop="'checkCatalogues.' + '[' + $index + '].' +'checkContents.' + '[' + index + ']' + '.result'" :rules="state.formRules.result">-->
+<!-- <el-radio-->
+<!-- style="height: 100px"-->
+<!-- v-model="i.result"-->
+<!-- :label="1"-->
+<!-- :disabled="state.title === '查看'"-->
+<!-- > </el-radio>-->
+<!-- </el-form-item>-->
+<!-- </div>-->
+<!-- </template>-->
+<!-- </el-table-column>-->
<el-table-column label="不符合" prop="minor" align="center" width="90">
<template #default="{row,$index}">
- <div v-for="(i,index) in row.checkContents" :key="index">
- <el-form-item :prop="'checkCatalogues.' + '[' + $index + '].' +'checkContents.' + '[' + index + ']' + '.result'" :rules="state.formRules.result">
- <el-radio
+<!-- <div v-for="(i,index) in row.checkContents" :key="index">-->
+ <el-form-item :prop="'checkCatalogues.' + '[' + $index + ']' + '.result'" :rules="state.formRules.result">
+ <el-checkbox
style="height: 100px"
- v-model="i.result"
- :label="2"
+ v-model="row.result"
:disabled="state.title === '查看'"
- ></el-radio>
+ />
+<!-- <el-radio-->
+<!-- style="height: 100px"-->
+<!-- v-model="row.result"-->
+<!-- :label="2"-->
+<!-- :disabled="state.title === '查看'"-->
+<!-- ></el-radio>-->
</el-form-item>
- </div>
+<!-- </div>-->
</template>
</el-table-column>
<!-- <el-table-column label="严重不符合" prop="serious" align="center" width="90">-->
@@ -150,12 +163,12 @@
<!-- </template>-->
<!-- </el-table-column>-->
</el-table-column>
- <el-table-column label="操作" align="center" width="120" v-if="state.title !== '查看'" >
- <template #default="scope">
- <el-button link type="primary" @click="addObject(scope.row,scope.$index)" >添加</el-button>
- <el-button link type="danger" @click="delObject(scope.row,scope.$index)" >删除</el-button>
- </template>
- </el-table-column>
+<!-- <el-table-column label="操作" align="center" width="120" v-if="state.title !== '查看'" >-->
+<!-- <template #default="scope">-->
+<!-- <el-button link type="primary" @click="addObject(scope.row,scope.$index)" >添加</el-button>-->
+<!-- <el-button link type="danger" @click="delObject(scope.row,scope.$index)" >删除</el-button>-->
+<!-- </template>-->
+<!-- </el-table-column>-->
</el-table>
</el-col>
@@ -221,11 +234,16 @@
import {getCatalogue} from "@/api/qualityManage/catalog";
import Cookies from "js-cookie";
import {getUser} from "@/api/onlineEducation/user";
+import TEditor from "@/components/Tinymce/Tinymce.vue";
const emit = defineEmits(["getList"]);
const dialogVisible = ref(false)
const superRef = ref()
const termRef = ref()
+const myEditor = ref();
+const isReview = ref(false);
+const showEditor = ref(true);
+const toolbar = ref('fontsizeselect | undo redo')
const checkTime = ref([])
const validateFieldsReview = (rule, value, callback) =>{
if (checkTime.value && checkTime.value.length >0 ) {
@@ -259,8 +277,8 @@
// checkTime: [{ required: true, message: '请选择内审时间', trigger: 'blur' }],
startTime: [{ required: true,validator: validateFieldsReview, trigger: 'blur' }],//审核时间
checkRecord: [{ required: true, message: '请填写检查记录', trigger: 'blur' }],
- pointKey: [{ required: true, message: '', trigger: 'blur' }],
- find: [{ required: true, message: '', trigger: 'blur' }],
+ pointKey: [{ required: true, message: '请输入审核要点', trigger: 'blur' }],
+ find: [{ required: true, message: '请输入审核发现', trigger: 'blur' }],
result: [{ required: true, message: '', trigger: 'blur' }],
@@ -293,6 +311,7 @@
state.form.companyId = value.companyId
state.companyList = companyList
}
+ showEditor.value = false
state.title = type === 'add' ? '新增' : type ==='edit' ? '编辑' : '查看'
if(state.title == '编辑'||state.title == '查看'){
Object.keys(state.form).forEach(key => {
@@ -301,12 +320,20 @@
}
})
checkTime.value = [state.form.startTime,state.form.endTime]
- console.log('1',state.form)
- state.form.checkCatalogues.forEach(item => {
- if(item.checkContents && item.checkContents.length == 0){
- item.checkContents.push({})
+ state.form.checkCatalogues = state.form.checkCatalogues.map(item => {
+ return {
+ ...item,
+ result: item.result == 2 ? true:false
}
})
+ console.log('1',state.form)
+ }
+ if (state.title == '查看') {
+ showEditor.value = false
+
+ }
+ if (type === 'edit' || type === 'add') {
+ showEditor.value = true;
}
await getUserList()
await getDepartList(state.form.companyId)
@@ -355,6 +382,13 @@
}
const onSubmit = async () => {
+ console.log('f',state.form)
+ state.form.checkCatalogues = state.form.checkCatalogues.map(item => {
+ return {
+ ...item,
+ result: item.result ? 2:1
+ }
+ })
state.form.startTime = checkTime.value[0]
state.form.endTime = checkTime.value[1]
const valid = await superRef.value.validate();
@@ -478,24 +512,24 @@
state.showDialog = true
// state.form.checkCatalogues.push({checkContents: [{}]})
}
-const addObject = (val,itemIndex) => {
- state.form.checkCatalogues.forEach((item,index) => {
- if(index == itemIndex){
- item.checkContents.push({})
- }
- })
-}
-const delObject = (val,itemIndex) => {
- state.form.checkCatalogues.forEach((item,index) => {
- if(index == itemIndex){
- if(item.checkContents.length == 1){
- state.form.checkCatalogues.splice(index,1)
- }else {
- item.checkContents.pop()
- }
- }
- })
-}
+// const addObject = (val,itemIndex) => {
+// state.form.checkCatalogues.forEach((item,index) => {
+// if(index == itemIndex){
+// item.checkContents.push({})
+// }
+// })
+// }
+// const delObject = (val,itemIndex) => {
+// state.form.checkCatalogues.forEach((item,index) => {
+// if(index == itemIndex){
+// if(item.checkContents.length == 1){
+// state.form.checkCatalogues.splice(index,1)
+// }else {
+// item.checkContents.pop()
+// }
+// }
+// })
+// }
const handleCloseDialog = () => {
state.termForm = {
id: null,
@@ -507,9 +541,7 @@
const onSubmitTerm = async () =>{
const valid = await termRef.value.validate();
if(valid){
-
state.form.checkCatalogues.push({
- checkContents: [{}],
catalogueId:state.termForm.id,
number: state.termForm.number,
mess: state.termForm.mess})
@@ -528,6 +560,14 @@
};
+const inputFind = (val,index)=> {
+ state.form.checkCatalogues[index].find = val
+}
+const inputPonit = (val,index)=> {
+ state.form.checkCatalogues[index].pointKey = val
+}
+
+
defineExpose({
openDialog
});
diff --git a/src/views/work/selfProblems/internalAudit/innerReviewSheet/index.vue b/src/views/work/selfProblems/internalAudit/innerReviewSheet/index.vue
index 9250ade..d34adba 100644
--- a/src/views/work/selfProblems/internalAudit/innerReviewSheet/index.vue
+++ b/src/views/work/selfProblems/internalAudit/innerReviewSheet/index.vue
@@ -45,6 +45,7 @@
<el-table-column label="受审核部门" prop="deptName" align="center"></el-table-column>
<el-table-column label="操作" align="center">
<template #default="scope">
+ <el-button link type="primary" @click="openDialog('review',scope.row)">查看</el-button>
<el-button link type="primary" @click="openDialog('edit',scope.row)" v-hasPermi="['innerReviewSheet:list:edit']">编辑</el-button>
<el-button link type="danger" @click="handleDelete(scope.row)" v-hasPermi="['innerReviewSheet:list:del']">删除</el-button>
</template>
@@ -195,20 +196,16 @@
item.tableData = item.checkCatalogues.map((i,index) => {
return{
...i,
- checkContents: i.checkContents.map((q,qindex) => {
- return{
- ...q,
- first: qindex == 0,
- well: q.result == 1,
- fine: q.result == 2,
- bad: q.result == 3,
- }
- })
+ well: i.result == 1,
+ fine: i.result == 2,
+ bad: i.result == 3,
+
}
})
+ console.log('11',item.tableData)
item.checkTime = item.startTime +'-'+item.endTime.slice(11)
try {
- generateWordDocument(templatePath.value, item, item.year+'年'+item.deptName+'_内审检查表.docx');
+ generateWordDocument(templatePath.value, item, item.year+'年'+item.deptName+'_内审检查表.docx',['pointKey', 'find']);
} catch (error){
ElMessage({
type: 'warning',
--
Gitblit v1.9.2