diff --git a/src/components/NoticeDropdown/useNotice.ts b/src/components/NoticeDropdown/useNotice.ts
index 8022b796..d1fce09c 100644
--- a/src/components/NoticeDropdown/useNotice.ts
+++ b/src/components/NoticeDropdown/useNotice.ts
@@ -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) {
diff --git a/src/components/WangEditor/index.vue b/src/components/WangEditor/index.vue
index 1e8d16b0..098aeefc 100644
--- a/src/components/WangEditor/index.vue
+++ b/src/components/WangEditor/index.vue
@@ -12,6 +12,8 @@
@@ -45,56 +49,57 @@ defineProps({
default: "500px",
},
});
-// 双向绑定
-const modelValue = defineModel("modelValue", {
+// 双向绑定 - 直接使用 v-model,无需手动 setHtml
+const modelValue = defineModel({
type: String,
required: false,
+ default: "",
});
-// 编辑器实例,必须用 shallowRef,重要!
+// 编辑器实例,必须用 shallowRef
const editorRef = shallowRef();
+const editorKey = ref(0);
+const innerUpdating = ref(false);
+
// 工具栏配置
-const toolbarConfig = ref>({});
+const toolbarConfig: Partial = {};
// 编辑器配置
-const editorConfig = ref>({
+const editorConfig: Partial = {
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;
diff --git a/src/views/system/role/index.vue b/src/views/system/role/index.vue
index 3a1971b1..1ff9929f 100644
--- a/src/views/system/role/index.vue
+++ b/src/views/system/role/index.vue
@@ -47,13 +47,7 @@
-
-
-
- {{ getDataScopeLabel(scope.row.dataScope) }}
-
-
-
+
@@ -306,25 +300,6 @@ const isExpanded = ref(true);
const parentChildLinked = ref(true);
-// 数据权限标签
-const dataScopeOptions = [
- { value: 1, label: "全部数据", type: "danger" },
- { value: 2, label: "部门及子部门数据", type: "warning" },
- { value: 3, label: "本部门数据", type: "primary" },
- { value: 4, label: "本人数据", type: "info" },
- { value: 5, label: "自定义部门数据", type: "success" },
-];
-
-function getDataScopeLabel(value: number): string {
- const option = dataScopeOptions.find((item) => item.value === value);
- return option ? option.label : "未知";
-}
-
-function getDataScopeTagType(value: number): string {
- const option = dataScopeOptions.find((item) => item.value === value);
- return option ? option.type : "info";
-}
-
// 获取数据
function fetchData() {
loading.value = true;