wengan01 3 nedēļas atpakaļ
vecāks
revīzija
c99ce76832

+ 35 - 12
src/views/content/competitionZone/index.vue

@@ -1,11 +1,11 @@
   <template>
   <div class="app-container">
     <!-- 搜索区域 -->
-    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch">
-      <el-form-item label="名称" prop="zoneName">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" @submit.prevent>
+      <el-form-item label="专区名称" prop="zoneName">
         <el-input
           v-model="queryParams.zoneName"
-          placeholder="请输入名称"
+          placeholder="请输入专区名称或协会名称"
           clearable
           @keyup.enter="handleQuery"
         />
@@ -101,7 +101,7 @@
       </el-table-column>
     </el-table>
 
-    <pagination v-show="total>0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList"/>
+    <pagination v-show="total>0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="applyPagination"/>
 
     <!-- 新增/修改对话框(带图片上传功能) -->
     <el-dialog :title="title" v-model="open" width="700px" append-to-body>
@@ -110,7 +110,7 @@
         <!-- 名称和排序并排 -->
         <el-row :gutter="20">
           <el-col :span="12">
-            <el-form-item label="名称" prop="zoneName">
+            <el-form-item label="专区名称" prop="zoneName">
               <el-input v-model="form.zoneName" placeholder="请输入专区名称"/>
             </el-form-item>
           </el-col>
@@ -325,6 +325,8 @@ const open = ref(false);
 const title = ref("");
 const total = ref(0);
 const zoneList = ref([]);
+const allData = ref([]);
+const filteredData = ref([]);
 
 const queryParams = reactive({
   pageNum: 1,
@@ -374,13 +376,35 @@ const imageSelectorQuery = reactive({
 });
 
 // ========== 基础CRUD函数 ==========
+const fuzzyMatch = (rowVal, keyword) => {
+  if (keyword === undefined || keyword === null || keyword === '') return true;
+  if (rowVal === undefined || rowVal === null) return false;
+  return String(rowVal).toLowerCase().includes(String(keyword).toLowerCase());
+};
+
+const applyFilter = () => {
+  const q = queryParams;
+  filteredData.value = allData.value.filter((row) => {
+    if (!fuzzyMatch(row.zoneName, q.zoneName) && !fuzzyMatch(row.associationName, q.zoneName)) return false;
+    return true;
+  });
+};
+
+const applyPagination = () => {
+  const pageNum = queryParams.pageNum || 1;
+  const pageSize = queryParams.pageSize || 10;
+  const start = (pageNum - 1) * pageSize;
+  zoneList.value = filteredData.value.slice(start, start + pageSize);
+  total.value = filteredData.value.length;
+};
+
 async function getList() {
   loading.value = true;
   try {
-    const res = await listCompetitionZone(queryParams);
-    // 后端 fillImageInfo 已填充 icon 和 backgroundImage,直接使用
-    zoneList.value = res.rows || [];
-    total.value = res.total;
+    const res = await listCompetitionZone({ pageNum: 1, pageSize: 999999 });
+    allData.value = res.rows || [];
+    applyFilter();
+    applyPagination();
   } catch (err) {
     console.error('接口错误:', err);
     ElMessage.error('加载数据失败');
@@ -389,11 +413,10 @@ async function getList() {
   }
 }
 
-
-
 function handleQuery() {
   queryParams.pageNum = 1;
-  getList();
+  applyFilter();
+  applyPagination();
 }
 
 function resetQuery() {

+ 1 - 1
src/views/content/travelRecommendation/index.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="app-container">
     <!-- 搜索区域 -->
-    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" @submit.prevent>
       <el-form-item label="标题" prop="title">
         <el-input v-model="queryParams.title" placeholder="请输入标题" clearable @keyup.enter="handleQuery" />
       </el-form-item>

+ 38 - 7
src/views/system/business/info/index.vue

@@ -98,7 +98,7 @@
         </el-table-column>
       </el-table>
 
-      <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
+      <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="applyPagination" />
     </el-card>
     <!-- 添加或修改新闻信息对话框 -->
     <el-dialog :title="dialog.title" v-model="dialog.visible" width="700px" append-to-body>
@@ -264,13 +264,43 @@ const data = reactive<PageData<InfoForm, InfoQuery>>({
 
 const { queryParams, form, rules } = toRefs(data);
 
-/** 查询新闻信息列表 */
+const allData = ref<InfoVO[]>([]);
+const filteredData = ref<InfoVO[]>([]);
+
+const fuzzyMatch = (rowVal: any, keyword: any): boolean => {
+  if (keyword === undefined || keyword === null || keyword === '') return true;
+  if (rowVal === undefined || rowVal === null) return false;
+  return String(rowVal).toLowerCase().includes(String(keyword).toLowerCase());
+};
+
+const applyFilter = () => {
+  const q = queryParams.value;
+  filteredData.value = allData.value.filter((row: any) => {
+    if (!fuzzyMatch(row.title, q.title)) return false;
+    if (q.categoryId !== undefined && q.categoryId !== null && q.categoryId !== '' && row.categoryId !== q.categoryId) return false;
+    return true;
+  });
+};
+
+const applyPagination = () => {
+  const pageNum = queryParams.value.pageNum || 1;
+  const pageSize = queryParams.value.pageSize || 10;
+  const start = (pageNum - 1) * pageSize;
+  infoList.value = filteredData.value.slice(start, start + pageSize);
+  total.value = filteredData.value.length;
+};
+
+/** 查询新闻信息列表(全量拉取,前端过滤+分页) */
 const getList = async () => {
   loading.value = true;
-  const res = await listInfo(queryParams.value);
-  infoList.value = res.rows;
-  total.value = res.total;
-  loading.value = false;
+  try {
+    const res = await listInfo({ pageNum: 1, pageSize: 999999 });
+    allData.value = res.rows || [];
+    applyFilter();
+    applyPagination();
+  } finally {
+    loading.value = false;
+  }
 };
 
 /** 取消按钮 */
@@ -296,7 +326,8 @@ const reset = () => {
 /** 搜索按钮操作 */
 const handleQuery = () => {
   queryParams.value.pageNum = 1;
-  getList();
+  applyFilter();
+  applyPagination();
 };
 
 /** 重置按钮操作 */

+ 7 - 2
src/views/system/business/userToolsLog/index.vue

@@ -175,10 +175,10 @@ const handleQuery = () => {
   queryParams.value.pageNum = 1;
   const timeRange = data.queryParams.loginTimeRange;
   if (timeRange && timeRange.length === 2) {
-    data.queryParams.startTime = timeRange[0];
+    data.queryParams.beginTime = timeRange[0];
     data.queryParams.endTime = timeRange[1];
   } else {
-    data.queryParams.startTime = null;
+    data.queryParams.beginTime = null;
     data.queryParams.endTime = null;
   }
   getList();
@@ -187,6 +187,11 @@ const handleQuery = () => {
 /** 重置按钮操作 */
 const resetQuery = () => {
   queryFormRef.value?.resetFields();
+  queryParams.value.itemId = '';
+  queryParams.value.itemType = '';
+  data.queryParams.loginTimeRange = undefined;
+  data.queryParams.beginTime = null;
+  data.queryParams.endTime = null;
   handleQuery();
 };
 

+ 38 - 7
src/views/system/physical/adBanner/index.vue

@@ -74,7 +74,7 @@
         </el-table-column>
       </el-table>
 
-      <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
+      <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="applyPagination" />
     </el-card>
     <!-- 添加或修改广告位对话框 -->
     <el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
@@ -198,13 +198,43 @@ const data = reactive<PageData<AdBannerForm, AdBannerQuery>>({
 
 const { queryParams, form, rules } = toRefs(data);
 
-/** 查询广告位列表 */
+const allData = ref<AdBannerVO[]>([]);
+const filteredData = ref<AdBannerVO[]>([]);
+
+const fuzzyMatch = (rowVal: any, keyword: any): boolean => {
+  if (keyword === undefined || keyword === null || keyword === '') return true;
+  if (rowVal === undefined || rowVal === null) return false;
+  return String(rowVal).toLowerCase().includes(String(keyword).toLowerCase());
+};
+
+const applyFilter = () => {
+  const q = queryParams.value;
+  filteredData.value = allData.value.filter((row: any) => {
+    if (!fuzzyMatch(row.linkUrl, q.linkUrl)) return false;
+    if (!fuzzyMatch(row.sortOrder, q.sortOrder)) return false;
+    return true;
+  });
+};
+
+const applyPagination = () => {
+  const pageNum = queryParams.value.pageNum || 1;
+  const pageSize = queryParams.value.pageSize || 10;
+  const start = (pageNum - 1) * pageSize;
+  adBannerList.value = filteredData.value.slice(start, start + pageSize);
+  total.value = filteredData.value.length;
+};
+
+/** 查询广告位列表(全量拉取,前端过滤+分页) */
 const getList = async () => {
   loading.value = true;
-  const res = await listAdBanner(queryParams.value);
-  adBannerList.value = res.rows;
-  total.value = res.total;
-  loading.value = false;
+  try {
+    const res = await listAdBanner({ pageNum: 1, pageSize: 999999 });
+    allData.value = res.rows || [];
+    applyFilter();
+    applyPagination();
+  } finally {
+    loading.value = false;
+  }
 };
 
 /** 取消按钮 */
@@ -222,7 +252,8 @@ const reset = () => {
 /** 搜索按钮操作 */
 const handleQuery = () => {
   queryParams.value.pageNum = 1;
-  getList();
+  applyFilter();
+  applyPagination();
 };
 
 /** 重置按钮操作 */

+ 38 - 8
src/views/system/physical/homeTabConfig/index.vue

@@ -3,7 +3,7 @@
     <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
       <div v-show="showSearch" class="mb-[10px]">
         <el-card shadow="hover">
-          <el-form ref="queryFormRef" :model="queryParams" :inline="true">
+          <el-form ref="queryFormRef" :model="queryParams" :inline="true" @submit.prevent>
             <el-form-item label="页签名称" prop="tabDisplayName">
               <el-input v-model="queryParams.tabDisplayName" placeholder="请输入页签名称" clearable @keyup.enter="handleQuery" />
             </el-form-item>
@@ -74,7 +74,7 @@
         </el-table-column>
       </el-table>
 
-      <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
+      <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="applyPagination" />
     </el-card>
     <!-- 添加或修改首页页签开关配置对话框 -->
     <el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
@@ -159,13 +159,42 @@ const data = reactive<PageData<HomeTabConfigForm, HomeTabConfigQuery>>({
 
 const { queryParams, form, rules } = toRefs(data);
 
-/** 查询首页页签开关配置列表 */
+const allData = ref<HomeTabConfigVO[]>([]);
+const filteredData = ref<HomeTabConfigVO[]>([]);
+
+const fuzzyMatch = (rowVal: any, keyword: any): boolean => {
+  if (keyword === undefined || keyword === null || keyword === '') return true;
+  if (rowVal === undefined || rowVal === null) return false;
+  return String(rowVal).toLowerCase().includes(String(keyword).toLowerCase());
+};
+
+const applyFilter = () => {
+  const q = queryParams.value;
+  filteredData.value = allData.value.filter((row: any) => {
+    if (!fuzzyMatch(row.tabDisplayName, q.tabDisplayName)) return false;
+    return true;
+  });
+};
+
+const applyPagination = () => {
+  const pageNum = queryParams.value.pageNum || 1;
+  const pageSize = queryParams.value.pageSize || 10;
+  const start = (pageNum - 1) * pageSize;
+  homeTabConfigList.value = filteredData.value.slice(start, start + pageSize);
+  total.value = filteredData.value.length;
+};
+
+/** 查询首页页签开关配置列表(全量拉取,前端过滤+分页) */
 const getList = async () => {
   loading.value = true;
-  const res = await listHomeTabConfig(queryParams.value);
-  homeTabConfigList.value = res.rows;
-  total.value = res.total;
-  loading.value = false;
+  try {
+    const res = await listHomeTabConfig({ pageNum: 1, pageSize: 999999 });
+    allData.value = res.rows || [];
+    applyFilter();
+    applyPagination();
+  } finally {
+    loading.value = false;
+  }
 };
 
 /** 取消按钮 */
@@ -183,7 +212,8 @@ const reset = () => {
 /** 搜索按钮操作 */
 const handleQuery = () => {
   queryParams.value.pageNum = 1;
-  getList();
+  applyFilter();
+  applyPagination();
 };
 
 /** 重置按钮操作 */

+ 39 - 8
src/views/system/physical/merchantPartner/index.vue

@@ -3,7 +3,7 @@
     <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
       <div v-show="showSearch" class="mb-[10px]">
         <el-card shadow="hover">
-          <el-form ref="queryFormRef" :model="queryParams" :inline="true">
+          <el-form ref="queryFormRef" :model="queryParams" :inline="true" @submit.prevent>
             <el-form-item label="商家名称" prop="name">
               <el-input v-model="queryParams.name" placeholder="请输入商家名称" clearable @keyup.enter="handleQuery" />
             </el-form-item>
@@ -87,7 +87,7 @@
         </el-table-column>
       </el-table>
 
-      <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
+      <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="applyPagination" />
     </el-card>
     <!-- 添加或修改商城合作商家管理对话框 -->
     <el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
@@ -131,6 +131,8 @@ import { MerchantPartnerVO, MerchantPartnerQuery, MerchantPartnerForm } from '@/
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
 
 const merchantPartnerList = ref<MerchantPartnerVO[]>([]);
+const allData = ref<MerchantPartnerVO[]>([]);
+const filteredData = ref<MerchantPartnerVO[]>([]);
 const buttonLoading = ref(false);
 const loading = ref(true);
 const showSearch = ref(true);
@@ -185,13 +187,41 @@ const data = reactive<PageData<MerchantPartnerForm, MerchantPartnerQuery>>({
 
 const { queryParams, form, rules } = toRefs(data);
 
-/** 查询商城合作商家管理列表 */
+const fuzzyMatch = (rowVal: any, keyword: any): boolean => {
+  if (keyword === undefined || keyword === null || keyword === '') return true;
+  if (rowVal === undefined || rowVal === null) return false;
+  return String(rowVal).toLowerCase().includes(String(keyword).toLowerCase());
+};
+
+const applyFilter = () => {
+  const q = queryParams.value;
+  filteredData.value = allData.value.filter((row: any) => {
+    if (!fuzzyMatch(row.name, q.name)) return false;
+    if (!fuzzyMatch(row.contactPerson, q.contactPerson)) return false;
+    if (!fuzzyMatch(row.contactPhone, q.contactPhone)) return false;
+    return true;
+  });
+};
+
+const applyPagination = () => {
+  const pageNum = queryParams.value.pageNum || 1;
+  const pageSize = queryParams.value.pageSize || 10;
+  const start = (pageNum - 1) * pageSize;
+  merchantPartnerList.value = filteredData.value.slice(start, start + pageSize);
+  total.value = filteredData.value.length;
+};
+
+/** 查询商城合作商家管理列表(全量拉取,前端过滤+分页) */
 const getList = async () => {
   loading.value = true;
-  const res = await listMerchantPartner(queryParams.value);
-  merchantPartnerList.value = res.rows;
-  total.value = res.total;
-  loading.value = false;
+  try {
+    const res = await listMerchantPartner({ pageNum: 1, pageSize: 999999 });
+    allData.value = res.rows || [];
+    applyFilter();
+    applyPagination();
+  } finally {
+    loading.value = false;
+  }
 };
 
 /** 取消按钮 */
@@ -209,7 +239,8 @@ const reset = () => {
 /** 搜索按钮操作 */
 const handleQuery = () => {
   queryParams.value.pageNum = 1;
-  getList();
+  applyFilter();
+  applyPagination();
 };
 
 /** 重置按钮操作 */

+ 1 - 1
src/views/system/physical/officialLiveConfig/index.vue

@@ -3,7 +3,7 @@
     <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
       <div v-show="showSearch" class="mb-[10px]">
         <el-card shadow="hover">
-          <el-form ref="queryFormRef" :model="queryParams" :inline="true">
+          <el-form ref="queryFormRef" :model="queryParams" :inline="true" @submit.prevent>
             <el-form-item label="直播名称" prop="liveName">
               <el-input v-model="queryParams.liveName" placeholder="请输入直播名称" clearable @keyup.enter="handleQuery" />
             </el-form-item>

+ 1 - 1
src/views/system/physical/serviceTab/index.vue

@@ -3,7 +3,7 @@
     <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
       <div v-show="showSearch" class="mb-[10px]">
         <el-card shadow="hover">
-          <el-form ref="queryFormRef" :model="queryParams" :inline="true">
+          <el-form ref="queryFormRef" :model="queryParams" :inline="true" @submit.prevent>
             <el-form-item label="页签名称" prop="name">
               <el-input v-model="queryParams.name" placeholder="请输入页签名称" clearable @keyup.enter="handleQuery" />
             </el-form-item>

+ 3 - 3
src/views/system/physical/store/index.vue

@@ -48,7 +48,7 @@
             <span v-else>无</span>
           </template>
         </el-table-column>
-        <el-table-column label="昵称" align="center" prop="name" />
+        <el-table-column label="门店名称" align="center" prop="name" />
         <el-table-column label="服务类型" align="center" prop="storeTypeName" />
         <el-table-column label="详细地址" align="center" prop="address" />
         <el-table-column label="是否授权" align="center" prop="isAuthorization">
@@ -104,8 +104,8 @@
     <!-- 添加或修改门店信息对话框 -->
     <el-dialog :title="dialog.title" v-model="dialog.visible" width="600px" append-to-body>
       <el-form ref="storeFormRef" :model="form" :rules="rules" label-width="120px">
-        <el-form-item label="昵称" prop="name">
-          <el-input v-model="form.name" placeholder="请输入昵称" />
+        <el-form-item label="门店名称" prop="name">
+          <el-input v-model="form.name" placeholder="请输入门店名称" />
         </el-form-item>
         <el-form-item label="详细地址" prop="address">
           <el-input v-model="form.address" type="textarea" placeholder="请输入内容" />