1 line
12 KiB
JSON
1 line
12 KiB
JSON
{"remainingRequest":"/Users/kang/Gitea/vue-element-admin/node_modules/vue-loader/lib/index.js??vue-loader-options!/Users/kang/Gitea/vue-element-admin/src/components/HeaderSearch/index.vue?vue&type=script&lang=js","dependencies":[{"path":"/Users/kang/Gitea/vue-element-admin/src/components/HeaderSearch/index.vue","mtime":1754409279862},{"path":"/Users/kang/Gitea/vue-element-admin/node_modules/cache-loader/dist/cjs.js","mtime":1754409278035},{"path":"/Users/kang/Gitea/vue-element-admin/node_modules/babel-loader/lib/index.js","mtime":1754409277911},{"path":"/Users/kang/Gitea/vue-element-admin/node_modules/cache-loader/dist/cjs.js","mtime":1754409278035},{"path":"/Users/kang/Gitea/vue-element-admin/node_modules/vue-loader/lib/index.js","mtime":1754409279720}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:Ly8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KCi8vIGZ1c2UgaXMgYSBsaWdodHdlaWdodCBmdXp6eS1zZWFyY2ggbW9kdWxlCi8vIG1ha2Ugc2VhcmNoIHJlc3VsdHMgbW9yZSBpbiBsaW5lIHdpdGggZXhwZWN0YXRpb25zCmltcG9ydCBGdXNlIGZyb20gJ2Z1c2UuanMnCmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnCmltcG9ydCBpMThuIGZyb20gJ0AvbGFuZycKCmV4cG9ydCBkZWZhdWx0IHsKICBuYW1lOiAnSGVhZGVyU2VhcmNoJywKICBkYXRhKCkgewogICAgcmV0dXJuIHsKICAgICAgc2VhcmNoOiAnJywKICAgICAgb3B0aW9uczogW10sCiAgICAgIHNlYXJjaFBvb2w6IFtdLAogICAgICBzaG93OiBmYWxzZSwKICAgICAgZnVzZTogdW5kZWZpbmVkCiAgICB9CiAgfSwKICBjb21wdXRlZDogewogICAgcm91dGVzKCkgewogICAgICByZXR1cm4gdGhpcy4kc3RvcmUuZ2V0dGVycy5wZXJtaXNzaW9uX3JvdXRlcwogICAgfSwKICAgIGxhbmcoKSB7CiAgICAgIHJldHVybiB0aGlzLiRzdG9yZS5nZXR0ZXJzLmxhbmd1YWdlCiAgICB9LAogICAgc3VwcG9ydFBpbnlpblNlYXJjaCgpIHsKICAgICAgcmV0dXJuIHRoaXMuJHN0b3JlLnN0YXRlLnNldHRpbmdzLnN1cHBvcnRQaW55aW5TZWFyY2gKICAgIH0KICB9LAogIHdhdGNoOiB7CiAgICBsYW5nKCkgewogICAgICB0aGlzLnNlYXJjaFBvb2wgPSB0aGlzLmdlbmVyYXRlUm91dGVzKHRoaXMucm91dGVzKQogICAgfSwKICAgIHJvdXRlcygpIHsKICAgICAgdGhpcy5zZWFyY2hQb29sID0gdGhpcy5nZW5lcmF0ZVJvdXRlcyh0aGlzLnJvdXRlcykKICAgIH0sCiAgICBzZWFyY2hQb29sKGxpc3QpIHsKICAgICAgLy8gU3VwcG9ydCBwaW55aW4gc2VhcmNoCiAgICAgIGlmICh0aGlzLmxhbmcgPT09ICd6aCcgJiYgdGhpcy5zdXBwb3J0UGlueWluU2VhcmNoKSB7CiAgICAgICAgdGhpcy5hZGRQaW55aW5GaWVsZChsaXN0KQogICAgICB9CiAgICAgIHRoaXMuaW5pdEZ1c2UobGlzdCkKICAgIH0sCiAgICBzaG93KHZhbHVlKSB7CiAgICAgIGlmICh2YWx1ZSkgewogICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmNsb3NlKQogICAgICB9IGVsc2UgewogICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmNsb3NlKQogICAgICB9CiAgICB9CiAgfSwKICBtb3VudGVkKCkgewogICAgdGhpcy5zZWFyY2hQb29sID0gdGhpcy5nZW5lcmF0ZVJvdXRlcyh0aGlzLnJvdXRlcykKICB9LAogIG1ldGhvZHM6IHsKICAgIGFzeW5jIGFkZFBpbnlpbkZpZWxkKGxpc3QpIHsKICAgICAgY29uc3QgeyBkZWZhdWx0OiBwaW55aW4gfSA9IGF3YWl0IGltcG9ydCgncGlueWluJykKICAgICAgaWYgKEFycmF5LmlzQXJyYXkobGlzdCkpIHsKICAgICAgICBsaXN0LmZvckVhY2goZWxlbWVudCA9PiB7CiAgICAgICAgICBjb25zdCB0aXRsZSA9IGVsZW1lbnQudGl0bGUKICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRpdGxlKSkgewogICAgICAgICAgICB0aXRsZS5mb3JFYWNoKHYgPT4gewogICAgICAgICAgICAgIHYgPSBwaW55aW4odiwgewogICAgICAgICAgICAgICAgc3R5bGU6IHBpbnlpbi5TVFlMRV9OT1JNQUwKICAgICAgICAgICAgICB9KS5qb2luKCcnKQogICAgICAgICAgICAgIGVsZW1lbnQucGlueWluVGl0bGUgPSB2CiAgICAgICAgICAgIH0pCiAgICAgICAgICB9CiAgICAgICAgfSkKICAgICAgICByZXR1cm4gbGlzdAogICAgICB9CiAgICB9LAogICAgY2xpY2soKSB7CiAgICAgIHRoaXMuc2hvdyA9ICF0aGlzLnNob3cKICAgICAgaWYgKHRoaXMuc2hvdykgewogICAgICAgIHRoaXMuJHJlZnMuaGVhZGVyU2VhcmNoU2VsZWN0ICYmIHRoaXMuJHJlZnMuaGVhZGVyU2VhcmNoU2VsZWN0LmZvY3VzKCkKICAgICAgfQogICAgfSwKICAgIGNsb3NlKCkgewogICAgICB0aGlzLiRyZWZzLmhlYWRlclNlYXJjaFNlbGVjdCAmJiB0aGlzLiRyZWZzLmhlYWRlclNlYXJjaFNlbGVjdC5ibHVyKCkKICAgICAgdGhpcy5vcHRpb25zID0gW10KICAgICAgdGhpcy5zaG93ID0gZmFsc2UKICAgIH0sCiAgICBjaGFuZ2UodmFsKSB7CiAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHZhbC5wYXRoKQogICAgICB0aGlzLnNlYXJjaCA9ICcnCiAgICAgIHRoaXMub3B0aW9ucyA9IFtdCiAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHsKICAgICAgICB0aGlzLnNob3cgPSBmYWxzZQogICAgICB9KQogICAgfSwKICAgIGluaXRGdXNlKGxpc3QpIHsKICAgICAgdGhpcy5mdXNlID0gbmV3IEZ1c2UobGlzdCwgewogICAgICAgIHNob3VsZFNvcnQ6IHRydWUsCiAgICAgICAgdGhyZXNob2xkOiAwLjQsCiAgICAgICAgbG9jYXRpb246IDAsCiAgICAgICAgZGlzdGFuY2U6IDEwMCwKICAgICAgICBtYXhQYXR0ZXJuTGVuZ3RoOiAzMiwKICAgICAgICBtaW5NYXRjaENoYXJMZW5ndGg6IDEsCiAgICAgICAga2V5czogW3sKICAgICAgICAgIG5hbWU6ICd0aXRsZScsCiAgICAgICAgICB3ZWlnaHQ6IDAuNwogICAgICAgIH0sIHsKICAgICAgICAgIG5hbWU6ICdwaW55aW5UaXRsZScsCiAgICAgICAgICB3ZWlnaHQ6IDAuMwogICAgICAgIH0sIHsKICAgICAgICAgIG5hbWU6ICdwYXRoJywKICAgICAgICAgIHdlaWdodDogMC4zCiAgICAgICAgfV0KICAgICAgfSkKICAgIH0sCiAgICAvLyBGaWx0ZXIgb3V0IHRoZSByb3V0ZXMgdGhhdCBjYW4gYmUgZGlzcGxheWVkIGluIHRoZSBzaWRlYmFyCiAgICAvLyBBbmQgZ2VuZXJhdGUgdGhlIGludGVybmF0aW9uYWxpemVkIHRpdGxlCiAgICBnZW5lcmF0ZVJvdXRlcyhyb3V0ZXMsIGJhc2VQYXRoID0gJy8nLCBwcmVmaXhUaXRsZSA9IFtdKSB7CiAgICAgIGxldCByZXMgPSBbXQogICAgICBmb3IgKGNvbnN0IHJvdXRlciBvZiByb3V0ZXMpIHsKICAgICAgICAvLyBza2lwIGhpZGRlbiByb3V0ZXIKICAgICAgICBpZiAocm91dGVyLmhpZGRlbikgeyBjb250aW51ZSB9CiAgICAgICAgY29uc3QgZGF0YSA9IHsKICAgICAgICAgIHBhdGg6IHBhdGgucmVzb2x2ZShiYXNlUGF0aCwgcm91dGVyLnBhdGgpLAogICAgICAgICAgdGl0bGU6IFsuLi5wcmVmaXhUaXRsZV0KICAgICAgICB9CiAgICAgICAgaWYgKHJvdXRlci5tZXRhICYmIHJvdXRlci5tZXRhLnRpdGxlKSB7CiAgICAgICAgICAvLyBnZW5lcmF0ZSBpbnRlcm5hdGlvbmFsaXplZCB0aXRsZQogICAgICAgICAgY29uc3QgaTE4bnRpdGxlID0gaTE4bi50KGByb3V0ZS4ke3JvdXRlci5tZXRhLnRpdGxlfWApCiAgICAgICAgICBkYXRhLnRpdGxlID0gWy4uLmRhdGEudGl0bGUsIGkxOG50aXRsZV0KICAgICAgICAgIGlmIChyb3V0ZXIucmVkaXJlY3QgIT09ICdub1JlZGlyZWN0JykgewogICAgICAgICAgICAvLyBvbmx5IHB1c2ggdGhlIHJvdXRlcyB3aXRoIHRpdGxlCiAgICAgICAgICAgIC8vIHNwZWNpYWwgY2FzZTogbmVlZCB0byBleGNsdWRlIHBhcmVudCByb3V0ZXIgd2l0aG91dCByZWRpcmVjdAogICAgICAgICAgICByZXMucHVzaChkYXRhKQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyByZWN1cnNpdmUgY2hpbGQgcm91dGVzCiAgICAgICAgaWYgKHJvdXRlci5jaGlsZHJlbikgewogICAgICAgICAgY29uc3QgdGVtcFJvdXRlcyA9IHRoaXMuZ2VuZXJhdGVSb3V0ZXMocm91dGVyLmNoaWxkcmVuLCBkYXRhLnBhdGgsIGRhdGEudGl0bGUpCiAgICAgICAgICBpZiAodGVtcFJvdXRlcy5sZW5ndGggPj0gMSkgewogICAgICAgICAgICByZXMgPSBbLi4ucmVzLCAuLi50ZW1wUm91dGVzXQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gcmVzCiAgICB9LAogICAgcXVlcnlTZWFyY2gocXVlcnkpIHsKICAgICAgaWYgKHF1ZXJ5ICE9PSAnJykgewogICAgICAgIHRoaXMub3B0aW9ucyA9IHRoaXMuZnVzZS5zZWFyY2gocXVlcnkpCiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5vcHRpb25zID0gW10KICAgICAgfQogICAgfQogIH0KfQo="},{"version":3,"sources":["index.vue"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAoBA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"index.vue","sourceRoot":"src/components/HeaderSearch","sourcesContent":["<template>\n <div :class=\"{'show':show}\" class=\"header-search\">\n <svg-icon class-name=\"search-icon\" icon-class=\"search\" @click.stop=\"click\" />\n <el-select\n ref=\"headerSearchSelect\"\n v-model=\"search\"\n :remote-method=\"querySearch\"\n filterable\n default-first-option\n remote\n placeholder=\"Search\"\n class=\"header-search-select\"\n @change=\"change\"\n >\n <el-option v-for=\"item in options\" :key=\"item.path\" :value=\"item\" :label=\"item.title.join(' > ')\" />\n </el-select>\n </div>\n</template>\n\n<script>\n// fuse is a lightweight fuzzy-search module\n// make search results more in line with expectations\nimport Fuse from 'fuse.js'\nimport path from 'path'\nimport i18n from '@/lang'\n\nexport default {\n name: 'HeaderSearch',\n data() {\n return {\n search: '',\n options: [],\n searchPool: [],\n show: false,\n fuse: undefined\n }\n },\n computed: {\n routes() {\n return this.$store.getters.permission_routes\n },\n lang() {\n return this.$store.getters.language\n },\n supportPinyinSearch() {\n return this.$store.state.settings.supportPinyinSearch\n }\n },\n watch: {\n lang() {\n this.searchPool = this.generateRoutes(this.routes)\n },\n routes() {\n this.searchPool = this.generateRoutes(this.routes)\n },\n searchPool(list) {\n // Support pinyin search\n if (this.lang === 'zh' && this.supportPinyinSearch) {\n this.addPinyinField(list)\n }\n this.initFuse(list)\n },\n show(value) {\n if (value) {\n document.body.addEventListener('click', this.close)\n } else {\n document.body.removeEventListener('click', this.close)\n }\n }\n },\n mounted() {\n this.searchPool = this.generateRoutes(this.routes)\n },\n methods: {\n async addPinyinField(list) {\n const { default: pinyin } = await import('pinyin')\n if (Array.isArray(list)) {\n list.forEach(element => {\n const title = element.title\n if (Array.isArray(title)) {\n title.forEach(v => {\n v = pinyin(v, {\n style: pinyin.STYLE_NORMAL\n }).join('')\n element.pinyinTitle = v\n })\n }\n })\n return list\n }\n },\n click() {\n this.show = !this.show\n if (this.show) {\n this.$refs.headerSearchSelect && this.$refs.headerSearchSelect.focus()\n }\n },\n close() {\n this.$refs.headerSearchSelect && this.$refs.headerSearchSelect.blur()\n this.options = []\n this.show = false\n },\n change(val) {\n this.$router.push(val.path)\n this.search = ''\n this.options = []\n this.$nextTick(() => {\n this.show = false\n })\n },\n initFuse(list) {\n this.fuse = new Fuse(list, {\n shouldSort: true,\n threshold: 0.4,\n location: 0,\n distance: 100,\n maxPatternLength: 32,\n minMatchCharLength: 1,\n keys: [{\n name: 'title',\n weight: 0.7\n }, {\n name: 'pinyinTitle',\n weight: 0.3\n }, {\n name: 'path',\n weight: 0.3\n }]\n })\n },\n // Filter out the routes that can be displayed in the sidebar\n // And generate the internationalized title\n generateRoutes(routes, basePath = '/', prefixTitle = []) {\n let res = []\n for (const router of routes) {\n // skip hidden router\n if (router.hidden) { continue }\n const data = {\n path: path.resolve(basePath, router.path),\n title: [...prefixTitle]\n }\n if (router.meta && router.meta.title) {\n // generate internationalized title\n const i18ntitle = i18n.t(`route.${router.meta.title}`)\n data.title = [...data.title, i18ntitle]\n if (router.redirect !== 'noRedirect') {\n // only push the routes with title\n // special case: need to exclude parent router without redirect\n res.push(data)\n }\n }\n // recursive child routes\n if (router.children) {\n const tempRoutes = this.generateRoutes(router.children, data.path, data.title)\n if (tempRoutes.length >= 1) {\n res = [...res, ...tempRoutes]\n }\n }\n }\n return res\n },\n querySearch(query) {\n if (query !== '') {\n this.options = this.fuse.search(query)\n } else {\n this.options = []\n }\n }\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.header-search {\n font-size: 0 !important;\n .search-icon {\n cursor: pointer;\n font-size: 18px;\n vertical-align: middle;\n }\n .header-search-select {\n font-size: 18px;\n transition: width 0.2s;\n width: 0;\n overflow: hidden;\n background: transparent;\n border-radius: 0;\n display: inline-block;\n vertical-align: middle;\n\n ::v-deep .el-input__inner {\n border-radius: 0;\n border: 0;\n padding-left: 0;\n padding-right: 0;\n box-shadow: none !important;\n border-bottom: 1px solid #d9d9d9;\n vertical-align: middle;\n }\n }\n &.show {\n .header-search-select {\n width: 210px;\n margin-left: 10px;\n }\n }\n}\n</style>\n"]}]} |