addon.js 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'template'], function ($, undefined, Backend, Table, Form, Template) {
  2. var Controller = {
  3. index: function () {
  4. // 初始化表格参数配置
  5. Table.api.init({
  6. extend: {
  7. index_url: Config.fastadmin.api_url + '/addon/index',
  8. add_url: '',
  9. edit_url: '',
  10. del_url: '',
  11. multi_url: ''
  12. }
  13. });
  14. var table = $("#table");
  15. Template.helper("Moment", Moment);
  16. Template.helper("addons", Config['addons']);
  17. // 初始化表格
  18. table.bootstrapTable({
  19. url: $.fn.bootstrapTable.defaults.extend.index_url,
  20. columns: [
  21. [
  22. {field: 'id', title: 'ID'},
  23. {field: 'name', title: __('Name')},
  24. {field: 'title', title: __('Title')}
  25. ]
  26. ],
  27. templateView: true,
  28. search: false,
  29. showColumns: false,
  30. showToggle: false,
  31. showExport: false,
  32. commonSearch: true,
  33. searchFormVisible: false,
  34. pageSize: 12
  35. });
  36. // 为表格绑定事件
  37. Table.api.bindevent(table);
  38. require(['upload'], function (Upload) {
  39. Upload.api.plupload("#plupload-addon", function (data, ret) {
  40. Config['addons'][data.addon.name] = data.addon;
  41. $('.btn-refresh').trigger('click');
  42. Toastr.success(ret.msg);
  43. });
  44. });
  45. //点击安装
  46. $(document).on("click", ".btn-install", function () {
  47. var name = $(this).closest(".operate").data("name");
  48. var install = function (name, force) {
  49. Fast.api.ajax({
  50. url: 'addon/install',
  51. data: {name: name, force: force ? 1 : 0}
  52. }, function (data, ret) {
  53. Layer.closeAll();
  54. Config['addons'][data.addon.name] = ret.data.addon;
  55. $('.btn-refresh').trigger('click');
  56. }, function (data, ret) {
  57. //如果是需要购买的插件则弹出二维码提示
  58. if (ret && ret.code === -1) {
  59. //扫码支付
  60. Layer.open({
  61. content: Template("paytpl", ret.data),
  62. shade: 0.8,
  63. area: ['800px', '600px'],
  64. skin: 'layui-layer-msg layui-layer-pay',
  65. title: false,
  66. closeBtn: true,
  67. btn: false,
  68. resize: false,
  69. end: function () {
  70. Layer.alert("支付完成后请稍等1~5分钟后再尝试安装,请不要重复支付,如果仍然无法安装,请加<a href='https://jq.qq.com/?_wv=1027&k=487PNBb' target='_blank'>QQ群:636393962</a>向管理员反馈");
  71. }
  72. });
  73. } else if (ret && ret.code === -2) {
  74. //跳转支付
  75. Layer.alert('请点击这里在新窗口中进行支付!', {
  76. btn: ['立即支付', '取消'],
  77. icon: 0,
  78. success: function (layero) {
  79. $(".layui-layer-btn0", layero).attr("href", ret.data.payurl).attr("target", "_blank");
  80. }
  81. }, function () {
  82. Layer.alert("请在新弹出的窗口中进行支付,支付完成后再重新点击安装按钮进行安装!", {icon: 0});
  83. });
  84. } else if (ret && ret.code === -3) {
  85. //插件目录发现影响全局的文件
  86. Layer.open({
  87. content: Template("conflicttpl", ret.data),
  88. shade: 0.8,
  89. area: ['800px', '600px'],
  90. title: "温馨提示",
  91. btn: ['继续安装', '取消'],
  92. end: function () {
  93. },
  94. yes: function () {
  95. install(name, true);
  96. }
  97. });
  98. } else {
  99. Layer.alert(ret.msg);
  100. }
  101. return false;
  102. });
  103. };
  104. install(name, false);
  105. });
  106. //点击卸载
  107. $(document).on("click", ".btn-uninstall", function () {
  108. var name = $(this).closest(".operate").data("name");
  109. var uninstall = function (name, force) {
  110. Fast.api.ajax({
  111. url: 'addon/uninstall',
  112. data: {name: name, force: force ? 1 : 0}
  113. }, function (data, ret) {
  114. delete Config['addons'][name];
  115. Layer.closeAll();
  116. $('.btn-refresh').trigger('click');
  117. }, function (data, ret) {
  118. if (ret && ret.code === -3) {
  119. //插件目录发现影响全局的文件
  120. Layer.open({
  121. content: Template("conflicttpl", ret.data),
  122. shade: 0.8,
  123. area: ['800px', '600px'],
  124. title: "温馨提示",
  125. btn: ['继续卸载', '取消'],
  126. end: function () {
  127. },
  128. yes: function () {
  129. uninstall(name, true);
  130. }
  131. });
  132. } else {
  133. Layer.alert(ret.msg);
  134. }
  135. return false;
  136. });
  137. };
  138. Layer.confirm("确认卸载插件?<p class='text-danger'>卸载将会删除所有插件文件且不可找回!!! 插件如果有创建数据库表请手动删除!!!</p>如有重要数据请备份后再操作!", function () {
  139. uninstall(name, false);
  140. });
  141. });
  142. //点击配置
  143. $(document).on("click", ".btn-config", function () {
  144. var name = $(this).closest(".operate").data("name");
  145. Fast.api.open("addon/config?name=" + name, "修改配置");
  146. });
  147. //点击启用/禁用
  148. $(document).on("click", ".btn-enable,.btn-disable", function () {
  149. var name = $(this).closest(".operate").data("name");
  150. var action = $(this).data("action");
  151. var operate = function (name, action, force) {
  152. Fast.api.ajax({
  153. url: 'addon/state',
  154. data: {name: name, action: action, force: force ? 1 : 0}
  155. }, function (data, ret) {
  156. var addon = Config['addons'][name];
  157. addon.state = action === 'enable' ? 1 : 0;
  158. Layer.closeAll();
  159. $('.btn-refresh').trigger('click');
  160. }, function (data, ret) {
  161. if (ret && ret.code === -3) {
  162. //插件目录发现影响全局的文件
  163. Layer.open({
  164. content: Template("conflicttpl", ret.data),
  165. shade: 0.8,
  166. area: ['800px', '600px'],
  167. title: "温馨提示",
  168. btn: ['继续操作', '取消'],
  169. end: function () {
  170. },
  171. yes: function () {
  172. operate(name, action, true);
  173. }
  174. });
  175. } else {
  176. Layer.alert(ret.msg);
  177. }
  178. return false;
  179. });
  180. };
  181. operate(name, action, false);
  182. });
  183. },
  184. add: function () {
  185. Controller.api.bindevent();
  186. },
  187. config: function () {
  188. Controller.api.bindevent();
  189. },
  190. api: {
  191. bindevent: function () {
  192. Form.api.bindevent($("form[role=form]"));
  193. }
  194. }
  195. };
  196. return Controller;
  197. });