diff --git a/README-zh.md b/README-zh.md index 4803cc8..02f4c65 100644 --- a/README-zh.md +++ b/README-zh.md @@ -91,12 +91,12 @@ + **截图** (把选区的内容进行截图展示) + **复制到其他格式** (右键菜单的"复制为", 支持复制为json、array、对角线数据、去重等) + **EXCEL,CSV,TXT 导入及导出** (专为Luckysheet打造的导入导出插件,支持密码、水印、公式等的本地导入导出) ++ **插入图片和svg形状** (支持JPG,PNG,SVG,Pen tool的插入、修改和删除,并且随表格的变动而产生变化) ++ **数据验证(表单功能)** (支持Checkbox, drop-down list, datePicker) ++ **单元格内多样式** (Alt+Enter单元格内换行、上标、下标、单元格内科定义每个文字的不同样式) ### ⏱️未来开发计划 -+ **插入图表和svg形状** (支持JPG,PNG,SVG,Pen tool的插入、修改和删除,并且随表格的变动而产生变化) -+ **数据验证(表单功能)** (支持Checkbox, drop-down list, datePicker) + **打印及设置** (像excel一样进行打印设置,并导出为图片或者PDF) -+ **单元格内多样式** (Alt+Enter单元格内换行、上标、下标、单元格内科定义每个文字的不同样式) + **树形菜单** (类似excel中的分级显示(分组)) + **表格新功能** (类似excel中表格的筛选器和切片器) + **文档** (完善文档和API) diff --git a/README.md b/README.md index fb19666..3be4bae 100644 --- a/README.md +++ b/README.md @@ -97,12 +97,12 @@ English| [简体中文](./README-zh.md) + **Screenshot** (Take a screenshot with selection) + **Copy to** (In the right-click menu, copy selection to json, array etc.) + **EXCEL,CSV,TXT import/export** (Specially adapted to Luckysheet) - -### ⏱️Coming soon + **Insert picture and Shapes** (JPG,PNG,SVG,Pen tool and so on) + **Data validation** (Checkbox, drop-down list, datePicker) -+ **Print** (Like excel print option, save to PDF) + **Cell segmentation style** (Alt+Enter line break, sub,super, in-cell style) + +### ⏱️Coming soon ++ **Print** (Like excel print option, save to PDF) + **Tree menu** (Just like the outline (group) function of excel) + **Table new Features** (filter, slicer) + **Documentation** (Improve documentation and API) diff --git a/docs/guide/README.md b/docs/guide/README.md index 054acd4..d44261f 100644 --- a/docs/guide/README.md +++ b/docs/guide/README.md @@ -77,15 +77,15 @@ Luckysheet is an online spreadsheet like excel that is powerful, simple to confi + **Matrix operation** (Operate selection through the right-click menu: transpose, rotate, numerical calculation) + **Screenshot** (Take a screenshot with selection) + **Copy to** (In the right-click menu, copy selection to json, array etc.) - -### Coming soon ++ **EXCEL,CSV,TXT import/export** (Specially adapted to luckysheet) + **Insert picture and Shapes** (JPG,PNG,SVG,Pen tool and so on) + **Data validation** (Checkbox, drop-down list, datePicker) -+ **Print** (Like excel print option, save to PDF) + **Cell segmentation style** (Alt+Enter line break, sub,super, in-cell style) + +### Coming soon ++ **Print** (Like excel print option, save to PDF) + **Tree menu** (Just like the outline (group) function of excel) + **Table new Features** (filter, slicer) -+ **EXCEL,CSV,TXT import/export** (Specially adapted to luckysheet) + **Documentation** (Improve documentation and API) + **More...** (Please advise us) diff --git a/docs/guide/config.md b/docs/guide/config.md index 0fa6c7b..e50abcc 100644 --- a/docs/guide/config.md +++ b/docs/guide/config.md @@ -71,6 +71,12 @@ - Default: true - Usage: Whether to allow copying +------------ +## showGridLines +- Type: Number +- Default: 1 +- Usage: Whether to show grid lines, `1` means show,`0` means hide + ------------ ## showtoolbar - Type: Boolean diff --git a/docs/zh/guide/README.md b/docs/zh/guide/README.md index 93bd0e2..315eca3 100644 --- a/docs/zh/guide/README.md +++ b/docs/zh/guide/README.md @@ -77,15 +77,15 @@ Luckysheet ,一款纯前端类似excel的在线表格,功能强大、配置 + **矩阵计算** (通过右键菜单进行支持:对选区内的数据进行转置、旋转、数值计算) + **截图** (把选区的内容进行截图展示) + **复制到其他格式** (右键菜单的"复制为", 支持复制为json、array、对角线数据、去重等) ++ **EXCEL,CSV,TXT 导入及导出** (专为luckysheet打造的导入导出插件,支持密码、水印、公式等的本地导入导出) ++ **插入图片和svg形状** (支持JPG,PNG,SVG,Pen tool的插入、修改和删除,并且随表格的变动而产生变化) ++ **数据验证(表单功能)** (支持Checkbox, drop-down list, datePicker) ++ **单元格内多样式** (Alt+Enter单元格内换行、上标、下标、单元格内科定义每个文字的不同样式) ### 未来开发计划 -+ **插入图表和svg形状** (支持JPG,PNG,SVG,Pen tool的插入、修改和删除,并且随表格的变动而产生变化) -+ **数据验证(表单功能)** (支持Checkbox, drop-down list, datePicker) + **打印及设置** (像excel一样进行打印设置,并导出为图片或者PDF) -+ **单元格内多样式** (Alt+Enter单元格内换行、上标、下标、单元格内科定义每个文字的不同样式) + **树形菜单** (类似excel中的分级显示(分组)) + **表格新功能** (类似excel中表格的筛选器和切片器) -+ **EXCEL,CSV,TXT 导入及导出** (专为luckysheet打造的导入导出插件,支持密码、水印、公式等的本地导入导出) + **文档** (完善文档和API) + **敬请期待...** (可以提出好的建议给我们) diff --git a/docs/zh/guide/api.md b/docs/zh/guide/api.md index f667f9d..a0ad62e 100644 --- a/docs/zh/guide/api.md +++ b/docs/zh/guide/api.md @@ -1683,12 +1683,11 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开 [todo] - - **说明**: - - 返回所有工作表配置,格式同[工作表配置](/zh/guide/sheet.html),得到的结果可用于表格初始化时作为`options.data`使用。 - 所以此API适用于,手动操作配置完一个表格后,将所有工作表信息取出来自行保存,再用于其他地方的表格创建。 + 返回所有工作表配置,格式同工作表配置,得到的结果可用于表格初始化时作为options.data使用。 + + 所以此API适用于,手动操作配置完一个表格后,将所有工作表信息取出来自行保存,再用于其他地方的表格创建。如果想得到包括工作簿配置在内的所有工作簿数据,可以使用 [toJson](#toJson()) - **示例**: @@ -1701,7 +1700,6 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开 [todo] - - **参数**: - {PlainObject} [setting]: 可选参数 @@ -1718,6 +1716,23 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开 ------------ +### getSheet([setting]) + +[todo] + +- **参数**: + + - {PlainObject} [setting]: 可选参数 + + {Number} [index]: 工作表索引;默认值为当前工作表索引 + + {Number} [order]: 工作表顺序;默认值为当前工作表顺序 + + {Number} [name]: 工作表名称;默认值为当前工作表名称 + +- **说明**: + + 根据index/order/name,快捷返回指定工作表的配置,同 `luckysheetfile[i]`。如果设置多个参数,优先级为:index > order > name。 + +------------ + ### getSheetData([setting]) [todo] diff --git a/docs/zh/guide/config.md b/docs/zh/guide/config.md index 0b0e1be..2d7fbb8 100644 --- a/docs/zh/guide/config.md +++ b/docs/zh/guide/config.md @@ -53,6 +53,7 @@ Luckysheet开放了更细致的自定义配置选项,分别有 - 亿万格式 [autoFormatw](#autoFormatw) - 精度 [accuracy](#accuracy) - 允许复制 [allowCopy](#allowCopy) +- 网格线 [showGridLines](#showGridLines) - 工具栏 [showtoolbar](#showtoolbar) - 自定义工具栏[showtoolbarConfig](#showtoolbarConfig) - 名称栏 [showinfobar](#showinfobar) @@ -171,6 +172,12 @@ Luckysheet开放了更细致的自定义配置选项,分别有 - 默认值:true - 作用:是否允许拷贝 +------------ +### showGridLines +- 类型:Number +- 默认值:1 +- 作用:是否显示网格线,`1`表示显示,`0`表示隐藏 + ------------ ### showtoolbar - 类型:Boolean diff --git a/gulpfile.js b/gulpfile.js index 2ac9305..ae08e0e 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -52,6 +52,7 @@ const paths = { // static resources,contains index.html, fonts and images,and extension plugins dependency staticHtml: ['src/*.html'], staticFonts: ['src/fonts/**'], + staticAssets: ['src/assets/**'], staticImages: ['src/plugins/images/*.png'], staticExpendPlugins: ['src/expendPlugins/**', '!src/expendPlugins/**/plugin.js'], staticDemoData: ['src/demoData/*.js'], @@ -60,6 +61,7 @@ const paths = { // static resources dest destStaticHtml: ['dist'], destStaticFonts: ['dist/fonts'], + destStaticAssets: ['dist/assets'], destStaticImages: ['dist/plugins/images'], destStaticExpendPlugins: ['dist/expendPlugins'], destStaticDemoData: ['dist/demoData'], @@ -133,6 +135,7 @@ function watcher(done) { // watch static watch(paths.staticHtml,{ delay: 500 }, series(copyStaticHtml, reloadBrowser)); watch(paths.staticFonts,{ delay: 500 }, series(copyStaticFonts, reloadBrowser)); + watch(paths.staticAssets,{ delay: 500 }, series(copyStaticAssets, 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)); @@ -222,6 +225,10 @@ function copyStaticFonts(){ return src(paths.staticFonts) .pipe(dest(paths.destStaticFonts)); } +function copyStaticAssets(){ + return src(paths.staticAssets) + .pipe(dest(paths.destStaticAssets)); +} function copyStaticImages(){ return src(paths.staticImages) .pipe(dest(paths.destStaticImages)); @@ -239,8 +246,8 @@ function copyStaticCssImages(){ .pipe(dest(paths.destStaticCssImages)); } -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)); +const dev = series(clean, parallel(pluginsCss, plugins, css, pluginsJs, copyStaticHtml, copyStaticFonts, copyStaticAssets, copyStaticImages, copyStaticExpendPlugins, copyStaticDemoData, copyStaticCssImages, core), watcher, serve); +const build = series(clean, parallel(pluginsCss, plugins, css, pluginsJs, copyStaticHtml, copyStaticFonts, copyStaticAssets, copyStaticImages, copyStaticExpendPlugins, copyStaticDemoData, copyStaticCssImages, core)); exports.dev = dev; exports.build = build; diff --git a/src/assets/iconfont/demo.css b/src/assets/iconfont/demo.css new file mode 100644 index 0000000..a67054a --- /dev/null +++ b/src/assets/iconfont/demo.css @@ -0,0 +1,539 @@ +/* Logo 字体 */ +@font-face { + font-family: "iconfont logo"; + src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834'); + src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'), + url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'), + url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'), + url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg'); +} + +.logo { + font-family: "iconfont logo"; + font-size: 160px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +/* tabs */ +.nav-tabs { + position: relative; +} + +.nav-tabs .nav-more { + position: absolute; + right: 0; + bottom: 0; + height: 42px; + line-height: 42px; + color: #666; +} + +#tabs { + border-bottom: 1px solid #eee; +} + +#tabs li { + cursor: pointer; + width: 100px; + height: 40px; + line-height: 40px; + text-align: center; + font-size: 16px; + border-bottom: 2px solid transparent; + position: relative; + z-index: 1; + margin-bottom: -1px; + color: #666; +} + + +#tabs .active { + border-bottom-color: #f00; + color: #222; +} + +.tab-container .content { + display: none; +} + +/* 页面布局 */ +.main { + padding: 30px 100px; + width: 960px; + margin: 0 auto; +} + +.main .logo { + color: #333; + text-align: left; + margin-bottom: 30px; + line-height: 1; + height: 110px; + margin-top: -50px; + overflow: hidden; + *zoom: 1; +} + +.main .logo a { + font-size: 160px; + color: #333; +} + +.helps { + margin-top: 40px; +} + +.helps pre { + padding: 20px; + margin: 10px 0; + border: solid 1px #e7e1cd; + background-color: #fffdef; + overflow: auto; +} + +.icon_lists { + width: 100% !important; + overflow: hidden; + *zoom: 1; +} + +.icon_lists li { + width: 100px; + margin-bottom: 10px; + margin-right: 20px; + text-align: center; + list-style: none !important; + cursor: default; +} + +.icon_lists li .code-name { + line-height: 1.2; +} + +.icon_lists .icon { + display: block; + height: 100px; + line-height: 100px; + font-size: 42px; + margin: 10px auto; + color: #333; + -webkit-transition: font-size 0.25s linear, width 0.25s linear; + -moz-transition: font-size 0.25s linear, width 0.25s linear; + transition: font-size 0.25s linear, width 0.25s linear; +} + +.icon_lists .icon:hover { + font-size: 100px; +} + +.icon_lists .svg-icon { + /* 通过设置 font-size 来改变图标大小 */ + width: 1em; + /* 图标和文字相邻时,垂直对齐 */ + vertical-align: -0.15em; + /* 通过设置 color 来改变 SVG 的颜色/fill */ + fill: currentColor; + /* path 和 stroke 溢出 viewBox 部分在 IE 下会显示 + normalize.css 中也包含这行 */ + overflow: hidden; +} + +.icon_lists li .name, +.icon_lists li .code-name { + color: #666; +} + +/* markdown 样式 */ +.markdown { + color: #666; + font-size: 14px; + line-height: 1.8; +} + +.highlight { + line-height: 1.5; +} + +.markdown img { + vertical-align: middle; + max-width: 100%; +} + +.markdown h1 { + color: #404040; + font-weight: 500; + line-height: 40px; + margin-bottom: 24px; +} + +.markdown h2, +.markdown h3, +.markdown h4, +.markdown h5, +.markdown h6 { + color: #404040; + margin: 1.6em 0 0.6em 0; + font-weight: 500; + clear: both; +} + +.markdown h1 { + font-size: 28px; +} + +.markdown h2 { + font-size: 22px; +} + +.markdown h3 { + font-size: 16px; +} + +.markdown h4 { + font-size: 14px; +} + +.markdown h5 { + font-size: 12px; +} + +.markdown h6 { + font-size: 12px; +} + +.markdown hr { + height: 1px; + border: 0; + background: #e9e9e9; + margin: 16px 0; + clear: both; +} + +.markdown p { + margin: 1em 0; +} + +.markdown>p, +.markdown>blockquote, +.markdown>.highlight, +.markdown>ol, +.markdown>ul { + width: 80%; +} + +.markdown ul>li { + list-style: circle; +} + +.markdown>ul li, +.markdown blockquote ul>li { + margin-left: 20px; + padding-left: 4px; +} + +.markdown>ul li p, +.markdown>ol li p { + margin: 0.6em 0; +} + +.markdown ol>li { + list-style: decimal; +} + +.markdown>ol li, +.markdown blockquote ol>li { + margin-left: 20px; + padding-left: 4px; +} + +.markdown code { + margin: 0 3px; + padding: 0 5px; + background: #eee; + border-radius: 3px; +} + +.markdown strong, +.markdown b { + font-weight: 600; +} + +.markdown>table { + border-collapse: collapse; + border-spacing: 0px; + empty-cells: show; + border: 1px solid #e9e9e9; + width: 95%; + margin-bottom: 24px; +} + +.markdown>table th { + white-space: nowrap; + color: #333; + font-weight: 600; +} + +.markdown>table th, +.markdown>table td { + border: 1px solid #e9e9e9; + padding: 8px 16px; + text-align: left; +} + +.markdown>table th { + background: #F7F7F7; +} + +.markdown blockquote { + font-size: 90%; + color: #999; + border-left: 4px solid #e9e9e9; + padding-left: 0.8em; + margin: 1em 0; +} + +.markdown blockquote p { + margin: 0; +} + +.markdown .anchor { + opacity: 0; + transition: opacity 0.3s ease; + margin-left: 8px; +} + +.markdown .waiting { + color: #ccc; +} + +.markdown h1:hover .anchor, +.markdown h2:hover .anchor, +.markdown h3:hover .anchor, +.markdown h4:hover .anchor, +.markdown h5:hover .anchor, +.markdown h6:hover .anchor { + opacity: 1; + display: inline-block; +} + +.markdown>br, +.markdown>p>br { + clear: both; +} + + +.hljs { + display: block; + background: white; + padding: 0.5em; + color: #333333; + overflow-x: auto; +} + +.hljs-comment, +.hljs-meta { + color: #969896; +} + +.hljs-string, +.hljs-variable, +.hljs-template-variable, +.hljs-strong, +.hljs-emphasis, +.hljs-quote { + color: #df5000; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-type { + color: #a71d5d; +} + +.hljs-literal, +.hljs-symbol, +.hljs-bullet, +.hljs-attribute { + color: #0086b3; +} + +.hljs-section, +.hljs-name { + color: #63a35c; +} + +.hljs-tag { + color: #333333; +} + +.hljs-title, +.hljs-attr, +.hljs-selector-id, +.hljs-selector-class, +.hljs-selector-attr, +.hljs-selector-pseudo { + color: #795da3; +} + +.hljs-addition { + color: #55a532; + background-color: #eaffea; +} + +.hljs-deletion { + color: #bd2c00; + background-color: #ffecec; +} + +.hljs-link { + text-decoration: underline; +} + +/* 代码高亮 */ +/* PrismJS 1.15.0 +https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */ +/** + * prism.js default theme for JavaScript, CSS and HTML + * Based on dabblet (http://dabblet.com) + * @author Lea Verou + */ +code[class*="language-"], +pre[class*="language-"] { + color: black; + background: none; + text-shadow: 0 1px white; + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; +} + +pre[class*="language-"]::-moz-selection, +pre[class*="language-"] ::-moz-selection, +code[class*="language-"]::-moz-selection, +code[class*="language-"] ::-moz-selection { + text-shadow: none; + background: #b3d4fc; +} + +pre[class*="language-"]::selection, +pre[class*="language-"] ::selection, +code[class*="language-"]::selection, +code[class*="language-"] ::selection { + text-shadow: none; + background: #b3d4fc; +} + +@media print { + + code[class*="language-"], + pre[class*="language-"] { + text-shadow: none; + } +} + +/* Code blocks */ +pre[class*="language-"] { + padding: 1em; + margin: .5em 0; + overflow: auto; +} + +:not(pre)>code[class*="language-"], +pre[class*="language-"] { + background: #f5f2f0; +} + +/* Inline code */ +:not(pre)>code[class*="language-"] { + padding: .1em; + border-radius: .3em; + white-space: normal; +} + +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: slategray; +} + +.token.punctuation { + color: #999; +} + +.namespace { + opacity: .7; +} + +.token.property, +.token.tag, +.token.boolean, +.token.number, +.token.constant, +.token.symbol, +.token.deleted { + color: #905; +} + +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + color: #690; +} + +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string { + color: #9a6e3a; + background: hsla(0, 0%, 100%, .5); +} + +.token.atrule, +.token.attr-value, +.token.keyword { + color: #07a; +} + +.token.function, +.token.class-name { + color: #DD4A68; +} + +.token.regex, +.token.important, +.token.variable { + color: #e90; +} + +.token.important, +.token.bold { + font-weight: bold; +} + +.token.italic { + font-style: italic; +} + +.token.entity { + cursor: help; +} diff --git a/src/assets/iconfont/demo_index.html b/src/assets/iconfont/demo_index.html new file mode 100644 index 0000000..eda98e9 --- /dev/null +++ b/src/assets/iconfont/demo_index.html @@ -0,0 +1,2148 @@ + + + + + IconFont Demo + + + + + + + + + + + +
+

+ +
+
+
    + +
  • + +
    logo2
    +
    
    +
  • + +
  • + +
    logo
    +
    
    +
  • + +
  • + +
    文本倾斜
    +
    
    +
  • + +
  • + +
    加粗
    +
    
    +
  • + +
  • + +
    搜索
    +
    
    +
  • + +
  • + +
    关闭
    +
    
    +
  • + +
  • + +
    下一个
    +
    
    +
  • + +
  • + +
    下拉
    +
    
    +
  • + +
  • + +
    文本颜色
    +
    
    +
  • + +
  • + +
    上一个
    +
    
    +
  • + +
  • + +
    数据透视
    +
    
    +
  • + +
  • + +
    填充
    +
    
    +
  • + +
  • + +
    增加小数位
    +
    
    +
  • + +
  • + +
    编辑2
    +
    
    +
  • + +
  • + +
    截屏
    +
    
    +
  • + +
  • + +
    减小小数位
    +
    
    +
  • + +
  • + +
    菜单
    +
    
    +
  • + +
  • + +
    数据库
    +
    
    +
  • + +
  • + +
    无边框
    +
    
    +
  • + +
  • + +
    编辑
    +
    
    +
  • + +
  • + +
    清除样式
    +
    
    +
  • + +
  • + +
    删除
    +
    
    +
  • + +
  • + +
    文本居中对齐
    +
    
    +
  • + +
  • + +
    打印
    +
    
    +
  • + +
  • + +
    文本分割
    +
    
    +
  • + +
  • + +
    函数‘
    +
    
    +
  • + +
  • + +
    降序
    +
    
    +
  • + +
  • + +
    顶部对齐
    +
    
    +
  • + +
  • + +
    图片
    +
    
    +
  • + +
  • + +
    向下90
    +
    
    +
  • + +
  • + +
    竖排文字
    +
    
    +
  • + +
  • + +
    全加边框
    +
    
    +
  • + +
  • + +
    升序
    +
    
    +
  • + +
  • + +
    裁剪
    +
    
    +
  • + +
  • + +
    金额
    +
    
    +
  • + +
  • + +
    菜单1
    +
    
    +
  • + +
  • + +
    取消合并
    +
    
    +
  • + +
  • + +
    文本下划线
    +
    
    +
  • + +
  • + +
    上边框
    +
    
    +
  • + +
  • + +
    定位
    +
    
    +
  • + +
  • + +
    四周加边框
    +
    
    +
  • + +
  • + +
    侧边栏收起
    +
    
    +
  • + +
  • + +
    合并
    +
    
    +
  • + +
  • + +
    向上倾斜
    +
    
    +
  • + +
  • + +
    水平对齐
    +
    
    +
  • + +
  • + +
    文本删除线
    +
    
    +
  • + +
  • + +
    文本右对齐
    +
    
    +
  • + +
  • + +
    前进
    +
    
    +
  • + +
  • + +
    图表
    +
    
    +
  • + +
  • + +
    右边框
    +
    
    +
  • + +
  • + +
    百分号
    +
    
    +
  • + +
  • + +
    格式刷
    +
    
    +
  • + +
  • + +
    保存
    +
    
    +
  • + +
  • + +
    数据验证
    +
    
    +
  • + +
  • + +
    截断
    +
    
    +
  • + +
  • + +
    格式条件
    +
    
    +
  • + +
  • + +
    自动换行
    +
    
    +
  • + +
  • + +
    侧边栏展开
    +
    
    +
  • + +
  • + +
    筛选2
    +
    
    +
  • + +
  • + +
    向下倾斜
    +
    
    +
  • + +
  • + +
    溢出
    +
    
    +
  • + +
  • + +
    垂直合并
    +
    
    +
  • + +
  • + +
    文本分散对齐
    +
    
    +
  • + +
  • + +
    左边框
    +
    
    +
  • + +
  • + +
    分页查看
    +
    
    +
  • + +
  • + +
    运行
    +
    
    +
  • + +
  • + +
    +
    
    +
  • + +
  • + +
    全屏
    +
    
    +
  • + +
  • + +
    筛选
    +
    
    +
  • + +
  • + +
    更新
    +
    
    +
  • + +
  • + +
    清除
    +
    
    +
  • + +
  • + +
    +
    
    +
  • + +
  • + +
    注释
    +
    
    +
  • + +
  • + +
    +
    
    +
  • + +
  • + +
    计算
    +
    
    +
  • + +
  • + +
    +
    
    +
  • + +
  • + +
    底部对齐
    +
    
    +
  • + +
  • + +
    向上90
    +
    
    +
  • + +
  • + +
    无选装
    +
    
    +
  • + +
  • + +
    显示隐藏网格
    +
    
    +
  • + +
  • + +
    冻结
    +
    
    +
  • + +
  • + +
    文本左对齐
    +
    
    +
  • + +
  • + +
    后退
    +
    
    +
  • + +
  • + +
    水平合并
    +
    
    +
  • + +
  • + +
    下边框
    +
    
    +
  • + +
  • + +
    设置
    +
    
    +
  • + +
+
+

Unicode 引用

+
+ +

Unicode 是字体在网页端最原始的应用方式,特点是:

+
    +
  • 兼容性最好,支持 IE6+,及所有现代浏览器。
  • +
  • 支持按字体的方式去动态调整图标大小,颜色等等。
  • +
  • 但是因为是字体,所以不支持多色。只能使用平台里单色的图标,就算项目里有多色图标也会自动去色。
  • +
+
+

注意:新版 iconfont 支持多色图标,这些多色图标在 Unicode 模式下将不能使用,如果有需求建议使用symbol 的引用方式

+
+

Unicode 使用步骤如下:

+

第一步:拷贝项目下面生成的 @font-face

+
@font-face {
+  font-family: 'iconfont';
+  src: url('iconfont.eot');
+  src: url('iconfont.eot?#iefix') format('embedded-opentype'),
+      url('iconfont.woff2') format('woff2'),
+      url('iconfont.woff') format('woff'),
+      url('iconfont.ttf') format('truetype'),
+      url('iconfont.svg#iconfont') format('svg');
+}
+
+

第二步:定义使用 iconfont 的样式

+
.iconfont {
+  font-family: "iconfont" !important;
+  font-size: 16px;
+  font-style: normal;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+

第三步:挑选相应图标并获取字体编码,应用于页面

+
+<span class="iconfont">&#x33;</span>
+
+
+

"iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。

+
+
+
+
+
    + +
  • + +
    + logo2 +
    +
    .icon-logo2 +
    +
  • + +
  • + +
    + logo +
    +
    .icon-logo +
    +
  • + +
  • + +
    + 文本倾斜 +
    +
    .icon-wenbenqingxie1 +
    +
  • + +
  • + +
    + 加粗 +
    +
    .icon-jiacu +
    +
  • + +
  • + +
    + 搜索 +
    +
    .icon-sousuo +
    +
  • + +
  • + +
    + 关闭 +
    +
    .icon-guanbi +
    +
  • + +
  • + +
    + 下一个 +
    +
    .icon-xiayige +
    +
  • + +
  • + +
    + 下拉 +
    +
    .icon-xiala +
    +
  • + +
  • + +
    + 文本颜色 +
    +
    .icon-wenbenyanse +
    +
  • + +
  • + +
    + 上一个 +
    +
    .icon-shangyige +
    +
  • + +
  • + +
    + 数据透视 +
    +
    .icon-shujutoushi +
    +
  • + +
  • + +
    + 填充 +
    +
    .icon-tianchong +
    +
  • + +
  • + +
    + 增加小数位 +
    +
    .icon-zengjiaxiaoshuwei +
    +
  • + +
  • + +
    + 编辑2 +
    +
    .icon-bianji2 +
    +
  • + +
  • + +
    + 截屏 +
    +
    .icon-jieping +
    +
  • + +
  • + +
    + 减小小数位 +
    +
    .icon-jianxiaoxiaoshuwei +
    +
  • + +
  • + +
    + 菜单 +
    +
    .icon-caidan +
    +
  • + +
  • + +
    + 数据库 +
    +
    .icon-shujuku +
    +
  • + +
  • + +
    + 无边框 +
    +
    .icon-wubiankuang +
    +
  • + +
  • + +
    + 编辑 +
    +
    .icon-bianji +
    +
  • + +
  • + +
    + 清除样式 +
    +
    .icon-qingchuyangshi +
    +
  • + +
  • + +
    + 删除 +
    +
    .icon-shanchu +
    +
  • + +
  • + +
    + 文本居中对齐 +
    +
    .icon-wenbenjuzhongduiqi +
    +
  • + +
  • + +
    + 打印 +
    +
    .icon-dayin +
    +
  • + +
  • + +
    + 文本分割 +
    +
    .icon-wenbenfenge +
    +
  • + +
  • + +
    + 函数‘ +
    +
    .icon-hanshu +
    +
  • + +
  • + +
    + 降序 +
    +
    .icon-jiangxu +
    +
  • + +
  • + +
    + 顶部对齐 +
    +
    .icon-dingbuduiqi +
    +
  • + +
  • + +
    + 图片 +
    +
    .icon-tupian +
    +
  • + +
  • + +
    + 向下90 +
    +
    .icon-xiangxia90 +
    +
  • + +
  • + +
    + 竖排文字 +
    +
    .icon-shupaiwenzi +
    +
  • + +
  • + +
    + 全加边框 +
    +
    .icon-quanjiabiankuang +
    +
  • + +
  • + +
    + 升序 +
    +
    .icon-shengxu +
    +
  • + +
  • + +
    + 裁剪 +
    +
    .icon-caijian +
    +
  • + +
  • + +
    + 金额 +
    +
    .icon-jine +
    +
  • + +
  • + +
    + 菜单1 +
    +
    .icon-caidan1 +
    +
  • + +
  • + +
    + 取消合并 +
    +
    .icon-quxiaohebing +
    +
  • + +
  • + +
    + 文本下划线 +
    +
    .icon-wenbenxiahuaxian +
    +
  • + +
  • + +
    + 上边框 +
    +
    .icon-shangbiankuang +
    +
  • + +
  • + +
    + 定位 +
    +
    .icon-dingwei +
    +
  • + +
  • + +
    + 四周加边框 +
    +
    .icon-sizhoujiabiankuang +
    +
  • + +
  • + +
    + 侧边栏收起 +
    +
    .icon-cebianlanshouqi +
    +
  • + +
  • + +
    + 合并 +
    +
    .icon-hebing +
    +
  • + +
  • + +
    + 向上倾斜 +
    +
    .icon-xiangshangqingxie +
    +
  • + +
  • + +
    + 水平对齐 +
    +
    .icon-shuipingduiqi +
    +
  • + +
  • + +
    + 文本删除线 +
    +
    .icon-wenbenshanchuxian +
    +
  • + +
  • + +
    + 文本右对齐 +
    +
    .icon-wenbenyouduiqi +
    +
  • + +
  • + +
    + 前进 +
    +
    .icon-qianjin +
    +
  • + +
  • + +
    + 图表 +
    +
    .icon-tubiao +
    +
  • + +
  • + +
    + 右边框 +
    +
    .icon-youbiankuang +
    +
  • + +
  • + +
    + 百分号 +
    +
    .icon-baifenhao +
    +
  • + +
  • + +
    + 格式刷 +
    +
    .icon-geshishua +
    +
  • + +
  • + +
    + 保存 +
    +
    .icon-baocun +
    +
  • + +
  • + +
    + 数据验证 +
    +
    .icon-shujuyanzheng +
    +
  • + +
  • + +
    + 截断 +
    +
    .icon-jieduan +
    +
  • + +
  • + +
    + 格式条件 +
    +
    .icon-geshitiaojian +
    +
  • + +
  • + +
    + 自动换行 +
    +
    .icon-zidonghuanhang +
    +
  • + +
  • + +
    + 侧边栏展开 +
    +
    .icon-cebianlanzhankai +
    +
  • + +
  • + +
    + 筛选2 +
    +
    .icon-shaixuan2 +
    +
  • + +
  • + +
    + 向下倾斜 +
    +
    .icon-xiangxiaqingxie +
    +
  • + +
  • + +
    + 溢出 +
    +
    .icon-yichu +
    +
  • + +
  • + +
    + 垂直合并 +
    +
    .icon-chuizhihebing +
    +
  • + +
  • + +
    + 文本分散对齐 +
    +
    .icon-wenbenfensanduiqi +
    +
  • + +
  • + +
    + 左边框 +
    +
    .icon-zuobiankuang +
    +
  • + +
  • + +
    + 分页查看 +
    +
    .icon-fenyechakan +
    +
  • + +
  • + +
    + 运行 +
    +
    .icon-yunhang +
    +
  • + +
  • + +
    + 列 +
    +
    .icon-lie +
    +
  • + +
  • + +
    + 全屏 +
    +
    .icon-quanping +
    +
  • + +
  • + +
    + 筛选 +
    +
    .icon-shaixuan +
    +
  • + +
  • + +
    + 更新 +
    +
    .icon-gengxin +
    +
  • + +
  • + +
    + 清除 +
    +
    .icon-qingchu +
    +
  • + +
  • + +
    + 行 +
    +
    .icon-hang +
    +
  • + +
  • + +
    + 注释 +
    +
    .icon-zhushi +
    +
  • + +
  • + +
    + 剪 +
    +
    .icon-jian +
    +
  • + +
  • + +
    + 计算 +
    +
    .icon-jisuan +
    +
  • + +
  • + +
    + 加 +
    +
    .icon-jia +
    +
  • + +
  • + +
    + 底部对齐 +
    +
    .icon-dibuduiqi +
    +
  • + +
  • + +
    + 向上90 +
    +
    .icon-xiangshang90 +
    +
  • + +
  • + +
    + 无选装 +
    +
    .icon-wuxuanzhuang +
    +
  • + +
  • + +
    + 显示隐藏网格 +
    +
    .icon-xianshiyincangwangge +
    +
  • + +
  • + +
    + 冻结 +
    +
    .icon-dongjie +
    +
  • + +
  • + +
    + 文本左对齐 +
    +
    .icon-wenbenzuoduiqi +
    +
  • + +
  • + +
    + 后退 +
    +
    .icon-houtui +
    +
  • + +
  • + +
    + 水平合并 +
    +
    .icon-shuipinghebing +
    +
  • + +
  • + +
    + 下边框 +
    +
    .icon-xiabiankuang +
    +
  • + +
  • + +
    + 设置 +
    +
    .icon-shezhi +
    +
  • + +
+
+

font-class 引用

+
+ +

font-class 是 Unicode 使用方式的一种变种,主要是解决 Unicode 书写不直观,语意不明确的问题。

+

与 Unicode 使用方式相比,具有如下特点:

+
    +
  • 兼容性良好,支持 IE8+,及所有现代浏览器。
  • +
  • 相比于 Unicode 语意明确,书写更直观。可以很容易分辨这个 icon 是什么。
  • +
  • 因为使用 class 来定义图标,所以当要替换图标时,只需要修改 class 里面的 Unicode 引用。
  • +
  • 不过因为本质上还是使用的字体,所以多色图标还是不支持的。
  • +
+

使用步骤如下:

+

第一步:引入项目下面生成的 fontclass 代码:

+
<link rel="stylesheet" href="./iconfont.css">
+
+

第二步:挑选相应图标并获取类名,应用于页面:

+
<span class="iconfont icon-xxx"></span>
+
+
+

" + iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。

+
+
+
+
+
    + +
  • + +
    logo2
    +
    #icon-logo2
    +
  • + +
  • + +
    logo
    +
    #icon-logo
    +
  • + +
  • + +
    文本倾斜
    +
    #icon-wenbenqingxie1
    +
  • + +
  • + +
    加粗
    +
    #icon-jiacu
    +
  • + +
  • + +
    搜索
    +
    #icon-sousuo
    +
  • + +
  • + +
    关闭
    +
    #icon-guanbi
    +
  • + +
  • + +
    下一个
    +
    #icon-xiayige
    +
  • + +
  • + +
    下拉
    +
    #icon-xiala
    +
  • + +
  • + +
    文本颜色
    +
    #icon-wenbenyanse
    +
  • + +
  • + +
    上一个
    +
    #icon-shangyige
    +
  • + +
  • + +
    数据透视
    +
    #icon-shujutoushi
    +
  • + +
  • + +
    填充
    +
    #icon-tianchong
    +
  • + +
  • + +
    增加小数位
    +
    #icon-zengjiaxiaoshuwei
    +
  • + +
  • + +
    编辑2
    +
    #icon-bianji2
    +
  • + +
  • + +
    截屏
    +
    #icon-jieping
    +
  • + +
  • + +
    减小小数位
    +
    #icon-jianxiaoxiaoshuwei
    +
  • + +
  • + +
    菜单
    +
    #icon-caidan
    +
  • + +
  • + +
    数据库
    +
    #icon-shujuku
    +
  • + +
  • + +
    无边框
    +
    #icon-wubiankuang
    +
  • + +
  • + +
    编辑
    +
    #icon-bianji
    +
  • + +
  • + +
    清除样式
    +
    #icon-qingchuyangshi
    +
  • + +
  • + +
    删除
    +
    #icon-shanchu
    +
  • + +
  • + +
    文本居中对齐
    +
    #icon-wenbenjuzhongduiqi
    +
  • + +
  • + +
    打印
    +
    #icon-dayin
    +
  • + +
  • + +
    文本分割
    +
    #icon-wenbenfenge
    +
  • + +
  • + +
    函数‘
    +
    #icon-hanshu
    +
  • + +
  • + +
    降序
    +
    #icon-jiangxu
    +
  • + +
  • + +
    顶部对齐
    +
    #icon-dingbuduiqi
    +
  • + +
  • + +
    图片
    +
    #icon-tupian
    +
  • + +
  • + +
    向下90
    +
    #icon-xiangxia90
    +
  • + +
  • + +
    竖排文字
    +
    #icon-shupaiwenzi
    +
  • + +
  • + +
    全加边框
    +
    #icon-quanjiabiankuang
    +
  • + +
  • + +
    升序
    +
    #icon-shengxu
    +
  • + +
  • + +
    裁剪
    +
    #icon-caijian
    +
  • + +
  • + +
    金额
    +
    #icon-jine
    +
  • + +
  • + +
    菜单1
    +
    #icon-caidan1
    +
  • + +
  • + +
    取消合并
    +
    #icon-quxiaohebing
    +
  • + +
  • + +
    文本下划线
    +
    #icon-wenbenxiahuaxian
    +
  • + +
  • + +
    上边框
    +
    #icon-shangbiankuang
    +
  • + +
  • + +
    定位
    +
    #icon-dingwei
    +
  • + +
  • + +
    四周加边框
    +
    #icon-sizhoujiabiankuang
    +
  • + +
  • + +
    侧边栏收起
    +
    #icon-cebianlanshouqi
    +
  • + +
  • + +
    合并
    +
    #icon-hebing
    +
  • + +
  • + +
    向上倾斜
    +
    #icon-xiangshangqingxie
    +
  • + +
  • + +
    水平对齐
    +
    #icon-shuipingduiqi
    +
  • + +
  • + +
    文本删除线
    +
    #icon-wenbenshanchuxian
    +
  • + +
  • + +
    文本右对齐
    +
    #icon-wenbenyouduiqi
    +
  • + +
  • + +
    前进
    +
    #icon-qianjin
    +
  • + +
  • + +
    图表
    +
    #icon-tubiao
    +
  • + +
  • + +
    右边框
    +
    #icon-youbiankuang
    +
  • + +
  • + +
    百分号
    +
    #icon-baifenhao
    +
  • + +
  • + +
    格式刷
    +
    #icon-geshishua
    +
  • + +
  • + +
    保存
    +
    #icon-baocun
    +
  • + +
  • + +
    数据验证
    +
    #icon-shujuyanzheng
    +
  • + +
  • + +
    截断
    +
    #icon-jieduan
    +
  • + +
  • + +
    格式条件
    +
    #icon-geshitiaojian
    +
  • + +
  • + +
    自动换行
    +
    #icon-zidonghuanhang
    +
  • + +
  • + +
    侧边栏展开
    +
    #icon-cebianlanzhankai
    +
  • + +
  • + +
    筛选2
    +
    #icon-shaixuan2
    +
  • + +
  • + +
    向下倾斜
    +
    #icon-xiangxiaqingxie
    +
  • + +
  • + +
    溢出
    +
    #icon-yichu
    +
  • + +
  • + +
    垂直合并
    +
    #icon-chuizhihebing
    +
  • + +
  • + +
    文本分散对齐
    +
    #icon-wenbenfensanduiqi
    +
  • + +
  • + +
    左边框
    +
    #icon-zuobiankuang
    +
  • + +
  • + +
    分页查看
    +
    #icon-fenyechakan
    +
  • + +
  • + +
    运行
    +
    #icon-yunhang
    +
  • + +
  • + +
    +
    #icon-lie
    +
  • + +
  • + +
    全屏
    +
    #icon-quanping
    +
  • + +
  • + +
    筛选
    +
    #icon-shaixuan
    +
  • + +
  • + +
    更新
    +
    #icon-gengxin
    +
  • + +
  • + +
    清除
    +
    #icon-qingchu
    +
  • + +
  • + +
    +
    #icon-hang
    +
  • + +
  • + +
    注释
    +
    #icon-zhushi
    +
  • + +
  • + +
    +
    #icon-jian
    +
  • + +
  • + +
    计算
    +
    #icon-jisuan
    +
  • + +
  • + +
    +
    #icon-jia
    +
  • + +
  • + +
    底部对齐
    +
    #icon-dibuduiqi
    +
  • + +
  • + +
    向上90
    +
    #icon-xiangshang90
    +
  • + +
  • + +
    无选装
    +
    #icon-wuxuanzhuang
    +
  • + +
  • + +
    显示隐藏网格
    +
    #icon-xianshiyincangwangge
    +
  • + +
  • + +
    冻结
    +
    #icon-dongjie
    +
  • + +
  • + +
    文本左对齐
    +
    #icon-wenbenzuoduiqi
    +
  • + +
  • + +
    后退
    +
    #icon-houtui
    +
  • + +
  • + +
    水平合并
    +
    #icon-shuipinghebing
    +
  • + +
  • + +
    下边框
    +
    #icon-xiabiankuang
    +
  • + +
  • + +
    设置
    +
    #icon-shezhi
    +
  • + +
+
+

Symbol 引用

+
+ +

这是一种全新的使用方式,应该说这才是未来的主流,也是平台目前推荐的用法。相关介绍可以参考这篇文章 + 这种用法其实是做了一个 SVG 的集合,与另外两种相比具有如下特点:

+
    +
  • 支持多色图标了,不再受单色限制。
  • +
  • 通过一些技巧,支持像字体那样,通过 font-size, color 来调整样式。
  • +
  • 兼容性较差,支持 IE9+,及现代浏览器。
  • +
  • 浏览器渲染 SVG 的性能一般,还不如 png。
  • +
+

使用步骤如下:

+

第一步:引入项目下面生成的 symbol 代码:

+
<script src="./iconfont.js"></script>
+
+

第二步:加入通用 CSS 代码(引入一次就行):

+
<style>
+.icon {
+  width: 1em;
+  height: 1em;
+  vertical-align: -0.15em;
+  fill: currentColor;
+  overflow: hidden;
+}
+</style>
+
+

第三步:挑选相应图标并获取类名,应用于页面:

+
<svg class="icon" aria-hidden="true">
+  <use xlink:href="#icon-xxx"></use>
+</svg>
+
+
+
+ +
+
+ + + diff --git a/src/assets/iconfont/iconfont.css b/src/assets/iconfont/iconfont.css new file mode 100644 index 0000000..c491041 --- /dev/null +++ b/src/assets/iconfont/iconfont.css @@ -0,0 +1,361 @@ +@font-face {font-family: "iconfont"; + src: url('iconfont.eot?t=1600168545018'); /* IE9 */ + src: url('iconfont.eot?t=1600168545018#iefix') format('embedded-opentype'), /* IE6-IE8 */ + url('data:application/x-font-woff2;charset=utf-8;base64,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') format('woff2'), + url('iconfont.woff?t=1600168545018') format('woff'), + url('iconfont.ttf?t=1600168545018') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */ + url('iconfont.svg?t=1600168545018#iconfont') format('svg'); /* iOS 4.1- */ +} + +.iconfont { + font-family: "iconfont" !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-logo2:before { + content: "\e7df"; +} + +.icon-logo:before { + content: "\e7e0"; +} + +.icon-wenbenqingxie1:before { + content: "\e7de"; +} + +.icon-jiacu:before { + content: "\e7d9"; +} + +.icon-sousuo:before { + content: "\e78a"; +} + +.icon-guanbi:before { + content: "\e78b"; +} + +.icon-xiayige:before { + content: "\e78c"; +} + +.icon-xiala:before { + content: "\e78d"; +} + +.icon-wenbenyanse:before { + content: "\e78e"; +} + +.icon-shangyige:before { + content: "\e78f"; +} + +.icon-shujutoushi:before { + content: "\e790"; +} + +.icon-tianchong:before { + content: "\e791"; +} + +.icon-zengjiaxiaoshuwei:before { + content: "\e792"; +} + +.icon-bianji2:before { + content: "\e793"; +} + +.icon-jieping:before { + content: "\e794"; +} + +.icon-jianxiaoxiaoshuwei:before { + content: "\e796"; +} + +.icon-caidan:before { + content: "\e797"; +} + +.icon-shujuku:before { + content: "\e798"; +} + +.icon-wubiankuang:before { + content: "\e799"; +} + +.icon-bianji:before { + content: "\e79a"; +} + +.icon-qingchuyangshi:before { + content: "\e79b"; +} + +.icon-shanchu:before { + content: "\e79c"; +} + +.icon-wenbenjuzhongduiqi:before { + content: "\e79d"; +} + +.icon-dayin:before { + content: "\e79e"; +} + +.icon-wenbenfenge:before { + content: "\e79f"; +} + +.icon-hanshu:before { + content: "\e7a0"; +} + +.icon-jiangxu:before { + content: "\e7a1"; +} + +.icon-dingbuduiqi:before { + content: "\e7a2"; +} + +.icon-tupian:before { + content: "\e7a3"; +} + +.icon-xiangxia90:before { + content: "\e7a4"; +} + +.icon-shupaiwenzi:before { + content: "\e7a5"; +} + +.icon-quanjiabiankuang:before { + content: "\e7a6"; +} + +.icon-shengxu:before { + content: "\e7a7"; +} + +.icon-caijian:before { + content: "\e7a8"; +} + +.icon-jine:before { + content: "\e7a9"; +} + +.icon-caidan1:before { + content: "\e7aa"; +} + +.icon-quxiaohebing:before { + content: "\e7ab"; +} + +.icon-wenbenxiahuaxian:before { + content: "\e7ac"; +} + +.icon-shangbiankuang:before { + content: "\e7ad"; +} + +.icon-dingwei:before { + content: "\e7ae"; +} + +.icon-sizhoujiabiankuang:before { + content: "\e7af"; +} + +.icon-cebianlanshouqi:before { + content: "\e7b0"; +} + +.icon-hebing:before { + content: "\e7b1"; +} + +.icon-xiangshangqingxie:before { + content: "\e7b2"; +} + +.icon-shuipingduiqi:before { + content: "\e7b3"; +} + +.icon-wenbenshanchuxian:before { + content: "\e7b4"; +} + +.icon-wenbenyouduiqi:before { + content: "\e7b5"; +} + +.icon-qianjin:before { + content: "\e7b6"; +} + +.icon-tubiao:before { + content: "\e7b7"; +} + +.icon-youbiankuang:before { + content: "\e7b8"; +} + +.icon-baifenhao:before { + content: "\e7b9"; +} + +.icon-geshishua:before { + content: "\e7ba"; +} + +.icon-baocun:before { + content: "\e7bb"; +} + +.icon-shujuyanzheng:before { + content: "\e7bc"; +} + +.icon-jieduan:before { + content: "\e7bd"; +} + +.icon-geshitiaojian:before { + content: "\e7be"; +} + +.icon-zidonghuanhang:before { + content: "\e7bf"; +} + +.icon-cebianlanzhankai:before { + content: "\e7c0"; +} + +.icon-shaixuan2:before { + content: "\e7c1"; +} + +.icon-xiangxiaqingxie:before { + content: "\e7c2"; +} + +.icon-yichu:before { + content: "\e7c3"; +} + +.icon-chuizhihebing:before { + content: "\e7c4"; +} + +.icon-wenbenfensanduiqi:before { + content: "\e7c5"; +} + +.icon-zuobiankuang:before { + content: "\e7c6"; +} + +.icon-fenyechakan:before { + content: "\e7c7"; +} + +.icon-yunhang:before { + content: "\e7c8"; +} + +.icon-lie:before { + content: "\e7c9"; +} + +.icon-quanping:before { + content: "\e7ca"; +} + +.icon-shaixuan:before { + content: "\e7cb"; +} + +.icon-gengxin:before { + content: "\e7cc"; +} + +.icon-qingchu:before { + content: "\e7cd"; +} + +.icon-hang:before { + content: "\e7ce"; +} + +.icon-zhushi:before { + content: "\e7cf"; +} + +.icon-jian:before { + content: "\e7d0"; +} + +.icon-jisuan:before { + content: "\e7d1"; +} + +.icon-jia:before { + content: "\e7d2"; +} + +.icon-dibuduiqi:before { + content: "\e7d3"; +} + +.icon-xiangshang90:before { + content: "\e7d4"; +} + +.icon-wuxuanzhuang:before { + content: "\e7d5"; +} + +.icon-xianshiyincangwangge:before { + content: "\e7d6"; +} + +.icon-dongjie:before { + content: "\e7d7"; +} + +.icon-wenbenzuoduiqi:before { + content: "\e7d8"; +} + +.icon-houtui:before { + content: "\e7da"; +} + +.icon-shuipinghebing:before { + content: "\e7db"; +} + +.icon-xiabiankuang:before { + content: "\e7dc"; +} + +.icon-shezhi:before { + content: "\e7dd"; +} + diff --git a/src/assets/iconfont/iconfont.eot b/src/assets/iconfont/iconfont.eot new file mode 100644 index 0000000..161d37f Binary files /dev/null and b/src/assets/iconfont/iconfont.eot differ diff --git a/src/assets/iconfont/iconfont.js b/src/assets/iconfont/iconfont.js new file mode 100644 index 0000000..57043f6 --- /dev/null +++ b/src/assets/iconfont/iconfont.js @@ -0,0 +1 @@ +!function(h){var a,l,v,i,z,t,o,M='',p=(a=document.getElementsByTagName("script"))[a.length-1].getAttribute("data-injectcss");if(p&&!h.__iconfont__svg__cssinject__){h.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(h){console&&console.log(h)}}function m(){t||(t=!0,i())}l=function(){var h,a,l,v,i,z=document.createElement("div");z.innerHTML=M,M=null,(h=z.getElementsByTagName("svg")[0])&&(h.setAttribute("aria-hidden","true"),h.style.position="absolute",h.style.width=0,h.style.height=0,h.style.overflow="hidden",a=h,(l=document.body).firstChild?(v=a,(i=l.firstChild).parentNode.insertBefore(v,i)):l.appendChild(a))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(l,0):(v=function(){document.removeEventListener("DOMContentLoaded",v,!1),l()},document.addEventListener("DOMContentLoaded",v,!1)):document.attachEvent&&(i=l,z=h.document,t=!1,(o=function(){try{z.documentElement.doScroll("left")}catch(h){return void setTimeout(o,50)}m()})(),z.onreadystatechange=function(){"complete"==z.readyState&&(z.onreadystatechange=null,m())})}(window); \ No newline at end of file diff --git a/src/assets/iconfont/iconfont.json b/src/assets/iconfont/iconfont.json new file mode 100644 index 0000000..5be4a10 --- /dev/null +++ b/src/assets/iconfont/iconfont.json @@ -0,0 +1,611 @@ +{ + "id": "1990368", + "name": "lucksheet", + "font_family": "iconfont", + "css_prefix_text": "icon-", + "description": "", + "glyphs": [ + { + "icon_id": "16746498", + "name": "logo2", + "font_class": "logo2", + "unicode": "e7df", + "unicode_decimal": 59359 + }, + { + "icon_id": "16746532", + "name": "logo", + "font_class": "logo", + "unicode": "e7e0", + "unicode_decimal": 59360 + }, + { + "icon_id": "16730159", + "name": "文本倾斜", + "font_class": "wenbenqingxie1", + "unicode": "e7de", + "unicode_decimal": 59358 + }, + { + "icon_id": "16728412", + "name": "加粗", + "font_class": "jiacu", + "unicode": "e7d9", + "unicode_decimal": 59353 + }, + { + "icon_id": "16728080", + "name": "搜索", + "font_class": "sousuo", + "unicode": "e78a", + "unicode_decimal": 59274 + }, + { + "icon_id": "16728081", + "name": "关闭", + "font_class": "guanbi", + "unicode": "e78b", + "unicode_decimal": 59275 + }, + { + "icon_id": "16728082", + "name": "下一个", + "font_class": "xiayige", + "unicode": "e78c", + "unicode_decimal": 59276 + }, + { + "icon_id": "16728083", + "name": "下拉", + "font_class": "xiala", + "unicode": "e78d", + "unicode_decimal": 59277 + }, + { + "icon_id": "16728084", + "name": "文本颜色", + "font_class": "wenbenyanse", + "unicode": "e78e", + "unicode_decimal": 59278 + }, + { + "icon_id": "16728085", + "name": "上一个", + "font_class": "shangyige", + "unicode": "e78f", + "unicode_decimal": 59279 + }, + { + "icon_id": "16728086", + "name": "数据透视", + "font_class": "shujutoushi", + "unicode": "e790", + "unicode_decimal": 59280 + }, + { + "icon_id": "16728087", + "name": "填充", + "font_class": "tianchong", + "unicode": "e791", + "unicode_decimal": 59281 + }, + { + "icon_id": "16728088", + "name": "增加小数位", + "font_class": "zengjiaxiaoshuwei", + "unicode": "e792", + "unicode_decimal": 59282 + }, + { + "icon_id": "16728089", + "name": "编辑2", + "font_class": "bianji2", + "unicode": "e793", + "unicode_decimal": 59283 + }, + { + "icon_id": "16728090", + "name": "截屏", + "font_class": "jieping", + "unicode": "e794", + "unicode_decimal": 59284 + }, + { + "icon_id": "16728092", + "name": "减小小数位", + "font_class": "jianxiaoxiaoshuwei", + "unicode": "e796", + "unicode_decimal": 59286 + }, + { + "icon_id": "16728093", + "name": "菜单", + "font_class": "caidan", + "unicode": "e797", + "unicode_decimal": 59287 + }, + { + "icon_id": "16728094", + "name": "数据库", + "font_class": "shujuku", + "unicode": "e798", + "unicode_decimal": 59288 + }, + { + "icon_id": "16728095", + "name": "无边框", + "font_class": "wubiankuang", + "unicode": "e799", + "unicode_decimal": 59289 + }, + { + "icon_id": "16728096", + "name": "编辑", + "font_class": "bianji", + "unicode": "e79a", + "unicode_decimal": 59290 + }, + { + "icon_id": "16728097", + "name": "清除样式", + "font_class": "qingchuyangshi", + "unicode": "e79b", + "unicode_decimal": 59291 + }, + { + "icon_id": "16728099", + "name": "删除", + "font_class": "shanchu", + "unicode": "e79c", + "unicode_decimal": 59292 + }, + { + "icon_id": "16728100", + "name": "文本居中对齐", + "font_class": "wenbenjuzhongduiqi", + "unicode": "e79d", + "unicode_decimal": 59293 + }, + { + "icon_id": "16728101", + "name": "打印", + "font_class": "dayin", + "unicode": "e79e", + "unicode_decimal": 59294 + }, + { + "icon_id": "16728102", + "name": "文本分割", + "font_class": "wenbenfenge", + "unicode": "e79f", + "unicode_decimal": 59295 + }, + { + "icon_id": "16728103", + "name": "函数‘", + "font_class": "hanshu", + "unicode": "e7a0", + "unicode_decimal": 59296 + }, + { + "icon_id": "16728104", + "name": "降序", + "font_class": "jiangxu", + "unicode": "e7a1", + "unicode_decimal": 59297 + }, + { + "icon_id": "16728105", + "name": "顶部对齐", + "font_class": "dingbuduiqi", + "unicode": "e7a2", + "unicode_decimal": 59298 + }, + { + "icon_id": "16728106", + "name": "图片", + "font_class": "tupian", + "unicode": "e7a3", + "unicode_decimal": 59299 + }, + { + "icon_id": "16728107", + "name": "向下90", + "font_class": "xiangxia90", + "unicode": "e7a4", + "unicode_decimal": 59300 + }, + { + "icon_id": "16728108", + "name": "竖排文字", + "font_class": "shupaiwenzi", + "unicode": "e7a5", + "unicode_decimal": 59301 + }, + { + "icon_id": "16728109", + "name": "全加边框", + "font_class": "quanjiabiankuang", + "unicode": "e7a6", + "unicode_decimal": 59302 + }, + { + "icon_id": "16728110", + "name": "升序", + "font_class": "shengxu", + "unicode": "e7a7", + "unicode_decimal": 59303 + }, + { + "icon_id": "16728111", + "name": "裁剪", + "font_class": "caijian", + "unicode": "e7a8", + "unicode_decimal": 59304 + }, + { + "icon_id": "16728112", + "name": "金额", + "font_class": "jine", + "unicode": "e7a9", + "unicode_decimal": 59305 + }, + { + "icon_id": "16728113", + "name": "菜单1", + "font_class": "caidan1", + "unicode": "e7aa", + "unicode_decimal": 59306 + }, + { + "icon_id": "16728114", + "name": "取消合并", + "font_class": "quxiaohebing", + "unicode": "e7ab", + "unicode_decimal": 59307 + }, + { + "icon_id": "16728115", + "name": "文本下划线", + "font_class": "wenbenxiahuaxian", + "unicode": "e7ac", + "unicode_decimal": 59308 + }, + { + "icon_id": "16728116", + "name": "上边框", + "font_class": "shangbiankuang", + "unicode": "e7ad", + "unicode_decimal": 59309 + }, + { + "icon_id": "16728117", + "name": "定位", + "font_class": "dingwei", + "unicode": "e7ae", + "unicode_decimal": 59310 + }, + { + "icon_id": "16728118", + "name": "四周加边框", + "font_class": "sizhoujiabiankuang", + "unicode": "e7af", + "unicode_decimal": 59311 + }, + { + "icon_id": "16728119", + "name": "侧边栏收起", + "font_class": "cebianlanshouqi", + "unicode": "e7b0", + "unicode_decimal": 59312 + }, + { + "icon_id": "16728120", + "name": "合并", + "font_class": "hebing", + "unicode": "e7b1", + "unicode_decimal": 59313 + }, + { + "icon_id": "16728121", + "name": "向上倾斜", + "font_class": "xiangshangqingxie", + "unicode": "e7b2", + "unicode_decimal": 59314 + }, + { + "icon_id": "16728122", + "name": "水平对齐", + "font_class": "shuipingduiqi", + "unicode": "e7b3", + "unicode_decimal": 59315 + }, + { + "icon_id": "16728123", + "name": "文本删除线", + "font_class": "wenbenshanchuxian", + "unicode": "e7b4", + "unicode_decimal": 59316 + }, + { + "icon_id": "16728124", + "name": "文本右对齐", + "font_class": "wenbenyouduiqi", + "unicode": "e7b5", + "unicode_decimal": 59317 + }, + { + "icon_id": "16728125", + "name": "前进", + "font_class": "qianjin", + "unicode": "e7b6", + "unicode_decimal": 59318 + }, + { + "icon_id": "16728126", + "name": "图表", + "font_class": "tubiao", + "unicode": "e7b7", + "unicode_decimal": 59319 + }, + { + "icon_id": "16728127", + "name": "右边框", + "font_class": "youbiankuang", + "unicode": "e7b8", + "unicode_decimal": 59320 + }, + { + "icon_id": "16728128", + "name": "百分号", + "font_class": "baifenhao", + "unicode": "e7b9", + "unicode_decimal": 59321 + }, + { + "icon_id": "16728129", + "name": "格式刷", + "font_class": "geshishua", + "unicode": "e7ba", + "unicode_decimal": 59322 + }, + { + "icon_id": "16728130", + "name": "保存", + "font_class": "baocun", + "unicode": "e7bb", + "unicode_decimal": 59323 + }, + { + "icon_id": "16728131", + "name": "数据验证", + "font_class": "shujuyanzheng", + "unicode": "e7bc", + "unicode_decimal": 59324 + }, + { + "icon_id": "16728132", + "name": "截断", + "font_class": "jieduan", + "unicode": "e7bd", + "unicode_decimal": 59325 + }, + { + "icon_id": "16728133", + "name": "格式条件", + "font_class": "geshitiaojian", + "unicode": "e7be", + "unicode_decimal": 59326 + }, + { + "icon_id": "16728134", + "name": "自动换行", + "font_class": "zidonghuanhang", + "unicode": "e7bf", + "unicode_decimal": 59327 + }, + { + "icon_id": "16728135", + "name": "侧边栏展开", + "font_class": "cebianlanzhankai", + "unicode": "e7c0", + "unicode_decimal": 59328 + }, + { + "icon_id": "16728136", + "name": "筛选2", + "font_class": "shaixuan2", + "unicode": "e7c1", + "unicode_decimal": 59329 + }, + { + "icon_id": "16728137", + "name": "向下倾斜", + "font_class": "xiangxiaqingxie", + "unicode": "e7c2", + "unicode_decimal": 59330 + }, + { + "icon_id": "16728138", + "name": "溢出", + "font_class": "yichu", + "unicode": "e7c3", + "unicode_decimal": 59331 + }, + { + "icon_id": "16728139", + "name": "垂直合并", + "font_class": "chuizhihebing", + "unicode": "e7c4", + "unicode_decimal": 59332 + }, + { + "icon_id": "16728140", + "name": "文本分散对齐", + "font_class": "wenbenfensanduiqi", + "unicode": "e7c5", + "unicode_decimal": 59333 + }, + { + "icon_id": "16728141", + "name": "左边框", + "font_class": "zuobiankuang", + "unicode": "e7c6", + "unicode_decimal": 59334 + }, + { + "icon_id": "16728142", + "name": "分页查看", + "font_class": "fenyechakan", + "unicode": "e7c7", + "unicode_decimal": 59335 + }, + { + "icon_id": "16728143", + "name": "运行", + "font_class": "yunhang", + "unicode": "e7c8", + "unicode_decimal": 59336 + }, + { + "icon_id": "16728144", + "name": "列", + "font_class": "lie", + "unicode": "e7c9", + "unicode_decimal": 59337 + }, + { + "icon_id": "16728145", + "name": "全屏", + "font_class": "quanping", + "unicode": "e7ca", + "unicode_decimal": 59338 + }, + { + "icon_id": "16728146", + "name": "筛选", + "font_class": "shaixuan", + "unicode": "e7cb", + "unicode_decimal": 59339 + }, + { + "icon_id": "16728147", + "name": "更新", + "font_class": "gengxin", + "unicode": "e7cc", + "unicode_decimal": 59340 + }, + { + "icon_id": "16728148", + "name": "清除", + "font_class": "qingchu", + "unicode": "e7cd", + "unicode_decimal": 59341 + }, + { + "icon_id": "16728149", + "name": "行", + "font_class": "hang", + "unicode": "e7ce", + "unicode_decimal": 59342 + }, + { + "icon_id": "16728150", + "name": "注释", + "font_class": "zhushi", + "unicode": "e7cf", + "unicode_decimal": 59343 + }, + { + "icon_id": "16728151", + "name": "剪", + "font_class": "jian", + "unicode": "e7d0", + "unicode_decimal": 59344 + }, + { + "icon_id": "16728152", + "name": "计算", + "font_class": "jisuan", + "unicode": "e7d1", + "unicode_decimal": 59345 + }, + { + "icon_id": "16728153", + "name": "加", + "font_class": "jia", + "unicode": "e7d2", + "unicode_decimal": 59346 + }, + { + "icon_id": "16728154", + "name": "底部对齐", + "font_class": "dibuduiqi", + "unicode": "e7d3", + "unicode_decimal": 59347 + }, + { + "icon_id": "16728155", + "name": "向上90", + "font_class": "xiangshang90", + "unicode": "e7d4", + "unicode_decimal": 59348 + }, + { + "icon_id": "16728156", + "name": "无选装", + "font_class": "wuxuanzhuang", + "unicode": "e7d5", + "unicode_decimal": 59349 + }, + { + "icon_id": "16728157", + "name": "显示隐藏网格", + "font_class": "xianshiyincangwangge", + "unicode": "e7d6", + "unicode_decimal": 59350 + }, + { + "icon_id": "16728158", + "name": "冻结", + "font_class": "dongjie", + "unicode": "e7d7", + "unicode_decimal": 59351 + }, + { + "icon_id": "16728159", + "name": "文本左对齐", + "font_class": "wenbenzuoduiqi", + "unicode": "e7d8", + "unicode_decimal": 59352 + }, + { + "icon_id": "16728161", + "name": "后退", + "font_class": "houtui", + "unicode": "e7da", + "unicode_decimal": 59354 + }, + { + "icon_id": "16728162", + "name": "水平合并", + "font_class": "shuipinghebing", + "unicode": "e7db", + "unicode_decimal": 59355 + }, + { + "icon_id": "16728163", + "name": "下边框", + "font_class": "xiabiankuang", + "unicode": "e7dc", + "unicode_decimal": 59356 + }, + { + "icon_id": "16728164", + "name": "设置", + "font_class": "shezhi", + "unicode": "e7dd", + "unicode_decimal": 59357 + } + ] +} diff --git a/src/assets/iconfont/iconfont.svg b/src/assets/iconfont/iconfont.svg new file mode 100644 index 0000000..0fb078f --- /dev/null +++ b/src/assets/iconfont/iconfont.svg @@ -0,0 +1,284 @@ + + + + + +Created by iconfont + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/iconfont/iconfont.ttf b/src/assets/iconfont/iconfont.ttf new file mode 100644 index 0000000..2600647 Binary files /dev/null and b/src/assets/iconfont/iconfont.ttf differ diff --git a/src/assets/iconfont/iconfont.woff b/src/assets/iconfont/iconfont.woff new file mode 100644 index 0000000..7a7a19e Binary files /dev/null and b/src/assets/iconfont/iconfont.woff differ diff --git a/src/assets/iconfont/iconfont.woff2 b/src/assets/iconfont/iconfont.woff2 new file mode 100644 index 0000000..726bdea Binary files /dev/null and b/src/assets/iconfont/iconfont.woff2 differ diff --git a/src/controllers/constant.js b/src/controllers/constant.js index 52c8528..e79f2f9 100644 --- a/src/controllers/constant.js +++ b/src/controllers/constant.js @@ -21,7 +21,7 @@ const gridHTML = function(){
${locale_info.wait}
\${functionButton}
-
\${menu}
+
\${menu}
@@ -190,8 +190,8 @@ const gridHTML = function(){
-
-
+
+
-
-
+
+
@@ -601,7 +601,38 @@ function sheetconfigHTML(){ const luckysheetPivotTableHTML = function(){ const _locale = locale(); const locale_pivotTable = _locale.pivotTable; - return '
'+locale_pivotTable.title+'
'+locale_pivotTable.editRange+'
'+locale_pivotTable.tipPivotFieldSelected+' '+locale_pivotTable.btnClearSelectedField+'
'+locale_pivotTable.btnFilter+'
'+locale_pivotTable.titleRow+'
'+locale_pivotTable.titleColumn+'
'+locale_pivotTable.titleValue+'
'; + // return '
'+locale_pivotTable.title+'
'+locale_pivotTable.editRange+'
'+locale_pivotTable.tipPivotFieldSelected+' '+locale_pivotTable.btnClearSelectedField+'
'+locale_pivotTable.btnFilter+'
'+locale_pivotTable.titleRow+'
'+locale_pivotTable.titleColumn+'
'+locale_pivotTable.titleValue+'
'; + return ` +
+
${locale_pivotTable.title}
+
+
+
+
${locale_pivotTable.editRange}
+
+
${locale_pivotTable.tipPivotFieldSelected} ${locale_pivotTable.btnClearSelectedField}
+
+
+
+
${locale_pivotTable.btnFilter}
+
+
+
+
${locale_pivotTable.titleRow}
+
+
+
+
${locale_pivotTable.titleColumn}
+
+
+
+
${locale_pivotTable.titleValue}
+
+
+
+
+
+ `; } function filtermenuHTML() { @@ -685,6 +716,8 @@ const luckysheetToolHTML = '
return `
-
@@ -708,7 +741,7 @@ function menuToolBar (){
-
@@ -722,7 +755,7 @@ function menuToolBar (){
-
@@ -731,7 +764,7 @@ function menuToolBar (){
-
+
@@ -739,7 +772,11 @@ function menuToolBar (){ style="user-select: none;">
- ¥ +
+ +
@@ -749,7 +786,11 @@ function menuToolBar (){ style="user-select: none;">
- % +
+ +
@@ -761,7 +802,7 @@ function menuToolBar (){ style="user-select: none;">
-
@@ -776,14 +817,14 @@ function menuToolBar (){ style="user-select: none;">
-
-
@@ -793,13 +834,13 @@ function menuToolBar (){ style="user-select: none;"> 123
-
-
+
@@ -811,15 +852,16 @@ function menuToolBar (){ style="user-select: none;"> ${fontarray[0]}
-
-
+ +
-
@@ -831,13 +873,13 @@ function menuToolBar (){ role="combobox" style="user-select: none;" tabindex="-1" type="text" value="10" />
-
-
+
@@ -846,7 +888,7 @@ function menuToolBar (){
-
@@ -860,7 +902,7 @@ function menuToolBar (){
-
@@ -874,14 +916,14 @@ function menuToolBar (){
-
-
@@ -891,7 +933,8 @@ function menuToolBar (){ style="user-select: none;">
- +
@@ -907,15 +950,15 @@ function menuToolBar (){ style="user-select: none;">
-
-
+
-
@@ -925,7 +968,8 @@ function menuToolBar (){ style="user-select: none;">
- +
@@ -941,20 +985,20 @@ function menuToolBar (){ style="user-select: none;">
-
-
-
@@ -967,20 +1011,20 @@ function menuToolBar (){ style="user-select: none;">
-
-
-
@@ -993,15 +1037,15 @@ function menuToolBar (){ style="user-select: none;">
-
-
+
-
@@ -1010,7 +1054,7 @@ function menuToolBar (){
-
@@ -1024,13 +1068,13 @@ function menuToolBar (){ style="user-select: none;">
-
-
@@ -1039,7 +1083,7 @@ function menuToolBar (){
-
@@ -1053,13 +1097,13 @@ function menuToolBar (){ style="user-select: none;">
-
-
@@ -1068,7 +1112,7 @@ function menuToolBar (){
-
@@ -1082,13 +1126,13 @@ function menuToolBar (){ style="user-select: none;">
-
-
@@ -1097,7 +1141,7 @@ function menuToolBar (){
-
@@ -1111,85 +1155,93 @@ function menuToolBar (){ style="user-select: none;">
-
-
+
+ data-tips="${toolbar.insertImage}" id="luckysheet-insertImg-btn-title" role="button" style="user-select: none;">
-
- - - ${toolbar.freezeTopRow} +
+ +
-
-
+
-
+
+ +
-
-
-
-
+
+
-
-
- +
-
+
-
-
+
-
- -
-
+ style="user-select: none;"> +
+ +
+
+
-
-
@@ -1206,68 +1258,133 @@ function menuToolBar (){ style="user-select: none;">
-
-
-
+
+
- ${toolbar.conditionalFormat} +
+ +
-
+
+
+
+
+
+
-
+
+
+
+
+ +
+
+
+
+
+
+
-
- ${toolbar.postil} + +
+
-
-
- - ${toolbar.pivotTable} -
-
- - - ${toolbar.chart} +
+
+
+
+
+ +
+
+
+
-
- - - ${toolbar.screenshot} +
+
+
+
+
+ +
+
+
+
-
- - - ${toolbar.splitColumn} +
+
+
+ +
+ +
+
+
+
+
-
- ${toolbar.insertImage} - -
`; + `; } const luckysheetlodingHTML = function(){ @@ -1379,6 +1496,42 @@ const luckysheetdefaultFont = function(){ const luckysheet_CFiconsImg = new Image(); luckysheet_CFiconsImg.src = "data:image/png;base64,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"; +const iconfontObjects = { + border:{ + 'border-top': ' iconfont icon-shangbiankuang', + 'border-bottom': ' iconfont icon-xiabiankuang', + 'border-left': ' iconfont icon-zuobiankuang', + 'border-right': ' iconfont icon-youbiankuang', + 'border-none': ' iconfont icon-wubiankuang', + 'border-all': ' iconfont icon-quanjiabiankuang', + 'border-outside': ' iconfont icon-sizhoujiabiankuang', + 'border-inside': ' iconfont icon-shangbiankuang', + 'border-horizontal': ' iconfont icon-shangbiankuang', + 'border-vertical': ' iconfont icon-shangbiankuang', + }, + align:{ + 'left': ' iconfont icon-wenbenzuoduiqi', + 'center': ' iconfont icon-wenbenjuzhongduiqi', + 'right': ' iconfont icon-wenbenyouduiqi', + 'top': ' iconfont icon-dingbuduiqi', + 'middle': ' iconfont icon-shuipingduiqi', + 'bottom': ' iconfont icon-dibuduiqi', + }, + textWrap:{ + 'overflow': ' iconfont icon-yichu', + 'wrap': ' iconfont icon-zidonghuanhang', + 'clip': ' iconfont icon-jieduan', + }, + rotation:{ + 'none': ' iconfont icon-wuxuanzhuang', + 'angleup': ' iconfont icon-xiangshangqingxie', + 'angledown': ' iconfont icon-xiangxiaqingxie', + 'vertical': ' iconfont icon-shupaiwenzi', + 'rotation-up': ' iconfont icon-xiangshang90', + 'rotation-down': ' iconfont icon-xiangxia90', + } +} + export { gridHTML, columeHeader_word, @@ -1408,5 +1561,6 @@ export { keycode, luckysheetdefaultstyle, luckysheet_CFiconsImg, - luckysheetdefaultFont + luckysheetdefaultFont, + iconfontObjects } \ No newline at end of file diff --git a/src/controllers/freezen.js b/src/controllers/freezen.js index 155dd85..3b69887 100644 --- a/src/controllers/freezen.js +++ b/src/controllers/freezen.js @@ -119,9 +119,27 @@ const luckysheetFreezen = { _this.freezenverticaldata = freezenverticaldata; - - - $("#luckysheet-freezen-btn-horizontal").html(' '+locale().freezen.freezenCancel); + // $("#luckysheet-freezen-btn-horizontal").html(' '+locale().freezen.freezenCancel); + + // 解决freeze 不垂直居中的问题 + const freezeHTML = ` +
+
+
+ +
+
+ ${locale().freezen.freezenCancel} +
+
+
+ ` + $("#luckysheet-freezen-btn-horizontal").html(freezeHTML); $("#luckysheet-freezebar-vertical").show().find(".luckysheet-freezebar-vertical-handle").css({ "left": left }).end().find(".luckysheet-freezebar-vertical-drop").css({ "left": left }); }, @@ -276,9 +294,29 @@ const luckysheetFreezen = { cancelFreezenHorizontal: function (sheetIndex) { let _this = this; - + // $("#luckysheet-freezen-btn-horizontal").html(' '+locale().freezen.default); + + // 解决freeze 不垂直居中的问题 + const freezeHTML = ` +
+
+
+ +
+
+ ${locale().freezen.default} +
+
+
+ ` + + $("#luckysheet-freezen-btn-horizontal").html(freezeHTML); - $("#luckysheet-freezen-btn-horizontal").html(' '+locale().freezen.default); _this.freezenhorizontaldata = null; let ishorizontal = $("#luckysheet-freezebar-horizontal").is(":visible"); $("#luckysheet-freezebar-horizontal").hide(); @@ -352,7 +390,30 @@ const luckysheetFreezen = { _this.freezenhorizontaldata = freezenhorizontaldata; - $("#luckysheet-freezen-btn-horizontal").html(' '+locale().freezen.freezenCancel); + // $("#luckysheet-freezen-btn-horizontal").html(' '+locale().freezen.freezenCancel); + + // $("#luckysheet-freezen-btn-horizontal").html(' '+locale().freezen.freezenCancel); + + const freezeHTML = ` +
+
+
+ +
+
+ ${locale().freezen.freezenCancel} +
+
+
+ ` + + $("#luckysheet-freezen-btn-horizontal").html(freezeHTML); + $("#luckysheet-freezebar-horizontal").show().find(".luckysheet-freezebar-horizontal-handle").css({ "top": top }).end().find(".luckysheet-freezebar-horizontal-drop").css({ "top": top }); }, createAssistCanvas: function(){ diff --git a/src/controllers/handler.js b/src/controllers/handler.js index 26bdda1..898ba8c 100644 --- a/src/controllers/handler.js +++ b/src/controllers/handler.js @@ -4365,15 +4365,16 @@ export default function luckysheetHandler() { } }); - //toolbar菜单 - $("#" + Store.container + " .luckysheet-wa-editor").on("click", ".luckysheet-toolbar-zoom-combobox", function (e) { - $(e.currentTarget).addClass("luckysheet-toolbar-combo-button-open"); - $(e.currentTarget).find(".luckysheet-toolbar-combo-button-input").focus(); - }); - - $("#" + Store.container + " .luckysheet-wa-editor").on("blur", ".luckysheet-toolbar-combo-button-input", function (e) { - $(e.currentTarget).closest(".luckysheet-toolbar-zoom-combobox").removeClass("luckysheet-toolbar-combo-button-open"); - }); + // 点击设置字体大小的下拉箭头,把自动聚焦输入框去除(认为下拉设置字体大小,不需要聚焦输入框) + // //toolbar菜单 + // $("#" + Store.container + " .luckysheet-wa-editor").on("click", ".luckysheet-toolbar-zoom-combobox", function (e) { + // $(e.currentTarget).addClass("luckysheet-toolbar-combo-button-open"); + // $(e.currentTarget).find(".luckysheet-toolbar-combo-button-input").focus(); + // }); + + // $("#" + Store.container + " .luckysheet-wa-editor").on("blur", ".luckysheet-toolbar-combo-button-input", function (e) { + // $(e.currentTarget).closest(".luckysheet-toolbar-zoom-combobox").removeClass("luckysheet-toolbar-combo-button-open"); + // }); //表格格式处理 menuButton.initialMenuButton(); diff --git a/src/controllers/menuButton.js b/src/controllers/menuButton.js index 56ef056..81efbdc 100644 --- a/src/controllers/menuButton.js +++ b/src/controllers/menuButton.js @@ -1,5 +1,5 @@ import { selectionCopyShow, selectIsOverlap } from './select'; -import { luckyColor } from './constant'; +import { luckyColor, iconfontObjects } from './constant'; import luckysheetMoreFormat from './moreFormat'; import alternateformat from './alternateformat'; import conditionformat from './conditionformat'; @@ -785,7 +785,7 @@ const menuButton = { //字体大小 let luckysheet_fs_setTimeout = null; - $("#luckysheet-icon-font-size").click(function(){ + $("#luckysheet-icon-font-size").click(function(e){ let menuButtonId = $(this).attr("id") + "-menuButton"; let $menuButton = $("#" + menuButtonId); @@ -939,23 +939,26 @@ const menuButton = { const locale_toolbar = _locale.toolbar; const locale_button = _locale.button; let itemdata = [ - {"text": locale_border.borderTop, "value": "border-top", "example": '
'}, - {"text": locale_border.borderBottom, "value":"border-bottom", "example": '
'}, - {"text": locale_border.borderLeft, "value":"border-left", "example": '
'}, - {"text": locale_border.borderRight, "value":"border-right", "example": '
'}, + {"text": locale_border.borderTop, "value": "border-top", "example": '
'}, + {"text": locale_border.borderBottom, "value":"border-bottom", "example": '
'}, + {"text": locale_border.borderLeft, "value":"border-left", "example": '
'}, + {"text": locale_border.borderRight, "value":"border-right", "example": '
'}, {"text": "", "value": "split", "example":""}, - {"text": locale_border.borderNone, "value": "border-none", "example": '
'}, - {"text": locale_border.borderAll, "value": "border-all", "example": '
'}, - {"text": locale_border.borderOutside, "value": "border-outside", "example": '
'}, + {"text": locale_border.borderNone, "value": "border-none", "example": '
'}, + {"text": locale_border.borderAll, "value": "border-all", "example": '
'}, + {"text": locale_border.borderOutside, "value": "border-outside", "example": '
'}, {"text": "", "value": "split", "example": ""}, - {"text": locale_border.borderInside, "value": "border-inside", "example": '
'}, - {"text": locale_border.borderHorizontal, "value": "border-horizontal", "example": '
'}, - {"text": locale_border.borderVertical, "value": "border-vertical", "example": '
'}, + {"text": locale_border.borderInside, "value": "border-inside", "example": '
'}, + {"text": locale_border.borderHorizontal, "value": "border-horizontal", "example": '
'}, + {"text": locale_border.borderVertical, "value": "border-vertical", "example": '
'}, {"text": "", "value": "split", "example": ""}, {"text": ""+ locale_border.borderColor +"", "value":"borderColor", "example":"more"}, {"text": ""+ locale_border.borderSize +"", "value":"borderSize", "example":"more"} ]; + // itemvalue to iconfont + const iconfontObject = iconfontObjects.border; + let itemset = _this.createButtonMenu(itemdata); let menu = replaceHtml(_this.menu, { "id": "border-menu", "item": itemset, "subclass": "", "sub": "" }); @@ -1016,7 +1019,8 @@ const menuButton = { _this.focus($("#" + submenuid), itemvalue); }); - + + // border choose menu $menuButton.find(".luckysheet-cols-menuitem").click(function(){ $menuButton.hide(); luckysheetContainerFocus(); @@ -1081,7 +1085,9 @@ const menuButton = { $("#luckysheet-icon-border-all").attr("type", itemvalue); let $icon = $("#luckysheet-icon-border-all").find(".luckysheet-icon-img-container"); - $icon.removeAttr("class").addClass("luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-" + itemvalue); + + // add iconfont + $icon.removeAttr("class").addClass("luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-" + itemvalue + iconfontObject[itemvalue]); _this.focus($menuButton, itemvalue); }); @@ -1295,11 +1301,14 @@ const menuButton = { const _locale = locale(); const locale_align = _locale.align; let itemdata = [ - {"text": locale_align.left, "value": "left", "example": '
'}, - {"text": locale_align.center, "value": "center", "example": '
'}, - {"text": locale_align.right, "value": "right", "example": '
'} + {"text": locale_align.left, "value": "left", "example": '
'}, + {"text": locale_align.center, "value": "center", "example": '
'}, + {"text": locale_align.right, "value": "right", "example": '
'} ]; + // itemvalue to iconfont + const iconfontObject = iconfontObjects.align; + let itemset = _this.createButtonMenu(itemdata); let menu = replaceHtml(_this.menu, { "id": "align-menu", "item": itemset, "subclass": "", "sub": "" }); @@ -1316,7 +1325,9 @@ const menuButton = { _this.focus($menuButton, itemvalue); let $icon = $("#luckysheet-icon-align").attr("type", itemvalue).find(".luckysheet-icon-img-container"); - $icon.removeAttr("class").addClass("luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-align-" + itemvalue); + + // add iconfont + $icon.removeAttr("class").addClass("luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-align-" + itemvalue + iconfontObject[itemvalue]); let d = editor.deepCopyFlowData(Store.flowdata); _this.updateFormat(d, "ht", itemvalue); @@ -1351,11 +1362,14 @@ const menuButton = { const locale_align = _locale.align; if($menuButton.length == 0){ let itemdata = [ - {"text": locale_align.top, "value": "top", "example": '
'}, - {"text": locale_align.middle, "value": "middle", "example": '
'}, - {"text": locale_align.bottom, "value": "bottom", "example": '
'} + {"text": locale_align.top, "value": "top", "example": '
'}, + {"text": locale_align.middle, "value": "middle", "example": '
'}, + {"text": locale_align.bottom, "value": "bottom", "example": '
'} ]; + // itemvalue to iconfont + const iconfontObject = iconfontObjects.align; + let itemset = _this.createButtonMenu(itemdata); let menu = replaceHtml(_this.menu, { "id": "valign-menu", "item": itemset, "subclass": "", "sub": "" }); @@ -1372,7 +1386,9 @@ const menuButton = { _this.focus($menuButton, itemvalue); let $icon = $("#luckysheet-icon-valign").attr("type", itemvalue).find(".luckysheet-icon-img-container"); - $icon.removeAttr("class").addClass("luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-valign-" + itemvalue); + + // add iconfont + $icon.removeAttr("class").addClass("luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-valign-" + itemvalue + iconfontObject[itemvalue]); let d = editor.deepCopyFlowData(Store.flowdata); _this.updateFormat(d, "vt", itemvalue); @@ -1398,11 +1414,14 @@ const menuButton = { const _locale = locale(); const locale_textWrap = _locale.textWrap; let itemdata = [ - {"text": locale_textWrap.overflow, "value": "overflow", "example": '
'}, - {"text": locale_textWrap.wrap, "value": "wrap", "example": '
'}, - {"text": locale_textWrap.clip, "value": "clip", "example": '
'} + {"text": locale_textWrap.overflow, "value": "overflow", "example": '
'}, + {"text": locale_textWrap.wrap, "value": "wrap", "example": '
'}, + {"text": locale_textWrap.clip, "value": "clip", "example": '
'} ]; + // itemvalue to iconfont + const iconfontObject = iconfontObjects.textWrap; + let itemset = _this.createButtonMenu(itemdata); let menu = replaceHtml(_this.menu, { "id": "textwrap-menu", "item": itemset, "subclass": "", "sub": "" }); @@ -1419,7 +1438,9 @@ const menuButton = { _this.focus($menuButton, itemvalue); let $icon = $("#luckysheet-icon-textwrap").attr("type", itemvalue).find(".luckysheet-icon-img-container"); - $icon.removeAttr("class").addClass("luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-textwrap-" + itemvalue); + + // add iconfont + $icon.removeAttr("class").addClass("luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-textwrap-" + itemvalue + iconfontObject[itemvalue]); let d = editor.deepCopyFlowData(Store.flowdata); _this.updateFormat(d, "tb", itemvalue); @@ -1445,20 +1466,25 @@ const menuButton = { const _locale = locale(); const locale_rotation = _locale.rotation; let itemdata = [ - {"text": locale_rotation.none, "value": "none", "example": '
'}, - {"text": locale_rotation.angleup, "value": "angleup", "example": '
'}, - {"text": locale_rotation.angledown, "value": "angledown", "example": '
'}, - {"text": locale_rotation.vertical, "value": "vertical", "example": '
'}, - {"text": locale_rotation.rotationUp, "value": "rotation-up", "example": '
'}, - {"text": locale_rotation.rotationDown, "value": "rotation-down", "example": '
'}, + {"text": locale_rotation.none, "value": "none", "example": '
'}, + {"text": locale_rotation.angleup, "value": "angleup", "example": '
'}, + {"text": locale_rotation.angledown, "value": "angledown", "example": '
'}, + {"text": locale_rotation.vertical, "value": "vertical", "example": '
'}, + {"text": locale_rotation.rotationUp, "value": "rotation-up", "example": '
'}, + {"text": locale_rotation.rotationDown, "value": "rotation-down", "example": '
'}, ]; + // itemvalue to iconfont + const iconfontObject = iconfontObjects.rotation; + let itemset = _this.createButtonMenu(itemdata); let menu = replaceHtml(_this.menu, { "id": "rotation-menu", "item": itemset, "subclass": "", "sub": "" }); $("body").append(menu); - $menuButton = $("#" + menuButtonId).width(150); + + // 文字旋转总 Stack Vertically 太长了,拉宽到160 + $menuButton = $("#" + menuButtonId).width(160); _this.focus($menuButton); $menuButton.find(".luckysheet-cols-menuitem").click(function(){ @@ -1469,7 +1495,9 @@ const menuButton = { _this.focus($menuButton, itemvalue); let $icon = $("#luckysheet-icon-rotation").attr("type", itemvalue).find(".luckysheet-icon-img-container"); - $icon.removeAttr("class").addClass("luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-rotation-" + itemvalue); + + // add iconfont + $icon.removeAttr("class").addClass("luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-rotation-" + itemvalue + iconfontObject[itemvalue]); let d = editor.deepCopyFlowData(Store.flowdata); _this.updateFormat(d, "tr", itemvalue); @@ -1765,12 +1793,12 @@ const menuButton = { const locale_sort = _locale.sort; const locale_filter = _locale.filter; let itemdata = [ - {"text": locale_sort.asc, "value": "asc", "example": ''}, - {"text": locale_sort.desc, "value": "desc", "example": ''}, - {"text": locale_sort.custom+"...", "value": "diysort", "example": ''}, + {"text": locale_sort.asc, "value": "asc", "example": ''}, + {"text": locale_sort.desc, "value": "desc", "example": ''}, + {"text": locale_sort.custom+"...", "value": "diysort", "example": ''}, {"text": "", "value": "split", "example": ""}, - {"text": locale_filter.filter, "value": "filter", "example": ''}, - {"text": locale_filter.clearFilter, "value": "clearfilter", "example": ''} + {"text": locale_filter.filter, "value": "filter", "example": ''}, + {"text": locale_filter.clearFilter, "value": "clearfilter", "example": ''} ]; let itemset = _this.createButtonMenu(itemdata); @@ -1827,11 +1855,11 @@ const menuButton = { const locale_findAndReplace = _locale.findAndReplace; if($menuButton.length == 0){ let itemdata = [ - {"text": locale_findAndReplace.find+" ...", "value": "search", "example": ''}, - {"text": locale_findAndReplace.replace+" ...", "value": "replace", "example": ''}, - {"text": locale_findAndReplace.goto+" ...", "value": "goto", "example": ''}, + {"text": locale_findAndReplace.find+" ...", "value": "search", "example": ''}, + {"text": locale_findAndReplace.replace+" ...", "value": "replace", "example": ''}, + {"text": locale_findAndReplace.goto+" ...", "value": "goto", "example": ''}, {"text": "", "value": "split", "example": ""}, - {"text": locale_findAndReplace.location+" ...", "value": "location", "example": ''}, + {"text": locale_findAndReplace.location+" ...", "value": "location", "example": ''}, {"text": locale_findAndReplace.formula, "value": "locationFormula", "example": locale_findAndReplace.locationExample}, {"text": locale_findAndReplace.date, "value": "locationConstantDate", "example": locale_findAndReplace.locationExample}, {"text": locale_findAndReplace.number, "value": "locationConstantNumber", "example": locale_findAndReplace.locationExample}, @@ -3246,8 +3274,11 @@ const menuButton = { _this.focus($menuButton, itemvalue); + // add iconfont + const iconfontObject = iconfontObjects.align; + let $icon = $("#luckysheet-icon-align").attr("type", itemvalue).find(".luckysheet-icon-img-container"); - $icon.removeAttr("class").addClass("luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-align-" + itemvalue); + $icon.removeAttr("class").addClass("luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-align-" + itemvalue + iconfontObject[itemvalue]); $menuButton.hide(); } else if(attr == "vt"){ @@ -3263,8 +3294,11 @@ const menuButton = { _this.focus($menuButton, itemvalue); + // add iconfont + const iconfontObject = iconfontObjects.align; + let $icon = $("#luckysheet-icon-valign").attr("type", itemvalue).find(".luckysheet-icon-img-container"); - $icon.removeAttr("class").addClass("luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-valign-" + itemvalue); + $icon.removeAttr("class").addClass("luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-valign-" + itemvalue + iconfontObject[itemvalue]); $menuButton.hide(); } else if(attr == "tb"){ @@ -3280,8 +3314,11 @@ const menuButton = { _this.focus($menuButton, itemvalue); + // add iconfont + const iconfontObject = iconfontObjects.textWrap; + let $icon = $("#luckysheet-icon-textwrap").attr("type", itemvalue).find(".luckysheet-icon-img-container"); - $icon.removeAttr("class").addClass("luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-textwrap-" + itemvalue); + $icon.removeAttr("class").addClass("luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-textwrap-" + itemvalue + iconfontObject[itemvalue]); $menuButton.hide(); } else if(attr == "tr"){ @@ -3306,8 +3343,11 @@ const menuButton = { _this.focus($menuButton, itemvalue); + // add iconfont + const iconfontObject = iconfontObjects.rotation; + let $icon = $("#luckysheet-icon-rotation").attr("type", itemvalue).find(".luckysheet-icon-img-container"); - $icon.removeAttr("class").addClass("luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-rotation-" + itemvalue); + $icon.removeAttr("class").addClass("luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-rotation-" + itemvalue + iconfontObject[itemvalue]); $menuButton.hide(); } } diff --git a/src/controllers/resize.js b/src/controllers/resize.js index e8414e3..bbd04cb 100644 --- a/src/controllers/resize.js +++ b/src/controllers/resize.js @@ -14,7 +14,7 @@ export default function luckysheetsizeauto(isRefreshCanvas=true) { $("#luckysheet_info_detail").hide(); } else { - Store.infobarHeight = 30; + Store.infobarHeight = 56; $("#luckysheet_info_detail").show(); } @@ -24,7 +24,7 @@ export default function luckysheetsizeauto(isRefreshCanvas=true) { } else { $("#" + Store.container).find(".luckysheet-wa-editor, .luckysheet-share-logo").show(); - Store.toolbarHeight = 61; + Store.toolbarHeight = 72; } if (!luckysheetConfigsetting.showsheetbar) { @@ -33,7 +33,7 @@ export default function luckysheetsizeauto(isRefreshCanvas=true) { } else { $("#" + Store.container).find("#luckysheet-sheet-area").show(); - Store.sheetBarHeight = 27; + Store.sheetBarHeight = 31; } if (!luckysheetConfigsetting.showstatisticBar) { @@ -72,31 +72,82 @@ export default function luckysheetsizeauto(isRefreshCanvas=true) { const locale_toolbar = _locale.toolbar; let ismore = false, toolbarW = 0, - morebtn = '
'+ locale_toolbar.toolMore +'...
', - morediv = '
'; + // morebtn = '
'+ locale_toolbar.toolMore +'...
', + morebtn = `
+
+
+ +
+ ${locale_toolbar.toolMore} +
+
+
+ +
+
+
`, + morediv = '
'; if($("#luckysheet-icon-morebtn-div").length == 0){ $("body").append(morediv); } $("#luckysheet-icon-morebtn-div").hide(); - $("#luckysheet-icon-morebtn-div > div").appendTo($("#luckysheet-wa-editor")); + // $("#luckysheet-icon-morebtn-div > div").appendTo($("#luckysheet-wa-editor")); + + $("#luckysheet-icon-morebtn-div > div").each(function(){ + const $t = $(this)[0]; + const $container = $("#luckysheet-wa-editor")[0]; + + $container.appendChild(document.createTextNode(" ")); + $container.appendChild($t); + }); + // $("#luckysheet-wa-editor > div").trigger("create"); // $("#luckysheet-icon-morebtn-div > div").trigger("create"); - $("#luckysheet-icon-morebtn").prev().remove().end().remove(); + $("#luckysheet-icon-morebtn").remove(); + + //计算前面按钮宽度加起来总和,超过 容器宽度-更多按钮,则剩下的按钮移动到展开的容器内,这种方式计算宽度不准确,且会导致下拉箭头和主按钮分离的情况,改为 计算left作为宽度依据,和容器宽度比较的方式 + // $("#luckysheet-wa-editor > div").each(function(){ + // let $t = $(this); + // // toolbarW += $t.outerWidth(); + // toolbarW += $t.outerWidth(); - $("#luckysheet-wa-editor > div").each(function(){ - let $t = $(this); - toolbarW += $t.outerWidth(); + // if(!ismore && toolbarW > gridW - 140){ + // ismore = true; + // } - if(!ismore && toolbarW > gridW - 140){ + // if(ismore){ + // $("#luckysheet-icon-morebtn-div").append($(this)); + // } + // }); + + // 所有按钮宽度与元素定位 + const toobarWidths = Store.toobarObject.toobarWidths; + const toobarElements = Store.toobarObject.toobarElements; + let moreButtonIndex = 0; + + // 找到应该隐藏的起始元素位置 + for (let index = toobarWidths.length - 1; index >= 0; index--) { + if(toobarWidths[index] < gridW - 90){ + moreButtonIndex = index; ismore = true; + break; } + } - if(ismore){ - $("#luckysheet-icon-morebtn-div").append($(this)); + // 从起始位置开始,后面的元素统一挪到下方隐藏DIV中 + for (let index = moreButtonIndex; index < toobarElements.length; index++) { + const element = toobarElements[index]; + if(element instanceof Array){ + for(const ele of element){ + $("#luckysheet-icon-morebtn-div").append($(`${ele}`)); + } + }else{ + $("#luckysheet-icon-morebtn-div").append($(`${element}`)); } - }); + + } if(ismore){ @@ -107,19 +158,49 @@ export default function luckysheetsizeauto(isRefreshCanvas=true) { let $txt = $(this).find(".luckysheet-toolbar-menu-button-caption"); if($txt.text().indexOf(locale_toolbar.toolMore) > -1){ - $(this).find(".luckysheet-toolbar-menu-button-caption").html(' '+ locale_toolbar.toolClose +'... '); + + const toolCloseHTML = ` +
+ ${locale_toolbar.toolClose} +
+
+
+ ` + $(this).find(".luckysheet-toolbar-button-inner-box").html(toolCloseHTML); } else{ - $(this).find(".luckysheet-toolbar-menu-button-caption").html(' '+ locale_toolbar.toolMore +'... '); + + const toolMoreHTML = ` +
+ ${locale_toolbar.toolMore} +
+
+
+ ` + + $(this).find(".luckysheet-toolbar-button-inner-box").html(toolMoreHTML); } }); //$("#luckysheet-wa-editor div").trigger("create"); - $("#luckysheet-icon-morebtn-div .luckysheet-toolbar-menu-button").css("margin-right", -1); - $("#luckysheet-icon-morebtn-div .luckysheet-toolbar-button-split-left").css("margin-right", -3); - } + // $("#luckysheet-icon-morebtn-div .luckysheet-toolbar-menu-button").css("margin-right", -1); + // $("#luckysheet-icon-morebtn-div .luckysheet-toolbar-button-split-left").css("margin-right", -3); + + // “更多”容器中,联动hover效果 + $("#luckysheet-icon-morebtn-div .luckysheet-toolbar-button-split-left").off("hover").hover(function(){ + $(this).next(".luckysheet-toolbar-button-split-right").addClass("luckysheet-toolbar-button-split-right-hover"); + }, function(){ + $(this).next(".luckysheet-toolbar-button-split-right").removeClass("luckysheet-toolbar-button-split-right-hover"); + }); + $("#luckysheet-icon-morebtn-div .luckysheet-toolbar-button-split-right").off("hover").hover(function(){ + $(this).prev(".luckysheet-toolbar-button-split-left").addClass("luckysheet-toolbar-button-hover"); + }, function(){ + $(this).prev(".luckysheet-toolbar-button-split-left").removeClass("luckysheet-toolbar-button-hover"); + }); + } + $("#"+ Store.container + " .luckysheet-wa-editor .luckysheet-toolbar-button-split-left").off("hover").hover(function(){ $(this).next(".luckysheet-toolbar-button-split-right").addClass("luckysheet-toolbar-button-split-right-hover"); }, function(){ @@ -156,7 +237,7 @@ export function changeSheetContainerSize(gridW, gridH){ $("#luckysheet-scrollbar-x").height(Store.cellMainSrollBarSize); $("#luckysheet-scrollbar-y").width(Store.cellMainSrollBarSize); - $("#luckysheet-scrollbar-x").width(Store.cellmainWidth).css("left", Store.rowHeaderWidth - 1); + $("#luckysheet-scrollbar-x").width(Store.cellmainWidth).css("left", Store.rowHeaderWidth - 2); Store.luckysheetTableContentHW = [ Store.cellmainWidth + Store.rowHeaderWidth - Store.cellMainSrollBarSize, @@ -188,4 +269,80 @@ export function changeSheetContainerSize(gridW, gridH){ .css({ "height": gridheight - 10 }); luckysheetFreezen.createAssistCanvas(); +} + +/** + * 统计工具栏各个按钮宽度值,用于计算哪些需要放到 更多按钮里 + */ +export function menuToolBarWidth() { + const toobarObject = Store.toobarObject; + toobarObject.toobarWidths= [ + $('#luckysheet-icon-undo').offset().left, + $('#luckysheet-icon-redo').offset().left, + $('#luckysheet-icon-paintformat').offset().left, + $('#luckysheet-icon-currency').offset().left, + $('#luckysheet-icon-percent').offset().left, + $('#luckysheet-icon-fmt-decimal-decrease').offset().left, + $('#luckysheet-icon-fmt-decimal-increase').offset().left, + $('#luckysheet-icon-fmt-other').offset().left, + $('#luckysheet-icon-font-family').offset().left, + $('#luckysheet-icon-font-size').offset().left, + $('#luckysheet-icon-bold').offset().left, + $('#luckysheet-icon-italic').offset().left, + $('#luckysheet-icon-strikethrough').offset().left, + $('#luckysheet-icon-text-color').offset().left, + $('#luckysheet-icon-cell-color').offset().left, + $('#luckysheet-icon-border-all').offset().left, + $('#luckysheet-icon-merge-button').offset().left, + $('#luckysheet-icon-align').offset().left, + $('#luckysheet-icon-valign').offset().left, + $('#luckysheet-icon-textwrap').offset().left, + $('#luckysheet-icon-rotation').offset().left, + $('#luckysheet-insertImg-btn-title').offset().left, + $('#luckysheet-chart-btn-title').offset().left, + $('#luckysheet-icon-postil').offset().left, + $('#luckysheet-pivot-btn-title').offset().left, + $('#luckysheet-icon-function').offset().left, + $('#luckysheet-freezen-btn-horizontal').offset().left, + $('#luckysheet-icon-autofilter').offset().left, + $('#luckysheet-icon-conditionformat').offset().left, + $('#luckysheet-splitColumn-btn-title').offset().left, + $('#luckysheet-chart-btn-screenshot').offset().left, + $('#luckysheet-icon-seachmore').offset().left, + $('#luckysheet-icon-seachmore').offset().left + $('#luckysheet-icon-seachmore').outerWidth() + 5, + ]; + toobarObject.toobarElements = [ + '#luckysheet-icon-undo', + '#luckysheet-icon-redo', + ['#luckysheet-icon-paintformat','#toolbar-separator-paint-format'], + '#luckysheet-icon-currency', + '#luckysheet-icon-percent', + '#luckysheet-icon-fmt-decimal-decrease', + '#luckysheet-icon-fmt-decimal-increase', + ['#luckysheet-icon-fmt-other','#toolbar-separator-more-format'], + ['#luckysheet-icon-font-family','#toolbar-separator-font-family'], + ['#luckysheet-icon-font-size','#toolbar-separator-font-size'], + '#luckysheet-icon-bold', + '#luckysheet-icon-italic', + '#luckysheet-icon-strikethrough', + ['#luckysheet-icon-text-color','#luckysheet-icon-text-color-menu','#toolbar-separator-text-color'], + ['#luckysheet-icon-cell-color','#luckysheet-icon-cell-color-menu'], + ['#luckysheet-icon-border-all','#luckysheet-icon-border-menu'], + ['#luckysheet-icon-merge-button','#luckysheet-icon-merge-menu','#toolbar-separator-merge-cell'], + ['#luckysheet-icon-align','#luckysheet-icon-align-menu'], + ['#luckysheet-icon-valign','#luckysheet-icon-valign-menu'], + ['#luckysheet-icon-textwrap','#luckysheet-icon-textwrap-menu'], + ['#luckysheet-icon-rotation','#luckysheet-icon-rotation-menu','#toolbar-separator-text-rotate'], + '#luckysheet-insertImg-btn-title', + '#luckysheet-chart-btn-title', + '#luckysheet-icon-postil', + ['#luckysheet-pivot-btn-title','#toolbar-separator-pivot-table'], + ['#luckysheet-icon-function','#luckysheet-icon-function-menu'], + ['#luckysheet-freezen-btn-horizontal','#luckysheet-icon-freezen-menu'], + '#luckysheet-icon-autofilter', + '#luckysheet-icon-conditionformat', + '#luckysheet-splitColumn-btn-title', + '#luckysheet-chart-btn-screenshot', + '#luckysheet-icon-seachmore' + ] } \ No newline at end of file diff --git a/src/css/iconCustom.css b/src/css/iconCustom.css new file mode 100644 index 0000000..5a1fcbd --- /dev/null +++ b/src/css/iconCustom.css @@ -0,0 +1,66 @@ +.luckysheet-icon-img-container.iconfont, +.luckysheet-submenu-arrow .iconfont +{ + font-size: 24px; +} + +.luckysheet-toolbar-menu-button .icon-xiayige, +.luckysheet-toolbar-combo-button .icon-xiayige +{ + font-size: 12px; + top: -8px; + left: -3px; +} + +.luckysheet-toolbar-select .icon-xiayige{ + margin-right: 4px; +} + +#luckysheet-icon-morebtn{ + position: absolute; + right: 30px; +} + + +.toolbar .luckysheet-icon-text-color, +.toolbar .luckysheet-icon-cell-color, +.toolbar .luckysheet-icon-border-all, +.toolbar .luckysheet-icon-valign, +.toolbar .luckysheet-icon-textwrap +{ + margin-right: -3px; +} + +.toolbar .luckysheet-icon-merge-button, +.toolbar .luckysheet-icon-align, +.toolbar .luckysheet-icon-rotation, +.toolbar .luckysheet-icon-function, +.toolbar .luckysheet-freezen-btn-horizontal +{ + margin-right: -4px; +} + +#luckysheet-icon-morebtn{ + padding: 0 13px 0 5px; +} +#luckysheet-icon-morebtn .iconfont{ + top:-9px; +} + + +/* custom common style */ + +.lucky-button-custom{ + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; +} +.lucky-button-custom:hover{ + background-color: #E1E4E8; +} + +#luckysheet-icon-morebtn-div{ + border-left: 1px solid rgb(212, 212, 212); + border-right: 1px solid rgb(212, 212, 212); +} diff --git a/src/css/luckysheet-core.css b/src/css/luckysheet-core.css index 04e461d..04f2ef6 100644 --- a/src/css/luckysheet-core.css +++ b/src/css/luckysheet-core.css @@ -45,7 +45,7 @@ top: 0px; margin: 0px; padding: 0 17px; - width: 100%; + /* width: 100%; */ height: 56px; display: flex; align-items: center; @@ -127,14 +127,18 @@ .luckysheet-wa-editor { height: 34px; - background: #f7f7f7; + /* background: #f7f7f7; */ + background: #fafafc; position: relative; - padding-left: 15px; + /* padding-left: 15px; */ + /* padding: 0px 0px 10px 15px; */ + padding: 7px 0px 3px 15px;; border-bottom: 1px solid #d4d4d4; white-space: nowrap; + transition: all 0.2s; } - +/* .luckysheet-wa-editor>div.luckysheetfulltoolbar { display: inline-block; height: 34px; @@ -161,13 +165,13 @@ -moz-box-shadow: inset 0 0 2px #727272; box-shadow: inset 0 0 2px #727272; cursor: pointer; -} +} */ /*toolbar菜单start*/ .luckysheet-toolbar-left-theme { width: 15px; - background: #0188fb; + /* background: #0188fb; */ /* 工具栏左边的蓝色背景 */ position: absolute; left: 0px; top: 1px; @@ -182,7 +186,6 @@ /*分隔符*/ .luckysheet-toolbar-separator { - height: 17px; line-height: normal; list-style: none; outline: none; @@ -190,10 +193,12 @@ padding: 0; text-decoration: none; width: 0; - height: 35px; + /* height: 35px; */ + height: 20px; vertical-align: top; border-left: 1px solid #e0e0e0; - margin: 0 1px; + /* margin: 0 1px; */ + margin: 5px 1px; } /*combo*/ @@ -216,7 +221,7 @@ font-weight: bold; text-decoration: none; cursor: default; - top: 2px; + /* top: 2px; */ height: 26px; line-height: 26px; vertical-align: inherit; @@ -275,13 +280,14 @@ padding: 0; } -.luckysheet-toolbar-combo-button-inner-box { +/* .luckysheet-toolbar-combo-button-inner-box { padding: 0 2px; margin: 0 1px; -} +} */ .luckysheet-toolbar-zoom-combobox .luckysheet-toolbar-combo-button-caption { - width: 48px !important; + /* width: 48px !important; */ + width: 36px !important; } .luckysheet-toolbar-combo-button-caption { @@ -300,7 +306,7 @@ overflow: hidden !important; color: rgba(0, 0, 0, .7); height: 22px !important; - width: 28px; + width: 22px; } .luckysheet-toolbar-combo-button-input:focus { @@ -318,11 +324,12 @@ border-top: 1px solid #c0c0c0; font-size: 13px; height: 25px; - padding: 1px 8px; + /* padding: 1px 8px; */ + padding: 1px 0px 1px 8px; } .luckysheet-toolbar-combo-button-dropdown { - background: url(arrow-down.png) center no-repeat; + /* background: url(arrow-down.png) center no-repeat; */ float: right; margin: 9px 0 0 0px; padding: 0 0 0 1px; @@ -342,9 +349,18 @@ .luckysheet-color-menu-button-indicator { position: relative; - border-bottom: 4px solid #f0f0f0; + /* border-bottom: 4px solid #f0f0f0; */ height: 20px; - border-bottom-color: transparent; + /* border-bottom-color: transparent; */ +} + +.luckysheet-color-menu-button-indicator .text-color-bar{ + position: absolute; + bottom: 0px; + background-color: #0081f9; + height: 3px; + width: 55%; + left: 25%; } .luckysheet-toolbar-button-inner-box .luckysheet-icon, @@ -364,7 +380,7 @@ } .luckysheet-toolbar-menu-button-dropdown { - background: url(arrow-down.png) center no-repeat; + /* background: url(arrow-down.png) center no-repeat; */ float: right; margin: 10px 2px 0 3px; padding: 0; @@ -383,9 +399,9 @@ padding: 0px 3px; } -.luckysheet-toolbar-select { +/* .luckysheet-toolbar-select { margin-left: 1px; -} +} */ /*split*/ .luckysheet-toolbar-button-split-left, @@ -423,15 +439,16 @@ padding: 0; list-style: none; font-size: 11px; - font-weight: bold; + /* font-weight: bold; */ text-decoration: none; vertical-align: middle; cursor: default; - margin: 3px -3px 0px 2px; + /* margin: 3px -3px 0px 2px; */ height: 26px; line-height: 26px; - color: rgba(0, 0, 0, .7); + /* color: rgba(0, 0, 0, .7); */ + color: #333; } .luckysheet-toolbar-button:hover, @@ -444,10 +461,6 @@ cursor: pointer; } -.luckysheet-toolbar-button-split-left { - margin-right: -6px; -} - .luckysheet-toolbar-button-split-right.luckysheet-toolbar-menu-button:hover { border-left-color: rgba(0, 0, 0, 0.12) !important; } @@ -489,18 +502,21 @@ .luckysheet-icon { direction: ltr; - text-align: left; + /* text-align: left; */ + text-align: center; overflow: hidden; vertical-align: middle; - height: 18px; - width: 18px; - margin: 1px 2px 2px 1px; - margin-top: 0px; - opacity: .54; + /* height: 18px; + width: 18px; */ + height: 26px; + width: 26px; + /* margin: 1px 2px 2px 1px; */ + margin: 2px; + /* opacity: .54; */ } -.luckysheet-icon-img { +/* .luckysheet-icon-img { background: url(menuSprite.svg); content: url(menuSprite.svg); } @@ -536,7 +552,7 @@ .luckysheet-icon-redo { left: 0; top: -1188px; -} +} .luckysheet-icon-paintformat { left: -90px; @@ -546,16 +562,16 @@ .luckysheet-icon-decimal-decrease { left: -36px; top: -1444px; -} +} */ -.toolbar-decimal-icon { +/* .toolbar-decimal-icon { margin-bottom: -4px; -} +} */ -.luckysheet-icon-decimal-increase { +/* .luckysheet-icon-decimal-increase { left: -36px; top: -1660px; -} +} */ #luckysheet-icon-font-family .luckysheet-toolbar-menu-button-caption { overflow: hidden; @@ -563,10 +579,11 @@ white-space: nowrap; width: 55px; margin-left: 1px; - text-align: left; + /* text-align: left; */ + text-align: center; } -.luckysheet-icon-bold { +/* .luckysheet-icon-bold { left: -18px; top: -186px; } @@ -745,7 +762,7 @@ .luckysheet-icon-line-type { left: 0; top: -126px; -} +} */ #luckysheet-icon-function .luckysheet-toolbar-menu-button-caption { @@ -978,34 +995,37 @@ right: 0; bottom: 0; left: 0; - background-color: #f6f6f6; + /* background-color: #f6f6f6; */ + background-color: #fafafc; color: #444; - height: 27px; - padding: 0; + height: 31px; + padding: 0 0 0 44px; margin: 0; -webkit-touch-callout: none; cursor: default; + transition: .3s ease all; } .luckysheet-sheet-area>div, .luckysheet-sheet-area .luckysheet-sheets-item { display: inline-block; - margin-right: 6px; + /* margin-right: 6px; margin-top: 1px; - padding: 1px 6px; + padding: 1px 6px; */ + padding: 6px 10px; } -.luckysheet-sheet-area .luckysheet-sheets-add { +/* .luckysheet-sheet-area .luckysheet-sheets-add { margin-left: 47px; -} +} */ -div.luckysheet-sheets-add, +/* div.luckysheet-sheets-add, div.luckysheet-sheets-m, div.luckysheet-sheets-scroll { background: #F6F6F6; border: 1px solid #F6F6F6; color: #4E4E4E; -} +} */ div.luckysheet-sheets-scroll { display: none; @@ -1078,29 +1098,43 @@ div.luckysheet-sheets-m:hover { .luckysheet-sheet-area div.luckysheet-sheets-item { padding: 2px 6px; - height: 18px; - line-height: 18px; - box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.3) inset; - background-color: #f7f7f7; - border-color: #000; - border-top-color: #aaa; - border-width: 0 1px 1px 1px; + height: 29px; + line-height: 29px; + /* box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.3) inset; */ + /* background-color: #f7f7f7; */ + background-color: #fafafc; + /* border-color: #000; */ + /* border-top-color: #aaa; */ + /* border-width: 0 1px 1px 1px; */ color: #676464; min-width: 30px; top: 0px; position: relative; - border-radius: 0 0 2px 2px; - margin-right: 1px; + /* border-radius: 0 0 2px 2px; */ + margin-right: -1px; cursor: pointer; - border-bottom: 1px solid #cacaca; + /* border-bottom: 1px solid #cacaca; */ transition: all 0.1s; - padding-right: 20px; + /* padding-right: 20px; */ font-size: 13px; + + padding: 2px 19px 0px 5px; + box-sizing: border-box; + border-left: 1px solid #e0e0e0; + border-bottom: 1px solid #e0e0e0; + border-right: 1px solid #e0e0e0; + /* display:flex; + justify-content: center; + align-items: center; + height: 100%; */ } +.luckysheet-sheet-area div.luckysheet-sheets-item:last-child{ + margin-right: 1px; +} .luckysheet-sheet-area div.luckysheet-sheets-item:hover { background-color: #EFEFEF; - border-color: #a5a5a5; + /* border-color: #a5a5a5; */ color: #490500; } @@ -1129,7 +1163,8 @@ div.luckysheet-sheets-m:hover { .luckysheet-sheet-area div.luckysheet-sheets-item .luckysheet-sheets-item-name[contenteditable="true"] { border: 1px solid #d9d9d9; display: inline-block; - height: 16px; + height: 18px; + line-height: 18px; min-width: 8px; margin: -4px -1px; -moz-user-modify: read-write-plaintext-only; @@ -1148,23 +1183,23 @@ div.luckysheet-sheets-m:hover { } .luckysheet-sheet-area div.luckysheet-sheets-item-active { - padding: 2px 8px; - height: 20px; - /* line-height: 22px; */ + /* padding: 2px 8px; */ + height: 29px; + line-height: 29px; background-color: #fff; - border-color: #aaa; + /* border-color: #aaa; */ border-top-color: #fff; color: #222; - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2); + /* box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2); */ cursor: default; - top: -2px; - border-bottom: none; - padding-right: 20px; + /* top: -2px; */ + /* border-bottom: none; */ + /* padding-right: 20px; */ } .luckysheet-sheet-area div.luckysheet-sheets-item-active:hover { background-color: #fff; - border-color: #aaa; + /* border-color: #aaa; */ color: #222; } @@ -2440,6 +2475,7 @@ body:not(.ewa-ipad) .luckysheet-rows-h-cell-sel:hover { color: #000; user-select: none; font-family: Arial; + line-height: 100%; } #luckysheet-pivotTable-config-option-sumtype .luckysheet-submenu-arrow { diff --git a/src/global/api.js b/src/global/api.js index dda0a41..59d17d8 100644 --- a/src/global/api.js +++ b/src/global/api.js @@ -22,6 +22,7 @@ import editor from "./editor"; import { rowlenByRange } from "./getRowlen"; import luckysheetformula from './formula'; import luckysheetsizeauto from '../controllers/resize'; +import sheetmanage from '../controllers/sheetmanage'; 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; @@ -2473,3 +2474,32 @@ export function resize(options = {}){ success(); } } + + +/** + * 根据index获取sheet页配置 + * + * @param {Object} options 可选参数 + * @param {String} options.index 工作表index + * @param {Number} options.order 工作表order + * @param {String} options.name 工作表name + */ +export function getSheet(options = {}){ + + let { + index, + order, + name + } = {...options}; + + if(index != null){ + return sheetmanage.getSheetByIndex(index); + }else if(order != null){ + return Store.luckysheetfile[order]; + }else if(name != null){ + return sheetmanage.getSheetByName(name); + } + + return sheetmanage.getSheetByIndex(); + +} diff --git a/src/global/createdom.js b/src/global/createdom.js index 52e5fd7..68ed91e 100644 --- a/src/global/createdom.js +++ b/src/global/createdom.js @@ -19,6 +19,7 @@ import rhchInit from './rhchInit'; import { replaceHtml } from '../utils/util'; import Store from '../store'; import locale from '../locale/locale'; +import {menuToolBarWidth} from '../controllers/resize' export default function luckysheetcreatedom(colwidth, rowheight, data, menu, title) { //最少30行 @@ -98,6 +99,9 @@ export default function luckysheetcreatedom(colwidth, rowheight, data, menu, tit $("#" + Store.container).append(gh); + //统计工具栏按钮宽度值 + menuToolBarWidth(); + $("#luckysheet-scrollbar-x div").width(Store.ch_width); $("#luckysheet-scrollbar-y div").height(Store.rh_height - 30); diff --git a/src/index.html b/src/index.html index e109f38..3aa78bc 100644 --- a/src/index.html +++ b/src/index.html @@ -11,6 +11,7 @@ + diff --git a/src/locale/en.js b/src/locale/en.js index fb0dd08..baa3200 100644 --- a/src/locale/en.js +++ b/src/locale/en.js @@ -54,6 +54,7 @@ export default { toolLess:"Less", toolClose:"Close", toolMoreTip:"More features", + moreOptions:"More Options", }, alternatingColors:{ applyRange: 'Apply to range', @@ -397,7 +398,7 @@ export default { "rotationDown":"Rotate down" }, freezen:{ - default:"Freezen", + default:"Freeze", freezenRow:"First Row", freezenColumn:"First column", freezenRC:"Both", diff --git a/src/locale/zh.js b/src/locale/zh.js index fd18cb7..3806ef1 100644 --- a/src/locale/zh.js +++ b/src/locale/zh.js @@ -54,6 +54,7 @@ export default { toolLess:"少于", toolClose:"收起", toolMoreTip:"更多功能", + moreOptions:"更多选项", }, alternatingColors:{ applyRange: '应用范围', diff --git a/src/store/index.js b/src/store/index.js index 2c9c610..220638d 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -17,13 +17,13 @@ const Store = { cellmainWidth: 0, cellmainHeight: 0, - toolbarHeight: 61, - infobarHeight: 30, - calculatebarHeight: 30, + toolbarHeight: 72, + infobarHeight: 56, + calculatebarHeight: 3, rowHeaderWidth: 46, columeHeaderHeight: 20, cellMainSrollBarSize: 12, - sheetBarHeight: 27, + sheetBarHeight: 31, statisticBarHeight: 23, luckysheetTableContentHW: [0, 0], @@ -126,6 +126,8 @@ const Store = { showGridLines:true, + toobarObject: {}, //toolbar constant + } export default Store; \ No newline at end of file diff --git a/src/utils/util.js b/src/utils/util.js index 7862bcd..d47e440 100644 --- a/src/utils/util.js +++ b/src/utils/util.js @@ -386,15 +386,13 @@ function luckysheetactiveCell() { //单元格编辑聚焦 function luckysheetContainerFocus() { - // $("#" + Store.container).attr("tabindex", 0).focus({ + // $("#" + Store.container).focus({ // preventScroll: true // }); - + // fix jquery error: Uncaught TypeError: ((n.event.special[g.origType] || {}).handle || g.handler).apply is not a function - $("#" + Store.container).focus({ - preventScroll: true - }); + $("#" + Store.container).attr("tabindex", 0).focus(); } //数字格式