控制台应用,yzncms本身基于tp5.1框架,里面的队列用不了,bug,坑
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

index.html 28KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688
  1. {extend name="admin@index_layout"/}
  2. {block name="main"}
  3. <style type="text/css">
  4. .releasetips {position: relative;}
  5. .releasetips i {display: block;background: #f00;border-radius: 50%;width: 0.3em;height: 0.3em;top: 0px;right: -8px;position: absolute;box-shadow: 0px 0px 2px #f11414;}
  6. </style>
  7. <div class="alert alert-info-light">
  8. <b>温馨提示</b><br>
  9. 1、插件在线安装,升级和购买需要注册YznCMS官网账号,请点击下方【会员信息】,点击【注册】按钮<br>
  10. 2、点击插件名称可查看详情,截图和日志等信息
  11. </div>
  12. {if $type=='online'}
  13. <div class="layui-tab layui-tab-card" lay-filter="tabswitch" style="box-shadow: none;">
  14. <ul class="layui-tab-title nav-category">
  15. <li class="layui-this" data-id="">全部</li>
  16. </ul>
  17. </div>
  18. {/if}
  19. <input type="hidden" name="category_id" value="0">
  20. <div class="layui-card">
  21. <div class="layui-card-header">插件管理</div>
  22. <div class="layui-card-body">
  23. <table class="layui-hide" id="currentTable" lay-filter="currentTable"></table>
  24. </div>
  25. </div>
  26. <script type="text/html" id="titleTpl">
  27. <div>
  28. {{# if(d.url){ }}
  29. {{# if(d.name != 'recommend' ){ }}
  30. <a href="javascript:;" data-open="{{d.url}}" lay-tips="查看插件介绍和帮助" title="插件详情">{{= d.title }}</a>
  31. {{# } else { }}
  32. <a href="{{= d.url}}" target="_blank" lay-tips="查看插件介绍和帮助">{{= d.title }}</a>
  33. {{# } }}
  34. {{# } else { }}
  35. <a href="javascript:;">{{= d.title }}</a>
  36. {{# } }}
  37. </div>
  38. </script>
  39. <script type="text/html" id="operateTpl">
  40. {{# if(d.addon){ }}
  41. {{# if(d.addon.version!=d.version){ }}
  42. {{# if(typeof d.releaselist !="undefined" && d.releaselist.length>1){ }}
  43. <a class="layui-btn layui-btn-xs layui-btn-normal" data-name="{{d.name}}" data-version="{{d.version}}" data-title="{{d.title}}" data-value="{{= JSON.stringify(d.releaselist)}}" lay-event="upgrade">升级 <i class="layui-icon layui-icon-down"></i></a>
  44. {{# }else if(typeof d.releaselist !="undefined" && d.releaselist.length>0){ }}
  45. <a class="layui-btn layui-btn-xs layui-btn-normal btn-upgrade" data-name="{{d.name}}" data-version="{{d.version}}" data-title="{{d.title}}">升级</a>
  46. {{# } }}
  47. {{# } }}
  48. {{# if(d.addon.config == 1 ){ }}
  49. <a class="layui-btn layui-btn-xs" data-open='{:url("config")}?name={{d.name}}' title="插件设置 -【{{d.title}}】">设置</a>
  50. {{# } }}
  51. <a class="layui-btn layui-btn-xs layui-btn-danger btn-uninstall" data-name="{{d.name}}" data-status="{{d.addon.status}}" data-title="确定卸载【{{d.title}}】,进行该操作?" confirm>卸载</a>
  52. {{# } else { }}
  53. {{# if(typeof d.releaselist !="undefined" && d.releaselist.length>1){ }}
  54. <a class="layui-btn layui-btn-xs" data-name="{{d.name}}" data-version="{{d.version}}" data-title="确定安装【{{d.title}}】,进行该操作?" data-value="{{= JSON.stringify(d.releaselist)}}" lay-event="install">安装 <i class="layui-icon layui-icon-down"></i></a>
  55. {{# }else if(typeof d.releaselist !="undefined" && d.releaselist.length>0){ }}
  56. <a class="layui-btn layui-btn-xs btn-install" data-name="{{d.name}}" data-version="{{d.version}}" data-title="确定安装【{{d.title}}】,进行该操作?">安装</a>
  57. {{# } }}
  58. {{# if(d.button){ }}
  59. <a href="{{d.url}}" class="layui-btn layui-btn-xs layui-btn-normal" target="_blank">
  60. {{d.button}}
  61. </a>
  62. {{# } }}
  63. {{# } }}
  64. </script>
  65. <script id="statusTpl" type="text/html">
  66. {{# if(d.addon){ }}
  67. <input type="checkbox" value="{{= d.id }}" title="启用|禁用" lay-skin="switch" lay-filter="templet-status" data-name="{{d.name}}" data-action="{{= d.addon.status == 1 ? "disable" : "enable"}}" {{= d.addon.status == 1 ? "checked" : "" }}>
  68. {{# } }}
  69. </script>
  70. <script id="conflicttpl" type="text/html">
  71. <div class="alert alert-danger-light">
  72. <strong>温馨提示</strong><br>
  73. 此插件中发现和现有系统中部分文件发现冲突!以下文件将会被影响,请备份好相关文件后再继续操作
  74. </div>
  75. <table class="layui-table">
  76. <thead>
  77. <tr>
  78. <th>#</th>
  79. <th>文件</th>
  80. </tr>
  81. </thead>
  82. <tbody>
  83. {{# for(var i=0;i < d.list.conflictlist.length;i++){ }}
  84. <tr>
  85. <th scope="row">{{i+1}}</th>
  86. <td>{{d.list.conflictlist[i]}}</td>
  87. </tr>
  88. {{# }; }}
  89. </tbody>
  90. </table>
  91. </script>
  92. <script id="uninstalltpl" type="text/html">
  93. <div class="">
  94. <div class="">{{ d.title }}
  95. <p class="text-danger">卸载将会删除所有插件文件且不可找回!!! </p>
  96. {if config('app_debug')}
  97. <p class="text-danger"><input type="checkbox" name="droptables" id="droptables" data-name="{{ d.name }}"/> 删除所有插件相关数据表且不可找回!!! </p>
  98. {/if}
  99. <p class="text-danger">如有重要数据请备份后再操作!!!</p>
  100. </div>
  101. </div>
  102. </script>
  103. <script id="logintpl" type="text/html">
  104. <div>
  105. <form class="layui-form">
  106. <div class="alert alert-danger-light">
  107. <strong>温馨提示</strong><br/>此处登录账号为<a href="https://www.yzncms.com" target="_blank">Yzncms官网账号</a>
  108. </div>
  109. <div class="layui-form-item">
  110. <div class="layui-input-wrap">
  111. <div class="layui-input-prefix">
  112. <i class="layui-icon layui-icon-username"></i>
  113. </div>
  114. <input type="text" class="layui-input" id="inputAccount" value="" autocomplete="off" placeholder="你的手机号、用户名或邮箱">
  115. </div>
  116. </div>
  117. <div class="layui-form-item">
  118. <div class="layui-input-wrap">
  119. <div class="layui-input-prefix">
  120. <i class="layui-icon layui-icon-password"></i>
  121. </div>
  122. <input type="password" class="layui-input" id="inputPassword" value="" autocomplete="off" lay-affix="eye" placeholder="你的密码">
  123. </div>
  124. </div>
  125. </form>
  126. </div>
  127. </script>
  128. <script id="userinfotpl" type="text/html">
  129. <div>
  130. <form class="form-horizontal form-userinfo">
  131. <div class="alert alert-dismissable alert-info-light">
  132. <strong>温馨提示</strong><br/>你好!{{d.username}}<br />当前你已经登录,将同步保存你的购买记录
  133. </div>
  134. </form>
  135. </div>
  136. </script>
  137. {/block}
  138. {block name="script"}
  139. <script>
  140. layui.use(['yznTable','table','laytpl','yzn','notice','element','dropdown','form','yznUpload'], function() {
  141. var yznTable = layui.yznTable,
  142. $ = layui.$,
  143. table = layui.table,
  144. laytpl = layui.laytpl,
  145. yzn = layui.yzn,
  146. notice = layui.notice,
  147. element = layui.element,
  148. dropdown = layui.dropdown,
  149. form = layui.form,
  150. yznUpload = layui.yznUpload;
  151. var init = {
  152. table_elem: '#currentTable',
  153. table_render_id: 'currentTable',
  154. layFilter: 'currentTable_LayFilter',
  155. };
  156. var area = [$(window).width() > 800 ? '800px' : '95%', $(window).height() > 600 ? '600px' : '95%'];
  157. var switch_local = function () {
  158. layer.confirm('插件市场暂不可用,是否切换到本地插件?', {
  159. title: '温馨提示',
  160. btn: ['切换到本地插件', '重新尝试加载']
  161. }, function (index) {
  162. layer.close(index);
  163. $(".btn-switch[data-type='local']")[0].click();
  164. }, function (index) {
  165. layer.close(index);
  166. table.reload(init.table_render_id);
  167. });
  168. return false;
  169. };
  170. yznTable.render({
  171. init: init,
  172. toolbar: ['refresh',
  173. [{
  174. html:'<a id="faupload-addon" class="layui-btn layui-btn-sm faupload" data-url="{:url("local")}" data-chunking="false" data-mimetype="zip" data-multiple="false"><i class="iconfont icon-upload-fill"></i>&nbsp;本地安装</a>'
  175. },{
  176. html:'<a class="layui-btn {if $type=='online'}layui-btn-normal{else}layui-btn-primary layui-border-blue{/if} layui-btn-sm btn-switch" data-type="all" href="{:url("index")}" style="margin-left: 10px !important;"><i class="iconfont icon-other"></i>&nbsp;全部</a>'
  177. },{
  178. html:'<a class="layui-btn {if $type=='local'}layui-btn-normal{else}layui-btn-primary layui-border-blue{/if} layui-btn-sm btn-switch" data-type="local" href="{:url("index",["type"=>"local"])}"><i class="iconfont icon-manage"></i>&nbsp;本地插件</a>'
  179. },{
  180. html:'<a class="layui-btn layui-bg-black layui-btn-sm btn-userinfo" style="margin-left: 10px !important;" href="javascript:;"><i class="iconfont icon-user-line"></i>&nbsp;会员信息</a>'
  181. }
  182. ],
  183. ],
  184. url: '{:url("index",["type"=>$type])}',
  185. css :'.layui-table-tool-temp{padding-right: 85px;}',
  186. showSearch:false,
  187. cols: [
  188. [
  189. { field: 'title', width: 200, title: '名称',templet: '#titleTpl'},
  190. { field: 'name', width: 150, title: '标识' },
  191. { field: 'description', title: '描述' },
  192. { field: 'author', width: 90, title: '作者' },
  193. {if $type == 'online'}
  194. { field: 'price', width: 95, title: '价格' , templet: function(d){
  195. if (isNaN(d.price)) {
  196. return d.price;
  197. }
  198. return parseFloat(d.price) == 0 ? '<span class="text-success">' + '免费' + '</span>' : '<span class="text-danger">¥' + d.price + '</span>';
  199. }},
  200. { field: 'downloads', width: 90, title: '下载' },
  201. {/if}
  202. { field: 'version', width: 80, title: '版本',templet: function(d){
  203. return d.addon && d.addon.version != d.version ? '<a href="javascript:;"><span class="releasetips text-primary" lay-tips="发现新版本:'+d.version+'">' + d.addon.version + '<i></i></span></a>' : d.version;
  204. }},
  205. { field: 'status', width: 90, title: '状态', templet: '#statusTpl' },
  206. { fixed: 'right', width: 180, title: '操作', templet: '#operateTpl' }
  207. ]
  208. ],
  209. page: {limit:20},
  210. before(){
  211. let userinfo = yzn.cache.getStorage('yzncms_userinfo');
  212. this.where.uid = userinfo ? userinfo.id : '';
  213. this.where.token = userinfo ? userinfo.token : '';
  214. this.where.category_id = $('input[name="category_id"]').val();
  215. },
  216. done: function(res, curr, count){
  217. if (res && typeof res.category != 'undefined' && $(".nav-category li").length == 1) {
  218. $.each(res.category, function (i, j) {
  219. $("<li data-id='" + j.id + "'>" + j.title + "</li>").insertAfter($(".nav-category li:first"));
  220. });
  221. }
  222. if(count==-1){
  223. switch_local();
  224. }
  225. yznUpload.api.upload("#faupload-addon", function (data, ret) {
  226. //上传完毕回调
  227. var addon = data.addon;
  228. var testdata = data.addon.testdata;
  229. operate(addon.name, 'enable', false, function (data, ret) {
  230. layer.alert('安装成功!清除浏览器缓存和框架缓存后生效!' + (testdata ? '<br>你还可以继续导入测试数据!' : ""), {
  231. btn: testdata ? ['导入测试数据', '暂不导入'] : ['确定'],
  232. title:'温馨提示',
  233. yes: function (index) {
  234. if (testdata) {
  235. yzn.request.post({
  236. url: '{:url("testdata")}',
  237. data: {
  238. name: addon.name,
  239. }
  240. }, function (data,res) {
  241. layer.close(index);
  242. yzn.msg.success(res.msg);
  243. });
  244. } else {
  245. layer.close(index);
  246. }
  247. },
  248. icon: 1
  249. });
  250. });
  251. return false;
  252. }, function (data, ret) {
  253. if (ret.msg && ret.msg.match(/(login|登录)/g)) {
  254. return layer.alert(ret.msg, {
  255. title: '温馨提示',
  256. btn: ['立即登录'],
  257. yes: function (index, layero) {
  258. $(".btn-userinfo").trigger("click");
  259. }
  260. });
  261. }
  262. })
  263. }
  264. });
  265. yznTable.bindevent();
  266. // 检测是否登录
  267. $(document).on("mousedown", "#faupload-addon", function (e) {
  268. if(!isLogin()) return
  269. });
  270. table.on('tool('+init.layFilter+')', function(obj){
  271. var that = this;
  272. jsondata = $(this).data('value');
  273. var name = $(this).data("name");
  274. var title = $(this).data("title");
  275. const arr = jsondata.map(({id, version}) => ({ id, title: version }))
  276. dropdown.render({
  277. elem: that,
  278. show: true, // 外部事件触发即显示
  279. data: arr,
  280. click: function(data, othis){
  281. if(!isLogin()) return
  282. if(obj.event === 'install'){
  283. yzn.msg.confirm(title, function(index){
  284. install(name, data.title, false);
  285. });
  286. }
  287. if(obj.event === 'upgrade'){
  288. layer.confirm('确认升级<b>《'+title+'》</b>?<p class="text-danger">1、请务必做好代码和数据库备份!备份!备份!<br>2、升级后如出现冗余数据,请根据需要移除即可!<br>3、不建议在生产环境升级,请在本地完成升级测试</p>如有重要数据请备份后再操作!', function (index, layero) {
  289. upgrade(name, data.title);
  290. });
  291. }
  292. }
  293. })
  294. })
  295. element.on('tab(tabswitch)', function(data){
  296. var value = $(this).data("id");
  297. $('input[name="category_id"]').val(value);
  298. table.reload(init.table_render_id);
  299. });
  300. // 会员信息
  301. $(document).on("click", ".btn-userinfo", function (e, name, version) {
  302. var that = this;
  303. var area = [$(window).width() > 800 ? '500px' : '95%', $(window).height() > 600 ? '400px' : '95%'];
  304. var userinfo = yzn.cache.getStorage('yzncms_userinfo');
  305. if (!userinfo) {
  306. layer.open({
  307. content: laytpl($("#logintpl").html()).render({}),
  308. zIndex: 99,
  309. area: area,
  310. title: '登录',
  311. resize: false,
  312. btn: ['登录', '注册'],
  313. yes: function (index, layero) {
  314. yzn.request.post({
  315. url: '{$api_url}/member/login',
  316. type: 'post',
  317. data: {
  318. account: $("#inputAccount", layero).val(),
  319. password: $("#inputPassword", layero).val(),
  320. }
  321. }, function (data, ret) {
  322. yzn.cache.setStorage('yzncms_userinfo',data.userinfo);
  323. layer.closeAll();
  324. layer.alert(ret.msg, {title: '温馨提示', icon: 1});
  325. return false;
  326. }, function (data, ret) {
  327. notice.error({ message: ret.msg });
  328. });
  329. },
  330. btn2: function () {
  331. return false;
  332. },
  333. success: function (layero, index) {
  334. this.checkEnterKey = function (event) {
  335. if (event.keyCode === 13) {
  336. $(".layui-layer-btn0").trigger("click");
  337. return false;
  338. }
  339. };
  340. $(document).on('keydown', this.checkEnterKey);
  341. $(".layui-layer-btn1", layero).prop("href", "https://www.yzncms.com/member/index/register.html").prop("target", "_blank");
  342. },
  343. end: function () {
  344. $(document).off('keydown', this.checkEnterKey);
  345. }
  346. });
  347. } else {
  348. yzn.request.post({
  349. url: '{$api_url}/member/index',
  350. data: {
  351. uid: userinfo.id,
  352. token: userinfo.token,
  353. }
  354. }, function (data) {
  355. layer.open({
  356. content: laytpl($("#userinfotpl").html()).render(userinfo),
  357. area: area,
  358. title: '会员信息',
  359. resize: false,
  360. btn: ['退出登录', '关闭'],
  361. yes: function () {
  362. yzn.request.post({
  363. url: '{$api_url}/member/logout',
  364. data: {uid: userinfo.id, token: userinfo.token}
  365. }, function (data, ret) {
  366. yzn.cache.setStorage('yzncms_userinfo','');
  367. layer.closeAll();
  368. layer.alert(ret.msg, {title: '温馨提示', icon: 0});
  369. }, function (data, ret) {
  370. yzn.cache.setStorage('yzncms_userinfo','');
  371. layer.closeAll();
  372. layer.alert(ret.msg, {title: '温馨提示', icon: 0});
  373. });
  374. }
  375. });
  376. return false;
  377. }, function (data) {
  378. yzn.cache.setStorage('yzncms_userinfo','');
  379. $(that).trigger('click');
  380. return false;
  381. });
  382. }
  383. });
  384. var install = function (name, version, force) {
  385. var userinfo = yzn.cache.getStorage('yzncms_userinfo');
  386. var uid = userinfo ? userinfo.id : 0;
  387. var token = userinfo ? userinfo.token : '';
  388. yzn.request.post({
  389. url: '{:url("install")}',
  390. data: {
  391. name: name,
  392. force: force ? 1 : 0,
  393. uid: uid,
  394. token: token,
  395. version: version
  396. },
  397. }, function(data,res) {
  398. layer.closeAll();
  399. layer.alert('安装成功!清除浏览器缓存和框架缓存后生效!' + (data.addon.testdata ? '<br>你还可以继续导入测试数据!' : ""), {
  400. btn: data.addon.testdata ? ['导入测试数据', '暂不导入'] : ['确定'],
  401. title:'温馨提示',
  402. yes: function (index) {
  403. if (data.addon.testdata) {
  404. yzn.request.post({
  405. url: '{:url("testdata")}',
  406. data: {
  407. name: name,
  408. }
  409. }, function (data,res) {
  410. layer.close(index);
  411. yzn.msg.success(res.msg);
  412. });
  413. } else {
  414. layer.close(index);
  415. }
  416. table.reload(init.table_render_id);
  417. },
  418. icon: 1
  419. });
  420. },function(data,res) {
  421. var area = [$(window).width() > 650 ? '650px' : '95%', $(window).height() > 710 ? '710px' : '95%'];
  422. if (res && res.code === -2) {
  423. layer.closeAll();
  424. yzn.open('立即支付' , res.data.payurl,'','', {
  425. area: area,
  426. end: function () {
  427. yzn.request.post({
  428. url: '{:url("isbuy")}',
  429. data: {
  430. name: name,
  431. force: force ? 1 : 0,
  432. uid: uid,
  433. token: token,
  434. version: version
  435. }
  436. }, function () {
  437. top.layer.alert('购买成功!请点击继续安装按钮完成安装!', {
  438. btn: ['继续安装'],
  439. title: '温馨提示',
  440. icon: 1,
  441. yes: function (index) {
  442. top.layer.close(index);
  443. install(name, version);
  444. }
  445. });
  446. return false;
  447. }, function () {
  448. console.log('已取消');
  449. return false;
  450. });
  451. }
  452. });
  453. }else if (res && res.code === -3) {
  454. //插件目录发现影响全局的文件
  455. layer.open({
  456. content: laytpl($("#conflicttpl").html()).render({list:res.data}),
  457. shade: 0.8,
  458. area: area,
  459. title:'温馨提示',
  460. btn: ['继续操作', '取消'],
  461. end: function () {
  462. },
  463. yes: function () {
  464. install(name, version, true);
  465. }
  466. });
  467. } else if (res && res.code === 401) {
  468. yzn.cache.setStorage('yzncms_userinfo','');
  469. layer.alert('登录已经失效,请重新登录后操作!', {
  470. title: '温馨提示',
  471. btn: ['立即登录'],
  472. yes: function (index, layero) {
  473. $(".btn-userinfo").trigger("click");
  474. },
  475. });
  476. } else {
  477. layer.alert(res.msg, {title: '温馨提示', icon: 0});
  478. }
  479. return false;
  480. })
  481. }
  482. var uninstall = function (name, force, droptables) {
  483. yzn.request.post({
  484. url: '{:url("uninstall")}',
  485. data: {name: name, force: force ? 1 : 0, droptables: droptables ? 1 : 0}
  486. }, function (data,res) {
  487. layer.closeAll();
  488. yzn.msg.success(res.msg);
  489. table.reload(init.table_render_id);
  490. }, function (data,res) {
  491. if (res && res.code === -3) {
  492. //插件目录发现影响全局的文件
  493. layer.open({
  494. content: laytpl($("#conflicttpl").html()).render({list:res.data}),
  495. shade: 0.8,
  496. area: area,
  497. title:'温馨提示',
  498. btn: ['继续操作', '取消'],
  499. end: function () {
  500. },
  501. yes: function () {
  502. uninstall(name, true, droptables);
  503. }
  504. });
  505. } else {
  506. layer.alert(res.msg, {title: '温馨提示', icon: 0});
  507. }
  508. return false;
  509. });
  510. };
  511. // 点击升级
  512. $(document).on("click", ".btn-upgrade", function () {
  513. var name = $(this).data('name');
  514. var version = $(this).data("version");
  515. var title = $(this).data("title");
  516. if(!isLogin()) return
  517. layer.confirm('确认升级<b>《'+title+'》</b>?<p class="text-danger">1、请务必做好代码和数据库备份!备份!备份!<br>2、升级后如出现冗余数据,请根据需要移除即可!<br>3、不建议在生产环境升级,请在本地完成升级测试</p>如有重要数据请备份后再操作!', function (index, layero) {
  518. upgrade(name, version);
  519. });
  520. });
  521. var upgrade = function (name, version) {
  522. var userinfo = yzn.cache.getStorage('yzncms_userinfo');
  523. var uid = userinfo ? userinfo.id : 0;
  524. var token = userinfo ? userinfo.token : '';
  525. yzn.request.post({
  526. url: '{:url("upgrade")}',
  527. data: {
  528. name: name,
  529. uid: uid,
  530. token: token,
  531. version: version
  532. }
  533. }, function (data, ret) {
  534. table.reload(init.table_render_id);
  535. notice.success({ message: ret.msg });
  536. layer.closeAll();
  537. }, function (data, ret) {
  538. layer.alert(ret.msg, {title: '温馨提示'});
  539. return false;
  540. });
  541. };
  542. var operate = function (name, action, force, success) {
  543. yzn.request.post({
  544. url: '{:url("state")}',
  545. data: {name: name, action: action, force: force ? 1 : 0}
  546. }, function(data,res) {
  547. layer.closeAll();
  548. if (typeof success === 'function') {
  549. success(res);
  550. }
  551. table.reload(init.table_render_id);
  552. return false;
  553. }, function(data,res) {
  554. if (res && res.code === -3) {
  555. //插件目录发现影响全局的文件
  556. layer.open({
  557. content: laytpl($("#conflicttpl").html()).render({list:res.data}),
  558. shade: 0.8,
  559. area: area,
  560. title:'温馨提示',
  561. btn: ['继续操作', '取消'],
  562. end: function () {
  563. },
  564. yes: function () {
  565. operate(name, action, true, success);
  566. }
  567. });
  568. } else {
  569. layer.alert(res.msg, {title: '温馨提示', icon: 0});
  570. }
  571. })
  572. };
  573. var isLogin = function (){
  574. var userinfo = yzn.cache.getStorage('yzncms_userinfo');
  575. var uid = userinfo ? userinfo.id : 0;
  576. if (parseInt(uid) === 0) {
  577. layer.alert('你当前未登录Yzncms,请登录后操作!', {
  578. title: '温馨提示',
  579. btn: ['立即登录'],
  580. yes: function (index, layero) {
  581. $(".btn-userinfo").trigger("click");
  582. },
  583. });
  584. return false;
  585. }
  586. return true;
  587. }
  588. var tables = [];
  589. $(document).on("click", "#droptables", function () {
  590. if ($(this).prop("checked")) {
  591. yzn.request.post({
  592. url: '{:url("get_table_list")}',
  593. async: false,
  594. data: {name: $(this).data("name")}
  595. }, function (res) {
  596. tables = res.tables;
  597. return false;
  598. });
  599. var html;
  600. html = tables.length > 0 ? '<div class="alert alert-warning-light droptablestips" style="max-width:480px;max-height:300px;overflow-y: auto;">以下插件数据表将会被删除:<br>' + tables.join("<br>") + '<br>注意:部分插件还同时会删除演示数据和关联表等</div>'
  601. : '<div class="alert alert-warning-light droptablestips">注意:部分插件还同时会删除演示数据和关联表等</div>';
  602. $(html).insertAfter($(this).closest("p"));
  603. } else {
  604. $(".droptablestips").remove();
  605. }
  606. $(window).resize();
  607. });
  608. // 点击安装
  609. $(document).on("click", ".btn-install", function () {
  610. var name = $(this).data("name");
  611. var title = $(this).data("title");
  612. var version = $(this).data("version");
  613. if(!isLogin()) return
  614. yzn.msg.confirm(title, function(index){
  615. install(name, version, false);
  616. });
  617. });
  618. // 点击启用/禁用
  619. form.on('switch(templet-status)', function (obj) {
  620. var name = $(this).data("name");
  621. var action = $(this).data("action");
  622. $(this).trigger('click');
  623. form.render('checkbox');
  624. operate(name, action, false);
  625. })
  626. // 点击卸载
  627. $(document).on("click", ".btn-uninstall", function () {
  628. var name = $(this).data('name');
  629. var title = $(this).data('title');
  630. if ($(this).data('status') == 1) {
  631. layer.alert('请先禁用插件再进行卸载', {icon: 7});
  632. return false;
  633. }
  634. yzn.msg.confirm(laytpl($("#uninstalltpl").html()).render({name:name,title:title}), function (index, layero) {
  635. uninstall(name, false, $("input[name='droptables']", layero).prop("checked"));
  636. });
  637. });
  638. });
  639. </script>
  640. {/block}