refactor: 优化编辑器组件和数据权限显示逻辑

重构 WangEditor 组件,简化双向绑定逻辑并添加防抖处理
移除角色管理页面中冗余的数据权限标签处理函数
This commit is contained in:
Ray.Hao
2026-02-14 10:57:25 +08:00
parent 47fa467434
commit 81c98de9cc
3 changed files with 32 additions and 52 deletions

View File

@@ -31,7 +31,7 @@ export function useNotice() {
...params,
};
const page = await NoticeAPI.getMyNoticePage(query);
list.value = page.data || [];
list.value = page.list || [];
}
async function read(id: string) {

View File

@@ -12,6 +12,8 @@
<div style="z-index: 999; border: 1px solid var(--el-border-color)">
<!-- 工具栏 -->
<Toolbar
v-if="editorRef"
:key="editorKey"
:editor="editorRef"
mode="simple"
:default-config="toolbarConfig"
@@ -19,11 +21,13 @@
/>
<!-- 编辑器 -->
<Editor
:key="editorKey"
v-model="modelValue"
:style="{ height: height, overflowY: 'hidden' }"
:default-config="editorConfig"
mode="simple"
@on-created="handleCreated"
@on-change="handleChange"
/>
</div>
</template>
@@ -45,56 +49,57 @@ defineProps({
default: "500px",
},
});
// 双向绑定
const modelValue = defineModel("modelValue", {
// 双向绑定 - 直接使用 v-model无需手动 setHtml
const modelValue = defineModel<string>({
type: String,
required: false,
default: "",
});
// 编辑器实例,必须用 shallowRef,重要!
// 编辑器实例,必须用 shallowRef
const editorRef = shallowRef();
const editorKey = ref(0);
const innerUpdating = ref(false);
// 工具栏配置
const toolbarConfig = ref<Partial<IToolbarConfig>>({});
const toolbarConfig: Partial<IToolbarConfig> = {};
// 编辑器配置
const editorConfig = ref<Partial<IEditorConfig>>({
const editorConfig: Partial<IEditorConfig> = {
placeholder: "请输入内容..",
MENU_CONF: {
uploadImage: {
customUpload(file: File, insertFn: InsertFnType) {
// 上传图片
FileAPI.uploadFile(file).then((data) => {
// 插入图片
insertFn(data.url, data.name, data.url);
});
async customUpload(file: File, insertFn: InsertFnType) {
const data = await FileAPI.uploadFile(file);
insertFn(data.url, data.name, data.url);
},
} as any,
},
});
};
// 记录 editor 实例,重要!
// 记录 editor 实例
const handleCreated = (editor: any) => {
editorRef.value = editor;
const value = modelValue.value ?? "";
if (value) {
editor.setHtml(value);
}
};
const handleChange = () => {
innerUpdating.value = true;
Promise.resolve().then(() => {
innerUpdating.value = false;
});
};
watch(
() => modelValue.value,
(value) => {
const editor = editorRef.value;
if (!editor) return;
const nextValue = value ?? "";
if (nextValue !== editor.getHtml()) {
editor.setHtml(nextValue);
}
() => {
if (innerUpdating.value) return;
editorRef.value = null;
editorKey.value += 1;
}
);
// 组件销毁时,及时销毁编辑器,重要!
// 组件销毁时,及时销毁编辑器
onBeforeUnmount(() => {
const editor = editorRef.value;
if (editor == null) return;