Prechádzať zdrojové kódy

feat: 新增筛选业务模型

zhangyuhan 1 rok pred
rodič
commit
30c7fdbcc9

+ 115 - 13
apps/bigmember_pc/src/views/search/composables/search-model/search-bid.js

@@ -3,6 +3,80 @@ import useQuickSearchModel from '@jy/data-models/modules/quick-search/model'
 import { without } from 'lodash'
 import { computed, reactive, ref } from 'vue'
 
+function useSearchFilterModel() {
+  const activeTab = ref('all')
+  const Tabs = [
+    {
+      label: '全部',
+      key: 'all'
+    },
+    {
+      label: '招标采购公告',
+      key: 'bid'
+    },
+    {
+      label: '超前项目',
+      badge: '推荐',
+      key: 'project'
+    }
+  ]
+  const searchTabs = computed(() => {
+    return Tabs.map((v) => {
+      v.active = activeTab.value === v.key
+      return v
+    })
+  })
+
+  const searchState = ref({
+    input: '',
+    // 关键词筛选模式
+    searchMode: '0',
+    matchKeys: [],
+    // 附加关键词筛选模式
+    wordsMode: 0,
+    // 附件关键词组
+    additionalWords: [],
+    selectMoreKey: false
+  })
+
+  const searchModelOptions = [
+    {
+      label: '精准搜索',
+      value: '0'
+    },
+    {
+      label: '模糊搜索',
+      value: '1'
+    }
+  ]
+
+  function getSearchParams() {
+    let params = {
+      searchvalue: searchState.value.input,
+      searchMode: ++searchState.value.searchMode
+    }
+
+    if (searchState.value.selectMoreKey) {
+      params.additionalWords = searchState.value.additionalWords.join(',')
+      params.wordsMode = searchState.value.wordsMode
+    }
+
+    return params
+  }
+
+  function doChangeTab(tab) {
+    activeTab.value = tab.key
+  }
+
+  return {
+    searchState,
+    searchTabs,
+    searchModelOptions,
+    doChangeTab,
+    getSearchParams
+  }
+}
+
 function useSearchBidModel() {
   // 列表顶部操作按钮
   const actions = [
@@ -65,7 +139,7 @@ function useSearchBidModel() {
     doToggleItemSelection,
     doToggleListSelection,
     doClearAllSelection,
-    doQuery
+    doQuery: doRunQuery
   } = useQuickSearchModel({
     type: 'search-bid',
     getParams: () => {
@@ -73,6 +147,14 @@ function useSearchBidModel() {
     }
   })
 
+  function doQuery() {
+    return doRunQuery().then((res) => {
+      searchState.value.matchKeys = res.origin?.heightWords?.split(' ') || [
+        searchState.value.input
+      ]
+    })
+  }
+
   // 列表状态
   const listState = reactive({
     finished,
@@ -82,17 +164,6 @@ function useSearchBidModel() {
     total
   })
 
-  // 获取筛选参数
-  function getParams() {
-    return {
-      reqType: 'lastNews',
-      publishtime: 'fiveyear',
-      selectType: 'content,title',
-      pageNumber: listState.pageNum,
-      pageSize: listState.pageSize
-    }
-  }
-
   // 用于回显复选框选中的 Item
   const activeList = computed(() => {
     return list.value.map((v) => {
@@ -170,7 +241,36 @@ function useSearchBidModel() {
     doQuery()
   }
 
+  // 筛选模型注入
+  const {
+    searchState,
+    searchTabs,
+    searchModelOptions,
+    doChangeTab,
+    getSearchParams
+  } = useSearchFilterModel()
+
+  // 获取筛选参数
+  function getParams() {
+    return Object.assign(
+      {
+        reqType: 'lastNews',
+        publishtime: 'fiveyear',
+        selectType: 'title',
+        pageNumber: listState.pageNum,
+        pageSize: listState.pageSize
+      },
+      getSearchParams()
+    )
+  }
+
   return {
+    // 筛选模型
+    searchState,
+    searchTabs,
+    searchModelOptions,
+    doChangeTab,
+    // 列表模型
     listState,
     activeItemStyleType,
     searchListProps,
@@ -183,4 +283,6 @@ function useSearchBidModel() {
   }
 }
 
-export default useSearchBidModel
+const SearchBidModel = useSearchBidModel()
+
+export default SearchBidModel