123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- import { nextTick } from 'vue';
- import * as svg from '@element-plus/icons-vue';
- // 获取阿里字体图标
- const getAlicdnIconfont = () => {
- return new Promise((resolve, reject) => {
- nextTick(() => {
- const styles: any = document.styleSheets;
- let sheetsList = [];
- let sheetsIconList = [];
- for (let i = 0; i < styles.length; i++) {
- if (styles[i].href && styles[i].href.indexOf('at.alicdn.com') > -1) {
- sheetsList.push(styles[i]);
- }
- }
- for (let i = 0; i < sheetsList.length; i++) {
- for (let j = 0; j < sheetsList[i].cssRules.length; j++) {
- if (sheetsList[i].cssRules[j].selectorText && sheetsList[i].cssRules[j].selectorText.indexOf('.icon-') > -1) {
- sheetsIconList.push(
- `${sheetsList[i].cssRules[j].selectorText.substring(1, sheetsList[i].cssRules[j].selectorText.length).replace(/\:\:before/gi, '')}`
- );
- }
- }
- }
- if (sheetsIconList.length > 0) resolve(sheetsIconList);
- else reject('未获取到值,请刷新重试');
- });
- });
- };
- // 初始化获取 css 样式,获取 element plus 自带 svg 图标,增加了 ele- 前缀,使用时:ele-Aim
- const getElementPlusIconfont = () => {
- return new Promise((resolve, reject) => {
- nextTick(() => {
- const icons = svg as any;
- const sheetsIconList = [];
- for (const i in icons) {
- sheetsIconList.push(`ele-${icons[i].name}`);
- }
- if (sheetsIconList.length > 0) resolve(sheetsIconList);
- else reject('未获取到值,请刷新重试');
- });
- });
- };
- // 初始化获取 css 样式,这里使用 fontawesome 的图标
- const getAwesomeIconfont = () => {
- return new Promise((resolve, reject) => {
- nextTick(() => {
- const styles: any = document.styleSheets;
- let sheetsList = [];
- let sheetsIconList = [];
- for (let i = 0; i < styles.length; i++) {
- if (styles[i].href && styles[i].href.indexOf('netdna.bootstrapcdn.com') > -1) {
- sheetsList.push(styles[i]);
- }
- }
- for (let i = 0; i < sheetsList.length; i++) {
- for (let j = 0; j < sheetsList[i].cssRules.length; j++) {
- if (
- sheetsList[i].cssRules[j].selectorText &&
- sheetsList[i].cssRules[j].selectorText.indexOf('.fa-') === 0 &&
- sheetsList[i].cssRules[j].selectorText.indexOf(',') === -1
- ) {
- if (/::before/.test(sheetsList[i].cssRules[j].selectorText)) {
- sheetsIconList.push(
- `${sheetsList[i].cssRules[j].selectorText.substring(1, sheetsList[i].cssRules[j].selectorText.length).replace(/\:\:before/gi, '')}`
- );
- }
- }
- }
- }
- if (sheetsIconList.length > 0) resolve(sheetsIconList.reverse());
- else reject('未获取到值,请刷新重试');
- });
- });
- };
- const getFlagIconfont = () => {
- return new Promise((resolve, reject) => {
- nextTick(() => {
- const styles: any = document.styleSheets;
- let sheetsList = [];
- let sheetsIconList = [];
- for (let i = 0; i < styles.length; i++) {
- if (styles[i].href && styles[i].href.indexOf('cdn.jsdelivr.net') > -1) {
- sheetsList.push(styles[i]);
- }
- }
- for (let i = 0; i < sheetsList.length; i++) {
- for (let j = 0; j < sheetsList[i].cssRules.length; j++) {
- if (
- sheetsList[i].cssRules[j].selectorText &&
- sheetsList[i].cssRules[j].selectorText.indexOf('.fi-') === 0 &&
- !sheetsList[i].cssRules[j].selectorText.endsWith('.fis')
- ) {
- sheetsIconList.push(
- `${sheetsList[i].cssRules[j].selectorText.substring(1, sheetsList[i].cssRules[j].selectorText.length)}`
- );
- }
- }
- }
- if (sheetsIconList.length > 0) resolve(sheetsIconList.reverse());
- else reject('未获取到值,请刷新重试');
- })
- })
- }
- /**
- * 获取字体图标 `document.styleSheets`
- * @method ali 获取阿里字体图标 `<i class="iconfont 图标类名"></i>`
- * @method ele 获取 element plus 自带图标 `<i class="图标类名"></i>`
- * @method ali 获取 fontawesome 的图标 `<i class="fa 图标类名"></i>`
- */
- const initIconfont = {
- // iconfont
- ali: () => {
- return getAlicdnIconfont();
- },
- // element plus
- ele: () => {
- return getElementPlusIconfont();
- },
- // fontawesome
- awe: () => {
- return getAwesomeIconfont();
- },
- flag: () => {
- return getFlagIconfont();
- }
- };
- // 导出方法
- export default initIconfont;
|