| <div class="layui-card-header">本地便签</div> | 
| <div class="note-wrapper"></div> | 
| <div class="note-empty"> | 
|     <i class="layui-icon layui-icon-face-surprised"></i> | 
|     <p>没有便签</p> | 
| </div> | 
| <div class="btn-circle" id="noteAddBtn" title="添加便签" style="position: absolute;"> | 
|     <i class="layui-icon layui-icon-add-1"></i> | 
| </div> | 
|   | 
| <script> | 
|     layui.use(['layer', 'form', 'util', 'admin'], function () { | 
|         var $ = layui.jquery; | 
|         var layer = layui.layer; | 
|         var util = layui.util; | 
|         var admin = layui.admin; | 
|         var dataList = [];  // 便签列表 | 
|         var $noteWrapper = $('.note-wrapper'); | 
|   | 
|         /* 渲染列表 */ | 
|         function renderList() { | 
|             $noteWrapper.empty(); | 
|             dataList = layui.data(admin.setter.tableName).notes; | 
|             if (dataList === undefined) dataList = []; | 
|             for (var i = 0; i < dataList.length; i++) { | 
|                 var item = dataList[i]; | 
|                 $noteWrapper.prepend([ | 
|                     '<div class="note-item" data-id="', item.id, '">', | 
|                     '   <div class="note-item-content">', util.escape(item.content), '</div>', | 
|                     '   <div class="note-item-time">', item.time, '</div>', | 
|                     '   <i class="layui-icon layui-icon-close-fill note-item-del"></i>', | 
|                     '</div>' | 
|                 ].join('')); | 
|             } | 
|             $('.note-empty').css('display', dataList.length === 0 ? 'block' : 'none'); | 
|             // 点击修改 | 
|             $('.note-item').click(function () { | 
|                 var index = parseInt($(this).attr('data-id')); | 
|                 showNote(dataList[index]); | 
|             }); | 
|             // 点击删除 | 
|             $('.note-item-del').click(function (e) { | 
|                 var id = parseInt($(this).parent().attr('data-id')); | 
|                 layer.confirm('确认删除吗?', { | 
|                     skin: 'layui-layer-admin', | 
|                     shade: .1, | 
|                     shadeClose: true | 
|                 }, function (index) { | 
|                     layer.close(index); | 
|                     dataList.splice(id, 1); | 
|                     for (var i = 0; i < dataList.length; i++) dataList[i].id = i; | 
|                     putDataList(); | 
|                     renderList(); | 
|                 }); | 
|                 e.stopPropagation(); | 
|             }); | 
|         } | 
|   | 
|         renderList(); | 
|   | 
|         /* 添加 */ | 
|         $('#noteAddBtn').click(function () { | 
|             showNote(); | 
|         }); | 
|   | 
|         // 显示编辑弹窗 | 
|         function showNote(data) { | 
|             var id = data ? data.id : undefined, content = data ? data.content : ''; | 
|             admin.open({ | 
|                 id: 'layer-note-edit', | 
|                 title: '便签', | 
|                 type: 1, | 
|                 area: 'auto', | 
|                 offset: '50px', | 
|                 shadeClose: true, | 
|                 content: '<textarea id="noteEditText" placeholder="请输入内容" style="width: 280px;height: 150px;border: none;color: #666666;word-wrap: break-word;padding: 10px 20px;resize: vertical;">' + content + '</textarea>', | 
|                 success: function () { | 
|                     $('#noteEditText').change(function () { | 
|                         content = $(this).val(); | 
|                     }); | 
|                 }, | 
|                 end: function () { | 
|                     if (id !== undefined) { | 
|                         if (!content) { | 
|                             dataList.splice(id, 1); | 
|                             for (var i = 0; i < dataList.length; i++) dataList[i].id = i; | 
|                         } else if (content !== dataList[id].content) { | 
|                             dataList[id].content = content; | 
|                             dataList[id].time = util.toDateString(new Date(), 'yyyy-MM-dd HH:mm'); | 
|                         } | 
|                     } else if (content) { | 
|                         dataList.push({ | 
|                             id: dataList.length, content: content, | 
|                             time: util.toDateString(new Date(), 'yyyy-MM-dd HH:mm') | 
|                         }); | 
|                     } | 
|                     putDataList(); | 
|                     renderList(); | 
|                 } | 
|             }); | 
|         } | 
|   | 
|         /* 更新本地缓存 */ | 
|         function putDataList() { | 
|             layui.data(admin.setter.tableName, {key: 'notes', value: dataList}); | 
|         } | 
|   | 
|     }); | 
| </script> | 
|   | 
| <style> | 
|     .note-wrapper { | 
|         padding: 15px 0 15px 15px; | 
|         background-color: #fbfbfb; | 
|         position: absolute; | 
|         top: 43px; | 
|         left: 0; | 
|         right: 0; | 
|         bottom: 0; | 
|         overflow-y: auto; | 
|         -webkit-overflow-scrolling: touch; | 
|     } | 
|   | 
|     .note-wrapper .note-item { | 
|         display: inline-block; | 
|         width: 110px; | 
|         padding: 12px; | 
|         cursor: pointer; | 
|         position: relative; | 
|         border-radius: 8px; | 
|         margin: 0 15px 15px 0; | 
|         border: 1px solid #eeeeee; | 
|         background-color: #ffffff; | 
|         -webkit-user-select: none; | 
|         -moz-user-select: none; | 
|         -ms-user-select: none; | 
|         user-select: none; | 
|         -webkit-transition: all .3s ease; | 
|         -moz-transition: all .3s ease; | 
|         -ms-transition: all .3s ease; | 
|         -o-transition: all .3s ease; | 
|         transition: all .3s ease; | 
|     } | 
|   | 
|     .note-wrapper .note-item:hover { | 
|         box-shadow: 0 0 8px rgba(0, 0, 0, .05); | 
|         -webkit-transform: scale(1.02); | 
|         -moz-transform: scale(1.02); | 
|         -ms-transform: scale(1.02); | 
|         -o-transform: scale(1.02); | 
|         transform: scale(1.02); | 
|     } | 
|   | 
|     .note-wrapper .note-item .note-item-content { | 
|         color: #666; | 
|         height: 80px; | 
|         font-size: 14px; | 
|         overflow: hidden; | 
|         word-break: break-all; | 
|     } | 
|   | 
|     .note-wrapper .note-item .note-item-time { | 
|         color: #999; | 
|         font-size: 12px; | 
|         margin-top: 8px; | 
|     } | 
|   | 
|     .note-wrapper .note-item .note-item-del { | 
|         position: absolute; | 
|         top: 2px; | 
|         right: 2px; | 
|         color: #FF5722; | 
|         font-size: 24px; | 
|         height: 24px; | 
|         width: 24px; | 
|         background-color: #fff; | 
|         border-radius: 50%; | 
|         visibility: hidden; | 
|         -webkit-transition: all .3s ease; | 
|         -moz-transition: all .3s ease; | 
|         -ms-transition: all .3s ease; | 
|         -o-transition: all .3s ease; | 
|         transition: all .3s ease; | 
|         opacity: 0; | 
|     } | 
|   | 
|     .note-wrapper .note-item:hover .note-item-del { | 
|         visibility: visible; | 
|         opacity: 1; | 
|     } | 
|   | 
|     .note-empty { | 
|         color: #999; | 
|         padding: 80px 0; | 
|         text-align: center; | 
|         display: none; | 
|         position: relative; | 
|         z-index: 1 | 
|     } | 
|   | 
|     .note-empty .layui-icon { | 
|         font-size: 60px; | 
|         margin-bottom: 10px; | 
|         display: inline-block; | 
|     } | 
| </style> |