feat(文书管理): 增加版本工作流与版本历史
- 模板状态按后端原始状态展示与筛选,待审核与已驳回分开展示 - 仅已发布模板可发起签署,新增提交审核/审核通过/驳回等动作 - 新增版本历史弹窗,复用统一的模板时间格式化方法 - 演示数据补齐已签署任务的签名图,并提供获取签名 dataURL 的接口 - 修复编辑器插入占位符时未定位光标导致内容落到文首的问题
This commit is contained in:
@@ -16,8 +16,26 @@ const emit = defineEmits<{
|
||||
}>()
|
||||
|
||||
const editorRef = shallowRef<IDomEditor>()
|
||||
const editableRef = shallowRef<Element | null>(null)
|
||||
const editorMode = 'default'
|
||||
|
||||
/**
|
||||
* 用户是否真的把光标放进过正文。
|
||||
*
|
||||
* 点「插入占位符 / 勾选框」按钮时焦点在按钮上,编辑器处于失焦态;
|
||||
* 直接 insertNode 会落到**文档最开头**——导入 .docx 后补签名位,
|
||||
* 签名域会被插到标题之前,而且当场看不出来,要等到预览或签署才发现。
|
||||
*
|
||||
* 不能用 editor.selection 判断「有没有光标」:导入 .docx 写入内容时它同样会有一个
|
||||
* 位于文首的选区,照样把签名位插到开头。因此只认真实交互——
|
||||
* 在可编辑区域上发生过 pointerdown / keydown 才算用户放好了光标。
|
||||
*/
|
||||
const userPlacedCaret = shallowRef(false)
|
||||
|
||||
function markUserCaret() {
|
||||
userPlacedCaret.value = true
|
||||
}
|
||||
|
||||
// 医疗文书用不到的工具栏能力直接移除,避免科室误用。
|
||||
// 注意菜单 key:分割线是 divider、表情是 emotion(不是 emoji)。
|
||||
const toolbarConfig: Partial<IToolbarConfig> = {
|
||||
@@ -64,6 +82,11 @@ const editorConfig: Partial<IEditorConfig> = {
|
||||
|
||||
function handleCreated(editor: IDomEditor) {
|
||||
editorRef.value = editor
|
||||
|
||||
const editable = editor.getEditableContainer()
|
||||
editableRef.value = editable
|
||||
editable.addEventListener('pointerdown', markUserCaret)
|
||||
editable.addEventListener('keydown', markUserCaret)
|
||||
}
|
||||
|
||||
function getText(): string {
|
||||
@@ -72,12 +95,23 @@ function getText(): string {
|
||||
|
||||
// slate 文本节点:{ text };由编辑器在当前光标处插入。
|
||||
function insertText(text: string) {
|
||||
editorRef.value?.insertNode({ text })
|
||||
const editor = editorRef.value
|
||||
|
||||
if (!editor) {
|
||||
return
|
||||
}
|
||||
|
||||
// 先聚焦并定位光标再插入:用户没点过正文时落到文末,
|
||||
// 点过则保持他自己的光标位置(光标停在表格单元格里时内容就落进该单元格)。
|
||||
editor.focus(!userPlacedCaret.value)
|
||||
editor.insertNode({ text })
|
||||
}
|
||||
|
||||
defineExpose({ getText, insertText })
|
||||
|
||||
onBeforeUnmount(() => {
|
||||
editableRef.value?.removeEventListener('pointerdown', markUserCaret)
|
||||
editableRef.value?.removeEventListener('keydown', markUserCaret)
|
||||
editorRef.value?.destroy()
|
||||
})
|
||||
</script>
|
||||
|
||||
Reference in New Issue
Block a user