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