diff --git a/gulpfile.js b/gulpfile.js index 1ee6470..2ac9305 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -1,43 +1,45 @@ const gulp = require('gulp'); -// gulp 核心方法 +// gulp core function const { src, dest, series, parallel, watch } = require('gulp'); -// gulp压缩js +// gulp compress js const uglify = require('gulp-uglify'); -// gulp判断 +// gulp judgment const gulpif = require('gulp-if'); -// gulp压缩css +// gulp compress css const cleanCSS = require('gulp-clean-css'); -// 删除文件 +// Delete Files const del = require('delete'); -// 实时刷新浏览器 +// Refresh the browser in real time const browserSync = require('browser-sync').create(); const reload = browserSync.reload; -// 文件合并 -const useref = require('gulp-useref'); - -// rollup打包,处理es6模块 +// According to html reference, files are merged +// const useref = require('gulp-useref'); +// File merge +const concat = require('gulp-concat'); +// rollup packaging, processing es6 modules const { rollup } = require('rollup'); -// rollup寻找node_modules模块 +// rollup looks for node_modules module const { nodeResolve } = require('@rollup/plugin-node-resolve'); -// rollup把commonjs模块转化为es6模块 +// rollup converts commonjs module to es6 module const commonjs = require('@rollup/plugin-commonjs'); -// rollup代码压缩 +// rollup code compression const terser = require('rollup-plugin-terser').terser; // rollup babel plugin, support the latest ES grammar const babel = require('@rollup/plugin-babel').default; -// 区分开发与生产环境 -const production = !process.env.ROLLUP_WATCH; +// Distinguish development and production environments +const production = process.env.NODE_ENV === 'production' ? true : false; -// uglify js压缩配置 https://github.com/mishoo/UglifyJS#minify-options +// uglify js Compression configuration https://github.com/mishoo/UglifyJS#minify-options const uglifyOptions = { compress: { drop_console: true } } +// babel config const babelConfig = { babelHelpers: 'bundled', - exclude: 'node_modules/**', // 只编译我们的源代码 + exclude: 'node_modules/**', // Only compile our source code plugins: [ ], presets: [ @@ -45,37 +47,108 @@ const babelConfig = { ] }; +// file handler paths +const paths = { + // static resources,contains index.html, fonts and images,and extension plugins dependency + staticHtml: ['src/*.html'], + staticFonts: ['src/fonts/**'], + staticImages: ['src/plugins/images/*.png'], + staticExpendPlugins: ['src/expendPlugins/**', '!src/expendPlugins/**/plugin.js'], + staticDemoData: ['src/demoData/*.js'], + staticCssImages: ['src/css/**','!src/css/*.css'], + + // static resources dest + destStaticHtml: ['dist'], + destStaticFonts: ['dist/fonts'], + destStaticImages: ['dist/plugins/images'], + destStaticExpendPlugins: ['dist/expendPlugins'], + destStaticDemoData: ['dist/demoData'], + destStaticCssImages: ['dist/css'], + + //core es module + core: ['src/**/*.js','!src/demoData/*.js','src/expendPlugins/**/plugin.js','!src/plugins/js/*.js'], + + //plugins src + pluginsCss: ['src/plugins/css/*.css'], + plugins: ['src/plugins/*.css'], + css:['src/css/*.css'], + pluginsJs:[ + 'src/plugins/js/jquery.min.js', + 'src/plugins/js/clipboard.min.js', + 'src/plugins/js/spectrum.min.js', + 'src/plugins/js/jquery-ui.min.js', + 'src/plugins/js/jquery.mousewheel.min.js', + 'src/plugins/js/moment.min.js', + 'src/plugins/js/moment-timezone-with-data.min.js', + 'src/plugins/js/moment-msdate.js', + 'src/plugins/js/numeral.min.js', + 'src/plugins/js/html2canvas.min.js', + 'src/plugins/js/pako.min.js', + 'src/plugins/js/localforage.min.js', + 'src/plugins/js/lodash.min.js', + 'src/plugins/js/daterangepicker.js', + 'src/plugins/js/jstat.min.js' + ], + + //plugins concat + concatPluginsCss: 'pluginsCss.css', + concatPlugins: 'plugins.css', + concatCss: 'luckysheet.css', + concatPluginsJs: 'plugin.js', + + //plugins dest + destPluginsCss: ['dist/plugins/css'], + destPlugins: ['dist/plugins'], + destCss: ['dist/css'], + destPluginsJs: ['dist/plugins/js'], + + // Package directory + dist: 'dist', +}; -// 清除dist目录 +// Clear the dist directory function clean() { - return del(['dist']); + return del([paths.dist]); } -//监听文件+重载 -function watchReload() { - core(); - serve(); - const watcher = watch(['src/**']); +// Static server +function serve(done) { + browserSync.init({ + server: { + baseDir: paths.dist + } + }, done) +} - // 多次刷新节流 - let reloadTimer = null; - watcher.on('change', function (path, stats) { - +// Monitoring file changes +function watcher(done) { + watch(paths.core,{ delay: 500 }, series(core, reloadBrowser)); + + // watch plugins and css + watch(paths.pluginsCss,{ delay: 500 }, series(pluginsCss, reloadBrowser)); + watch(paths.plugins,{ delay: 500 }, series(plugins, reloadBrowser)); + watch(paths.css,{ delay: 500 }, series(css, reloadBrowser)); + watch(paths.pluginsJs,{ delay: 500 }, series(pluginsJs, reloadBrowser)); + + // watch static + watch(paths.staticHtml,{ delay: 500 }, series(copyStaticHtml, reloadBrowser)); + watch(paths.staticFonts,{ delay: 500 }, series(copyStaticFonts, reloadBrowser)); + watch(paths.staticImages,{ delay: 500 }, series(copyStaticImages, reloadBrowser)); + watch(paths.staticExpendPlugins,{ delay: 500 }, series(copyStaticExpendPlugins, reloadBrowser)); + watch(paths.staticDemoData,{ delay: 500 }, series(copyStaticDemoData, reloadBrowser)); + watch(paths.staticCssImages,{ delay: 500 }, series(copyStaticCssImages, reloadBrowser)); + + done(); +} - if (reloadTimer !== null) { - clearTimeout(reloadTimer); - return; - } - reloadTimer = setTimeout(() => { - reload(); - core(); - reloadTimer = null; - }, 500); +// Refresh browser +function reloadBrowser(done) { + reload(); - }); + done(); } -//打包核心代码 +//Package the core code async function core() { const bundle = await rollup({ input: 'src/index.js', @@ -87,57 +160,88 @@ async function core() { // extract: true, // // minimize: isProductionEnv, // }), - // production && terser(), // minify, but only in production + production && terser(), // minify, but only in production babel(babelConfig) ], }); - return bundle.write({ - file: 'dist/luckysheet.js', + bundle.write({ + file: 'dist/luckysheet.umd.js', format: 'umd', name: 'luckysheet', sourcemap: true }); + + if(production){ + bundle.write({ + file: 'dist/luckysheet.esm.js', + format: 'esm', + name: 'luckysheet', + sourcemap: true + }); + } + } -// 打包js -function js() { - return src(['src/**/*.html', '!src/luckysheet-core.js','!src/luckysheet-function.js','!src/luckysheet-chart.js']) - .pipe(useref(), function () { - return vinylPaths(del) - }) - .pipe(gulpif(isJavaScript, uglify(uglifyOptions))) - .pipe(gulpif(isCss, cleanCSS())) - .pipe(dest('dist/')) +// According to the build tag in html, package js and css +function pluginsCss() { + return src(paths.pluginsCss) + .pipe(concat(paths.concatPluginsCss)) + .pipe(gulpif(production, cleanCSS())) + .pipe(dest(paths.destPluginsCss)) + } -// 打包其他文件 -function otherFile() { - return src(['src/**', '!src/**/*.html', '!src/**/*.js', '!src/**/*.css', '!src/luckysheet-core.js','!src/luckysheet-function.js','!src/luckysheet-chart.js']) - .pipe(dest('dist/')) + +function plugins() { + return src(paths.plugins) + .pipe(concat(paths.concatPlugins)) + .pipe(gulpif(production, cleanCSS())) + .pipe(dest(paths.destPlugins)); } -// 静态服务器 -function serve() { - browserSync.init({ - server: { - baseDir: "./" - } - }); +function css() { + return src(paths.css) + .pipe(concat(paths.concatCss)) + .pipe(gulpif(production, cleanCSS())) + .pipe(dest(paths.destCss)); } -// 判断文件的扩展名是否是 '.js' , 且需要为未压缩过的js -function isJavaScript(file) { - return file.extname === '.js'; +function pluginsJs() { + return src(paths.pluginsJs) + .pipe(concat(paths.concatPluginsJs)) + .pipe(gulpif(production, uglify(uglifyOptions))) + .pipe(dest(paths.destPluginsJs)); } -// 判断文件的扩展名是否是 '.css' , 且需要为未压缩过的css -function isCss(file) { - return file.extname === '.css'; +// Copy static resources +function copyStaticHtml(){ + return src(paths.staticHtml) + .pipe(dest(paths.destStaticHtml)); +} +function copyStaticFonts(){ + return src(paths.staticFonts) + .pipe(dest(paths.destStaticFonts)); +} +function copyStaticImages(){ + return src(paths.staticImages) + .pipe(dest(paths.destStaticImages)); +} +function copyStaticExpendPlugins(){ + return src(paths.staticExpendPlugins) + .pipe(dest(paths.destStaticExpendPlugins)); +} +function copyStaticDemoData(){ + return src(paths.staticDemoData) + .pipe(dest(paths.destStaticDemoData)); +} +function copyStaticCssImages(){ + return src(paths.staticCssImages) + .pipe(dest(paths.destStaticCssImages)); } -const build = series(clean, parallel(js, otherFile, core)); -const dev = watchReload; +const dev = series(clean, parallel(pluginsCss, plugins, css, pluginsJs, copyStaticHtml, copyStaticFonts, copyStaticImages, copyStaticExpendPlugins, copyStaticDemoData, copyStaticCssImages, core), watcher, serve); +const build = series(clean, parallel(pluginsCss, plugins, css, pluginsJs, copyStaticHtml, copyStaticFonts, copyStaticImages, copyStaticExpendPlugins, copyStaticDemoData, copyStaticCssImages, core)); -exports.build = build; exports.dev = dev; -exports.default = build; \ No newline at end of file +exports.build = build; +exports.default = dev; \ No newline at end of file diff --git a/package.json b/package.json index 8321fac..2c18420 100644 --- a/package.json +++ b/package.json @@ -13,9 +13,11 @@ "@rollup/plugin-node-resolve": "^8.0.1", "browser-sync": "^2.26.7", "commitizen": "^4.1.2", + "cross-env": "^7.0.2", "delete": "^1.1.0", "gulp": "^4.0.2", "gulp-clean-css": "^4.3.0", + "gulp-concat": "^2.6.1", "gulp-if": "^3.0.0", "gulp-uglify": "^3.0.2", "gulp-useref": "^4.0.1", @@ -26,8 +28,8 @@ }, "dependencies": {}, "scripts": { - "build": "gulp build", - "dev": "gulp dev", + "build": "cross-env NODE_ENV=production gulp build", + "dev": "cross-env NODE_ENV=development gulp dev", "docs:dev": "vuepress dev docs", "docs:build": "vuepress build docs", "commit": "git-cz", diff --git a/src/config.js b/src/config.js index 045b137..4847416 100644 --- a/src/config.js +++ b/src/config.js @@ -22,7 +22,7 @@ export default { config: {}, //表格行高、列宽、合并单元格、公式等设置 fullscreenmode: true, //是否全屏模式,非全屏模式下,标记框不会强制选中。 devicePixelRatio: window.devicePixelRatio, //设备比例,比例越大表格分标率越高 - allowEdit: true, //是否允许前台编辑 + allowEdit: false, //是否允许前台编辑 loadUrl: "", // 配置loadUrl的地址,luckysheet会通过ajax请求表格数据,默认载入status为1的sheet数据中的所有data,其余的sheet载入除data字段外的所有字段 loadSheetUrl: "", //配置loadSheetUrl的地址,参数为gridKey(表格主键) 和 index(sheet主键合集,格式为[1,2,3]),返回的数据为sheet的data字段数据集合 gridKey: "", // 表格唯一标识符 diff --git a/src/controllers/constant.js b/src/controllers/constant.js index 9737bdc..eeceea6 100644 --- a/src/controllers/constant.js +++ b/src/controllers/constant.js @@ -164,9 +164,281 @@ const gridHTML = '
' + columeHeader_word = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'], columeHeader_word_index = { 'A': 0, 'B': 1, 'C': 2, 'D': 3, 'E': 4, 'F': 5, 'G': 6, 'H': 7, 'I': 8, 'J': 9, 'K': 10, 'L': 11, 'M': 12, 'N': 13, 'O': 14, 'P': 15, 'Q': 16, 'R': 17, 'S': 18, 'T': 19, 'U': 20, 'V': 21, 'W': 22, 'X': 23, 'Y': 24, 'Z': 25 }, flow = '
${flow}
', - colsmenuHTML = '', - rightclickHTML = '
复制
复制为
粘贴
增加
增加
删除选中
px
A-Z顺序排列
Z-A降序排列
清除内容
矩阵操作选区
排序选区
筛选选区
图表生成
Json
一维数组
二维数组
多维数组
×
对角线
反对角线
对角偏移
布尔值
翻转
翻转
转置
矩阵计算
删除两端0值
删除重复值
生成新矩阵
', - pivottableconfigHTML = '
排序
排序依据
显示总计
', + colsmenuHTML = ''; + +//右键菜单dom +const rightclickHTML = '
' + +'
' + +'
复制
' + +'
' + +'
' + +'
' + +'复制为' + +'
' + +'
' + +'
' + +'
粘贴
' + +'
' + +'
' + +'' + +'
' + +'
' + +'插入' + +'
' + +'
' + +'
' + +'
' + +'删除' + +'
' + +'
' + +'
' + +'
' + +'隐藏' + +'
' + +'
' + +'
' + +'
' + +'' + +'
' + +'
' + +'向' + +'' + +'增加' + +'' + +'' + +'' + +'
' + +'
' + +'
' + +'
' + +'向' + +'' + +'增加' + +'' + +'' + +'' + +'
' + +'
' + +'
' + +'
' + +'删除选中' + +'' + +'
' + +'
' + +'
' + +'
' + +'' + +'' + +'' + +'px' + +'' + +'
' + +'
' + +'
' + +'
' + +'' + +'
' + +'
A-Z顺序排列
' + +'
' + +'
' + +'
Z-A降序排列
' + +'
' + +'
' + +'
' + +'' + +'
' + +'
清除内容
' + +'
' + +'
' + +'
' + +'矩阵操作选区' + +'
' + +'
' + +'
' + +'
排序选区
' + +'
' + +'
' + +'
筛选选区
' + +'
' + +'
' + +'
图表生成
' + +'
' + +'
' + +'
' + //复制为 二级菜单 + +'
' + +'
' + +'
' + +'Json' + +'' + +'' + +'
' + +'
' + +'
' + +'
一维数组
' + +'
' + +'
' + +'
二维数组
' + +'
' + +'
' + +'
' + +'
多维数组
' + +'
' + +'' + +'×' + +'' + +'' + +'
' + +'
' + +'
' + +'' + +'
' + +'
对角线
' + +'
' + +'
' + +'
反对角线
' + +'
' + +'
' + +'
' + +'对角偏移' + +'' + +'列' + +'' + +'
' + +'
' + +'
' + +'
布尔值
' + +'
' + +'
' + //插入 二级菜单 + +'
' + +'
' + +'
' + +'向上增加' + +'' + +'' + +'' + +'
' + +'
' + +'
' + +'
' + +'向下增加' + +'' + +'' + +'' + +'
' + +'
' + +'
' + +'
' + +'向左增加' + +'' + +'' + +'' + +'
' + +'
' + +'
' + +'
' + +'向右增加' + +'' + +'' + +'' + +'
' + +'
' + +'
' + //删除 二级菜单 + +'
' + +'
' + +'
' + +'删除选中行' + +'
' + +'
' + +'
' + +'
' + +'删除选中列' + +'
' + +'
' + +'
' + //隐藏 二级菜单 + +'
' + +'
' + +'
' + +'隐藏选中行' + +'
' + +'
' + +'
' + +'
' + +'显示隐藏行' + +'
' + +'
' + // +'
' + // +'
' + // +'隐藏选中列' + // +'
' + // +'
' + // +'
' + // +'
' + // +'显示隐藏列' + // +'
' + // +'
' + +'
' + //矩阵操作选区 二级菜单 + +'
' + +'
' + +'
' + +'翻转' + +'' + +'' + +'
' + +'
' + +'
' + +'
' + +'翻转' + +'' + +'' + +'
' + +'
' + +'
' + +'
转置
' + +'
' + +'' + +'
' + +'
' + +'
矩阵计算
' + +'
' + +'' + +'' + +'' + +'
' + +'
' + +'
' + +'
' + +'
' + +'删除两端0值' + +'' + +'' + +'
' + +'
' + +'
' + +'
' + +'删除重复值' + +'' + +'' + +'
' + +'
' + +'
' + +'
生成新矩阵
' + +'
' + +'
'; + +const pivottableconfigHTML = '
排序
排序依据
显示总计
', pivottablesumHTML = '
求和
数值计数
计数
去重计数
平均值
最大值
最小值
中位数
乘积
标准差
整体标准差
方差
整体方差
', sheetHTML = '
${name} ${colorset}
', columnHeaderHTML = '
${column}
', @@ -272,7 +544,7 @@ function menuToolBar (){
-
@@ -290,7 +562,7 @@ function menuToolBar (){ style="user-select: none;">
-->
-
@@ -300,7 +572,7 @@ function menuToolBar (){
-
@@ -310,7 +582,7 @@ function menuToolBar (){
-
@@ -325,7 +597,7 @@ function menuToolBar (){
-
@@ -340,7 +612,7 @@ function menuToolBar (){
-
@@ -359,7 +631,7 @@ function menuToolBar (){
+ data-tooltip="${toolbar.font}" id="luckysheet-icon-font-family" role="button" style="user-select: none;">
+ data-tips="${toolbar.fontSize}" id="luckysheet-icon-font-size" style="user-select: none;">
-
@@ -396,7 +668,7 @@ function menuToolBar (){
-
@@ -410,7 +682,7 @@ function menuToolBar (){
-
@@ -424,7 +696,7 @@ function menuToolBar (){
-
@@ -439,7 +711,7 @@ function menuToolBar (){
+ data-tips="${toolbar.textColor}" id="luckysheet-icon-text-color" role="button" style="user-select: none;">
@@ -473,7 +745,7 @@ function menuToolBar (){
+ data-tips="${toolbar.fillColor}" id="luckysheet-icon-cell-color" role="button" style="user-select: none;">
@@ -505,7 +777,7 @@ function menuToolBar (){
+ data-tips="${toolbar.border}" id="luckysheet-icon-border-all" role="button" style="user-select: none;">
+ data-tips="${toolbar.borderStyle}..." id="luckysheet-icon-border-menu" role="button" style="user-select: none;">
+ data-tips="${toolbar.mergeCell}" id="luckysheet-icon-merge-button" role="button" style="user-select: none;">
+ data-tips="${toolbar.chooseMergeType}..." id="luckysheet-icon-merge-menu" role="button" style="user-select: none;">
+ data-tips="${toolbar.horizontalAlign}" id="luckysheet-icon-align" role="button" style="user-select: none;">
+ data-tips="${toolbar.alignment}..." id="luckysheet-icon-align-menu" role="button" style="user-select: none;">
+ data-tips="${toolbar.verticalAlign}" id="luckysheet-icon-valign" role="button" style="user-select: none;">
+ data-tips="${toolbar.alignment}..." id="luckysheet-icon-valign-menu" role="button" style="user-select: none;">
+ data-tips="${toolbar.textWrap}" id="luckysheet-icon-textwrap" role="button" style="user-select: none;">
+ data-tips="${toolbar.textWrapMode}..." id="luckysheet-icon-textwrap-menu" role="button" style="user-select: none;">
+ data-tips="${toolbar.textRotate}" id="luckysheet-icon-rotation" role="button" style="user-select: none;">
+ data-tips="${toolbar.textRotateMode}..." id="luckysheet-icon-rotation-menu" role="button" style="user-select: none;">
+ data-tips="${toolbar.freezeTopRow}" id="luckysheet-freezen-btn-horizontal" role="button" style="user-select: none;">
- 冻结首行 + ${toolbar.freezeTopRow}
@@ -705,7 +977,7 @@ function menuToolBar (){
-
@@ -722,7 +994,7 @@ function menuToolBar (){
-
@@ -740,7 +1012,7 @@ function menuToolBar (){
+ data-tips="${toolbar.autoSum}" id="luckysheet-icon-function" role="button" style="user-select: none;">
- 求和 + ${toolbar.sum}
+ data-tips="${toolbar.moreFunction}..." id="luckysheet-icon-function-menu" role="button" style="user-select: none;">
-
@@ -777,7 +1049,7 @@ function menuToolBar (){ style="user-select: none;">
- 条件格式 + ${toolbar.conditionalFormat}
@@ -785,7 +1057,7 @@ function menuToolBar (){
-
@@ -793,7 +1065,7 @@ function menuToolBar (){ style="user-select: none;">
- 批注 + ${toolbar.postil}
@@ -804,22 +1076,22 @@ function menuToolBar (){
- 数据透视表 + ${toolbar.pivotTable}
- 图表 + ${toolbar.chart}
- 截图 + ${toolbar.screenshot}
- 分列 + ${toolbar.splitColumn}
`; } const luckysheetlodingHTML = '
渲染中...
'; diff --git a/src/controllers/controlHistory.js b/src/controllers/controlHistory.js index 1693e92..7e96c57 100644 --- a/src/controllers/controlHistory.js +++ b/src/controllers/controlHistory.js @@ -139,6 +139,16 @@ const controlHistory = { jfrefreshgrid_adRC(ctr.data, ctr.config, "addRC", ctrlValue, ctr.calc, ctr.filterObj, ctr.cf, ctr.af, ctr.freezen); } + else if (ctr.type == "showHidRows") { // 隐藏、显示行 撤销操作 + //config + Store.config = ctr.config; + Store.luckysheetfile[getSheetIndex(ctr.sheetIndex)].config = ctr.config; + + server.saveParam("cg", ctr.sheetIndex, ctr.config["rowhidden"], { "k": "rowhidden" }); + + //行高、列宽 刷新 + jfrefreshgrid_rhcw(Store.flowdata.length, Store.flowdata[0].length); + } else if (ctr.type == "datachangeAll") { formula.execFunctionGroup(); jfrefreshgridall(ctr.data[0].length, ctr.data.length, ctr.data, null, ctr.range, "datachangeAll", ctr.ctrlValue); @@ -371,6 +381,16 @@ const controlHistory = { else if (ctr.type == "delRC") { //删除行列重做操作 jfrefreshgrid_adRC(ctr.curData, ctr.curConfig, "delRC", ctr.ctrlValue, ctr.curCalc, ctr.curFilterObj, ctr.curCf, ctr.curAf, ctr.curFreezen); } + else if (ctr.type == "showHidRows") { // 隐藏、显示行 重做操作 + //config + Store.config = ctr.curconfig; + Store.luckysheetfile[getSheetIndex(ctr.sheetIndex)].config = ctr.curconfig; + + server.saveParam("cg", ctr.sheetIndex, ctr.curconfig["rowhidden"], { "k": "rowhidden" }); + + //行高、列宽 刷新 + jfrefreshgrid_rhcw(Store.flowdata.length, Store.flowdata[0].length); + } else if (ctr.type == "datachangeAll") { formula.execFunctionGroup(); jfrefreshgridall(ctr.curdata[0].length, ctr.curdata.length, ctr.curdata, null, ctr.currange, "datachangeAll", ctr.ctrlValue); diff --git a/src/controllers/handler.js b/src/controllers/handler.js index 56b9c1f..719dce4 100644 --- a/src/controllers/handler.js +++ b/src/controllers/handler.js @@ -186,6 +186,11 @@ export default function luckysheetHandler() { } }); + // //禁止前台编辑 + // if(!Store.allowEdit){ + // return; + // } + //选区拖动替换 $("#luckysheet-cell-main div.luckysheet-cs-draghandle").mousedown(function (event) { if(isEditMode()){//此模式下禁用选区拖动 @@ -1078,6 +1083,7 @@ export default function luckysheetHandler() { let obj_s = Store.luckysheet_select_save[0]; $("#luckysheet-cols-rows-data").show(); + $("#luckysheet-cols-rows-handleincell").show(); $("#luckysheet-cols-rows-add, #luckysheet-cols-rows-shift").hide(); if (obj_s["row"] != null && obj_s["row"][0] == 0 && obj_s["row"][1] == Store.flowdata.length - 1) { @@ -1091,6 +1097,7 @@ export default function luckysheetHandler() { $("#luckysheet-cols-rows-add").show(); $("#luckysheet-cols-rows-data").show(); $("#luckysheet-cols-rows-shift").hide(); + $("#luckysheet-cols-rows-handleincell").hide(); Store.luckysheet_cols_menu_status = true; @@ -1135,6 +1142,7 @@ export default function luckysheetHandler() { $("#luckysheet-cols-rows-add").show(); $("#luckysheet-cols-rows-data").show(); $("#luckysheet-cols-rows-shift").hide(); + $("#luckysheet-cols-rows-handleincell").hide(); Store.luckysheet_cols_menu_status = true; @@ -4471,6 +4479,7 @@ export default function luckysheetHandler() { $("#luckysheet-cols-rows-add").show(); $("#luckysheet-cols-rows-data").show(); $("#luckysheet-cols-rows-shift").hide(); + $("#luckysheet-cols-rows-handleincell").hide(); showrightclickmenu($("#luckysheet-rightclick-menu"), $(this).offset().left + 46, event.pageY); Store.luckysheet_cols_menu_status = true; @@ -4858,6 +4867,7 @@ export default function luckysheetHandler() { $("#luckysheet-cols-rows-add").show(); $("#luckysheet-cols-rows-data").show(); $("#luckysheet-cols-rows-shift").hide(); + $("#luckysheet-cols-rows-handleincell").hide(); showrightclickmenu($("#luckysheet-rightclick-menu"), event.pageX, $(this).offset().top + 18); Store.luckysheet_cols_menu_status = true; @@ -5124,6 +5134,7 @@ export default function luckysheetHandler() { $("#luckysheet-cols-rows-add").show(); $("#luckysheet-cols-rows-data").hide(); $("#luckysheet-cols-rows-shift").show(); + $("#luckysheet-cols-rows-handleincell").hide(); showrightclickmenu($menu, offset.left, offset.top + 18); Store.luckysheet_cols_menu_status = true; @@ -6845,6 +6856,90 @@ export default function luckysheetHandler() { let st_index = Store.luckysheet_select_save[0][Store.luckysheetRightHeadClickIs][0]; luckysheetextendtable(Store.luckysheetRightHeadClickIs, st_index, value, "lefttop"); }); + $("#luckysheet-addTopRows").click(function (event) { + $("#luckysheet-rightclick-menu").hide(); + $("#" + Store.container).attr("tabindex", 0).focus(); + + if(Store.luckysheet_select_save.length > 1){ + if(isEditMode()){ + alert("不能对多重选择区域执行此操作,请选择单个区域,然后再试"); + } + else{ + tooltip.info("不能对多重选择区域执行此操作,请选择单个区域,然后再试", ""); + } + + return; + } + + let $t = $(this), value = $t.parent().find("input").val(); + if (!isRealNum(value)) { + if(isEditMode()){ + alert("增加错误, 请输入数字"); + } + else{ + tooltip.info("增加错误, 请输入数字", ""); + } + + return; + } + + value = parseInt(value); + + if (value < 1 || value > 100) { + if(isEditMode()){ + alert("增加错误, 增加范围限制在1-100"); + } + else{ + tooltip.info("增加错误, 增加范围限制在1-100", ""); + } + return; + } + + let st_index = Store.luckysheet_select_save[0].row[0]; + luckysheetextendtable('row', st_index, value, "lefttop"); + }) + $("#luckysheet-addLeftCols").click(function (event) { + $("#luckysheet-rightclick-menu").hide(); + $("#" + Store.container).attr("tabindex", 0).focus(); + + if(Store.luckysheet_select_save.length > 1){ + if(isEditMode()){ + alert("不能对多重选择区域执行此操作,请选择单个区域,然后再试"); + } + else{ + tooltip.info("不能对多重选择区域执行此操作,请选择单个区域,然后再试", ""); + } + + return; + } + + let $t = $(this), value = $t.parent().find("input").val(); + if (!isRealNum(value)) { + if(isEditMode()){ + alert("增加错误, 请输入数字"); + } + else{ + tooltip.info("增加错误, 请输入数字", ""); + } + + return; + } + + value = parseInt(value); + + if (value < 1 || value > 100) { + if(isEditMode()){ + alert("增加错误, 增加范围限制在1-100"); + } + else{ + tooltip.info("增加错误, 增加范围限制在1-100", ""); + } + return; + } + + let st_index = Store.luckysheet_select_save[0].column[0]; + luckysheetextendtable('column', st_index, value, "lefttop"); + }) //向右增加列,向下增加行 $("#luckysheet-add-rightbottom, #luckysheet-add-rightbottom_t").click(function (event) { @@ -6890,6 +6985,92 @@ export default function luckysheetHandler() { let st_index = Store.luckysheet_select_save[0][Store.luckysheetRightHeadClickIs][1]; luckysheetextendtable(Store.luckysheetRightHeadClickIs, st_index, value, "rightbottom"); }); + $("#luckysheet-addBottomRows").click(function (event) { + $("#luckysheet-rightclick-menu").hide(); + $("#" + Store.container).attr("tabindex", 0).focus(); + + if(Store.luckysheet_select_save.length > 1){ + if(isEditMode()){ + alert("不能对多重选择区域执行此操作,请选择单个区域,然后再试"); + } + else{ + tooltip.info("不能对多重选择区域执行此操作,请选择单个区域,然后再试", ""); + } + + return; + } + + let $t = $(this), value = $t.parent().find("input").val(); + if (!isRealNum(value)) { + if(isEditMode()){ + alert("增加错误, 请输入数字"); + } + else{ + tooltip.info("增加错误, 请输入数字", ""); + } + + return; + } + + value = parseInt(value); + + if (value < 1 || value > 100) { + if(isEditMode()){ + alert("增加错误, 增加范围限制在1-100"); + } + else{ + tooltip.info("增加错误, 增加范围限制在1-100", ""); + } + + return; + } + + let st_index = Store.luckysheet_select_save[0].row[1]; + luckysheetextendtable('row', st_index, value, "rightbottom"); + }); + $("#luckysheet-addRightCols").click(function (event) { + $("#luckysheet-rightclick-menu").hide(); + $("#" + Store.container).attr("tabindex", 0).focus(); + + if(Store.luckysheet_select_save.length > 1){ + if(isEditMode()){ + alert("不能对多重选择区域执行此操作,请选择单个区域,然后再试"); + } + else{ + tooltip.info("不能对多重选择区域执行此操作,请选择单个区域,然后再试", ""); + } + + return; + } + + let $t = $(this), value = $t.parent().find("input").val(); + if (!isRealNum(value)) { + if(isEditMode()){ + alert("增加错误, 请输入数字"); + } + else{ + tooltip.info("增加错误, 请输入数字", ""); + } + + return; + } + + value = parseInt(value); + + if (value < 1 || value > 100) { + if(isEditMode()){ + alert("增加错误, 增加范围限制在1-100"); + } + else{ + tooltip.info("增加错误, 增加范围限制在1-100", ""); + } + + return; + } + + let st_index = Store.luckysheet_select_save[0].column[1]; + luckysheetextendtable('column', st_index, value, "rightbottom"); + }); //删除选中行列 $("#luckysheet-del-selected, #luckysheet-del-selected_t").click(function (event) { @@ -6916,9 +7097,150 @@ export default function luckysheetHandler() { return; } - let st_index = Store.luckysheet_select_save[0][Store.luckysheetRightHeadClickIs][0], ed_index = Store.luckysheet_select_save[0][Store.luckysheetRightHeadClickIs][1]; + let st_index = Store.luckysheet_select_save[0][Store.luckysheetRightHeadClickIs][0], + ed_index = Store.luckysheet_select_save[0][Store.luckysheetRightHeadClickIs][1]; luckysheetdeletetable(Store.luckysheetRightHeadClickIs, st_index, ed_index); }); + $("#luckysheet-delRows").click(function (event) { + $("#luckysheet-rightclick-menu").hide(); + $("#" + Store.container).attr("tabindex", 0).focus(); + + if(Store.luckysheet_select_save.length > 1){ + if(Store.luckysheetRightHeadClickIs == "row"){ + if(isEditMode()){ + alert("不能对多重选择区域执行此操作,请选择单个区域,然后再试"); + } + else{ + tooltip.info("不能对多重选择区域执行此操作,请选择单个区域,然后再试", ""); + } + } + else if(Store.luckysheetRightHeadClickIs == "column"){ + if(isEditMode()){ + alert("不能对多重选择区域执行此操作,请选择单个区域,然后再试"); + } + else{ + tooltip.info("不能对多重选择区域执行此操作,请选择单个区域,然后再试", ""); + } + } + return; + } + + let st_index = Store.luckysheet_select_save[0].row[0], + ed_index = Store.luckysheet_select_save[0].row[1]; + luckysheetdeletetable('row', st_index, ed_index); + }) + $("#luckysheet-delCols").click(function (event) { + $("#luckysheet-rightclick-menu").hide(); + $("#" + Store.container).attr("tabindex", 0).focus(); + + if(Store.luckysheet_select_save.length > 1){ + if(Store.luckysheetRightHeadClickIs == "row"){ + if(isEditMode()){ + alert("不能对多重选择区域执行此操作,请选择单个区域,然后再试"); + } + else{ + tooltip.info("不能对多重选择区域执行此操作,请选择单个区域,然后再试", ""); + } + } + else if(Store.luckysheetRightHeadClickIs == "column"){ + if(isEditMode()){ + alert("不能对多重选择区域执行此操作,请选择单个区域,然后再试"); + } + else{ + tooltip.info("不能对多重选择区域执行此操作,请选择单个区域,然后再试", ""); + } + } + return; + } + + let st_index = Store.luckysheet_select_save[0].column[0], + ed_index = Store.luckysheet_select_save[0].column[1]; + luckysheetdeletetable('column', st_index, ed_index); + }) + + //隐藏、显示行 + $("#luckysheet-hidRows").click(function (event) { + $("#luckysheet-rightclick-menu").hide(); + $("#" + Store.container).attr("tabindex", 0).focus(); + + let cfg = $.extend(true, {}, Store.config); + if(cfg["rowhidden"] == null){ + cfg["rowhidden"] = {}; + } + + for(let s = 0; s < Store.luckysheet_select_save.length; s++){ + let r1 = Store.luckysheet_select_save[s].row[0], + r2 = Store.luckysheet_select_save[s].row[1], + c1 = Store.luckysheet_select_save[s].column[0], + c2 = Store.luckysheet_select_save[s].column[1]; + + for(let r = r1; r <= r2; r++){ + cfg["rowhidden"][r] = 0; + } + } + + //保存撤销 + if(Store.clearjfundo){ + let redo = {}; + redo["type"] = "showHidRows"; + redo["sheetIndex"] = Store.currentSheetIndex; + redo["config"] = $.extend(true, {}, Store.config); + redo["curconfig"] = cfg; + + Store.jfundo = []; + Store.jfredo.push(redo); + } + + //config + Store.config = cfg; + Store.luckysheetfile[getSheetIndex(Store.currentSheetIndex)].config = Store.config; + + server.saveParam("cg", Store.currentSheetIndex, cfg["rowhidden"], { "k": "rowhidden" }); + + //行高、列宽 刷新 + jfrefreshgrid_rhcw(Store.flowdata.length, Store.flowdata[0].length); + }) + $("#luckysheet-showHidRows").click(function (event) { + $("#luckysheet-rightclick-menu").hide(); + $("#" + Store.container).attr("tabindex", 0).focus(); + + let cfg = $.extend(true, {}, Store.config); + if(cfg["rowhidden"] == null){ + return; + } + + for(let s = 0; s < Store.luckysheet_select_save.length; s++){ + let r1 = Store.luckysheet_select_save[s].row[0], + r2 = Store.luckysheet_select_save[s].row[1], + c1 = Store.luckysheet_select_save[s].column[0], + c2 = Store.luckysheet_select_save[s].column[1]; + + for(let r = r1; r <= r2; r++){ + delete cfg["rowhidden"][r]; + } + } + + //保存撤销 + if(Store.clearjfundo){ + let redo = {}; + redo["type"] = "showHidRows"; + redo["sheetIndex"] = Store.currentSheetIndex; + redo["config"] = $.extend(true, {}, Store.config); + redo["curconfig"] = cfg; + + Store.jfundo = []; + Store.jfredo.push(redo); + } + + //config + Store.config = cfg; + Store.luckysheetfile[getSheetIndex(Store.currentSheetIndex)].config = Store.config; + + server.saveParam("cg", Store.currentSheetIndex, cfg["rowhidden"], { "k": "rowhidden" }); + + //行高、列宽 刷新 + jfrefreshgrid_rhcw(Store.flowdata.length, Store.flowdata[0].length); + }) //清除单元格内容 $("#luckysheet-delete-text").click(function(){ diff --git a/src/controllers/menuButton.js b/src/controllers/menuButton.js index e358aa6..4a0b4f0 100644 --- a/src/controllers/menuButton.js +++ b/src/controllers/menuButton.js @@ -24,6 +24,7 @@ import { sortSelection } from '../global/sort'; import luckysheetformula from '../global/formula'; import { rowLocationByIndex, colLocationByIndex } from '../global/location'; import { isdatatypemulti } from '../global/datecontroll'; +import { getCellTextSplitArr } from '../global/getRowlen'; import { setcellvalue } from '../global/setdata'; import { countfunc } from '../global/count'; import { getSheetIndex, getRangetxt, getluckysheetfile } from '../methods/get'; @@ -2928,19 +2929,7 @@ const menuButton = { if(tbWidth > cellWidth){ let strArr = [];//文本截断数组 - - for(let strI = 1; strI <= strValue.length; strI++){ - let strV = strValue.substring(strArr.join("").length, strI); - let strtextMetrics = canvas.measureText(strV).width; - - if(strtextMetrics > cellWidth){ - strArr.push(strValue.substring(strArr.join("").length, strI-1)); - strI = strI - 2; - } - else if(strtextMetrics <= cellWidth && strI == strValue.length){ - strArr.push(strV); - } - } + strArr = getCellTextSplitArr(strValue, strArr, cellWidth, canvas); let computeRowlen = oneLineTextHeight * strArr.length; //比较计算高度和当前高度取最大高度 diff --git a/src/controllers/selection.js b/src/controllers/selection.js index 04485d7..c9b76b2 100644 --- a/src/controllers/selection.js +++ b/src/controllers/selection.js @@ -1391,7 +1391,7 @@ const selection = { } //复制范围 是否有 条件格式 - let ruleArr_cf = []; + let ruleArr_cf = [], cdformat = []; if(copyRange["copyRange"].length == 1){ let c_file = Store.luckysheetfile[getSheetIndex(copySheetIndex)]; let a_file = Store.luckysheetfile[getSheetIndex(Store.currentSheetIndex)]; @@ -1402,7 +1402,7 @@ const selection = { c_c2 = copyRange["copyRange"][0].column[1]; ruleArr_cf = $.extend(true, [], c_file["luckysheet_conditionformat_save"]); - let cdformat = $.extend(true, [], a_file["luckysheet_conditionformat_save"]); + cdformat = $.extend(true, [], a_file["luckysheet_conditionformat_save"]); if(ruleArr_cf != null && ruleArr_cf.length > 0){ for(let i = 0; i < ruleArr_cf.length; i++){ diff --git a/src/controllers/sparkline.js b/src/controllers/sparkline.js index a61c07e..978d2d5 100644 --- a/src/controllers/sparkline.js +++ b/src/controllers/sparkline.js @@ -1913,11 +1913,12 @@ const luckysheetSparkline = { }, _getContext: function (lineColor, fillColor, lineWidth) { + let context; if(this.ctx != null){ - let context = this.ctx; + context = this.ctx; } else{ - let context = $("#" + this._canvasID ).get(0).getContext('2d'); + context = $("#" + this._canvasID ).get(0).getContext('2d'); } if (lineColor !== undefined) { diff --git a/src/core.js b/src/core.js index 563a5d2..db3bacd 100644 --- a/src/core.js +++ b/src/core.js @@ -25,6 +25,7 @@ luckysheet.create = function (setting) { Store.defaultrowNum = extendsetting.row; Store.fullscreenmode = extendsetting.fullscreenmode; Store.lang = extendsetting.lang; //language + Store.allowEdit = extendsetting.allowEdit; server.gridKey = extendsetting.gridKey; server.loadUrl = extendsetting.loadUrl; diff --git a/src/css/luckysheet-core.css b/src/css/luckysheet-core.css index e02d0c3..42dcc60 100644 --- a/src/css/luckysheet-core.css +++ b/src/css/luckysheet-core.css @@ -2452,10 +2452,10 @@ body:not(.ewa-ipad) .luckysheet-cols-h-cell-nosel:hover, body:not(.ewa-ipad) .lu padding-left: 999999px; } -#luckysheet-copy-btn { +/* #luckysheet-copy-btn { position: absolute; visibility: hidden; -} +} */ .btn { diff --git a/demoData/sheetCell.js b/src/demoData/sheetCell.js similarity index 100% rename from demoData/sheetCell.js rename to src/demoData/sheetCell.js diff --git a/demoData/sheetComment.js b/src/demoData/sheetComment.js similarity index 100% rename from demoData/sheetComment.js rename to src/demoData/sheetComment.js diff --git a/demoData/sheetConditionFormat.js b/src/demoData/sheetConditionFormat.js similarity index 100% rename from demoData/sheetConditionFormat.js rename to src/demoData/sheetConditionFormat.js diff --git a/demoData/sheetFormula.js b/src/demoData/sheetFormula.js similarity index 100% rename from demoData/sheetFormula.js rename to src/demoData/sheetFormula.js diff --git a/demoData/sheetPivotTable.js b/src/demoData/sheetPivotTable.js similarity index 100% rename from demoData/sheetPivotTable.js rename to src/demoData/sheetPivotTable.js diff --git a/demoData/sheetPivotTableData.js b/src/demoData/sheetPivotTableData.js similarity index 100% rename from demoData/sheetPivotTableData.js rename to src/demoData/sheetPivotTableData.js diff --git a/demoData/sheetTable.js b/src/demoData/sheetTable.js similarity index 100% rename from demoData/sheetTable.js rename to src/demoData/sheetTable.js diff --git a/src/expendPlugins/chart/plugin.js b/src/expendPlugins/chart/plugin.js index 02de38b..222ed4c 100644 --- a/src/expendPlugins/chart/plugin.js +++ b/src/expendPlugins/chart/plugin.js @@ -8,12 +8,12 @@ const dependScripts = [ 'https://cdn.jsdelivr.net/npm/vue@2.6.11', 'https://unpkg.com/vuex@3.4.0', 'https://unpkg.com/element-ui/lib/index.js', - './src/expendPlugins/chart/chartmix.umd.js' + 'expendPlugins/chart/chartmix.umd.js' ] const dependLinks = [ 'https://unpkg.com/element-ui/lib/theme-chalk/index.css', - './src/expendPlugins/chart/chartmix.css' + 'expendPlugins/chart/chartmix.css' ] diff --git a/src/global/draw.js b/src/global/draw.js index b259f0d..50e3bcd 100644 --- a/src/global/draw.js +++ b/src/global/draw.js @@ -9,6 +9,7 @@ import { luckysheet_searcharray } from '../controllers/sheetSearch'; import { dynamicArrayCompute } from './dynamicArray'; import browser from './browser'; import { isRealNull } from './validate'; +import { getCellTextSplitArr } from './getRowlen'; import { getcellvalue } from './getdata'; import { getBorderInfoCompute } from './border'; import { getObjType, chatatABC, luckysheetfontformat } from '../utils/util'; @@ -781,23 +782,17 @@ function luckysheetDrawMain(scrollWidth, scrollHeight, drawWidth, drawHeight, of if(Store.flowdata[r][c].tb == "2"){ let strValue = value.toString(); + let tbWidth = luckysheetTableContent.measureText(strValue).width; let cellWidth = end_c - start_c - 8; - let strArr = []; - - for(let strI = 1; strI <= strValue.length; strI++){ - let strV = strValue.substring(strArr.join("").length, strI); - let strtextMetrics = luckysheetTableContent.measureText(strV).width; - - if(strtextMetrics > cellWidth){ - strArr.push(strValue.substring(strArr.join("").length, strI - 1)); - strI = strI - 2; - } - else if(strtextMetrics <= cellWidth && strI == strValue.length){ - strArr.push(strV); - } - } - textH = strArr.length * oneLineTextHeight; + if(tbWidth > cellWidth){ + let strArr = [];//文本截断数组 + strArr = getCellTextSplitArr(strValue, strArr, cellWidth, luckysheetTableContent); + textH = strArr.length * oneLineTextHeight; + } + else{ + textH = oneLineTextHeight; + } } else if(Store.flowdata[r][c].tr != null && Store.flowdata[r][c].tr != "0"){ let tr = Store.flowdata[r][c].tr; @@ -831,6 +826,11 @@ function luckysheetDrawMain(scrollWidth, scrollHeight, drawWidth, drawHeight, of textH = oneLineTextHeight; } + //水平对齐 + let horizonAlign = menuButton.checkstatus(Store.flowdata, r, c , "ht"); + //垂直对齐 + let verticalAlign = menuButton.checkstatus(Store.flowdata, r, c , "vt"); + //水平对齐方式是 居中或居右对齐 且单元格宽度小于文字宽度 (用离屏canvas渲染) let canvasName, cellsize; if(browser.BrowserType() != "Safari" && (canvasType == "offline" || ((horizonAlign == "0" || horizonAlign == "2") && (end_c - start_c) < textW) || ((verticalAlign == "0" || verticalAlign == "2") && (end_r - start_r) < textH))){ @@ -855,21 +855,19 @@ function luckysheetDrawMain(scrollWidth, scrollHeight, drawWidth, drawHeight, of ]; } - //水平对齐 - let horizonAlign = menuButton.checkstatus(Store.flowdata, r, c , "ht"); - let horizonAlignPos = (start_c + 4 + offsetLeft) * Store.devicePixelRatio; //horizonAlign默认为1,左对齐 - if(horizonAlign == "0"){ //居中对齐 + //horizonAlign默认为1,左对齐 + let horizonAlignPos = (start_c + 4 + offsetLeft) * Store.devicePixelRatio; + if(horizonAlign == "0"){ + //居中对齐 horizonAlignPos = (start_c + (end_c - start_c) / 2 + offsetLeft) * Store.devicePixelRatio - (textMetrics) / 2; } - else if(horizonAlign == "2"){ //右对齐 + else if(horizonAlign == "2"){ + //右对齐 horizonAlignPos = (end_c + offsetLeft - 8) * Store.devicePixelRatio - (textMetrics); } - - //垂直对齐 - let verticalAlign = menuButton.checkstatus(Store.flowdata, r, c , "vt"); - let verticalFixed = browser.luckysheetrefreshfixed(); //verticalAlign默认为2,下对齐 + let verticalFixed = browser.luckysheetrefreshfixed(); let verticalAlignPos = (end_r + offsetTop - 2 + verticalFixed) * Store.devicePixelRatio - oneLineTextHeight; let verticalAlignPos_text = (end_r + offsetTop - 2 + verticalFixed) * Store.devicePixelRatio; canvasName.textBaseline = "bottom"; @@ -1109,21 +1107,10 @@ function luckysheetDrawMain(scrollWidth, scrollHeight, drawWidth, drawHeight, of let strValue = value.toString(); let cellWidth = end_c - start_c - 8; - let strArr = []; - - for(let strI = 1; strI <= strValue.length; strI++){ - let strV = strValue.substring(strArr.join("").length, strI); - let strtextMetrics = canvasName.measureText(strV).width; - - if(strtextMetrics > cellWidth){ - strArr.push(strValue.substring(strArr.join("").length, strI - 1)); - strI = strI - 2; - } - else if(strtextMetrics <= cellWidth && strI == strValue.length){ - strArr.push(strV); - } - } - + + let strArr = [];//文本截断数组 + strArr = getCellTextSplitArr(strValue, strArr, cellWidth, canvasName); + for(let iFill = 0; iFill < strArr.length; iFill++){ //水平对齐计算 let strWidth = canvasName.measureText(strArr[iFill]).width; diff --git a/src/global/extend.js b/src/global/extend.js index 621896a..34fcd56 100644 --- a/src/global/extend.js +++ b/src/global/extend.js @@ -459,8 +459,9 @@ function luckysheetextendtable(type, index, value, direction) { newFreezen.freezenverticaldata = luckysheetFreezen.freezenverticaldata; } + let type1; if (type == "row") { - let type1 = "r"; + type1 = "r"; //行高配置变动 if(cfg["rowlen"] != null){ @@ -586,7 +587,7 @@ function luckysheetextendtable(type, index, value, direction) { } } else { - let type1 = "c"; + type1 = "c"; //行高配置变动 if(cfg["columlen"] != null){ diff --git a/src/global/formula.js b/src/global/formula.js index f55a33b..868a554 100644 --- a/src/global/formula.js +++ b/src/global/formula.js @@ -9,6 +9,7 @@ import luckysheetFreezen from '../controllers/freezen'; import { seletedHighlistByindex, luckysheet_count_show } from '../controllers/select'; import { isRealNum, isRealNull, valueIsError, isEditMode } from './validate'; import { isdatetime, isdatatype } from './datecontroll'; +import { getCellTextSplitArr } from '../global/getRowlen'; import { getcellvalue } from './getdata'; import { setcellvalue } from './setdata'; import { genarate, valueShowEs } from './format'; @@ -1307,21 +1308,14 @@ const luckysheetformula = { if(tbWidth > cellWidth){ let strArr = [];//文本截断数组 - - for(let strI = 1; strI <= strValue.length; strI++){ - let strV = strValue.substring(strArr.join("").length,strI); - let strtextMetrics = offlinecanvas.measureText(strV).width; - if(strtextMetrics > cellWidth){ - strArr.push(strValue.substring(strArr.join("").length, strI - 1)); - strI = strI - 2; - } - else if(strtextMetrics <= cellWidth && strI == strValue.length){ - strArr.push(strV); - } - } + strArr = getCellTextSplitArr(strValue, strArr, cellWidth, offlinecanvas); let oneLineTextHeight = menuButton.getTextSize("田", fontset)[1]; - currentRowLen = oneLineTextHeight * strArr.length; + let computeRowlen = oneLineTextHeight * strArr.length; + //比较计算高度和当前高度取最大高度 + if(computeRowlen > currentRowLen){ + currentRowLen = computeRowlen; + } } if(currentRowLen != defaultrowlen){ diff --git a/src/global/getRowlen.js b/src/global/getRowlen.js index 2f536f7..7c25970 100644 --- a/src/global/getRowlen.js +++ b/src/global/getRowlen.js @@ -141,7 +141,31 @@ function computeRowlenArr(rowHeight, cfg) { return rowlenArr; } +//获取换行单元格截断数组 +function getCellTextSplitArr(strValue, strArr, cellWidth, canvas){ + for(let strI = 1; strI <= strValue.length; strI++){ + let strV = strValue.substring(0, strI); + let strtextMetrics = canvas.measureText(strV).width; + + if(strtextMetrics > cellWidth){ + if(strI - 1 <= 0){ + return strArr; + } + else{ + strArr.push(strValue.substring(0, strI - 1)); + return getCellTextSplitArr(strValue.substring(strI - 1), strArr, cellWidth, canvas); + } + } + else if(strI == strValue.length){ + strArr.push(strV); + } + } + + return strArr; +} + export { rowlenByRange, computeRowlenArr, + getCellTextSplitArr, } \ No newline at end of file diff --git a/src/index.html b/src/index.html new file mode 100644 index 0000000..dfa074d --- /dev/null +++ b/src/index.html @@ -0,0 +1,43 @@ + + + + + + + + + Luckysheet + + + + + + + + + + + +
+ + + + \ No newline at end of file diff --git a/src/locale/en.js b/src/locale/en.js index 9a446c2..402a8dd 100644 --- a/src/locale/en.js +++ b/src/locale/en.js @@ -22,6 +22,29 @@ export default { cancelColor: 'Cancel', collapse: 'Collapse', fillColor: 'Fill color', + border: 'Border', + borderStyle: 'Border style', + mergeCell: 'Merge cells', + chooseMergeType: 'Choose merge type', + horizontalAlign: 'Horizontal align', + verticalAlign: 'Vertical align', + alignment: 'Alignment', + textWrap: 'Text wrap', + textWrapMode: 'Text wrap mode', + textRotate: 'Text rotate', + textRotateMode: 'Text rotate mode', + freezeTopRow: 'Freeze top row', + sortAndFilter: 'Sort and filter', + findAndReplace: 'Find and replace', + sum: 'SUM', + autoSum: 'Auto SUM', + moreFunction: 'More function', + conditionalFormat: 'Conditional format', + postil: 'Postil', + pivotTable: 'PivotTable', + chart: 'Chart', + screenshot: 'Screenshot', + splitColumn: 'Split column', }, alternatingColors:{ applyRange: 'Apply to range', diff --git a/src/locale/zh.js b/src/locale/zh.js index 7c161e7..392e524 100644 --- a/src/locale/zh.js +++ b/src/locale/zh.js @@ -11,7 +11,7 @@ export default { font: '字体', fontSize: '字号大小', bold: '粗体 (Ctrl+B)', - Italic: '斜体 (Ctrl+I)', + italic: '斜体 (Ctrl+I)', strikethrough: '删除线 (Alt+Shift+5)', textColor: '文本颜色', chooseColor: '颜色选择', @@ -21,6 +21,29 @@ export default { confirmColor: '确定颜色', collapse: '收起', fillColor: '单元格颜色', + border: '边框', + borderStyle: '边框类型', + mergeCell: '合并单元格', + chooseMergeType: '选择合并类型', + horizontalAlign: '水平对齐', + verticalAlign: '垂直对齐', + alignment: '对齐方式', + textWrap: '文本换行', + textWrapMode: '换行方式', + textRotate: '文本旋转', + textRotateMode: '旋转方式', + freezeTopRow: '冻结首行', + sortAndFilter: '排序和筛选', + findAndReplace: '查找替换', + sum: '求和', + autoSum: '自动求和', + moreFunction: '更多函数', + conditionalFormat: '条件格式', + postil: '批注', + pivotTable: '数据透视表', + chart: '图表', + screenshot: '截图', + splitColumn: '分列', }, alternatingColors:{ applyRange: '应用范围', diff --git a/src/luckysheet-chart.js b/src/luckysheet-chart.js deleted file mode 100644 index 720cbdf..0000000 --- a/src/luckysheet-chart.js +++ /dev/null @@ -1,1105 +0,0 @@ -import luckysheet from './luckysheet-function' -// 防止chart部分报错,从luckysheet-chartMix.js中迁移出luckysheet部分作为核心主体,关于设置界面的部分放到chartMix vue工程 -// chart用到的各个变量 -luckysheet.chartparam = { - luckysheet_chart_point_config: null, - luckysheetCurrentChartMove: false, - luckysheetCurrentChartMoveTimeout: null, - luckysheetCurrentChartResize: null, - luckysheet_chart_rangefocus_timeout: null, - luckysheet_chart_rangefocus: false, - luckysheet_chart_data_select_state: false, - luckysheetCurrentChartMoveObj: null, - luckysheetCurrentChartMoveXy: [], - luckysheetCurrentChartMoveWinH: null, - luckysheetCurrentChartMoveWinW: null, - luckysheetInsertChartTosheetChange: true, - jgridCurrentChartSelection: null, - luckysheetCurrentChartResizeObj: null, - luckysheetCurrentChartResizeXy: null, - luckysheetCurrentChartResizeWinH: null, - luckysheetCurrentChartResizeWinW: null, - luckysheet_chartIns_index: -1, - luckysheetCurrentChartActive: false, - - jgridCurrentChartData: null, - luckysheetcurrentChart: null, - - luckysheet_chart_redo_click: false, - jgridCurrentChartType: null, - luckysheetCurrentChartStyle: null, - luckysheetCurrentChartCurrentType: null, - - luckysheetPreviousChart: '' //最近最新的图表json -} - -// 初始化图表 -luckysheet.chartInitial = function () { - $('#luckysheetdatavisual').click(function () { - - // 未加入chartMix插件时返回 - if(!window.generateChart){ - luckysheet.tooltip.info('提示', "图表插件暂未加入"); - return; - } - //防止watch生效 - // generator.isFirstEditor = true; - generator.ini(chartMixConfig) - - setTimeout(function () { - generator.showChartSettingComponent('notRefresh') //此处不刷新,插入完图表再刷新 - }, 0) - if (store.state.chartSetting.isqk) { - setTimeout(function () { - luckysheet.luckysheetsizeauto() - }, 0) - } - - // var chartAllType = 'highcharts|line|default' - var chartAllType = 'echarts|line|default' - - //如果只选中一个单元格,则自动填充选取 - var luckysheet_select_save = luckysheet.getluckysheet_select_save() - if ( - luckysheet_select_save.length == 1 && - luckysheet_select_save[0].row[0] == luckysheet_select_save[0].row[1] && - luckysheet_select_save[0].column[0] == luckysheet_select_save[0].column[1] - ) { - luckysheet.luckysheetMoveHighlightRange2('right', 'rangeOfSelect') - - luckysheet.luckysheetMoveHighlightRange2('down', 'rangeOfSelect') - - luckysheet_select_save = luckysheet.getluckysheet_select_save() - } - //处理右边的空白单元格,自动略过并修改选区 ---------------start - var shiftpositon_row = -1 - - var row_ed = - luckysheet_select_save[0]['row'][1] - luckysheet_select_save[0]['row'][0] - for ( - var r = luckysheet_select_save[0]['row'][0]; - r <= luckysheet_select_save[0]['row'][1]; - r++ - ) { - for ( - var c = luckysheet_select_save[0]['column'][0]; - c <= luckysheet_select_save[0]['column'][1]; - c++ - ) { - var value = luckysheet.getcellvalue(r, c, luckysheet.flowdata) - //console.log("value,r,c",value,r,c); - if (value != null && value.toString().length > 0) { - shiftpositon_row = r - break - } - } - - if (shiftpositon_row !== -1) { - break - } - } - - if (shiftpositon_row == -1) { - shiftpositon_row = 0 - } - - luckysheet_select_save[0]['row'] = [shiftpositon_row, shiftpositon_row] - luckysheet.setluckysheet_select_save(luckysheet_select_save) - - luckysheet.luckysheet_shiftpositon = $.extend(true, {}, luckysheet_select_save[0]) - luckysheet.luckysheetMoveEndCell('down', 'range', false, row_ed) - luckysheet_select_save = luckysheet.getluckysheet_select_save() - - var shiftpositon_col = -1 - var column_ed = - luckysheet_select_save[0]['column'][1] - luckysheet_select_save[0]['column'][0] - for ( - var c = luckysheet_select_save[0]['column'][0]; - c <= luckysheet_select_save[0]['column'][1]; - c++ - ) { - for ( - var r = luckysheet_select_save[0]['row'][0]; - r <= luckysheet_select_save[0]['row'][1]; - r++ - ) { - var value = luckysheet.getcellvalue(r, c, luckysheet.flowdata) - if (value != null && value.toString().length > 0) { - shiftpositon_col = c - break - } - } - - if (shiftpositon_col !== -1) { - break - } - } - - if (shiftpositon_col == -1) { - shiftpositon_col = 0 - } - - luckysheet_select_save[0]['column'] = [shiftpositon_col, shiftpositon_col] - luckysheet.setluckysheet_select_save(luckysheet_select_save) - - luckysheet.luckysheet_shiftpositon = $.extend(true, {}, luckysheet_select_save[0]) - luckysheet.luckysheetMoveEndCell('right', 'range', false, column_ed) - luckysheet_select_save = luckysheet.getluckysheet_select_save() - - var dataSheetIndex = luckysheet.currentSheetIndex //当前sheet的原始索引 - var rangeArray = $.extend(true, [], luckysheet_select_save) - - //处理右边的空白单元格,自动略过并修改选区 ---------------end - - //根据选区来获取数据,########需要支持多选区取得的数据################## - var chartData = luckysheet.getdatabyselection( - luckysheet_select_save[0], - dataSheetIndex - ) - // 获取原始数据 - generator.chartData = chartData - var rangeTxt = luckysheet.sheetmanage.getRangetxt( - dataSheetIndex, - rangeArray[0], - dataSheetIndex - ) - - var chartTheme = 'default' - - var winw = $(window).width(), - winh = $(window).height() - var $cellmain = $('#luckysheet-cell-main') - var scrollLeft = $cellmain.scrollLeft(), - scrollTop = $cellmain.scrollTop() - var myw = winw * 0.3, - myh = winw * 0.3 * 0.618 - var myLeft = (winw - myw) / 3 + scrollLeft + Math.round(Math.random() * 10), - myTop = (winh - myh) / 4 + scrollTop + Math.round(Math.random() * 10) //先计算好位置 - - console.dir(JSON.stringify(chartData)) - console.dir(JSON.stringify(rangeArray)) - //luckysheet.insertChartTosheet放到insertNewChart中 - generator.insertNewChart( - chartAllType, - chartData, - dataSheetIndex, - rangeArray, - rangeTxt, - chartTheme, - luckysheet.currentSheetIndex, - myh, - myw, - myLeft, - myTop - ) - // setTimeout(function(){//暂时使用setTimeout解决watch第一次触发监听的问题 - // generator.isFirstEditor = false; - // },1000); - }) -} - -// 图表数据区域拖动修改 -luckysheet.chart_selection = { - create: function (chart_id) { - var chart_json = store.state.chartSetting.chartList[chart_id] - - if (chart_json.rangeArray.length > 1) { - return - } - - $('#luckysheet-chart-rangeShow').empty() - $('#luckysheet-cell-selected-boxs').hide() - $('#luckysheet-cell-selected-focus').hide() - $('#luckysheet-rows-h-selected').hide() - $('#luckysheet-cols-h-selected').hide() - $('#luckysheet-row-count-show').hide() - $('#luckysheet-column-count-show').hide() - - var st_r = chart_json.rangeArray[0].row[0] - var st_c = chart_json.rangeArray[0].column[0] - - var rangeSplitArray = chart_json.rangeSplitArray - - //首行是否标题 - var rangeRowCheck = chart_json.rangeRowCheck - - if (rangeRowCheck.exits) { - var chart_rowtitle_html = getRangeShowHtml( - 'rowtitle', - rangeSplitArray.rowtitle.row[0] + st_r, - rangeSplitArray.rowtitle.row[1] + st_r, - rangeSplitArray.rowtitle.column[0] + st_c, - rangeSplitArray.rowtitle.column[1] + st_c - ) - } else { - var chart_rowtitle_html = '' - } - - //首列是否标题 - var rangeColCheck = chart_json.rangeColCheck - - if (rangeColCheck.exits) { - var chart_coltitle_html = getRangeShowHtml( - 'coltitle', - rangeSplitArray.coltitle.row[0] + st_r, - rangeSplitArray.coltitle.row[1] + st_r, - rangeSplitArray.coltitle.column[0] + st_c, - rangeSplitArray.coltitle.column[1] + st_c - ) - } else { - var chart_coltitle_html = '' - } - - //内容块 - var chart_content_html = getRangeShowHtml( - 'content', - rangeSplitArray.content.row[0] + st_r, - rangeSplitArray.content.row[1] + st_r, - rangeSplitArray.content.column[0] + st_c, - rangeSplitArray.content.column[1] + st_c - ) - - $('#luckysheet-chart-rangeShow').append( - chart_rowtitle_html + chart_coltitle_html + chart_content_html - ) - - function getRangeShowHtml(type, r1, r2, c1, c2) { - var visibledatarow = luckysheet.getvisibledatarow() - var visibledatacolumn = luckysheet.getvisibledatacolumn() - - var row = visibledatarow[r2], - row_pre = r1 - 1 == -1 ? 0 : visibledatarow[r1 - 1] - var col = visibledatacolumn[c2], - col_pre = c1 - 1 == -1 ? 0 : visibledatacolumn[c1 - 1] - - if (type == 'rowtitle') { - var color = '#C65151' - } - - if (type == 'coltitle') { - var color = '#9667C0' - } - - if (type == 'content') { - var color = '#4970D1' - } - - var html = - '
' + - '
' + - '
' + - '
' + - '
' + - '
' + - '
' + - '
' + - '
' + - '
' + - '
' - - return html - } - }, - rangeMove: false, - rangeMovexy: null, - rangeMoveIndex: null, - rangeMoveObj: null, - rangeMoveDraging: function (event, sheetBarHeight, statisticBarHeight) { - var chart_json = $.extend( - true, - {}, - store.state.chartSetting.chartList[store.state.chartSetting.chartCurrent] - ) - var st_r = chart_json.rangeArray[0].row[0] - var st_c = chart_json.rangeArray[0].column[0] - var rangeRowCheck = chart_json.rangeRowCheck - var rangeColCheck = chart_json.rangeColCheck - var rangeSplitArray = chart_json.rangeSplitArray - - var mouse = luckysheet.mouseposition(event.pageX, event.pageY) - var scrollLeft = $('#luckysheet-cell-main').scrollLeft() - var scrollTop = $('#luckysheet-cell-main').scrollTop() - - var x = mouse[0] + scrollLeft - var y = mouse[1] + scrollTop - - var winH = - $(window).height() + scrollTop - sheetBarHeight - statisticBarHeight, - winW = $(window).width() + scrollLeft - - var rowLocation = luckysheet.rowLocation(y), - row_index = rowLocation[2] - var colLocation = luckysheet.colLocation(x), - col_index = colLocation[2] - - var visibledatarow = luckysheet.getvisibledatarow() - var visibledatacolumn = luckysheet.getvisibledatacolumn() - - var $id = luckysheet.chart_selection.rangeMoveObj.attr('id') - - if ($id == 'luckysheet-chart-rangeShow-content') { - //行 - var row_s = - luckysheet.chart_selection.rangeMoveIndex[0] - - luckysheet.chart_selection.rangeMovexy[0] + - row_index - - if (rangeRowCheck.exits) { - if (row_s < st_r + rangeRowCheck.range[1] + 1 || y < 0) { - row_s = st_r + rangeRowCheck.range[1] + 1 - } - } else { - if (row_s < 0 || y < 0) { - row_s = 0 - } - } - - var row_e = - rangeSplitArray.content.row[1] - rangeSplitArray.content.row[0] + row_s - - if (row_e >= visibledatarow.length - 1 || y > winH) { - row_s = - visibledatarow.length - - 1 - - rangeSplitArray.content.row[1] + - rangeSplitArray.content.row[0] - row_e = visibledatarow.length - 1 - } - - //列 - var col_s = - luckysheet.chart_selection.rangeMoveIndex[1] - - luckysheet.chart_selection.rangeMovexy[1] + - col_index - if (rangeColCheck.exits) { - if (col_s < st_c + rangeColCheck.range[1] + 1 || x < 0) { - col_s = st_c + rangeColCheck.range[1] + 1 - } - } else { - if (col_s < 0 || x < 0) { - col_s = 0 - } - } - - var col_e = - rangeSplitArray.content.column[1] - - rangeSplitArray.content.column[0] + - col_s - - if (col_e >= visibledatacolumn.length - 1 || x > winW) { - col_s = - visibledatacolumn.length - - 1 - - rangeSplitArray.content.column[1] + - rangeSplitArray.content.column[0] - col_e = visibledatacolumn.length - 1 - } - - //更新 - if (rangeRowCheck.exits && rangeColCheck.exits) { - chart_json.rangeArray = [{ row: [st_r, row_e], column: [st_c, col_e] }] - chart_json.rangeSplitArray.range = { - row: [st_r, row_e], - column: [st_c, col_e] - } - - chart_json.rangeSplitArray.content = { - row: [row_s - st_r, row_e - st_r], - column: [col_s - st_c, col_e - st_c] - } - - chart_json.rangeSplitArray.rowtitle = { - row: chart_json.rangeSplitArray.rowtitle.row, - column: [col_s - st_c, col_e - st_c] - } - - chart_json.rangeSplitArray.coltitle = { - row: [row_s - st_r, row_e - st_r], - column: chart_json.rangeSplitArray.coltitle.column - } - } else if (rangeRowCheck.exits) { - chart_json.rangeArray = [{ row: [st_r, row_e], column: [col_s, col_e] }] - chart_json.rangeSplitArray.range = { - row: [st_r, row_e], - column: [col_s, col_e] - } - - chart_json.rangeSplitArray.content = { - row: [row_s - st_r, row_e - st_r], - column: chart_json.rangeSplitArray.content.column - } - } else if (rangeColCheck.exits) { - chart_json.rangeArray = [{ row: [row_s, row_e], column: [st_c, col_e] }] - chart_json.rangeSplitArray.range = { - row: [row_s, row_e], - column: [st_c, col_e] - } - - chart_json.rangeSplitArray.content = { - row: chart_json.rangeSplitArray.content.row, - column: [col_s - st_c, col_e - st_c] - } - } else { - chart_json.rangeArray = [ - { row: [row_s, row_e], column: [col_s, col_e] } - ] - chart_json.rangeSplitArray.range = { - row: [row_s, row_e], - column: [col_s, col_e] - } - } - } else if ($id == 'luckysheet-chart-rangeShow-rowtitle') { - //列 - var col_s = - luckysheet.chart_selection.rangeMoveIndex[1] - - luckysheet.chart_selection.rangeMovexy[1] + - col_index - - if (rangeColCheck.exits) { - if (col_s < st_c + rangeColCheck.range[1] + 1 || x < 0) { - col_s = st_c + rangeColCheck.range[1] + 1 - } - } else { - if (col_s < 0 || x < 0) { - col_s = 0 - } - } - - var col_e = - rangeSplitArray.rowtitle.column[1] - - rangeSplitArray.rowtitle.column[0] + - col_s - - if (col_e >= visibledatacolumn.length - 1 || x > winW) { - col_s = - visibledatacolumn.length - - 1 - - rangeSplitArray.rowtitle.column[1] + - rangeSplitArray.rowtitle.column[0] - col_e = visibledatacolumn.length - 1 - } - - //更新 - if (rangeColCheck.exits) { - chart_json.rangeArray = [ - { row: chart_json.rangeArray[0].row, column: [st_c, col_e] } - ] - chart_json.rangeSplitArray.range = { - row: chart_json.rangeArray[0].row, - column: [st_c, col_e] - } - - chart_json.rangeSplitArray.rowtitle = { - row: chart_json.rangeSplitArray.rowtitle.row, - column: [col_s - st_c, col_e - st_c] - } - chart_json.rangeSplitArray.content = { - row: chart_json.rangeSplitArray.content.row, - column: [col_s - st_c, col_e - st_c] - } - } else { - chart_json.rangeArray = [ - { row: chart_json.rangeArray[0].row, column: [col_s, col_e] } - ] - chart_json.rangeSplitArray.range = { - row: chart_json.rangeArray[0].row, - column: [col_s, col_e] - } - } - } else if ($id == 'luckysheet-chart-rangeShow-coltitle') { - //行 - var row_s = - luckysheet.chart_selection.rangeMoveIndex[0] - - luckysheet.chart_selection.rangeMovexy[0] + - row_index - if (rangeRowCheck.exits) { - if (row_s < st_r + rangeRowCheck.range[1] + 1 || y < 0) { - row_s = st_r + rangeRowCheck.range[1] + 1 - } - } else { - if (row_s < 0 || y < 0) { - row_s = 0 - } - } - - //更新 - var row_e = - rangeSplitArray.coltitle.row[1] - - rangeSplitArray.coltitle.row[0] + - row_s - - if (row_e >= visibledatarow.length - 1 || y > winH) { - row_s = - visibledatarow.length - - 1 - - rangeSplitArray.coltitle.row[1] + - rangeSplitArray.coltitle.row[0] - row_e = visibledatarow.length - 1 - } - - if (rangeRowCheck.exits) { - chart_json.rangeArray = [ - { row: [st_r, row_e], column: chart_json.rangeArray[0].column } - ] - chart_json.rangeSplitArray.range = { - row: [st_r, row_e], - column: chart_json.rangeArray[0].column - } - - chart_json.rangeSplitArray.coltitle = { - row: [row_s - st_r, row_e - st_r], - column: chart_json.rangeSplitArray.coltitle.column - } - chart_json.rangeSplitArray.content = { - row: [row_s - st_r, row_e - st_r], - column: chart_json.rangeSplitArray.content.column - } - } else { - chart_json.rangeArray = [ - { row: [row_s, row_e], column: chart_json.rangeArray[0].column } - ] - chart_json.rangeSplitArray.range = { - row: [row_s, row_e], - column: chart_json.rangeArray[0].column - } - } - } - - //部分更新 - store.commit({ - type: 'updateChartItem', - key: 'rangeArray', - value: chart_json.rangeArray, - chartId: chart_json.chart_id - }) - store.commit({ - type: 'updateChartItem', - key: 'rangeSplitArray', - value: chart_json.rangeSplitArray, - chartId: chart_json.chart_id - }) - luckysheet.chart_selection.create(store.state.chartSetting.chartCurrent) - }, - rangeMoveDragged: function () { - luckysheet.chart_selection.rangeMove = false - - var chart_json = $.extend( - true, - {}, - store.state.chartSetting.chartList[store.state.chartSetting.chartCurrent] - ) - - var updateJson = {} - updateJson.chart_id = store.state.chartSetting.chartCurrent - updateJson.rangeTxt = luckysheet.sheetmanage.getRangetxt( - luckysheet.currentSheetIndex, - chart_json.rangeArray[0], - luckysheet.currentSheetIndex - ) - updateJson.chartData = luckysheet.getdatabyselection( - chart_json.rangeArray[0], - luckysheet.currentSheetIndex - ) - - var $id = luckysheet.chart_selection.rangeMoveObj.attr('id') - if ( - $id == 'luckysheet-chart-rangeShow-content' && - !chart_json.rangeRowCheck.exits && - !chart_json.rangeColCheck.exits - ) { - //rangeMoveDraging中未更新chartData,在此使用新的chartData更新到updateJson - updateJson.rangeSplitArray = generator.getRangeSplitArray( - updateJson.chartData, - chart_json.rangeArray, - chart_json.rangeColCheck, - chart_json.rangeRowCheck - ) - } else { - updateJson.rangeSplitArray = chart_json.rangeSplitArray - } - - var chartAllTypeArray = chart_json.chartAllType.split('|') - var chartPro = chartAllTypeArray[0], - chartType = chartAllTypeArray[1], - chartStyle = chartAllTypeArray[2] - - updateJson.chartDataCache = generator.getChartDataCache( - updateJson.chartData, - updateJson.rangeSplitArray, - chartPro, - chartType, - chartStyle - ) - updateJson.chartDataSeriesOrder = generator.getChartDataSeriesOrder( - updateJson.chartDataCache.series[0].length - ) - // 是否是移动改变图形 - generator.drag = true - // 不增加点/线/区域 - generator.addPoint = false - generator.addLine = false - generator.addArea = false - if (chartType == 'funnel' || chartType == 'gauge') { - updateJson.defaultOption = generator.addDataToOption1( - chart_json.defaultOption, - updateJson.chartDataCache, - updateJson.chartDataSeriesOrder, - chartPro, - chartType, - chartStyle - ) - } else { - updateJson.defaultOption = generator.addDataToOption( - chart_json.defaultOption, - updateJson.chartDataCache, - updateJson.chartDataSeriesOrder, - chartPro, - chartType, - chartStyle - ) - } - - // console.dir(JSON.stringify(updateJson.defaultOption)) - generator.patchVueSet(updateJson) - generator.generateChart( - updateJson.defaultOption, - chart_json.chartTheme, - chart_json.chartAllType, - $('#' + updateJson.chart_id).get(0) - ) - }, - rangeResize: false, - rangeResizexy: null, - rangeResizeIndex: null, - rangeResizeObj: null, - rangeResizeDraging: function (event, sheetBarHeight, statisticBarHeight) { - var chart_json = $.extend( - true, - {}, - store.state.chartSetting.chartList[store.state.chartSetting.chartCurrent] - ) - var st_r = chart_json.rangeArray[0].row[0] - var st_c = chart_json.rangeArray[0].column[0] - var rangeRowCheck = chart_json.rangeRowCheck - var rangeColCheck = chart_json.rangeColCheck - var rangeSplitArray = chart_json.rangeSplitArray - - var mouse = luckysheet.mouseposition(event.pageX, event.pageY) - var scrollLeft = $('#luckysheet-cell-main').scrollLeft() - var scrollTop = $('#luckysheet-cell-main').scrollTop() - - var x = mouse[0] + scrollLeft - var y = mouse[1] + scrollTop - - var winH = - $(window).height() + scrollTop - sheetBarHeight - statisticBarHeight, - winW = $(window).width() + scrollLeft - - var rowLocation = luckysheet.rowLocation(y), - row_index = rowLocation[2] - var colLocation = luckysheet.colLocation(x), - col_index = colLocation[2] - - var visibledatarow = luckysheet.getvisibledatarow() - var visibledatacolumn = luckysheet.getvisibledatacolumn() - - var $id = luckysheet.chart_selection.rangeResizeObj.attr('id') - - if ($id == 'luckysheet-chart-rangeShow-content') { - var r1, r2, c1, c2 - - if (luckysheet.chart_selection.rangeResize == 'lt') { - r1 = luckysheet.chart_selection.rangeResizeIndex.row[0] - c1 = luckysheet.chart_selection.rangeResizeIndex.column[0] - - r2 = luckysheet.chart_selection.rangeResizeIndex.row[1] - c2 = luckysheet.chart_selection.rangeResizeIndex.column[1] - } else if (luckysheet.chart_selection.rangeResize == 'lb') { - r1 = luckysheet.chart_selection.rangeResizeIndex.row[1] - c1 = luckysheet.chart_selection.rangeResizeIndex.column[0] - - r2 = luckysheet.chart_selection.rangeResizeIndex.row[0] - c2 = luckysheet.chart_selection.rangeResizeIndex.column[1] - } else if (luckysheet.chart_selection.rangeResize == 'rt') { - r1 = luckysheet.chart_selection.rangeResizeIndex.row[0] - c1 = luckysheet.chart_selection.rangeResizeIndex.column[1] - - r2 = luckysheet.chart_selection.rangeResizeIndex.row[1] - c2 = luckysheet.chart_selection.rangeResizeIndex.column[0] - } else if (luckysheet.chart_selection.rangeResize == 'rb') { - r1 = luckysheet.chart_selection.rangeResizeIndex.row[1] - c1 = luckysheet.chart_selection.rangeResizeIndex.column[1] - - r2 = luckysheet.chart_selection.rangeResizeIndex.row[0] - c2 = luckysheet.chart_selection.rangeResizeIndex.column[0] - } - - //行 - if (rangeRowCheck.exits) { - var row_s = r1 - luckysheet.chart_selection.rangeResizexy[0] + row_index - - if (row_s < st_r + rangeRowCheck.range[1] + 1 || y < 0) { - row_s = st_r + rangeRowCheck.range[1] + 1 - } else if (row_s >= visibledatarow.length - 1 || y > winH) { - row_s = visibledatarow.length - 1 - } - } else { - var row_s = st_r - luckysheet.chart_selection.rangeResizexy[0] + row_index - - if (row_s < 0 || y < 0) { - row_s = 0 - } else if (row_s >= visibledatarow.length - 1 || y > winH) { - row_s = visibledatarow.length - 1 - } - } - - //列 - if (rangeColCheck.exits) { - var col_s = c1 - luckysheet.chart_selection.rangeResizexy[1] + col_index - - if (col_s < st_c + rangeColCheck.range[1] + 1 || x < 0) { - col_s = st_c + rangeColCheck.range[1] + 1 - } else if (col_s >= visibledatacolumn.length - 1 || x > winW) { - col_s = visibledatacolumn.length - 1 - } - } else { - var col_s = st_c - luckysheet.chart_selection.rangeResizexy[1] + col_index - - if (col_s < 0 || x < 0) { - col_s = 0 - } else if (col_s >= visibledatacolumn.length - 1 || x > winW) { - col_s = visibledatacolumn.length - 1 - } - } - - var obj_r1, obj_r2, obj_c1, obj_c2 - - if (row_s > r2) { - obj_r1 = r2 - obj_r2 = row_s - } else { - obj_r1 = row_s - obj_r2 = r2 - } - - if (col_s > c2) { - obj_c1 = c2 - obj_c2 = col_s - } else { - obj_c1 = col_s - obj_c2 = c2 - } - - if (!rangeRowCheck.exits && !rangeColCheck.exits) { - chart_json.rangeArray = [ - { row: [obj_r1, obj_r2], column: [obj_c1, obj_c2] } - ] - chart_json.rangeSplitArray.range = { - row: [obj_r1, obj_r2], - column: [obj_c1, obj_c2] - } - } else { - chart_json.rangeArray = [ - { row: [st_r, obj_r2], column: [st_c, obj_c2] } - ] - chart_json.rangeSplitArray.range = { - row: [st_r, obj_r2], - column: [st_c, obj_c2] - } - - chart_json.rangeSplitArray.content = { - row: [obj_r1 - st_r, obj_r2 - st_r], - column: [obj_c1 - st_c, obj_c2 - st_c] - } - - if (rangeRowCheck.exits) { - chart_json.rangeSplitArray.rowtitle = { - row: chart_json.rangeSplitArray.rowtitle.row, - column: [obj_c1 - st_c, obj_c2 - st_c] - } - } - - if (rangeColCheck.exits) { - chart_json.rangeSplitArray.coltitle = { - row: [obj_r1 - st_r, obj_r2 - st_r], - column: chart_json.rangeSplitArray.coltitle.column - } - } - } - } else if ($id == 'luckysheet-chart-rangeShow-rowtitle') { - var c1, c2 - - if ( - luckysheet.chart_selection.rangeResize == 'lt' || - luckysheet.chart_selection.rangeResize == 'lb' - ) { - c1 = luckysheet.chart_selection.rangeResizeIndex.column[0] - c2 = luckysheet.chart_selection.rangeResizeIndex.column[1] - } else if ( - luckysheet.chart_selection.rangeResize == 'rt' || - luckysheet.chart_selection.rangeResize == 'rb' - ) { - c1 = luckysheet.chart_selection.rangeResizeIndex.column[1] - c2 = luckysheet.chart_selection.rangeResizeIndex.column[0] - } - - //列 - if (rangeColCheck.exits) { - var col_s = c1 - luckysheet.chart_selection.rangeResizexy[1] + col_index - - if (col_s < st_c + rangeColCheck.range[1] + 1 || x < 0) { - col_s = st_c + rangeColCheck.range[1] + 1 - } else if (col_s >= visibledatacolumn.length - 1 || x > winW) { - col_s = visibledatacolumn.length - 1 - } - } else { - var col_s = st_c - luckysheet.chart_selection.rangeResizexy[1] + col_index - - if (col_s < 0 || x < 0) { - col_s = 0 - } else if (col_s >= visibledatacolumn.length - 1 || x > winW) { - col_s = visibledatacolumn.length - 1 - } - } - - var obj_c1, obj_c2 - - if (col_s > c2) { - obj_c1 = c2 - obj_c2 = col_s - } else { - obj_c1 = col_s - obj_c2 = c2 - } - - //更新 - if (!rangeColCheck.exits) { - chart_json.rangeArray = [ - { row: chart_json.rangeArray[0].row, column: [obj_c1, obj_c2] } - ] - chart_json.rangeSplitArray.range = { - row: chart_json.rangeArray[0].row, - column: [obj_c1, obj_c2] - } - } else { - chart_json.rangeArray = [ - { row: chart_json.rangeArray[0].row, column: [st_c, obj_c2] } - ] - chart_json.rangeSplitArray.range = { - row: chart_json.rangeArray[0].row, - column: [st_c, obj_c2] - } - - chart_json.rangeSplitArray.rowtitle = { - row: chart_json.rangeSplitArray.rowtitle.row, - column: [obj_c1 - st_c, obj_c2 - st_c] - } - chart_json.rangeSplitArray.content = { - row: chart_json.rangeSplitArray.content.row, - column: [obj_c1 - st_c, obj_c2 - st_c] - } - } - } else if ($id == 'luckysheet-chart-rangeShow-coltitle') { - var r1, r2 - - if ( - luckysheet.chart_selection.rangeResize == 'lt' || - luckysheet.chart_selection.rangeResize == 'rt' - ) { - r1 = luckysheet.chart_selection.rangeResizeIndex.row[0] - r2 = luckysheet.chart_selection.rangeResizeIndex.row[1] - } else if ( - luckysheet.chart_selection.rangeResize == 'lb' || - luckysheet.chart_selection.rangeResize == 'rb' - ) { - r1 = luckysheet.chart_selection.rangeResizeIndex.row[1] - r2 = luckysheet.chart_selection.rangeResizeIndex.row[0] - } - - //行 - if (rangeRowCheck.exits) { - var row_s = r1 - luckysheet.chart_selection.rangeResizexy[0] + row_index - - if (row_s < st_r + rangeRowCheck.range[1] + 1 || y < 0) { - row_s = st_r + rangeRowCheck.range[1] + 1 - } else if (row_s >= visibledatarow.length - 1 || y > winH) { - row_s = visibledatarow.length - 1 - } - } else { - var row_s = st_r - luckysheet.chart_selection.rangeResizexy[0] + row_index - - if (row_s < 0 || y < 0) { - row_s = 0 - } else if (row_s >= visibledatarow.length - 1 || y > winH) { - row_s = visibledatarow.length - 1 - } - } - - var obj_r1, obj_r2 - - if (row_s > r2) { - obj_r1 = r2 - obj_r2 = row_s - } else { - obj_r1 = row_s - obj_r2 = r2 - } - - //更新 - if (!rangeRowCheck.exits) { - chart_json.rangeArray = [ - { row: [obj_r1, obj_r2], column: chart_json.rangeArray[0].column } - ] - chart_json.rangeSplitArray.range = { - row: [obj_r1, obj_r2], - column: chart_json.rangeArray[0].column - } - } else { - chart_json.rangeArray = [ - { row: [st_r, obj_r2], column: chart_json.rangeArray[0].column } - ] - chart_json.rangeSplitArray.range = { - row: [st_r, obj_r2], - column: chart_json.rangeArray[0].column - } - - chart_json.rangeSplitArray.coltitle = { - row: [obj_r1 - st_r, obj_r2 - st_r], - column: chart_json.rangeSplitArray.coltitle.column - } - chart_json.rangeSplitArray.content = { - row: [obj_r1 - st_r, obj_r2 - st_r], - column: chart_json.rangeSplitArray.content.column - } - } - } - - //部分更新 - store.commit({ - type: 'updateChartItem', - key: 'rangeArray', - value: chart_json.rangeArray, - chartId: chart_json.chart_id - }) - store.commit({ - type: 'updateChartItem', - key: 'rangeSplitArray', - value: chart_json.rangeSplitArray, - chartId: chart_json.chart_id - }) - luckysheet.chart_selection.create(store.state.chartSetting.chartCurrent) - }, - rangeResizeDragged: function () { - luckysheet.chart_selection.rangeResize = null - - var chart_json = $.extend( - true, - {}, - store.state.chartSetting.chartList[store.state.chartSetting.chartCurrent] - ) - - var updateJson = {} - - updateJson.chart_id = store.state.chartSetting.chartCurrent - updateJson.rangeTxt = luckysheet.sheetmanage.getRangetxt( - luckysheet.currentSheetIndex, - chart_json.rangeArray[0], - luckysheet.currentSheetIndex - ) - updateJson.chartData = luckysheet.getdatabyselection( - chart_json.rangeArray[0], - luckysheet.currentSheetIndex - ) - - var $id = luckysheet.chart_selection.rangeResizeObj.attr('id') - if ( - $id == 'luckysheet-chart-rangeShow-content' && - !chart_json.rangeRowCheck.exits && - !chart_json.rangeColCheck.exits - ) { - //采用updateJson.chartData - updateJson.rangeSplitArray = generator.getRangeSplitArray( - updateJson.chartData, - chart_json.rangeArray, - chart_json.rangeColCheck, - chart_json.rangeRowCheck - ) - } else { - updateJson.rangeSplitArray = chart_json.rangeSplitArray - } - - var chartAllTypeArray = chart_json.chartAllType.split('|') - var chartPro = chartAllTypeArray[0], - chartType = chartAllTypeArray[1], - chartStyle = chartAllTypeArray[2] - - updateJson.chartDataCache = generator.getChartDataCache( - updateJson.chartData, - updateJson.rangeSplitArray, - chartPro, - chartType, - chartStyle - ) - updateJson.chartDataSeriesOrder = generator.getChartDataSeriesOrder( - updateJson.chartDataCache.series[0].length - ) - if (chartType == 'funnel' || chartType == 'gauge') { - updateJson.defaultOption = generator.addDataToOption1( - chart_json.defaultOption, - updateJson.chartDataCache, - updateJson.chartDataSeriesOrder, - chartPro, - chartType, - chartStyle - ) - } else { - updateJson.defaultOption = generator.addDataToOption( - chart_json.defaultOption, - updateJson.chartDataCache, - updateJson.chartDataSeriesOrder, - chartPro, - chartType, - chartStyle - ) - } - - generator.patchVueSet(updateJson) - - generator.generateChart( - updateJson.defaultOption, - chart_json.chartTheme, - chart_json.chartAllType, - $('#' + updateJson.chart_id).get(0) - ) - } -} - -export default luckysheet \ No newline at end of file