From fe6509e66e6852f6b5d740385bdae4fd0a11da77 Mon Sep 17 00:00:00 2001
From: 董国庆 <364620639@qq.com>
Date: 星期二, 21 十月 2025 14:55:05 +0800
Subject: [PATCH] 修改问题

---
 laboratory/src/components/AiEditor/index.vue |   94 +++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 86 insertions(+), 8 deletions(-)

diff --git a/laboratory/src/components/AiEditor/index.vue b/laboratory/src/components/AiEditor/index.vue
index 373fafc..ba6f6ea 100644
--- a/laboratory/src/components/AiEditor/index.vue
+++ b/laboratory/src/components/AiEditor/index.vue
@@ -57,7 +57,8 @@
     value: {
       handler(newVal) {
         if (this.editor && newVal !== this.editor.getHtml()) {
-          this.editor.setContent(newVal)
+          const contentWithIp = this.addIpToContent(newVal);
+          this.editor.setContent(contentWithIp)
         }
       },
       immediate: true
@@ -78,18 +79,91 @@
     this.destroyEditor()
   },
   methods: {
+    // 去除内容中的IP地址,只保留相对路径
+    removeIpFromContent(content) {
+      if (!content || typeof content !== 'string') return content;
+      
+      // 获取当前IP地址
+      const currentIp = getAllocateIp();
+      
+      // 使用正则表达式匹配并替换所有包含当前IP的URL
+      const ipRegex = new RegExp(currentIp.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'g');
+      return content.replace(ipRegex, '');
+    },
+    
+    // 为内容中的相对路径添加IP地址,并处理已包含IP的绝对路径
+    addIpToContent(content) {
+      if (!content || typeof content !== 'string') return content;
+      
+      // 获取当前IP地址
+      const currentIp = getAllocateIp();
+      
+      // 匹配所有src、href、poster属性
+      const pathRegex = /(src|href|poster)="([^"]+)"/g;
+      
+      return content.replace(pathRegex, (match, attr, path) => {
+        // 如果路径是相对路径(不以http开头),则添加当前IP地址
+        if (!path.startsWith('http')) {
+          // 检查路径是否已经以/images/开头,避免重复添加
+          if (path.startsWith('/images/')) {
+            // 如果currentIp已经以/images/结尾,则去掉路径开头的/
+            if (currentIp.endsWith('/images/')) {
+              return `${attr}="${currentIp}${path.substring(1)}"`;
+            } else {
+              return `${attr}="${currentIp}${path}"`;
+            }
+          } else {
+            return `${attr}="${currentIp}${path}"`;
+          }
+        }
+        
+        // 如果路径已经包含当前IP地址,直接返回
+        if (path.startsWith(currentIp)) {
+          return match;
+        }
+        
+        // 如果路径是绝对路径,提取路径部分并替换为当前IP地址
+        // 匹配形如 http://192.168.1.100:8080/xxx 的路径
+        const absolutePathRegex = /^https?:\/\/[^\/]+(\/.*)$/;
+        const matchResult = path.match(absolutePathRegex);
+        
+        if (matchResult) {
+          // 提取路径部分,替换为当前IP地址
+          let pathPart = matchResult[1];
+          
+          // 如果currentIp已经以/images/结尾,且pathPart以/images/开头,则去掉pathPart开头的/images/
+          if (currentIp.endsWith('/images/') && pathPart.startsWith('/images/')) {
+            pathPart = pathPart.substring(7); // 去掉开头的 '/images/'
+            // 如果pathPart以/开头,则去掉开头的/
+            if (pathPart.startsWith('/')) {
+              pathPart = pathPart.substring(1);
+            }
+          }
+          
+          return `${attr}="${currentIp}${pathPart}"`;
+        }
+        
+        // 其他情况(如外部链接)保持不变
+
+        return match;
+      });
+    },
+    
     initEditor() {
       const options = {
         element: this.$refs.editorRef,
         placeholder: this.placeholder,
-        content: this.value,
+        content: this.addIpToContent(this.value),
         editable: !this.readOnly,
         toolbar: this.toolbar,
         toolbarExcludeKeys: ["ai"],
         draggable: false,
         onChange: (content) => {
-          this.$emit('input', content)
-          this.$emit('change', content)
+          // 确保content是字符串类型
+          const contentStr = typeof content === 'string' ? content : String(content || '');
+          const contentWithoutIp = this.removeIpFromContent(contentStr);
+          this.$emit('input', contentWithoutIp)
+          this.$emit('change', contentWithoutIp)
         },
         onFocus: () => {
           this.$emit('focus')
@@ -205,6 +279,7 @@
 
       }
 
+      console.log('this.addIpToContent(this.value)',this.addIpToContent(this.value))
       try {
         this.editor = new AiEditor(options)
       } catch (error) {
@@ -217,14 +292,17 @@
         this.editor = null
       }
     },
-    // 获取编辑器内容
+    // 获取编辑器内容(去除IP地址,只保留相对路径)
     getContent() {
-      return this.editor ? this.editor.getHtml() : ''
+      if (!this.editor) return '';
+      const content = this.editor.getHtml();
+      return this.removeIpFromContent(content);
     },
-    // 设置编辑器内容
+    // 设置编辑器内容(为相对路径添加IP地址)
     setContent(content) {
       if (this.editor) {
-        this.editor.setContent(content)
+        const contentWithIp = this.addIpToContent(content);
+        this.editor.setContent(contentWithIp);
       }
     },
     // 清空编辑器内容

--
Gitblit v1.7.1