首页 > 其他分享 >test

test

时间:2024-05-15 21:07:44浏览次数:17  
标签:const title route test path children 路由


<template>
<div/>
</template>
<script>
import annyang from 'annyang'
import cnchar from 'cnchar'
import { menuRoutes } from '@/router/index'

export default {
  name: 'SpeechRecognition',
  data () {
    return {
      routerMap: [],
      topMenuMap: []
    }
  },
  created () {
    this.initializeRouterData()
  },
  mounted () {
    this.initializeSpeechRecognition()
  },

  beforeDestroy () {
    if (annyang) {
      annyang.removeCallback('result', this.handleSpeechResult)
      annyang.abort()
    }
  },

  methods: {
    initializeRouterData () {
      this.routerMap = Object.freeze(this.getAllRoutesMeta(menuRoutes))
      this.topMenuMap = Object.freeze(this.findTopLevelPath(menuRoutes))
    },
    initializeSpeechRecognition () {
      if (annyang) {
        annyang.setLanguage('zh-CN')
        annyang.addCallback('result', this.handleSpeechResult)
        annyang.start()
        this.$message.success('语音助手已运行!')
      } else {
        this.$message.error('抱歉,您的浏览器不支持语音识别。')
      }
    },
    handleSpeechResult (phrases) {
      console.log('您说了:', phrases)
      const [word] = phrases
      if (word) {
        this.gotoPage(word)
      }
    },
    gotoPage (word) {
      const hasKeyWord = word.includes('打开')
      const fullStr = cnchar.spell(word, 'first', 'low')
      const noActionWord = word.replace('打开', '')
      const accurateWord = this.routerMap.find((t) => t.title === noActionWord)
      // 精准匹配
      if (accurateWord) {
        this.navigateToRoute(accurateWord)
        return
      }
      // 模糊匹配
      for (const route of this.routerMap) {
        const { title } = route
        const pinyin = cnchar.spell(title, 'first', 'low')
        if (hasKeyWord && (word.includes(title) || fullStr.includes(pinyin))) {
          this.navigateToRoute(route)
          return
        }
      }
      if (hasKeyWord) {
        this.$message.error('抱歉,未能识别清楚,请重新尝试。')
        return
      }
      console.log('未匹配到关键词', word)
    },
    navigateToRoute (route) {
      const { name: routeName, path, child } = route
      const isTop = this.topMenuMap.some((t) => t.path === path)
      const jumpPath = isTop ? { path, child } : this.topMenuMap.find((t) => t.children.includes(path))

      this.$store.dispatch('permission/setActiveMenuPath', jumpPath).then(() => {
        this.$router.push({ name: routeName })
      })
    },
    // 获取所有一级路由和最底层路由的 meta.title 和 name
    getAllRoutesMeta (routes) {
      const result = []
      routes.forEach(route => {
        // 查找当前路由的最顶级路由路径
        // 将当前路由的 meta.title 和 name 添加到结果数组中
        if (route.meta && route.meta.title && route.name) {
          result.push({
            title: route.meta.title,
            name: route.name,
            path: route.path,
            child: route.children || []
          })
        }
        // 如果当前路由有子路由,则递归获取子路由的 meta.title 和 name
        if (route.children && route.children.length > 0) {
          const childMeta = this.getAllRoutesMeta(route.children)
          result.push(...childMeta)
        }
      })
      return result
    },
    // 获取一级菜单
    findTopLevelPath (routes) {
    // 递归地获取所有子路由的路径
      function getChildren (route) {
        if (!route.children || route.children.length === 0) {
          return []
        } else {
          return route.children.flatMap(child => {
            const childPaths = [child.path]
            if (child.children && child.children.length > 0) {
              // 如果子路由还有子路由,则递归获取子路由的路径
              childPaths.push(...getChildren(child))
            }
            return childPaths
          })
        }
      }

      // 遍历所有路由,找到与当前路由匹配的路由
      return routes.map(route => ({
        path: route.path,
        child: route.children,
        children: getChildren(route)
      }))
    }

  }
}
</script>

<style scoped>
/* Add your styles here */
</style>

标签:const,title,route,test,path,children,路由
From: https://www.cnblogs.com/gdluck/p/18194710

相关文章

  • 接口自动化框架【python+requests+pytest+allure】需要安装的依赖包
    attrs23.2.0certifi2024.2.2cffi1.16.0charset-normalizer3.3.2colorama0.4.6cryptography42.0.5h110.14.0idna3.6iniconfig2.0.0outcome1.3.0.post0packaging24.0pluggy1.4.0pycparser2.21pyOpenSSL24.1.0PySocks1.7.1pytest8.1.1selenium4.2.0sniffio1.3.1......
  • AtCoder Regular Contest 177
    AtCoderRegularContest177A-Exchange问题陈述判断\(n\)个价格分别为\(x_i\)的商品,问能否通过有限数量的\(1\)元,\(5\)元,\(10\)元,\(50\)元,\(100\)元,\(500\)元,购买。思路贪心。每个商品从\(500\)元开始,能用就尽量用。如果中间某个商品无法被满足,则无解,反......
  • [shell:bash] ubuntu_remove_old_kernel_test
    [shell:bash]  ubuntu_remove_old_kernel_test    一、基本信息 1、os:Linuxubuntu6.5.0-35-generic#35-UbuntuSMPPREEMPT_DYNAMICFriApr2611:23:57UTC2024x86_64x86_64x86_64GNU/Linux 2、bash:GNUbash,version5.2.......
  • Pytest参数化用例
    Pytest参数化用例参数化:通过参数的方式传递数据,从而实现数据与脚本分离,并且可以实现用例的重复生成与执行。装饰器:@pytest.mark.parametrize单参数importpytestsearch_list=["appium","selenium","pytest"]#参数化实现测试用例的动态生成#第一种:单参数情况,每一条......
  • pytest Mark标记测试用例
    Mark标记测试用例场景:只执行符合要求的某一部分用例,可以把一个web项目划分为多个模块,然后指定模块名称执行。解决:在测试用例方法上加@pytest.mark.标签名执行:-m执行自定义标记的相关用例pytest-stest_command_param.py-m=webtestpytest-stest_command_param.py-map......
  • AtCoder Beginner Contest 351 E - Jump Distance Sum
    题目链接Hint1:只能斜着走,容易想到黑白棋盘,\((x+y)\%2==0\)位于一个团,\((x+y)\%2==1\)位于另一个团,分别求和。Hint2:\(dist=max(|x1-x2|,|y1-y2|)\),这是切比雪夫距离,将坐标系倾斜\(45^{\circ}\),改为曼哈顿距离\(dist=|x1-x2|+|y1-y2|\),即\(X=x+y,Y=x-y\),这样就可以将横纵坐标......
  • 2024 ICPC National Invitational Collegiate Programming Contest, Wuhan Site
    2024ICPCNationalInvitationalCollegiateProgrammingContest,WuhanSiteI.CyclicAppleStrings题意:给定一个01字符串,每次操作可以将这个字符串向左循环移动任意次数,求让这个字符串变成有序的需要最少几次操作思路:每次只能减少最右边的不和有边界相邻的一个1的长块,每次......
  • Pytest测试框架
    Pytest背景与优势pytest能够支持简单的单元测试和复杂的功能测试;pytest可以结合Requests实现接口测试;结合Selenium、Appium实现自动化功能测试;使用pytest结合Allure集成到Jenkins中可以实现持续集成;pytest支持315种以上的插件,拥有丰富的第三方插件,而且支持定制化插件开发;pyt......
  • Pytest配置文件pytest.ini
    pytest.ini配置pytest.ini是什么pytest.ini是pytest的配置文件可以修改pytest的默认行为不能使用任何中文符号,包括汉字、空格、引号、冒号等等pytest.ini修改用例的命名规则配置日志格式,比代码配置更方便添加标签,防止运行过程报警告错误指定执行目录排除搜索......
  • pytest 学习 - 03 fixture
    前言有的场景setup与teardown无法满足,如:有的用例需要登录才能执行,有的用例不需要登录。fixturefixture可以满足以上特殊的场景。1.只有登录的函数上面加上 @pytest.fixture()2. 在要使用的测试方法中传入(登录函数名称),就先登录案例[email protected]()def......