Skip to content

Commit 0db4294

Browse files
committed
feat: use svg sprite instead svg assets
1 parent 78e379e commit 0db4294

File tree

11 files changed

+486
-318
lines changed

11 files changed

+486
-318
lines changed

package-lock.json

Lines changed: 400 additions & 263 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,11 @@
2121
"lint": "vue-cli-service lint"
2222
},
2323
"peerDependencies": {
24-
"vue": "^2.5.0",
25-
"vue-grid-layout": "^2.1.13"
24+
"vue": "^2.5.0"
2625
},
2726
"dependencies": {
28-
"screenfull": "^4.2.1"
27+
"screenfull": "^4.2.1",
28+
"vue-grid-layout": "^2.3.4"
2929
},
3030
"devDependencies": {
3131
"@vue/cli-plugin-babel": "^3.9.0",
@@ -42,10 +42,10 @@
4242
"less-loader": "^4.1.0",
4343
"postcss-import": "^12.0.1",
4444
"postcss-url": "^8.0.0",
45+
"svg-sprite-loader": "^4.1.6",
4546
"v-tooltip": "^2.0.2",
4647
"ve-charts": "^0.8.1",
4748
"vue": "^2.6.10",
48-
"vue-grid-layout": "^2.3.4",
4949
"vue-router": "^3.0.3",
5050
"vue-template-compiler": "^2.6.10",
5151
"vuex": "^3.0.1"

src/assets/img/fullscreen.svg

Lines changed: 1 addition & 14 deletions
Loading

src/assets/img/refresh.svg

Lines changed: 1 addition & 15 deletions
Loading

src/assets/img/unfullscreen.svg

Lines changed: 1 addition & 14 deletions
Loading

src/components/SvgIcon.vue

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
<template>
2+
<svg :class="svgClass" aria-hidden="true" v-on="$listeners">
3+
<use :xlink:href="iconClass" />
4+
</svg>
5+
</template>
6+
7+
<script>
8+
export default {
9+
name: 'SvgIcon',
10+
props: {
11+
iconName: {
12+
type: String,
13+
required: true
14+
},
15+
className: {
16+
type: String,
17+
default: ''
18+
}
19+
},
20+
computed: {
21+
iconClass () {
22+
return `#icon-${this.iconName}`
23+
},
24+
svgClass () {
25+
if (this.className) {
26+
return 'svg-icon ' + this.className
27+
} else {
28+
return 'svg-icon'
29+
}
30+
}
31+
}
32+
}
33+
</script>
34+
35+
<style scoped>
36+
.svg-icon {
37+
width: 1em;
38+
height: 1em;
39+
vertical-align: -0.15em;
40+
fill: currentColor;
41+
overflow: hidden;
42+
}
43+
</style>

src/index.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
import SmartWidgetGrid from './components/SmartWidgetGrid'
2-
import SmartWidget from './components/SmartWidget'
1+
import './plugins/svg-icon'
2+
import SmartWidgetGrid from './packages/SmartWidgetGrid'
3+
import SmartWidget from './packages/SmartWidget'
34

45
const components = [
56
SmartWidgetGrid,

src/components/SmartWidget.vue renamed to src/packages/SmartWidget.vue

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,15 @@
2020
<div class="widget-header__toolbar">
2121
<!-- collapse icon -->
2222
<a href="#" v-if="!isHasGroup && collapse && !isFullScreen" @click="isCollapsed=!isCollapsed">
23-
<img :src="isCollapsed ? require('../assets/img/expand.svg') : require('../assets/img/collapse.svg')">
23+
<svg-icon :icon-name="isCollapsed ? 'expand' : 'collapse'" />
2424
</a>
2525
<!-- fullscreen icon -->
2626
<a href="#" v-if="fullscreen" @click="onChooseAction">
27-
<img :src="isFullScreen ? require('../assets/img/unfullscreen.svg') : require('../assets/img/fullscreen.svg')">
27+
<svg-icon :icon-name="isFullScreen ? 'unfullscreen' : 'fullscreen'" />
2828
</a>
2929
<!-- refresh icon -->
3030
<a href="#" v-if="refresh && !isFullScreen" @click="$emit('on-refresh')">
31-
<img :src="require('../assets/img/refresh.svg')" alt="">
31+
<svg-icon icon-name="refresh" />
3232
</a>
3333
<slot name="toolbar"></slot>
3434
</div>
@@ -76,15 +76,18 @@ import screenfull from 'screenfull'
7676
import { generateUUID } from '../utils'
7777
7878
// loading mask
79-
import LoadingMask from './LoadingMask'
79+
import LoadingMask from '../components/LoadingMask'
8080
// collapse transition
81-
import CollapseTransition from './collapse-transition'
81+
import CollapseTransition from '../components/collapse-transition'
82+
// svg icon
83+
import SvgIcon from '../components/SvgIcon'
8284
8385
export default {
8486
name: 'SmartWidget',
8587
components: {
8688
LoadingMask,
87-
CollapseTransition
89+
CollapseTransition,
90+
SvgIcon
8891
},
8992
inject: {
9093
layout: {
File renamed without changes.

src/plugins/svg-icon.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
const req = require.context('../assets/img', false, /\.svg$/)
2+
const requireAll = requireContext => requireContext.keys().map(requireContext)
3+
requireAll(req)

0 commit comments

Comments
 (0)