Files
premium/public/static/admin/js/plugins.js
T
2025-05-18 07:42:27 +00:00

258 lines
11 KiB
JavaScript
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
layui.use(["laytp", "operationDropdown", "context"], function () {
const funController = {};
//静态页面地址前缀
window.htmlPrefix = facade.compatibleHtmlPath("/admin/plugins/");
//后端接口地址前缀
window.apiPrefix = facade.compatibleApiRoute("/admin.plugins/");
//表格渲染
funController.tableRender = function (where, page) {
layui.table.render({
elem: "#laytp-table"
, limit: facade.getLimit('/admin/plugins/')
, id: "laytp-table"
, url: facade.url('/plugins/index',{paging:1})
, toolbar: "#default-toolbar"
, defaultToolbar: [{
title: '刷新',
layEvent: 'refresh',
icon: 'layui-icon-refresh',
}, 'filter', 'print', 'exports']
, where: where
, autoSort: false
, method: "GET"
, cellMinWidth: 80
, skin: 'line'
, loading: false
, page: {
curr: page
}
, parseData: function (res) { //res 即为原始返回的数据
layui.laytpTable.setLimit('/admin/plugins/', res.data.per_page);
return facade.parseTableData(res, true);
}
, done: function(obj){
layui.laytpTable.done();
var data = obj.data;
var dropdownList = [];
var dk,key = 0;
for(dk in data){
var versions = data[dk].versions
dropdownList = [];
for(key in versions){
dropdownList[key] = {
id: 'version_list_' + data[dk].id,
title: versions[key].version_num + ',依赖LT' + versions[key].lt_version,//文字标题
data: {
id: data[dk].id,
alias: data[dk].alias,
version_num: versions[key].version_num,
lt_version: versions[key].lt_version,
}
}
}
layui.operationDropdown.render({
elem: '.version_list_' + data[dk].id,
width: 190,
options: dropdownList,
click: function(option){
var ltVersionArr = option.data.lt_version.split(' - ');
var ltVersionBoolean = true;
if(ltVersionArr.length == 2){
if(parent.window.ltVersion < ltVersionArr[0] || parent.window.ltVersion > ltVersionArr[1]){
ltVersionBoolean = false;
}
}else{
if(option.data.lt_version > parent.window.ltVersion){
ltVersionBoolean = false;
}
}
if(ltVersionBoolean){
funController.installPlugin(option.data, $(this));
}else{
facade.error('插件此版本依赖laytp版本为:' + option.data.lt_version + '。 当前laytp版本为' + parent.window.ltVersion);
}
}
});
}
}
, cols: [[
{field: "name", title: "插件名称", align: "center", width: 140}
, {field: "category", title: "所属分类", align: "center", width: 100, templet:function(d){
return d.category ? d.category.name : '-';
}}
, {field: "desc", title: "简介", align: "center", width: 400}
, {field: "alias", title: "别名", align: "center"}
, {field: "img", title: "插件图片", align: "center", templet:function(d){
return d.imgFile ? laytp.tableFormatter.images(d.imgFile.path) : '-';
}}
, {field: "author", title: "作者", align: "center"}
, {field: "price", title: "价格", align: "center", templet:function(d){
return d.price > 0 ? "¥" + d.price/100 : "免费";
}}
, {field: "download_num", title: "下载次数", align: "center"}
, {field: "version", title: "当前版本", align: "center", templet:function(d){
return d.version ? d.version : "-";
}}
, {field: "newest_version", title: "最新版本", align: "center", templet:function(d){
if(d.lastVersion){
if(d.version){
if(d.lastVersion.version_num > d.version){
return "<span class=\"layui-badge-dot\"></span> " + d.lastVersion.version_num;
}else{
return d.lastVersion.version_num;
}
}else{
return d.lastVersion.version_num;
}
}else{
return "-";
}
}}
, {field: "operation", title: "操作", align: "center", fixed: 'right', toolbar: "#default-bar", width: 240}
]]
});
//监听数据表格顶部左侧按钮点击事件
layui.table.on("toolbar(laytp-table)", function (obj) {
//默认按钮点击事件,包括添加按钮和回收站按钮
var defaultTableToolbar = layui.context.get("defaultTableToolbar");
if (defaultTableToolbar.indexOf(obj.event) !== -1) {
laytp.tableToolbar(obj);
} else {
//自定义按钮点击事件
switch(obj.event){
// 会员信息
case "user":
facade.popupDiv({
title: "会员信息",
path: "/admin/plugins/login.html"
});
break;
}
}
});
//监听数据表格[操作列]按钮点击事件
layui.table.on("tool(laytp-table)", function (obj) {
var defaultTableTool = layui.context.get("defaultTableTool");
if (defaultTableTool.indexOf(obj.event) !== -1) {
laytp.tableTool(obj);
} else {
//自定义按钮点击事件
switch(obj.event){
// 卸载
case "uninstall":
facade.popupConfirm({
text: "真的卸载吗?卸载前请确保已经备份数据库,卸载插件的同时会将插件相关数据库表一并卸载删除",
route: window.apiPrefix + "uninstall",
data: {plugin: obj.data.alias}
}, function(res){
layui.context.put("pluginConf", res.data.pluginConf);//修改插件配置信息
layui.table.reloadData("laytp-table");
parent.parent.renderMenu();//重新渲染菜单
});
break;
// 安装最新版本
case "installNewest":
var btnObj = $(this);
if(obj.data.lastVersion.lt_version > parent.window.ltVersion){
facade.error('请更新laytp核心版本后安装插件此版本。插件此版本依赖laytp核心版本为:' + obj.data.lastVersion.lt_version + '。 laytp当前核心版本为' + parent.window.ltVersion);
return false;
}
funController.installPlugin(obj.data, btnObj);
break;
}
}
});
//监听表头排序事件
layui.table.on('sort(laytp-table)', function(obj){
layui.table.reloadData('laytp-table', {
initSort: obj //记录初始排序,如果不设的话,将无法标记表头的排序状态。
, where: {
"order_param" : {
"field" : obj.field,
"type" : obj.type
}
}
});
});
};
funController.tableRender();
// 安装插件函数封装
funController.installPlugin = function(data, btnObj){
var laytpGwToken = layui.context.get("laytpGwToken");
if(!laytpGwToken){
facade.popupDiv({
title: "会员信息",
path: "/admin/plugins/login.html"
});
return false;
}
var btnAnim = layui.button.load({elem:btnObj});
facade.success(data.alias + '插件正在安装中...');
layui.facade.ajax({
route:"/admin.plugins/install",
data:{
"plugin":data.alias,
"laytpGwToken":layui.context.get("laytpGwToken").token,
"pluginVersion":data.version_num,
"ltVersion":parent.window.ltVersion,
}
}).done(function(res){
if(res.code === 0){
layui.context.put("pluginConf", res.data.pluginConf);//修改插件配置信息
layui.table.reloadData("laytp-table");
parent.parent.renderMenu();//重新渲染菜单
}else if(res.code === 1){
facade.popupDiv({
title: "会员信息",
path: "/admin/plugins/login.html"
});
}else if(res.code === 2){
facade.popupDiv({
title: "购买插件",
path: "/admin/plugins/buy.html?name="+data.name+"&alias="+data.alias+"&price="+data.price
});
}else if(res.code === 3){
facade.error(res["msg"]);
}
btnAnim.stop();
}).fail(function(){
btnAnim.stop();
});
}
// 离线安装按钮渲染上传组件
var offLineBtnAnim = '';
var uploadInst = layui.upload.render({
elem: $("button[lay-event='offLineInstall']") //绑定元素
,accept:"file"
,url: facade.compatibleApiRoute('/admin.plugins/offLineInstall') //上传接口
,field: "laytpUploadFile"
,choose: function (obj) {
offLineBtnAnim = layui.button.load({elem:$("button[lay-event='offLineInstall']")});
}
,done: function(res){
if(res.code === 0){
facade.success(res.msg);
layui.context.put("pluginConf", res.data.pluginConf);//修改插件配置信息
layui.table.reloadData("laytp-table");
parent.parent.renderMenu();//重新渲染菜单
}else{
facade.error(res.msg);
}
offLineBtnAnim.stop();
}
,error: function(){
//请求异常回调
offLineBtnAnim.stop();
}
});
window.funController = funController;
});