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.
791 lines
35 KiB
791 lines
35 KiB
var DataReSort
|
|
(function ($) {
|
|
var defaults,
|
|
CreateData,
|
|
CreateInfo,
|
|
CreatePager,
|
|
CreateBtnPrev,
|
|
CreateBtnNext,
|
|
CreateAPrev,
|
|
CreateANext,
|
|
FilterJson,
|
|
CalculatePageCount,
|
|
extdataset,
|
|
exttable,
|
|
extwriters,
|
|
extBaseSet,
|
|
obj,
|
|
objHeader,
|
|
$divPager,
|
|
$trPager,
|
|
PageCount,
|
|
TempSortJson,
|
|
TempSort,
|
|
TempSortType,
|
|
InfoCount,
|
|
strSearchValue,
|
|
TimerCreateTr,
|
|
OldJson = [],
|
|
AryColumn = [];
|
|
defaults = {
|
|
BaseSet: {
|
|
HeaderClass: 'trHeader',
|
|
PagerID: 'trPager',
|
|
DivPagerID: 'Pager',
|
|
SelectPageClass: 'pageselected',
|
|
DataField: 'DataField',
|
|
Sorttype: 'Sorttype',
|
|
Sorting: 'Sorting',
|
|
Selected: 'Selected',
|
|
BtnPrevID: 'btnPrev',
|
|
BtnPrevClass: 'icon-angle-left',
|
|
BtnPrevText: ' ',
|
|
BtnPrevTopID: 'btnPrevTop',
|
|
BtnPrevTopClass: 'icon-double-angle-left',
|
|
BtnPrevTopText: ' ',
|
|
BtnNextID: 'btnNext',
|
|
BtnNextClass: 'icon-angle-right',
|
|
BtnNextText: ' ',
|
|
BtnNextTopID: 'btnNextTop',
|
|
BtnNextTopClass: 'icon-double-angle-right',
|
|
BtnNextTopText: ' ',
|
|
aPrevID: 'aPrev',
|
|
aNextID: 'aNext',
|
|
txtSearchID: 'txtSearch',
|
|
BtnSearchID: 'btnSearch',
|
|
BtnSearchClass: 'icon-search top-title-icon',
|
|
SelPageSizeID: 'selPageSize',
|
|
SelPageText: ' 每頁顯示筆數:',
|
|
txtGoPageID: 'txtGoPage',
|
|
rowSelect: 'rowSelect',
|
|
HeaderType: 'th',
|
|
NeedRemove: 'NeedRemove'
|
|
},
|
|
dataset: {
|
|
sorts: {},
|
|
PageSize: 10,
|
|
PageLens: 10,
|
|
perPageOptions: [10, 20, 50, 100],
|
|
source: {},
|
|
key:[],
|
|
ShowColumn: null
|
|
},
|
|
table: {
|
|
ShowSearchBar: true,
|
|
ShowDropPageSize: false,
|
|
ShowDataCount: true,
|
|
ShowGoPage: true,
|
|
ShowBtnNextTop: true,
|
|
ShowBtnPrevTop: true,
|
|
UseTimerCreateTr:false,
|
|
ColumnWidth: {},
|
|
ColumnAlign:{},
|
|
noSort:[]
|
|
},
|
|
writers: {
|
|
_CreateInfo: CreateInfo,
|
|
_FilterJson: FilterJson
|
|
}
|
|
};
|
|
$.fn.OTKGridView = function (options, callback) {
|
|
/********************************************
|
|
* 函數名稱: CreateHeader()
|
|
* 目的:產生Header
|
|
* 作者:Gary
|
|
* 時間:2015/02/26
|
|
* 參數說明:
|
|
*********************************************/
|
|
CreateHeader = function () {
|
|
if (!objHeader.length) {
|
|
objHeader = $('<tr>', { 'class': extBaseSet.HeaderClass });
|
|
var blShowColumn = (extdataset.ShowColumn);
|
|
var JObj = (blShowColumn) ? extdataset.ShowColumn : extdataset.source[0];
|
|
for (key in JObj) {
|
|
if (typeof JObj[key] !== "function") {
|
|
var sub_key = key;
|
|
var sub_val = (blShowColumn) ? JObj[key] : key;
|
|
var $HeaderChild = $('<' + extBaseSet.HeaderType + '>', { 'html': sub_val || key,'width':exttable.ColumnWidth[key] }).attr(extBaseSet.DataField, sub_key).attr(extBaseSet.Sorttype, sub_key);
|
|
objHeader.append($HeaderChild);
|
|
}
|
|
}
|
|
$(obj).append(objHeader)
|
|
}
|
|
AryColumn = [];
|
|
$(objHeader).find('[' + extBaseSet.DataField + ']').each(function () {
|
|
var ThisValue = $(this).attr(extBaseSet.DataField);
|
|
if (ThisValue) {
|
|
AryColumn.push($(this).attr(extBaseSet.DataField))
|
|
}
|
|
})
|
|
}
|
|
/********************************************
|
|
* 函數名稱: CreateData(Json)
|
|
* 目的:依照Json產生資料樣式
|
|
* 作者:Gary
|
|
* 時間:2015/02/25
|
|
* 參數說明:Json:團體資料
|
|
*********************************************/
|
|
CreateData = function (Json) {
|
|
if (callback && extdataset.key.length & Json !== OldJson) {
|
|
CallBackCreateData(Json);
|
|
}
|
|
else if (callback) {
|
|
}
|
|
else {
|
|
BaseCreateData(Json);
|
|
}
|
|
OldJson = Json;
|
|
callback = false;
|
|
}
|
|
/********************************************
|
|
* 函數名稱: BaseCreateData(Json)
|
|
* 目的:依照Json產生資料樣式(基本版)
|
|
* 作者:Gary
|
|
* 時間:2015/05/22
|
|
* 參數說明:
|
|
*********************************************/
|
|
function BaseCreateData(Json) {
|
|
if ($($trPager).length) {
|
|
$trPager.siblings('tr').not(objHeader).remove();
|
|
}
|
|
else {
|
|
objHeader.siblings('tr').remove();
|
|
}
|
|
var intLen = Json.length;
|
|
var rowWriter = (extwriters._CreateInfo) ? extwriters._CreateInfo : CreateInfo;
|
|
if (exttable.UseTimerCreateTr) {
|
|
var intTime = 0;
|
|
clearInterval(TimerCreateTr);
|
|
TimerCreateTr = setInterval(function () {
|
|
if (intTime >= intLen) {
|
|
obj.children().attr('guid', guid())
|
|
clearInterval(TimerCreateTr);
|
|
} else {
|
|
rowWriter(Json[intTime]);
|
|
}
|
|
intTime++;
|
|
}, 1);
|
|
}
|
|
else {
|
|
|
|
for (var intTime = 0; intTime < intLen; intTime++) {
|
|
rowWriter(Json[intTime]);
|
|
}
|
|
obj.children().attr('guid', guid())
|
|
}
|
|
}
|
|
/********************************************
|
|
* 函數名稱: CallBackCreateData(Json)
|
|
* 目的:依照Json產生資料樣式(測試版-只更新有變動的資料)
|
|
* 作者:Gary
|
|
* 時間:2015/05/22
|
|
* 參數說明:
|
|
*********************************************/
|
|
function CallBackCreateData(Json) {
|
|
var intLen = Json.length;
|
|
var rowWriter = (extwriters._CreateInfo) ? extwriters._CreateInfo : CreateInfo;
|
|
$.each(OldJson, function (Index, JObj) {
|
|
var OldExist = [];
|
|
$.each(extdataset.key,function(Index,Value){
|
|
OldExist = getObjects(Json, Value, JObj[Value]);
|
|
})
|
|
if (OldExist.length) {
|
|
}
|
|
else {
|
|
var trRemove = obj.find('tr:not(.' + extBaseSet.HeaderClass + '):eq(' + Index + ')').fadeOut(500).addClass(extBaseSet.NeedRemove);
|
|
}
|
|
});
|
|
$.each(Json, function (Index, JObj) {
|
|
var OldExist = [];
|
|
$.each(extdataset.key,function(Index,Value){
|
|
OldExist = getObjects(OldJson, Value, JObj[Value]);
|
|
})
|
|
if (OldExist.length) {
|
|
var change = false;
|
|
var OldIndex;
|
|
$.each(OldJson, function (thisIndex, JObj) {
|
|
if (OldExist[0] === JObj) {
|
|
OldIndex = thisIndex;
|
|
}
|
|
});
|
|
if (JObj && OldExist[0] && callback) {
|
|
var JObjOld = OldExist[0];
|
|
$.each(JObj, function (Key, Value) {
|
|
if (JObj[Key] !== JObjOld[Key]) {
|
|
change = true;
|
|
}
|
|
})
|
|
}
|
|
if (change) {
|
|
var OldTr = obj.find('tr:not(.' + extBaseSet.HeaderClass + '):not(.' + extBaseSet.NeedRemove + '):eq(' + OldIndex + ')');
|
|
OldTr.addClass(extBaseSet.NeedRemove);
|
|
rowWriter(Json[Index], Index);
|
|
}
|
|
} else {
|
|
rowWriter(Json[Index], Index);
|
|
}
|
|
obj.find('tr.' + extBaseSet.NeedRemove).remove();
|
|
});
|
|
}
|
|
/********************************************
|
|
* 函數名稱: CreateInfo(JObj)
|
|
* 目的:依照JObj產生每筆資料格式
|
|
* 作者:Gary
|
|
* 時間:2015/02/25
|
|
* 參數說明:JObj:每筆資料
|
|
*********************************************/
|
|
function CreateInfo(JObj, Index) {
|
|
var $Tr = $('<tr>');
|
|
objHeader.children().each(function (index,value) {
|
|
var strDataField = $(this).attr(extBaseSet.DataField);
|
|
var $Td = $('<td>', {
|
|
'text': JObj[strDataField], 'title': JObj[strDataField]
|
|
});
|
|
$Tr.append($Td);
|
|
})
|
|
if ($($trPager).length) {
|
|
$($Tr).insertBefore($trPager);
|
|
} else {
|
|
if (Index === undefined) {
|
|
$(obj).append($Tr);
|
|
} else { //測試效果中 2015/02/22 Add By Gary
|
|
var InsertBefore = $(obj).find('tr:not(.' + extBaseSet.HeaderClass + '):not(.' + extBaseSet.NeedRemove + '):eq(' + Index + ')');
|
|
var intTrCount = $(obj).find('tr:not(.' + extBaseSet.HeaderClass + '):not(.' + extBaseSet.NeedRemove + ')').length;
|
|
$Tr.hide();
|
|
if (InsertBefore.length && intTrCount > Index) {
|
|
$Tr.insertBefore(InsertBefore);
|
|
} else {
|
|
$($Table).append($Tr);
|
|
}
|
|
$Tr.fadeIn(500);
|
|
}
|
|
}
|
|
}
|
|
/********************************************
|
|
* 函數名稱: CreatePager(PageCount,intPageStart)
|
|
* 目的:建置頁碼
|
|
* 作者:Gary
|
|
* 時間:2015/02/25
|
|
* 參數說明:PageCount:總共的頁碼
|
|
intPageStart:起始頁碼
|
|
*********************************************/
|
|
CreatePager = function (PageCount, intPageStart) {
|
|
var NowPage = parseInt($('.' + extBaseSet.SelectPageClass).text(), 10);
|
|
intPageValue = parseInt(intPageStart, 10);
|
|
$divPager.html('');
|
|
var intPage = (PageCount - intPageStart >= extdataset.PageLens) ? extdataset.PageLens : PageCount - intPageStart + 1;
|
|
var $btnPrev = CreateBtnPrev(PageCount);
|
|
var $btnPrevPrevTop = CreateBtnPrevTop(PageCount);
|
|
var $btnNext = CreateBtnNext(PageCount, intPageStart);
|
|
var $btnNextTop = CreateBtnNextTop(PageCount);
|
|
var $aPrev = CreateAPrev(PageCount, intPageStart);
|
|
var $aNext = CreateANext(PageCount, intPageStart);
|
|
var $InfoCount = CreateDataCount(PageCount);
|
|
var $DropPageSize = CreateDropPageSize(PageCount);
|
|
var $GoPage = CreateGoPage(PageCount, NowPage);
|
|
btnPrevShow = function () { ($('.' + extBaseSet.SelectPageClass).text() == '1') ? $('#' + extBaseSet.BtnPrevID).hide() : $('#' + extBaseSet.BtnPrevID).show() };
|
|
btnNextShow = function () { ($('.' + extBaseSet.SelectPageClass).text() == PageCount) ? $('#' + extBaseSet.BtnNextID).hide() : $('#' + extBaseSet.BtnNextID).show() };
|
|
$divPager.append($InfoCount, $btnPrevPrevTop, $btnPrev, $aPrev, $aNext, $btnNext, $btnNextTop, $GoPage, $DropPageSize);
|
|
var $Location = ($($aNext).length) ? $aNext : ($($btnNext).length) ? $btnNext : $btnNextTop;
|
|
for (var intTime = 0; intTime < intPage; intTime++) {
|
|
var $a = $('<a>', { 'href': '#', 'id': 'a' + intPageValue, 'text': intPageValue, 'class': 'Page', 'style': 'margin-right:5px;' })
|
|
.click(function () {
|
|
var NowPage = parseInt($(this).text(), 10);
|
|
var data = FilterJson();
|
|
InfoCount = data.length;
|
|
data = Enumerable.From(data).Skip((NowPage - 1) * extdataset.PageSize).Take(extdataset.PageSize).ToArray();
|
|
CreateData(data);
|
|
$(this).addClass(extBaseSet.SelectPageClass).siblings('a').removeClass(extBaseSet.SelectPageClass);
|
|
$('#' + extBaseSet.BtnNextID).attr('pagenum', parseInt($(this).text(), 10) + 1);
|
|
$('#' + extBaseSet.BtnPrevID).attr('pagenum', parseInt($(this).text(), 10) - 1);
|
|
$('#' + extBaseSet.txtGoPageID).val(parseInt($(this).text(), 10));
|
|
//btnPrevShow();
|
|
//btnNextShow();
|
|
}
|
|
)
|
|
if ($($Location)) {
|
|
$a.insertBefore($Location);
|
|
}
|
|
else {
|
|
$divPager.append($a);
|
|
}
|
|
intPageValue++;
|
|
}
|
|
NowPage = ($('#a' + NowPage).length) ? NowPage : parseInt($('#' + extBaseSet.DivPagerID + ' a.Page:first').text(), 10);
|
|
$('#a' + NowPage).click();
|
|
}
|
|
/********************************************
|
|
* 函數名稱: CreateGoPage()
|
|
* 目的:前往指定頁面
|
|
* 作者:Gary
|
|
* 時間:2015/03/03
|
|
* 參數說明:
|
|
*********************************************/
|
|
CreateGoPage = function (PageCount, NowPage) {
|
|
if (PageCount !== 0) {
|
|
NowPage = (NowPage) ? NowPage : 1;
|
|
var strTotalPage = PageCount + ' 頁';
|
|
var $txtGoPage = $('<input>', { 'type': 'text', 'id': extBaseSet.txtGoPageID, 'value': NowPage });
|
|
$txtGoPage.unbind('keypress').bind('keypress', function (event) {
|
|
|
|
if (event.keyCode == 13) {
|
|
var thisValue = parseInt(this.value, 10);
|
|
thisValue = (thisValue) ? thisValue : 1;
|
|
var intDiffNum = (thisValue % extdataset.PageSize == 0) ? parseInt(extdataset.PageSize) - 1 : (thisValue % extdataset.PageSize) - 1;
|
|
var thisStartValue = thisValue - intDiffNum;
|
|
if (!$('#a' + thisValue).length) { CreatePager(PageCount, thisStartValue); }
|
|
$('#a' + thisValue).click();
|
|
$('#' + extBaseSet.txtGoPageID).val(thisValue);
|
|
return true;
|
|
} else if (event.keyCode >= 48 && event.keyCode <= 57) {
|
|
return true;
|
|
}
|
|
return false;
|
|
}).bind('keyup', function () { this.value = minmax(this.value, 1, PageCount) })
|
|
var $GoPage = (PageCount <=1 || !exttable.ShowGoPage) ? null :
|
|
$txtGoPage.add($('<span>', { 'title': strTotalPage, 'text': '/' + strTotalPage }));
|
|
}
|
|
return $GoPage;
|
|
}
|
|
/********************************************
|
|
* 函數名稱: CreateDropPageSize()
|
|
* 目的:建立下拉選單(決定每頁顯示幾筆資料)
|
|
* 作者:Gary
|
|
* 時間:2015/03/03
|
|
* 參數說明:
|
|
*********************************************/
|
|
CreateDropPageSize = function () {
|
|
var $DropPageSize = $('<select>', { 'id': extBaseSet.SelPageSizeID }).bind('change', function () {
|
|
extdataset.PageSize = this.value;
|
|
var data = FilterJson();
|
|
InfoCount = data.length;
|
|
PageCount = CalculatePageCount(InfoCount, extdataset.PageSize);
|
|
data = Enumerable.From(data).Skip((NowPage - 1) * extdataset.PageSize).Take(extdataset.PageSize).ToArray();
|
|
var intFirstPage = ($('#' + extBaseSet.DivPagerID + ' a.Page:first').text()) ? parseInt($('#' + extBaseSet.DivPagerID + ' a.Page:first').text(), 10) : 1;
|
|
CreateData(data);
|
|
CreatePager(PageCount, intFirstPage);
|
|
});
|
|
var AryPageOptions = extdataset.perPageOptions;
|
|
if (AryPageOptions) {
|
|
var intLens = AryPageOptions.length;
|
|
for (var intTime = 0; intTime < intLens; intTime++) {
|
|
var $Option = $('<option>', { 'text': AryPageOptions[intTime], 'value': AryPageOptions[intTime] });
|
|
$DropPageSize.append($Option)
|
|
}
|
|
}
|
|
$DropPageSize.val(extdataset.PageSize)
|
|
var $PageSize = (PageCount <=1 || !exttable.ShowDropPageSize) ? null : $('<font>', { 'text': extBaseSet.SelPageText }).add($DropPageSize);
|
|
return $PageSize;
|
|
}
|
|
/********************************************
|
|
* 函數名稱: CreateDataCount()
|
|
* 目的:建置總筆數
|
|
* 作者:Gary
|
|
* 時間:2015/03/03
|
|
* 參數說明:
|
|
*********************************************/
|
|
CreateDataCount = function (PageCount) {
|
|
var $InfoCount = (PageCount == 0 || !exttable.ShowDataCount) ? null :
|
|
$('<p>', { 'text': '共' + ThousandFormatByString(InfoCount) + '筆', 'class': 'left t-blue02' });
|
|
return $InfoCount;
|
|
}
|
|
/********************************************
|
|
* 函數名稱: CreateBtnPrev()
|
|
* 目的:建置上一頁按鈕
|
|
* 作者:Gary
|
|
* 時間:2015/03/02
|
|
* 參數說明:
|
|
*********************************************/
|
|
CreateBtnPrev = function (PageCount) {
|
|
var $btnPrev = (PageCount <= 1) ? null : $('<input>',
|
|
{
|
|
'id': extBaseSet.BtnPrevID,
|
|
'class': extBaseSet.BtnPrevClass,
|
|
'type': 'button',
|
|
'value': extBaseSet.BtnPrevText
|
|
})
|
|
.click(function () {
|
|
var PrevValue = $(this).attr('pagenum');
|
|
if (!$('#a' + PrevValue).length && PrevValue >= 1) { CreatePager(PageCount, PrevValue - (extdataset.PageSize - 1)); }
|
|
$('#a' + PrevValue).click();
|
|
})
|
|
return $btnPrev;
|
|
}
|
|
/********************************************
|
|
* 函數名稱: CreateBtnPrev()
|
|
* 目的:建置下一頁按鈕
|
|
* 作者:Gary
|
|
* 時間:2015/03/02
|
|
* 參數說明:
|
|
*********************************************/
|
|
CreateBtnNext = function (PageCount, intPageStart) {
|
|
var $btnNext = (PageCount <= 1) ? null : $('<input>',
|
|
{
|
|
'id': extBaseSet.BtnNextID,
|
|
'class': extBaseSet.BtnNextClass,
|
|
'type': 'button',
|
|
'value': extBaseSet.BtnNextText,
|
|
'pagenum': (intPageStart + 1)
|
|
})
|
|
.click(function () {
|
|
var NextValue = $(this).attr('pagenum');
|
|
if (!$('#a' + NextValue).length && NextValue <= PageCount) { CreatePager(PageCount, NextValue); }
|
|
$('#a' + NextValue).click();
|
|
})
|
|
return $btnNext;
|
|
}
|
|
/********************************************
|
|
* 函數名稱: CreateBtnNextTop(PageCount)
|
|
* 目的:建置最後一頁
|
|
* 作者:Gary
|
|
* 時間:2015/03/05
|
|
* 參數說明:
|
|
*********************************************/
|
|
CreateBtnNextTop = function (PageCount) {
|
|
var $btnNextTop = (PageCount <= 1 || !exttable.ShowBtnNextTop) ? null : $('<input>',
|
|
{
|
|
'id': extBaseSet.BtnNextTopID,
|
|
'class': extBaseSet.BtnNextTopClass,
|
|
'type': 'button',
|
|
'value': extBaseSet.BtnNextTopText,
|
|
'pagenum': PageCount
|
|
})
|
|
.click(function () {
|
|
var thisValue = $(this).attr('pagenum');
|
|
var intDiffNum = (thisValue % extdataset.PageSize == 0) ? parseInt(extdataset.PageSize) - 1 : (thisValue % extdataset.PageSize) - 1;
|
|
var thisStartValue = thisValue - intDiffNum;
|
|
if (!$('#a' + thisValue).length) { CreatePager(PageCount, thisStartValue); }
|
|
$('#a' + thisValue).click();
|
|
$('#' + extBaseSet.txtGoPageID).val(thisValue);
|
|
})
|
|
return $btnNextTop;
|
|
}
|
|
/********************************************
|
|
* 函數名稱: CreateBtnPrevTop(PageCount)
|
|
* 目的:建置前往第一頁
|
|
* 作者:Gary
|
|
* 時間:2015/03/05
|
|
* 參數說明:
|
|
*********************************************/
|
|
CreateBtnPrevTop = function (PageCount) {
|
|
var $btnNextTop = (PageCount <= 1 || !exttable.ShowBtnPrevTop) ? null : $('<input>',
|
|
{
|
|
'id': extBaseSet.BtnPrevTopID,
|
|
'class': extBaseSet.BtnPrevTopClass,
|
|
'type': 'button',
|
|
'value': extBaseSet.BtnPrevTopText,
|
|
'pagenum': 1
|
|
})
|
|
.click(function () {
|
|
var thisValue = $(this).attr('pagenum');
|
|
if (!$('#a' + thisValue).length) { CreatePager(PageCount, thisValue); }
|
|
$('#a' + thisValue).click();
|
|
$('#' + extBaseSet.txtGoPageID).val(thisValue);
|
|
})
|
|
return $btnNextTop;
|
|
}
|
|
/********************************************
|
|
* 函數名稱: CreateAPrev()
|
|
* 目的:建置更多Prev資料按鈕
|
|
* 作者:Gary
|
|
* 時間:2015/03/02
|
|
* 參數說明:
|
|
*********************************************/
|
|
CreateAPrev = function (PageCount, intPageStart) {
|
|
var $aPrev = (intPageStart == 1) ? null :
|
|
$('<a>', {
|
|
'id': extBaseSet.aPrevID,
|
|
'text': '...',
|
|
'style': 'margin-right:5px;',
|
|
'pagenum': (parseInt(intPageStart, 10) - parseInt(extdataset.PageSize, 10))
|
|
})
|
|
.click(function () {
|
|
var PrevValue = $(this).attr('pagenum');
|
|
CreatePager(PageCount, PrevValue);
|
|
$('#a' + PrevValue).click();
|
|
});
|
|
return $aPrev;
|
|
}
|
|
/********************************************
|
|
* 函數名稱: CreateANext()
|
|
* 目的:建置更多Next資料按鈕
|
|
* 作者:Gary
|
|
* 時間:2015/03/02
|
|
* 參數說明:
|
|
*********************************************/
|
|
CreateANext = function (PageCount, intPageStart) {
|
|
var $aNext = (PageCount - intPageStart < extdataset.PageLens) ? null :
|
|
$('<a>', {
|
|
'id': extBaseSet.aNextID,
|
|
'text': '...',
|
|
'style': 'margin-right:5px;',
|
|
'pagenum': (parseInt(intPageStart, 10) + parseInt(extdataset.PageSize, 10))
|
|
})
|
|
.click(function () {
|
|
CreatePager(PageCount, $(this).attr('pagenum'));
|
|
$('#a' + (intPageStart + 10)).click();
|
|
});
|
|
return $aNext;
|
|
}
|
|
/********************************************
|
|
* 函數名稱:FilterJson(SortType,Typ)
|
|
* 目的:過濾Json資料
|
|
* 作者:Gary
|
|
* 時間:2015/02/25
|
|
* 參數說明:Type:排序方式
|
|
SortType:排序欄位
|
|
*********************************************/
|
|
FilterJson = function (SortType, Type) {
|
|
var ReturnJson;
|
|
var objSelect = $('.' + extBaseSet.HeaderClass + ' a[' + extBaseSet.Selected + ']');
|
|
SortType = (SortType) ? SortType : ($(objSelect).attr(extBaseSet.Sorttype)) ? $(objSelect).attr(extBaseSet.Sorttype) : $('.' + extBaseSet.HeaderClass + ' a[' + extBaseSet.Sorttype + ']:first').attr(extBaseSet.Sorttype);
|
|
Type = (Type) ? Type : ($(objSelect).attr(extBaseSet.Sorting)) ? $(objSelect).attr(extBaseSet.Sorting) : 'asc';
|
|
ReturnJson = Enumerable.From(extdataset.source)
|
|
.Where(function (x) {
|
|
var HasValue = (strSearchValue) ? false : true;
|
|
if (!HasValue) {
|
|
var intLens = AryColumn.length;
|
|
while (intLens-- > 0) {
|
|
var thisValue = x[AryColumn[intLens]] || '';
|
|
thisValue = thisValue.toLowerCase();
|
|
strSearchValue = strSearchValue.toLowerCase();
|
|
if (typeof thisValue !== 'string') {
|
|
thisValue = thisValue.toString();
|
|
}
|
|
if (thisValue.indexOf(strSearchValue) >= 0) {
|
|
HasValue = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
return HasValue;
|
|
}).ToArray()
|
|
switch (Type.toLowerCase()) {
|
|
case 'asc':
|
|
ReturnJson = Enumerable.From(ReturnJson).OrderBy(function (item) { return item[SortType]; }).ToArray();
|
|
break;
|
|
default:
|
|
ReturnJson = Enumerable.From(ReturnJson).OrderByDescending(function (item) { return item[SortType]; }).ToArray();
|
|
break;
|
|
}
|
|
InfoCount = ReturnJson.length;
|
|
return ReturnJson;
|
|
}
|
|
/********************************************
|
|
* 函數名稱: DataReSort(obj)
|
|
* 目的:資料排序功能
|
|
* 作者:Gary
|
|
* 時間:2015/02/25
|
|
* 參數說明:obj:排序的按鈕
|
|
*********************************************/
|
|
DataReSort = function (obj) {
|
|
var Type = $(obj).attr(extBaseSet.Sorting);
|
|
var strSort = $(obj).attr(extBaseSet.Sorttype);
|
|
$(obj).closest('.' + extBaseSet.HeaderClass).find('a[' + extBaseSet.Sorting + ']').attr(extBaseSet.Sorting, 'asc').removeAttr(extBaseSet.Selected); ;
|
|
$(obj).attr(extBaseSet.Selected, 'Y');
|
|
var NowPage = ($('.' + extBaseSet.SelectPageClass).text()) ? parseInt($('.' + extBaseSet.SelectPageClass).text(), 10) : 1;
|
|
var data;
|
|
switch (Type.toLowerCase()) { //如果原先是desc排序,接下來就是要asc排序。
|
|
case 'desc':
|
|
$(obj).attr(extBaseSet.Sorting, 'asc').attr(extBaseSet.Selected, 'Y');
|
|
data = FilterJson(strSort, 'asc');
|
|
break;
|
|
default:
|
|
$(obj).attr(extBaseSet.Sorting, 'desc').attr(extBaseSet.Selected, 'Y');
|
|
data = FilterJson(strSort, 'desc');
|
|
break;
|
|
}
|
|
InfoCount = data.length;
|
|
data = Enumerable.From(data).Skip((NowPage - 1) * extdataset.PageSize).Take(extdataset.PageSize).ToArray();
|
|
CreateData(data);
|
|
}
|
|
/********************************************
|
|
* 函數名稱: CalculatePageCount(totalCount, pageSize)
|
|
* 目的:依照筆數判斷頁碼數量
|
|
* 作者:Gary
|
|
* 時間:2015/02/25
|
|
* 參數說明:totalCount:總共筆數
|
|
pageSize:一頁幾筆
|
|
*********************************************/
|
|
CalculatePageCount = function (totalCount, pageSize) {
|
|
var pageCount = 0;
|
|
if (totalCount == 0) {
|
|
pageCount = 0;
|
|
}
|
|
else {
|
|
if ((totalCount % pageSize) == 0) {
|
|
pageCount = totalCount / pageSize;
|
|
if (pageCount < 1) pageCount = 1;
|
|
}
|
|
else {
|
|
pageCount = parseInt(Math.ceil(totalCount / pageSize), 10);
|
|
}
|
|
}
|
|
return pageCount;
|
|
}
|
|
/********************************************
|
|
* 函數名稱: CreateDefaluPager()
|
|
* 目的:建置分頁
|
|
* 作者:Gary
|
|
* 時間:2015/03/02
|
|
* 參數說明:
|
|
*********************************************/
|
|
CreateDefaluPager = function () {
|
|
if (!$('#' + extBaseSet.DivPagerID).length) {
|
|
obj.append($('<tr>', { 'id': extBaseSet.PagerID }).append($('<td>', { 'colspan': $(objHeader).children('td,th').length, 'align': 'center' }).append($('<div>', { 'id': extBaseSet.DivPagerID, 'style': 'position: relative;' }))));
|
|
}
|
|
}
|
|
/********************************************
|
|
* 函數名稱: CreateSearchBar(obj)
|
|
* 目的:建置搜尋文字框
|
|
* 作者:Gary
|
|
* 時間:2015/03/02
|
|
* 參數說明:
|
|
*********************************************/
|
|
CreateSearchBar = function (obj) {
|
|
var objSearch = $('#' + extBaseSet.txtSearchID);
|
|
if (!objSearch.length) {
|
|
objSearch = $('<input>', { 'type': 'text', 'id': extBaseSet.txtSearchID, 'style': 'border-radius: 3px;height: 30px;padding: 0 10px 0 10px;border: solid 1px #666 !important;' })
|
|
objSearch.insertBefore(obj);
|
|
var objSearchText = $('<label>', { 'text': '全文搜尋:', 'style': 'font-family: Microsoft JhengHei;' })
|
|
objSearchText.insertBefore(objSearch);
|
|
}
|
|
var objSearchBtn = $('#' + extBaseSet.BtnSearchID);
|
|
if (!objSearchBtn.length) {
|
|
objSearchBtn = $('<i>', { 'class': extBaseSet.BtnSearchClass, 'id': extBaseSet.BtnSearchID, 'html': ' ', 'style': 'margin-left:-25px;cursor: pointer' });
|
|
objSearchBtn.insertAfter(objSearch);
|
|
}
|
|
//objSearch.unbind('keyup').bind('keyup', function () { SearchFunction() });
|
|
objSearchBtn.unbind('click').bind('click', function () { SearchFunction() });
|
|
objSearch.unbind('keypress').bind('keypress', function (event) {
|
|
if (event.keyCode == 13) {
|
|
objSearchBtn.click();
|
|
}
|
|
});
|
|
}
|
|
/********************************************
|
|
* 函數名稱: SetUpDefaultSort()
|
|
* 目的:設定排序
|
|
* 作者:Gary
|
|
* 時間:2015/03/02
|
|
* 參數說明:
|
|
*********************************************/
|
|
SetUpDefaultSort = function () {
|
|
for (Key in TempSortJson) {
|
|
TempSortType = Key;
|
|
TempSort = TempSortJson[Key];
|
|
}
|
|
$(extBaseSet.HeaderType + '[' + extBaseSet.Sorttype + ']').each(function () {
|
|
var thissorttype = $(this).attr(extBaseSet.Sorttype);
|
|
if ($(this).children('a').length === 0 && exttable.noSort.indexOf(thissorttype)===-1) {
|
|
$(this).html($('<a>', { 'html': $(this).html(), 'style': 'cursor: pointer;' })
|
|
.attr(extBaseSet.Sorttype, thissorttype).attr(extBaseSet.Sorting, TempSort)
|
|
//.unbind('click').click(function () { DataReSort(this) })
|
|
.attr('onclick', 'DataReSort(this)')
|
|
)
|
|
}
|
|
|
|
if ($(this).attr(extBaseSet.Sorttype) == TempSortType) {
|
|
$(this).children().attr(extBaseSet.Sorting, TempSort).attr(extBaseSet.Selected, 'Y');
|
|
} else {
|
|
$(this).children().removeAttr(extBaseSet.Selected);
|
|
}
|
|
})
|
|
}
|
|
/********************************************
|
|
* 函數名稱: SearchFunction()
|
|
* 目的:搜尋功能
|
|
* 作者:Gary
|
|
* 時間:2015/03/03
|
|
* 參數說明:
|
|
*********************************************/
|
|
SearchFunction = function () {
|
|
strSearchValue = $('#' + extBaseSet.txtSearchID).val();
|
|
//$(obj).OTKLoading({ CheckObj: true, CheckObjCondition: obj });
|
|
setTimeout(function () {
|
|
var data = FilterJson();
|
|
InfoCount = data.length;
|
|
var intFristNum = ($('#' + extBaseSet.DivPagerID + ' a.Page:first').length) ? parseInt($('#' + extBaseSet.DivPagerID + ' a.Page:first').text(), 10) : 1;
|
|
PageCount = CalculatePageCount(InfoCount, extdataset.PageSize);
|
|
data = Enumerable.From(data).Take(extdataset.PageSize).ToArray();
|
|
CreateData(data);
|
|
CreatePager(PageCount, intFristNum);
|
|
}, 1)
|
|
}
|
|
/********************************************
|
|
* 函數名稱:minmax(value, min, max)
|
|
* 目的:設定最大最小值。
|
|
* 作者:Gary
|
|
* 時間:2015/03/03
|
|
* 用法:
|
|
*********************************************/
|
|
minmax = function (value, min, max) {
|
|
if (parseInt(value) < min || isNaN(value))
|
|
return min;
|
|
else if (parseInt(value) > max)
|
|
return max;
|
|
else return value;
|
|
}
|
|
/********************************************
|
|
* 函數名稱:ThousandFormatByString(value)
|
|
* 目的:千位加分隔符號
|
|
* 作者:Gary
|
|
* 時間:2015/03/04
|
|
* 用法:
|
|
*********************************************/
|
|
ThousandFormatByString = function (Value) {
|
|
if (Value) {
|
|
Value = Value.toString();
|
|
Value = Value.replace(/,/g, '');
|
|
Value = Value.replace(/\d+?(?=(?:\d{3})+$)/g, function (s) {
|
|
return s + ',';
|
|
});
|
|
}
|
|
return Value;
|
|
}
|
|
/*取代資料*/
|
|
extdataset = (extdataset) ? $.extend(extdataset, options.dataset) : $.extend(defaults.dataset, options.dataset);
|
|
exttable = (exttable) ? $.extend(exttable, options.table) : $.extend(defaults.table, options.table);
|
|
extwriters = (extwriters) ? $.extend(extwriters, options.writers) : $.extend(defaults.writers, options.writers);
|
|
extBaseSet = (extBaseSet) ? $.extend(extBaseSet, options.BaseSet) : $.extend(defaults.BaseSet, options.BaseSet);
|
|
FilterJson = extwriters._FilterJson || FilterJson;
|
|
obj = this;
|
|
if (!callback) {
|
|
/*定義物件*/
|
|
objHeader = $(obj).find('.' + extBaseSet.HeaderClass);
|
|
/*建置Header與Pager*/
|
|
CreateHeader();
|
|
CreateDefaluPager();
|
|
/*取得Pager與divPager*/
|
|
$divPager = $('#' + extBaseSet.DivPagerID);
|
|
$trPager = $('#' + extBaseSet.PagerID);
|
|
/*取得頁碼總數*/
|
|
/*取得預設排序即設定預設排序*/
|
|
TempSortJson = extdataset.sorts;
|
|
SetUpDefaultSort();
|
|
/*建置資料*/
|
|
var NowPage = ($('.' + extBaseSet.SelectPageClass).text()) ? parseInt($('.' + extBaseSet.SelectPageClass).text(), 10) : 1;
|
|
var data = FilterJson();
|
|
InfoCount = data.length;
|
|
PageCount = CalculatePageCount(InfoCount, extdataset.PageSize);
|
|
data = Enumerable.From(data).Skip((NowPage - 1) * extdataset.PageSize).Take(extdataset.PageSize).ToArray();
|
|
|
|
var intFirstPage = ($('#' + extBaseSet.DivPagerID + ' a.Page:first').text()) ? parseInt($('#' + extBaseSet.DivPagerID + ' a.Page:first').text(), 10) : 1;
|
|
CreateData(data);
|
|
CreatePager(PageCount, intFirstPage);
|
|
if (exttable.ShowSearchBar) {
|
|
CreateSearchBar(obj);
|
|
}
|
|
}
|
|
else {
|
|
var data = FilterJson();
|
|
InfoCount = data.length;
|
|
PageCount = CalculatePageCount(InfoCount, extdataset.PageSize);
|
|
var intFristNum = ($('#' + extBaseSet.DivPagerID + ' a.Page:first').length) ? parseInt($('#' + extBaseSet.DivPagerID + ' a.Page:first').text(), 10) : 1;
|
|
var NowPage = ($('.' + extBaseSet.SelectPageClass).text()) ? parseInt($('.' + extBaseSet.SelectPageClass).text(), 10) : 1;
|
|
//data = Enumerable.From(data).Skip((NowPage - 1) * extdataset.PageSize).Take(extdataset.PageSize).ToArray();
|
|
//CreateData(data);
|
|
CreatePager(PageCount, intFristNum);
|
|
}
|
|
}
|
|
})(jQuery);
|