فهرست منبع

报告管理接口联调完成

htc 3 هفته پیش
والد
کامیت
0ff827fc97

+ 21 - 2
src/api/agent/index.js

@@ -301,12 +301,19 @@ export function deleteKnowledgeFile(id) {
 // ---end 知识库管理
 
 // ---start 报告管理
-export function getReportTest() {
+export function getReportPdfData(id) {
   return request({
-    url: '/core/report/team/member/getReportTest',
+    url: '/core/report/team/member/previewReport/'+id,
     method: 'get'
   })
 }
+export function updateReportPdfUrl(data) {
+  return request({
+    url: '/core/report/team/member',
+    method: 'put',
+    data
+  })
+}
 export function getTeamReportWjList(relationId) {
   return request({
     url: `/core/report/team/member/reportList/team/${relationId}`,
@@ -326,4 +333,16 @@ export function deleteTeamReportWj(data) {
     data
   })
 }
+export function sendReportById(id) {
+  return request({
+    url: `/core/report/team/member/send/${id}`,
+    method: 'get'
+  })
+}
+export function reCreateReport(id) {
+  return request({
+    url: `/core/report/team/member/retryGen/${id}`,
+    method: 'get'
+  })
+}
 // ---end 报告管理

+ 26 - 8
src/components/reportList/index.vue

@@ -56,7 +56,7 @@
             <template #default="scope">
                 <el-button link type="text" size="mini" @click="handleReive(scope.row)">查看</el-button>
                 <el-button link type="text" size="mini" @click="handledDelete(scope.row)" v-hasPermi="['core:report:delete']">删除</el-button>
-                <el-button link type="text" size="mini" @click="handleSend(scope.row)" v-if="![0,'-1'].includes(scope.row.state)">发送报告</el-button>
+                <el-button link type="text" size="mini" @click="handleSend(scope.row)" v-if="[1,2].includes(scope.row.state)">发送报告</el-button>
                 <el-button link type="text" size="mini" @click="handleCreate(scope.row)" v-if="scope.row.state=='-1'">重新生成</el-button>
                 <el-button link type="text" size="mini" @click="handleExport(scope.row)" v-if="scope.row.state>0">导出报告</el-button>
             </template>
@@ -64,7 +64,7 @@
     </el-table>
     </div>
     <template v-if="pdfShow">
-      <report-pdf :reportData="reportData" @cancel="pdfCancel"></report-pdf>
+      <report-pdf :reportId="reportId" :reportName="reportName" :reportData="reportData" @cancel="pdfCancel"></report-pdf>
     </template>
   </div>
 </template>
@@ -93,8 +93,9 @@
   import { ref, getCurrentInstance, nextTick } from 'vue'
   const { proxy } = getCurrentInstance();
   import { 
-    getReportTest
+    getReportPdfData
   } from '@/api/agent/index.js'
+  const pdfRef = ref(null)
 
   const sTextCfg = {
     1: '未发送',
@@ -110,9 +111,13 @@
   }
   const pdfShow = ref(false)
   const reportData = ref({})
+  const reportParentId = ref('')
+  const reportId = ref('')
+  const reportName = ref('')
 
-  const emit = defineEmits(['toggleReport','deleteReport'])
+  const emit = defineEmits(['toggleReport','deleteReport','sendReport','reCreateReport','refreshReportList'])
   const toggleReport = (item) => {
+    reportParentId.value = item.id;
     emit('toggleReport', item)
   }
 
@@ -121,12 +126,18 @@
   }
 
   const pdfCancel = () => {
+    emit('refreshReportList', reportParentId.value)
     pdfShow.value = false;
     reportData.value = {};
+    reportParentId.value = '';
+    reportId.value = '';
+    reportName.value = '';
   }
 
   const handleReive = (row) => {
-    getReportTest().then(res => {
+    reportId.value = row.id;
+    reportName.value = row.reportName;
+    getReportPdfData(row.id).then(res => {
       if(res.code!==0) proxy.$message.error(res.msg);
       reportData.value = res.data;
       nextTick(() => {
@@ -139,13 +150,20 @@
   }
 
   const handleSend = (row) => {
-    console.log(row)
+    if(row.state==2){
+      proxy.$modal.confirm('当前报告已发送,若继续发送会覆盖当前报告,是否继续发送?').then((res) => {
+        if(res == 'confirm'){
+          emit('sendReport', row.id)
+        }
+      })
+    }else emit('sendReport', row.id)
   }
   const handleCreate = (row) => {
-    console.log(row)
+    emit('reCreateReport', row.id)
   }
   const handleExport = (row) => {
-    window.open(row.reportUrl)
+    if(!row.fileUrl) return proxy.$message.error('报告不存在,请联系管理员');
+    window.open(row.fileUrl)
   }
 </script>
 

+ 15 - 15
src/components/reportPdf/exportPDF.js

@@ -58,21 +58,21 @@ export const exportPDF = async (elementId, fileName = 'document.pdf') => {
     );
     }
 
-    // const pdfBlob = pdf.output('blob');
-    // const formData = new FormData();
-    // formData.append('file', pdfBlob, 'report.pdf');
-    // const response = await axios.post(
-    //     `${window.SITE_CONFIG["apiURL"]}/sys/oss/uploadFile`,
-    //     formData,
-    //     {
-    //         headers: {
-    //             'Content-Type': 'multipart/form-data',
-    //             'token': Cookies.get('token') || ''
-    //         }
-    //     }
-    // );
-    // return response
+    const pdfBlob = pdf.output('blob');
+    const formData = new FormData();
+    formData.append('file', pdfBlob, fileName);
+    const response = await axios.post(
+        `${window.SITE_CONFIG["apiURL"]}/sys/oss/uploadFile`,
+        formData,
+        {
+            headers: {
+                'Content-Type': 'multipart/form-data',
+                'token': Cookies.get('token') || ''
+            }
+        }
+    );
+    return response
 
   // 保存PDF
-  pdf.save(fileName);
+  // pdf.save(fileName);
 };

+ 18 - 11
src/components/reportPdf/index.vue

@@ -25,22 +25,29 @@
       reportData:{
         type: Object,
         default: () => {}
+      },
+      reportId:{
+        type: String,
+        default: ''
+      },
+      reportName:{
+        type: String,
+        default: ''
       }
     })
 
     import { ref, getCurrentInstance, onMounted } from 'vue'
     const { proxy } = getCurrentInstance();
     const reportData = ref(props.reportData);
+    const reportId = ref(props.reportId);
+    const reportName = ref(props.reportName);
     const emit = defineEmits(['cancel']);
+    import { updateReportPdfUrl } from '@/api/agent/index.js';
 
     const cancel = () => {
         emit('cancel');
     }
 
-    const savePdf = () => {
-
-    }
-
     const exportToPDF = async () => {
         try {
             const loading = proxy.$loading({
@@ -53,19 +60,19 @@
             window.scrollTo(0, 0);
             // 避免异步渲染问题
             await new Promise(resolve => setTimeout(resolve, 500));
-            const res = await exportPDF('pdf-content', '员工信息表.pdf');
-            console.log(res,'res');
+            const res = await exportPDF('pdf-content', reportName.value+'.pdf');
             if(res.data && res.data.code === 0) {
-                console.log(res.data.data,'res.data.data');
-                loading.close();
-                proxy.$message.success('生成成功!');
-                cancel();
+                updateReportPdfUrl({id:reportId.value, fileUrl:res.data.data}).then(resu => {
+                    if(resu.code!==0) return proxy.$message.error(res.msg)
+                    loading.close();
+                    proxy.$message.success('生成成功!');
+                    cancel();
+                })
             }
         } catch (error) {
             console.error('导出失败:', error);
         }
     };
-
     
     onMounted(() => {
         

+ 1 - 1
src/components/reportPdf/pdf.vue

@@ -6,7 +6,7 @@
                 <div class="cb_db_l">{{ datetime }}</div>
                 <div class="cb_db_r">欢迎使用CCMI的PERILL</div>
             </div>
-            <img class="fm_img" src="">
+            <!-- <img class="fm_img" src=""> -->
             <div class="fm_title">诊断总结:</div>
             <div class="fm_pre adfac">
                 <div class="fmp_l">报告撰写人:</div>

+ 33 - 6
src/views/modules/agent/report.vue

@@ -22,7 +22,11 @@
             <div class="list">
                 <reportList :item="item" :reportList="item.reportList" :showMore="item.showMore"
                     v-for="(item, index) in teamList" :key="index"
-                    @toggleReport="e=>toggleReportTeam(e,index)" @deleteReport="e=>deleteTeamReport(e,index,item)">
+                    @toggleReport="e=>toggleReportTeam(e,index)" 
+                    @deleteReport="e=>deleteTeamReport(e,index,item)"
+                    @sendReport="e=>sendReportTeam(e,index,item)"
+                    @reCreateReport="e=>reCreateReportTeam(e,index,item)"
+                    @refreshReportList="e=>refreshReportTeamList(e,index)">
                 </reportList>
             </div>
         </template>
@@ -45,7 +49,9 @@
         getTeamQuestionnaireList,
         getTeamReportWjList,
         getUserReportWjList,
-        deleteTeamReportWj 
+        deleteTeamReportWj,
+        sendReportById,
+        reCreateReport 
      } from "@/api/agent/index.js";
     
     const tidx = ref(1)
@@ -109,14 +115,35 @@
         let res = await deleteTeamReportWj([e]);
         if(res.code===0){
             proxy.$message.success('删除成功!');
-            getTeamReportWjList(item.id).then(res=>{
-                if(res.code!==0) return proxy.$message.error(res.msg)
-                teamList.value[idx].reportList = res.data;
-            })
+            getTeamReportWjData(item.id,idx)
         } else proxy.$message.error(res.msg)
         }).then(() => {}).finally(() => {});
     }
 
+    const sendReportTeam = (e,idx,item) => {
+        sendReportById(e).then(res=>{
+            if(res.code!==0) return proxy.$message.error(res.msg)
+            proxy.$message.success('发送成功!')
+            getTeamReportWjData(item.id,idx)
+        })
+    }
+    const reCreateReportTeam = (e,idx,item) => {
+        reCreateReport(e).then(res=>{
+            if(res.code!==0) return proxy.$message.error(res.msg)
+            proxy.$message.success('重新生成成功!')
+            getTeamReportWjData(item.id,idx)
+        })
+    }
+    const refreshReportTeamList = (e,idx) => {
+        getTeamReportWjData(e,idx)
+    }
+    const getTeamReportWjData = (id,idx) => {
+        getTeamReportWjList(id).then(res=>{
+            if(res.code!==0) return proxy.$message.error(res.msg)
+            teamList.value[idx].reportList = res.data;
+        })
+    }
+
     onMounted(()=>{
         getTeamList()
     })