@robot-admin/naive-ui-components 0.3.6 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{C_Form-BoMQ3VH9.css.map → C_Form-DLb9FtAb.css.map} +1 -1
- package/dist/C_Form2.js +1 -1
- package/dist/C_Form2.js.map +1 -1
- package/dist/C_GlobalSearch-DoPjldFm.css.map +1 -0
- package/dist/C_GlobalSearch.cjs +5 -0
- package/dist/C_GlobalSearch.d.cts +2 -0
- package/dist/C_GlobalSearch.d.ts +2 -0
- package/dist/C_GlobalSearch.js +3 -0
- package/dist/C_GlobalSearch2.js +336 -0
- package/dist/C_GlobalSearch2.js.map +1 -0
- package/dist/{C_Markdown-Dmv8yaM4.css.map → C_Markdown-C2uiBVSW.css.map} +1 -1
- package/dist/C_Markdown2.js +1 -1
- package/dist/C_Markdown2.js.map +1 -1
- package/dist/{C_Table-BsAOkALe.css.map → C_Table-C55H4kPr.css.map} +1 -1
- package/dist/C_Table2.js +21 -4
- package/dist/C_Table2.js.map +1 -1
- package/dist/constants.d.ts +1 -1
- package/dist/constants2.d.ts +2 -2
- package/dist/constants3.d.ts +3 -3
- package/dist/constants4.d.ts +1 -1
- package/dist/data.d.ts +1 -1
- package/dist/data.d.ts.map +1 -1
- package/dist/index.cjs +5 -1
- package/dist/index.d.cts +24 -23
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.ts +24 -23
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/index.vue.d.ts +1 -1
- package/dist/index10.vue.d.ts +3 -3
- package/dist/index12.vue.d.ts +1 -1
- package/dist/index13.vue.d.ts +1 -1
- package/dist/index14.vue.d.ts +1 -1
- package/dist/index16.vue.d.ts +1 -1
- package/dist/index16.vue.d.ts.map +1 -1
- package/dist/index2.vue.d.ts +3 -3
- package/dist/index3.vue.d.ts +2 -2
- package/dist/index8.vue.d.ts +1 -1
- package/dist/resolver.cjs +1 -0
- package/dist/resolver.d.cts +1 -1
- package/dist/resolver.d.cts.map +1 -1
- package/dist/resolver.d.ts +1 -1
- package/dist/resolver.d.ts.map +1 -1
- package/dist/resolver.js +1 -0
- package/dist/resolver.js.map +1 -1
- package/dist/style.css +799 -181
- package/dist/useCalendarEvents.d.ts +1 -1
- package/dist/useCollapsePanel.d.ts +4 -4
- package/dist/useCropperCore.d.ts +3 -3
- package/dist/useDraggableLayout.d.ts +11 -11
- package/dist/useDynamicFormState.d.ts +6 -6
- package/dist/useDynamicFormState.d.ts.map +1 -1
- package/dist/useFullscreen.d.ts +2 -2
- package/dist/useGlobalSearch.d.ts +102 -0
- package/dist/useGlobalSearch.d.ts.map +1 -0
- package/dist/useInfiniteScroll.d.ts +3 -3
- package/dist/useModalEdit.d.ts +4 -4
- package/dist/useModalEdit.d.ts.map +1 -1
- package/dist/useQRCode.d.ts +3 -3
- package/dist/useQRCode.d.ts.map +1 -1
- package/dist/useSearchState.d.ts +1 -1
- package/dist/useSearchState.d.ts.map +1 -1
- package/dist/useSignatureHistory.d.ts +2 -2
- package/dist/useSplitResize.d.ts +6 -6
- package/dist/useSplitResize.d.ts.map +1 -1
- package/dist/useTimeSelection.d.ts +1 -1
- package/dist/useTreeOperations.d.ts +3 -3
- package/package.json +6 -1
package/dist/C_Markdown2.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"C_Markdown2.js","names":["isDark","modelValue","height","placeholder","toolbar","mode","tocNavPosition","defaultFullscreen","autofocus","includeLevel","leftToolbar","rightToolbar"],"sources":["../src/components/C_Markdown/index.vue","../src/components/C_Markdown/index.vue","../src/components/C_Markdown/index.vue"],"sourcesContent":["/* unplugin-vue-components disabled */<!--\r\n * @Author: ChenYu ycyplus@gmail.com\r\n * @Date: 2025-06-20\r\n * @Description: Markdown 编辑器封装组件\r\n * @Migration: naive-ui-components 组件库迁移版本\r\n * Copyright (c) 2025 by CHENY, All Rights Reserved.\r\n-->\r\n<template>\r\n <div class=\"c-markdown-wrapper\" :class=\"{ 'is-dark': isDark }\">\r\n <VMdEditor\r\n ref=\"editorRef\"\r\n :model-value=\"modelValue\"\r\n :height=\"height\"\r\n :placeholder=\"placeholder\"\r\n :toolbar=\"toolbar\"\r\n :mode=\"mode\"\r\n :upload-image-config=\"computedUploadImageConfig\"\r\n :toc-nav-position=\"tocNavPosition\"\r\n :default-fullscreen=\"defaultFullscreen\"\r\n :autofocus=\"autofocus\"\r\n :include-level=\"includeLevel\"\r\n :left-toolbar=\"leftToolbar\"\r\n :right-toolbar=\"rightToolbar\"\r\n :default-show-toc=\"true\"\r\n @update:model-value=\"handleInput\"\r\n @change=\"handleChange\"\r\n @save=\"handleSave\"\r\n @upload-image=\"handleUploadImage\"\r\n @fullscreen-change=\"handleFullscreenChange\"\r\n @copy-code-success=\"handleCopyCodeSuccess\"\r\n />\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { ref, computed, watch, onMounted } from \"vue\";\r\nimport VMdEditor from \"@kangc/v-md-editor\";\r\n\r\ndefineOptions({ name: \"C_Markdown\" });\r\n\r\nexport type InsertImageFunction = (config: {\r\n url: string;\r\n desc?: string;\r\n width?: string | number;\r\n height?: string | number;\r\n}) => void;\r\n\r\ninterface Props {\r\n modelValue?: string;\r\n height?: string | number;\r\n disabled?: boolean;\r\n placeholder?: string;\r\n mode?: \"edit\" | \"editable\" | \"preview\";\r\n toolbar?: object;\r\n uploadImageConfig?: {\r\n accept?: string;\r\n multiple?: boolean;\r\n [key: string]: any;\r\n };\r\n tocNavPosition?: \"left\" | \"right\";\r\n defaultFullscreen?: boolean;\r\n autofocus?: boolean;\r\n includeLevel?: number[];\r\n leftToolbar?: string;\r\n rightToolbar?: string;\r\n maxLength?: number;\r\n showWordCount?: boolean;\r\n autoSave?: boolean;\r\n autoSaveInterval?: number;\r\n /** 是否为暗色主题(外部传入) */\r\n isDark?: boolean;\r\n}\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n modelValue: \"\",\r\n height: \"400px\",\r\n disabled: false,\r\n placeholder: \"请输入 Markdown 内容...\",\r\n mode: \"editable\",\r\n tocNavPosition: \"right\",\r\n defaultFullscreen: false,\r\n autofocus: false,\r\n includeLevel: () => [1, 2, 3, 4, 5, 6],\r\n leftToolbar:\r\n \"undo redo clear | h bold italic strikethrough quote | ul ol table hr | link image code | save\",\r\n rightToolbar: \"preview toc sync-scroll fullscreen\",\r\n maxLength: 50000,\r\n showWordCount: true,\r\n autoSave: false,\r\n autoSaveInterval: 30000,\r\n isDark: false,\r\n});\r\n\r\ninterface Emits {\r\n \"update:modelValue\": [value: string];\r\n change: [text: string, html: string];\r\n save: [text: string, html: string];\r\n \"upload-image\": [\r\n event: Event,\r\n insertImage: InsertImageFunction,\r\n files: FileList,\r\n ];\r\n \"fullscreen-change\": [isFullscreen: boolean];\r\n \"copy-code-success\": [text: string];\r\n \"word-count-change\": [count: number];\r\n \"auto-save\": [text: string];\r\n \"max-length-exceeded\": [currentLength: number, maxLength: number];\r\n}\r\n\r\nconst emit = defineEmits<Emits>();\r\n\r\nconst editorRef = ref<any>(null);\r\nconst cachedHtml = ref(\"\");\r\n\r\nconst wordCount = computed(() => {\r\n return props.modelValue?.length || 0;\r\n});\r\n\r\nconst computedUploadImageConfig = computed(() => {\r\n const defaultConfig = {\r\n accept: \"image/*\",\r\n multiple: false,\r\n };\r\n return props.uploadImageConfig\r\n ? { ...defaultConfig, ...props.uploadImageConfig }\r\n : defaultConfig;\r\n});\r\n\r\nonMounted(() => {\r\n if (props.showWordCount && props.modelValue) {\r\n emit(\"word-count-change\", props.modelValue.length);\r\n }\r\n});\r\n\r\nwatch(\r\n () => props.modelValue,\r\n (newValue) => {\r\n if (props.showWordCount) {\r\n emit(\"word-count-change\", newValue?.length || 0);\r\n }\r\n },\r\n { immediate: true },\r\n);\r\n\r\nconst handleInput = (value: string) => {\r\n if (value.length > props.maxLength) {\r\n emit(\"max-length-exceeded\", value.length, props.maxLength);\r\n return;\r\n }\r\n emit(\"update:modelValue\", value);\r\n if (props.showWordCount) {\r\n emit(\"word-count-change\", value.length);\r\n }\r\n};\r\n\r\nconst handleChange = (text: string, html: string) => {\r\n cachedHtml.value = html;\r\n emit(\"change\", text, html);\r\n if (props.autoSave) {\r\n autoSave(text);\r\n }\r\n};\r\n\r\nconst handleSave = (text: string, html: string) => {\r\n emit(\"save\", text, html);\r\n};\r\n\r\nconst handleUploadImage = (\r\n event: Event,\r\n insertImage: InsertImageFunction,\r\n files: FileList,\r\n) => {\r\n emit(\"upload-image\", event, insertImage, files);\r\n};\r\n\r\nconst handleFullscreenChange = (isFullscreen: boolean) => {\r\n emit(\"fullscreen-change\", isFullscreen);\r\n};\r\n\r\nconst handleCopyCodeSuccess = (text: string) => {\r\n emit(\"copy-code-success\", text);\r\n};\r\n\r\nlet autoSaveTimer: ReturnType<typeof setTimeout> | null = null;\r\n\r\nconst autoSave = (text: string) => {\r\n if (autoSaveTimer) clearTimeout(autoSaveTimer);\r\n autoSaveTimer = setTimeout(() => {\r\n emit(\"auto-save\", text);\r\n }, props.autoSaveInterval);\r\n};\r\n\r\nconst focus = () => {\r\n editorRef.value?.focus();\r\n};\r\n\r\nconst getHtml = (): string => {\r\n return cachedHtml.value;\r\n};\r\n\r\nconst insertText = (text: string) => {\r\n editorRef.value?.insert((selected: string) => ({\r\n text: `${selected}${text}`,\r\n selected: text,\r\n }));\r\n};\r\n\r\ndefineExpose({\r\n focus,\r\n getHtml,\r\n insertText,\r\n wordCount,\r\n});\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n@use \"./index.scss\";\r\n</style>\r\n","/* unplugin-vue-components disabled */<!--\r\n * @Author: ChenYu ycyplus@gmail.com\r\n * @Date: 2025-06-20\r\n * @Description: Markdown 编辑器封装组件\r\n * @Migration: naive-ui-components 组件库迁移版本\r\n * Copyright (c) 2025 by CHENY, All Rights Reserved.\r\n-->\r\n<template>\r\n <div class=\"c-markdown-wrapper\" :class=\"{ 'is-dark': isDark }\">\r\n <VMdEditor\r\n ref=\"editorRef\"\r\n :model-value=\"modelValue\"\r\n :height=\"height\"\r\n :placeholder=\"placeholder\"\r\n :toolbar=\"toolbar\"\r\n :mode=\"mode\"\r\n :upload-image-config=\"computedUploadImageConfig\"\r\n :toc-nav-position=\"tocNavPosition\"\r\n :default-fullscreen=\"defaultFullscreen\"\r\n :autofocus=\"autofocus\"\r\n :include-level=\"includeLevel\"\r\n :left-toolbar=\"leftToolbar\"\r\n :right-toolbar=\"rightToolbar\"\r\n :default-show-toc=\"true\"\r\n @update:model-value=\"handleInput\"\r\n @change=\"handleChange\"\r\n @save=\"handleSave\"\r\n @upload-image=\"handleUploadImage\"\r\n @fullscreen-change=\"handleFullscreenChange\"\r\n @copy-code-success=\"handleCopyCodeSuccess\"\r\n />\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { ref, computed, watch, onMounted } from \"vue\";\r\nimport VMdEditor from \"@kangc/v-md-editor\";\r\n\r\ndefineOptions({ name: \"C_Markdown\" });\r\n\r\nexport type InsertImageFunction = (config: {\r\n url: string;\r\n desc?: string;\r\n width?: string | number;\r\n height?: string | number;\r\n}) => void;\r\n\r\ninterface Props {\r\n modelValue?: string;\r\n height?: string | number;\r\n disabled?: boolean;\r\n placeholder?: string;\r\n mode?: \"edit\" | \"editable\" | \"preview\";\r\n toolbar?: object;\r\n uploadImageConfig?: {\r\n accept?: string;\r\n multiple?: boolean;\r\n [key: string]: any;\r\n };\r\n tocNavPosition?: \"left\" | \"right\";\r\n defaultFullscreen?: boolean;\r\n autofocus?: boolean;\r\n includeLevel?: number[];\r\n leftToolbar?: string;\r\n rightToolbar?: string;\r\n maxLength?: number;\r\n showWordCount?: boolean;\r\n autoSave?: boolean;\r\n autoSaveInterval?: number;\r\n /** 是否为暗色主题(外部传入) */\r\n isDark?: boolean;\r\n}\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n modelValue: \"\",\r\n height: \"400px\",\r\n disabled: false,\r\n placeholder: \"请输入 Markdown 内容...\",\r\n mode: \"editable\",\r\n tocNavPosition: \"right\",\r\n defaultFullscreen: false,\r\n autofocus: false,\r\n includeLevel: () => [1, 2, 3, 4, 5, 6],\r\n leftToolbar:\r\n \"undo redo clear | h bold italic strikethrough quote | ul ol table hr | link image code | save\",\r\n rightToolbar: \"preview toc sync-scroll fullscreen\",\r\n maxLength: 50000,\r\n showWordCount: true,\r\n autoSave: false,\r\n autoSaveInterval: 30000,\r\n isDark: false,\r\n});\r\n\r\ninterface Emits {\r\n \"update:modelValue\": [value: string];\r\n change: [text: string, html: string];\r\n save: [text: string, html: string];\r\n \"upload-image\": [\r\n event: Event,\r\n insertImage: InsertImageFunction,\r\n files: FileList,\r\n ];\r\n \"fullscreen-change\": [isFullscreen: boolean];\r\n \"copy-code-success\": [text: string];\r\n \"word-count-change\": [count: number];\r\n \"auto-save\": [text: string];\r\n \"max-length-exceeded\": [currentLength: number, maxLength: number];\r\n}\r\n\r\nconst emit = defineEmits<Emits>();\r\n\r\nconst editorRef = ref<any>(null);\r\nconst cachedHtml = ref(\"\");\r\n\r\nconst wordCount = computed(() => {\r\n return props.modelValue?.length || 0;\r\n});\r\n\r\nconst computedUploadImageConfig = computed(() => {\r\n const defaultConfig = {\r\n accept: \"image/*\",\r\n multiple: false,\r\n };\r\n return props.uploadImageConfig\r\n ? { ...defaultConfig, ...props.uploadImageConfig }\r\n : defaultConfig;\r\n});\r\n\r\nonMounted(() => {\r\n if (props.showWordCount && props.modelValue) {\r\n emit(\"word-count-change\", props.modelValue.length);\r\n }\r\n});\r\n\r\nwatch(\r\n () => props.modelValue,\r\n (newValue) => {\r\n if (props.showWordCount) {\r\n emit(\"word-count-change\", newValue?.length || 0);\r\n }\r\n },\r\n { immediate: true },\r\n);\r\n\r\nconst handleInput = (value: string) => {\r\n if (value.length > props.maxLength) {\r\n emit(\"max-length-exceeded\", value.length, props.maxLength);\r\n return;\r\n }\r\n emit(\"update:modelValue\", value);\r\n if (props.showWordCount) {\r\n emit(\"word-count-change\", value.length);\r\n }\r\n};\r\n\r\nconst handleChange = (text: string, html: string) => {\r\n cachedHtml.value = html;\r\n emit(\"change\", text, html);\r\n if (props.autoSave) {\r\n autoSave(text);\r\n }\r\n};\r\n\r\nconst handleSave = (text: string, html: string) => {\r\n emit(\"save\", text, html);\r\n};\r\n\r\nconst handleUploadImage = (\r\n event: Event,\r\n insertImage: InsertImageFunction,\r\n files: FileList,\r\n) => {\r\n emit(\"upload-image\", event, insertImage, files);\r\n};\r\n\r\nconst handleFullscreenChange = (isFullscreen: boolean) => {\r\n emit(\"fullscreen-change\", isFullscreen);\r\n};\r\n\r\nconst handleCopyCodeSuccess = (text: string) => {\r\n emit(\"copy-code-success\", text);\r\n};\r\n\r\nlet autoSaveTimer: ReturnType<typeof setTimeout> | null = null;\r\n\r\nconst autoSave = (text: string) => {\r\n if (autoSaveTimer) clearTimeout(autoSaveTimer);\r\n autoSaveTimer = setTimeout(() => {\r\n emit(\"auto-save\", text);\r\n }, props.autoSaveInterval);\r\n};\r\n\r\nconst focus = () => {\r\n editorRef.value?.focus();\r\n};\r\n\r\nconst getHtml = (): string => {\r\n return cachedHtml.value;\r\n};\r\n\r\nconst insertText = (text: string) => {\r\n editorRef.value?.insert((selected: string) => ({\r\n text: `${selected}${text}`,\r\n selected: text,\r\n }));\r\n};\r\n\r\ndefineExpose({\r\n focus,\r\n getHtml,\r\n insertText,\r\n wordCount,\r\n});\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n@use \"./index.scss\";\r\n</style>\r\n","<!--\r\n * @Author: ChenYu ycyplus@gmail.com\r\n * @Date: 2025-06-20\r\n * @Description: Markdown 编辑器封装组件\r\n * @Migration: naive-ui-components 组件库迁移版本\r\n * Copyright (c) 2025 by CHENY, All Rights Reserved.\r\n-->\r\n<template>\r\n <div class=\"c-markdown-wrapper\" :class=\"{ 'is-dark': isDark }\">\r\n <VMdEditor\r\n ref=\"editorRef\"\r\n :model-value=\"modelValue\"\r\n :height=\"height\"\r\n :placeholder=\"placeholder\"\r\n :toolbar=\"toolbar\"\r\n :mode=\"mode\"\r\n :upload-image-config=\"computedUploadImageConfig\"\r\n :toc-nav-position=\"tocNavPosition\"\r\n :default-fullscreen=\"defaultFullscreen\"\r\n :autofocus=\"autofocus\"\r\n :include-level=\"includeLevel\"\r\n :left-toolbar=\"leftToolbar\"\r\n :right-toolbar=\"rightToolbar\"\r\n :default-show-toc=\"true\"\r\n @update:model-value=\"handleInput\"\r\n @change=\"handleChange\"\r\n @save=\"handleSave\"\r\n @upload-image=\"handleUploadImage\"\r\n @fullscreen-change=\"handleFullscreenChange\"\r\n @copy-code-success=\"handleCopyCodeSuccess\"\r\n />\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { ref, computed, watch, onMounted } from \"vue\";\r\nimport VMdEditor from \"@kangc/v-md-editor\";\r\n\r\ndefineOptions({ name: \"C_Markdown\" });\r\n\r\nexport type InsertImageFunction = (config: {\r\n url: string;\r\n desc?: string;\r\n width?: string | number;\r\n height?: string | number;\r\n}) => void;\r\n\r\ninterface Props {\r\n modelValue?: string;\r\n height?: string | number;\r\n disabled?: boolean;\r\n placeholder?: string;\r\n mode?: \"edit\" | \"editable\" | \"preview\";\r\n toolbar?: object;\r\n uploadImageConfig?: {\r\n accept?: string;\r\n multiple?: boolean;\r\n [key: string]: any;\r\n };\r\n tocNavPosition?: \"left\" | \"right\";\r\n defaultFullscreen?: boolean;\r\n autofocus?: boolean;\r\n includeLevel?: number[];\r\n leftToolbar?: string;\r\n rightToolbar?: string;\r\n maxLength?: number;\r\n showWordCount?: boolean;\r\n autoSave?: boolean;\r\n autoSaveInterval?: number;\r\n /** 是否为暗色主题(外部传入) */\r\n isDark?: boolean;\r\n}\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n modelValue: \"\",\r\n height: \"400px\",\r\n disabled: false,\r\n placeholder: \"请输入 Markdown 内容...\",\r\n mode: \"editable\",\r\n tocNavPosition: \"right\",\r\n defaultFullscreen: false,\r\n autofocus: false,\r\n includeLevel: () => [1, 2, 3, 4, 5, 6],\r\n leftToolbar:\r\n \"undo redo clear | h bold italic strikethrough quote | ul ol table hr | link image code | save\",\r\n rightToolbar: \"preview toc sync-scroll fullscreen\",\r\n maxLength: 50000,\r\n showWordCount: true,\r\n autoSave: false,\r\n autoSaveInterval: 30000,\r\n isDark: false,\r\n});\r\n\r\ninterface Emits {\r\n \"update:modelValue\": [value: string];\r\n change: [text: string, html: string];\r\n save: [text: string, html: string];\r\n \"upload-image\": [\r\n event: Event,\r\n insertImage: InsertImageFunction,\r\n files: FileList,\r\n ];\r\n \"fullscreen-change\": [isFullscreen: boolean];\r\n \"copy-code-success\": [text: string];\r\n \"word-count-change\": [count: number];\r\n \"auto-save\": [text: string];\r\n \"max-length-exceeded\": [currentLength: number, maxLength: number];\r\n}\r\n\r\nconst emit = defineEmits<Emits>();\r\n\r\nconst editorRef = ref<any>(null);\r\nconst cachedHtml = ref(\"\");\r\n\r\nconst wordCount = computed(() => {\r\n return props.modelValue?.length || 0;\r\n});\r\n\r\nconst computedUploadImageConfig = computed(() => {\r\n const defaultConfig = {\r\n accept: \"image/*\",\r\n multiple: false,\r\n };\r\n return props.uploadImageConfig\r\n ? { ...defaultConfig, ...props.uploadImageConfig }\r\n : defaultConfig;\r\n});\r\n\r\nonMounted(() => {\r\n if (props.showWordCount && props.modelValue) {\r\n emit(\"word-count-change\", props.modelValue.length);\r\n }\r\n});\r\n\r\nwatch(\r\n () => props.modelValue,\r\n (newValue) => {\r\n if (props.showWordCount) {\r\n emit(\"word-count-change\", newValue?.length || 0);\r\n }\r\n },\r\n { immediate: true },\r\n);\r\n\r\nconst handleInput = (value: string) => {\r\n if (value.length > props.maxLength) {\r\n emit(\"max-length-exceeded\", value.length, props.maxLength);\r\n return;\r\n }\r\n emit(\"update:modelValue\", value);\r\n if (props.showWordCount) {\r\n emit(\"word-count-change\", value.length);\r\n }\r\n};\r\n\r\nconst handleChange = (text: string, html: string) => {\r\n cachedHtml.value = html;\r\n emit(\"change\", text, html);\r\n if (props.autoSave) {\r\n autoSave(text);\r\n }\r\n};\r\n\r\nconst handleSave = (text: string, html: string) => {\r\n emit(\"save\", text, html);\r\n};\r\n\r\nconst handleUploadImage = (\r\n event: Event,\r\n insertImage: InsertImageFunction,\r\n files: FileList,\r\n) => {\r\n emit(\"upload-image\", event, insertImage, files);\r\n};\r\n\r\nconst handleFullscreenChange = (isFullscreen: boolean) => {\r\n emit(\"fullscreen-change\", isFullscreen);\r\n};\r\n\r\nconst handleCopyCodeSuccess = (text: string) => {\r\n emit(\"copy-code-success\", text);\r\n};\r\n\r\nlet autoSaveTimer: ReturnType<typeof setTimeout> | null = null;\r\n\r\nconst autoSave = (text: string) => {\r\n if (autoSaveTimer) clearTimeout(autoSaveTimer);\r\n autoSaveTimer = setTimeout(() => {\r\n emit(\"auto-save\", text);\r\n }, props.autoSaveInterval);\r\n};\r\n\r\nconst focus = () => {\r\n editorRef.value?.focus();\r\n};\r\n\r\nconst getHtml = (): string => {\r\n return cachedHtml.value;\r\n};\r\n\r\nconst insertText = (text: string) => {\r\n editorRef.value?.insert((selected: string) => ({\r\n text: `${selected}${text}`,\r\n selected: text,\r\n }));\r\n};\r\n\r\ndefineExpose({\r\n focus,\r\n getHtml,\r\n insertText,\r\n wordCount,\r\n});\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n@use \"./index.scss\";\r\n</style>\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ECyEA,MAAM,QAAQ;EAoCd,MAAM,OAAO;EAEb,MAAM,YAAY,IAAS,KAAK;EAChC,MAAM,aAAa,IAAI,GAAG;EAE1B,MAAM,YAAY,eAAe;AAC/B,UAAO,MAAM,YAAY,UAAU;IACnC;EAEF,MAAM,4BAA4B,eAAe;GAC/C,MAAM,gBAAgB;IACpB,QAAQ;IACR,UAAU;IACX;AACD,UAAO,MAAM,oBACT;IAAE,GAAG;IAAe,GAAG,MAAM;IAAmB,GAChD;IACJ;AAEF,kBAAgB;AACd,OAAI,MAAM,iBAAiB,MAAM,WAC/B,MAAK,qBAAqB,MAAM,WAAW,OAAO;IAEpD;AAEF,cACQ,MAAM,aACX,aAAa;AACZ,OAAI,MAAM,cACR,MAAK,qBAAqB,UAAU,UAAU,EAAE;KAGpD,EAAE,WAAW,MAAM,CACpB;EAED,MAAM,eAAe,UAAkB;AACrC,OAAI,MAAM,SAAS,MAAM,WAAW;AAClC,SAAK,uBAAuB,MAAM,QAAQ,MAAM,UAAU;AAC1D;;AAEF,QAAK,qBAAqB,MAAM;AAChC,OAAI,MAAM,cACR,MAAK,qBAAqB,MAAM,OAAO;;EAI3C,MAAM,gBAAgB,MAAc,SAAiB;AACnD,cAAW,QAAQ;AACnB,QAAK,UAAU,MAAM,KAAK;AAC1B,OAAI,MAAM,SACR,UAAS,KAAK;;EAIlB,MAAM,cAAc,MAAc,SAAiB;AACjD,QAAK,QAAQ,MAAM,KAAK;;EAG1B,MAAM,qBACJ,OACA,aACA,UACG;AACH,QAAK,gBAAgB,OAAO,aAAa,MAAM;;EAGjD,MAAM,0BAA0B,iBAA0B;AACxD,QAAK,qBAAqB,aAAa;;EAGzC,MAAM,yBAAyB,SAAiB;AAC9C,QAAK,qBAAqB,KAAK;;EAGjC,IAAI,gBAAsD;EAE1D,MAAM,YAAY,SAAiB;AACjC,OAAI,cAAe,cAAa,cAAc;AAC9C,mBAAgB,iBAAiB;AAC/B,SAAK,aAAa,KAAK;MACtB,MAAM,iBAAiB;;EAG5B,MAAM,cAAc;AAClB,aAAU,OAAO,OAAO;;EAG1B,MAAM,gBAAwB;AAC5B,UAAO,WAAW;;EAGpB,MAAM,cAAc,SAAiB;AACnC,aAAU,OAAO,QAAQ,cAAsB;IAC7C,MAAM,GAAG,WAAW;IACpB,UAAU;IACX,EAAE;;AAGL,WAAa;GACX;GACA;GACA;GACA;GACD,CAAC;;uBA5MA,mBAuBM,OAAA,EAvBD,OAAK,eAAA,CAAC,sBAAoB,EAAA,WAAsBA,KAAAA,QAAM,CAAA,CAAA,KACzD,YAqBE,MAAA,UAAA,EAAA;aApBI;IAAJ,KAAI;IACH,eAAaC,KAAAA;IACb,QAAQC,KAAAA;IACR,aAAaC,KAAAA;IACb,SAASC,KAAAA;IACT,MAAMC,KAAAA;IACN,uBAAqB,0BAAA;IACrB,oBAAkBC,KAAAA;IAClB,sBAAoBC,KAAAA;IACpB,WAAWC,KAAAA;IACX,iBAAeC,KAAAA;IACf,gBAAcC,KAAAA;IACd,iBAAeC,KAAAA;IACf,oBAAkB;IAClB,uBAAoB;IACpB,UAAQ;IACR,QAAM;IACN,eAAc;IACd,oBAAmB;IACnB,mBAAmB"}
|
|
1
|
+
{"version":3,"file":"C_Markdown2.js","names":["isDark","modelValue","height","placeholder","toolbar","mode","tocNavPosition","defaultFullscreen","autofocus","includeLevel","leftToolbar","rightToolbar"],"sources":["../src/components/C_Markdown/index.vue","../src/components/C_Markdown/index.vue","../src/components/C_Markdown/index.vue"],"sourcesContent":["/* unplugin-vue-components disabled */<!--\n * @Author: ChenYu ycyplus@gmail.com\n * @Date: 2025-06-20\n * @Description: Markdown 编辑器封装组件\n * @Migration: naive-ui-components 组件库迁移版本\n * Copyright (c) 2025 by CHENY, All Rights Reserved.\n-->\n<template>\n <div class=\"c-markdown-wrapper\" :class=\"{ 'is-dark': isDark }\">\n <VMdEditor\n ref=\"editorRef\"\n :model-value=\"modelValue\"\n :height=\"height\"\n :placeholder=\"placeholder\"\n :toolbar=\"toolbar\"\n :mode=\"mode\"\n :upload-image-config=\"computedUploadImageConfig\"\n :toc-nav-position=\"tocNavPosition\"\n :default-fullscreen=\"defaultFullscreen\"\n :autofocus=\"autofocus\"\n :include-level=\"includeLevel\"\n :left-toolbar=\"leftToolbar\"\n :right-toolbar=\"rightToolbar\"\n :default-show-toc=\"true\"\n @update:model-value=\"handleInput\"\n @change=\"handleChange\"\n @save=\"handleSave\"\n @upload-image=\"handleUploadImage\"\n @fullscreen-change=\"handleFullscreenChange\"\n @copy-code-success=\"handleCopyCodeSuccess\"\n />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, watch, onMounted } from \"vue\";\nimport VMdEditor from \"@kangc/v-md-editor\";\n\ndefineOptions({ name: \"C_Markdown\" });\n\nexport type InsertImageFunction = (config: {\n url: string;\n desc?: string;\n width?: string | number;\n height?: string | number;\n}) => void;\n\ninterface Props {\n modelValue?: string;\n height?: string | number;\n disabled?: boolean;\n placeholder?: string;\n mode?: \"edit\" | \"editable\" | \"preview\";\n toolbar?: object;\n uploadImageConfig?: {\n accept?: string;\n multiple?: boolean;\n [key: string]: any;\n };\n tocNavPosition?: \"left\" | \"right\";\n defaultFullscreen?: boolean;\n autofocus?: boolean;\n includeLevel?: number[];\n leftToolbar?: string;\n rightToolbar?: string;\n maxLength?: number;\n showWordCount?: boolean;\n autoSave?: boolean;\n autoSaveInterval?: number;\n /** 是否为暗色主题(外部传入) */\n isDark?: boolean;\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n modelValue: \"\",\n height: \"400px\",\n disabled: false,\n placeholder: \"请输入 Markdown 内容...\",\n mode: \"editable\",\n tocNavPosition: \"right\",\n defaultFullscreen: false,\n autofocus: false,\n includeLevel: () => [1, 2, 3, 4, 5, 6],\n leftToolbar:\n \"undo redo clear | h bold italic strikethrough quote | ul ol table hr | link image code | save\",\n rightToolbar: \"preview toc sync-scroll fullscreen\",\n maxLength: 50000,\n showWordCount: true,\n autoSave: false,\n autoSaveInterval: 30000,\n isDark: false,\n});\n\ninterface Emits {\n \"update:modelValue\": [value: string];\n change: [text: string, html: string];\n save: [text: string, html: string];\n \"upload-image\": [\n event: Event,\n insertImage: InsertImageFunction,\n files: FileList,\n ];\n \"fullscreen-change\": [isFullscreen: boolean];\n \"copy-code-success\": [text: string];\n \"word-count-change\": [count: number];\n \"auto-save\": [text: string];\n \"max-length-exceeded\": [currentLength: number, maxLength: number];\n}\n\nconst emit = defineEmits<Emits>();\n\nconst editorRef = ref<any>(null);\nconst cachedHtml = ref(\"\");\n\nconst wordCount = computed(() => {\n return props.modelValue?.length || 0;\n});\n\nconst computedUploadImageConfig = computed(() => {\n const defaultConfig = {\n accept: \"image/*\",\n multiple: false,\n };\n return props.uploadImageConfig\n ? { ...defaultConfig, ...props.uploadImageConfig }\n : defaultConfig;\n});\n\nonMounted(() => {\n if (props.showWordCount && props.modelValue) {\n emit(\"word-count-change\", props.modelValue.length);\n }\n});\n\nwatch(\n () => props.modelValue,\n (newValue) => {\n if (props.showWordCount) {\n emit(\"word-count-change\", newValue?.length || 0);\n }\n },\n { immediate: true },\n);\n\nconst handleInput = (value: string) => {\n if (value.length > props.maxLength) {\n emit(\"max-length-exceeded\", value.length, props.maxLength);\n return;\n }\n emit(\"update:modelValue\", value);\n if (props.showWordCount) {\n emit(\"word-count-change\", value.length);\n }\n};\n\nconst handleChange = (text: string, html: string) => {\n cachedHtml.value = html;\n emit(\"change\", text, html);\n if (props.autoSave) {\n autoSave(text);\n }\n};\n\nconst handleSave = (text: string, html: string) => {\n emit(\"save\", text, html);\n};\n\nconst handleUploadImage = (\n event: Event,\n insertImage: InsertImageFunction,\n files: FileList,\n) => {\n emit(\"upload-image\", event, insertImage, files);\n};\n\nconst handleFullscreenChange = (isFullscreen: boolean) => {\n emit(\"fullscreen-change\", isFullscreen);\n};\n\nconst handleCopyCodeSuccess = (text: string) => {\n emit(\"copy-code-success\", text);\n};\n\nlet autoSaveTimer: ReturnType<typeof setTimeout> | null = null;\n\nconst autoSave = (text: string) => {\n if (autoSaveTimer) clearTimeout(autoSaveTimer);\n autoSaveTimer = setTimeout(() => {\n emit(\"auto-save\", text);\n }, props.autoSaveInterval);\n};\n\nconst focus = () => {\n editorRef.value?.focus();\n};\n\nconst getHtml = (): string => {\n return cachedHtml.value;\n};\n\nconst insertText = (text: string) => {\n editorRef.value?.insert((selected: string) => ({\n text: `${selected}${text}`,\n selected: text,\n }));\n};\n\ndefineExpose({\n focus,\n getHtml,\n insertText,\n wordCount,\n});\n</script>\n\n<style lang=\"scss\" scoped>\n@use \"./index.scss\";\n</style>\n","/* unplugin-vue-components disabled */<!--\n * @Author: ChenYu ycyplus@gmail.com\n * @Date: 2025-06-20\n * @Description: Markdown 编辑器封装组件\n * @Migration: naive-ui-components 组件库迁移版本\n * Copyright (c) 2025 by CHENY, All Rights Reserved.\n-->\n<template>\n <div class=\"c-markdown-wrapper\" :class=\"{ 'is-dark': isDark }\">\n <VMdEditor\n ref=\"editorRef\"\n :model-value=\"modelValue\"\n :height=\"height\"\n :placeholder=\"placeholder\"\n :toolbar=\"toolbar\"\n :mode=\"mode\"\n :upload-image-config=\"computedUploadImageConfig\"\n :toc-nav-position=\"tocNavPosition\"\n :default-fullscreen=\"defaultFullscreen\"\n :autofocus=\"autofocus\"\n :include-level=\"includeLevel\"\n :left-toolbar=\"leftToolbar\"\n :right-toolbar=\"rightToolbar\"\n :default-show-toc=\"true\"\n @update:model-value=\"handleInput\"\n @change=\"handleChange\"\n @save=\"handleSave\"\n @upload-image=\"handleUploadImage\"\n @fullscreen-change=\"handleFullscreenChange\"\n @copy-code-success=\"handleCopyCodeSuccess\"\n />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, watch, onMounted } from \"vue\";\nimport VMdEditor from \"@kangc/v-md-editor\";\n\ndefineOptions({ name: \"C_Markdown\" });\n\nexport type InsertImageFunction = (config: {\n url: string;\n desc?: string;\n width?: string | number;\n height?: string | number;\n}) => void;\n\ninterface Props {\n modelValue?: string;\n height?: string | number;\n disabled?: boolean;\n placeholder?: string;\n mode?: \"edit\" | \"editable\" | \"preview\";\n toolbar?: object;\n uploadImageConfig?: {\n accept?: string;\n multiple?: boolean;\n [key: string]: any;\n };\n tocNavPosition?: \"left\" | \"right\";\n defaultFullscreen?: boolean;\n autofocus?: boolean;\n includeLevel?: number[];\n leftToolbar?: string;\n rightToolbar?: string;\n maxLength?: number;\n showWordCount?: boolean;\n autoSave?: boolean;\n autoSaveInterval?: number;\n /** 是否为暗色主题(外部传入) */\n isDark?: boolean;\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n modelValue: \"\",\n height: \"400px\",\n disabled: false,\n placeholder: \"请输入 Markdown 内容...\",\n mode: \"editable\",\n tocNavPosition: \"right\",\n defaultFullscreen: false,\n autofocus: false,\n includeLevel: () => [1, 2, 3, 4, 5, 6],\n leftToolbar:\n \"undo redo clear | h bold italic strikethrough quote | ul ol table hr | link image code | save\",\n rightToolbar: \"preview toc sync-scroll fullscreen\",\n maxLength: 50000,\n showWordCount: true,\n autoSave: false,\n autoSaveInterval: 30000,\n isDark: false,\n});\n\ninterface Emits {\n \"update:modelValue\": [value: string];\n change: [text: string, html: string];\n save: [text: string, html: string];\n \"upload-image\": [\n event: Event,\n insertImage: InsertImageFunction,\n files: FileList,\n ];\n \"fullscreen-change\": [isFullscreen: boolean];\n \"copy-code-success\": [text: string];\n \"word-count-change\": [count: number];\n \"auto-save\": [text: string];\n \"max-length-exceeded\": [currentLength: number, maxLength: number];\n}\n\nconst emit = defineEmits<Emits>();\n\nconst editorRef = ref<any>(null);\nconst cachedHtml = ref(\"\");\n\nconst wordCount = computed(() => {\n return props.modelValue?.length || 0;\n});\n\nconst computedUploadImageConfig = computed(() => {\n const defaultConfig = {\n accept: \"image/*\",\n multiple: false,\n };\n return props.uploadImageConfig\n ? { ...defaultConfig, ...props.uploadImageConfig }\n : defaultConfig;\n});\n\nonMounted(() => {\n if (props.showWordCount && props.modelValue) {\n emit(\"word-count-change\", props.modelValue.length);\n }\n});\n\nwatch(\n () => props.modelValue,\n (newValue) => {\n if (props.showWordCount) {\n emit(\"word-count-change\", newValue?.length || 0);\n }\n },\n { immediate: true },\n);\n\nconst handleInput = (value: string) => {\n if (value.length > props.maxLength) {\n emit(\"max-length-exceeded\", value.length, props.maxLength);\n return;\n }\n emit(\"update:modelValue\", value);\n if (props.showWordCount) {\n emit(\"word-count-change\", value.length);\n }\n};\n\nconst handleChange = (text: string, html: string) => {\n cachedHtml.value = html;\n emit(\"change\", text, html);\n if (props.autoSave) {\n autoSave(text);\n }\n};\n\nconst handleSave = (text: string, html: string) => {\n emit(\"save\", text, html);\n};\n\nconst handleUploadImage = (\n event: Event,\n insertImage: InsertImageFunction,\n files: FileList,\n) => {\n emit(\"upload-image\", event, insertImage, files);\n};\n\nconst handleFullscreenChange = (isFullscreen: boolean) => {\n emit(\"fullscreen-change\", isFullscreen);\n};\n\nconst handleCopyCodeSuccess = (text: string) => {\n emit(\"copy-code-success\", text);\n};\n\nlet autoSaveTimer: ReturnType<typeof setTimeout> | null = null;\n\nconst autoSave = (text: string) => {\n if (autoSaveTimer) clearTimeout(autoSaveTimer);\n autoSaveTimer = setTimeout(() => {\n emit(\"auto-save\", text);\n }, props.autoSaveInterval);\n};\n\nconst focus = () => {\n editorRef.value?.focus();\n};\n\nconst getHtml = (): string => {\n return cachedHtml.value;\n};\n\nconst insertText = (text: string) => {\n editorRef.value?.insert((selected: string) => ({\n text: `${selected}${text}`,\n selected: text,\n }));\n};\n\ndefineExpose({\n focus,\n getHtml,\n insertText,\n wordCount,\n});\n</script>\n\n<style lang=\"scss\" scoped>\n@use \"./index.scss\";\n</style>\n","<!--\n * @Author: ChenYu ycyplus@gmail.com\n * @Date: 2025-06-20\n * @Description: Markdown 编辑器封装组件\n * @Migration: naive-ui-components 组件库迁移版本\n * Copyright (c) 2025 by CHENY, All Rights Reserved.\n-->\n<template>\n <div class=\"c-markdown-wrapper\" :class=\"{ 'is-dark': isDark }\">\n <VMdEditor\n ref=\"editorRef\"\n :model-value=\"modelValue\"\n :height=\"height\"\n :placeholder=\"placeholder\"\n :toolbar=\"toolbar\"\n :mode=\"mode\"\n :upload-image-config=\"computedUploadImageConfig\"\n :toc-nav-position=\"tocNavPosition\"\n :default-fullscreen=\"defaultFullscreen\"\n :autofocus=\"autofocus\"\n :include-level=\"includeLevel\"\n :left-toolbar=\"leftToolbar\"\n :right-toolbar=\"rightToolbar\"\n :default-show-toc=\"true\"\n @update:model-value=\"handleInput\"\n @change=\"handleChange\"\n @save=\"handleSave\"\n @upload-image=\"handleUploadImage\"\n @fullscreen-change=\"handleFullscreenChange\"\n @copy-code-success=\"handleCopyCodeSuccess\"\n />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, watch, onMounted } from \"vue\";\nimport VMdEditor from \"@kangc/v-md-editor\";\n\ndefineOptions({ name: \"C_Markdown\" });\n\nexport type InsertImageFunction = (config: {\n url: string;\n desc?: string;\n width?: string | number;\n height?: string | number;\n}) => void;\n\ninterface Props {\n modelValue?: string;\n height?: string | number;\n disabled?: boolean;\n placeholder?: string;\n mode?: \"edit\" | \"editable\" | \"preview\";\n toolbar?: object;\n uploadImageConfig?: {\n accept?: string;\n multiple?: boolean;\n [key: string]: any;\n };\n tocNavPosition?: \"left\" | \"right\";\n defaultFullscreen?: boolean;\n autofocus?: boolean;\n includeLevel?: number[];\n leftToolbar?: string;\n rightToolbar?: string;\n maxLength?: number;\n showWordCount?: boolean;\n autoSave?: boolean;\n autoSaveInterval?: number;\n /** 是否为暗色主题(外部传入) */\n isDark?: boolean;\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n modelValue: \"\",\n height: \"400px\",\n disabled: false,\n placeholder: \"请输入 Markdown 内容...\",\n mode: \"editable\",\n tocNavPosition: \"right\",\n defaultFullscreen: false,\n autofocus: false,\n includeLevel: () => [1, 2, 3, 4, 5, 6],\n leftToolbar:\n \"undo redo clear | h bold italic strikethrough quote | ul ol table hr | link image code | save\",\n rightToolbar: \"preview toc sync-scroll fullscreen\",\n maxLength: 50000,\n showWordCount: true,\n autoSave: false,\n autoSaveInterval: 30000,\n isDark: false,\n});\n\ninterface Emits {\n \"update:modelValue\": [value: string];\n change: [text: string, html: string];\n save: [text: string, html: string];\n \"upload-image\": [\n event: Event,\n insertImage: InsertImageFunction,\n files: FileList,\n ];\n \"fullscreen-change\": [isFullscreen: boolean];\n \"copy-code-success\": [text: string];\n \"word-count-change\": [count: number];\n \"auto-save\": [text: string];\n \"max-length-exceeded\": [currentLength: number, maxLength: number];\n}\n\nconst emit = defineEmits<Emits>();\n\nconst editorRef = ref<any>(null);\nconst cachedHtml = ref(\"\");\n\nconst wordCount = computed(() => {\n return props.modelValue?.length || 0;\n});\n\nconst computedUploadImageConfig = computed(() => {\n const defaultConfig = {\n accept: \"image/*\",\n multiple: false,\n };\n return props.uploadImageConfig\n ? { ...defaultConfig, ...props.uploadImageConfig }\n : defaultConfig;\n});\n\nonMounted(() => {\n if (props.showWordCount && props.modelValue) {\n emit(\"word-count-change\", props.modelValue.length);\n }\n});\n\nwatch(\n () => props.modelValue,\n (newValue) => {\n if (props.showWordCount) {\n emit(\"word-count-change\", newValue?.length || 0);\n }\n },\n { immediate: true },\n);\n\nconst handleInput = (value: string) => {\n if (value.length > props.maxLength) {\n emit(\"max-length-exceeded\", value.length, props.maxLength);\n return;\n }\n emit(\"update:modelValue\", value);\n if (props.showWordCount) {\n emit(\"word-count-change\", value.length);\n }\n};\n\nconst handleChange = (text: string, html: string) => {\n cachedHtml.value = html;\n emit(\"change\", text, html);\n if (props.autoSave) {\n autoSave(text);\n }\n};\n\nconst handleSave = (text: string, html: string) => {\n emit(\"save\", text, html);\n};\n\nconst handleUploadImage = (\n event: Event,\n insertImage: InsertImageFunction,\n files: FileList,\n) => {\n emit(\"upload-image\", event, insertImage, files);\n};\n\nconst handleFullscreenChange = (isFullscreen: boolean) => {\n emit(\"fullscreen-change\", isFullscreen);\n};\n\nconst handleCopyCodeSuccess = (text: string) => {\n emit(\"copy-code-success\", text);\n};\n\nlet autoSaveTimer: ReturnType<typeof setTimeout> | null = null;\n\nconst autoSave = (text: string) => {\n if (autoSaveTimer) clearTimeout(autoSaveTimer);\n autoSaveTimer = setTimeout(() => {\n emit(\"auto-save\", text);\n }, props.autoSaveInterval);\n};\n\nconst focus = () => {\n editorRef.value?.focus();\n};\n\nconst getHtml = (): string => {\n return cachedHtml.value;\n};\n\nconst insertText = (text: string) => {\n editorRef.value?.insert((selected: string) => ({\n text: `${selected}${text}`,\n selected: text,\n }));\n};\n\ndefineExpose({\n focus,\n getHtml,\n insertText,\n wordCount,\n});\n</script>\n\n<style lang=\"scss\" scoped>\n@use \"./index.scss\";\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ECyEA,MAAM,QAAQ;EAoCd,MAAM,OAAO;EAEb,MAAM,YAAY,IAAS,KAAK;EAChC,MAAM,aAAa,IAAI,GAAG;EAE1B,MAAM,YAAY,eAAe;AAC/B,UAAO,MAAM,YAAY,UAAU;IACnC;EAEF,MAAM,4BAA4B,eAAe;GAC/C,MAAM,gBAAgB;IACpB,QAAQ;IACR,UAAU;IACX;AACD,UAAO,MAAM,oBACT;IAAE,GAAG;IAAe,GAAG,MAAM;IAAkB,GAC/C;IACJ;AAEF,kBAAgB;AACd,OAAI,MAAM,iBAAiB,MAAM,WAC/B,MAAK,qBAAqB,MAAM,WAAW,OAAO;IAEpD;AAEF,cACQ,MAAM,aACX,aAAa;AACZ,OAAI,MAAM,cACR,MAAK,qBAAqB,UAAU,UAAU,EAAE;KAGpD,EAAE,WAAW,MAAM,CACpB;EAED,MAAM,eAAe,UAAkB;AACrC,OAAI,MAAM,SAAS,MAAM,WAAW;AAClC,SAAK,uBAAuB,MAAM,QAAQ,MAAM,UAAU;AAC1D;;AAEF,QAAK,qBAAqB,MAAM;AAChC,OAAI,MAAM,cACR,MAAK,qBAAqB,MAAM,OAAO;;EAI3C,MAAM,gBAAgB,MAAc,SAAiB;AACnD,cAAW,QAAQ;AACnB,QAAK,UAAU,MAAM,KAAK;AAC1B,OAAI,MAAM,SACR,UAAS,KAAK;;EAIlB,MAAM,cAAc,MAAc,SAAiB;AACjD,QAAK,QAAQ,MAAM,KAAK;;EAG1B,MAAM,qBACJ,OACA,aACA,UACG;AACH,QAAK,gBAAgB,OAAO,aAAa,MAAM;;EAGjD,MAAM,0BAA0B,iBAA0B;AACxD,QAAK,qBAAqB,aAAa;;EAGzC,MAAM,yBAAyB,SAAiB;AAC9C,QAAK,qBAAqB,KAAK;;EAGjC,IAAI,gBAAsD;EAE1D,MAAM,YAAY,SAAiB;AACjC,OAAI,cAAe,cAAa,cAAc;AAC9C,mBAAgB,iBAAiB;AAC/B,SAAK,aAAa,KAAK;MACtB,MAAM,iBAAiB;;EAG5B,MAAM,cAAc;AAClB,aAAU,OAAO,OAAO;;EAG1B,MAAM,gBAAwB;AAC5B,UAAO,WAAW;;EAGpB,MAAM,cAAc,SAAiB;AACnC,aAAU,OAAO,QAAQ,cAAsB;IAC7C,MAAM,GAAG,WAAW;IACpB,UAAU;IACX,EAAE;;AAGL,WAAa;GACX;GACA;GACA;GACA;GACD,CAAC;;uBA5MA,mBAuBM,OAAA,EAvBD,OAAK,eAAA,CAAC,sBAAoB,EAAA,WAAsBA,KAAAA,QAAM,CAAA,CAAA,KACzD,YAqBE,MAAA,UAAA,EAAA;aApBI;IAAJ,KAAI;IACH,eAAaC,KAAAA;IACb,QAAQC,KAAAA;IACR,aAAaC,KAAAA;IACb,SAASC,KAAAA;IACT,MAAMC,KAAAA;IACN,uBAAqB,0BAAA;IACrB,oBAAkBC,KAAAA;IAClB,sBAAoBC,KAAAA;IACpB,WAAWC,KAAAA;IACX,iBAAeC,KAAAA;IACf,gBAAcC,KAAAA;IACd,iBAAeC,KAAAA;IACf,oBAAkB;IAClB,uBAAoB;IACpB,UAAQ;IACR,QAAM;IACN,eAAc;IACd,oBAAmB;IACnB,mBAAmB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"C_Table-BsAOkALe.css","names":[],"sources":["../src/components/C_Table/components/ColumnSettings/index.vue?vue&type=style&index=0&scoped=a4d013ea&lang.scss","../src/components/C_Table/index.vue?vue&type=style&index=0&scoped=360ced03&lang.scss"],"sourcesContent":["/* unplugin-vue-components disabled */.column-management-tab .search-row[data-v-a4d013ea] {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 12px;\n}\n.column-management-tab .search-row .search-input[data-v-a4d013ea] {\n flex: 1;\n min-width: 0;\n}\n.column-management-tab .search-row .resizable-control[data-v-a4d013ea] {\n display: flex;\n align-items: center;\n flex-shrink: 0;\n padding: 0 10px;\n height: 34px;\n background: var(--n-color-target);\n border-radius: 6px;\n white-space: nowrap;\n}\n.column-management-tab .top-actions-bar[data-v-a4d013ea] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n padding: 10px 12px;\n background: var(--n-color-target);\n border-radius: 6px;\n}\n.column-management-tab .top-actions-bar .stats-info[data-v-a4d013ea] {\n flex: 1;\n}\n.column-management-tab .top-actions-bar .quick-actions[data-v-a4d013ea] {\n flex-shrink: 0;\n}\n.column-management-tab .column-list .column-item[data-v-a4d013ea] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 6px 4px;\n margin-bottom: 4px;\n border-radius: 4px;\n background: transparent;\n cursor: move;\n transition: all 0.2s ease;\n}\n.column-management-tab .column-list .column-item[data-v-a4d013ea]:hover {\n background: var(--n-color-target);\n}\n.column-management-tab .column-list .column-item.disabled[data-v-a4d013ea] {\n opacity: 0.6;\n cursor: not-allowed;\n}\n.column-management-tab .column-list .column-item.fixed-left[data-v-a4d013ea] {\n background: rgba(24, 160, 88, 0.08);\n}\n.column-management-tab .column-list .column-item.fixed-right[data-v-a4d013ea] {\n background: rgba(240, 138, 0, 0.08);\n}\n.column-management-tab .column-list .column-item .column-info[data-v-a4d013ea] {\n display: flex;\n align-items: center;\n flex: 1;\n gap: 10px;\n min-width: 0;\n}\n.column-management-tab .column-list .column-item .column-info .column-controls[data-v-a4d013ea] {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-shrink: 0;\n}\n.column-management-tab .column-list .column-item .column-info .column-controls .drag-handle[data-v-a4d013ea] {\n color: var(--n-text-color-3);\n cursor: grab;\n}\n.column-management-tab .column-list .column-item .column-info .column-controls .drag-handle[data-v-a4d013ea]:active {\n cursor: grabbing;\n}\n.column-management-tab .column-list .column-item .column-info .column-controls .drag-handle.disabled[data-v-a4d013ea] {\n cursor: not-allowed;\n opacity: 0.3;\n}\n.column-management-tab .column-list .column-item .column-info .column-details[data-v-a4d013ea] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n flex: 1;\n min-width: 0;\n overflow: hidden;\n}\n.column-management-tab .column-list .column-item .column-actions[data-v-a4d013ea] {\n display: flex;\n align-items: center;\n gap: 6px;\n flex-shrink: 0;\n}\n.column-management-tab .column-list .column-item .column-actions .drag-controls[data-v-a4d013ea] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n.column-management-tab .column-list .column-item .column-actions .drag-controls .c-icon[data-v-a4d013ea] {\n opacity: 0.6;\n transition: all 0.2s ease;\n}\n.column-management-tab .column-list .column-item .column-actions .drag-controls .c-icon[data-v-a4d013ea]:not(.disabled):hover {\n opacity: 1;\n transform: scale(1.15);\n}\n.column-management-tab .column-list .column-item .column-actions .drag-controls .c-icon.disabled[data-v-a4d013ea] {\n opacity: 0.3;\n cursor: not-allowed;\n}\n.column-management-tab .column-list .column-item .column-actions .c-icon[data-v-a4d013ea] {\n transition: all 0.2s ease;\n}\n.column-management-tab .column-list .column-item .column-actions .c-icon[data-v-a4d013ea]:hover {\n transform: scale(1.15);\n}","/* unplugin-vue-components disabled *//* ================= 1. 组件根容器 ================= */\n.c-table-wrapper[data-v-360ced03] {\n width: 100%;\n position: relative;\n}\n\n/* ================= 2. 表格工具栏 ================= */\n.table-toolbar[data-v-360ced03] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n}\n.table-toolbar .toolbar-left[data-v-360ced03] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n.table-toolbar .toolbar-right[data-v-360ced03] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.table-toolbar .toolbar-right .column-settings-btn[data-v-360ced03] {\n opacity: 0.6;\n transition: opacity 0.2s ease, transform 0.2s ease;\n cursor: pointer;\n}\n.table-toolbar .toolbar-right .column-settings-btn[data-v-360ced03]:hover {\n opacity: 1;\n transform: scale(1.1);\n}\n\n/* ================= 3. 动态行工具栏 ================= */\n.dynamic-rows-toolbar[data-v-360ced03] {\n margin-bottom: 16px;\n padding: 16px;\n border-radius: 8px;\n border: 1px solid var(--n-border-color);\n background-color: var(--n-card-color);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n transition: all 0.2s ease;\n}\n.dynamic-rows-toolbar[data-v-360ced03]:hover {\n border-color: var(--n-primary-color-suppl);\n}\n\n/* ================= 4. 表格布局基础 ================= */\n[data-v-360ced03] .n-data-table {\n table-layout: auto !important;\n width: 100% !important;\n border-radius: 8px;\n overflow: hidden;\n}\n\n/* 确保表格容器允许横向滚动(固定列必需) */\n[data-v-360ced03] .n-data-table-wrapper {\n overflow-x: auto !important;\n}\n\n/* 分页组件样式 */\n.pagination-wrapper[data-v-360ced03] {\n margin-top: 16px;\n display: flex;\n justify-content: flex-end;\n}\n\n/* ================= 5. 表格列宽度管理 ================= */\n/* 普通列的最小宽度保护 */\n[data-v-360ced03] .n-data-table-th:not(:last-child) {\n min-width: 80px !important;\n}\n\n/* 操作列固定宽度(适应4个按钮的布局) */\n[data-v-360ced03] .n-data-table-th:last-child {\n width: 180px !important;\n min-width: 160px !important;\n max-width: 200px !important;\n text-align: center !important;\n padding: 8px 12px !important;\n}\n\n/* 操作按钮容器居中 */\n[data-v-360ced03] .n-data-table-td:last-child .n-space {\n justify-content: center !important;\n align-items: center !important;\n}\n\n/* ================= 6. 可编辑单元格样式 ================= */\n/* 单元格编辑容器 - 精致化设计 */\n.cell-edit-wrapper[data-v-360ced03] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n padding: 6px 8px;\n min-height: 36px;\n border-radius: 4px;\n transition: all 0.2s ease;\n cursor: pointer;\n position: relative;\n /* 悬停效果 */\n /* 激活状态 */\n}\n.cell-edit-wrapper[data-v-360ced03]:hover {\n background-color: var(--n-color-target);\n}\n.cell-edit-wrapper:hover .cell-edit-icon[data-v-360ced03] {\n opacity: 1;\n color: var(--n-color-success);\n transform: scale(1.05);\n}\n.cell-edit-wrapper[data-v-360ced03]:active {\n transform: translateY(1px);\n}\n\n/* 单元格内容 */\n.cell-value[data-v-360ced03] {\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n margin-right: 16px;\n line-height: 1.4;\n font-size: 13px;\n}\n\n/* 编辑图标 - 使用全局选择器确保动态创建的元素也能被选中 */\n.cell-edit-icon[data-v-360ced03],.cell-edit-icon {\n flex-shrink: 0;\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 50%;\n cursor: pointer;\n margin-left: 4px;\n transition: all 0.25s ease;\n color: var(--n-color-success);\n opacity: 0;\n position: relative;\n /* 悬停效果 */\n /* 激活效果 */\n /* 图标尺寸 */\n}\n.cell-edit-icon[data-v-360ced03]:hover,.cell-edit-icon {\n opacity: 1 !important;\n color: var(--n-color-success-hover) !important;\n background-color: var(--n-color-success-pressed);\n transform: scale(1.1);\n}\n.cell-edit-icon[data-v-360ced03]:active,.cell-edit-icon {\n transform: scale(0.95);\n}\n.cell-edit-icon svg[data-v-360ced03],.cell-edit-icon {\n width: 14px;\n height: 14px;\n}\n\n/* ================= 7. 单元格编辑状态样式 ================= */\n/* 编辑容器 - 确保水平布局不换行 */\n.cell-editing-container[data-v-360ced03],[data-v-360ced03] .cell-editing-container {\n display: flex !important;\n align-items: center !important;\n width: 100% !important;\n min-height: 36px !important;\n background-color: var(--n-input-color) !important;\n border: 1px solid var(--n-primary-color) !important;\n border-radius: 6px !important;\n padding: 4px 6px !important;\n box-shadow: 0 0 0 2px var(--n-primary-color-suppl) !important;\n gap: 8px !important;\n}\n\n/* 编辑输入区域 - 占据剩余空间 */\n.cell-editing-input[data-v-360ced03],[data-v-360ced03] .cell-editing-input {\n flex: 1 !important;\n min-width: 0 !important;\n}\n\n/* 深度选择器处理输入框样式 */\n[data-v-360ced03] .cell-editing-input .n-input {\n border: none !important;\n box-shadow: none !important;\n background: transparent !important;\n}\n[data-v-360ced03] .cell-editing-input .n-input.n-input--focus {\n border: none !important;\n box-shadow: none !important;\n}\n[data-v-360ced03] .cell-editing-input .n-input-number {\n border: none !important;\n box-shadow: none !important;\n background: transparent !important;\n}\n[data-v-360ced03] .cell-editing-input .n-select {\n border: none !important;\n box-shadow: none !important;\n background: transparent !important;\n}\n[data-v-360ced03] .cell-editing-input .n-select .n-base-selection {\n border: none !important;\n box-shadow: none !important;\n background: transparent !important;\n}\n\n/* 编辑操作按钮容器 */\n.cell-editing-actions[data-v-360ced03],[data-v-360ced03] .cell-editing-actions {\n display: flex !important;\n flex-shrink: 0 !important;\n align-items: center !important;\n gap: 4px !important;\n background: var(--n-color-popover) !important;\n border: 1px solid var(--n-border-color) !important;\n border-radius: 4px !important;\n padding: 2px !important;\n box-shadow: var(--n-box-shadow) !important;\n}\n\n/* 编辑操作按钮 */\n.cell-action-btn[data-v-360ced03],[data-v-360ced03] .cell-action-btn {\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n width: 20px !important;\n height: 20px !important;\n border: none !important;\n border-radius: 3px !important;\n cursor: pointer !important;\n transition: all 0.2s ease !important;\n background: transparent !important;\n /* 保存按钮 */\n /* 取消按钮 */\n /* 图标尺寸 */\n}\n.cell-action-btn.cell-action-save[data-v-360ced03],[data-v-360ced03] .cell-action-btn.cell-action-save {\n color: var(--n-color-success) !important;\n}\n.cell-action-btn.cell-action-save[data-v-360ced03]:hover,[data-v-360ced03] .cell-action-btn.cell-action-save:hover {\n background: var(--n-color-success-pressed) !important;\n transform: scale(1.1) !important;\n}\n.cell-action-btn.cell-action-cancel[data-v-360ced03],[data-v-360ced03] .cell-action-btn.cell-action-cancel {\n color: var(--n-color-error) !important;\n}\n.cell-action-btn.cell-action-cancel[data-v-360ced03]:hover,[data-v-360ced03] .cell-action-btn.cell-action-cancel:hover {\n background: var(--n-color-error-pressed) !important;\n transform: scale(1.1) !important;\n}\n.cell-action-btn svg[data-v-360ced03],[data-v-360ced03] .cell-action-btn svg {\n width: 11px !important;\n height: 11px !important;\n}\n\n/* ================= 7. 操作按钮样式 ================= */\n/* 通用按钮样式 */\n[data-v-360ced03] .n-button {\n white-space: nowrap;\n font-size: 12px !important;\n flex-shrink: 0 !important;\n border-radius: 6px;\n transition: all 0.2s ease;\n font-weight: 500;\n /* 图标间距 */\n /* 小尺寸按钮优化 */\n /* 四元按钮样式 */\n}\n[data-v-360ced03] .n-button .n-icon {\n margin-right: 4px !important;\n}\n[data-v-360ced03] .n-button.n-button--small-type {\n padding: 4px 8px;\n height: 28px;\n line-height: 20px;\n}\n[data-v-360ced03] .n-button.n-button--quaternary-type:hover {\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n}\n[data-v-360ced03] .n-button.n-button--quaternary-type:active {\n transform: translateY(0);\n}\n\n/* ================= 8. 按钮组间距优化 ================= */\n/* 操作按钮组 */\n[data-v-360ced03] .n-space.n-space--horizontal .n-space-item:not(:last-child) {\n margin-right: 6px !important;\n}\n\n/* ================= 9. 模态框样式优化 ================= */\n/* 编辑模态框 */\n[data-v-360ced03] .n-modal .n-card {\n border-radius: 12px;\n box-shadow: 0 8px 32px rgba(0, 0, 0, 0.12);\n}\n[data-v-360ced03] .n-modal .n-card__header {\n padding: 20px 24px 16px;\n font-weight: 600;\n font-size: 16px;\n}\n[data-v-360ced03] .n-modal .n-card__content {\n padding: 0 24px 16px;\n}\n[data-v-360ced03] .n-modal .n-card__action {\n padding: 16px 24px 20px;\n border-top: 1px solid var(--n-divider-color);\n}\n\n/* ================= 10. 描述列表样式 ================= */\n/* 详情模态框描述列表 */\n[data-v-360ced03] .n-descriptions .n-descriptions-item-label {\n font-weight: 500;\n color: var(--n-text-color-2);\n}\n[data-v-360ced03] .n-descriptions .n-descriptions-item-content {\n color: var(--n-text-color-1);\n word-break: break-all;\n}\n\n/* ================= 11. 响应式设计 ================= */\n/* 移动端适配 */\n@media (max-width: 768px) {\n.c-table-wrapper[data-v-360ced03] {\n overflow-x: auto;\n}\n /* 操作列在移动端的适配 */\n[data-v-360ced03] .n-data-table-th:last-child {\n width: 160px !important;\n min-width: 160px !important;\n}\n /* 按钮在移动端的优化 */\n[data-v-360ced03] .n-button {\n font-size: 11px !important;\n padding: 3px 6px;\n}\n[data-v-360ced03] .n-button .n-icon {\n margin-right: 2px !important;\n}\n /* 单元格编辑图标在移动端始终显示 */\n.cell-edit-icon[data-v-360ced03] {\n opacity: 0.6;\n}\n}\n/* ================= 12. 主题适配 ================= */\n/* 暗色主题适配 - 已通过 CSS 变量自动适配 */\n[data-theme=dark][data-v-360ced03] {\n /* CSS 变量已自动适配,如有特殊需求可在此添加 */\n}\n\n/* ================= 13. 响应式优化 ================= */\n/* 小屏幕下的单元格编辑优化 */\n@media (max-width: 768px) {\n.cell-editing-container[data-v-360ced03],[data-v-360ced03] .cell-editing-container {\n gap: 6px !important;\n}\n.cell-editing-actions[data-v-360ced03],[data-v-360ced03] .cell-editing-actions {\n gap: 3px !important;\n padding: 2px !important;\n}\n.cell-action-btn[data-v-360ced03],[data-v-360ced03] .cell-action-btn {\n width: 18px !important;\n height: 18px !important;\n}\n.cell-action-btn svg[data-v-360ced03],[data-v-360ced03] .cell-action-btn svg {\n width: 10px !important;\n height: 10px !important;\n}\n /* 移动端编辑图标 */\n.cell-edit-icon[data-v-360ced03] {\n opacity: 0.6 !important;\n}\n.cell-value[data-v-360ced03] {\n margin-right: 12px !important;\n}\n}\n/* ================= 14. 性能优化 ================= */\n/* 使用 GPU 加速的动画 */\n.cell-edit-icon[data-v-360ced03],\n.cell-action-btn[data-v-360ced03] {\n will-change: transform;\n backface-visibility: hidden;\n}\n[data-v-360ced03] .n-button {\n will-change: transform;\n backface-visibility: hidden;\n}\n\n/* ================= 15. 可访问性优化 ================= */\n/* 聚焦状态 */\n.cell-edit-wrapper[data-v-360ced03]:focus-within,\n.cell-editing-container[data-v-360ced03]:focus-within {\n outline: 2px solid var(--n-primary-color);\n outline-offset: 2px;\n}\n\n/* 高对比度模式支持 */\n@media (prefers-contrast: high) {\n.cell-edit-icon[data-v-360ced03] {\n opacity: 0.8;\n}\n.cell-editing-actions[data-v-360ced03] {\n border-width: 2px;\n}\n}"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACvHA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA"}
|
|
1
|
+
{"version":3,"file":"C_Table-C55H4kPr.css","names":[],"sources":["../src/components/C_Table/components/ColumnSettings/index.vue?vue&type=style&index=0&scoped=a4d013ea&lang.scss","../src/components/C_Table/index.vue?vue&type=style&index=0&scoped=767c7393&lang.scss"],"sourcesContent":["/* unplugin-vue-components disabled */.column-management-tab .search-row[data-v-a4d013ea] {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 12px;\n}\n.column-management-tab .search-row .search-input[data-v-a4d013ea] {\n flex: 1;\n min-width: 0;\n}\n.column-management-tab .search-row .resizable-control[data-v-a4d013ea] {\n display: flex;\n align-items: center;\n flex-shrink: 0;\n padding: 0 10px;\n height: 34px;\n background: var(--n-color-target);\n border-radius: 6px;\n white-space: nowrap;\n}\n.column-management-tab .top-actions-bar[data-v-a4d013ea] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n padding: 10px 12px;\n background: var(--n-color-target);\n border-radius: 6px;\n}\n.column-management-tab .top-actions-bar .stats-info[data-v-a4d013ea] {\n flex: 1;\n}\n.column-management-tab .top-actions-bar .quick-actions[data-v-a4d013ea] {\n flex-shrink: 0;\n}\n.column-management-tab .column-list .column-item[data-v-a4d013ea] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 6px 4px;\n margin-bottom: 4px;\n border-radius: 4px;\n background: transparent;\n cursor: move;\n transition: all 0.2s ease;\n}\n.column-management-tab .column-list .column-item[data-v-a4d013ea]:hover {\n background: var(--n-color-target);\n}\n.column-management-tab .column-list .column-item.disabled[data-v-a4d013ea] {\n opacity: 0.6;\n cursor: not-allowed;\n}\n.column-management-tab .column-list .column-item.fixed-left[data-v-a4d013ea] {\n background: rgba(24, 160, 88, 0.08);\n}\n.column-management-tab .column-list .column-item.fixed-right[data-v-a4d013ea] {\n background: rgba(240, 138, 0, 0.08);\n}\n.column-management-tab .column-list .column-item .column-info[data-v-a4d013ea] {\n display: flex;\n align-items: center;\n flex: 1;\n gap: 10px;\n min-width: 0;\n}\n.column-management-tab .column-list .column-item .column-info .column-controls[data-v-a4d013ea] {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-shrink: 0;\n}\n.column-management-tab .column-list .column-item .column-info .column-controls .drag-handle[data-v-a4d013ea] {\n color: var(--n-text-color-3);\n cursor: grab;\n}\n.column-management-tab .column-list .column-item .column-info .column-controls .drag-handle[data-v-a4d013ea]:active {\n cursor: grabbing;\n}\n.column-management-tab .column-list .column-item .column-info .column-controls .drag-handle.disabled[data-v-a4d013ea] {\n cursor: not-allowed;\n opacity: 0.3;\n}\n.column-management-tab .column-list .column-item .column-info .column-details[data-v-a4d013ea] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n flex: 1;\n min-width: 0;\n overflow: hidden;\n}\n.column-management-tab .column-list .column-item .column-actions[data-v-a4d013ea] {\n display: flex;\n align-items: center;\n gap: 6px;\n flex-shrink: 0;\n}\n.column-management-tab .column-list .column-item .column-actions .drag-controls[data-v-a4d013ea] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n.column-management-tab .column-list .column-item .column-actions .drag-controls .c-icon[data-v-a4d013ea] {\n opacity: 0.6;\n transition: all 0.2s ease;\n}\n.column-management-tab .column-list .column-item .column-actions .drag-controls .c-icon[data-v-a4d013ea]:not(.disabled):hover {\n opacity: 1;\n transform: scale(1.15);\n}\n.column-management-tab .column-list .column-item .column-actions .drag-controls .c-icon.disabled[data-v-a4d013ea] {\n opacity: 0.3;\n cursor: not-allowed;\n}\n.column-management-tab .column-list .column-item .column-actions .c-icon[data-v-a4d013ea] {\n transition: all 0.2s ease;\n}\n.column-management-tab .column-list .column-item .column-actions .c-icon[data-v-a4d013ea]:hover {\n transform: scale(1.15);\n}","/* unplugin-vue-components disabled *//* ================= 1. 组件根容器 ================= */\n.c-table-wrapper[data-v-767c7393] {\n width: 100%;\n position: relative;\n}\n\n/* ================= 2. 表格工具栏 ================= */\n.table-toolbar[data-v-767c7393] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n}\n.table-toolbar .toolbar-left[data-v-767c7393] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n.table-toolbar .toolbar-right[data-v-767c7393] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.table-toolbar .toolbar-right .column-settings-btn[data-v-767c7393] {\n opacity: 0.6;\n transition: opacity 0.2s ease, transform 0.2s ease;\n cursor: pointer;\n}\n.table-toolbar .toolbar-right .column-settings-btn[data-v-767c7393]:hover {\n opacity: 1;\n transform: scale(1.1);\n}\n\n/* ================= 3. 动态行工具栏 ================= */\n.dynamic-rows-toolbar[data-v-767c7393] {\n margin-bottom: 16px;\n padding: 16px;\n border-radius: 8px;\n border: 1px solid var(--n-border-color);\n background-color: var(--n-card-color);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n transition: all 0.2s ease;\n}\n.dynamic-rows-toolbar[data-v-767c7393]:hover {\n border-color: var(--n-primary-color-suppl);\n}\n\n/* ================= 4. 表格布局基础 ================= */\n[data-v-767c7393] .n-data-table {\n table-layout: auto !important;\n width: 100% !important;\n border-radius: 8px;\n overflow: hidden;\n}\n\n/* 确保表格容器允许横向滚动(固定列必需) */\n[data-v-767c7393] .n-data-table-wrapper {\n overflow-x: auto !important;\n}\n\n/* 分页组件样式 */\n.pagination-wrapper[data-v-767c7393] {\n margin-top: 16px;\n display: flex;\n justify-content: flex-end;\n}\n\n/* ================= 5. 表格列宽度管理 ================= */\n/* 普通列的最小宽度保护 */\n[data-v-767c7393] .n-data-table-th:not(:last-child) {\n min-width: 80px !important;\n}\n\n/* 操作列固定宽度(适应4个按钮的布局) */\n[data-v-767c7393] .n-data-table-th:last-child {\n width: 180px !important;\n min-width: 160px !important;\n max-width: 200px !important;\n text-align: center !important;\n padding: 8px 12px !important;\n}\n\n/* 操作按钮容器居中 */\n[data-v-767c7393] .n-data-table-td:last-child .n-space {\n justify-content: center !important;\n align-items: center !important;\n}\n\n/* ================= 6. 可编辑单元格样式 ================= */\n/* 单元格编辑容器 - 精致化设计 */\n.cell-edit-wrapper[data-v-767c7393] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n padding: 6px 8px;\n min-height: 36px;\n border-radius: 4px;\n transition: all 0.2s ease;\n cursor: pointer;\n position: relative;\n /* 悬停效果 */\n /* 激活状态 */\n}\n.cell-edit-wrapper[data-v-767c7393]:hover {\n background-color: var(--n-color-target);\n}\n.cell-edit-wrapper:hover .cell-edit-icon[data-v-767c7393] {\n opacity: 1;\n color: var(--n-color-success);\n transform: scale(1.05);\n}\n.cell-edit-wrapper[data-v-767c7393]:active {\n transform: translateY(1px);\n}\n\n/* 单元格内容 */\n.cell-value[data-v-767c7393] {\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n margin-right: 16px;\n line-height: 1.4;\n font-size: 13px;\n}\n\n/* 编辑图标 - 使用全局选择器确保动态创建的元素也能被选中 */\n.cell-edit-icon[data-v-767c7393],.cell-edit-icon {\n flex-shrink: 0;\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 50%;\n cursor: pointer;\n margin-left: 4px;\n transition: all 0.25s ease;\n color: var(--n-color-success);\n opacity: 0;\n position: relative;\n /* 悬停效果 */\n /* 激活效果 */\n /* 图标尺寸 */\n}\n.cell-edit-icon[data-v-767c7393]:hover,.cell-edit-icon {\n opacity: 1 !important;\n color: var(--n-color-success-hover) !important;\n background-color: var(--n-color-success-pressed);\n transform: scale(1.1);\n}\n.cell-edit-icon[data-v-767c7393]:active,.cell-edit-icon {\n transform: scale(0.95);\n}\n.cell-edit-icon svg[data-v-767c7393],.cell-edit-icon {\n width: 14px;\n height: 14px;\n}\n\n/* ================= 7. 单元格编辑状态样式 ================= */\n/* 编辑容器 - 确保水平布局不换行 */\n.cell-editing-container[data-v-767c7393],[data-v-767c7393] .cell-editing-container {\n display: flex !important;\n align-items: center !important;\n width: 100% !important;\n min-height: 36px !important;\n background-color: var(--n-input-color) !important;\n border: 1px solid var(--n-primary-color) !important;\n border-radius: 6px !important;\n padding: 4px 6px !important;\n box-shadow: 0 0 0 2px var(--n-primary-color-suppl) !important;\n gap: 8px !important;\n}\n\n/* 编辑输入区域 - 占据剩余空间 */\n.cell-editing-input[data-v-767c7393],[data-v-767c7393] .cell-editing-input {\n flex: 1 !important;\n min-width: 0 !important;\n}\n\n/* 深度选择器处理输入框样式 */\n[data-v-767c7393] .cell-editing-input .n-input {\n border: none !important;\n box-shadow: none !important;\n background: transparent !important;\n}\n[data-v-767c7393] .cell-editing-input .n-input.n-input--focus {\n border: none !important;\n box-shadow: none !important;\n}\n[data-v-767c7393] .cell-editing-input .n-input-number {\n border: none !important;\n box-shadow: none !important;\n background: transparent !important;\n}\n[data-v-767c7393] .cell-editing-input .n-select {\n border: none !important;\n box-shadow: none !important;\n background: transparent !important;\n}\n[data-v-767c7393] .cell-editing-input .n-select .n-base-selection {\n border: none !important;\n box-shadow: none !important;\n background: transparent !important;\n}\n\n/* 编辑操作按钮容器 */\n.cell-editing-actions[data-v-767c7393],[data-v-767c7393] .cell-editing-actions {\n display: flex !important;\n flex-shrink: 0 !important;\n align-items: center !important;\n gap: 4px !important;\n background: var(--n-color-popover) !important;\n border: 1px solid var(--n-border-color) !important;\n border-radius: 4px !important;\n padding: 2px !important;\n box-shadow: var(--n-box-shadow) !important;\n}\n\n/* 编辑操作按钮 */\n.cell-action-btn[data-v-767c7393],[data-v-767c7393] .cell-action-btn {\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n width: 20px !important;\n height: 20px !important;\n border: none !important;\n border-radius: 3px !important;\n cursor: pointer !important;\n transition: all 0.2s ease !important;\n background: transparent !important;\n /* 保存按钮 */\n /* 取消按钮 */\n /* 图标尺寸 */\n}\n.cell-action-btn.cell-action-save[data-v-767c7393],[data-v-767c7393] .cell-action-btn.cell-action-save {\n color: var(--n-color-success) !important;\n}\n.cell-action-btn.cell-action-save[data-v-767c7393]:hover,[data-v-767c7393] .cell-action-btn.cell-action-save:hover {\n background: var(--n-color-success-pressed) !important;\n transform: scale(1.1) !important;\n}\n.cell-action-btn.cell-action-cancel[data-v-767c7393],[data-v-767c7393] .cell-action-btn.cell-action-cancel {\n color: var(--n-color-error) !important;\n}\n.cell-action-btn.cell-action-cancel[data-v-767c7393]:hover,[data-v-767c7393] .cell-action-btn.cell-action-cancel:hover {\n background: var(--n-color-error-pressed) !important;\n transform: scale(1.1) !important;\n}\n.cell-action-btn svg[data-v-767c7393],[data-v-767c7393] .cell-action-btn svg {\n width: 11px !important;\n height: 11px !important;\n}\n\n/* ================= 7. 操作按钮样式 ================= */\n/* 通用按钮样式 */\n[data-v-767c7393] .n-button {\n white-space: nowrap;\n font-size: 12px !important;\n flex-shrink: 0 !important;\n border-radius: 6px;\n transition: all 0.2s ease;\n font-weight: 500;\n /* 图标间距 */\n /* 小尺寸按钮优化 */\n /* 四元按钮样式 */\n}\n[data-v-767c7393] .n-button .n-icon {\n margin-right: 4px !important;\n}\n[data-v-767c7393] .n-button.n-button--small-type {\n padding: 4px 8px;\n height: 28px;\n line-height: 20px;\n}\n[data-v-767c7393] .n-button.n-button--quaternary-type:hover {\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n}\n[data-v-767c7393] .n-button.n-button--quaternary-type:active {\n transform: translateY(0);\n}\n\n/* ================= 8. 按钮组间距优化 ================= */\n/* 操作按钮组 */\n[data-v-767c7393] .n-space.n-space--horizontal .n-space-item:not(:last-child) {\n margin-right: 6px !important;\n}\n\n/* ================= 9. 模态框样式优化 ================= */\n/* 编辑模态框 */\n[data-v-767c7393] .n-modal .n-card {\n border-radius: 12px;\n box-shadow: 0 8px 32px rgba(0, 0, 0, 0.12);\n}\n[data-v-767c7393] .n-modal .n-card__header {\n padding: 20px 24px 16px;\n font-weight: 600;\n font-size: 16px;\n}\n[data-v-767c7393] .n-modal .n-card__content {\n padding: 0 24px 16px;\n}\n[data-v-767c7393] .n-modal .n-card__action {\n padding: 16px 24px 20px;\n border-top: 1px solid var(--n-divider-color);\n}\n\n/* ================= 10. 描述列表样式 ================= */\n/* 详情模态框描述列表 */\n[data-v-767c7393] .n-descriptions .n-descriptions-item-label {\n font-weight: 500;\n color: var(--n-text-color-2);\n}\n[data-v-767c7393] .n-descriptions .n-descriptions-item-content {\n color: var(--n-text-color-1);\n word-break: break-all;\n}\n\n/* ================= 11. 响应式设计 ================= */\n/* 移动端适配 */\n@media (max-width: 768px) {\n.c-table-wrapper[data-v-767c7393] {\n overflow-x: auto;\n}\n /* 操作列在移动端的适配 */\n[data-v-767c7393] .n-data-table-th:last-child {\n width: 160px !important;\n min-width: 160px !important;\n}\n /* 按钮在移动端的优化 */\n[data-v-767c7393] .n-button {\n font-size: 11px !important;\n padding: 3px 6px;\n}\n[data-v-767c7393] .n-button .n-icon {\n margin-right: 2px !important;\n}\n /* 单元格编辑图标在移动端始终显示 */\n.cell-edit-icon[data-v-767c7393] {\n opacity: 0.6;\n}\n}\n/* ================= 12. 主题适配 ================= */\n/* 暗色主题适配 - 已通过 CSS 变量自动适配 */\n[data-theme=dark][data-v-767c7393] {\n /* CSS 变量已自动适配,如有特殊需求可在此添加 */\n}\n\n/* ================= 13. 响应式优化 ================= */\n/* 小屏幕下的单元格编辑优化 */\n@media (max-width: 768px) {\n.cell-editing-container[data-v-767c7393],[data-v-767c7393] .cell-editing-container {\n gap: 6px !important;\n}\n.cell-editing-actions[data-v-767c7393],[data-v-767c7393] .cell-editing-actions {\n gap: 3px !important;\n padding: 2px !important;\n}\n.cell-action-btn[data-v-767c7393],[data-v-767c7393] .cell-action-btn {\n width: 18px !important;\n height: 18px !important;\n}\n.cell-action-btn svg[data-v-767c7393],[data-v-767c7393] .cell-action-btn svg {\n width: 10px !important;\n height: 10px !important;\n}\n /* 移动端编辑图标 */\n.cell-edit-icon[data-v-767c7393] {\n opacity: 0.6 !important;\n}\n.cell-value[data-v-767c7393] {\n margin-right: 12px !important;\n}\n}\n/* ================= 14. 性能优化 ================= */\n/* 使用 GPU 加速的动画 */\n.cell-edit-icon[data-v-767c7393],\n.cell-action-btn[data-v-767c7393] {\n will-change: transform;\n backface-visibility: hidden;\n}\n[data-v-767c7393] .n-button {\n will-change: transform;\n backface-visibility: hidden;\n}\n\n/* ================= 15. 可访问性优化 ================= */\n/* 聚焦状态 */\n.cell-edit-wrapper[data-v-767c7393]:focus-within,\n.cell-editing-container[data-v-767c7393]:focus-within {\n outline: 2px solid var(--n-primary-color);\n outline-offset: 2px;\n}\n\n/* 高对比度模式支持 */\n@media (prefers-contrast: high) {\n.cell-edit-icon[data-v-767c7393] {\n opacity: 0.8;\n}\n.cell-editing-actions[data-v-767c7393] {\n border-width: 2px;\n}\n}"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACvHA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA"}
|
package/dist/C_Table2.js
CHANGED
|
@@ -2766,9 +2766,26 @@ var index_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCo
|
|
|
2766
2766
|
const effectiveColumns = computed(() => props.columns ?? props.crud?.columns.value ?? []);
|
|
2767
2767
|
const resolved = computed(() => resolveConfig(effectiveConfig.value));
|
|
2768
2768
|
const editModeChecker = computed(() => createEditModeChecker(resolved.value));
|
|
2769
|
-
const
|
|
2770
|
-
const normalizedData = computed(() =>
|
|
2771
|
-
|
|
2769
|
+
const unwrapMaybeRef = (val) => val && typeof val === "object" && "value" in val ? val.value : val;
|
|
2770
|
+
const normalizedData = computed(() => unwrapMaybeRef(props.data) ?? props.crud?.data.value ?? []);
|
|
2771
|
+
/**
|
|
2772
|
+
* Loading 状态:使用 watchEffect 主动追踪 props.loading / crud.loading
|
|
2773
|
+
* 解决跨 npm 包时 computed 对 props.crud.loading.value 依赖追踪不稳定的问题
|
|
2774
|
+
*/
|
|
2775
|
+
const normalizedLoading = ref(false);
|
|
2776
|
+
watchEffect(() => {
|
|
2777
|
+
const propVal = props.loading;
|
|
2778
|
+
if (propVal !== void 0) {
|
|
2779
|
+
normalizedLoading.value = propVal && typeof propVal === "object" && "value" in propVal ? !!propVal.value : !!propVal;
|
|
2780
|
+
return;
|
|
2781
|
+
}
|
|
2782
|
+
const crudLoading = props.crud?.loading;
|
|
2783
|
+
if (crudLoading !== void 0) {
|
|
2784
|
+
normalizedLoading.value = crudLoading && typeof crudLoading === "object" && "value" in crudLoading ? !!crudLoading.value : !!crudLoading;
|
|
2785
|
+
return;
|
|
2786
|
+
}
|
|
2787
|
+
normalizedLoading.value = false;
|
|
2788
|
+
});
|
|
2772
2789
|
const pagination = usePagination({
|
|
2773
2790
|
data: normalizedData,
|
|
2774
2791
|
config: computed(() => resolved.value.pagination),
|
|
@@ -3000,7 +3017,7 @@ var index_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCo
|
|
|
3000
3017
|
|
|
3001
3018
|
//#endregion
|
|
3002
3019
|
//#region src/components/C_Table/index.vue
|
|
3003
|
-
var C_Table_default = /* @__PURE__ */ export_helper_default(index_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-
|
|
3020
|
+
var C_Table_default = /* @__PURE__ */ export_helper_default(index_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-767c7393"]]);
|
|
3004
3021
|
|
|
3005
3022
|
//#endregion
|
|
3006
3023
|
export { useTableManager as a, usePrintWatermark as c, useCellEdit as d, useRowEdit as f, usePagination as i, useTableExpand as l, resolveConfig as m, useTableColumns as n, useDynamicRows as o, createEditModeChecker as p, useTableActions as r, printPresets as s, C_Table_default as t, useModalEdit as u };
|