Prechádzať zdrojové kódy

```
feat(api): 新增分类列表查询接口并调整参数过滤逻辑

- 新增 getCategoryList 函数用于查询指定层级分类信息
- 注释掉请求参数空值过滤逻辑,保留原始参数传递

feat(workflowTrade): 优化工作流交易页面筛选功能

- 实现平台分类筛选功能,支持按一级分类进行筛选
- 添加需求状态筛选,支持报名中和已结束状态
- 集成日期范围选择器,支持按发布时间范围筛选
- 调整搜索表单结构,添加发布时
间范围字段
- 添加分类列表数据获取和处理逻辑
- 为筛选项添加点击交互和样式控制
```

zhangningning 1 mesiac pred
rodič
commit
8ad479c5b7

+ 4 - 0
src/api/category.js

@@ -1,5 +1,9 @@
 import request from './request.js'
 
+// categoryLevel=1  查询某个层级分类信息
+export function getCategoryList(data = {}) {
+  return request.get('/category/list',data)
+}
 // 查询分类信息(返回树状结构)categoryId
 export function getCategoryListTree(data = {}) {
   return request.get('/category/listTree',data)

+ 7 - 7
src/api/request.js

@@ -24,13 +24,13 @@ request.interceptors.request.use(
     // 处理请求参数
     if (config.method === 'get' && config.params) {
       // 过滤掉空值参数
-      const filteredParams = {}
-      Object.keys(config.params).forEach(key => {
-        if (config.params[key] !== null && config.params[key] !== undefined && config.params[key] !== '') {
-          filteredParams[key] = config.params[key]
-        }
-      })
-      config.params = filteredParams
+      // const filteredParams = {}
+      // Object.keys(config.params).forEach(key => {
+      //   if (config.params[key] !== null && config.params[key] !== undefined && config.params[key] !== '') {
+      //     filteredParams[key] = config.params[key]
+      //   }
+      // })
+      // config.params = filteredParams
     }
 
     // 支持 formData

+ 54 - 8
src/pages/workflowTrade/workflowTrade.vue

@@ -24,20 +24,49 @@
         </div>
         <div class="typeList flex-between typeborder">
           <div class="gray font_size14 typeName">平台:</div>
-          <div class="flex_1 gap10">
-            <div class="font_size14 typeItem active" v-for="item in 5" :key="item">全部</div>
+          <div class="flex_1 gap10"> 
+            <div class="font_size14 typeItem"  :class="{'active':searchFom.categoryId1 === ''}"
+            @click="searchFom.categoryId1 = ''; getList('init');"
+            :key="-1">
+              全部
+            </div>
+            <div class="font_size14 typeItem"  :class="{'active':item.categoryId === searchFom.categoryId1}"
+            @click="searchFom.categoryId1 = item.categoryId; getList('init');"
+            v-for="item in CategoryList" :key="item.categoryId">
+              {{item.categoryName}}
+            </div>
           </div>
         </div>
         <div class="typeList flex-between typeborder">
           <div class="gray font_size14 typeName">需求状态:</div>
           <div class="flex_1 gap10">
-            <div class="font_size14 typeItem active" v-for="item in 5" :key="item">全部</div>
+            <div class="font_size14 typeItem" 
+             :class="{'active':searchFom.applyStatus == ''}"
+             @click="searchFom.applyStatus = ''; getList('init');"
+             :key="-1">全部</div>
+            <div class="font_size14 typeItem"
+             :class="{'active':item.applyStatus === searchFom.applyStatus}"
+             @click="searchFom.applyStatus = item.applyStatus; getList('init');"
+             v-for="item in [{applyStatus:'1',applyStatusName:'报名中'},{applyStatus:'2',applyStatusName:'已结束'}]" :key="item.applyStatus">
+              {{item.applyStatusName}}
+            </div>
           </div>
         </div>
         <div class="typeList flex-between">
           <div class="gray font_size14 typeName">发布时间:</div>
-          <div class="flex_1 gap10">
-            <div class="font_size14 typeItem active" v-for="item in 5" :key="item">全部</div>
+          <div class="flex_1">
+            <div style="width: 320px">
+              <el-date-picker
+                size="large"
+                v-model="publishTime"
+                type="daterange"
+                placeholder="选择日期范围"
+                format="YYYY-MM-DD"
+                value-format="YYYY-MM-DD"
+                :disabled-date="time => time.getTime() > Date.now()"
+                @change="getList('init')"
+              />
+            </div>
           </div>
         </div>
       </div>
@@ -121,6 +150,7 @@
 
   import Pagination from '@/components/Pagination.vue'
   import { getQuestList } from '@/api/workflowTrade.js'
+  import { getCategoryList } from '@/api/category.js'
 
 
 
@@ -134,25 +164,30 @@
 
   //获取参数
   const query = route.query
-  const activePlatform = ref(query.activePlatform || '')
   //获取当前路由路径
   // const currentPath = ref(router.currentRoute.value.path)
   const isChildRoute = computed(() => {
     return route.matched.length > 1
   })
+  // 一级分类列表
+  const CategoryList = ref([])
+
   // 添加分页相关数据
   const list = ref([])
   const listTotal = ref(0)
+  const publishTime = ref(['', ''])
   const searchFom = reactive({
     categoryId1: '',
-    categoryId2: '',
-    categoryId3: '',
     title: '',
+    applyStatus: '',//1:报名中,2:已结束
+    publishTimeBegin: '',
+    publishTimeEnd: '',
     pageNum: 1,
     pageSize: 10,
   })
   onMounted(() => {
     getList();
+    getCategoryListFn();
   })
   const handlePageChange = (page) => {
     searchFom.pageNum = page
@@ -165,6 +200,8 @@
     if(type === 'init'){
       searchFom.pageNum = 1
     }
+    searchFom.publishTimeBegin = publishTime.value && publishTime.value[0] ? publishTime.value[0] : ''
+    searchFom.publishTimeEnd = publishTime.value && publishTime.value[1] ? publishTime.value[1] : ''
     const res = await getQuestList(searchFom)
     if(res.code === 200){
       // listTotal.value = res.data.total
@@ -190,6 +227,14 @@
       }
     })
   };
+  const getCategoryListFn = async () => {
+    console.log('获取一级分类列表')
+    const res =  await getCategoryList({categoryLevel:1})
+    if(res.code === 200){
+      console.log('一级分类列表',res.data)
+      CategoryList.value = res.rows || []
+    }
+  }
 </script>
 
 <style scoped lang="scss">
@@ -265,6 +310,7 @@
     }
     .typeItem{
       margin: 0 8px;
+      cursor: pointer;
       &.active{
         background: rgba(45,113,255,0.1);
         border-radius: 4px 4px 4px 4px;