build(deps): 新增 CKEditor 与 TinyMCE 依赖
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
<script setup lang="ts">
|
||||
import { computed, onMounted, reactive, ref } from 'vue'
|
||||
import { ElMessage } from 'element-plus'
|
||||
import { ElMessage, ElMessageBox } from 'element-plus'
|
||||
|
||||
import NewSigningTaskDialog from '@/components/signing/NewSigningTaskDialog.vue'
|
||||
import type { SigningTemplate } from '@/api/workbench/types'
|
||||
@@ -50,7 +50,7 @@ const departments: DepartmentRecord[] = ['医学影像科', '医学检验科', '
|
||||
const filters = reactive<DocumentFilterForm>({
|
||||
keyword: '',
|
||||
department: null,
|
||||
status: 'enabled',
|
||||
status: 'all',
|
||||
})
|
||||
|
||||
const allTemplates = computed<DocumentTemplate[]>(() =>
|
||||
@@ -76,19 +76,21 @@ const departmentTabs = computed<DepartmentTab[]>(() => [
|
||||
})),
|
||||
])
|
||||
|
||||
const statusTabs = computed<StatusTab[]>(() =>
|
||||
documentStatusOptions.map((option) => ({
|
||||
const statusTabs = computed<StatusTab[]>(() => [
|
||||
{ key: 'all', label: '全部', count: allTemplates.value.length },
|
||||
...documentStatusOptions.map((option) => ({
|
||||
...option,
|
||||
count: allTemplates.value.filter((template) => template.status === option.key).length,
|
||||
})),
|
||||
)
|
||||
])
|
||||
|
||||
const filteredTemplates = computed(() => {
|
||||
const keyword = filters.keyword.trim().toLowerCase()
|
||||
|
||||
return allTemplates.value.filter((template) => {
|
||||
const matchesDepartment = !filters.department || template.departmentKey === filters.department
|
||||
const matchesStatus = template.status === filters.status
|
||||
const matchesStatus =
|
||||
filters.status === 'all' || template.status === filters.status
|
||||
const matchesKeyword =
|
||||
!keyword ||
|
||||
[template.name, template.code, template.department].join(' ').toLowerCase().includes(keyword)
|
||||
@@ -169,7 +171,8 @@ function addLocalTemplate(form: TemplateEditorForm) {
|
||||
name: form.name,
|
||||
code: form.templateCode,
|
||||
version: form.versionNo || 'v1',
|
||||
status: 'draft',
|
||||
// 原型闭环:新文书直接启用(工作流 UI 待签署端接入后恢复),保证创建后即可预览/发起。
|
||||
status: 'enabled',
|
||||
description: form.description,
|
||||
versionId: `local-version-${timestamp}`,
|
||||
departmentId: form.departmentId || null,
|
||||
@@ -200,6 +203,35 @@ function saveTemplate(form: TemplateEditorForm) {
|
||||
ElMessage.success(form.id ? '文书已更新' : '文书已创建')
|
||||
}
|
||||
|
||||
async function removeTemplate(template: DocumentTemplate) {
|
||||
const confirmed = await ElMessageBox.confirm(
|
||||
`确定删除文书「${template.name}」?删除后不可恢复。`,
|
||||
'删除文书',
|
||||
{ type: 'warning', confirmButtonText: '删除', cancelButtonText: '取消' },
|
||||
)
|
||||
.then(() => true)
|
||||
.catch(() => false)
|
||||
|
||||
if (!confirmed) {
|
||||
return
|
||||
}
|
||||
|
||||
// 移除文书后,顺带清理空分类与空科室分组,避免留下空壳节点。
|
||||
library.value = library.value
|
||||
.map((department) => ({
|
||||
...department,
|
||||
categories: department.categories
|
||||
.map((category) => ({
|
||||
...category,
|
||||
documents: category.documents.filter((document) => document.id !== template.id),
|
||||
}))
|
||||
.filter((category) => category.documents.length > 0),
|
||||
}))
|
||||
.filter((department) => department.categories.length > 0)
|
||||
|
||||
ElMessage.success('文书已删除')
|
||||
}
|
||||
|
||||
// 版本工作流(提交审核/发布等)随原模板编辑器移除,待签署端接入后按后端工作流接口恢复。
|
||||
|
||||
function toSigningTemplate(template: DocumentTemplate): SigningTemplate {
|
||||
@@ -265,20 +297,26 @@ onMounted(loadLibrary)
|
||||
@preview="handlePreview"
|
||||
@edit="showEditMessage"
|
||||
@initiate="openSigningDialog"
|
||||
@remove="removeTemplate"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div v-else class="empty-state">
|
||||
<div class="empty-icon" aria-hidden="true">⌕</div>
|
||||
<p>没有符合条件的模板</p>
|
||||
<button
|
||||
v-if="filters.keyword || filters.department"
|
||||
type="button"
|
||||
class="reset-button"
|
||||
@click="clearFilters"
|
||||
>
|
||||
清除筛选
|
||||
</button>
|
||||
<template v-if="allTemplates.length === 0">
|
||||
<p>文书库为空,点击右上角「新增文档」用 Word 创建第一份文书</p>
|
||||
</template>
|
||||
<template v-else>
|
||||
<p>没有符合条件的文书</p>
|
||||
<button
|
||||
v-if="filters.keyword || filters.department"
|
||||
type="button"
|
||||
class="reset-button"
|
||||
@click="clearFilters"
|
||||
>
|
||||
清除筛选
|
||||
</button>
|
||||
</template>
|
||||
</div>
|
||||
|
||||
<DocumentPreviewDialog
|
||||
|
||||
Reference in New Issue
Block a user