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.
281 lines
12 KiB
281 lines
12 KiB
|
|
import { modelHTML } from './constant';
|
|
|
|
import { selectHightlightShow } from './select';
|
|
import {checkProtectionAuthorityNormal} from './protection';
|
|
import {
|
|
replaceHtml,
|
|
chatatABC,
|
|
} from '../utils/util';
|
|
import { rowlenByRange } from '../global/getRowlen';
|
|
import { isEditMode } from '../global/validate';
|
|
import cleargridelement from '../global/cleargridelement';
|
|
import {
|
|
jfrefreshgrid,
|
|
} from '../global/refresh';
|
|
import { getcellvalue } from '../global/getdata';
|
|
import { orderbydata, sortColumnSeletion } from '../global/sort';
|
|
import tooltip from '../global/tooltip';
|
|
import editor from '../global/editor';
|
|
import { isdatatype } from '../global/datecontroll';
|
|
import Store from '../store';
|
|
import locale from '../locale/locale';
|
|
|
|
|
|
export function orderByInitial(){
|
|
const _locale = locale();
|
|
//菜单栏 排序按钮
|
|
$("#luckysheetorderbyasc, #luckysheetorderbyasc_t").mousedown(function (event) {
|
|
cleargridelement(event);
|
|
sortColumnSeletion(Store.orderbyindex, true);
|
|
selectHightlightShow();
|
|
});
|
|
|
|
$("#luckysheetorderbydesc, #luckysheetorderbydesc_t").click(function (event) {
|
|
cleargridelement(event);
|
|
sortColumnSeletion(Store.orderbyindex, false);
|
|
selectHightlightShow();
|
|
});
|
|
|
|
//排序事件
|
|
let luckysheet_sort_initial = true;
|
|
$("#luckysheetorderby").click(function () {
|
|
|
|
if(!checkProtectionAuthorityNormal(Store.currentSheetIndex, "sort")){
|
|
return;
|
|
}
|
|
|
|
$("body .luckysheet-cols-menu").hide();
|
|
const locale_sort = _locale.sort;
|
|
if(Store.luckysheet_select_save.length > 1){
|
|
if(isEditMode()){
|
|
alert(locale_sort.noRangeError);
|
|
}
|
|
else{
|
|
tooltip.info(locale_sort.noRangeError, "");
|
|
}
|
|
return;
|
|
}
|
|
|
|
let last = Store.luckysheet_select_save[0];
|
|
let r1 = last["row"][0], r2 = last["row"][1];
|
|
let c1 = last["column"][0], c2 = last["column"][1];
|
|
|
|
if (luckysheet_sort_initial) {
|
|
luckysheet_sort_initial = false;
|
|
|
|
let content = `<div style="overflow: hidden;" class="luckysheet-sort-modal"><div><label><input type="checkbox" id="luckysheet-sort-haveheader"/><span>${locale_sort.hasTitle}</span></label></div><div style="overflow-y:auto;" id="luckysheet-sort-dialog-tablec"><table data-itemcount="0" cellspacing="0"> <tr><td>${locale_sort.hasTitle} <select name="sort_0"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> </select> </td> <td> <div><label><input value="asc" type="radio" checked="checked" name="sort_0"><span>${locale_sort.asc}A-Z</span></label></div> <div><label><input value="desc" type="radio" name="sort_0"><span>${locale_sort.desc}Z-A</span></label></div></td></tr></table></div><div style="background: #e5e5e5;border-top: 1px solid #f5f5f5; height: 1px; width: 100%;margin:2px 0px;margin-bottom:10px;"></div> <div> <span style="font-weight: bold; text-decoration: underline;text-align:center;color: blue;cursor: pointer;" class="luckysheet-sort-dialog-additem">+ ${locale_sort.addOthers}</span> </div> </div>`;
|
|
|
|
$("body").first().append(replaceHtml(modelHTML, { "id": "luckysheet-sort-dialog", "addclass": "", "title": _locale.sort.sortTitle, "content": content, "botton": `<button id="luckysheet-sort-modal-confirm" class="btn btn-primary">${locale_sort.confirm}</button><button class="btn btn-default luckysheet-model-close-btn">${locale_sort.close}</button>`}));
|
|
|
|
$("#luckysheet-sort-dialog .luckysheet-sort-dialog-additem").click(function () {
|
|
let last = Store.luckysheet_select_save[0];
|
|
let r1 = last["row"][0], r2 = last["row"][1];
|
|
let c1 = last["column"][0], c2 = last["column"][1];
|
|
|
|
let option = "", i = $("#luckysheet-sort-dialog table").data("itemcount") + 1;
|
|
let t = $("#luckysheet-sort-haveheader").is(':checked');
|
|
|
|
for (let c = c1; c <= c2; c++) {
|
|
if (t) {
|
|
let v = getcellvalue(r1, c, Store.flowdata, "m");
|
|
|
|
if(v == null){
|
|
v = locale_sort.columnOperation + (c - c1 + 1);
|
|
}
|
|
|
|
option += '<option value="' + c + '">' + v + '</option>';
|
|
}
|
|
else {
|
|
option += '<option value="' + c + '">' + chatatABC(c) + '</option>';
|
|
}
|
|
}
|
|
|
|
$("#luckysheet-sort-dialog table").append(`
|
|
<tr class="luckysheet-sort-dialog-tr">
|
|
<td><span class="luckysheet-sort-item-close" onclick="$(this).parent().parent().remove();"><i class="fa fa-times"
|
|
aria-hidden="true"></i></span>${locale_sort.secondaryTitle} <select
|
|
name="sort_${i}">${option}</select> </td>
|
|
<td>
|
|
<div><label><input value="asc" type="radio" checked="checked"
|
|
name="sort_${i}"><span>${locale_sort.asc}A-Z</span></label></div>
|
|
<div><label><input value="desc" type="radio" name="sort_${i}"><span>${locale_sort.desc}Z-A</span></label>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
`);
|
|
$("#luckysheet-sort-dialog table").data("itemcount", i);
|
|
});
|
|
|
|
$("#luckysheet-sort-haveheader").change(function () {
|
|
let last = Store.luckysheet_select_save[0];
|
|
let r1 = last["row"][0], r2 = last["row"][1];
|
|
let c1 = last["column"][0], c2 = last["column"][1];
|
|
|
|
let t = $(this).is(':checked');
|
|
let option = "";
|
|
|
|
for (let c = c1; c <= c2; c++) {
|
|
if (t) {
|
|
let v = getcellvalue(r1, c, Store.flowdata, "m");
|
|
|
|
if(v == null){
|
|
v = locale_sort.columnOperation + (c - c1 + 1);
|
|
}
|
|
|
|
option += '<option value="' + c + '">' + v + '</option>';
|
|
}
|
|
else {
|
|
option += '<option value="' + c + '">' + chatatABC(c) + '</option>';
|
|
}
|
|
}
|
|
|
|
$("#luckysheet-sort-dialog tr select").each(function () {
|
|
$(this).html(option);
|
|
});
|
|
});
|
|
|
|
//Custom sort
|
|
$("#luckysheet-sort-modal-confirm").click(function () {
|
|
if(Store.luckysheet_select_save.length > 1){
|
|
if(isEditMode()){
|
|
alert(locale_sort.noRangeError);
|
|
}
|
|
else{
|
|
tooltip.info(locale_sort.noRangeError, "");
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
let d = editor.deepCopyFlowData(Store.flowdata);
|
|
|
|
let last = Store.luckysheet_select_save[0];
|
|
let r1 = last["row"][0], r2 = last["row"][1];
|
|
let c1 = last["column"][0], c2 = last["column"][1];
|
|
|
|
//Data has header row
|
|
let t = $("#luckysheet-sort-haveheader").is(':checked');
|
|
|
|
let str;
|
|
if(t){
|
|
str = r1 + 1;
|
|
}
|
|
else{
|
|
str = r1;
|
|
}
|
|
|
|
let hasMc = false; //Whether the sort selection has merged cells
|
|
|
|
let data = [];
|
|
|
|
for(let r = str; r <= r2; r++){
|
|
let data_row = [];
|
|
|
|
for(let c = c1; c <= c2; c++){
|
|
if(d[r][c] != null && d[r][c].mc != null){
|
|
hasMc = true;
|
|
break;
|
|
}
|
|
|
|
data_row.push(d[r][c]);
|
|
}
|
|
|
|
data.push(data_row);
|
|
}
|
|
|
|
if(hasMc){
|
|
if(isEditMode()){
|
|
alert(locale_sort.mergeError);
|
|
}
|
|
else{
|
|
tooltip.info(locale_sort.mergeError, "");
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
$($("#luckysheet-sort-dialog table tr").toArray().reverse()).each(function () {
|
|
let i = $(this).find("select").val(),
|
|
asc = $(this).find('input:radio:checked').val();
|
|
|
|
i -= c1;
|
|
|
|
if (asc == "asc") {
|
|
asc = true;
|
|
}
|
|
else {
|
|
asc = false;
|
|
}
|
|
|
|
data = orderbydata([].concat(data), i, asc);
|
|
});
|
|
|
|
for(let r = str; r <= r2; r++){
|
|
for(let c = c1; c <= c2; c++){
|
|
d[r][c] = data[r - str][c - c1];
|
|
}
|
|
}
|
|
|
|
let allParam = {};
|
|
if(Store.config["rowlen"] != null){
|
|
let cfg = $.extend(true, {}, Store.config);
|
|
cfg = rowlenByRange(d, str, r2, cfg);
|
|
|
|
allParam = {
|
|
"cfg": cfg,
|
|
"RowlChange": true
|
|
}
|
|
}
|
|
|
|
jfrefreshgrid(d, [{ "row": [str, r2], "column": [c1, c2] }], allParam);
|
|
|
|
$("#luckysheet-sort-dialog").hide();
|
|
$("#luckysheet-modal-dialog-mask").hide();
|
|
});
|
|
}
|
|
|
|
let option = "";
|
|
for (let c = c1; c <= c2; c++) {
|
|
option += '<option value="' + c + '">' + chatatABC(c) + '</option>';
|
|
}
|
|
|
|
$("#luckysheet-sort-dialog select").html(option);
|
|
|
|
$("#luckysheet-sort-dialog .luckysheet-sort-dialog-tr").remove();
|
|
|
|
$("#luckysheet-sort-haveheader").prop("checked", false);
|
|
$("#luckysheet-sort-dialog input:radio:first").prop("checked", "checked");
|
|
|
|
$("#luckysheet-sort-dialog .luckysheet-modal-dialog-title-text").html(locale_sort.sortRangeTitle+"<span>" + chatatABC(c1) + (r1 + 1) + "</span>"+ locale_sort.sortRangeTitleTo +"<span>" + chatatABC(c2) + (r2 + 1) + "</span>");
|
|
|
|
let $t = $("#luckysheet-sort-dialog"), myh = $t.outerHeight(), myw = $t.outerWidth();
|
|
let winw = $(window).width(), winh = $(window).height();
|
|
let scrollLeft = $(document).scrollLeft(), scrollTop = $(document).scrollTop();
|
|
|
|
$("#luckysheet-sort-dialog-tablec").css("max-height", (winh - myh) / 2);
|
|
$("#luckysheet-sort-dialog").css({ "left": (winw + scrollLeft - myw) / 2, "top": (winh + scrollTop - myh) / 2 }).show();
|
|
$("#luckysheet-modal-dialog-mask").show();
|
|
|
|
if (r1 < r2) {
|
|
setTimeout(function () {
|
|
let flowrowdata1 = Store.flowdata[r1],
|
|
flowrowdata2 = Store.flowdata[r1 + 1],
|
|
hastitle = false;
|
|
|
|
for (let i = c1; i <= c2; i++) {
|
|
let isdatatype_r1 = isdatatype(flowrowdata1[i]),
|
|
isdatatype_r2 = isdatatype(flowrowdata2[i]);
|
|
|
|
if (isdatatype_r1 != isdatatype_r2) {
|
|
hastitle = true;
|
|
}
|
|
}
|
|
|
|
if (hastitle) {
|
|
$("#luckysheet-sort-haveheader").prop("checked", true).change();
|
|
}
|
|
}, 10);
|
|
}
|
|
});
|
|
}
|