iconfont.html 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. {extend name="base"/}
  2. {block name="resources"}
  3. <style>
  4. .iconfont-wrap{display: flex;margin-top: 10px;border-bottom: 1px solid #f1f1f1;}
  5. .iconfont-wrap .iconfont-left{padding: 10px 15px;width: 155px;height:429px; box-sizing: border-box;overflow-y: auto;}
  6. .iconfont-wrap .iconfont-left::-webkit-scrollbar{width: 4px;}
  7. .iconfont-wrap .iconfont-left::-webkit-scrollbar-track{background: rgb(179, 177, 177);border-radius: 10px;}
  8. .iconfont-wrap .iconfont-left::-webkit-scrollbar-thumb{background: rgb(136, 136, 136);border-radius: 10px;}
  9. .iconfont-wrap .iconfont-left::-webkit-scrollbar-thumb:hover{background: rgb(100, 100, 100);border-radius: 10px;}
  10. .iconfont-wrap .iconfont-left::-webkit-scrollbar-thumb:active{background: rgb(68, 68, 68);border-radius: 10px;}
  11. .iconfont-wrap .iconfont-left li{height: 32px;line-height: 32px;padding: 0 10px;margin-bottom: 9px;box-sizing: border-box;border: 1px solid #f1f1f1;border-radius: 3px;cursor: pointer;}
  12. .iconfont-wrap .iconfont-left li.active{color: var(--base-color);border-color: var(--base-color);}
  13. .iconfont-wrap .iconfont-left li:last-child{margin-bottom: 0;}
  14. .iconfont-wrap .iconfont-right{flex: 1;border-left: 1px solid #f1f1f1;}
  15. .iconfont-wrap .iconfont-right ul{padding: 0 10px;display: flex;flex-wrap: wrap;align-content: baseline;box-sizing: border-box;}
  16. .iconfont-wrap .iconfont-right li{margin: 6px 12px;display: flex;justify-content: center;align-items: center;width: 60px;height: 60px;border: 1px solid #f1f1f1;border-radius: 5px;cursor: pointer;}
  17. .iconfont-wrap .iconfont-right li span{font-size: 30px;}
  18. .iconfont-wrap .iconfont-right li .icon{width: 40px;height: 40px;vertical-align: -0.15em;fill: currentColor;overflow: hidden;}
  19. .iconfont-wrap .iconfont-right li:hover, .iconfont-wrap .iconfont-right li.active{color: var(--base-color);border-color: var(--base-color);}
  20. .iconfont-wrap .iconfont-right .empty{text-align: center;padding: 20px;}
  21. #iconPage{padding-right: 30px;text-align: right;}
  22. </style>
  23. {/block}
  24. {block name="body"}
  25. <div class="iconfont-wrap">
  26. <ul class="iconfont-left">
  27. <li data-value="">全部</li>
  28. {foreach name="$icon_type" item="vo" key="k"}
  29. <li data-value="{$k}" {if $k == 'icon-system'}class="active"{/if}>{$vo}</li>
  30. {/foreach}
  31. </ul>
  32. <div class="iconfont-right">
  33. <div class="list-wrap"></div>
  34. <div id="iconPage"></div>
  35. </div>
  36. </div>
  37. {/block}
  38. {block name="script"}
  39. <script id="iconTemplate" type="text/html">
  40. {{# if(d.list.length){ }}
  41. <ul>
  42. {{# layui.each(d.list, function(index, item){ }}
  43. <li data-icon="{{item}}" class="{{item == '{$icon}' && 'active'}}">
  44. <span class="{{item}}"></span>
  45. <!-- <svg class="icon" aria-hidden="true">-->
  46. <!-- <use xlink:href="#{{item}}"></use>-->
  47. <!-- </svg>-->
  48. </li>
  49. {{# }); }}
  50. </ul>
  51. {{# }else{ }}
  52. <div class="empty">无数据</div>
  53. {{# } }}
  54. </script>
  55. <!--<script src="https://cdn3.codesign.qq.com/icons/MQmlyZwl3GjWRA1/latest/iconfont.js"></script>-->
  56. <script>
  57. var laypage, laytpl, limit = 45, currPage = 1, iconData = [],currIcon="";
  58. layui.use(['laypage','laytpl'], function(){
  59. laypage = layui.laypage;
  60. laytpl = layui.laytpl;
  61. getIconData('icon-system'); //默认查询系统
  62. });
  63. // 获取iconfont数据
  64. function getIconData(type) {
  65. $.ajax({
  66. type: 'post',
  67. url: ns.url("shop/diy/iconfont"),
  68. data: {type: type, site_id: ns_url.siteId, app_module: ns_url.appModule},
  69. dataType: 'JSON',
  70. success: function (res) {
  71. if (res.code >= 0) {
  72. iconData = res.data;
  73. currPage = 1;
  74. renderTemplate(iconData);
  75. if(iconData.length>0) {
  76. $("#iconPage").show();
  77. laypage.render({
  78. elem: 'iconPage',
  79. count: iconData.length, //数据总数,从服务端得到
  80. limit: limit,
  81. jump: function (obj, first) {
  82. //obj包含了当前分页的所有参数,比如:
  83. currPage = obj.curr;
  84. //首次不执行
  85. if (!first) {
  86. renderTemplate(iconData);
  87. }
  88. }
  89. });
  90. }else{
  91. $("#iconPage").hide();
  92. }
  93. }
  94. }
  95. });
  96. }
  97. // 渲染模版
  98. function renderTemplate(data){
  99. var iconPagingData = [];
  100. iconPagingData = data.filter((item,index) => {
  101. if((currPage-1)*limit < (index+1) && (index+1) <= currPage*limit){
  102. return item;
  103. }
  104. });
  105. var getTpl = $("#iconTemplate").html();
  106. laytpl(getTpl).render({list: iconPagingData}, function(html){
  107. $(".iconfont-wrap .iconfont-right .list-wrap").html(html);
  108. });
  109. }
  110. // 图标分类
  111. $('.iconfont-left li').click(function () {
  112. $(this).addClass('active').siblings().removeClass('active');
  113. var type = $(this).attr('data-value');
  114. getIconData(type);
  115. });
  116. $("body").on("click",".iconfont-wrap .iconfont-right li",function(){
  117. $(this).addClass("active").siblings().removeClass("active");
  118. currIcon = $(this).attr("data-icon");
  119. window.currIcon = currIcon;
  120. });
  121. function selectIcon(callback) {
  122. if (typeof callback == "function") callback(currIcon);
  123. }
  124. </script>
  125. {/block}