]*>(.*?)<\/p>/gi, '$1\n\n')
+ // 处理换行
+ .replace(/
/gi, '\n')
+ // 处理粗体
+ .replace(/]*>(.*?)<\/strong>/gi, '**$1**')
+ .replace(/]*>(.*?)<\/b>/gi, '**$1**')
+ // 处理斜体
+ .replace(/]*>(.*?)<\/em>/gi, '*$1*')
+ .replace(/]*>(.*?)<\/i>/gi, '*$1*')
+ // 处理下划线
+ .replace(/]*>(.*?)<\/u>/gi, '__$1__')
+ // 处理链接
+ .replace(/]*href=["']([^"']*)["'][^>]*>(.*?)<\/a>/gi, '[$2]($1)')
+ // 处理图片 - 更全面的图片处理
+ .replace(/]*src=["']([^"']*)["'][^>]*alt=["']([^"']*)["'][^>]*>/gi, (match, src, alt) => {
+ // 直接使用原始URL,不添加额外前缀
+ console.log('HTML图片转换 - 原始:', match)
+ console.log('HTML图片转换 - src:', src)
+ console.log('HTML图片转换 - alt:', alt)
+ return ``
+ })
+ .replace(/
]*src=["']([^"']*)["'][^>]*>/gi, (match, src) => {
+ // 直接使用原始URL,不添加额外前缀
+ console.log('HTML图片转换 - 原始:', match)
+ console.log('HTML图片转换 - src:', src)
+ return ``
+ })
+ // 处理列表
+ .replace(/
]*>(.*?)<\/ul>/gis, (match, content) => {
+ return content.replace(/
]*>(.*?)<\/ol>/gis, (match, content) => {
+ let index = 1
+ return content.replace(/
]*>(.*?)<\/blockquote>/gis, (match, content) => {
+ return content.replace(/\n/g, '\n> ') + '\n'
+ })
+ // 处理代码
+ .replace(/
]*>(.*?)<\/code>/gi, '`$1`')
+ .replace(/]*>(.*?)<\/pre>/gis, '```\n$1\n```')
+ // 处理分割线
+ .replace(/
]*>/gi, '---\n')
+ // 处理表格(简单处理)
+ .replace(/]*>(.*?)<\/table>/gis, (match, content) => {
+ // 这里可以添加更复杂的表格处理逻辑
+ return content.replace(/
]*>(.*?)<\/tr>/gi, (trMatch, trContent) => {
+ const cells = trContent.match(/ $1
')
+ .replace(/^## (.*$)/gim, '$1
')
+ .replace(/^### (.*$)/gim, '$1
')
+ .replace(/^#### (.*$)/gim, '$1
')
+ .replace(/^##### (.*$)/gim, '$1
')
+ .replace(/^###### (.*$)/gim, '$1
')
+ // 处理粗体
+ .replace(/\*\*(.*?)\*\*/g, '$1')
+ // 处理斜体
+ .replace(/\*(.*?)\*/g, '$1')
+ // 处理链接
+ .replace(/\[([^\]]+)\]\(([^)]+)\)/g, '$1')
+ // 处理图片
+ .replace(/!\[([^\]]*)\]\(([^)]+)\)/g, '')
+ // 处理段落
+ .replace(/^(?!<[h1-6]|
$1')
+ // 处理换行
+ .replace(/\n/g, '
')
+
+ return html
+}
+
// 保存
const onsubmit = async (evt: TM.FORM_SUBMIT_RESULT) => {
// console.log("校验结果:", evt)
- console.log("提交的数据:", { ...form, coverImage: JSON.parse(form.coverImage[0].response).data.url })
+
+ // 将Markdown格式的description转换为HTML
+ const htmlDescription = convertMarkdownToHtml(form.description)
+ console.log("原始Markdown:", form.description)
+ console.log("转换后HTML:", htmlDescription)
+
+ const submitData = {
+ ...form,
+ description: htmlDescription, // 使用转换后的HTML
+ coverImage: JSON.parse(form.coverImage[0].response).data.url
+ }
+ console.log("提交的数据:", submitData)
+
if (!evt.isPass) return
if (form.priceType == "1") {
@@ -307,7 +437,11 @@ const onsubmit = async (evt: TM.FORM_SUBMIT_RESULT) => {
}
try {
- const params = { ...form, coverImage: JSON.parse(form.coverImage[0].response).data.url }
+ const params = {
+ ...form,
+ description: htmlDescription, // 使用转换后的HTML
+ coverImage: JSON.parse(form.coverImage[0].response).data.url
+ }
uni.showLoading({ title: "提交中..." })
const { code, msg } = await (form.id ? prosperityShopApi.editGoods(params) : prosperityShopApi.addGoods(params))
if (code != 0) return uni.showToast({ title: msg || "提交失败", icon: "none" })
diff --git a/src/sheep/components/rich-text-editor/README.md b/src/sheep/components/rich-text-editor/README.md
new file mode 100644
index 0000000..df24e0f
--- /dev/null
+++ b/src/sheep/components/rich-text-editor/README.md
@@ -0,0 +1,83 @@
+# 富文本编辑器组件
+
+这是一个简单的富文本编辑器组件,专为移动端设计,支持Markdown语法。
+
+## 组件文件
+
+- `rich-text-editor.vue` - 核心编辑器组件
+- `rich-text-input.vue` - 表单输入组件
+
+## 使用方法
+
+### 1. 在表单中使用
+
+```vue
+
+