Browse Source

Merge branch 'feature_1001531' into 'main'

搜索历史与浏览记录页面联调

See merge request zhcqdn00001/front!18
Kevin 2 years ago
parent
commit
3607ae1af8

+ 25 - 25
src/services/httpClient.ts

@@ -1,49 +1,49 @@
-import {message} from "ant-design-vue";
-import axios, {AxiosError, type AxiosRequestConfig} from "axios";
+import { message } from "ant-design-vue";
+import axios, { AxiosError, type AxiosRequestConfig } from "axios";
 import { routeToLogin } from "@/router";
 import type { MessageType } from "ant-design-vue/lib/message";
 
 const urlPrefix = "/";
 
 const httpClient = axios.create({
-    baseURL: urlPrefix,
-    timeout: 60000,
+  baseURL: urlPrefix,
+  timeout: 60000,
 });
 
 
 // 添加请求拦截器
 httpClient.interceptors.request.use(function (config: AxiosRequestConfig) {
-    // 在发送请求之前做些什么
-    const token = localStorage.getItem('token');
-    if (token && config.headers) {
-        config.headers.Authorization = token;
-    }
-    return config;
+  // 在发送请求之前做些什么
+  const token = localStorage.getItem('token');
+  if (token && config.headers) {
+    config.headers.Authorization = token;
+  }
+  return config;
 }, function (error) {
-    // 对请求错误做些什么
-    return Promise.reject(error);
+  // 对请求错误做些什么
+  return Promise.reject(error);
 });
 
 let errorMsgHandler: MessageType | null = null;
 
 // 添加响应拦截器
 httpClient.interceptors.response.use(function (response) {
-    // 对响应数据做点什么
-    return response;
+  // 对响应数据做点什么
+  return response;
 }, function (error: AxiosError) {
-    if (error.response?.status == 404) {
-        message.error("请求参数错误!");
-    } else if (error.response?.status == 401) {
-        routeToLogin();
-    } else if (error) {
-        if (errorMsgHandler != null) {
-            errorMsgHandler()
-        }
-        errorMsgHandler = message.error(error.message);
-        // routeToLogin();
+  if (error.response?.status == 404) {
+    message.error("请求参数错误!");
+  } else if (error.response?.status == 401) {
+    routeToLogin();
+  } else if (error) {
+    if (errorMsgHandler != null) {
+      errorMsgHandler()
     }
+    errorMsgHandler = message.error(error.message);
+    // routeToLogin();
+  }
 
-    return Promise.reject(error);
+  return Promise.reject(error);
 });
 
 export default httpClient;

+ 39 - 2
src/services/user.service.ts

@@ -29,15 +29,52 @@ async function checkLogin(): Promise<boolean> {
  * @param size 每页数量
  * @returns Promise
  */
-export function fetchHistory(currentUser: string, page: number, size: number) {
+export function fetchHistory(currentUser: string, page: number, size: number, dateNum: number) {
   const url = _url("/searchHistory/getMySearchHistory");
   const headers = { currentUser };
-  const params = { page, size };
+  const params = { page, size, dateNum };
   return httpClient.get<Response<Page<SearchHistoryRecord>>>(url, { params, headers });
 }
 
+export function delHistory(currentUser: string, id: number) {
+  const url = _url("/searchHistory/delById/" + id);
+  const headers = { currentUser };
+  return httpClient.delete<Response<Object>>(url, { headers });
+}
+
+export function delAllHistory(currentUser: string) {
+  const url = _url("/searchHistory/delAllByUserId");
+  const headers = { currentUser };
+  return httpClient.delete<Response<Object>>(url, { headers });
+}
+
+export function fetchBrowsing(currentUser: string, page: number, size: number, dateNum: number) {
+  const url = _url("/browsing/getPage");
+  const headers = { currentUser };
+  const params = { page, size, dateNum };
+  return httpClient.get<Response<Page<SearchHistoryRecord>>>(url, { params, headers });
+}
+
+export function delBrowsingById(currentUser: string, id: number) {
+  const url = _url("/browsing/delById/" + id);
+  const headers = { currentUser };
+  return httpClient.delete<Response<Object>>(url, { headers });
+}
+
+export function delAllBrowsing(currentUser: string) {
+  const url = _url("/browsing/delByUserId");
+  const headers = { currentUser };
+  return httpClient.delete<Response<Object>>(url, { headers });
+}
+
 export default {
   login,
   checkLogin,
   fetchHistory,
+  delHistory,
+  delAllHistory,
+
+  fetchBrowsing,
+  delBrowsingById,
+  delAllBrowsing
 }

+ 57 - 14
src/views/history/DocumentHistoryView.vue

@@ -1,31 +1,74 @@
 <script setup lang="ts">
-import { ref } from "vue";
+import { onMounted, type Ref, ref } from "vue";
 import HistoryList from "./components/HistoryList.vue";
 import HistoryToolbar from "./components/HistoryToolbar.vue";
+import type { SearchHistoryRecord } from "@/types/user.types";
+import * as userService from "@/services/user.service";
+import { useAuthStore } from "@/stores/auth.store";
 
-const data = [
-  {
-    id: 1,
-    expression: 'TP=(建筑)',
-    createdTime: '2022-12-28 11:20:47'
-  }
-];
+const authStore = useAuthStore();
+
+const records: Ref<SearchHistoryRecord[]> = ref([]);
 
 const currentPage = ref(1);
 
+const page = ref(1);
+
+const total = ref(0);
+
+const filterValue = ref("3");
+
+function fetchBrowsing() {
+  const currentUser = JSON.stringify(authStore.currentUser)
+  userService.fetchBrowsing(currentUser, page.value, 10, Number(filterValue.value)).then((resp) => {
+    const respData = resp.data.data;
+    records.value = respData.records;
+    total.value = respData.total;
+  })
+}
+
 function handleDelete(id: number) {
-  console.log("delete", id);
+  const currentUser = JSON.stringify(authStore.currentUser)
+  userService.delBrowsingById(currentUser, id).then(() => {
+    fetchBrowsing()
+  })
+}
+
+function onfilterChange(value: string) {
+  filterValue.value = value
+  fetchBrowsing()
+}
+
+function ondeleteAll() {
+  const currentUser = JSON.stringify(authStore.currentUser)
+  userService.delAllBrowsing(currentUser).then(() => {
+    fetchBrowsing()
+  })
+}
+
+function onNext() {
+  page.value = currentPage.value + 1;
+  fetchBrowsing();
+}
+
+function onPrev() {
+  page.value = currentPage.value - 1;
+  fetchBrowsing();
 }
+
+onMounted(() => {
+  fetchBrowsing();
+});
 </script>
 
 <template>
-  <HistoryToolbar />
-  <HistoryList :data="data" @delete="handleDelete" class="history-list-wrap" />
+  <HistoryToolbar @filterChange="onfilterChange" @deleteAll="ondeleteAll" />
+  <HistoryList :data="records" @delete="handleDelete" class="history-list-wrap" />
   <div class="pagination">
-    <a-pagination v-model:current="currentPage" simple :total="50">
+    <a-pagination v-model:current="currentPage" simple :total="total">
       <template #itemRender="{ type, originalElement }">
-        <a-button v-if="type === 'prev'" size="small"> 上一页</a-button>
-        <a-button v-else-if="type === 'next'" size="small">下一页</a-button>
+        <a-button v-if="type === 'prev'" size="small" @click="onPrev()"> 上一页</a-button>
+        <a-button v-else-if="type === 'next'" size="small" @click="onNext()">下一页</a-button>
         <component :is="originalElement" v-else></component>
       </template>
     </a-pagination>

+ 41 - 8
src/views/history/SearchHistoryView.vue

@@ -12,30 +12,63 @@ const records: Ref<SearchHistoryRecord[]> = ref([]);
 
 const currentPage = ref(1);
 
+const page = ref(1);
+
 const total = ref(0);
 
-function handleDelete(id: number) {
-  console.log("delete", id);
-}
+const filterValue = ref("3");
 
-onMounted(() => {
+function fetchHistory() {
   const currentUser = JSON.stringify(authStore.currentUser)
-  userService.fetchHistory(currentUser, 1, 10).then((resp) => {
+  userService.fetchHistory(currentUser, currentPage.value, 10, Number(filterValue.value)).then((resp) => {
     const respData = resp.data.data;
     records.value = respData.records;
     total.value = respData.total;
   })
+}
+
+function handleDelete(id: number) {
+  const currentUser = JSON.stringify(authStore.currentUser)
+  userService.delHistory(currentUser, id).then(() => {
+    fetchHistory()
+  })
+}
+
+function onfilterChange(value: string) {
+  filterValue.value = value
+  fetchHistory()
+}
+
+function ondeleteAll() {
+  const currentUser = JSON.stringify(authStore.currentUser)
+  userService.delAllHistory(currentUser).then(() => {
+    fetchHistory()
+  })
+}
+
+function onNext() {
+  page.value = currentPage.value + 1;
+  fetchHistory();
+}
+
+function onPrev() {
+  page.value = currentPage.value - 1;
+  fetchHistory();
+}
+
+onMounted(() => {
+  fetchHistory();
 });
 </script>
 
 <template>
-  <HistoryToolbar />
+  <HistoryToolbar @filterChange="onfilterChange" @deleteAll="ondeleteAll" />
   <HistoryList :data="records" @delete="handleDelete" class="history-list-wrap" />
   <div class="pagination">
     <a-pagination v-model:current="currentPage" simple :total="total">
       <template #itemRender="{ type, originalElement }">
-        <a-button v-if="type === 'prev'" size="small"> 上一页</a-button>
-        <a-button v-else-if="type === 'next'" size="small">下一页</a-button>
+        <a-button v-if="type === 'prev'" size="small" @click="onPrev()"> 上一页</a-button>
+        <a-button v-else-if="type === 'next'" size="small" @click="onNext()">下一页</a-button>
         <component :is="originalElement" v-else></component>
       </template>
     </a-pagination>

+ 2 - 2
src/views/history/components/HistoryItem.vue

@@ -34,7 +34,7 @@ function handleDelete() {
     <a-row type="flex" justify="space-between" :gutter="8">
       <a-col flex="1" class="item-content">
         <span class="item-time">{{ data.createdTime }}</span>
-        <span class="item-expression">
+        <span class="item-expression" v-if="data.expression">
           <span>检索:</span>
           <a href="javascript:void(0)" @click="routeToSearchResult(data.expression)" type="link">
             {{ data.expression }}
@@ -71,4 +71,4 @@ function handleDelete() {
     }
   }
 }
-</style>
+</style>

+ 1 - 1
src/views/history/components/HistoryList.vue

@@ -25,7 +25,7 @@ function handleDelete(id: number) {
       v-for="(item, i) in data"
       :data="item"
       :key="i"
-      @delete="handleDelete"
+      @delete="handleDelete(item.id)"
       class="history-item-comp"
     />
   </div>