From b2a46171c2cfcd9682537a801a1ea68e7e2d3ba0 Mon Sep 17 00:00:00 2001 From: wpxp123456 <2677556700@qq.com> Date: Tue, 20 Oct 2020 17:26:29 +0800 Subject: [PATCH] feat(api add): setSheetOrder refresh getScreenshot setWorkbookName undo redo --- docs/zh/guide/api.md | 27 +--- src/controllers/constant.js | 3 - src/global/api.js | 304 +++++++++++++++++++++++++++++++++++- src/global/setdata.js | 5 +- 4 files changed, 305 insertions(+), 34 deletions(-) diff --git a/docs/zh/guide/api.md b/docs/zh/guide/api.md index 514f736..9bb9790 100644 --- a/docs/zh/guide/api.md +++ b/docs/zh/guide/api.md @@ -1651,8 +1651,6 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开 ### getAllSheets() -[todo] - - **说明**: 返回所有工作表配置,格式同工作表配置,得到的结果可用于表格初始化时作为options.data使用。 @@ -1922,9 +1920,6 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开 ### setSheetOrder(orderList [,setting]) -[todo] - - - **参数**: - {Array} [orderList]: 工作表顺序,设置工作表的index和order来指定位置,如: @@ -2019,9 +2014,6 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开 ### refresh([setting]) -[todo] - - - **参数**: - {PlainObject} [setting]: 可选参数 @@ -2078,27 +2070,22 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开 ### getScreenshot([setting]) -[todo] - - **参数**: - {PlainObject} [setting]: 可选参数 - + {Array | Object | String} [range]: 选区范围,支持选区的格式为`"A1:B2"`、`"sheetName!A1:B2"`或者`{row:[0,1],column:[0,1]}`,只能为单个选区;默认为当前选区 - + {Number} [order]: 工作表下标;默认值为当前工作表下标 + + {Object | String} [range]: 选区范围,支持选区的格式为`"A1:B2"`、`"sheetName!A1:B2"`或者`{row:[0,1],column:[0,1]}`,只能为单个选区;默认为当前选区 - **说明**: - 返回指定选区截图后生成的base64格式的图片 + 返回当前表格指定选区截图后生成的base64格式的图片 ------------ ### setWorkbookName(name [,setting]) -[todo] - - **参数**: - - {Number} [name]: 工作簿名称 + - {String} [name]: 工作簿名称 - {PlainObject} [setting]: 可选参数 + {Function} [success]: 操作结束的回调函数 @@ -2110,9 +2097,6 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开 ### undo([setting]) -[todo] - - - **参数**: - {PlainObject} [setting]: 可选参数 @@ -2126,9 +2110,6 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开 ### redo([setting]) -[todo] - - - **参数**: - {PlainObject} [setting]: 可选参数 @@ -2257,8 +2238,6 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开 ### transToData(celldata [,setting])
-[todo] - - **参数**: - {Array} [celldata]: data数据 diff --git a/src/controllers/constant.js b/src/controllers/constant.js index 5cd11a7..8899d90 100644 --- a/src/controllers/constant.js +++ b/src/controllers/constant.js @@ -530,9 +530,6 @@ function rightclickHTML(){ - `; } diff --git a/src/global/api.js b/src/global/api.js index f861cc4..bd68992 100644 --- a/src/global/api.js +++ b/src/global/api.js @@ -1,5 +1,5 @@ import Store from "../store"; -import { replaceHtml, getObjType, chatatABC } from "../utils/util"; +import { replaceHtml, getObjType, chatatABC, luckysheetactiveCell } from "../utils/util"; import { getSheetIndex, getluckysheet_select_save, getluckysheetfile } from "../methods/get"; import locale from "../locale/locale"; @@ -20,6 +20,7 @@ import { luckysheetDeleteCell, luckysheetextendtable, luckysheetdeletetable } fr import { isRealNull, valueIsError, isRealNum, isEditMode, hasPartMC } from "./validate"; import { isdatetime, diff } from "./datecontroll"; import { getBorderInfoCompute } from './border'; +import { luckysheetDrawMain } from './draw'; import server from "../controllers/server"; import menuButton from '../controllers/menuButton'; @@ -31,8 +32,9 @@ import sheetmanage from '../controllers/sheetmanage'; import conditionformat from '../controllers/conditionformat'; import { luckysheet_searcharray } from "../controllers/sheetSearch"; import { selectHightlightShow, selectIsOverlap } from '../controllers/select'; -import { sheetHTML } from '../controllers/constant'; +import { sheetHTML, luckysheetdefaultstyle } from '../controllers/constant'; import { createFilterOptions } from '../controllers/filter'; +import controlHistory from '../controllers/controlHistory'; const IDCardReg = /^\d{6}(18|19|20)?\d{2}(0[1-9]|1[12])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/i; @@ -4662,6 +4664,64 @@ export function setSheetMove(type, options = {}) { } +/** + * 重新排序所有工作表的位置,指定工作表顺序的数组。 + * @param {Array} orderList 工作表顺序,设置工作表的index和order来指定位置 + * @param {Object} options 可选参数 + * @param {Function} options.success 操作结束的回调函数 + */ +export function setSheetOrder(orderList, options = {}) { + if(orderList == null || orderList.length == 0){ + return tooltip.info("Type orderList not available", ""); + } + + let orderListMap = {}; + orderList.forEach((item) => { + orderListMap[item.index.toString()] = item.order; + }) + + Store.luckysheetfile.sort((x, y) => { + let order_x = orderListMap[x.index.toString()]; + let order_y = orderListMap[y.index.toString()]; + + if(order_x != null && order_y != null){ + return order_x - order_y; + } + else if(order_x != null){ + return -1; + } + else if(order_y != null){ + return 1; + } + else{ + return 1; + } + }) + + let orders = {}; + + Store.luckysheetfile.forEach((item, i, arr) => { + arr[i].order = i; + orders[item.index.toString()] = i; + + if(i > 0){ + let preIndex = arr[i - 1].index; + $("#luckysheet-sheets-item" + item.index).insertAfter($("#luckysheet-sheets-item" + preIndex)); + } + }) + + server.saveParam("shr", null, orders); + + let { + success + } = {...options} + + if (success && typeof success === 'function') { + success(); + } +} + + /** * 显示指定下标工作表的网格线,返回操作的工作表对象 * @param {Object} options 可选参数 @@ -4738,6 +4798,24 @@ export function hideGridLines(options = {}){ } +/** + * 刷新canvas + * @param {Object} options 可选参数 + * @param {Function} options.success 操作结束的回调函数 + */ +export function refresh(options = {}) { + luckysheetrefreshgrid(); + + let { + success + } = {...options} + + if (success && typeof success === 'function') { + success(); + } +} + + /** * 滚动当前工作表位置 * @param {Object} options 可选参数 @@ -4801,7 +4879,6 @@ export function scroll(options = {}){ /** * 根据窗口大小自动resize画布 - * * @param {Object} options 可选参数 * @param {Function} options.success 操作结束的回调函数 */ @@ -4818,6 +4895,200 @@ export function resize(options = {}){ } +/** + * 返回指定选区截图后生成的base64格式的图片 + * @param {Object} options 可选参数 + * @param {Object | String} options.range 选区范围,只能为单个选区;默认为当前选区 + */ +export function getScreenshot(options = {}) { + let { + range = Store.luckysheet_select_save[Store.luckysheet_select_save.length - 1], + } = {...options} + + if(getObjType(range) == 'string'){ + if(!formula.iscelldata(range)){ + return tooltip.info("The range parameter is invalid.", ""); + } + + let cellrange = formula.getcellrange(range); + range = { + "row": cellrange.row, + "column": cellrange.column + }; + } + + if(getObjType(range) != 'object' || range.row == null || range.column == null){ + return tooltip.info("The range parameter is invalid.", ""); + } + + let str = range.row[0], + edr = range.row[1], + stc = range.column[0], + edc = range.column[1]; + + let has_PartMC = hasPartMC(Store.config, str, edr, stc, edc); + + if(has_PartMC){ + return tooltip.info('Cannot perform this operation on partially merged cells', ''); + } + + let visibledatarow = Store.visibledatarow; + let visibledatacolumn = Store.visibledatacolumn; + + let scrollHeight, rh_height; + if (str - 1 < 0) { + scrollHeight = 0; + rh_height = visibledatarow[edr]; + } + else { + scrollHeight = visibledatarow[str - 1]; + rh_height = visibledatarow[edr] - visibledatarow[str - 1]; + } + + let scrollWidth, ch_width; + if (stc - 1 < 0) { + scrollWidth = 0; + ch_width = visibledatacolumn[edc]; + } + else { + scrollWidth = visibledatacolumn[stc - 1]; + ch_width = visibledatacolumn[edc] - visibledatacolumn[stc - 1]; + } + + let newCanvas = $("