Răsfoiți Sursa

Merge branch 'dev/v1.0.18_yf' of jianyu/web into feature/v1.0.18

yangfeng 2 ani în urmă
părinte
comite
cc76106393

+ 2 - 16
apps/work-bench/src/store/modules/work-bench.js

@@ -322,10 +322,9 @@ export default {
         const { searchCode } = payload
         const { searchCode } = payload
         const { error_code: code, data = {} } = await ajaxNavbarConvergeSearch(payload)
         const { error_code: code, data = {} } = await ajaxNavbarConvergeSearch(payload)
         if (code === 0) {
         if (code === 0) {
-          const { entList, procureList, menuList } = data
+          const { entList, procureList } = data
           const ent = {}
           const ent = {}
           const buyer = {}
           const buyer = {}
-          const menu = {}
           if (Object.keys(entList)?.length) {
           if (Object.keys(entList)?.length) {
             ent.list = entList?.data.map(v => {
             ent.list = entList?.data.map(v => {
               return {
               return {
@@ -358,20 +357,7 @@ export default {
             buyer.list = []
             buyer.list = []
             buyer.count = 0
             buyer.count = 0
           }
           }
-          if (Array.isArray(menuList)) {
-            menu.list = menuList.map(v => {
-              return {
-                ...v,
-                title: v.name.replace(/<br\s*\/?>/g, ''),
-                value: replaceKeyword(v.name.replace(/<br\s*\/?>/g, ''), searchCode),
-                label: v.path.replace(/<br\s*\/?>/g, ''),
-                url: v.url
-              }
-            })
-          } else {
-            menu.list = []
-          }
-          commit('changeSearchInfo', { ent, buyer, menu })
+          commit('changeSearchInfo', { ent, buyer })
         }
         }
       } catch (error) {
       } catch (error) {
         commit('changeSearchInfo', {})
         commit('changeSearchInfo', {})

+ 34 - 1
packages/work-bench-frame/packages/components/Navbar/components/search.vue

@@ -78,6 +78,7 @@
 <script>
 <script>
 
 
 import { mapMutations, mapState, mapActions, mapGetters } from 'vuex'
 import { mapMutations, mapState, mapActions, mapGetters } from 'vuex'
+import { replaceKeyword, flatTabsMenu } from '../../../utils/utils'
 import SearchList from './list.vue'
 import SearchList from './list.vue'
 
 
 export default {
 export default {
@@ -104,6 +105,10 @@ export default {
       'input',
       'input',
       'EVENT_NAME'
       'EVENT_NAME'
     ]),
     ]),
+    ...mapState('work-bench/menu', [
+      'flatMenus',
+      'menus'
+    ]),
     ...mapGetters('work-bench/menu', [
     ...mapGetters('work-bench/menu', [
       'canFilter'
       'canFilter'
     ]),
     ]),
@@ -266,13 +271,41 @@ export default {
     onChangeInput (value, from) {
     onChangeInput (value, from) {
       if (value) {
       if (value) {
         // 标讯搜索纯展示,不依赖请求,直接展示输入结果
         // 标讯搜索纯展示,不依赖请求,直接展示输入结果
+        const flatMenus = JSON.parse(JSON.stringify(this.menus))
+        let menuList = []
+        if (Array.isArray(flatMenus)) {
+          const filterList = []
+          const level3List = []
+          flatMenus.forEach(item => {
+            const obj = { ...item, children: flatTabsMenu(item.child) }
+            filterList.push(obj)
+          })
+          const newList = filterList.filter(v => v.children && v.children.length > 0)
+          newList.forEach(s => {
+            level3List.push(...s.children)
+          })
+          const filterLevel3List = level3List.map(v => {
+            return {
+              ...v,
+              title: v.name.replace(/<br\s*\/?>/g, ''),
+              value: replaceKeyword(v.name.replace(/<br\s*\/?>/g, ''), value),
+              label: v._compute?._label.replace(/<br\s*\/?>/g, '').replace(/-/g, ' > '),
+              url: v.url
+            }
+          })
+          menuList = filterLevel3List.filter(v => {
+            return v.name.indexOf(value) > -1
+          })
+        } else {
+          menuList = []
+        }
         this.changeSearchInfo({
         this.changeSearchInfo({
           bidding: {
           bidding: {
             title: `查看<span class="highlight-text">“${value}”</span>的标讯搜索结果`
             title: `查看<span class="highlight-text">“${value}”</span>的标讯搜索结果`
           },
           },
           ent: { list: [] },
           ent: { list: [] },
           buyer: { list: [] },
           buyer: { list: [] },
-          menu: { list: [] }
+          menu: { list: menuList }
         })
         })
         this.navbarConvergeSearch({
         this.navbarConvergeSearch({
           searchCode: value
           searchCode: value

+ 72 - 0
packages/work-bench-frame/packages/utils/utils.js

@@ -0,0 +1,72 @@
+export function replaceKeyword (value, oldChar, newChar = ['<span class="highlight-text">', '</span>']) {
+  if (!oldChar || !newChar) return value
+  // oldChar的字符串数组,用来循环替换
+  let oldCharArr = []
+
+  if (Array.isArray(oldChar)) {
+    oldCharArr = oldChar.concat()
+  } else {
+    oldCharArr.push(oldChar)
+  }
+
+  // 数组去重
+  oldCharArr = Array.from(new Set(oldCharArr))
+
+  try {
+    oldCharArr.forEach(function (item) {
+      // 去空格之后为空字符串,则直接跳过当前替换
+      if (item && item.replace(/\s+/g, '')) {
+        let oc = item
+        oc = oc.replace(/\$/g, '\\$')
+          .replace(/\(/g, '\\(')
+          .replace(/\)/g, '\\)')
+          .replace(/\*/g, '\\*')
+          .replace(/\+/g, '\\+')
+          .replace(/\./g, '\\.')
+          .replace(/\[/g, '\\[')
+          .replace(/\]/g, '\\]')
+          .replace(/\?/g, '\\?')
+          .replace(/\\/g, '\\')
+          .replace(/\//g, '\\/')
+          .replace(/\^/g, '\\^')
+          .replace(/\{/g, '\\{')
+          .replace(/\}/g, '\\}')
+          .replace(/\|/g, '\\|')
+
+        if (Array.isArray(newChar)) {
+          // 批量高亮
+          const tempV = value
+          value = value.replace(new RegExp('(' + oc + ')', 'gmi'), newChar[0] + oc + newChar[1])
+          if (value === tempV && oc.indexOf('+') !== -1) {
+            const splitReg = oc.split('\\+')
+            splitReg.forEach((v) => {
+              value = value.replace(new RegExp('(' + v + ')', 'gmi'), newChar[0] + v + newChar[1])
+            })
+          }
+        } else {
+          // 普通单个高亮
+          value = value.replace(new RegExp('(' + oc + ')', 'gmi'), newChar)
+        }
+      }
+    })
+  } catch (e) {
+    console.log(e)
+    return value
+  }
+  return value
+}
+
+export function flatTabsMenu (list = []) {
+  let children = []
+  if (Array.isArray(list) && list.length !== 0) {
+    list.forEach(menu => {
+      if (menu.child?.length > 0) {
+        const arr = flatTabsMenu(menu.child)
+        children = children.concat(arr)
+      } else {
+        children.push(menu)
+      }
+    })
+  }
+  return children
+}