config.html 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315
  1. <style>
  2. .layui-table-cell .layui-input {
  3. height: 26px !important;
  4. border-radius: 2px;
  5. }
  6. /* 表单标题加虚线 */
  7. .form-item-title {
  8. text-align: center;
  9. position: relative;
  10. }
  11. .form-item-title:before {
  12. content: "";
  13. position: absolute;
  14. border-top: 1px dashed #ccc;
  15. left: 40px;
  16. right: 40px;
  17. top: 8px;
  18. z-index: -1;
  19. }
  20. .form-item-title > span {
  21. background-color: white;
  22. padding: 0 10px;
  23. font-size: 13px;
  24. color: #666;
  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>
  34. <table class="layui-table" id="dataTable" lay-filter="dataTable"></table>
  35. </div>
  36. </div>
  37. </div>
  38. <!--状态-->
  39. <script type="text/html" id="tableStateTpl">
  40. {{# if (d.system != 1) { }}
  41. <input type="checkbox" name="status" value="{{ d.status }}" switch-data="{'url':'/system/config/{{ d.id }}','action':'put'}" lay-skin="switch" lay-filter="ckDataTableState"
  42. lay-text="正常|关闭" {{ d.status== 1 ? 'checked' : '' }} {{ d.system == 1 ? 'disabled' : '' }}">
  43. {{# } else { }}
  44. <span class="layui-badge layui-bg-black">系统配置</span>
  45. {{# } }}
  46. </script>
  47. <!-- 排序 -->
  48. <script type="text/html" id="sortTpl">
  49. <input type="text" name="sort" focus-data="{'url':'system/config/{{ d.id }}','action':'put','param':{'sort': {{ d.sort }} }}" class="layui-input layui-table-input table-focus-input" onkeyup="value=value.replace(/[^\d]/g,'')"
  50. value="{{ d.sort }}" data-value="{{ d.sort }}">
  51. </script>
  52. <!-- 操作栏 -->
  53. <script type="text/html" id="tableBarTpl">
  54. {{# if (d.system != 1) { }}
  55. <a class="layui-btn layui-btn-xs" lay-event="edit">修改</a>
  56. <a class="layui-btn layui-btn-xs layui-btn-danger" lay-event="del">删除</a>
  57. {{# } else { }}
  58. <a lay-bg="#666666" lay-tips="系统配置,禁止编辑" class="layui-btn layui-btn-xs layui-btn-primary layui-disabled">修改</a>
  59. <a lay-bg="#666666" lay-tips="系统配置,禁止删除" class="layui-btn layui-btn-xs layui-btn-primary layui-disabled">删除</a>
  60. {{# } }}
  61. <!-- <a class="layui-btn layui-btn-xs" lay-event="edit">修改</a>-->
  62. <!-- <a class="layui-btn layui-btn-xs layui-btn-danger" lay-event="del">删除</a>-->
  63. </script>
  64. <!-- 工具栏 -->
  65. <script type="text/html" id="toolBarTpl">
  66. <div class="layui-btn-group fl">
  67. <a class="layui-btn layui-btn-sm layui-icon layui-icon-add-circle-fine config-add-btn">&nbsp;添加</a>
  68. <a table-data="{'url':'system/config/plectron','action':'put',param:{'status': 1}}" class="layui-btn layui-btn-sm layui-icon layui-icon-play table-toolbar-btn">&nbsp;启用</a>
  69. <a table-data="{'url':'system/config/plectron','action':'put',param:{'status': 0}}" confirm class="layui-btn layui-btn-sm layui-icon layui-icon-pause table-toolbar-btn">&nbsp;禁用</a>
  70. <a table-data="{'url':'system/config/plectron','action':'delete'}" confirm class="layui-btn layui-btn-sm layui-icon layui-icon-close table-toolbar-btn">&nbsp;删除</a>
  71. </div>
  72. </script>
  73. <!-- 编辑框 -->
  74. <script type="text/html" id="EDConfigModel">
  75. <form id="EDConfigModelForm" lay-filter="EDConfigModelForm" class="layui-form layui-row model-form">
  76. <input name="id" type="hidden"/>
  77. <div class="layui-row">
  78. <div class="layui-col-md6">
  79. <div class="layui-form-item form-item-title"><span>基础配置</span></div>
  80. <div class="layui-form-item">
  81. <label class="layui-form-label">配置分类</label>
  82. <div class="layui-input-block">
  83. <select name="group"></select>
  84. </div>
  85. </div>
  86. <div class="layui-form-item">
  87. <label class="layui-form-label">配置名称</label>
  88. <div class="layui-input-block">
  89. <input name="name" placeholder="请输入配置名称" type="text" class="layui-input" maxlength="100"
  90. lay-verType="tips" lay-verify="required" required/>
  91. </div>
  92. </div>
  93. <div class="layui-form-item">
  94. <label class="layui-form-label">配置标题</label>
  95. <div class="layui-input-block">
  96. <input name="title" placeholder="请输入配置标题" type="text" class="layui-input" maxlength="100"
  97. lay-verType="tips" lay-verify="required" required/>
  98. </div>
  99. </div>
  100. <div class="layui-form-item form-item-title"><span>数据配置</span></div>
  101. <div class="layui-form-item">
  102. <label class="layui-form-label">配置类型</label>
  103. <div class="layui-input-block">
  104. <select name="type"></select>
  105. </div>
  106. </div>
  107. <div class="layui-form-item">
  108. <label class="layui-form-label">排序值</label>
  109. <div class="layui-input-block">
  110. <input name="sort" placeholder="请输入排序值" value="0" type="number" class="layui-input" lay-verType="tips"/>
  111. </div>
  112. </div>
  113. <div class="layui-form-item">
  114. <label class="layui-form-label">系统配置</label>
  115. <div class="layui-input-block">
  116. <select name="system">
  117. <option value="0">否</option>
  118. <option value="1">是</option>
  119. </select>
  120. </div>
  121. </div>
  122. <div class="layui-form-item">
  123. <label class="layui-form-label">前台显示</label>
  124. <div class="layui-input-block">
  125. <select name="web">
  126. <option value="0">否</option>
  127. <option value="1">是</option>
  128. </select>
  129. </div>
  130. </div>
  131. </div>
  132. <div class="layui-col-md6">
  133. <div class="layui-form-item form-item-title"><span>配置信息</span></div>
  134. <div class="layui-form-item">
  135. <label class="layui-form-label">配置值</label>
  136. <div class="layui-input-block">
  137. <textarea name="value" placeholder="请输入配置值" class="layui-textarea"
  138. lay-verType="tips"></textarea>
  139. </div>
  140. </div>
  141. <div class="layui-form-item form-item-title"><span>拓展配置</span></div>
  142. <div class="layui-form-item">
  143. <label class="layui-form-label">配置项</label>
  144. <div class="layui-input-block">
  145. <textarea name="options" placeholder="请输入配置项" class="layui-textarea"
  146. lay-verType="tips"></textarea>
  147. </div>
  148. </div>
  149. <div class="layui-form-item">
  150. <label class="layui-form-label">配置提示</label>
  151. <div class="layui-input-block">
  152. <textarea name="tips" placeholder="请输入配置提示" class="layui-textarea"
  153. lay-verType="tips"></textarea>
  154. </div>
  155. </div>
  156. </div>
  157. </div>
  158. <div class="layui-form-item text-right">
  159. <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">取消</button>
  160. <button class="layui-btn" lay-filter="EDConfigModelSubmit" lay-submit>保存</button>
  161. </div>
  162. </form>
  163. </script>
  164. <!-- js部分 -->
  165. <script>
  166. layui.use(['layer', 'form', 'element', 'laydate', 'admin', 'setter', 'notice', 'table', 'fileChoose'], function () {
  167. var $ = layui.jquery;
  168. var layer = layui.layer;
  169. var form = layui.form;
  170. var element = layui.element;
  171. var fileChoose = layui.fileChoose;
  172. var admin = layui.admin;
  173. var notice = layui.notice;
  174. var table = layui.table;
  175. var setter = layui.setter;
  176. // 配置组
  177. var setGroupArr = [];
  178. var route = setter.getCache('route'),
  179. setGroup = 'system';
  180. if(route){
  181. setGroup = route.config || 'system';
  182. }
  183. // 表格实例
  184. var insTb;
  185. // 加载站点配置
  186. admin.req('system/config', function (r) {
  187. if (r.code === 10000) {
  188. setGroupArr = r.data;
  189. // 渲染tabs
  190. $.each(r.data, (i, tab) => {
  191. element.tabAdd('selTabs', {
  192. title: tab.name, content: false, id: tab.policy
  193. });
  194. });
  195. // 选中
  196. element.tabChange('selTabs', setGroup || 'system');
  197. } else {
  198. notice.msg(r.message, {icon: 2});
  199. }
  200. }, 'GET');
  201. // 监听选择
  202. element.on('tab(selTabs)', function (obj) {
  203. setGroup = this.getAttribute('lay-id');
  204. setter.putCache('route',{config: setGroup});
  205. //layer.load(2);
  206. // 加载配置 -- 渲染表格
  207. insTb = table.render({
  208. elem: '#dataTable',
  209. url: setter.baseServer + "system/config",
  210. where: {group:setGroup},
  211. page: true,
  212. loading: true,
  213. cellMinWidth: 100
  214. , text: {
  215. none: '暂无相关数据'
  216. }
  217. , toolbar: '#toolBarTpl',
  218. defaultToolbar: ['filter'],
  219. cols: [[
  220. {type: 'checkbox'}
  221. , {field: 'name', title: '标识', width: 130}
  222. , {field: 'title', title: '标题', width: 200}
  223. , {field: 'type', title: '类型', width: 100}
  224. , {field: 'sort', title: '排序', width: 80, templet: '#sortTpl'}
  225. , {field: 'tips', title: '提示'}
  226. , {field: 'status', title: '状态', width: 100, templet: '#tableStateTpl'}
  227. , {title: '操作', width: 120, templet: '#tableBarTpl'}
  228. ]]
  229. });
  230. });
  231. // 工具条点击事件
  232. table.on('tool(dataTable)', function (obj) {
  233. var data = obj.data;
  234. var layEvent = obj.event;
  235. if (layEvent === 'edit') { // 修改
  236. showEDModel(data);
  237. } else if (layEvent === 'del') { // 删除
  238. notice.msg('禁止操作!',{icon:2})
  239. }
  240. });
  241. // 添加
  242. $(document).on('click', '.config-add-btn', function () {
  243. showEDModel();
  244. });
  245. /**
  246. * 展示窗口
  247. * @param data
  248. */
  249. function showEDModel(data) {
  250. admin.open({
  251. id: 'LAY_EDConfigModel',
  252. type: 1,
  253. area: '745px', //宽高
  254. title: (data ? '修改' : '添加') + '配置',
  255. content: $('#EDConfigModel').html(),
  256. success: function (layero, dIndex) {
  257. $(layero).children('.layui-layer-content').css('overflow', 'visible');
  258. // 回显数据
  259. form.val('EDConfigModelForm', data);
  260. //TODO 配置类型渲染 -- 本地缓存
  261. $.each(setter.getCache('config').develop.config_group, (i, item) => {
  262. let selected = (setGroup == i) ? 'selected' : '';
  263. $('select[name="group"]').append('<option value="' + i + '" ' + selected + '>[' + i + ']' + item + '</option>');
  264. });
  265. $.each(setter.getCache('config').develop.config_type, (i, item) => {
  266. let selected = data ? data.type == i ? 'selected' : '' : '';
  267. $('select[name="type"]').append('<option value="' + i + '" ' + selected + '>[' + i + ']' + item + '</option>');
  268. });
  269. // 局部刷新
  270. form.render('select');
  271. // 监听提交
  272. form.on('submit(EDConfigModelSubmit)', function (form) {
  273. //layer.load(2);
  274. admin.req('system/config' + (data ? '/' + form.field.id : '') , form.field, function (res) {
  275. layer.closeAll('loading');
  276. if (res.code === 10000) {
  277. layer.close(dIndex);
  278. //TODO 更新本地配置
  279. setter.updateConfig();
  280. notice.msg(res.message, {icon: 1});
  281. insTb.reload({}, 'data');
  282. } else {
  283. notice.msg(res.message, {icon: 2});
  284. }
  285. }, data ? 'PUT' : 'POST');
  286. return false;
  287. });
  288. }
  289. });
  290. }
  291. });
  292. </script>