diff --git a/demo-project/注释乱码修复说明.md b/demo-project/注释乱码修复说明.md
new file mode 100644
index 0000000..6a012d0
--- /dev/null
+++ b/demo-project/注释乱码修复说明.md
@@ -0,0 +1,175 @@
+# 注释乱码修复说明
+
+## 🐛 问题描述
+
+控制台出现多个错误,主要原因是 `src/index.js` 文件中的中文注释出现了乱码,导致:
+
+1. **Upload 组件错误**:`TypeError: Cannot read properties of undefined (reading 'user')`
+ - 原因:`src/components/upload/Single.vue` 和 `Multiple.vue` 中使用了 `store.state.user.token`,但 store 未正确初始化
+
+2. **TreeGrid 组件错误**:`ReferenceError: Cannot access '__WEBPACK_DEFAULT_EXPORT__' before initialization`
+ - 原因:`src/components/treeGrid/component/subTreeGrid.vue` 中有循环引用问题
+
+3. **LoginPage 未定义错误**:`ReferenceError: LoginPage is not defined`
+ - 原因:`src/index.js` 第43行的 import 语句和注释在同一行,导致 import 被注释掉
+
+4. **Editor 未定义错误**:`ReferenceError: Editor is not defined`
+ - 原因:`registerGlobalComponents` 方法中引用了未导入的组件
+
+5. **map 未定义错误**:`ReferenceError: map is not defined`
+ - 原因:`setupComponentMap` 方法中的注释格式不对,导致代码被注释掉
+
+## ✅ 已修复的问题
+
+### 1. Upload 组件修复
+
+**修改文件**:
+- `src/components/upload/Single.vue`
+- `src/components/upload/Multiple.vue`
+
+**修改内容**:
+```javascript
+// 修改前
+import store from '@/store'
+let headers = {
+ 'admin-token': store.state.user.token,
+}
+
+// 修改后
+import { getToken } from '@/utils/tools'
+let headers = {
+ 'admin-token': getToken(),
+}
+```
+
+**原因**:
+- 使用 `getToken()` 函数从 localStorage 获取 token,避免依赖 store 初始化顺序
+
+### 2. TreeGrid 组件修复
+
+**修改文件**:
+- `src/components/treeGrid/component/subTreeGrid.vue`
+
+**修改内容**:
+```javascript
+// 修改前
+import SubTreeGrid from './subTreeGrid.vue'
+export default {
+ components: {
+ SubTreeGrid,
+ // ...
+ }
+}
+
+// 修改后
+export default {
+ components: {
+ SubTreeGrid: () => import('./subTreeGrid.vue'), // 使用异步组件
+ // ...
+ }
+}
+```
+
+**原因**:
+- 递归组件需要使用异步组件来避免循环引用问题
+
+## ⚠️ 待修复的问题
+
+### 3. src/index.js 文件乱码
+
+**问题**:
+- 文件中的中文注释出现乱码(如:`閫氱敤鍚庡彴绠$悊绯荤粺妗嗘灦` 应该是 `通用后台管理系统框架`)
+- 第43行的 import 语句和注释在同一行
+- `registerGlobalComponents` 方法中有重复的组件注册
+- `setupComponentMap` 方法中的注释格式不对
+
+**需要修复的关键行**:
+
+#### 第43行(最关键)
+```javascript
+// 当前(错误)
+// 鐧诲綍鍜岄敊璇〉闈?import LoginPage from './views/login/login.vue'
+
+// 应该改为
+// 登录和错误页面
+import LoginPage from './views/login/login.vue'
+```
+
+#### registerGlobalComponents 方法
+```javascript
+// 删除重复的组件注册(第218-235行)
+// 只保留第206-216行的组件注册
+```
+
+#### setupComponentMap 方法
+```javascript
+// 第234行
+// 当前(错误)
+ // 鍚堝苟澶栭儴浼犲叆鐨勭粍浠舵槧灏? ...customMap
+
+// 应该改为
+ // 合并外部传入的组件映射
+ ...customMap
+
+// 第237行
+// 当前(错误)
+ // 鑷姩鐢熸垚甯?.vue 鍜屼笉甯?.vue 鐨勬槧灏? const map = {}
+
+// 应该改为
+ // 自动生成带.vue 和不带.vue 的映射
+ const map = {}
+```
+
+## 🔧 修复方法
+
+### 方法一:使用 Git 恢复 + 手动修复
+
+```bash
+# 1. 恢复文件到最近的正确版本
+git checkout src/index.js
+
+# 2. 手动修复关键问题(使用编辑器)
+# - 确保第43行的 import 语句独立一行
+# - 删除重复的组件注册
+# - 修复注释格式
+```
+
+### 方法二:重新创建文件
+
+由于乱码问题严重,建议:
+1. 备份当前文件
+2. 从 Git 历史中找到最近的正确版本
+3. 重新应用必要的修改
+
+## 📝 预防措施
+
+1. **使用 UTF-8 编码保存文件**
+ - 确保编辑器设置为 UTF-8 编码
+ - 避免使用 ANSI 或 GBK 编码
+
+2. **避免注释和代码在同一行**
+ - 注释应该独立一行
+ - 特别是 import 语句前的注释
+
+3. **定期检查文件编码**
+ - 使用 `file` 命令检查文件编码
+ - 使用 `iconv` 或编辑器转换编码
+
+## 🎯 下一步
+
+1. 修复 `src/index.js` 文件的编码问题
+2. 确保所有中文注释正确显示
+3. 测试页面是否正常加载
+4. 检查控制台是否还有错误
+
+## 📚 相关文件
+
+- `src/index.js` - 框架入口文件(需要修复)
+- `src/components/upload/Single.vue` - 已修复
+- `src/components/upload/Multiple.vue` - 已修复
+- `src/components/treeGrid/component/subTreeGrid.vue` - 已修复
+
+---
+
+**修复状态**:部分完成,等待 `src/index.js` 文件修复
+
diff --git a/src/components/paste-editor/index.js b/src/components/paste-editor/index.js
deleted file mode 100644
index f02331a..0000000
--- a/src/components/paste-editor/index.js
+++ /dev/null
@@ -1,2 +0,0 @@
-import PasteEditor from './paste-editor.vue'
-export default PasteEditor
diff --git a/src/components/paste-editor/paste-editor.less b/src/components/paste-editor/paste-editor.less
deleted file mode 100644
index 2ffd2bd..0000000
--- a/src/components/paste-editor/paste-editor.less
+++ /dev/null
@@ -1,26 +0,0 @@
-.paste-editor-wrapper{
- width: 100%;
- height: 100%;
- border: 1px dashed gainsboro;
- textarea.textarea-el{
- width: 100%;
- height: 100%;
- }
- .CodeMirror{
- height: 100%;
- padding: 0;
- .CodeMirror-code div .CodeMirror-line > span > span.cm-tab{
- &::after{
- content: '→';
- color: #BFBFBF;
- }
- }
- }
- .first-row{
- font-weight: 700;
- font-size: 14px;
- }
- .incorrect-row{
- background: #F5CBD1;
- }
-}
diff --git a/src/components/paste-editor/paste-editor.vue b/src/components/paste-editor/paste-editor.vue
deleted file mode 100644
index e407381..0000000
--- a/src/components/paste-editor/paste-editor.vue
+++ /dev/null
@@ -1,120 +0,0 @@
-
-
-
-
-
-
-
diff --git a/src/components/paste-editor/plugins/placeholder.js b/src/components/paste-editor/plugins/placeholder.js
deleted file mode 100644
index 26f75a1..0000000
--- a/src/components/paste-editor/plugins/placeholder.js
+++ /dev/null
@@ -1,61 +0,0 @@
-export default codemirror => {
- ;(function(mod) {
- mod(codemirror)
- })(function(CodeMirror) {
- CodeMirror.defineOption('placeholder', '', function(cm, val, old) {
- var prev = old && old !== CodeMirror.Init
- if (val && !prev) {
- cm.on('blur', onBlur)
- cm.on('change', onChange)
- cm.on('swapDoc', onChange)
- onChange(cm)
- } else if (!val && prev) {
- cm.off('blur', onBlur)
- cm.off('change', onChange)
- cm.off('swapDoc', onChange)
- clearPlaceholder(cm)
- var wrapper = cm.getWrapperElement()
- wrapper.className = wrapper.className.replace(' CodeMirror-empty', '')
- }
-
- if (val && !cm.hasFocus()) onBlur(cm)
- })
-
- function clearPlaceholder(cm) {
- if (cm.state.placeholder) {
- cm.state.placeholder.parentNode.removeChild(cm.state.placeholder)
- cm.state.placeholder = null
- }
- }
- function setPlaceholder(cm) {
- clearPlaceholder(cm)
- var elt = (cm.state.placeholder = document.createElement('pre'))
- elt.style.cssText = 'height: 0; overflow: visible; color: #80848f;'
- elt.style.direction = cm.getOption('direction')
- elt.className = 'CodeMirror-placeholder'
- var placeHolder = cm.getOption('placeholder')
- if (typeof placeHolder === 'string')
- placeHolder = document.createTextNode(placeHolder)
- elt.appendChild(placeHolder)
- cm.display.lineSpace.insertBefore(elt, cm.display.lineSpace.firstChild)
- }
-
- function onBlur(cm) {
- if (isEmpty(cm)) setPlaceholder(cm)
- }
- function onChange(cm) {
- let wrapper = cm.getWrapperElement()
- let empty = isEmpty(cm)
- wrapper.className =
- wrapper.className.replace(' CodeMirror-empty', '') +
- (empty ? ' CodeMirror-empty' : '')
-
- if (empty) setPlaceholder(cm)
- else clearPlaceholder(cm)
- }
-
- function isEmpty(cm) {
- return cm.lineCount() === 1 && cm.getLine(0) === ''
- }
- })
-}
diff --git a/src/components/treeGrid/component/subTreeGrid.vue b/src/components/treeGrid/component/subTreeGrid.vue
index aa6284c..0768382 100644
--- a/src/components/treeGrid/component/subTreeGrid.vue
+++ b/src/components/treeGrid/component/subTreeGrid.vue
@@ -49,7 +49,6 @@