feat: office-viewer Word 文档渲染 (#6412) (#6415)

* init

* theme

* 基础文本渲染

* 基础文本样式

* 支持简单链接和图片

* 修复 jc 解析不正确问题

* 解析和渲染分离

* 初步支持列表渲染

* 完善样式表的实现

* 表格解析初步

* 避免解析顺序不一致

* 避免解析顺序不一致导致的问题

* 基于 DOMParser 来实现解析; 初步实现表格渲染

* 修复行高解析不正确问题

* 修复变量替换不正确问题

* 补充注释

* 用 fflate 替换 jszip, 支持同步使用

* 支持渲染 tab

* 支持表格条件渲染

* 优化表格样式适配

* 完善背景色支持

* 支持 ruby

* 支持简单 inserttext

* 修复表格合并不正确问题

* amis 渲染初步

* 整合 amis 初步

* 支持 input-file 上传预览

* styles: 优化button组件单icon情况的样式 (#6269)



* fix: Badge设置overflowCount不生效问题修复 (#6267)



* feat: InputGroup报错展示优化 (#5803)

* feat:增加DATETOWEEK表达式

* feat:增加DATETOWEEK表达式

* feat:增加WEEKDAY和WEEK表达式

* feat:增加WEEKDAY和WEEK表达式

* feat:增加WEEKDAY和WEEK表达式

* feat:增加WEEKDAY和WEEK表达式

* feat:增加WEEKDAY和WEEK表达式

* chore: 2.7.3版本改为2.8.0 (#6272)

* styles: 输入框附加组件样式 (#6271)



* styles: 优化checkbox组件选中态样式 (#6277)



* feat:增加判断日期范围的表达式BETWEENRANGE&&优化STARTOF和ENDOF

* docs:表达式文档 (#6282)

* fix: Nav样式问题、性能优化 (#6280)



* chore: 还原几个 antd 导航及表格的颜色 (#6276)

* chore: Action倒计时key添加id避免冲突 (#5943)

* fix: nav同层拖拽问题修复 (#6285)



* v2.8.0

* chore: 删除在 ts 编译后永远都不会成立的代码 (#6291)

* styles: 将组件透明背景颜色改为白色 (#6289)

* styles: 将组件透明背景颜色改为白色

* styles: 将组件透明背景颜色改为白色

---------



* fix: Select组件overlay属性在popOverContainer时宽度错误问题 (#6284)

* fix:Select组件overlay属性在popOverContainer时宽度错误问题

* 问题修改

* styles: 优化link组件svg图标样式 (#6292)



* chore: Tree 组件中使用 value 替换 key (#6194)

* fix: 单选选项值包含逗号时获取选项错误问题 (#6258)

* fix: 单选选项值包含逗号时获取选项错误问题

* 加个单测

* 单测问题

* 在WrapControl 中使渲染器默认 multiple 生效

* 修改

* fix: select 各种模式支持 checkAll (#5941)

* feat(页面交互行为跟踪): 新增pageLoaded事件 (#6299)

* fix: nav拖拽卡顿、更多操作打开定位等问题修复 (#6304)



* fix: toast组件css变量拼错 (#6302)



* fix: CRUD2 加载更多时接口page传参始终为1 (#6298)

* fix: 日期范围底部按钮居中 (#6301)

* 调整 saveAs  fileName 优先级

* feat: 移动端人员选择增加确定按钮

* Update UserSelect.tsx

* fix: 人员选择ts 类型错误

* fix: 城市选择组件移动端回显问题

* fix: 移动端级联选择器选中值bug修复

* Update Cascader.tsx

* fix: 城市选择香港、澳门不能选择市

* fix: 删除错误城市数据

* feat: 移动端人员选择支持字段配置

* feat: 人员选择组件支持字段配置

* Update UserSelect.tsx

* fix: 移动端人员选择静态展示头像url回显

* fix: 日期时间选择器底部按钮居中

---------



* fix: table2全选、嵌套展开等问题修复 (#6313)



* docs(API 适配器): 调整文档细节 (#6314)

* styles: 优化清除图标样式 (#6312)



* fix: 修复 Tree 在传入 pathSeparator 时,非根节点无法选中 (#6315)

* Update README.md

* fix: 解决因部分组件默认配置,导致编辑器配置面板宽度溢出问题 (#6328)



* chore: svg 瘦身 (#6320)

* chore: svg 瘦身

* chore: svg 瘦身

* chore: svg 瘦身

* feat: mapping 的 source 接口支持 select 选项类接口 (#6326)

* fix: 调整 spinner-overlay 和 dialog 的 z-index,使关闭按钮不会被 spinner 遮挡 (#6321)

* feat: 新增 number 组件用来展示数字 (#6330)

* feat: 新增 number 组件用来展示数字

* feat: 新增 number 组件用来展示数字

* chore: tableCell 内部属性换个名字,以免跟已有其他组件组合使用时冲突

* fix: 注销renderer问题 (#6327)



* feat: InputExcel支持placeholder (#6295)

* feat: button-group-select支持角标 (#6309)



* chore: 暴露 InputBoxWithSuggestion (#6337)

* fix: 注销renderer问题 (#6338)



* docs: 补充trackExpression用法示例 (#6286)

* fix: 解决monaco环境变量和monaco插件的冲突 (#6283)



* fix: Cards嵌套List组件时, props透传导致Schema不生效问题 (#6110)

* styles: 优化带单位的number组件样式 (#6054)

* styles: 优化待单位的number组件样式

* 更新快照

---------



* fix(Table): #2978 嵌套表格如何设置默认全部展开 (#6028)

* fix(Table): #2978 嵌套表格如何设置默认全部展开

* fix(Table): #2978 更改函数命名

* fix: now表达式作为form组件默认值时,增加特殊逻辑,处理数据更新 (#5783)

* fix: 解决公式编辑器 搜索变量失效bug (#6345)



* fix: nav角标、悬浮展开子菜单、更多操作不可点击等问题修复 (#6346)



* feat:config动作优化

* fix: 修复卡片的 checkOnItemClick 配置问题 (#6365)

* fix: 修复弹窗中 form 配置 closeDialogOnSubmit 无效的问题 (#6368)

* fix: Transfer tree mode 支持 onlyChildren;两个值为undefined的Option不相等 (#6342)

* fix:transfer tree 支持 onlyChildren;两个值为undefined的Option不相等

* 修改

* 修改

* feat:carousel支持卡片动画模式 (#6354)

* feat:carousel支持多图配置

* Update carousel.md

---------




* fix: inputTable 组件value依赖别的字段时,不同步数据域的问题 (#6360)

* fix: inputTable 组件value依赖别的字段时,不同步数据域的问题

* 修改

* 修改

* feat: 添加input-table子表单校验 (#6357)

* feat: 添加input-table子表单校验

* feat: 添加input-table snapshots更新

* feat: 添加input-table子表单校验

* feat: 添加input-table子表单校验

* feat: 添加input-table子表单校验

* feat: input-table snapshots更新

* feat: 添加input-table子表单校验

* feat: 添加input-table子表单校验

* feat: Steps source支持动态获取value status (#6370)

* fix: 修复 drawer reload 目标可能找不到的问题 (#6373)

* fix: 修复 crud 嵌套会触发多次快速保存接口问题 (#6374)

* fix: 修复 this.model.validated 可能读取不到的报错 (#6375)

* chore: alert 支持多个实例

* feat: Tag支持事件动作 (#6325)

* feat: reload 支持动态目标, 解决目标在循环中场景 (#6372)

* chore: Select组件checkAllBySearch默认为true (#6347)

* fix: Nav切换数据源实时更新、点击分组卡顿、横向模式排序等问题修复 (#6371)



* fix: table单元格支持自定义样式、crud支持本地数据快速过滤 (#6353)



* fix: 修改角标样式 (#6383)



* fix: 图标选择器,如果图标不属于saas项目中的,则默认显示schema配置的内容 (#6394)



* feat: icon支持自定义样式 (#6379)



* fix: 解决input-table某些场景下无法新增的bug (#6400)



* fix: 解决input-table某些场景下无法新增的bug (#6404)



* fix: input-table内columns为下拉框时,删掉下拉框的选中值,发现input-table的数据域更新错误 (#6402)

* fix: input-table内columns为下拉框时,删掉下拉框的选中值,发现input-table的数据域更新错误

* fix: input-table内columns为下拉框时,删掉下拉框的选中值,发现input-table的数据域更新错误

* 修复示例文档错误

* 修复用例报错

* 修复 fis 报错

---------

Co-authored-by: qkiroc <30946345+qkiroc@users.noreply.github.com>
Co-authored-by: qinhaoyan <30946345+qinhaoyan@users.noreply.github.com>
Co-authored-by: wanglinfang2014 <w.l.fang@foxmail.com>
Co-authored-by: wanglinfang <wanglinfang@baidu.com>
Co-authored-by: RUNZE LU <36724300+lurunze1226@users.noreply.github.com>
Co-authored-by: lvxiaojiao <lvxiaojiao@baidu.com>
Co-authored-by: hsm-lv <80095014+hsm-lv@users.noreply.github.com>
Co-authored-by: lurunze1226 <lurunze1226@foxmail.com>
Co-authored-by: liaoxuezhi <2betop.cn@gmail.com>
Co-authored-by: sansiro <sansiro@sansiro.me>
Co-authored-by: meerkat <kit_hack@outlook.com>
Co-authored-by: 刘丹 <365533093@qq.com>
Co-authored-by: backpast <agileago@gmail.com>
Co-authored-by: renjianhua <renjianhua@zuoshouyisheng.com>
Co-authored-by: ls <1769057083@qq.com>
Co-authored-by: zhangxulong <zhangxulong@baidu.com>
Co-authored-by: zhangzhulei <30931358+DynaZhang@users.noreply.github.com>
Co-authored-by: zhangzhulei <zhangzhulei@baidu.com>
Co-authored-by: gooolh <57032082+gooolh@users.noreply.github.com>
Co-authored-by: liujintao03 <liujintao03@baidu.com>
Co-authored-by: Dora <53067150+Dora-boots@users.noreply.github.com>
Co-authored-by: yanglu19 <yanglu19@baidu.com>
Co-authored-by: TommyShao <tomieric@gmail.com>
Co-authored-by: pianruijie <13522335863@163.com>
Co-authored-by: xiangwaner <1186355501@qq.com>
Co-authored-by: zhaowenli <zhaowenli@baidu.com>
Co-authored-by: zhou999 <zhousq809@163.com>
Co-authored-by: Allen <yupeng.fe@qq.com>
Co-authored-by: sarding <37691952+sarding@users.noreply.github.com>
Co-authored-by: sarding <hongfuquan@baidu.com>
This commit is contained in:
吴多益 2023-03-20 22:54:42 +08:00 committed by GitHub
parent 2d9066ab17
commit 3a7daf0f90
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 223 additions and 188 deletions

View File

@ -30,7 +30,7 @@ order: 23
```schema: scope="body"
{
"type": "office-viewer",
"src": "../../../examples/static/example.docx"
"src": "/examples/static/example.docx"
}
```
@ -111,7 +111,7 @@ order: 23
{
"type": "office-viewer",
"id": "office-viewer",
"src": "../../../examples/static/info.docx",
"src": "/examples/static/info.docx",
"wordOptions": {
"enableVar": true,
"padding": "8px"
@ -127,7 +127,7 @@ order: 23
{
"type": "office-viewer",
"id": "office-viewer",
"src": "../../../examples/static/info.docx",
"src": "/examples/static/info.docx",
"wordOptions": {
"padding": "8px"
}
@ -168,7 +168,7 @@ order: 23
"type": "office-viewer",
"id": "office-viewer-download",
"display": false,
"src": "../../../examples/static/example.docx"
"src": "/examples/static/example.docx"
}
]
```
@ -197,7 +197,7 @@ order: 23
"type": "office-viewer",
"id": "office-viewer-print",
"display": false,
"src": "../../../examples/static/example.docx"
"src": "/examples/static/example.docx"
}
]
```

View File

@ -13,6 +13,7 @@
'classnames': __moduleId('classnames'),
'axios': __moduleId('axios'),
'exceljs': __moduleId('exceljs'),
'office-viewer': __moduleId('office-viewer'),
'moment': __moduleId('moment'),
'mobx': __moduleId('mobx'),
'mobx-state-tree': __moduleId('mobx-state-tree'),

View File

@ -68,6 +68,7 @@ fis.set('project.files', [
'/examples/static/*.svg',
'/examples/static/*.jpg',
'/examples/static/*.jpeg',
'/examples/static/*.docx',
'/examples/static/photo/*.jpeg',
'/examples/static/photo/*.png',
'/examples/static/audio/*.mp3',
@ -485,7 +486,9 @@ if (fis.project.currentMedia() === 'publish-sdk') {
'!uc.micro/**',
'!markdown-it/**',
'!markdown-it-html5-media/**',
'!punycode/**'
'!punycode/**',
'!office-viewer/**',
'!fflate/**'
],
'rich-text.js': [
@ -526,6 +529,8 @@ if (fis.project.currentMedia() === 'publish-sdk') {
'charts.js': ['zrender/**', 'echarts/**', 'echarts-stat/**'],
'office-viewer.js': ['office-viewer/**', 'fflate/**'],
'rest.js': [
'*.js',
'!monaco-editor/**',
@ -546,7 +551,9 @@ if (fis.project.currentMedia() === 'publish-sdk') {
'!mdurl/**',
'!uc.micro/**',
'!markdown-it/**',
'!markdown-it-html5-media/**'
'!markdown-it-html5-media/**',
'!office-viewer/**',
'!fflate/**'
]
}),
postpackager: [
@ -773,6 +780,7 @@ if (fis.project.currentMedia() === 'publish-sdk') {
'!markdown-it-html5-media/**',
'!punycode/**',
'!amis-formula/**',
'!fflate/**',
'!office-viewer/**',
'!amis-core/**',
'!amis-ui/**',
@ -832,6 +840,8 @@ if (fis.project.currentMedia() === 'publish-sdk') {
'!/examples/components/EChartsEditor/Common.tsx'
],
'pkg/office-viewer.js': ['office-viewer/**', 'fflate/**'],
'pkg/rest.js': [
'**.{js,jsx,ts,tsx}',
'!monaco-editor/**',

View File

@ -101,6 +101,7 @@
"^amis\\-ui$": "<rootDir>/packages/amis-ui/src/index.tsx",
"^amis\\-core$": "<rootDir>/packages/amis-core/src/index.tsx",
"^amis\\-formula$": "<rootDir>/packages/amis-formula/src/index.ts",
"^office\\-viewer$": "<rootDir>/packages/office-viewer/src/index.ts",
"^amis$": "<rootDir>/packages/amis/src/index.tsx"
},
"setupFilesAfterEnv": [

View File

@ -4,15 +4,15 @@
用法:`IF(condition, consequent, alternate)`
- `condition:expression` 条件表达式.
- `consequent:any` 条件判断通过的返回结果
- `alternate:any` 条件判断不通过的返回结果
* `condition:expression` 条件表达式.
* `consequent:any` 条件判断通过的返回结果
* `alternate:any` 条件判断不通过的返回结果
返回:`any` 根据条件返回不同的结果
示例IF(A, B, C)
如果满足条件 A则返回 B否则返回 C支持多层嵌套 IF 函数。
如果满足条件A则返回B否则返回C支持多层嵌套IF函数。
也可以用表达式如A ? B : C
@ -20,9 +20,9 @@
用法:`AND(expression1, expression2, ...expressionN)`
- `conditions:...expression` 条件表达式.
* `conditions:...expression` 条件表达式.
返回:`boolean`
返回:`boolean`
条件全部符合,返回 true否则返回 false
@ -36,9 +36,9 @@
用法:`OR(expression1, expression2, ...expressionN)`
- `conditions:...expression` 条件表达式.
* `conditions:...expression` 条件表达式.
返回:`boolean`
返回:`boolean`
条件任意一个满足条件,返回 true否则返回 false
@ -52,10 +52,10 @@
用法:`XOR(condition1, condition2)`
- `condition1:expression` 条件表达式 1
- `condition2:expression` 条件表达式 2
* `condition1:expression` 条件表达式1
* `condition2:expression` 条件表达式2
返回:`boolean`
返回:`boolean`
异或处理,多个表达式组中存在奇数个真时认为真。
@ -63,7 +63,7 @@
用法:`IFS(condition1, result1, condition2, result2,...conditionN, resultN)`
- `args:...any` 条件,返回值集合
* `args:...any` 条件,返回值集合
返回:`any` 第一个满足条件的结果,没有命中的返回 false。
@ -79,7 +79,7 @@
用法:`ABS(num)`
- `num:number` 数值
* `num:number` 数值
返回:`number` 传入数值的绝对值
@ -89,7 +89,7 @@
用法:`MAX(num1, num2, ...numN)`
- `num:...number` 数值
* `num:...number` 数值
返回:`number` 所有传入值中最大的那个
@ -99,7 +99,7 @@
用法:`MIN(num1, num2, ...numN)`
- `num:...number` 数值
* `num:...number` 数值
返回:`number` 所有传入值中最小的那个
@ -109,7 +109,7 @@
用法:`SUM(num1, num2, ...numN)`
- `num:...number` 数值
* `num:...number` 数值
返回:`number` 所有传入数值的总和
@ -119,7 +119,7 @@
用法:`INT(num)`
- `num:number` 数值
* `num:number` 数值
返回:`number` 数值对应的整形
@ -129,8 +129,8 @@
用法:`MOD(num, divisor)`
- `num:number` 被除数
- `divisor:number` 除数
* `num:number` 被除数
* `divisor:number` 除数
返回:`number` 两数相除的余数
@ -146,8 +146,8 @@
用法:`ROUND(num[, numDigits = 2])`
- `num:number` 要处理的数字
- `numDigits:number` 小数位数
* `num:number` 要处理的数字
* `numDigits:number` 小数位数
返回:`number` 传入数值四舍五入后的结果
@ -157,8 +157,8 @@
用法:`FLOOR(num[, numDigits=2])`
- `num:number` 要处理的数字
- `numDigits:number` 小数位数
* `num:number` 要处理的数字
* `numDigits:number` 小数位数
返回:`number` 传入数值向下取整后的结果
@ -168,8 +168,8 @@
用法:`CEIL(num[, numDigits=2])`
- `num:number` 要处理的数字
- `numDigits:number` 小数位数
* `num:number` 要处理的数字
* `numDigits:number` 小数位数
返回:`number` 传入数值向上取整后的结果
@ -179,7 +179,7 @@
用法:`SQRT(num)`
- `num:number` 要处理的数字
* `num:number` 要处理的数字
返回:`number` 开平方的结果
@ -189,7 +189,7 @@
用法:`AVG(num1, num2, ...numN)`
- `num:...number` 要处理的数字
* `num:...number` 要处理的数字
返回:`number` 所有数值的平均值
@ -199,7 +199,7 @@
用法:`DEVSQ(num1, num2, ...numN)`
- `num:...number` 要处理的数字
* `num:...number` 要处理的数字
返回:`number` 所有数值的平均值
@ -209,7 +209,7 @@
用法:`AVEDEV(num1, num2, ...numN)`
- `num:...number` 要处理的数字
* `num:...number` 要处理的数字
返回:`number` 所有数值的平均值
@ -219,7 +219,7 @@
用法:`HARMEAN(num1, num2, ...numN)`
- `num:...number` 要处理的数字
* `num:...number` 要处理的数字
返回:`number` 所有数值的平均值
@ -229,8 +229,8 @@
用法:`LARGE(array, k)`
- `nums:array` 要处理的数字
- `k:number` 第几大
* `nums:array` 要处理的数字
* `k:number` 第几大
返回:`number` 所有数值的平均值
@ -240,7 +240,7 @@
用法:`UPPERMONEY(num)`
- `num:number` 要处理的数字
* `num:number` 要处理的数字
返回:`string` 数值中文大写字符
@ -260,7 +260,7 @@
用法:`LAST(array)`
- `arr:...number` 要处理的数组
* `arr:...number` 要处理的数组
返回:`any` 最后一个值
@ -272,8 +272,8 @@
用法:`LEFT(text, len)`
- `text:string` 要处理的文本
- `len:number` 要处理的长度
* `text:string` 要处理的文本
* `len:number` 要处理的长度
返回:`string` 对应字符串
@ -283,8 +283,8 @@
用法:`RIGHT(text, len)`
- `text:string` 要处理的文本
- `len:number` 要处理的长度
* `text:string` 要处理的文本
* `len:number` 要处理的长度
返回:`string` 对应字符串
@ -294,7 +294,7 @@
用法:`LEN(text)`
- `text:string` 要处理的文本
* `text:string` 要处理的文本
返回:`number` 长度
@ -304,7 +304,7 @@
用法:`LENGTH(textArr)`
- `textArr:Array<string>` 要处理的文本集合
* `textArr:Array<string>` 要处理的文本集合
返回:`Array<number>` 长度集合
@ -314,7 +314,7 @@
用法:`ISEMPTY(text)`
- `text:string` 要处理的文本
* `text:string` 要处理的文本
返回:`boolean` 判断结果
@ -324,7 +324,7 @@
用法:`CONCATENATE(text1, text2, ...textN)`
- `text:...string` 文本集合
* `text:...string` 文本集合
返回:`string` 连接后的文本
@ -334,7 +334,7 @@
用法:`CHAR(code)`
- `code:number` 编码值
* `code:number` 编码值
返回:`string` 指定位置的字符
@ -346,7 +346,7 @@
用法:`LOWER(text)`
- `text:string` 文本
* `text:string` 文本
返回:`string` 结果文本
@ -356,7 +356,7 @@
用法:`UPPER(text)`
- `text:string` 文本
* `text:string` 文本
返回:`string` 结果文本
@ -366,7 +366,7 @@
用法:`UPPERFIRST(text)`
- `text:string` 文本
* `text:string` 文本
返回:`string` 结果文本
@ -376,9 +376,9 @@
用法:`PADSTART(text)`
- `text:string` 文本
- `num:number` 目标长度
- `pad:string` 用于补齐的文本
* `text:string` 文本
* `num:number` 目标长度
* `pad:string` 用于补齐的文本
返回:`string` 结果文本
@ -392,7 +392,7 @@
用法:`CAPITALIZE(text)`
- `text:string` 文本
* `text:string` 文本
返回:`string` 结果文本
@ -406,7 +406,7 @@
用法:`ESCAPE(text)`
- `text:string` 文本
* `text:string` 文本
返回:`string` 结果文本
@ -420,8 +420,8 @@
用法:`TRUNCATE(text, 6)`
- `text:string` 文本
- `text:number` 最长长度
* `text:string` 文本
* `text:number` 最长长度
返回:`string` 结果文本
@ -435,8 +435,8 @@
用法:`BEFORELAST(text, '.')`
- `text:string` 文本
- `delimiter:string` 结束文本
* `text:string` 文本
* `delimiter:string` 结束文本
返回:`string` 判断结果
@ -446,8 +446,8 @@
用法:`SPLIT(text, ',')`
- `text:string` 文本
- `delimiter:string` 文本片段
* `text:string` 文本
* `delimiter:string` 文本片段
返回:`Array<string>` 文本集
@ -461,7 +461,7 @@
用法:`TRIM(text)`
- `text:string` 文本
* `text:string` 文本
返回:`string` 处理后的文本
@ -471,7 +471,7 @@
用法:`STRIPTAG(text)`
- `text:string` 文本
* `text:string` 文本
返回:`string` 处理后的文本
@ -485,7 +485,7 @@
用法:`LINEBREAK(text)`
- `text:string` 文本
* `text:string` 文本
返回:`string` 处理后的文本
@ -499,8 +499,8 @@
用法:`STARTSWITH(text, '片段')`
- `text:string` 文本
- `startString:string` 起始文本
* `text:string` 文本
* `startString:string` 起始文本
返回:`string` 判断结果
@ -510,8 +510,8 @@
用法:`ENDSWITH(text, '片段')`
- `text:string` 文本
- `endString:string` 结束文本
* `text:string` 文本
* `endString:string` 结束文本
返回:`string` 判断结果
@ -521,8 +521,8 @@
用法:`CONTAINS(text, searchText)`
- `text:string` 文本
- `searchText:string` 搜索文本
* `text:string` 文本
* `searchText:string` 搜索文本
返回:`string` 判断结果
@ -532,9 +532,9 @@
用法:`REPLACE(text, search, replace)`
- `text:string` 要处理的文本
- `search:string` 要被替换的文本
- `replace:string` 要替换的文本
* `text:string` 要处理的文本
* `search:string` 要被替换的文本
* `replace:string` 要替换的文本
返回:`string` 处理结果
@ -544,9 +544,9 @@
用法:`SEARCH(text, search, 0)`
- `text:string` 要处理的文本
- `search:string` 用来搜索的文本
- `start:number` 起始位置
* `text:string` 要处理的文本
* `search:string` 用来搜索的文本
* `start:number` 起始位置
返回:`number` 命中的位置
@ -556,9 +556,9 @@
用法:`MID(text, from, len)`
- `text:string` 要处理的文本
- `from:number` 起始位置
- `len:number` 处理长度
* `text:string` 要处理的文本
* `from:number` 起始位置
* `len:number` 处理长度
返回:`number` 命中的位置
@ -568,7 +568,7 @@
用法:`BASENAME(text)`
- `text:string` 要处理的文本
* `text:string` 要处理的文本
返回:`string` 文件名
@ -586,15 +586,15 @@
创建日期对象,可以通过特定格式的字符串,或者数值。
需要注意的是,其中月份的数值是从 0 开始的,也就是说,
如果是 12 月份,你应该传入数值 11。
需要注意的是其中月份的数值是从0开始的也就是说
如果是12月份你应该传入数值11。
### TIMESTAMP
用法:`TIMESTAMP(date, 'x')`
- `date:date` 日期对象
- `format:string` 时间戳格式,带毫秒传入 'x'。默认为 'X' 不带毫秒的。
* `date:date` 日期对象
* `format:string` 时间戳格式,带毫秒传入 'x'。默认为 'X' 不带毫秒的。
返回:`number` 时间戳
@ -616,8 +616,8 @@
用法:`WEEKDAY(date)`
- `date:any` 日期
- `type:number` 星期定义类型,默认为 11 表示 0 6 代表星期一到星期日2 表示 1 7 代表星期一到星期日
* `date:any` 日期
* `type:number` 星期定义类型默认为11表示0至6代表星期一到星期日2表示1至7代表星期一到星期日
返回:`number` 星期几的数字标识
@ -631,8 +631,8 @@ WEEKDAY('2023-02-27') 得到 1
用法:`WEEK(date)`
- `date:any` 日期
- `isISO:boolean` 是否 ISO 星期
* `date:any` 日期
* `isISO:boolean` 是否ISO星期
返回:`number` 星期几的数字标识
@ -646,8 +646,8 @@ WEEK('2023-03-05') 得到 10
用法:`DATETOSTR(date, 'YYYY-MM-DD')`
- `date:any` 日期对象、日期字符串、时间戳
- `format:string` 日期格式,默认为 "YYYY-MM-DD HH:mm:ss"
* `date:any` 日期对象、日期字符串、时间戳
* `format:string` 日期格式,默认为 "YYYY-MM-DD HH:mm:ss"
返回:`string` 日期字符串
@ -664,10 +664,10 @@ DATETOSTR(DATE('2021-12-21'), 'YYYY.MM.DD hh:mm:ss') 得到 '2021.12.21 08:00:00
用法:`DATERANGESPLIT(date, 'YYYY-MM-DD')`
- `date:string` 日期范围字符串
- `key:string` 取值标识0 或'start'表示获取开始时间1 或'end'表示获取结束时间
- `format:string` 日期格式,可选
- `delimiter:string` 分隔符,可选,默认为','
* `date:string` 日期范围字符串
* `key:string` 取值标识0或'start'表示获取开始时间1或'end'表示获取结束时间
* `format:string` 日期格式,可选
* `delimiter:string` 分隔符,可选,默认为','
返回:`string` 日期字符串
@ -686,9 +686,9 @@ DATERANGESPLIT('1676563200, 1676735999', 'end' , 'YYYY.MM.DD hh:mm:ss') 得到 '
用法:`STARTOF(date[unit = "day"])`
- `date:date` 日期对象
- `unit:string` 比如可以传入 'day'、'month'、'year' 或者 `week` 等等
- `format:string` 日期格式,可选
* `date:date` 日期对象
* `unit:string` 比如可以传入 'day'、'month'、'year' 或者 `week` 等等
* `format:string` 日期格式,可选
返回:`date` 新的日期对象
@ -698,9 +698,9 @@ DATERANGESPLIT('1676563200, 1676735999', 'end' , 'YYYY.MM.DD hh:mm:ss') 得到 '
用法:`ENDOF(date[unit = "day"])`
- `date:date` 日期对象
- `unit:string` 比如可以传入 'day'、'month'、'year' 或者 `week` 等等
- `format:string` 日期格式,可选
* `date:date` 日期对象
* `unit:string` 比如可以传入 'day'、'month'、'year' 或者 `week` 等等
* `format:string` 日期格式,可选
返回:`date` 新的日期对象
@ -710,7 +710,7 @@ DATERANGESPLIT('1676563200, 1676735999', 'end' , 'YYYY.MM.DD hh:mm:ss') 得到 '
用法:`YEAR(date)`
- `date:date` 日期对象
* `date:date` 日期对象
返回:`number` 数值
@ -720,7 +720,7 @@ DATERANGESPLIT('1676563200, 1676735999', 'end' , 'YYYY.MM.DD hh:mm:ss') 得到 '
用法:`MONTH(date)`
- `date:date` 日期对象
* `date:date` 日期对象
返回:`number` 数值
@ -730,7 +730,7 @@ DATERANGESPLIT('1676563200, 1676735999', 'end' , 'YYYY.MM.DD hh:mm:ss') 得到 '
用法:`DAY(date)`
- `date:date` 日期对象
* `date:date` 日期对象
返回:`number` 数值
@ -740,7 +740,7 @@ DATERANGESPLIT('1676563200, 1676735999', 'end' , 'YYYY.MM.DD hh:mm:ss') 得到 '
用法:`HOUR(date)`
- `date:date` 日期对象
* `date:date` 日期对象
返回:`number` 数值
@ -750,7 +750,7 @@ DATERANGESPLIT('1676563200, 1676735999', 'end' , 'YYYY.MM.DD hh:mm:ss') 得到 '
用法:`MINUTE(date)`
- `date:date` 日期对象
* `date:date` 日期对象
返回:`number` 数值
@ -760,7 +760,7 @@ DATERANGESPLIT('1676563200, 1676735999', 'end' , 'YYYY.MM.DD hh:mm:ss') 得到 '
用法:`SECOND(date)`
- `date:date` 日期对象
* `date:date` 日期对象
返回:`number` 数值
@ -770,8 +770,8 @@ DATERANGESPLIT('1676563200, 1676735999', 'end' , 'YYYY.MM.DD hh:mm:ss') 得到 '
用法:`YEARS(endDate, startDate)`
- `endDate:date` 日期对象
- `startDate:date` 日期对象
* `endDate:date` 日期对象
* `startDate:date` 日期对象
返回:`number` 数值
@ -781,8 +781,8 @@ DATERANGESPLIT('1676563200, 1676735999', 'end' , 'YYYY.MM.DD hh:mm:ss') 得到 '
用法:`MINUTES(endDate, startDate)`
- `endDate:date` 日期对象
- `startDate:date` 日期对象
* `endDate:date` 日期对象
* `startDate:date` 日期对象
返回:`number` 数值
@ -792,8 +792,8 @@ DATERANGESPLIT('1676563200, 1676735999', 'end' , 'YYYY.MM.DD hh:mm:ss') 得到 '
用法:`DAYS(endDate, startDate)`
- `endDate:date` 日期对象
- `startDate:date` 日期对象
* `endDate:date` 日期对象
* `startDate:date` 日期对象
返回:`number` 数值
@ -803,8 +803,8 @@ DATERANGESPLIT('1676563200, 1676735999', 'end' , 'YYYY.MM.DD hh:mm:ss') 得到 '
用法:`HOURS(endDate, startDate)`
- `endDate:date` 日期对象
- `startDate:date` 日期对象
* `endDate:date` 日期对象
* `startDate:date` 日期对象
返回:`number` 数值
@ -814,9 +814,9 @@ DATERANGESPLIT('1676563200, 1676735999', 'end' , 'YYYY.MM.DD hh:mm:ss') 得到 '
用法:`DATEMODIFY(date, 2, 'days')`
- `date:date` 日期对象
- `num:number` 数值
- `unit:string` 单位:支持年、月、天等等
* `date:date` 日期对象
* `num:number` 数值
* `unit:string` 单位:支持年、月、天等等
返回:`date` 日期对象
@ -826,14 +826,14 @@ DATERANGESPLIT('1676563200, 1676735999', 'end' , 'YYYY.MM.DD hh:mm:ss') 得到 '
DATEMODIFY(A, -2, 'month')
对日期 A 进行往前减 2 月的操作。
对日期 A 进行往前减2月的操作。
### STRTODATE
用法:`STRTODATE(value[, format=""])`
- `value:string` 日期字符
- `format:string` 日期格式
* `value:string` 日期字符
* `format:string` 日期格式
返回:`date` 日期对象
@ -845,9 +845,9 @@ DATEMODIFY(A, -2, 'month')
用法:`ISBEFORE(a, b)`
- `a:date` 第一个日期
- `b:date` 第二个日期
- `unit:string` 单位,默认是 'day' 即之比较到天
* `a:date` 第一个日期
* `b:date` 第二个日期
* `unit:string` 单位,默认是 'day' 即之比较到天
返回:`boolean` 判断结果
@ -857,9 +857,9 @@ DATEMODIFY(A, -2, 'month')
用法:`ISAFTER(a, b)`
- `a:date` 第一个日期
- `b:date` 第二个日期
- `unit:string` 单位,默认是 'day' 即之比较到天
* `a:date` 第一个日期
* `b:date` 第二个日期
* `unit:string` 单位,默认是 'day' 即之比较到天
返回:`boolean` 判断结果
@ -869,10 +869,10 @@ DATEMODIFY(A, -2, 'month')
用法:`BETWEENRANGE(date, [start, end])`
- `date:any` 第一个日期
- `daterange:Array<any>` 日期范围
- `unit:string` 单位,默认是 'day' 即之比较到天
- `inclusivity:string` 包容性规则,默认为'[]'。[ 表示包含、( 表示排除,如果使用包容性参数,则必须传入两个指示符,如'()'表示左右范围都排除
* `date:any` 第一个日期
* `daterange:Array<any>` 日期范围
* `unit:string` 单位,默认是 'day' 即之比较到天
* `inclusivity:string` 包容性规则,默认为'[]'。[ 表示包含、( 表示排除,如果使用包容性参数,则必须传入两个指示符,如'()'表示左右范围都排除
返回:`boolean` 判断结果
@ -884,9 +884,9 @@ DATEMODIFY(A, -2, 'month')
用法:`ISSAMEORBEFORE(a, b)`
- `a:date` 第一个日期
- `b:date` 第二个日期
- `unit:string` 单位,默认是 'day' 即之比较到天
* `a:date` 第一个日期
* `b:date` 第二个日期
* `unit:string` 单位,默认是 'day' 即之比较到天
返回:`boolean` 判断结果
@ -896,9 +896,9 @@ DATEMODIFY(A, -2, 'month')
用法:`ISSAMEORAFTER(a, b)`
- `a:date` 第一个日期
- `b:date` 第二个日期
- `unit:string` 单位,默认是 'day' 即之比较到天
* `a:date` 第一个日期
* `b:date` 第二个日期
* `unit:string` 单位,默认是 'day' 即之比较到天
返回:`boolean` 判断结果
@ -910,7 +910,7 @@ DATEMODIFY(A, -2, 'month')
用法:`COUNT(arr)`
- `arr:Array<any>` 数组
* `arr:Array<any>` 数组
返回:`boolean` 结果
@ -920,8 +920,8 @@ DATEMODIFY(A, -2, 'month')
用法:`ARRAYMAP(arr, item => item)`
- `arr:Array<any>` 数组
- `iterator:Array<any>` 箭头函数
* `arr:Array<any>` 数组
* `iterator:Array<any>` 箭头函数
返回:`boolean` 结果
@ -931,8 +931,8 @@ DATEMODIFY(A, -2, 'month')
用法:`ARRAYFILTER(arr, item => item)`
- `arr:Array<any>` 数组
- `iterator:Array<any>` 箭头函数
* `arr:Array<any>` 数组
* `iterator:Array<any>` 箭头函数
返回:`boolean` 结果
@ -943,8 +943,8 @@ DATEMODIFY(A, -2, 'month')
用法:`ARRAYFINDINDEX(arr, item => item === 2)`
- `arr:Array<any>` 数组
- `iterator:Array<any>` 箭头函数
* `arr:Array<any>` 数组
* `iterator:Array<any>` 箭头函数
返回:`number` 结果
@ -959,8 +959,8 @@ ARRAYFINDINDEX([0, 2, false], item => item === 2) 得到 1
用法:`ARRAYFIND(arr, item => item === 2)`
- `arr:Array<any>` 数组
- `iterator:Array<any>` 箭头函数
* `arr:Array<any>` 数组
* `iterator:Array<any>` 箭头函数
返回:`any` 结果
@ -975,8 +975,8 @@ ARRAYFIND([0, 2, false], item => item === 2) 得到 2
用法:`ARRAYSOME(arr, item => item === 2)`
- `arr:Array<any>` 数组
- `iterator:Array<any>` 箭头函数
* `arr:Array<any>` 数组
* `iterator:Array<any>` 箭头函数
返回:`boolean` 结果
@ -991,8 +991,8 @@ ARRAYSOME([0, 2, false], item => item === 2) 得到 true
用法:`ARRAYEVERY(arr, item => item === 2)`
- `arr:Array<any>` 数组
- `iterator:Array<any>` 箭头函数
* `arr:Array<any>` 数组
* `iterator:Array<any>` 箭头函数
返回:`boolean` 结果
@ -1007,8 +1007,8 @@ ARRAYEVERY([0, 2, false], item => item === 2) 得到 false
用法:`ARRAYINCLUDES(arr, 2)`
- `arr:Array<any>` 数组
- `item:any` 元素
* `arr:Array<any>` 数组
* `item:any` 元素
返回:`any` 结果
@ -1022,7 +1022,7 @@ ARRAYINCLUDES([0, 2, false], 2) 得到 true
用法:`COMPACT(arr)`
- `arr:Array<any>` 数组
* `arr:Array<any>` 数组
返回:`Array<any>` 结果
@ -1036,8 +1036,8 @@ COMPACT([0, 1, false, 2, '', 3]) 得到 [1, 2, 3]
用法:`JOIN(arr, string)`
- `arr:Array<any>` 数组
- `separator:String` 分隔符
* `arr:Array<any>` 数组
* `separator:String` 分隔符
返回:`String` 结果
@ -1051,7 +1051,7 @@ JOIN(['a', 'b', 'c'], '=') 得到 'a=b=c'
用法:`CONCAT(['a', 'b', 'c'], ['1'], ['3'])`
- `arr:Array<any>` 数组
* `arr:Array<any>` 数组
返回:`Array<any>` 结果
@ -1065,8 +1065,8 @@ CONCAT(['a', 'b', 'c'], ['1'], ['3']) 得到 ['a', 'b', 'c', '1', '3']
用法:`UNIQ([{a: '1'}, {b: '2'}, {a: '1'}], 'x')`
- `arr:Array<any>` 数组
- `field:string` 字段
* `arr:Array<any>` 数组
* `field:string` 字段
返回:`Array<any>` 结果
@ -1082,11 +1082,11 @@ UNIQ([{a: '1'}, {b: '2'}, {a: '1'}] 'id')
用法:`ENCODEJSON({name: 'amis'})`
- `obj:object` JS 对象
* `obj:object` JS对象
返回:`string` 结果
JS 对象转换成 JSON 字符串
将JS对象转换成JSON字符串
示例:
@ -1096,11 +1096,11 @@ ENCODEJSON({name: 'amis'}) 得到 '{"name":"amis"}'
用法:`DECODEJSON('{\"name\": "amis"}')`
- `str:string` 字符串
* `str:string` 字符串
返回:`object` 结果
解析 JSON 编码数据,返回 JS 对象
解析JSON编码数据返回JS对象
示例:
@ -1112,13 +1112,13 @@ DECODEJSON('{\"name\": "amis"}') 得到 {name: 'amis'}
用法:`GET(arr, 2)`
- `obj:any` 对象或数组
- `path:string` 路径
- `defaultValue:any` 如果解析不到则返回该值
* `obj:any` 对象或数组
* `path:string` 路径
* `defaultValue:any` 如果解析不到则返回该值
返回:`any` 结果
根据对象或者数组的 path 路径获取值。 如果解析 value 是 undefined 会以 defaultValue 取代
根据对象或者数组的path路径获取值。 如果解析 value 是 undefined 会以 defaultValue 取代
示例:
@ -1132,8 +1132,9 @@ GET({arr: [{name: 'amis', age: 18}]}, 'arr.1.name', 'not-found') 得到 'not-fou
用法:`ISTYPE([{a: '1'}, {b: '2'}, {a: '1'}], 'array')`
- `判断对象:string` null
* `判断对象:string` null
返回:`boolean` 结果
判断是否为类型支持string, number, array, date, plain-object。

View File

@ -233,8 +233,9 @@
"peerDependencies": {
"amis-core": "*",
"amis-ui": "*",
"office-viewer": "*",
"react": ">=16.8.6",
"react-dom": ">=16.8.6"
},
"gitHead": "37d23b4a8eb1c663bc38e8dd9040889ea1526ec4"
}
}

View File

@ -29,6 +29,7 @@ const external = id => {
'react-dom',
'rc-input-number',
'@rc-component/mini-decimal',
'fflate',
'@babel/runtime'
])
.map(value =>
@ -115,7 +116,12 @@ function transpileDynamicImportForCJS(options) {
}
function getPlugins(format = 'esm') {
const overridePaths = ['amis-formula', 'amis-core', 'amis-ui'].reduce(
const overridePaths = [
'amis-formula',
'amis-core',
'amis-ui',
'office-viewer'
].reduce(
(prev, current) => ({
...prev,
[current]: [getCompiledEntryPath(current, format)]

View File

@ -4,8 +4,6 @@
import React from 'react';
import {BaseSchema} from '../Schema';
import {evaluate} from 'amis-formula';
import {Word} from 'office-viewer';
import {
ActionObject,
isApiOutdated,
@ -128,16 +126,20 @@ export default class OfficeViewer extends React.Component<
const response = await env.fetcher(finalSrc, data, {
responseType: 'arraybuffer'
});
const word = new Word(response.data, {
...wordOptions,
replaceText: this.replaceText.bind(this)
import('office-viewer').then(async (officeViewer: any) => {
const Word = officeViewer.Word;
const word = new Word(response.data, {
...wordOptions,
replaceText: this.replaceText.bind(this)
});
if (display !== false) {
word.render(this.rootElement?.current!);
}
this.word = word;
});
if (display !== false) {
word.render(this.rootElement?.current!);
}
this.word = word;
}
/**
@ -150,13 +152,17 @@ export default class OfficeViewer extends React.Component<
const reader = new FileReader();
reader.onload = _e => {
const data = reader.result as ArrayBuffer;
const word = new Word(data, {
...wordOptions,
replaceText: this.replaceText.bind(this)
import('office-viewer').then(async (officeViewer: any) => {
const word = new Word(data, {
...wordOptions,
replaceText: this.replaceText.bind(this)
});
if (display !== false) {
word.render(this.rootElement?.current!);
}
});
if (display !== false) {
word.render(this.rootElement?.current!);
}
};
reader.readAsArrayBuffer(file);
}

9
packages/office-viewer/.gitignore vendored Normal file
View File

@ -0,0 +1,9 @@
/dist
lib
sdk
/public
/gh-pages
/output
/coverage
/npm
/esm