Browse Source

feature 1001715

报告列表支持删除功能
Kevin Jiang 2 years ago
parent
commit
bdc664f797

+ 6 - 1
src/client/report.client.ts

@@ -28,7 +28,12 @@ export async function save(reportSaveRequest: ReportSaveRequest) {
   return resp.data.data;
 }
 
-export async function updateStatus(id: number){
+export async function updateStatus(id: number) {
   const resp = await httpClient.put<Response<number>>(_url(`/updateStatus/${id}`));
   return resp.data.data;
 }
+
+export async function remove(id: number) {
+  const resp = await httpClient.delete<Response<boolean>>(_url(`${id}`))
+  return resp.data.data;
+}

+ 5 - 1
src/services/report.service.ts

@@ -20,4 +20,8 @@ export async function save(reportSaveRequest: ReportSaveRequest) {
 
 export async function updateStatus(id: number){
   return reportClient.updateStatus(id);
-}
+}
+
+export async function remove(id: number) {
+  return reportClient.remove(id);
+}

+ 23 - 2
src/views/report/ReportListView.vue

@@ -13,6 +13,7 @@ import type { ReportBasic } from "@/types/report.types"
 import { routeToReportEditor } from "@/router";
 import SpinComponent from "@/components/SpinComponent.vue";
 import TemplateSelect from "./components/TemplateSelect.vue";
+import { message } from "ant-design-vue";
 
 const _componentName = 'ReportListView'
 const logError = CompLog.logErr(_componentName)
@@ -116,6 +117,20 @@ function onFilterChange() {
   fetchReports(companyIdSelected.value, currentPage.value)
 }
 
+function onReportDelete(id: number) {
+  console.log('report id', id);
+  reportService.remove(id).then((ok) => {
+    if (ok) {
+      message.success('删除报告成功')
+      fetchReports()
+    } else {
+      message.success('删除报告失败')
+    }
+  }).catch(() => {
+    message.success('删除报告失败')
+  })
+}
+
 onMounted(() => {
   fetchReports()
   // 左侧企业名录统计
@@ -144,7 +159,7 @@ onMounted(() => {
     <div class="filter-box-wrap">
       <a-radio-group :options="reportStatus" v-model:value="status" @change="onFilterChange()"/>
     </div>
-    
+
     <a-row class="main-content" :gutter="24">
       <a-col :xxl="5" :xl="6" :lg="7" :span="8" class="company-filter-wrap">
         <h3>我所服务的企业</h3>
@@ -152,7 +167,13 @@ onMounted(() => {
       </a-col>
       <a-col :xxl="19" :xl="18" :lg="17" :span="16">
         <SpinComponent :spinning="spinning">
-          <ReportItem v-for="(report, index) in reports" :data="report" :key="index" class="report-item" />
+          <ReportItem
+            v-for="(report, index) in reports"
+            :data="report"
+            :key="index"
+            class="report-item"
+            @delete="onReportDelete"
+          />
         </SpinComponent>
       </a-col>
     </a-row>

+ 18 - 1
src/views/report/components/report-list/ReportItem.vue

@@ -16,6 +16,14 @@ defineProps({
     required: true,
   }
 });
+
+const emits = defineEmits<{
+  (e: "delete", id: number): void
+}>();
+
+function onDelete(id: number) {
+  emits("delete", id);
+}
 </script>
 
 <template>
@@ -34,6 +42,15 @@ defineProps({
     <template #extra>
       <RouterLink :to="{ name: 'ReportEditor', params: { id: data.id } }">编辑</RouterLink>
       <a-button type="link" :href="reportExport.link(data.id, authStore.token)" target="_blank">下载</a-button>
+      <a-popconfirm
+        title="确定删除此报告?"
+        ok-text="确定"
+        cancel-text="取消"
+        @confirm="onDelete(data.id)"
+        placement="topRight"
+      >
+        <a-button type="link">删除</a-button>
+      </a-popconfirm>
     </template>
     <div class="report-metadata-wrap">
       <p><span>企业名称:</span><span>{{ data.companyName }}</span></p>
@@ -50,7 +67,7 @@ defineProps({
  .text-black {
     color: rgba(0, 0, 0, 0.85);
   }
-} 
+}
 .report-metadata-wrap {
   p {
     margin-top: 0.3em;