setting.html 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. <style>
  2. .theme-colorful .layui-form-item .layui-input-block {
  3. margin-left: 140px;
  4. }
  5. #formBasic .layui-form-item {
  6. margin-bottom: 25px;
  7. }
  8. #formBasic label .layui-icon {
  9. font-size: 14px;
  10. color: #666;
  11. }
  12. .layui-form-label {
  13. width: 100px;
  14. text-align: left;
  15. }
  16. #upShowImg {
  17. display: inline-block;
  18. border-radius: 5px;
  19. border: 1px solid #ccc;
  20. width: 100%;
  21. height: 100px;
  22. cursor: zoom-in;
  23. margin: 8px 0;
  24. background: #ccc;
  25. }
  26. </style>
  27. <!-- 正文开始 -->
  28. <div class="layui-fluid">
  29. <div class="layui-card">
  30. <div class="layui-card-body">
  31. <div class="layui-tab layui-tab-brief" lay-filter="selTabs">
  32. <ul class="layui-tab-title" id="showTabs"></ul>
  33. <div class="layui-tab-content">
  34. <form id="dataForm" lay-filter="dataForm" class="layui-form" style="max-width: 700px;">
  35. <div id="selConfig"></div>
  36. <div class="layui-form-item">
  37. <div class="layui-input-block">
  38. <button class="layui-btn" lay-filter="formSubmitConfig" lay-submit>&emsp;提交&emsp;
  39. </button>
  40. <button type="reset" class="layui-btn layui-btn-primary">&emsp;重置&emsp;</button>
  41. </div>
  42. </div>
  43. </form>
  44. </div>
  45. </div>
  46. </div>
  47. </div>
  48. </div>
  49. <!--渲染form-->
  50. <script type="text/html" id="seldataForm">
  51. {{# layui.each(d, function(index, item){ }}
  52. <div class="layui-form-item">
  53. <label class="layui-form-label">{{item.title}}</label>
  54. <div class="layui-input-block">
  55. {{# switch(item.type) {
  56. case "date": }}
  57. <input type="text" class="layui-input layui-date" name="set[{{item.name}}]" value="{{item.value}}"
  58. autocomplete="off" placeholder="请填写{{item.title}}" id="laydate-{{item.id}}" laydate-type="date">
  59. {{# case "select": }}
  60. <select name="set[{{item.name}}]">
  61. {{# layui.each(item.options, function(si, st){ }}
  62. <option value="{{si}}" {{si== item.value ?
  63. 'selected':''}}>{{st}}</option>
  64. {{# }) }}
  65. </select>
  66. {{# break; }}
  67. {{# case "editor": }}
  68. <textarea name="set[{{item.name}}]" id="{{item.name}}">{{item.value}}</textarea>
  69. {{# break; }}
  70. {{# case "image": }}
  71. <input id="upInput" type="text" name="set[{{item.name}}]" value="{{item.value}}"
  72. class="layui-input layui-disabled" style="padding-right: 80px;" disabled>
  73. <button id="btnDialogFileChoose" type="button" style="position: absolute;top: 0;right: 0px;cursor: pointer;"
  74. class="layui-btn icon-btn">
  75. <i class="layui-icon">&#xe61d;</i>上传图片
  76. </button>
  77. <img id="upShowImg" class="input-img-preview"
  78. src="{{item.value || '../../assets/images/placeholder-refund.png'}}" style="display:inline-block;"
  79. width="36" height="36">
  80. {{# break; }}
  81. {{# case "switch": }}
  82. <input lay-filter="cSwitch" type="checkbox" name="set[{{item.name}}]" value="{{item.value}}"
  83. lay-skin="switch" lay-text="{{item.options[1]}}|{{item.options[0]}}" {{item.value==1?'checked':''}}>
  84. {{# break; }}
  85. {{# case "radio": }}
  86. {{# layui.each(item.options, function(si, st){ }}
  87. <input type="radio" name="set[{{item.name}}]" value="{{si}}" title="{{st}}" {{si== item.value ?
  88. 'checked':''}}>
  89. {{# }) }}
  90. {{# break; }}
  91. {{# case "textarea":
  92. case "array": }}
  93. <!--多行文本-->
  94. <textarea rows="6" class="layui-textarea" name="set[{{item.name}}]" autocomplete="off"
  95. placeholder="请填写{{item.title}}">{{item.value}}</textarea>
  96. {{# break;
  97. default: }}
  98. <input type="text" class="layui-input" name="set[{{item.name}}]" value="{{item.value}}" autocomplete="off"
  99. placeholder="请填写{{item.title}}">
  100. {{# break;
  101. } }}
  102. <div style="font-size: 13px;display: block; padding: 9px 0!important; line-height: 20px; margin-right: 10px;" class="layui-word-aux">{{ item.tips }}</div>
  103. </div>
  104. </div>
  105. {{# }) }}
  106. </script>
  107. <!-- js部分 -->
  108. <script>
  109. layui.use(['layer', 'form', 'element', 'laydate', 'admin', 'setter', 'laytpl', 'notice', 'layedit', 'fileChoose', 'CKEDITOR'], function () {
  110. var $ = layui.jquery;
  111. var layer = layui.layer;
  112. var form = layui.form;
  113. var element = layui.element;
  114. var fileChoose = layui.fileChoose;
  115. var admin = layui.admin;
  116. var laytpl = layui.laytpl;
  117. var notice = layui.notice;
  118. var setter = layui.setter;
  119. var layedit = layui.layedit;
  120. var CKEDITOR = layui.CKEDITOR;
  121. var route = setter.getCache('route'),
  122. setGroup = 'system';
  123. if(route){
  124. setGroup = route.setting || 'system';
  125. }
  126. // 加载站点配置
  127. layer.load(2);
  128. admin.req('system/setting', function (r) {
  129. layer.closeAll('loading');
  130. if (r.code === 10000) {
  131. // 渲染tabs
  132. $.each(r.data, (i, tab) => {
  133. element.tabAdd('selTabs', {
  134. title: tab.name, content: false, id: tab.policy
  135. });
  136. });
  137. // 选中
  138. element.tabChange('selTabs', setGroup || 'system');
  139. } else {
  140. notice.msg(r.message, {icon: 2});
  141. }
  142. }, 'GET');
  143. var editorArr = [];
  144. // 监听选择
  145. element.on('tab(selTabs)', function (obj) {
  146. var group = this.getAttribute('lay-id');
  147. // 写入缓存
  148. setter.putCache('route',{setting: group});
  149. layer.load(2);
  150. // 加载配置
  151. admin.req('system/setting', {group}, function (r) {
  152. layer.closeAll('loading');
  153. if (r.code === 10000) {
  154. //渲染表单 seldataForm
  155. laytpl(seldataForm.innerHTML).render(r.data, function (html) {
  156. $('#selConfig').html(html);
  157. element.render('tab');
  158. });
  159. form.render();
  160. $.each(r.data,(i,v) => {
  161. // 是编辑器
  162. if(v.type == "editor"){
  163. var editor = CKEDITOR.replace(v.name, {
  164. height: 320,
  165. language: 'zh-cn', //简体中文
  166. toolbar : [
  167. //加粗 斜体, 下划线 穿过线 下标字 上标字
  168. ['Bold','Italic','Underline','Strike','Subscript','Superscript'],
  169. // 数字列表 实体列表 减小缩进 增大缩进
  170. ['NumberedList','BulletedList','-','Outdent','Indent'],
  171. //左对 齐 居中对齐 右对齐 两端对齐
  172. ['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock'],
  173. //超链接 取消超链接 锚点
  174. ['Link','Unlink','Anchor'],
  175. '/',
  176. // 样式 格式 字体 字体大小
  177. ['Styles','Format','Font','FontSize'],
  178. //文本颜色 背景颜色
  179. ['TextColor','BGColor'],
  180. ]
  181. });
  182. CKEDITOR.instances.pageCkEditor;
  183. editorArr.push(editor);
  184. }
  185. })
  186. }
  187. });
  188. });
  189. // 监听提交
  190. form.on('submit(formSubmitConfig)', function (data) {
  191. layer.load(2);
  192. // 富文本内容
  193. if(editorArr.length > 0){
  194. $.each(editorArr,(i, e) => {
  195. data.field['set[' + e.name + ']'] = e.getData()
  196. })
  197. }
  198. admin.req('system/setting/' + setGroup, data.field, function (res) {
  199. layer.closeAll('loading');
  200. if (res.code === 10000) {
  201. notice.msg(res.message, {icon: 1});
  202. form.render();
  203. } else {
  204. notice.msg(res.message, {icon: 2});
  205. }
  206. }, 'PUT');
  207. return false;
  208. });
  209. });
  210. </script>