index.html 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>layui</title>
  6. <meta name="renderer" content="webkit">
  7. <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  8. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  9. <link rel="stylesheet" href="__PUBLIC__/layui/css/layui.css" media="all">
  10. <link rel="stylesheet" href="__PUBLIC__/font-awesome/css/font-awesome.min.css" media="all"/>
  11. <link rel="stylesheet" href="__CSS__/admin.css" media="all">
  12. </head>
  13. <style>
  14. .layui-form-item .layui-form-checkbox[lay-skin=primary] {
  15. margin-top: auto;
  16. }
  17. .layui-table-cell, .layui-table-box, .layui-table-body {
  18. overflow: visible;
  19. }
  20. </style>
  21. <body style="padding:10px;">
  22. <div class="tplay-body-div">
  23. <div class="layui-tab">
  24. <ul class="layui-tab-title">
  25. <li class="layui-this">后台生成</li>
  26. <li><a href="{:url('admin/api_generation/index')}" class="a_menu">接口生成</a></li>
  27. </ul>
  28. </div>
  29. <div style="margin-top: 20px;">
  30. </div>
  31. <form class="layui-form" id="admin">
  32. <div class="layui-form-item">
  33. <label class="layui-form-label">数据表</label>
  34. <div class="layui-input-inline">
  35. <select name="table" lay-search="" lay-filter="tablename" lay-verify="required">
  36. <option value="">请选择</option>
  37. {foreach name="$tables" item="vo" key="k"}
  38. <option value="{$vo.TABLE_NAME}|{$vo.TABLE_COMMENT}"
  39. >{$vo.TABLE_NAME}({$vo.TABLE_COMMENT|default="无备注"})
  40. </option>
  41. {/foreach}
  42. </select>
  43. </div>
  44. <div class="layui-form-mid layui-word-aux">选择要生成的表</div>
  45. </div>
  46. <div class="layui-form-item">
  47. <label class="layui-form-label">后台功能</label>
  48. <div class="layui-input-block">
  49. <input type="checkbox" name="crud[create]" title="新增" checked>
  50. <input type="checkbox" name="crud[delete]" title="删除" checked>
  51. <input type="checkbox" name="crud[update]" title="修改" checked>
  52. <input type="checkbox" name="crud[select]" title="查询" checked disabled>
  53. </div>
  54. <div class="layui-form-mid layui-word-aux">选择生成对应的后台功能,生成后须手动配置菜单和权限</div>
  55. </div>
  56. <div class="layui-form-item">
  57. <div class="layui-input-block" style="display:none;" id="table_div">
  58. <table class="layui-table" id="table" lay-filter="table"></table>
  59. </div>
  60. </div>
  61. <div class="layui-form-item">
  62. <div class="layui-input-block">
  63. <button class="layui-btn" lay-submit lay-filter="admin">立即生成</button>
  64. </div>
  65. </div>
  66. </form>
  67. {include file="public/foot"}
  68. <script>
  69. layui.use(['table', 'layer', 'form'], function () {
  70. var layer = layui.layer,
  71. $ = layui.jquery,
  72. table = layui.table,
  73. form = layui.form;
  74. var tableIns = table.render({
  75. id: 'table'
  76. , elem: '#table'
  77. , size: 'lg' //小尺寸的表格
  78. , defaultToolbar: []
  79. , page: false //开启分页
  80. , text: {none: '请先选择一个表'}
  81. , cols: [[ //表头
  82. {field: 'Field', title: '字段名称', minWidth: 60},
  83. {field: 'Type', title: '数据类型', minWidth: 80},
  84. {field: 'Default', title: '默认值', minWidth: 80},
  85. {field: 'Comment', title: '注释', minWidth: 80},
  86. {
  87. field: 'ShowList', title: '列表显示', align: 'center', width: 100, templet: function (row) {
  88. var unuse = ['password'];
  89. if (unuse.indexOf(row.Field) >= 0 || row.Type == 'text') {
  90. return '<input type="checkbox" name="' + row.Field + '_ShowList" lay-skin="primary">';
  91. }
  92. return '<input type="checkbox" name="' + row.Field + '_ShowList" lay-skin="primary" checked>';
  93. }
  94. },
  95. {
  96. field: 'ShowSearch', title: '支持查询', align: 'center', width: 100, templet: function (row) {
  97. var unuse = ['password', 'thumb', 'image', 'sort', 'update_time'];
  98. if (unuse.indexOf(row.Field) >= 0 || row.Type == 'text') {
  99. return '<input type="checkbox" name="' + row.Field + '_ShowSearch" lay-skin="primary">';
  100. }
  101. return '<input type="checkbox" name="' + row.Field + '_ShowSearch" lay-skin="primary" checked>';
  102. }
  103. },
  104. {
  105. field: 'ShowEdit', title: '表单显示', align: 'center', width: 100, templet: function (row) {
  106. var unuse = ['id', 'ip', 'create_time', 'update_time', 'sort'];
  107. if (unuse.indexOf(row.Field) >= 0) {
  108. return '<input type="checkbox" name="' + row.Field + '_ShowEdit" lay-skin="primary">';
  109. }
  110. return '<input type="checkbox" name="' + row.Field + '_ShowEdit" lay-skin="primary" checked>';
  111. }
  112. },
  113. {
  114. field: 'Component', title: '表单组件', minWidth: 100, templet: function (row) {
  115. return buildComponentSelect(row);
  116. }
  117. },
  118. ]]
  119. });
  120. form.on('submit(admin)', function (data) {
  121. $.ajax({
  122. url: "{:url('generation')}",
  123. data: $('#admin').serialize(),
  124. type: 'post',
  125. dataType: 'json',
  126. async: false,
  127. success: function (res) {
  128. if (1 == res.code) {
  129. layer.alert('执行成功')
  130. } else {
  131. layer.confirm(res.msg, {icon: 3, title: '覆盖前请备份文件!'}, function (index) {
  132. $.ajax({
  133. url: "{:url('generation')}",
  134. data: $('#admin').serialize() + '&cover=true',
  135. type: 'post',
  136. dataType: 'json',
  137. async: false,
  138. success: function (res) {
  139. if (res.code == 1) {
  140. layer.alert('执行成功')
  141. } else {
  142. layer.alert('执行失败')
  143. }
  144. }
  145. })
  146. });
  147. }
  148. }
  149. })
  150. return false;
  151. });
  152. form.on('select(tablename)', function (data) {
  153. if (data.value) {
  154. $("#table_div").show();
  155. tableIns.reload({
  156. url: "{:url('getFieldsInfo')}",
  157. where: {table: data.value},
  158. })
  159. } else {
  160. $("#table_div").hide();
  161. }
  162. });
  163. });
  164. function getCheckOption(row) {
  165. var check_option = '输入框';
  166. if (row.Type == 'text') {
  167. return '纯文本段落';
  168. }
  169. if (row.Type == 'float') {
  170. return '数字';
  171. }
  172. if (row.Type.indexOf('int') >= 0) {
  173. check_option = '数字';
  174. if (row.Field.indexOf('thumb') >= 0 || row.Field.indexOf('image') >= 0) {
  175. return '图片';
  176. }
  177. if (row.Field.indexOf('time') >= 0) {
  178. return '时间';
  179. }
  180. if (row.Type == 'int(1)' || row.Type == 'tinyint(1)') {
  181. return '开关';
  182. }
  183. if(row.Comment.indexOf(',') >= 0){
  184. if(row.Field.indexOf('radio') >= 0){
  185. return '单选框';
  186. }
  187. return '下拉框';
  188. }
  189. }
  190. if(row.Field.indexOf('checkbox') >= 0){
  191. return '复选框';
  192. }
  193. return check_option;
  194. }
  195. function buildComponentSelect(row) {
  196. var check_option = getCheckOption(row);
  197. var options = ['输入框', '数字', '时间', '纯文本段落', '图片', '开关', '下拉框', '复选框', '单选框', '文章编辑器'];
  198. var html = '<select name="' + row.Field + '_Component" lay-search="" lay-filter=""><option value="">请选择</option>';
  199. for (var i in options) {
  200. if (check_option == options[i]) {
  201. html += '<option value="' + i + '" selected>' + options[i] + '</option>';
  202. } else {
  203. html += '<option value="' + i + '">' + options[i] + '</option>';
  204. }
  205. }
  206. html += '</select>';
  207. return html;
  208. }
  209. </script>
  210. </div>
  211. </body>
  212. </html>