From 3a0d59f4e98862499162e500172b9e4944e9f0ff Mon Sep 17 00:00:00 2001
From: zhouwx <1175765986@qq.com>
Date: 星期二, 30 九月 2025 10:49:57 +0800
Subject: [PATCH] 修改
---
src/api/continuousImprovement/index.js | 34 ++
src/views/work/financialMng/qualityFinancialAnalysis/components/editDialog.vue | 319 +++++++++-----------------
src/api/qualityFinancialAnalysis/index.js | 34 ++
src/views/build/conpanyFunctionConsult/companyInfo/overview/index.vue | 6
src/views/work/qualityManage/continuousImprovement/components/editDialog.vue | 151 +++++-------
src/views/work/qualityManage/continuousImprovement/index.vue | 51 +--
public/continuousImprovementExample.docx | 0
src/views/work/financialMng/qualityFinancialAnalysis/index.vue | 103 ++++---
src/views/build/conpanyFunctionConsult/staffManage/staffPortfolio/index.vue | 6
9 files changed, 332 insertions(+), 372 deletions(-)
diff --git a/public/continuousImprovementExample.docx b/public/continuousImprovementExample.docx
index 0f8c346..01dc886 100644
--- a/public/continuousImprovementExample.docx
+++ b/public/continuousImprovementExample.docx
Binary files differ
diff --git a/src/api/continuousImprovement/index.js b/src/api/continuousImprovement/index.js
new file mode 100644
index 0000000..0b925a1
--- /dev/null
+++ b/src/api/continuousImprovement/index.js
@@ -0,0 +1,34 @@
+import request from "@/utils/request";
+
+export function getInside(params) {
+ return request({
+ url: '/continuous/inside/list',
+ method: 'get',
+ params: params
+ })
+}
+
+
+export function addInside(data) {
+ return request({
+ url: '/continuous/inside/insert',
+ method: 'post',
+ data: data
+ })
+}
+
+export function editInside(params) {
+ return request({
+ url: `/continuous/inside/update`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function delInside(data) {
+ return request({
+ url: `/continuous/inside/deleted?improveId=${data}`,
+ method: 'get'
+ })
+}
+
diff --git a/src/api/qualityFinancialAnalysis/index.js b/src/api/qualityFinancialAnalysis/index.js
new file mode 100644
index 0000000..85e7ab4
--- /dev/null
+++ b/src/api/qualityFinancialAnalysis/index.js
@@ -0,0 +1,34 @@
+import request from "@/utils/request";
+
+export function getEconomy(params) {
+ return request({
+ url: '/quality/economy/list',
+ method: 'get',
+ params: params
+ })
+}
+
+
+export function addEconomy(data) {
+ return request({
+ url: '/quality/economy/insert',
+ method: 'post',
+ data: data
+ })
+}
+
+export function editEconomy(params) {
+ return request({
+ url: `/quality/economy/update`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function delEconomy(data) {
+ return request({
+ url: `/quality/economy/deleted?economyId=${data}`,
+ method: 'get'
+ })
+}
+
diff --git a/src/views/build/conpanyFunctionConsult/companyInfo/overview/index.vue b/src/views/build/conpanyFunctionConsult/companyInfo/overview/index.vue
index 0697b7d..d0b23a7 100644
--- a/src/views/build/conpanyFunctionConsult/companyInfo/overview/index.vue
+++ b/src/views/build/conpanyFunctionConsult/companyInfo/overview/index.vue
@@ -52,7 +52,11 @@
<!-- 表格数据 -->
<el-table v-loading="loading" :data="dataList" :border="true">
<el-table-column type="index" label="序号" width="80" align="center"></el-table-column>
- <el-table-column label="企业名称" prop="companyName" align="center" />
+ <el-table-column label="公司概况" prop="companySummary" align="center" >
+ <template #default="scope">
+ <div v-html="scope.row.companySummary" ></div>
+ </template>
+ </el-table-column>
<el-table-column label="营业执照" prop="fileName" align="center" >
<template #default="scope">
<el-link style="" type="primary" @click="openFile(scope.row.filePath,scope.row.fileName)">{{scope.row.fileName}}</el-link>
diff --git a/src/views/build/conpanyFunctionConsult/staffManage/staffPortfolio/index.vue b/src/views/build/conpanyFunctionConsult/staffManage/staffPortfolio/index.vue
index eb19814..8b3a675 100644
--- a/src/views/build/conpanyFunctionConsult/staffManage/staffPortfolio/index.vue
+++ b/src/views/build/conpanyFunctionConsult/staffManage/staffPortfolio/index.vue
@@ -29,7 +29,11 @@
<!-- 表格数据 -->
<el-table v-loading="loading" :data="dataList" :border="true">
<el-table-column label="序号" type="index" align="center" width="80" />
- <el-table-column label="企业名称" prop="companyName" align="center" />
+ <el-table-column label="员工情况介绍" prop="companyRoster" align="center" >
+ <template #default="scope">
+ <div v-html="scope.row.companyRoster" ></div>
+ </template>
+ </el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" >
<template #default="scope">
<el-button link type="primary" @click="openDialog('view',scope.row)">查看</el-button>
diff --git a/src/views/work/financialMng/qualityFinancialAnalysis/components/editDialog.vue b/src/views/work/financialMng/qualityFinancialAnalysis/components/editDialog.vue
index 7bbd541..7f57be3 100644
--- a/src/views/work/financialMng/qualityFinancialAnalysis/components/editDialog.vue
+++ b/src/views/work/financialMng/qualityFinancialAnalysis/components/editDialog.vue
@@ -49,20 +49,20 @@
</el-row>
<el-row :gutter="24">
<el-col :span="24">
- <el-form-item label="一 、基本情况:" prop="method" >
- <el-input :disabled="title === '查看'" v-model="state.form.method" :rows="4" type="textarea" placeholder=""/>
+ <el-form-item label="一 、基本情况:" prop="basic" >
+ <el-input :disabled="title === '查看'" v-model="state.form.basic" :rows="4" type="textarea" placeholder=""/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="24">
- <el-form-item label="二 、综合分析:" v-if="showEditor" required>
- <t-editor style="width: 800px" ref="myEditor" :toolbar="toolbar" :value="state.form.policy" ></t-editor>
+ <el-form-item label="二 、综合分析:" v-if="showEditor" required prop="synthesize">
+ <t-editor style="width: 800px" ref="myEditor" :toolbar="toolbar" :value="state.form.synthesize" ></t-editor>
</el-form-item>
- <el-form-item label="二 、综合分析:" v-else>
+ <el-form-item label="二 、综合分析:" v-else prop="synthesize">
<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.policy" @click="showFile($event)"></div>
+ <div class="reviewTable" :disabled="title === '查看'" v-html="state.form.synthesize" ></div>
</div>
</div>
</el-form-item>
@@ -70,52 +70,53 @@
</el-row>
<el-row :gutter="24">
<el-col :span="24">
- <el-form-item label="三 、内外部损失:" prop="method" >
- <el-input :disabled="title === '查看'" v-model="state.form.method" :rows="4" type="textarea" placeholder=""/>
+ <el-form-item label="三 、内外部损失:" prop="damage" >
+ <el-input :disabled="title === '查看'" v-model="state.form.damage" :rows="4" type="textarea" placeholder=""/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="24">
- <el-form-item label="四 、纠正措施:" prop="method" >
- <el-input :disabled="title === '查看'" v-model="state.form.method" :rows="4" type="textarea" placeholder=""/>
+ <el-form-item label="四 、纠正措施:" prop="measure" >
+ <el-input :disabled="title === '查看'" v-model="state.form.measure" :rows="4" type="textarea" placeholder=""/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="24">
- <el-form-item label="五 、分析的结果:" prop="method" >
- <el-input :disabled="title === '查看'" v-model="state.form.method" :rows="4" type="textarea" placeholder=""/>
+ <el-form-item label="五 、分析的结果:" prop="analysis" >
+ <el-input :disabled="title === '查看'" v-model="state.form.analysis" :rows="4" type="textarea" placeholder=""/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="24">
- <el-form-item label="六 、改进建议:" prop="method" >
- <el-input :disabled="title === '查看'" v-model="state.form.method" :rows="4" type="textarea" placeholder=""/>
+ <el-form-item label="六 、改进建议:" prop="suggest" >
+ <el-input :disabled="title === '查看'" v-model="state.form.suggest" :rows="4" type="textarea" placeholder=""/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
- <el-form-item label="部门:" prop="leadId" >
- <el-select clearable v-model="state.form.leadId" :disabled="title =='查看'" filterable style="width: 100%">
+ <el-form-item label="部门:" prop="dutyId" >
+ <el-select clearable v-model="state.form.dutyId" :disabled="title =='查看'" filterable style="width: 100%">
<el-option
- v-for="item in state.userList"
- :key="item.id"
- :label="item.name"
- :value="item.id"
+ v-for="item in state.deptList"
+ :key="item.deptId"
+ :label="item.deptName"
+ :value="item.deptId"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
- <el-form-item label="日期:" prop="leadTime" >
+ <el-form-item label="日期:" prop="dutyTime" >
<el-date-picker
:disabled="title === '查看'"
- v-model="state.form.leadTime"
+ v-model="state.form.dutyTime"
type="date"
placeholder="请选择日期"
+ value-format="YYYY-MM-DD"
/>
</el-form-item>
</el-col>
@@ -141,6 +142,7 @@
import TEditor from "@/components/Tinymce/Tinymce.vue";
import axios from "axios";
import {getToken} from "@/utils/auth";
+import {addEconomy, editEconomy} from "@/api/qualityFinancialAnalysis";
const dialogVisible = ref(false);
const title = ref("");
@@ -154,34 +156,28 @@
const state = reactive({
form: {
id: '',
- year: '',
- num: '',
- type: '',
- departId: '',
- method: '',
- compilationId:'',
- compilationTime:'',
- qualityId: '',
- qualityTime:'',
- leadId:'',
- leadTime: '',
- qualityTargets:[],
-
+ companyId: null,
+ year: "",
+ basic: "",
+ synthesize: "",
+ damage: "",
+ measure: "",
+ analysis: "",
+ suggest: "",
+ dutyId: null,
+ dutyTime: ""
},
rules: {
companyId: [{ required: true, message: '请选择企业', trigger: 'blur' }],
year: [{ required: true, message: '请输入年份', trigger: 'blur' }],
- num: [{ required: true, message: '请输入序号', trigger: 'blur' }],
- type: [{ required: true, message: '请选择级别', trigger: 'blur' }],
- method: [{ required: true, message: '请输入目标测量方法', trigger: 'blur' }],
- compilationId: [{ required: true, message: '请选择编制人员', trigger: 'blur' }],
- compilationTime: [{ required: true, message: '请选择日期', trigger: 'blur' }],
- qualityId: [{ required: true, message: '请选择质量管理部人员', trigger: 'blur' }],
- qualityTime: [{ required: true, message: '请选择日期', trigger: 'blur' }],
- leadId: [{ required: true, message: '请选择公司分管领导', trigger: 'blur' }],
- leadTime: [{ required: true, message: '请选择日期', trigger: 'blur' }],
- departId: [{ required: true, message: '请选择部门', trigger: 'blur' }],
- objName: [{required: true, message: "质量目标不能为空", trigger: "blur"}],
+ basic: [{ required: true, message: '请输入基本情况', trigger: 'blur' }],
+ synthesize: [{ required: true, message: '请输入综合分析', trigger: 'blur' }],
+ damage: [{ required: true, message: '请输入内外部损失', trigger: 'blur' }],
+ measure: [{ required: true, message: '请输入纠正措施', trigger: 'blur' }],
+ analysis: [{ required: true, message: '请输入分析结果', trigger: 'blur' }],
+ suggest: [{ required: true, message: '请输入改进建议', trigger: 'blur' }],
+ dutyId: [{ required: true, message: '请选择部门', trigger: 'blur' }],
+ dutyTime: [{ required: true, message: '请选择日期', trigger: 'blur' }],
},
isAdmin: false,
companyList: [],
@@ -209,16 +205,6 @@
label: '2021'
},
],
- levelList: [
- {
- value: 1,
- label: '公司级'
- },
- {
- value: 2,
- label: '部门级'
- },
- ]
})
const openDialog = async (type, value,companyList) => {
@@ -234,10 +220,6 @@
title.value = type === 'add' ? '新增' : type ==='edit' ? '编辑' : '查看' ;
if(type === 'edit' || type === 'review') {
state.form = JSON.parse(JSON.stringify(value));
- state.form.compilationBy = state.form.compilationId
- state.form.leadBy = state.form.leadId
- state.form.qualityBy = state.form.qualityId
-
if(state.isAdmin){
state.form.companyId = value.companyId
state.form.companyName = value.companyName
@@ -250,13 +232,13 @@
showEditor.value = true;
}
await getDeptList()
- await getPeopleList()
+ // await getPeopleList()
dialogVisible.value = true;
}
-const addObject = () => {
- state.form.qualityTargets.push({})
-}
const getDeptList = async () => {
+ if(state.isAdmin && (state.form.companyId == 0 || state.form.companyId == null)){
+ return
+ }
const param = {
pageNum: 1,
pageSize: 999,
@@ -268,46 +250,42 @@
}
}
const onSubmit = async () => {
- state.form.policy = tinyMCE.activeEditor.getContent();
-console.log('1',state.form.policy)
+ state.form.synthesize = tinyMCE.activeEditor.getContent();
+console.log('1',state.form.synthesize)
const valid = await busRef.value.validate()
if(valid){
- // if(title.value === '新增'){
- // console.log('sta',state.form)
- // const {id, ...data} = JSON.parse(JSON.stringify(state.form))
- // const res = await addObjective(data)
- // if(res.code === 200){
- // ElMessage({
- // type: 'success',
- // message: '新增成功'
- // });
- // }else{
- // ElMessage.warning(res.message)
- // }
- // emit("getList")
- // busRef.value.clearValidate();
- // reset();
- // dialogVisible.value = false;
- // }else if(title.value === '编辑'){
- // const {...data} = JSON.parse(JSON.stringify(state.form))
- // if(data.qualityTargets && data.qualityTargets.length == 0){
- // ElMessage.warning('请填写质量目标')
- // return
- // }
- // const res = await editObject(data)
- // if(res.code === 200){
- // ElMessage({
- // type: 'success',
- // message: '编辑成功'
- // });
- // }else{
- // ElMessage.warning(res.message)
- // }
- // emit("getList")
- // busRef.value.clearValidate();
- // reset();
- // dialogVisible.value = false;
- // }
+ if(title.value === '新增'){
+ console.log('sta',state.form)
+ const {id, ...data} = JSON.parse(JSON.stringify(state.form))
+ const res = await addEconomy(data)
+ if(res.code === 200){
+ ElMessage({
+ type: 'success',
+ message: '新增成功'
+ });
+ }else{
+ ElMessage.warning(res.message)
+ }
+ emit("getList")
+ busRef.value.clearValidate();
+ reset();
+ dialogVisible.value = false;
+ }else if(title.value === '编辑'){
+ const {...data} = JSON.parse(JSON.stringify(state.form))
+ const res = await editEconomy(data)
+ if(res.code === 200){
+ ElMessage({
+ type: 'success',
+ message: '编辑成功'
+ });
+ }else{
+ ElMessage.warning(res.message)
+ }
+ emit("getList")
+ busRef.value.clearValidate();
+ reset();
+ dialogVisible.value = false;
+ }
}
}
@@ -321,52 +299,39 @@
const reset = () => {
state.form = {
id: '',
- year: '',
- num: '',
- type: '',
- departId: '',
- method: '',
- compilationBy:'',
- compilationTime:'',
- qualityBy: '',
- qualityTime:'',
- leadBy:'',
- leadTime: '',
- qualityTargets:[],
+ companyId: null,
+ year: "",
+ basic: "",
+ synthesize: "",
+ damage: "",
+ measure: "",
+ analysis: "",
+ suggest: "",
+ dutyId: null,
+ dutyTime: ""
}
state.peopleList = []
state.companyList = []
}
-const handleDelete = (val) => {
- state.form.qualityTargets = state.form.qualityTargets.filter(item=> item != val)
-}
-
-const getPeopleList = async ()=> {
- if(state.isAdmin && (state.form.companyId == 0 || state.form.companyId == null)){
- return
- }
- const queryParams = {
- pageNum: 1,
- pageSize: 9999,
- companyId: state.form.companyId
- }
- const res = await getUser(queryParams)
- if(res.code == 200){
- state.userList = res.data.list?res.data.list:[]
- }else{
- ElMessage.warning(res.message)
- }
-};
-const selectValue = (val) => {
- state.peopleList.forEach(item => {
- if(item.name === val){
- state.form.compilationBy = item.id
- }
- })
-}
+// const getPeopleList = async ()=> {
+// if(state.isAdmin && (state.form.companyId == 0 || state.form.companyId == null)){
+// return
+// }
+// const queryParams = {
+// pageNum: 1,
+// pageSize: 9999,
+// companyId: state.form.companyId
+// }
+// const res = await getUser(queryParams)
+// if(res.code == 200){
+// state.userList = res.data.list?res.data.list:[]
+// }else{
+// ElMessage.warning(res.message)
+// }
+// };
const handleChangeNum = (value) => {
if (!/^\d+$/.test(value)) { // 验证是否为数字
@@ -377,83 +342,17 @@
}
}
const selectValueCom = (val) => {
- state.form.leadId = null
- state.form.qualityId = null
- state.form.compilationId = null
- state.form.leadName = null
- state.form.qualityName = null
- state.form.compilationName = null
- state.form.departId = null
+ state.form.dutyId = null
state.companyList.forEach(item => {
if(item.id === val){
state.form.companyName = item.name
}
})
getDeptList()
- getPeopleList()
+ // getPeopleList()
}
-const changeLevel = () => {
- // state.form.companyName = ''
- state.form.departId = null
-}
-const getCompanyList = async (val)=>{
- if(val){
- const queryParams = {
- name: val
- }
- const res = await getCompany(queryParams)
- if (res.code == 200) {
- state.companyList = res.data.list
- } else {
- ElMessage.warning(res.message)
- }
- }else {
- const queryParams = {
- pageSize: 999,
- pageNum: 1,
- }
- const res = await getCompany(queryParams)
- if (res.code == 200) {
- state.companyList = res.data.list
- } else {
- ElMessage.warning(res.message)
- }
- }
-}
-const showFile = (e) => {
- if(e.target.nodeName === 'A'){
- console.log("e",e)
- e.preventDefault();
- const file = {
- fileUrl: e.target.href,
- fileName: e.target.innerHTML
- }
- axios.get( file.fileUrl,{
- headers:
- {
- 'Content-Type': 'application/json',
- 'Authorization':getToken(),
- },
- responseType: 'blob'
- }
- ).then(res=>{
- if (res) {
- const link = document.createElement('a')
- let blob = new Blob([res.data],{type: res.data.type})
- link.style.display = "none";
- link.href = URL.createObjectURL(blob); // 创建URL
- link.setAttribute("download", file.fileName);
- document.body.appendChild(link);
- link.click();
- document.body.removeChild(link);
- } else {
- this.$message.error('获取文件失败')
- }
- // handleClose();
- })
- }
-}
+
defineExpose({
openDialog
});
diff --git a/src/views/work/financialMng/qualityFinancialAnalysis/index.vue b/src/views/work/financialMng/qualityFinancialAnalysis/index.vue
index 9f0f77c..ee89759 100644
--- a/src/views/work/financialMng/qualityFinancialAnalysis/index.vue
+++ b/src/views/work/financialMng/qualityFinancialAnalysis/index.vue
@@ -57,12 +57,12 @@
<el-table v-loading="loading" :data="dataList" :border="true" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<el-table-column type="index" label="序号" width="80" align="center"></el-table-column>
+ <el-table-column label="企业名称" prop="companyName" align="center" v-if="data.isAdmin" />
<el-table-column label="名称" prop="year" align="center" >
<template #default="scope">
- <span>年质量经济性分析报告</span>
+ <span>{{scope.row.year}}年质量经济性分析报告</span>
</template>
</el-table-column>
- <el-table-column label="目标测量方法" prop="method" align="center" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="160" >
<template #default="scope">
<el-button link type="primary" @click="openDialog('review',scope.row)" >查看</el-button>
@@ -93,10 +93,9 @@
import {ElMessage, ElMessageBox} from "element-plus";
import {getCompany} from "@/api/onlineEducation/company";
import Cookies from "js-cookie";
-import {generateWordDocument} from "@/utils/exportWord";
-import {delObject, getObjectPage} from "@/api/qualityObjectives/object";
import { Document, Paragraph, TextRun, Table, TableRow, TableCell,BorderStyle , Packer, AlignmentType, HeadingLevel } from "docx";
import { saveAs } from "file-saver";
+import {delEconomy, getEconomy} from "@/api/qualityFinancialAnalysis";
const { proxy } = getCurrentInstance();
const loading = ref(false);
const noticeRef = ref();
@@ -134,16 +133,6 @@
label: '2021'
},
],
- levelList: [
- {
- value: 1,
- label: '公司级'
- },
- {
- value: 2,
- label: '部门级'
- },
- ]
});
const dataList = ref([]);
const total = ref(0);
@@ -165,17 +154,15 @@
}
});
const getList = async () => {
- // loading.value = true;
- // const res = await getObjectPage(data.queryParams);
- // if(res.code === 200){
- // dataList.value = res.data.list
- // total.value = res.data.total
- // }else{
- // ElMessage.warning(res.message)
- // }
- // loading.value = false;
- dataList.value = [{}]
-
+ loading.value = true;
+ const res = await getEconomy(data.queryParams);
+ if(res.code === 200){
+ dataList.value = res.data.list
+ total.value = res.data.total
+ }else{
+ ElMessage.warning(res.message)
+ }
+ loading.value = false;
}
const searchClick = () => {
@@ -270,7 +257,7 @@
type: 'warning',
})
.then( async() => {
- const res = await delObject(val.id);
+ const res = await delEconomy(val.id);
if(res.code === 200){
ElMessage({
type: 'success',
@@ -377,10 +364,7 @@
`;
// 3. 创建完整报告文档
async function createQualityEconomicReport(data) {
- data = {
- time: 'xx',
- basicInfo: 'x'
- }
+
const doc = new Document({
sections: [{
properties: {},
@@ -401,13 +385,13 @@
spacing: { after: 300 }
}),
- // 报告时间范围
- new Paragraph({
- text: data.time,
- alignment: AlignmentType.CENTER,
- indent: { left: 3700 },
- spacing: { after: 500 }
- }),
+ // // 报告时间范围
+ // new Paragraph({
+ // text: data.dutyTime,
+ // alignment: AlignmentType.CENTER,
+ // indent: { left: 3700 },
+ // spacing: { after: 500 }
+ // }),
// 1. 基本情况
new Paragraph({
@@ -428,7 +412,7 @@
new Paragraph({
children: [
new TextRun({
- text: data.basicInfo, // 替换为实际内容
+ text: data.basic, // 替换为实际内容
font: "宋体", // 与标题一致
size: 20, // 小四号(20 half-points)
bold: false, // 常规
@@ -454,7 +438,7 @@
spacing: { after: 100 }
}),
// 二、综合分析内容
- ...convertHtmlToDocx(data.sampleTableHTML),
+ ...convertHtmlToDocx(data.synthesize),
new Paragraph({
children: [
],
@@ -483,7 +467,7 @@
new Paragraph({
children: [
new TextRun({
- text: data.lose, // 替换为实际内容
+ text: data.damage, // 替换为实际内容
font: "宋体", // 与标题一致
size: 20, // 小四号(20 half-points)
bold: false, // 常规
@@ -513,7 +497,36 @@
new Paragraph({
children: [
new TextRun({
- text: data.action, // 替换为实际内容
+ text: data.measure, // 替换为实际内容
+ font: "宋体", // 与标题一致
+ size: 20, // 小四号(20 half-points)
+ bold: false, // 常规
+ color: "000000" // 纯黑
+ })
+ ],
+ alignment: AlignmentType.LEFT,
+ spacing: { after: 300 } // 和下一段的间距
+ }),
+ //五、分析结果
+ new Paragraph({
+ children: [
+ new TextRun({
+ text: "六、分析结果",
+ font: "宋体",
+ size: 22,
+ bold: true,
+ color: "000000"
+ })
+ ],
+ heading: HeadingLevel.HEADING_1,
+ alignment: AlignmentType.LEFT,
+ spacing: { after: 100 }
+ }),
+ //分析结果内容
+ new Paragraph({
+ children: [
+ new TextRun({
+ text: data.suggest, // 替换为实际内容
font: "宋体", // 与标题一致
size: 20, // 小四号(20 half-points)
bold: false, // 常规
@@ -528,7 +541,7 @@
new Paragraph({
children: [
new TextRun({
- text: "五、改进建议",
+ text: "六、改进建议",
font: "宋体",
size: 22,
bold: true,
@@ -556,14 +569,14 @@
// 10. 综合部落款
new Paragraph({
- text: data.deptName,
+ text: data.dutyName,
alignment: AlignmentType.RIGHT,
spacing: { before: 1200 }
}),
// 11. 日期落款
new Paragraph({
- text: data.lastTime,
+ text: data.dutyTime,
alignment: AlignmentType.RIGHT,
spacing: { before: 200 }
})
@@ -572,7 +585,7 @@
});
// 导出文件
const blob = await Packer.toBlob(doc);
- saveAs(blob, "质量经济性分析报告.docx");
+ saveAs(blob, data.companyName + "_质量经济性分析报告.docx");
}
diff --git a/src/views/work/qualityManage/continuousImprovement/components/editDialog.vue b/src/views/work/qualityManage/continuousImprovement/components/editDialog.vue
index 9c935a7..44c7e53 100644
--- a/src/views/work/qualityManage/continuousImprovement/components/editDialog.vue
+++ b/src/views/work/qualityManage/continuousImprovement/components/editDialog.vue
@@ -3,7 +3,7 @@
<el-dialog
v-model="dialogVisible"
:title="title"
- width="900px"
+ width="950px"
:before-close="handleClose"
:close-on-press-escape="false"
:close-on-click-modal="false"
@@ -27,7 +27,7 @@
<el-col :span="24">
<el-form-item label="年份:" prop="year" >
<el-select
- :disabled="title === '查看'"
+ :disabled="title === '查看' || title === '编辑'"
v-model="state.form.year"
filterable
allow-create
@@ -49,7 +49,7 @@
</el-row>
<el-row :gutter="24">
<el-col :span="24">
- <el-form-item label="年度质量体系改进计划:" prop="customerRecordNeeds" >
+ <el-form-item label="年度质量体系改进计划:" prop="plans" >
<el-button
:disabled="title === '查看'"
type="primary"
@@ -57,31 +57,30 @@
style="margin-left: 10px;margin-bottom: 10px"
>新增</el-button>
<div style="display: flex;width: 100%;">
- <el-table :data="state.form.customerRecordNeeds" :border="true" >
+ <el-table :data="state.form.plans" :border="true" >
<el-table-column type="index" label="序号" align="center"></el-table-column>
- <el-table-column label="改 进 项" prop="customerName" align="center" width="120">
+ <el-table-column label="改 进 项" prop="items" align="center" >
<template #default="{row,$index}">
- <el-form-item :prop="'customerRecordNeeds.' + '[' + $index + ']' + 'customerName'" :rules="state.rules.customerName">
- <el-input style="margin-top: 10px" :disabled="title === '查看'" type="textarea" :rows="4" v-model="row.customerName" placeholder="请输入"></el-input>
+ <el-form-item :prop="'plans.' + '[' + $index + ']' + 'items'" :rules="state.rules.items">
+ <el-input style="margin-top: 10px" :disabled="title === '查看'" type="textarea" :rows="4" v-model="row.items" placeholder="请输入"></el-input>
</el-form-item>
</template>
</el-table-column>
- <el-table-column label="具体措施" prop="customerNeed" align="center" width="120">
+ <el-table-column label="具体措施" prop="measure" align="center" >
<template #default="{row,$index}">
- <el-form-item :prop="'customerRecordNeeds.' + '[' + $index + ']' + 'customerName'" :rules="state.rules.customerNeed">
- <el-input style="margin-top: 10px" :disabled="title === '查看'" type="textarea" :rows="4" v-model="row.customerNeed" placeholder="请输入"></el-input>
+ <el-form-item :prop="'plans.' + '[' + $index + ']' + 'measure'" :rules="state.rules.measure">
+ <el-input style="margin-top: 10px" :disabled="title === '查看'" type="textarea" :rows="4" v-model="row.measure" placeholder="请输入"></el-input>
</el-form-item>
</template>
</el-table-column>
- <el-table-column label="责任部门" prop="disposeId" align="center" width="120">
+ <el-table-column label="责任部门" prop="dutyId" align="center" width="150">
<template #default="{row,$index}">
-
- <el-form-item :prop="'customerRecordNeeds.' + '[' + $index + ']' + 'customerName'" :rules="state.rules.disposeId">
+ <el-form-item :prop="'plans.' + '[' + $index + ']' + 'dutyId'" :rules="state.rules.dutyId">
<el-select
:disabled="title === '查看'"
- v-model="row.disposeId"
+ v-model="row.dutyId"
placeholder="请选择部门"
style="width: 240px;margin-bottom: 5px"
>
@@ -90,31 +89,31 @@
:key="item.deptId"
:label="item.deptName"
:value="item.deptId"
- />'customerRecordNeeds.' + '[' + $index + ']' + 'customerName'
+ />
</el-select>
</el-form-item>
</template>
</el-table-column>
- <el-table-column label="完成时间" prop="disposeMess" align="center" width="120">
+ <el-table-column label="完成时间" prop="finishTime" align="center" width="150">
<template #default="{row,$index}">
- <el-form-item :prop="'customerRecordNeeds.' + '[' + $index + ']' + 'customerName'" :rules="state.rules.disposeMess">
+ <el-form-item :prop="'plans.' + '[' + $index + ']' + 'finishTime'" :rules="state.rules.finishTime">
<el-date-picker
- v-model="row.calibrationTime"
+ v-model="row.finishTime"
type="date"
value-format="YYYY-MM-DD"
placeholder="完成时间"
- :disabled="state.title =='查看'"
+ :disabled="title =='查看'"
style="width: 100%"
/>
</el-form-item>
</template>
</el-table-column>
- <el-table-column label="跟踪验证" prop="remark" align="center" width="120">
+ <el-table-column label="跟踪验证" prop="verify" align="center" >
<template #default="{row,$index}">
- <el-form-item :prop="'customerRecordNeeds.' + '[' + $index + ']' + 'customerName'" :rules="state.rules.remark">
- <el-input style="margin-top: 10px" :disabled="title === '查看'" type="textarea" :rows="4" v-model="row.remark" placeholder="请输入"></el-input>
+ <el-form-item :prop="'plans.' + '[' + $index + ']' + 'verify'" :rules="state.rules.verify">
+ <el-input style="margin-top: 10px" :disabled="title === '查看'" type="textarea" :rows="4" v-model="row.verify" placeholder="请输入"></el-input>
</el-form-item>
</template>
</el-table-column>
@@ -132,8 +131,8 @@
</el-row>
<el-row :gutter="24">
<el-col :span="24">
- <el-form-item label="编制:" prop="compilationId" >
- <el-select clearable v-model="state.form.compilationId" :disabled="title =='查看'" filterable style="width: 200px">
+ <el-form-item label="编制:" prop="fictionId" >
+ <el-select clearable v-model="state.form.fictionId" :disabled="title =='查看'" filterable style="width: 200px">
<el-option
v-for="item in state.peopleList"
:key="item.id"
@@ -146,8 +145,8 @@
</el-row>
<el-row :gutter="24">
<el-col :span="24">
- <el-form-item label="审核:" prop="compilationId" >
- <el-select clearable v-model="state.form.compilationId" :disabled="title =='查看'" filterable style="width: 200px">
+ <el-form-item label="审核:" prop="checkId" >
+ <el-select clearable v-model="state.form.checkId" :disabled="title =='查看'" filterable style="width: 200px">
<el-option
v-for="item in state.peopleList"
:key="item.id"
@@ -160,8 +159,8 @@
</el-row>
<el-row :gutter="24">
<el-col :span="24">
- <el-form-item label="批准:" prop="compilationId" >
- <el-select clearable v-model="state.form.compilationId" :disabled="title =='查看'" filterable style="width: 200px">
+ <el-form-item label="批准:" prop="ratifyId" >
+ <el-select clearable v-model="state.form.ratifyId" :disabled="title =='查看'" filterable style="width: 200px">
<el-option
v-for="item in state.peopleList"
:key="item.id"
@@ -192,6 +191,7 @@
import {addTable, editTable, getTargetById} from "@/api/qualityObjectives/table";
import {addNeedDiscren, editNeedDiscren} from "@/api/need/need";
import {addCustomerNeed, editCustomerNeed} from "@/api/customerNeed";
+import {addInside, editInside} from "@/api/continuousImprovement";
const dialogVisible = ref(false);
const title = ref("");
@@ -204,19 +204,24 @@
form: {
id: '',
companyId: null,
- recordName: null,
- customerRecordNeeds:[],
+ year: "", //年份
+ fictionId: null, //编制
+ checkId: null, //审核
+ ratifyId: null, //批准
+ plans:[],
},
rules: {
companyId: [{ required: true, message: '请选择企业', trigger: 'blur' }],
- recordName: [{ required: true, message: '请输入记录名称', trigger: 'blur' }],
- customerName: [{required: true, message: "", trigger: "blur"}],
- customerNeed: [{required: true, message: "", trigger: "blur"}],
- needSource: [{required: true, message: "", trigger: "blur"}],
- registrantId: [{required: true, message: "", trigger: "blur"}],
- disposeId: [{required: true, message: "", trigger: "blur"}],
- disposeMess: [{required: true, message: "", trigger: "blur"}],
- customerRecordNeeds:[{ required: true, message: '请填写需求登记列表', trigger: 'blur' }],
+ year: [{ required: true, message: '请输入年份', trigger: 'blur' }], //
+ fictionId: [{ required: true, message: '请选择编制', trigger: 'blur' }],
+ checkId: [{ required: true, message: '请选择审核', trigger: 'blur' }],
+ ratifyId: [{ required: true, message: '请选择批准', trigger: 'blur' }],
+ items: [{required: true, message: "", trigger: "blur"}],
+ measure: [{required: true, message: "", trigger: "blur"}],
+ dutyId: [{required: true, message: "", trigger: "blur"}],
+ finishTime: [{required: true, message: "", trigger: "blur"}],
+ // verify: [{required: true, message: "", trigger: "blur"}],
+ plans:[{ required: true, message: '请填写年度质量体系改进计划表', trigger: 'blur' }],
},
peopleList: [],
isAdmin: false,
@@ -267,19 +272,7 @@
state.form.companyId = value.companyId
state.form.companyName = value.companyName
}
- state.form.customerRecordNeeds.forEach(item => {
- item.customerName = item.customerName
- const obj = {
- recordId: state.form.id,
- customerNeed: item.customerNeed,
- disposeId: item.disposeId,
- disposeMess: item.disposeMess,
- needSource: item.needSource?.split(','),
- registrantId: item.registrantId,
- remark: item.remark,
- }
- item.expectContentMesses=[obj]
- })
+
console.log('xx',state.form)
}
@@ -288,34 +281,11 @@
dialogVisible.value = true;
}
const onSubmit = async () => {
- let dataDemo = JSON.parse(JSON.stringify(state.form))
- let flag = false
- for (const i of dataDemo.customerRecordNeeds) {
- if(!i.expectContentMesses[0].needSource || i.expectContentMesses[0].needSource.length ==0){
- ElMessage.warning('请完善需求来源')
- flag = true
- return
- }
- }
- if(flag) return
- let dataArr = []
- dataArr = dataDemo.customerRecordNeeds.map(item => {
- return {
- customerName: item.customerName,
- customerNeed: item.expectContentMesses[0].customerNeed,
- disposeId: item.expectContentMesses[0].disposeId,
- disposeMess: item.expectContentMesses[0].disposeMess,
- needSource: item.expectContentMesses[0].needSource?.join(','),
- registrantId: item.expectContentMesses[0].registrantId,
- remark: item.expectContentMesses[0].remark,
- }
- })
- dataDemo.customerRecordNeeds = dataArr
const valid = await busRef.value.validate();
if(valid){
if(title.value === '新增'){
- const {id, ...data} = dataDemo
- const res = await addCustomerNeed(data)
+ const {id, ...data} = JSON.parse(JSON.stringify(state.form))
+ const res = await addInside(data)
if(res.code === 200){
ElMessage({
type: 'success',
@@ -329,11 +299,11 @@
reset();
dialogVisible.value = false;
}else if(title.value === '编辑'){
- const {...data} = dataDemo
- data.customerRecordNeeds.forEach(i => {
- i.recordId = data.id
- })
- const res = await editCustomerNeed(data)
+ const {...data} = JSON.parse(JSON.stringify(state.form))
+ // data.plans.forEach(i => {
+ // i.recordId = data.id
+ // })
+ const res = await editInside(data)
if(res.code === 200){
ElMessage({
type: 'success',
@@ -390,13 +360,22 @@
state.form = {
id: '',
companyId: null,
- recordName: null,
- customerRecordNeeds:[],
+ year: "", //年份
+ fictionId: null, //编制
+ checkId: null, //审核
+ ratifyId: null, //批准
+ plans:[],
}
state.companyList = []
}
const selectValueCom = (val) => {
+ state.form.fictionId = null
+ state.form.checkId = null
+ state.form.ratifyId = null
+ state.form.plans.forEach(item => {
+ item.dutyId = null
+ })
state.companyList.forEach(item => {
if(item.name === val){
state.form.companyId = item.id
@@ -408,17 +387,17 @@
const addTableData = () => {
- state.form.customerRecordNeeds.push({})
+ state.form.plans.push({})
}
const addObject = (val,itemIndex) => {
- state.form.customerRecordNeeds.forEach((item,index) => {
+ state.form.plans.forEach((item,index) => {
if(index == itemIndex){
item.expectContentMesses.push({})
}
})
}
const delObject = (val,itemIndex) => {
- state.form.customerRecordNeeds = state.form.customerRecordNeeds.filter(item=> item != val)
+ state.form.plans = state.form.plans.filter(item=> item != val)
}
const handleChangeNum = (value) => {
if (!/^\d+$/.test(value)) { // 验证是否为数字
diff --git a/src/views/work/qualityManage/continuousImprovement/index.vue b/src/views/work/qualityManage/continuousImprovement/index.vue
index ad02ac4..b7c4aab 100644
--- a/src/views/work/qualityManage/continuousImprovement/index.vue
+++ b/src/views/work/qualityManage/continuousImprovement/index.vue
@@ -58,7 +58,7 @@
<el-table-column label="企业名称" prop="companyName" align="center" v-if="data.isAdmin" />
<el-table-column label="名称" align="center">
<template #default="scope">
- <span>{{scope.row.recordName}}</span>
+ <span>{{scope.row.year}}年度质量体系改进计划</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="160">
@@ -95,6 +95,7 @@
import {delTable, getTable} from "@/api/qualityObjectives/table";
import {delNeedDiscren, getNeedDiscren} from "@/api/need/need";
import {delCustomerNeed, getCustomerNeed} from "@/api/customerNeed";
+import {delInside, getInside} from "@/api/continuousImprovement";
const { proxy } = getCurrentInstance();
const loading = ref(false);
const noticeRef = ref();
@@ -153,16 +154,15 @@
}
});
const getList = async () => {
- // loading.value = true;
- // const res = await getCustomerNeed(data.queryParams);
- // if(res.code === 200){
- // dataList.value = res.data.list
- // total.value = res.data.total
- // }else{
- // ElMessage.warning(res.message)
- // }
- // loading.value = false;
- dataList.value = [{}]
+ loading.value = true;
+ const res = await getInside(data.queryParams);
+ if(res.code === 200){
+ dataList.value = res.data.list
+ total.value = res.data.total
+ }else{
+ ElMessage.warning(res.message)
+ }
+ loading.value = false;
}
const searchClick = () => {
@@ -230,22 +230,15 @@
const startGeneration = async () => {
const data = JSON.parse(JSON.stringify(choosedData.value))
data.forEach(item => {
-
- // item.tableData = item.customerRecordNeeds.map((i,index) => {
- // return{
- // ...i,
- // expectContentMesses: i.expectContentMesses.map((q,qindex) => {
- // return{
- // ...q,
- // first: qindex == 0,
- // num: index+1,
- // }
- // })
- // }
- // })
+ item.tableData = item.plans.map((i,index) => {
+ return{
+ ...i,
+ num: index+1,
+ }
+ })
console.log('xxx',item.tableData)
try {
- generateWordDocument(templatePath.value, item, item.companyName + `_顾客需求登记表.docx`);
+ generateWordDocument(templatePath.value, item, item.companyName + `_${item.year}年度体系改进计划.docx`);
} catch (error){
ElMessage({
type: 'warning',
@@ -267,7 +260,7 @@
type: 'warning',
})
.then( async() => {
- const res = await delCustomerNeed(val.id);
+ const res = await delInside(val.id);
if(res.code === 200){
ElMessage({
type: 'success',
@@ -283,9 +276,9 @@
const handleChangeNum = (value) => {
if (!/^\d+$/.test(value)) { // 验证是否为数字
ElMessage.warning('只能输入数字')
- state.form.year = '' // 重置选择,避免非法值被添加到options中
- } else if (!state.yearList.some(option => option.label === value)) { // 确保不是已存在的选项
- state.yearList.push({ value, label: value }); // 添加新选项(这里简单地将值和标签设为相同)
+ data.queryParams.year = '' // 重置选择,避免非法值被添加到options中
+ } else if (!data.yearList.some(option => option.label === value)) { // 确保不是已存在的选项
+ data.yearList.push({ value, label: value }); // 添加新选项(这里简单地将值和标签设为相同)
}
}
</script>
--
Gitblit v1.9.2