curd_generate.js 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. define(["jquery", "easy-admin", "miniTab"], function ($, ea, miniTab) {
  2. var form = layui.form;
  3. var table = layui.table;
  4. var init = {
  5. save_url: 'system.curd_generate/save',
  6. };
  7. return {
  8. index: function () {
  9. let element = layui.element;
  10. element.on('tab(curd-hash)', function (obj) {
  11. let id = obj.id
  12. let _html = `
  13. <div style="padding: 50px 25px;">
  14. <fieldset class="layui-elem-field">
  15. <legend>提示</legend>
  16. <div class="layui-field-box">
  17. <p><a class="layui-font-blue" target="_blank" rel="nofollow" href="https://edocs.easyadmin8.top/#/md/curd/command">命令可查询文档</a></p>
  18. </div>
  19. </fieldset>
  20. <form class="layui-form layui-form-pane" action="">
  21. <div class="layui-form-item">
  22. <div class="layui-input-group" style="width: 100%;">
  23. <div class="layui-input-split layui-input-prefix" style="width: 100px;">
  24. php think curd
  25. </div>
  26. <input type="text" class="layui-input" name="command" placeholder="在这里输入命令参数" lay-verify="required"/>
  27. </div>
  28. </div>
  29. <div class="layui-form-item">
  30. <button class="layui-btn layui-btn-fluid layui-bg-cyan" type="button" lay-submit="system.CurdGenerate/save?type=console" lay-filter="curd-console-submit">一键执行</button>
  31. </div>
  32. </form>
  33. </div>
  34. `
  35. if (id == '2') {
  36. layer.open({
  37. title: '命令行一键生成 CRUD/CRUD',
  38. type: 1,
  39. shade: 0.3,
  40. shadeClose: false,
  41. area: ['42%', 'auto'],
  42. content: _html,
  43. success: function () {
  44. form.on('submit(curd-console-submit)', function (data) {
  45. let field = data.field
  46. let url = $(this).attr('lay-submit')
  47. let options = {url: ea.url(url), data: field}
  48. ea.msg.confirm('确认执行该操作?<br>如果命令行中存在强制覆盖或者删除将会马上执行!', function () {
  49. ea.request.post(options, function (rs) {
  50. let msg = rs.msg || '未知~'
  51. layer.msg(msg.replace(/\n/g, '<br>'), {shade: 0.3, shadeClose: true})
  52. let code = rs?.code || '-1'
  53. if (code != '1') return
  54. })
  55. })
  56. })
  57. },
  58. end: function () {
  59. element.tabChange('curd-hash', '1');
  60. }
  61. })
  62. }
  63. });
  64. miniTab.listen();
  65. let createStatus = false
  66. let tb_prefix
  67. let tb_name
  68. form.on('submit(search)', function (data) {
  69. let field = data.field
  70. tb_prefix = field.tb_prefix
  71. tb_name = field.tb_name
  72. ea.request.get({url: $(this).attr('lay-submit'), prefix: true, data: field}, function (res) {
  73. createStatus = true
  74. $('.tableShow').removeClass('layui-hide')
  75. $('.table-text').text(field.tb_prefix + field.tb_name)
  76. let _data = res.data
  77. let fieldsHtml = ``
  78. $.each(_data.list, function (i, v) {
  79. if (v.Key != 'PRI') fieldsHtml += `
  80. <div class="input_tag">
  81. <input lay-skin="tag" class="checkbox_${v.Field}" type="checkbox"
  82. title="${v.Field} (${v.Type})" value="${v.Field}" lay-filter="checkbox-filter" />
  83. </div>
  84. `
  85. })
  86. $('.table_fields').html(fieldsHtml)
  87. form.render('checkbox')
  88. form.on('checkbox(checkbox-filter)', function (data) {
  89. let _checked = data.elem.checked
  90. $.each($(`.checkbox_${data.value}`), function (i, v) {
  91. if (i > 0) $(this).prop('checked', false);
  92. })
  93. $(data.elem).prop('checked', _checked);
  94. });
  95. table.render({
  96. elem: '#currentTable', cols: [
  97. [
  98. {field: 'name', title: '字段', minWidth: 80},
  99. {field: 'type', title: '类型', minWidth: 80},
  100. {field: 'key', title: '键', minWidth: 80},
  101. {field: 'extra', title: '是否自增', minWidth: 80},
  102. {field: 'null', title: '是否为空', minWidth: 80},
  103. {field: 'desc', title: '描述', minWidth: 80},
  104. ]
  105. ], data: _data.data, page: false,
  106. });
  107. }, function (error) {
  108. createStatus = false
  109. ea.msg.error(error.msg)
  110. $('.tableShow').addClass('layui-hide')
  111. return
  112. })
  113. form.on('submit(add)', function (data) {
  114. let table = $('.table-text').text()
  115. if (!table || !createStatus) {
  116. ea.msg.error('请先查询数据')
  117. return
  118. }
  119. let url = $(this).attr('lay-submit')
  120. let fields = {}
  121. $.each($('.table_fields'), function (i, v) {
  122. let _name = $(this).data('name')
  123. let _inputs = {}
  124. $.each($(v).find('.input_tag'), function (i, v) {
  125. let checkedVal = $(this).find('input:checked').val()
  126. if (checkedVal) {
  127. _inputs[i] = checkedVal
  128. }
  129. })
  130. fields[_name] = _inputs
  131. })
  132. let options = {url: url, prefix: true, data: {tb_prefix: tb_prefix, tb_name: tb_name, tb_fields: fields}}
  133. layer.confirm('确定要自动生成【' + table + '】对应的CURD?', function (index) {
  134. ea.request.post(options, function (res) {
  135. createStatus = true
  136. ea.msg.success(res.msg)
  137. appendHtml(res['data']['result'], res['data']['link'])
  138. }, function (error) {
  139. createStatus = false
  140. let code = error.code
  141. if (code != '1') {
  142. if (code < 0) {
  143. createStatus = true
  144. layer.confirm(error.msg, {
  145. btn: ['确定强制覆盖生成', '取消'], title: '提示', icon: 0,
  146. yes: function () {
  147. options.prefix = false
  148. options.data.force = 1
  149. ea.request.post(options, function (rs) {
  150. createStatus = true
  151. ea.msg.success(rs.msg)
  152. appendHtml(rs['data']['result'], rs['data']['link'])
  153. })
  154. }
  155. });
  156. return
  157. }
  158. ea.msg.error(error.msg)
  159. return
  160. }
  161. })
  162. })
  163. })
  164. form.on('submit(delete)', function (data) {
  165. let table = $('.table-text').text()
  166. if (!table || !createStatus) {
  167. ea.msg.error('请先查询数据')
  168. return
  169. }
  170. let url = $(this).attr('lay-submit')
  171. let options = {url: url, prefix: true, data: {tb_prefix: tb_prefix, tb_name: tb_name}}
  172. layer.confirm('确定要删除【' + table + '】对应CURD的文件?<br>确定清楚自己在做什么!', function (index) {
  173. ea.request.post(options, function (res) {
  174. ea.msg.success(res.msg)
  175. $('.table-text').text('')
  176. $('.file-list').empty()
  177. $('.table_fields').empty()
  178. $('.tableShow').addClass('layui-hide')
  179. createStatus = false
  180. })
  181. })
  182. })
  183. return
  184. })
  185. function appendHtml(array, link) {
  186. $('.file-list').empty()
  187. let html = ''
  188. $.each(array, function (idx, item) {
  189. html += '<li class="layui-form-item">' + item + '</li>'
  190. })
  191. html += '<a layuimini-content-href="' + link + '" data-title="页面预览">' +
  192. '<button class="layui-btn"><i class="layui-icon layui-icon-link"></i> 自动生成页面预览</button>' +
  193. '</a>'
  194. $('.file-list').html(html)
  195. }
  196. }
  197. };
  198. });