diff --git a/src/components/iconSelector/index.vue b/src/components/iconSelector/index.vue
new file mode 100644
index 0000000..a7911b3
--- /dev/null
+++ b/src/components/iconSelector/index.vue
@@ -0,0 +1,95 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/src/theme/element.scss b/src/theme/element.scss
index 248e354..82dd496 100644
--- a/src/theme/element.scss
+++ b/src/theme/element.scss
@@ -957,3 +957,44 @@
height: 100%;
overflow: auto;
}
+
+/* Popover 弹出框
+------------------------------- */
+.icon-selector-popper {
+ padding: 0 !important;
+ .icon-selector-warp-title {
+ height: 40px;
+ line-height: 40px;
+ padding: 0 15px;
+ }
+ .icon-selector-warp {
+ .icon-selector-warp-row {
+ border-top: 1px solid #ebeef5;
+ border-left: 1px solid #ebeef5;
+ max-height: 260px;
+ overflow-y: auto;
+ .icon-selector-warp-item {
+ display: flex;
+ border-right: 1px solid #ebeef5;
+ border-bottom: 1px solid #ebeef5;
+ padding: 10px;
+ .icon-selector-warp-item-value {
+ transition: all 0.3s ease;
+ i {
+ font-size: 20px;
+ color: #606266;
+ }
+ }
+ &:hover {
+ cursor: pointer;
+ .icon-selector-warp-item-value {
+ i {
+ color: var(--color-primary);
+ transition: all 0.3s ease;
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/src/utils/getStyleSheets.ts b/src/utils/getStyleSheets.ts
new file mode 100644
index 0000000..6cae6b5
--- /dev/null
+++ b/src/utils/getStyleSheets.ts
@@ -0,0 +1,111 @@
+import { nextTick } from "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 自带图标
+const elementPlusIconfont = () => {
+ return new Promise((resolve, reject) => {
+ nextTick(() => {
+ const styles: any = document.styleSheets
+ let sheetsIconList = []
+ for (let i = 0; i < styles.length; i++) {
+ for (let j = 0; j < styles[i].cssRules.length; j++) {
+ if (
+ styles[i].cssRules[j].selectorText &&
+ styles[i].cssRules[j].selectorText.indexOf(".el-icon-") === 0
+ ) {
+ sheetsIconList.push(
+ `${styles[i].cssRules[j].selectorText
+ .substring(1, styles[i].cssRules[j].selectorText.length)
+ .replace(/\:\:before/gi, "")}`
+ )
+ }
+ }
+ }
+ if (sheetsIconList.length > 0) resolve(sheetsIconList)
+ else reject('未获取到值,请刷新重试')
+ })
+ })
+}
+
+// 初始化获取 css 样式,这里使用 fontawesome 的图标
+const awesomeIconfont = () => {
+ 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
+ ) {
+ 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('未获取到值,请刷新重试')
+ })
+ })
+}
+
+// 定义导出方法集合
+const initIconfont = {
+ ali: () => {
+ return getAlicdnIconfont()
+ },
+ ele: () => {
+ return elementPlusIconfont()
+ },
+ awe: () => {
+ return awesomeIconfont()
+ }
+}
+
+// 导出方法
+export default initIconfont
\ No newline at end of file
diff --git a/src/views/fun/selector/index.vue b/src/views/fun/selector/index.vue
index 7769595..eafaef4 100644
--- a/src/views/fun/selector/index.vue
+++ b/src/views/fun/selector/index.vue
@@ -1,14 +1,26 @@
-
+
+
+
+
+
+