Icons.vue 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587
  1. <template>
  2. <el-dialog :close-on-click-modal="false" title="icon" :visible.sync="isVisible" :width="width" top="50px" center>
  3. <el-input
  4. v-model="name" maxlength="20" class="filter-item search-item" clearable
  5. placeholder="icon"
  6. @keyup.native="searchIcon"
  7. />
  8. <el-tabs v-model="activeName" style="margin-top: -1rem">
  9. <el-tab-pane label="通用类" name="first">
  10. <ul>
  11. <li v-for="icon in icons.commonIcons" :key="icon" class="icons-item">
  12. <span :class="{ active: activeIndex === icon }">
  13. <el-icon :class="icon" :title="icon" @click.native="chooseIcon(icon)" @dblclick.native="confirm" />
  14. </span>
  15. <p>{{ icon }}</p>
  16. </li>
  17. </ul>
  18. </el-tab-pane>
  19. <el-tab-pane label="指向性" name="second">
  20. <ul>
  21. <li v-for="icon in icons.directivityIcons" :key="icon">
  22. <span :class="{ active: activeIndex === icon }">
  23. <el-icon :class="icon" :title="icon" @click.native="chooseIcon(icon)" @dblclick.native="confirm" />
  24. </span>
  25. <p>{{ icon }}</p>
  26. </li>
  27. </ul>
  28. </el-tab-pane>
  29. <el-tab-pane label="填充类" name="third">
  30. <ul>
  31. <li v-for="icon in icons.solidIcons" :key="icon">
  32. <span :class="{ active: activeIndex === icon }">
  33. <el-icon :class="icon" :title="icon" @click.native="chooseIcon(icon)" @dblclick.native="confirm" />
  34. </span>
  35. <p>{{ icon }}</p>
  36. </li>
  37. </ul>
  38. </el-tab-pane>
  39. <el-tab-pane label="食品类" name="fourth">
  40. <ul>
  41. <li v-for="icon in icons.foodIcons" :key="icon">
  42. <span :class="{ active: activeIndex === icon }">
  43. <el-icon :class="icon" :title="icon" @click.native="chooseIcon(icon)" @dblclick.native="confirm" />
  44. </span>
  45. <p>{{ icon }}</p>
  46. </li>
  47. </ul>
  48. </el-tab-pane>
  49. <el-tab-pane label="自定义" name="fifth">
  50. <ul>
  51. <li v-for="icon in icons.customIcons" :key="icon">
  52. <span :class="{ active: activeIndex === icon }">
  53. <el-icon :class="icon" :title="icon" @click.native="chooseIcon(icon)" @dblclick.native="confirm" />
  54. </span>
  55. <p>{{ icon }}</p>
  56. </li>
  57. </ul>
  58. </el-tab-pane>
  59. </el-tabs>
  60. <div slot="footer" class="dialog-footer">
  61. <el-button @click="isVisible = false"> 取消 </el-button>
  62. <el-button type="primary" @click="confirm"> 确定 </el-button>
  63. </div>
  64. </el-dialog>
  65. </template>
  66. <script>
  67. const commonIcons = [
  68. 'el-icon-eleme',
  69. 'el-icon-delete',
  70. 'el-icon-setting',
  71. 'el-icon-user',
  72. 'el-icon-phone-outline',
  73. 'el-icon-more-outline',
  74. 'el-icon-star-off',
  75. 'el-icon-goods',
  76. 'el-icon-warning-outline',
  77. 'el-icon-zoom-in',
  78. 'el-icon-zoom-out',
  79. 'el-icon-remove-outline',
  80. 'el-icon-circle-plus-outline',
  81. 'el-icon-circle-check',
  82. 'el-icon-circle-close',
  83. 'el-icon-help',
  84. 'el-icon-minus',
  85. 'el-icon-plus',
  86. 'el-icon-check',
  87. 'el-icon-close',
  88. 'el-icon-picture-outline',
  89. 'el-icon-picture-outline-round',
  90. 'el-icon-upload2',
  91. 'el-icon-download',
  92. 'el-icon-camera',
  93. 'el-icon-video-camera',
  94. 'el-icon-bell',
  95. 'el-icon-video-pause',
  96. 'el-icon-video-play',
  97. 'el-icon-refresh',
  98. 'el-icon-refresh-right',
  99. 'el-icon-refresh-left',
  100. 'el-icon-finished',
  101. 'el-icon-loading',
  102. 'el-icon-view',
  103. 'el-icon-c-scale-to-original',
  104. 'el-icon-date',
  105. 'el-icon-edit',
  106. 'el-icon-edit-outline',
  107. 'el-icon-folder',
  108. 'el-icon-folder-opened',
  109. 'el-icon-folder-add',
  110. 'el-icon-folder-remove',
  111. 'el-icon-folder-delete',
  112. 'el-icon-folder-checked',
  113. 'el-icon-tickets',
  114. 'el-icon-document-remove',
  115. 'el-icon-document-delete',
  116. 'el-icon-document-copy',
  117. 'el-icon-document-checked',
  118. 'el-icon-document',
  119. 'el-icon-document-add',
  120. 'el-icon-printer',
  121. 'el-icon-paperclip',
  122. 'el-icon-takeaway-box',
  123. 'el-icon-search',
  124. 'el-icon-monitor',
  125. 'el-icon-attract',
  126. 'el-icon-mobile',
  127. 'el-icon-scissors',
  128. 'el-icon-umbrella',
  129. 'el-icon-headset',
  130. 'el-icon-brush',
  131. 'el-icon-mouse',
  132. 'el-icon-coordinate',
  133. 'el-icon-magic-stick',
  134. 'el-icon-reading',
  135. 'el-icon-data-line',
  136. 'el-icon-data-board',
  137. 'el-icon-pie-chart',
  138. 'el-icon-data-analysis',
  139. 'el-icon-collection-tag',
  140. 'el-icon-film',
  141. 'el-icon-suitcase',
  142. 'el-icon-suitcase-1',
  143. 'el-icon-receiving',
  144. 'el-icon-collection',
  145. 'el-icon-files',
  146. 'el-icon-notebook-1',
  147. 'el-icon-notebook-2',
  148. 'el-icon-toilet-paper',
  149. 'el-icon-office-building',
  150. 'el-icon-school',
  151. 'el-icon-table-lamp',
  152. 'el-icon-house',
  153. 'el-icon-no-smoking',
  154. 'el-icon-smoking',
  155. 'el-icon-shopping-cart-full',
  156. 'el-icon-shopping-cart-1',
  157. 'el-icon-shopping-cart-2',
  158. 'el-icon-shopping-bag-1',
  159. 'el-icon-shopping-bag-2',
  160. 'el-icon-sold-out',
  161. 'el-icon-sell',
  162. 'el-icon-present',
  163. 'el-icon-box',
  164. 'el-icon-bank-card',
  165. 'el-icon-money',
  166. 'el-icon-coin',
  167. 'el-icon-wallet',
  168. 'el-icon-discount',
  169. 'el-icon-price-tag',
  170. 'el-icon-news',
  171. 'el-icon-guide',
  172. 'el-icon-male',
  173. 'el-icon-female',
  174. 'el-icon-thumb',
  175. 'el-icon-cpu',
  176. 'el-icon-link',
  177. 'el-icon-connection',
  178. 'el-icon-open',
  179. 'el-icon-turn-off',
  180. 'el-icon-set-up',
  181. 'el-icon-chat-round',
  182. 'el-icon-chat-line-round',
  183. 'el-icon-chat-square',
  184. 'el-icon-chat-dot-round',
  185. 'el-icon-chat-dot-square',
  186. 'el-icon-chat-line-square',
  187. 'el-icon-message',
  188. 'el-icon-postcard',
  189. 'el-icon-position',
  190. 'el-icon-turn-off-microphone',
  191. 'el-icon-microphone',
  192. 'el-icon-close-notification',
  193. 'el-icon-bangzhu',
  194. 'el-icon-time',
  195. 'el-icon-odometer',
  196. 'el-icon-crop',
  197. 'el-icon-aim',
  198. 'el-icon-switch-button',
  199. 'el-icon-full-screen',
  200. 'el-icon-copy-document',
  201. 'el-icon-mic',
  202. 'el-icon-stopwatch',
  203. 'el-icon-medal-1',
  204. 'el-icon-medal',
  205. 'el-icon-trophy',
  206. 'el-icon-trophy-1',
  207. 'el-icon-first-aid-kit',
  208. 'el-icon-discover',
  209. 'el-icon-place',
  210. 'el-icon-location-outline',
  211. 'el-icon-location-information',
  212. 'el-icon-add-location',
  213. 'el-icon-delete-location',
  214. 'el-icon-map-location',
  215. 'el-icon-alarm-clock',
  216. 'el-icon-timer',
  217. 'el-icon-watch-1',
  218. 'el-icon-watch',
  219. 'el-icon-lock',
  220. 'el-icon-unlock',
  221. 'el-icon-key',
  222. 'el-icon-service',
  223. 'el-icon-mobile-phone',
  224. 'el-icon-bicycle',
  225. 'el-icon-truck',
  226. 'el-icon-ship',
  227. 'el-icon-basketball',
  228. 'el-icon-football',
  229. 'el-icon-soccer',
  230. 'el-icon-baseball'
  231. ]
  232. const directivityIcons = [
  233. 'el-icon-d-caret',
  234. 'el-icon-caret-left',
  235. 'el-icon-caret-right',
  236. 'el-icon-caret-bottom',
  237. 'el-icon-caret-top',
  238. 'el-icon-bottom-left',
  239. 'el-icon-bottom-right',
  240. 'el-icon-back',
  241. 'el-icon-right',
  242. 'el-icon-bottom',
  243. 'el-icon-top',
  244. 'el-icon-top-left',
  245. 'el-icon-top-right',
  246. 'el-icon-arrow-left',
  247. 'el-icon-arrow-right',
  248. 'el-icon-arrow-down',
  249. 'el-icon-arrow-up',
  250. 'el-icon-d-arrow-left',
  251. 'el-icon-d-arrow-right',
  252. 'el-icon-sort',
  253. 'el-icon-sort-up',
  254. 'el-icon-sort-down',
  255. 'el-icon-rank'
  256. ]
  257. const solidIcons = [
  258. 'el-icon-question',
  259. 'el-icon-info',
  260. 'el-icon-remove',
  261. 'el-icon-circle-plus',
  262. 'el-icon-success',
  263. 'el-icon-error',
  264. 'el-icon-platform-eleme',
  265. 'el-icon-delete-solid',
  266. 'el-icon-s-tools',
  267. 'el-icon-user-solid',
  268. 'el-icon-phone',
  269. 'el-icon-star-on',
  270. 'el-icon-s-goods',
  271. 'el-icon-warning',
  272. 'el-icon-s-help',
  273. 'el-icon-picture',
  274. 'el-icon-upload',
  275. 'el-icon-camera-solid',
  276. 'el-icon-video-camera-solid',
  277. 'el-icon-message-solid',
  278. 'el-icon-s-cooperation',
  279. 'el-icon-s-order',
  280. 'el-icon-s-platform',
  281. 'el-icon-s-fold',
  282. 'el-icon-s-unfold',
  283. 'el-icon-s-operation',
  284. 'el-icon-s-promotion',
  285. 'el-icon-s-home',
  286. 'el-icon-s-release',
  287. 'el-icon-s-ticket',
  288. 'el-icon-s-management',
  289. 'el-icon-s-open',
  290. 'el-icon-s-shop',
  291. 'el-icon-s-marketing',
  292. 'el-icon-s-flag',
  293. 'el-icon-s-comment',
  294. 'el-icon-s-finance',
  295. 'el-icon-s-claim',
  296. 'el-icon-s-custom',
  297. 'el-icon-s-opportunity',
  298. 'el-icon-s-data',
  299. 'el-icon-s-check',
  300. 'el-icon-s-grid',
  301. 'el-icon-menu',
  302. 'el-icon-share',
  303. 'el-icon-d-caret',
  304. 'el-icon-caret-left',
  305. 'el-icon-caret-right',
  306. 'el-icon-caret-bottom',
  307. 'el-icon-caret-top',
  308. 'el-icon-location'
  309. ]
  310. const foodIcons = [
  311. 'el-icon-dish',
  312. 'el-icon-dish-1',
  313. 'el-icon-food',
  314. 'el-icon-chicken',
  315. 'el-icon-fork-spoon',
  316. 'el-icon-knife-fork',
  317. 'el-icon-burger',
  318. 'el-icon-tableware',
  319. 'el-icon-sugar',
  320. 'el-icon-dessert',
  321. 'el-icon-ice-cream',
  322. 'el-icon-hot-water',
  323. 'el-icon-water-cup',
  324. 'el-icon-coffee-cup',
  325. 'el-icon-cold-drink',
  326. 'el-icon-goblet',
  327. 'el-icon-goblet-full',
  328. 'el-icon-goblet-square',
  329. 'el-icon-goblet-square-full',
  330. 'el-icon-refrigerator',
  331. 'el-icon-grape',
  332. 'el-icon-watermelon',
  333. 'el-icon-cherry',
  334. 'el-icon-apple',
  335. 'el-icon-pear',
  336. 'el-icon-orange',
  337. 'el-icon-coffee',
  338. 'el-icon-ice-tea',
  339. 'el-icon-ice-drink',
  340. 'el-icon-milk-tea',
  341. 'el-icon-potato-strips',
  342. 'el-icon-lollipop',
  343. 'el-icon-ice-cream-square',
  344. 'el-icon-ice-cream-round'
  345. ]
  346. const customIcons = [
  347. 'zk-icon-activity',
  348. 'zk-icon-binding',
  349. 'zk-icon-cash',
  350. 'zk-icon-client-list',
  351. 'zk-icon-commodity-group',
  352. 'zk-icon-commodity-set',
  353. 'zk-icon-coupon',
  354. 'zk-icon-customer-details',
  355. 'zk-icon-discount',
  356. 'zk-icon-finance',
  357. 'zk-icon-finance-details',
  358. 'zk-icon-generalize',
  359. 'zk-icon-group-booking',
  360. 'zk-icon-label',
  361. 'zk-icon-logistics-set',
  362. 'zk-icon-management-customer',
  363. 'zk-icon-management-rule',
  364. 'zk-icon-management-server',
  365. 'zk-icon-marketing',
  366. 'zk-icon-material',
  367. 'zk-icon-member',
  368. 'zk-icon-menu',
  369. 'zk-icon-operation-plan',
  370. 'zk-icon-operation-plan2',
  371. 'zk-icon-order',
  372. 'zk-icon-pending-order',
  373. 'zk-icon-Price-bundling',
  374. 'zk-icon-sales-order',
  375. 'zk-icon-scene',
  376. 'zk-icon-seckill',
  377. 'zk-icon-segmentation',
  378. 'zk-icon-setting',
  379. 'zk-icon-shop-decoration',
  380. 'zk-icon-spell-group',
  381. 'zk-icon-store',
  382. 'zk-icon-store-set',
  383. 'zk-icon-system',
  384. 'zk-icon-user',
  385. 'zk-icon-wallet'
  386. ]
  387. export default {
  388. name: 'Icons',
  389. props: {
  390. dialogVisible: {
  391. type: Boolean,
  392. default: false
  393. }
  394. },
  395. data() {
  396. return {
  397. name: '',
  398. icons: {
  399. commonIcons,
  400. directivityIcons,
  401. solidIcons,
  402. foodIcons,
  403. customIcons
  404. },
  405. activeIndex: '',
  406. choosedIcon: '',
  407. activeName: 'first',
  408. screenWidth: 0,
  409. width: this.initWidth()
  410. }
  411. },
  412. computed: {
  413. isVisible: {
  414. get() {
  415. return this.dialogVisible
  416. },
  417. set() {
  418. this.close()
  419. }
  420. }
  421. },
  422. mounted() {
  423. window.onresize = () => (() => {
  424. this.width = this.initWidth()
  425. })()
  426. },
  427. methods: {
  428. initWidth() {
  429. this.screenWidth = document.body.clientWidth
  430. if (this.screenWidth < 991) {
  431. return '90%'
  432. } else if (this.screenWidth < 1400) {
  433. return '60%'
  434. }
  435. return '800px'
  436. },
  437. close() {
  438. this.$emit('close')
  439. this.activeName = 'first'
  440. this.choosedIcon = this.activeIndex = ''
  441. },
  442. chooseIcon(icon) {
  443. console.log(icon)
  444. this.activeIndex = icon
  445. this.choosedIcon = icon
  446. },
  447. confirm() {
  448. if (!this.choosedIcon) {
  449. this.$message({
  450. message: '请选择图标',
  451. type: 'warning'
  452. })
  453. return
  454. }
  455. this.$emit('choose', this.choosedIcon)
  456. this.activeName = 'first'
  457. this.choosedIcon = this.activeIndex = ''
  458. },
  459. searchIcon() {
  460. if (this.name.trim() === '') {
  461. this.icons.commonIcons = commonIcons
  462. this.icons.directivityIcons = directivityIcons
  463. this.icons.solidIcons = solidIcons
  464. this.icons.foodIcons = foodIcons
  465. this.icons.customIcons = customIcons
  466. this.activeName = 'first'
  467. }
  468. const commonList = commonIcons.filter((item) => item.indexOf(this.name) !== -1)
  469. const directivityList = directivityIcons.filter((item) => item.indexOf(this.name) !== -1)
  470. const solidList = solidIcons.filter((item) => item.indexOf(this.name) !== -1)
  471. const foodIconsList = foodIcons.filter((item) => item.indexOf(this.name) !== -1)
  472. const customIcons = customIcons.filter((item) => item.indexOf(this.name) !== -1)
  473. this.icons.commonIcons = commonList
  474. this.icons.directivityIcons = directivityList
  475. this.icons.solidIcons = solidList
  476. this.icons.foodIcons = foodIconsList
  477. this.icons.customIcons = customIcons
  478. if (commonList.length > 0) {
  479. this.activeName = 'first'
  480. return
  481. }
  482. if (directivityList.length > 0) {
  483. this.activeName = 'second'
  484. return
  485. }
  486. if (solidList.length > 0) {
  487. this.activeName = 'third'
  488. return
  489. }
  490. if (foodIconsList.length > 0) {
  491. this.activeName = 'fourth'
  492. return
  493. }
  494. if (customIcons.length > 0) {
  495. this.activeName = 'fifth'
  496. return
  497. }
  498. this.activeName = 'first'
  499. }
  500. }
  501. }
  502. </script>
  503. <style lang="scss" scoped>
  504. .search-item {
  505. margin: 0px 0 10px;
  506. }
  507. ul {
  508. // overflow-y: auto;
  509. // padding-left: 0rem;
  510. // margin-top: 0rem;
  511. padding: 0;
  512. margin: 0;
  513. overflow: auto;
  514. zoom: 1;
  515. height: 500px;
  516. li {
  517. // list-style: none;
  518. // float: left;
  519. // width: 60px;
  520. // text-align: center;
  521. // cursor: pointer;
  522. // color: #555;
  523. // transition: color 0.3s ease-in-out, background-color 0.3s ease-in-out;
  524. // position: relative;
  525. // // margin: 3px 0;
  526. // border-radius: 4px;
  527. // background-color: #fff;
  528. // overflow: hidden;
  529. padding: 0;
  530. float: left;
  531. margin: 2px;
  532. width: 100px;
  533. text-align: center;
  534. list-style: none;
  535. cursor: pointer;
  536. color: #5c6b77;
  537. transition: all 0.2s ease;
  538. position: relative;
  539. }
  540. span.active {
  541. i {
  542. border-radius: 2px;
  543. border-color: #4a4a48;
  544. background-color: #4a4a48;
  545. color: #fff;
  546. transition: all 0.3s;
  547. }
  548. }
  549. i {
  550. font-size: 1.7rem;
  551. border: 1px solid #f1f1f1;
  552. padding: 0.2rem;
  553. margin: 0.3rem;
  554. cursor: pointer;
  555. &:hover {
  556. border-radius: 2px;
  557. border-color: #4a4a48;
  558. background-color: #4a4a48;
  559. color: #fff;
  560. transition: all 0.3s;
  561. }
  562. }
  563. li p {
  564. word-break: break-all;
  565. overflow: hidden;
  566. margin: 2px 0;
  567. text-overflow: ellipsis;
  568. white-space: nowrap;
  569. }
  570. }
  571. </style>