/**
* The Web UI Theme-v2.7.1
*/
layui.define(["laytpl", "layer", "http"], function (exports) {
// 构造函数 u - 主要接口
function View(e) {
return new Template(e);
}
// 构造函数 t - 模板类
function Template(e) {
this.id = e;
this.container = layui.jquery("#" + (e || "LAY_app_body"));
}
// 引入依赖模块
var $ = layui.jquery,
laytpl = layui.laytpl,
layer = layui.layer,
request = layui.http,
setter = layui.setter,
device = layui.device(),
hint = layui.hint(),
DEFAULT_CONTAINER_ID = "LAY_app_body";
// 加载动画
View.loading = function (container) {
container.append(
this.elemLoad = $('')
);
};
// 移除加载动画
View.removeLoad = function () {
this.elemLoad && this.elemLoad.remove();
};
// 退出登录
View.exit = function (callback) {
// setter.request.tokenName 当前为 false,不能作为键,否则等于没清理。
// 统一清空本应用命名空间下的登录态与菜单缓存(对齐 layuiadmin 的退出清理)。
var appName = setter.appName;
['access_token', 'refresh_token', 'menus', 'user', 'note'].forEach(function (key) {
layui.data(appName, { key: key, remove: true });
});
callback && callback();
};
// AJAX 请求封装
View.req = function (options) {
function getUrlInfo() {
return setter.debug ? "
URL:" + options.url : "";
}
var successCallback = options.success,
errorCallback = options.error,
requestConfig = setter.request,
responseConfig = setter.response;
// 处理请求数据
options.data = options.data || {};
options.headers = options.headers || {};
// 处理 token
if (requestConfig.tokenName) {
var data = typeof options.data === "string" ? JSON.parse(options.data) : options.data;
options.data[requestConfig.tokenName] =
requestConfig.tokenName in data ?
options.data[requestConfig.tokenName] :
layui.data(setter.appName)[requestConfig.tokenName] || "";
options.headers[requestConfig.tokenName] =
requestConfig.tokenName in options.headers ?
options.headers[requestConfig.tokenName] :
layui.data(setter.appName)[requestConfig.tokenName] || "";
}
// 清除原始回调
delete options.success;
delete options.error;
// 执行 AJAX 请求
return $.ajax($.extend({
type: "get",
dataType: "json",
success: function (response) {
var statusCode = responseConfig.statusCode;
if (response[responseConfig.statusName] == statusCode.ok) {
// 成功
typeof options.done === "function" && options.done(response);
} else if (response[responseConfig.statusName] == statusCode.logout) {
// 退出登录
View.exit();
} else {
// 错误处理
var errorMsg = [
"Error: " + (response[responseConfig.msgName] || "返回状态码异常"),
getUrlInfo()
].join("");
View.error(errorMsg);
}
typeof successCallback === "function" && successCallback(response);
},
error: function (xhr, status) {
var errorMsg = [
"请求异常,请重试
错误信息:" + status,
getUrlInfo()
].join("");
View.error(errorMsg);
typeof errorCallback === "function" && errorCallback.apply(this, arguments);
}
}, options));
};
// 弹窗
View.popup = function (options) {
var successCallback = options.success, skin = options.skin;
delete options.success;
delete options.skin;
return layer.open($.extend({
type: 1,
title: "提示",
content: "",
id: "LAY-system-view-popup",
skin: "layui-layer-admin" + (skin ? " " + skin : ""),
shadeClose: true,
closeBtn: false,
success: function (layero, index) {
var closeBtn = $('ဆ');
layero.append(closeBtn);
closeBtn.on("click", function () {
layer.close(index);
});
typeof successCallback === "function" && successCallback.apply(this, arguments);
}
}, options));
};
// 错误提示
View.error = function (content, options) {
return View.popup($.extend({
content: content,
maxWidth: 300,
offset: "t",
anim: 6,
id: "LAY_adminError"
}, options));
};
// Template 原型方法
// 渲染视图
Template.prototype.render = function (templatePath, params) {
var self = this;
layui.hash();
// 构建完整模板路径
templatePath = (setter.paths && setter.paths.views ? setter.paths : setter).views +
templatePath + setter.engine;
// 移除加载动画
$("#" + DEFAULT_CONTAINER_ID).children(".layadmin-loading").remove();
View.loading(self.container);
// AJAX 获取模板
request.get(templatePath, { v: layui.cache.version }).then(function (html) {
// 提取标题
var titleElem = $(html = "