产品一张表luckysheet前端代码库
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

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);
}
});
}