diff --git a/package.json b/package.json index eef8a26..f756b5f 100644 --- a/package.json +++ b/package.json @@ -54,6 +54,7 @@ "less-loader": "^5.0.0", "naive-ui": "^2.19.3", "prettier": "^2.2.1", + "svg-sprite-loader": "^6.0.11", "vite": "^2.6.4", "vite-plugin-tauri": "^0.1.3", "vite-svg-loader": "^2.2.0", diff --git a/src/assets/svgs/Play.svg b/src/assets/svgs/Play.svg new file mode 100644 index 0000000..b452be6 --- /dev/null +++ b/src/assets/svgs/Play.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/svgIcon.vue b/src/components/svgIcon.vue new file mode 100644 index 0000000..6bab4c7 --- /dev/null +++ b/src/components/svgIcon.vue @@ -0,0 +1,40 @@ + + + + + diff --git a/src/main.js b/src/main.js index 1e4d8f2..861940c 100644 --- a/src/main.js +++ b/src/main.js @@ -3,6 +3,7 @@ import App from "./App.vue"; import router from "./router"; import store from "./store"; import VueLazyLoad from 'vue3-lazyload' +import svgIcon from '@/components/svgIcon.vue' createApp(App) .use(store) @@ -20,4 +21,5 @@ createApp(App) // } log: false, //关闭log }) +.component('svg-icon', svgIcon) .mount("#app"); diff --git a/src/plugins/svgBuilder.js b/src/plugins/svgBuilder.js new file mode 100644 index 0000000..6152426 --- /dev/null +++ b/src/plugins/svgBuilder.js @@ -0,0 +1,74 @@ +import { readFileSync, readdirSync } from 'fs' + +let idPerfix = '' +const svgTitle = /+].*?)>/ +const clearHeightWidth = /(width|height)="([^>+].*?)"/g + +const hasViewBox = /(viewBox="[^>+].*?")/g + +const clearReturn = /(\r)|(\n)/g + +function findSvgFile(dir) { + const svgRes = [] + const dirents = readdirSync(dir, { + withFileTypes: true + }) + for (const dirent of dirents) { + if (dirent.isDirectory()) { + svgRes.push(...findSvgFile(dir + dirent.name + '/')) + } else { + const svg = readFileSync(dir + dirent.name) + .toString() + .replace(clearReturn, '') + .replace(svgTitle, ($1, $2) => { + // console.log(++i) + // console.log(dirent.name) + let width = 0 + let height = 0 + let content = $2.replace( + clearHeightWidth, + (s1, s2, s3) => { + if (s2 === 'width') { + width = s3 + } else if (s2 === 'height') { + height = s3 + } + return '' + } + ) + if (!hasViewBox.test($2)) { + content += `viewBox="0 0 ${width} ${height}"` + } + return `` + }) + .replace('', '') + svgRes.push(svg) + } + } + return svgRes +} + +export const svgBuilder = (path, perfix = 'icon') => { + if (path === '') return + idPerfix = perfix + const res = findSvgFile(path) + // console.log(res.length) + // const res = [] + return { + name: 'svg-transform', + transformIndexHtml(html) { + return html.replace( + '', + ` + + + ${res.join('')} + + ` + ) + } + } +} \ No newline at end of file diff --git a/src/views/common/SongCtrl.vue b/src/views/common/SongCtrl.vue index fff3e4b..2fbfad3 100644 --- a/src/views/common/SongCtrl.vue +++ b/src/views/common/SongCtrl.vue @@ -2,12 +2,6 @@ import { ref, onMounted, onUnmounted, watch } from "vue"; import { useStore } from "vuex"; import { NButton, NIcon, NSpace, useMessage } from "naive-ui"; -import PlayCircle from "@/assets/svgs/PlayCircle.svg"; -import PlaySkipForward from "@/assets/svgs/PlaySkipForward.svg"; -import PlaySkipBack from "@/assets/svgs/PlaySkipBack.svg"; -import HeartOutline from "@/assets/svgs/HeartOutline.svg"; -import TrashOutline from "@/assets/svgs/TrashOutline.svg"; -import PauseCircle from "@/assets/svgs/PauseCircle.svg"; import { getSongUrl } from "@/network/song"; import pubsub from "pubsub-js"; @@ -236,16 +230,12 @@ onUnmounted(() => { > { @click="resume" > - - - + + + + { type="primary" @click="pause" > - - - - - + - diff --git a/src/views/common/Vol.vue b/src/views/common/Vol.vue index 7a440a5..33e06ac 100644 --- a/src/views/common/Vol.vue +++ b/src/views/common/Vol.vue @@ -66,6 +66,7 @@ onUnmounted(() => {