Files
HTCloud/HT.Cloud.Web/wwwroot/js/lay-module/cardTable/cardTable.js
2023-03-03 16:07:50 +08:00

376 lines
12 KiB
JavaScript
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.define(['table', 'laypage', 'jquery', 'element', 'laytpl'], function (exports) {
"use strict";
var filePath = layui.cache.modules.cardTable
.substr(0, layui.cache.modules.cardTable.lastIndexOf('/'));
// 引入tablePlug.css
layui.link(filePath + '/cardTable.css');
var MOD_NAME = 'cardTable',
$ = layui.jquery,
element = layui.element,
laytpl = layui.laytpl,
laypage = layui.laypage;
var _instances = {}; // 记录所有实例
/* 默认参数 */
var defaultOption = {
elem: "#currentTableId",// 构建的模型
url: "",// 数据 url 连接
loading: true,//是否加载
limit: 0, //每页数量默认是每行数量的双倍
linenum: 4, //每行数量 2,3,4,6
currentPage: 1,//当前页
data: [], //静态数据
limits: [], //页码
page: true, //是否分页
image: false,//图片模式
layout: ['count', 'prev', 'page', 'next', 'limit', 'skip'],//分页控件
request: {
pageName: 'page' //页码的参数名称默认page
, limitName: 'limit' //每页数据量的参数名默认limit
, idName: 'id' //主键名称默认id
, titleName: 'title' //标题名称默认title
, imageName: 'image' //图片地址默认image
, remarkName: 'remark' //备注名称默认remark
, timeName: 'time' //时间名称默认time
},
response: {
statusName: 'code' //规定数据状态的字段名称默认code
, statusCode: 0 //规定成功的状态码默认0
, msgName: 'msg' //规定状态信息的字段名称默认msg
, countName: 'count' //规定数据总数的字段名称默认count
, dataName: 'data' //规定数据列表的字段名称默认data
},
// 完 成 函 数
done: function (res, curr, count) {
},
toolbar: null
};
var card = function (opt) {
_instances[opt.elem.substring(1)] = this;
this.reload(opt);
};
/** 参数设置 */
card.prototype.initOptions = function (opt) {
this.option = $.extend(true, {}, defaultOption, opt);
if (!this.option.limit || this.option.limit == 0) {
this.option.limit = this.option.linenum * 2;
}
if (!this.option.limits || this.option.limits.length == 0) {
this.option.limits = [this.option.limit];
}
};
card.prototype.init = function () {
var option = this.option;
var url = option.url;
var html = "";
html += option.loading == true ? ' <div class="ew-table-loading">' : ' <div class="ew-table-loading layui-hide">';
html += ' <i class="layui-icon layui-icon-loading layui-anim layui-anim-rotate layui-anim-loop"></i>';
html += ' </div>';
$(option.elem).html(html);
// 根 据 请 求 方 式 获 取 数 据
html = "";
if (!!url) {
if (url.indexOf("?") >= 0) {
url = url + '&v=1.0.0';
}
else {
url = url + '?v=1.0.0';
}
if (!!option.page) {
url = url + '&' + option.request.limitName + '=' + option.limit;
url = url + '&' + option.request.pageName + '=' + option.currentPage;
}
if (!!option.where) {
for (let key in option.where) {
url = url + '&' + key + '=' + option.where[key];
}
}
var data = getData(url);
data = initData(data, option);
if (data.code != option.response.statusCode) {
option.data = [];
option.count = 0;
} else {
option.data = data.data;
option.count = data.count;
}
}
else {
if (!option.alldata) {
option.alldata = option.data;
}
if (option.page) {
var data = [];
option.count = option.alldata.length;
for (var i = (option.currentPage - 1) * option.limit; i < option.currentPage * option.limit && i < option.alldata.length; i++) {
data.push(option.alldata[i]);
}
option.data = data;
}
}
// 根据结果进行相应结构的创建
if (!!option.data && option.data.length > 0) {
html = createComponent(option.linenum, option.data, option.toolbar, option.image);
html += "<div id='cardpage'></div>";
}
else {
html = "<p>没有数据</p>";
}
$(option.elem).html(html);
if (option.page) {
// 初始化分页组件
laypage.render({
elem: 'cardpage'
, count: option.count, limit: option.limit, limits: option.limits, curr: option.currentPage
, layout: option.layout
, jump: function (obj, first) {
option.limit = obj.limit;
option.currentPage = obj.curr;
if (!first) {
_instances[option.elem.substring(1)].reload(option);
}
}
});
}
typeof option.done === 'function' && option.done(option, option.curr, option.count);
}
card.prototype.reload = function (opt) {
this.initOptions(this.option ? $.extend(true, this.option, opt) : opt);
this.init(); // 初始化表格
this.events(); //事件
}
//表单事件
card.prototype.on = function (events, callback) {
return layui.onevent.call(this, MOD_NAME, events, callback);
};
card.prototype.events = function () {
var that = this;
var option = that.option;
var filter = $(option.elem).attr('lay-filter');
var elem = option.elem.substring(1);
let timer = null;
$(option.elem).unbind();
//行事件
$(option.elem).on('click', 'div[type=card]', function () { //单击行
clearTimeout(timer);
var that = this;
timer = setTimeout(function () {
getCheckedData(that, elem);
var reElem = that;
layui.event.call(that, MOD_NAME, 'row(' + filter + ')', {
elem: that
, value: _instances[elem].option.checkedItem
, othis: reElem
});
}, 300)
}).on('dblclick', 'div[type=card]', function () { //双击行
clearTimeout(timer);
getCheckedData(this, elem);
var reElem = this;
layui.event.call(this, MOD_NAME, 'rowDouble(' + filter + ')', {
elem: this
, value: _instances[elem].option.checkedItem
, othis: reElem
});
});
if (!!option.toolbar && !option.image) {
$(option.elem).unbind('click');
}
//行工具条操作事件
$(option.elem).on('click', '*[lay-event]', function () {
getCheckedData(this, elem);
layui.event.call(this, MOD_NAME, 'tool(' + filter + ')', { event: $(this).attr('lay-event'), value: _instances[elem].option.checkedItem });
});
};
function getCheckedData(obj, elem) {
var item = {};
if (!obj.id) {
return getCheckedData(obj.parentElement, elem);
}
var reElem = obj;
$(reElem).addClass('layui-table-click').siblings().removeClass('layui-table-click');
item.id = reElem.id;
if (!obj.id || obj.nodeName != "DIV") {
item.id = item.id.replace('card_', '');
}
var option = _instances[elem].option;
for (var i = 0; i < option.data.length; i++) {
if (item.id == option.data[i].id) {
item[option.request.idName] = option.data[i].id;
item[option.request.imageName] = option.data[i].image;
item[option.request.titleName] = option.data[i].title;
item[option.request.remarkName] = option.data[i].remark;
item[option.request.timeName] = option.data[i].time;
item = $.extend(JSON.parse(JSON.stringify(option.data[i])), item);
if (option.request.idName != "id") {
delete item.id;
}
if (option.request.imageName != "image") {
delete item.image;
}
if (option.request.titleName != "title") {
delete item.title;
}
if (option.request.remarkName != "remark") {
delete item.remark;
}
if (option.request.timeName != "time") {
delete item.time;
}
_instances[elem].option.checkedItem = item;
break;
}
}
return item;
}
function createComponent(linenum, data, toolbar, image) {
var html = "<div class='cloud-card-component'>"
var content = createCards(linenum, data, toolbar, image);
var page = "";
content = content + page;
html += content + "</div>"
return html;
}
/** 创建指定数量的卡片 */
function createCards(linenum, data, toolbar, image) {
var content = "<div class='layui-row layui-col-space30'>";
for (var i = 0; i < data.length; i++) {
content += createCard(linenum, data[i], i, toolbar, image);
}
content += "</div>";
return content;
}
/** 创建一个卡片 */
function createCard(linenum, item, index, toolbar, image) {
var line = 12 / linenum;
var tplData = $.extend(true, {
LAY_INDEX: index
}, item)
var template = '';
if (!!toolbar) {
template = laytpl($('#' + toolbar).html() || '').render(tplData);
}
if (image) {
return '<div type=card id=card_' + item.id + ' class="layui-col-md' + line + ' ew-datagrid-item" data-index="' + index + '" data-number="1"> <div class="project-list-item">' + (!!item.image ? ' <img class="project-list-item-cover" src="' + item.image + '">' : '') + ' </div > </div > ';
}
else {
return '<div type=card id=card_' + item.id + ' class="layui-col-md' + line + ' ew-datagrid-item" data-index="' + index + '" data-number="1"> <div class="project-list-item">' + (!!item.image ? ' <img class="project-list-item-cover" src="' + item.image + '">' : '') + '<div class="project-list-item-body"> <h2>' + item.title + '</h2> <div class="project-list-item-text layui-text">' + item.remark + '</div> <div class="project-list-item-desc"> <span class="time">' + item.time + '</span>' + (!!template ? ' <div class="ew-head-list">' + template + '</div>' : '') + ' </div> </div > </div > </div > ';
}
}
/** 格式化返回参数 */
function initData(tempData, option) {
var data = {};
data.code = tempData[option.response.statusName];
data.msg = tempData[option.response.msgName];
data.count = tempData[option.response.countName];
var dataList = tempData[option.response.dataName];
data.data = [];
for (var i = 0; i < dataList.length; i++) {
var item = {};
item.id = dataList[i][option.request.idName];
item.image = dataList[i][option.request.imageName];
item.title = dataList[i][option.request.titleName];
item.remark = dataList[i][option.request.remarkName];
item.time = dataList[i][option.request.timeName];
item = $.extend(JSON.parse(JSON.stringify(dataList[i])), item);
if (option.request.idName != "id") {
delete item[option.request.idName];
}
if (option.request.imageName != "image") {
delete item[option.request.imageName];
}
if (option.request.titleName != "title") {
delete item[option.request.titleName];
}
if (option.request.remarkName != "remark") {
delete item[option.request.remarkName];
}
if (option.request.timeName != "time") {
delete item[option.request.timeName];
}
data.data.push(item);
}
return data;
}
/** 同 步 请 求 获 取 数 据 */
function getData(url) {
$.ajaxSettings.async = false;
var redata = null;
$.getJSON(url, function (data) {
redata = data;
}).fail(function () {
redata = null;
});
return redata;
}
////卡片点击事件
//window.cardTableCheckedCard = function (elem,obj) {
// $(obj).addClass('layui-table-click').siblings().removeClass('layui-table-click');
// var item = {};
// item.id = obj.id;
// item.image = $(obj).find('.project-list-item-cover')[0].src;
// item.title = $(obj).find('h2')[0].innerHTML;
// item.remark = $(obj).find('.project-list-item-text')[0].innerHTML;
// item.time = $(obj).find('.time')[0].innerHTML;
// _instances[elem.id].option.checkedItem = item;
//}
/** 对外提供的方法 */
var tt = {
/* 渲染 */
render: function (options) {
return new card(options);
},
/* 重载 */
reload: function (id, opt) {
_instances[id].option.checkedItem = null;
_instances[id].reload(opt);
},
/* 获取选中数据 */
getChecked: function (id) {
var option = _instances[id].option;
var data = option.checkedItem;
if (!data) {
return null;
}
return data;
},
/* 获取表格数据 */
getAllData: function (id) {
var option = _instances[id].option;
var data = [];
for (var i = 0; i < option.data.length; i++) {
var item = {};
item[option.request.idName] = option.data[i].id;
item[option.request.imageName] = option.data[i].image;
item[option.request.titleName] = option.data[i].title;
item[option.request.remarkName] = option.data[i].remark;
item[option.request.timeName] = option.data[i].time;
item = $.extend(JSON.parse(JSON.stringify(option.data[i])), item);
if (option.request.idName != "id") {
delete item.id;
}
if (option.request.imageName != "image") {
delete item.image;
}
if (option.request.titleName != "title") {
delete item.title;
}
if (option.request.remarkName != "remark") {
delete item.remark;
}
if (option.request.timeName != "time") {
delete item.time;
}
data.push(item);
}
return data;
},
on: function (events, callback) {
return this.on(this, MOD_NAME, events, callback);
}
}
exports(MOD_NAME, tt);
})