define(['jquery', 'backend', 'table', 'form', 'layui', 'upload'], function($, Backend, Table, Form, layui, Upload) {
var table = layui.table;
var Controller = {
index: function() {
Table.init = {
table_elem: '#currentTable',
table_render_id: 'currentTable',
layFilter: 'currentTable_LayFilter',
};
var area = Yzn.config.openArea != undefined ? Yzn.config.openArea : [$(window).width() > 800 ? '800px' : '95%', $(window).height() > 600 ? '600px' : '95%'];
var switch_local = function() {
Layer.confirm('插件市场暂不可用,是否切换到本地插件?', {
title: '温馨提示',
btn: ['切换到本地插件', '重新尝试加载']
}, function(index) {
Layer.close(index);
$(".btn-switch[data-type='local']")[0].click();
}, function(index) {
Layer.close(index);
table.reload(Table.init.table_render_id);
});
return false;
};
var button_online = Config.addon.type == 'online' ? "layui-btn-normal" : "layui-btn-primary layui-border-blue";
var button_local = Config.addon.type == 'local' ? "layui-btn-normal" : "layui-btn-primary layui-border-blue";
Table.render({
init: Table.init,
toolbar: ['refresh',
{
text: '本地安装',
url:"",
icon: 'iconfont icon-upload-fill',
class: 'layui-btn layui-btn-sm faupload',
extend: 'id="faupload-addon" data-type="file" data-url="addon/local" data-chunking="false" data-mimetype="zip" data-multiple="false"',
},{
text: '全部',
url:"addon/index",
icon: 'iconfont icon-list-unordered',
class: 'layui-btn layui-btn-sm btn-switch ' + button_online,
extend: 'data-type="all" style="margin-left: 10px !important;"',
},{
text: '本地插件',
url:"addon/index?type=local",
icon: 'iconfont icon-apps-line',
class: 'layui-btn layui-btn-sm btn-switch ' + button_local,
extend: 'data-type="local"',
},{
text: '会员信息',
icon: 'iconfont icon-user-line',
class: 'layui-btn layui-bg-black layui-btn-sm btn-userinfo',
extend: 'style="margin-left: 10px !important;"',
},
],
url: 'addon/index' + (Config.addon.type == "local" ? "?type=local" : ""),
css: '.layui-table-tool-temp{padding-right: 85px;}',
showSearch: false,
cols: [
[
{ field: 'title', width: 200, title: '名称', templet: '#titleTpl' },
{ field: 'name', width: 150, title: '标识' },
{ field: 'description', minWidth:250, title: '描述' },
{ field: 'author', width: 100, title: '作者' },
{
field: 'price',
width: 95,
title: '价格',
hide: (Config.addon.type == "local" ? true : false),
templet: function(d) {
if (isNaN(d.price)) {
return d.price;
}
return parseFloat(d.price) == 0 ? '' + '免费' + '' : '¥' + d.price + '';
}
},
{ field: 'downloads', width: 90, title: '下载', hide: (Config.addon.type == "local" ? true : false) },
{
field: 'version',
width: 80,
title: '版本',
templet: function(d) {
return d.addon && d.addon.version != d.version ? '' + d.addon.version + '' : d.version;
}
},
{ field: 'status', width: 90, title: '状态', templet: '#statusTpl' },
{ fixed: 'right', width: 180, title: '操作', templet: '#operateTpl' }
]
],
page: { limit: 20 },
before() {
let userinfo = Yzn.cache.get('yzncms_userinfo');
this.where.uid = userinfo ? userinfo.id : '';
this.where.token = userinfo ? userinfo.token : '';
this.where.category_id = $('input[name="category_id"]').val();
},
done: function(res, curr, count) {
if (res && typeof res.category != 'undefined' && $(".nav-category li").length == 1) {
$.each(res.category, function(i, j) {
$("
" + j.title + "").insertAfter($(".nav-category li:first"));
});
}
if (count == -1) {
switch_local();
}
$("#faupload-addon").data("params", function (files, xhr) {
return {
force: (files[0].force || false) ? 1 : 0
};
})
Upload.api.upload("#faupload-addon", function(data, ret) {
//上传完毕回调
var addon = data.addon;
var testdata = data.addon.testdata;
operate(addon.name, 'enable', false, function(data, ret) {
Layer.alert('安装成功!清除浏览器缓存和框架缓存后生效!' + (testdata ? '
你还可以继续导入测试数据!' : ""), {
btn: testdata ? ['导入测试数据', '暂不导入'] : ['确定'],
title: '温馨提示',
yes: function(index) {
if (testdata) {
Yzn.api.ajax({
url: 'addon/testdata',
data: {
name: addon.name,
}
}, function(data, res) {
Layer.close(index);
});
} else {
Layer.close(index);
}
},
icon: 1
});
});
return false;
}, function(data, ret, up, file) {
if (ret.msg && ret.msg.match(/(login|登录)/g)) {
return Layer.alert(ret.msg, {
title: '温馨提示',
btn: ['立即登录'],
yes: function(index, layero) {
$(".btn-userinfo").trigger("click");
}
});
} else if (ret.code === -1) {
Layer.confirm('确认升级《' + data.title + '》?1、请务必做好代码和数据库备份!备份!备份!
2、升级后如出现冗余数据,请根据需要移除即可!
3、不建议在生产环境升级,请在本地完成升级测试
如有重要数据请备份后再操作!', { title: '温馨提示' },
function(index, layero) {
up.removeFile(file);
file.force = true;
up.uploadFile(file);
Layer.close(index);
});
return false;
} else if (ret && ret.code === -3) {
//插件目录发现影响全局的文件
Layer.open({
content: layui.laytpl($("#conflicttpl").html()).render({ list: ret.data }),
shade: 0.8,
area: area,
title: '温馨提示',
btn: ['继续操作', '取消'],
end: function() {
},
yes: function() {
up.removeFile(file);
file.force = true;
up.uploadFile(file);
Layer.close(index);
}
});
} else {
Layer.alert(ret.msg, { title: '温馨提示', icon: 0 });
}
})
}
});
Table.api.bindevent();
// 检测是否登录
$(document).on("mousedown", "#faupload-addon", function(e) {
if (!isLogin()) return
});
table.on('tool(' + Table.init.layFilter + ')', function(obj) {
var that = this;
jsondata = $(this).data('value');
var name = $(this).data("name");
var title = $(this).data("title");
const arr = jsondata.map(({ id, version }) => ({ id, title: version }))
layui.dropdown.render({
elem: that,
show: true, // 外部事件触发即显示
data: arr,
click: function(data, othis) {
if (!isLogin()) return
if (obj.event === 'install') {
Layer.confirm(title, function(index) {
install(name, data.title, false);
});
}
if (obj.event === 'upgrade') {
Layer.confirm('确认升级《' + title + '》?1、请务必做好代码和数据库备份!备份!备份!
2、升级后如出现冗余数据,请根据需要移除即可!
3、不建议在生产环境升级,请在本地完成升级测试
如有重要数据请备份后再操作!', function(index, layero) {
upgrade(name, data.title);
});
}
}
})
})
layui.tabs.on(`afterChange(tabswitch)`, function(data) {
var value = $(this).data("id");
$('input[name="category_id"]').val(value);
table.reload(Table.init.table_render_id,{
page: {
curr: 1 // 重置到第一页
}
});
})
// 会员信息
$(document).on("click", ".btn-userinfo", function(e, name, version) {
var that = this;
var area = [$(window).width() > 800 ? '500px' : '95%', $(window).height() > 600 ? '400px' : '95%'];
var userinfo = Yzn.cache.get('yzncms_userinfo');
if (!userinfo) {
Layer.open({
content: layui.laytpl($("#logintpl").html()).render({}),
zIndex: 99,
area: area,
title: '登录',
resize: false,
btn: ['登录', '注册'],
yes: function(index, layero) {
Yzn.api.ajax({
url: Config.addon.api_url + '/user/login',
type: 'post',
data: {
account: $("#inputAccount", layero).val(),
password: $("#inputPassword", layero).val(),
}
}, function(data, ret) {
Yzn.cache.set('yzncms_userinfo', data.userinfo);
Layer.closeAll();
Layer.alert(ret.msg, { title: '温馨提示', icon: 1 });
return false;
}, function(data, ret) {
});
},
btn2: function() {
return false;
},
success: function(layero, index) {
this.checkEnterKey = function(event) {
if (event.keyCode === 13) {
$(".layui-layer-btn0").trigger("click");
return false;
}
};
$(document).on('keydown', this.checkEnterKey);
$(".layui-layer-btn1", layero).prop("href", "https://www.yzncms.com/index/user/register.html").prop("target", "_blank");
},
end: function() {
$(document).off('keydown', this.checkEnterKey);
}
});
} else {
Yzn.api.ajax({
url: Config.addon.api_url + '/user/index',
data: {
uid: userinfo.id,
token: userinfo.token,
}
}, function(data) {
Layer.open({
content: layui.laytpl($("#userinfotpl").html()).render(userinfo),
area: area,
title: '会员信息',
resize: false,
btn: ['退出登录', '关闭'],
yes: function() {
Yzn.api.ajax({
url: Config.addon.api_url + '/user/logout',
data: { uid: userinfo.id, token: userinfo.token }
}, function(data, ret) {
Yzn.cache.delete('yzncms_userinfo');
Layer.closeAll();
Layer.alert(ret.msg, { title: '温馨提示', icon: 0 });
}, function(data, ret) {
Yzn.cache.delete('yzncms_userinfo');
Layer.closeAll();
Layer.alert(ret.msg, { title: '温馨提示', icon: 0 });
});
}
});
return false;
}, function(data) {
Yzn.cache.delete('yzncms_userinfo');
$(that).trigger('click');
return false;
});
}
});
var install = function(name, version, force) {
var userinfo = Yzn.cache.get('yzncms_userinfo');
var uid = userinfo ? userinfo.id : 0;
var token = userinfo ? userinfo.token : '';
Yzn.api.ajax({
url: 'addon/install',
data: {
name: name,
force: force ? 1 : 0,
uid: uid,
token: token,
version: version
},
}, function(data, res) {
Layer.closeAll();
Layer.alert('安装成功!清除浏览器缓存和框架缓存后生效!' + (data.addon.testdata ? '
你还可以继续导入测试数据!' : ""), {
btn: data.addon.testdata ? ['导入测试数据', '暂不导入'] : ['确定'],
title: '温馨提示',
yes: function(index) {
if (data.addon.testdata) {
Yzn.api.ajax({
url: 'addon/testdata',
data: {
name: name,
}
}, function(data, res) {
Layer.close(index);
});
} else {
Layer.close(index);
}
},
icon: 1
});
Controller.api.refresh();
}, function(data, res) {
var area = [$(window).width() > 650 ? '650px' : '95%', $(window).height() > 710 ? '710px' : '95%'];
if (res && res.code === -2) {
Layer.closeAll();
top.Yzn.api.open(res.data.payurl,'立即支付',{
area: area,
end: function() {
Yzn.api.ajax({
url: 'addon/isbuy',
data: {
name: name,
force: force ? 1 : 0,
uid: uid,
token: token,
version: version
}
}, function() {
top.Layer.alert('购买成功!请点击继续安装按钮完成安装!', {
btn: ['继续安装'],
title: '温馨提示',
icon: 1,
yes: function(index) {
top.Layer.close(index);
install(name, version);
}
});
return false;
}, function() {
console.log('已取消');
return false;
});
}
});
} else if (res && res.code === -3) {
//插件目录发现影响全局的文件
Layer.open({
content: layui.laytpl($("#conflicttpl").html()).render({ list: res.data }),
shade: 0.8,
area: area,
title: '温馨提示',
btn: ['继续操作', '取消'],
end: function() {
},
yes: function() {
install(name, version, true);
}
});
} else if (res && res.code === 401) {
Yzn.cache.delete('yzncms_userinfo');
Layer.alert('登录已经失效,请重新登录后操作!', {
title: '温馨提示',
btn: ['立即登录'],
yes: function(index, layero) {
$(".btn-userinfo").trigger("click");
},
});
} else {
Layer.alert(res.msg, { title: '温馨提示', icon: 0 });
}
return false;
})
}
var uninstall = function(name, force, droptables) {
Yzn.api.ajax({
url: 'addon/uninstall',
data: { name: name, force: force ? 1 : 0, droptables: droptables ? 1 : 0 }
}, function(data, res) {
Layer.closeAll();
Controller.api.refresh();
}, function(data, res) {
if (res && res.code === -3) {
//插件目录发现影响全局的文件
Layer.open({
content: layui.laytpl($("#conflicttpl").html()).render({ list: res.data }),
shade: 0.8,
area: area,
title: '温馨提示',
btn: ['继续操作', '取消'],
end: function() {
},
yes: function() {
uninstall(name, true, droptables);
}
});
} else {
Layer.alert(res.msg, { title: '温馨提示', icon: 0 });
}
return false;
});
};
// 点击升级
$(document).on("click", ".btn-upgrade", function() {
var name = $(this).data('name');
var version = $(this).data("version");
var title = $(this).data("title");
if (!isLogin()) return
Layer.confirm('确认升级《' + title + '》?1、请务必做好代码和数据库备份!备份!备份!
2、升级后如出现冗余数据,请根据需要移除即可!
3、不建议在生产环境升级,请在本地完成升级测试
如有重要数据请备份后再操作!', function(index, layero) {
upgrade(name, version);
});
});
var upgrade = function(name, version) {
var userinfo = Yzn.cache.get('yzncms_userinfo');
var uid = userinfo ? userinfo.id : 0;
var token = userinfo ? userinfo.token : '';
Yzn.api.ajax({
url: 'addon/upgrade',
data: {
name: name,
uid: uid,
token: token,
version: version
}
}, function(data, ret) {
Controller.api.refresh();
Layer.closeAll();
}, function(data, ret) {
Layer.alert(ret.msg, { title: '温馨提示' });
return false;
});
};
var operate = function(name, action, force, success, error) {
Yzn.api.ajax({
url: 'addon/state',
data: { name: name, action: action, force: force ? 1 : 0 }
}, function(data, res) {
Layer.closeAll();
if (typeof success === 'function') {
success(res);
}
Controller.api.refresh();
return false;
}, function(data, res) {
if (typeof error === "function") {
error(res);
}
if (res && res.code === -3) {
//插件目录发现影响全局的文件
Layer.open({
content: layui.laytpl($("#conflicttpl").html()).render({ list: res.data }),
shade: 0.8,
area: area,
title: '温馨提示',
btn: ['继续操作', '取消'],
end: function() {
},
yes: function() {
operate(name, action, true, success);
}
});
} else {
Layer.alert(res.msg, { title: '温馨提示', icon: 0 });
}
})
};
var isLogin = function() {
var userinfo = Yzn.cache.get('yzncms_userinfo');
var uid = userinfo ? userinfo.id : 0;
if (parseInt(uid) === 0) {
Layer.alert('你当前未登录Yzncms,请登录后操作!', {
title: '温馨提示',
btn: ['立即登录'],
yes: function(index, layero) {
$(".btn-userinfo").trigger("click");
},
});
return false;
}
return true;
}
var tables = [];
$(document).on("click", "#droptables", function() {
if ($(this).prop("checked")) {
Yzn.api.ajax({
url: 'addon/get_table_list',
async: false,
data: { name: $(this).data("name") }
}, function(res) {
tables = res.tables;
return false;
});
var html;
html = tables.length > 0 ? '以下插件数据表将会被删除:
' + tables.join("
") + '
注意:部分插件还同时会删除演示数据和关联表等
' :
'注意:部分插件还同时会删除演示数据和关联表等
';
$(html).insertAfter($(this).closest("p"));
} else {
$(".droptablestips").remove();
}
$(window).resize();
});
// 点击安装
$(document).on("click", ".btn-install", function() {
var name = $(this).data("name");
var title = $(this).data("title");
var version = $(this).data("version");
if (!isLogin()) return
Layer.confirm(title, function(index) {
install(name, version, false);
});
});
// 点击启用/禁用
layui.form.on('switch(templet-status)', function(obj) {
var checked = obj.elem.checked ? 1 : 0;
var name = $(this).data("name");
var action = $(this).data("action");
operate(name, action, false, '', function(data, ret) {
obj.elem.checked = !checked;
});
})
// 点击卸载
$(document).on("click", ".btn-uninstall", function() {
var name = $(this).data('name');
var title = $(this).data('title');
if ($(this).data('status') == 1) {
Layer.alert('请先禁用插件再进行卸载', { icon: 7 });
return false;
}
Layer.confirm(layui.laytpl($("#uninstalltpl").html()).render({ name: name, title: title }), function(index, layero) {
uninstall(name, false, $("input[name='droptables']", layero).prop("checked"));
});
});
},
config: function() {
Controller.api.bindevent();
},
api: {
bindevent: function() {
Form.api.bindevent($("form.layui-form"));
},
refresh: function () {
//刷新左侧边栏
Yzn.api.refreshmenu();
table.reload(Table.init.table_render_id);
}
}
};
return Controller;
});