Bladeren bron

feature/1001807

lizi 2 jaren geleden
bovenliggende
commit
63303da107

+ 4 - 1
src/client/reports.client.ts

@@ -8,7 +8,7 @@ import type { Response } from "@/types/response.types";
 
 const _url = withPrefix("/gw/user")
 
-export async function query(page: number, companyIds?: number[], field?: string, keyword?: string): Promise<ReportsResponse> {
+export async function query(page: number, companyIds?: number[], field?: string, keyword?: string, status?: number): Promise<ReportsResponse> {
   //const params: any = { page, companyIds, field, keyword }
   // if (companyId) {
   //   params['companyId'] = companyId;
@@ -21,6 +21,9 @@ export async function query(page: number, companyIds?: number[], field?: string,
   if (field && keyword && keyword.length > 0 && field.length > 0) {
     param += `&field=${field}&keyword=${keyword}`
   }
+  if (status || status == 0) {
+     param += `&status=${status}`
+  }
 
   const resp = await httpClient.get<Response<ReportsResponse>>(_url(`/reports/?page=${page}&${param}`))
   return resp.data.data

+ 2 - 2
src/services/reports.service.ts

@@ -1,7 +1,7 @@
 import * as reportsClient from "@/client/reports.client"
 
-export async function query(page?: number, companyIds?: number[], field?: string, keyword?: string) {
-  return reportsClient.query(page || 1, companyIds, field, keyword);
+export async function query(page?: number, companyIds?: number[], field?: string, keyword?: string, status?: number) {
+  return reportsClient.query(page || 1, companyIds, field, keyword, status);
 }
 
 export async function agg() {

+ 31 - 1
src/views/report/ReportListView.vue

@@ -6,6 +6,7 @@ import QueryBox from './components/report-list/QueryBox.vue';
 import type { FieldType } from './components/report-list/QueryBox.vue';
 import CompanySelect from "./components/report-list/CompanySelect.vue";
 import ReportItem from './components/report-list/ReportItem.vue';
+import ReportStatusItem from './components/report-list/ReportStatusItem.vue'
 import * as reportService from "@/services/report.service"
 import * as reportsService from "@/services/reports.service"
 import { CompLog } from "@/libs/log.lib";
@@ -19,6 +20,22 @@ const logError = CompLog.logErr(_componentName)
 
 const currentPage = ref(1);
 
+const reportStatus = ref([
+  {
+    label: '全部',
+    value: undefined
+  },
+  {
+    label: '编写中',
+    value: 0
+  },{
+    label: '已完成',
+    value: 1
+  }
+])
+
+const status = ref(undefined)
+
 interface CompanyAggProp {
   id?: number;
   label: string;
@@ -44,7 +61,7 @@ const templateSelect = ref<InstanceType<typeof TemplateSelect> | null>(null)
 
 function fetchReports(companyIds?: Array<number>, page?: number, field?: string, keyword?: string) {
   spinning.value = true;
-  reportsService.query(page, companyIds, field, keyword).then((resp) => {
+  reportsService.query(page, companyIds, field, keyword, status.value).then((resp) => {
     total.value = resp.total;
     reports.value = resp.reports;
     spinning.value = false;
@@ -95,6 +112,11 @@ function onTemplateSelected(templateId: number | null) {
   }).catch(logError);
 }
 
+function onFilterChange() {
+  currentPage.value = 1
+  fetchReports(companyIdSelected.value, currentPage.value)
+}
+
 onMounted(() => {
   fetchReports()
   // 左侧企业名录统计
@@ -120,6 +142,10 @@ onMounted(() => {
     <div class="query-box-wrap">
       <QueryBox v-model:field="field" v-model:keyword="keyword" @search="onQuery" />
     </div>
+    <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>
@@ -147,6 +173,10 @@ onMounted(() => {
     margin: 0 auto;
   }
 
+  .filter-box-wrap{
+    display: flex;
+    margin: 1.5em  21.1%;
+  }
   .main-content {
     margin-top: 1.5em;
 

+ 43 - 0
src/views/report/components/report-list/ReportStatusItem.vue

@@ -0,0 +1,43 @@
+<script setup lang="ts">
+import { ref, watch, type PropType, onMounted } from "vue";
+
+export interface Prop {
+  label: string;
+  checked?: boolean;
+}
+
+const props = defineProps({
+  data: {
+    type: Object as PropType<Prop>,
+    required: true,
+  }
+});
+
+const checked = ref(false);
+
+watch(
+  () => !!props.data.checked,
+  (value: boolean) => checked.value = value
+);
+
+onMounted(() => {
+  checked.value = !!props.data.checked;
+
+});
+
+const emits = defineEmits<{
+  (e: "change", checked: boolean): void;
+}>();
+
+function onChange() {
+  emits("change", checked.value);
+}
+</script>
+
+<template>
+  <a-row type="flex">
+    <a-col :flex="1">
+      <a-checkbox v-model:checked="checked" @change="onChange">{{ data.label }}</a-checkbox>
+    </a-col>
+  </a-row>
+</template>