吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3095|回复: 22
收起左侧

[其他原创] 基于Vue、MarkMap、OpenAi开发的思维导图生成器

[复制链接]
PastYiHJ 发表于 2024-6-5 14:05
本帖最后由 PastYiHJ 于 2024-6-11 19:19 编辑

GPT 思维导图生成器

本项目完全开源
如果觉得不错麻烦帮忙点一次Star⭐️

项目简介

本项目是一个结合了Vue、Markmap和OpenAI ChatGPT的思维导图生成工具。用户可以输入标题和内容,通过调用ChatGPT生成思维导图,并支持放大、缩小、适应屏幕和下载功能。

效果演示

PastKing_2024-06-05_13-14-09.gif

技术栈

  • 前端框架:Vue
  • UI组件库:Element Ui
  • 思维导图库:Markmap
  • 图像生成库:html-to-image
  • 文件保存库:file-saver
  • AI模型:OpenAI ChatGPT

教程

找到项目目录下的.env文件,并修改以下内容:

VUE_APP_API_BASE_URL=https://api.openai.com
VUE_APP_API_KEY=your_openai_api_key

项目结构

├── public
│ └── index.html
├── src
│ ├── assets
│ ├── components
│ │ └── MarkdownRenderer.vue
│ ├── views
│ │ └── Home.vue
│ │ └── About.vue
│ ├── App.vue
│ └── main.js
├── .env
├── .gitignore
├── package.json
├── README.md
└── vue.config.js

部分代码

<template>
    <el-row :gutter="20" class="mind-container">
        <el-col :span="8" class="left-panel">
            <el-row :gutter="20">
                <el-col :span="24">
                    <el-input v-model="title" placeholder="输入标题"></el-input>
                </el-col>
            </el-row>
            <el-row :gutter="20" style="margin-top: 10px;">
                <el-col :span="24">
                    <el-button type="primary" @click="generateMindMap">生成</el-button>
                </el-col>
            </el-row>
            <el-row :gutter="20" style="margin-top: 20px;">
                <el-col :span="24">
                    <el-input v-model="editorContent" type="textarea" rows="10" placeholder="编辑内容"></el-input>
                </el-col>
            </el-row>
        </el-col>

        <el-col :span="16" class="right-panel">
            <div class="svg-container">
                <svg ref="svgRef" class="markmap-svg"></svg>
            </div>
            <el-row :gutter="10" class="controls">
                <el-col :span="6">
                    <el-button @click="zoomIn">放大</el-button>
                </el-col>
                <el-col :span="6">
                    <el-button @click="zoomOut">缩小</el-button>
                </el-col>
                <el-col :span="6">
                    <el-button @click="fitToScreen">适应屏幕</el-button>
                </el-col>
                <el-col :span="6">
                    <el-button @click="onSave">下载</el-button>
                </el-col>
            </el-row>
        </el-col>
    </el-row>
</template>

<script>

        /*  省略  */

        const generateMindMap = async () => {
            try {
                const response = await fetch(
                    `${process.env.VUE_APP_API_BASE_URL}/v1/chat/completions`,
                    {
                        method: 'POST',
                        headers: {
                            'Content-Type': 'application/json',
                            'Authorization': `Bearer ${process.env.VUE_APP_API_KEY}`
                        },
                        body: JSON.stringify({
                            messages: [
                                {
                                    role: 'system',
                                    content: ``
                                },
                                {
                                    role: 'user',
                                    content: `${title.value}`
                                }
                            ],
                            stream: true,
                            model: `gpt-3.5-turbo`,
                            temperature: 0.5,
                            presence_penalty: 2
                        })
                    }
                )

                const reader = response.body.getReader()
                const decoder = new TextDecoder('utf-8')
                let result = ''

                while (true) {
                    const { done, value } = await reader.read()
                    if (done) break
                    const chunk = decoder.decode(value, { stream: true })
                    const lines = chunk.split('\n').filter(line => line.trim())
                    for (const line of lines) {
                        if (line === 'data: [DONE]') return
                        if (line.startsWith('data: ')) {
                            const data = JSON.parse(line.slice(6))
                            if (data.choices[0].delta && data.choices[0].delta.content) {
                                result += data.choices[0].delta.content
                                editorContent.value = result // Update the editor content
                            }
                        }
                    }
                }

                editorContent.value = result.trim()
                update()
            } catch (error) {
                console.error('Error generating mind map:', error)
            }
        }

        /*  省略  */
}
</script>

</style>

下载

源码(GitHub):
https://github.com/PastKing/MarkMap-OpenAi-ChatGpt

源码(Gitee):
https://gitee.com/past-dust/mindmap-generator

免费评分

参与人数 6威望 +1 吾爱币 +24 热心值 +5 收起 理由
child_lu + 1 谢谢@Thanks!
苏紫方璇 + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
unicornTwo + 1 + 1 谢谢@Thanks!
haokie + 1 + 1 谢谢@Thanks!
onlymocha + 1 + 1 我很赞同!
1045837055lucy + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

苏紫方璇 发表于 2024-6-11 13:30
一、本版块仅限分享编程技术和源码相关内容,发布帖子必须带上关键代码和具体功能介绍
请在帖子中贴上部分核心代码
 楼主| PastYiHJ 发表于 2024-6-5 14:06
打酱油的笨小孩 发表于 2024-6-5 14:51
打酱油的笨小孩 发表于 2024-6-5 14:52
PastYiHJ 发表于 2024-6-5 14:06
图片显示不正常吗?

显示&#174;&#65039;,收藏了
onlymocha 发表于 2024-6-5 15:11
这个厉害了
liuhaigang12 发表于 2024-6-5 15:13
真的省事了
msying1 发表于 2024-6-5 15:46
这个显示正常,非常不错
webphp 发表于 2024-6-5 15:54
这个功能真强大,非常好
aLesley 发表于 2024-6-5 16:35
感觉有点酷,下载个看看
ragkan 发表于 2024-6-5 16:51
看着还不错,下次试一试
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 11:30

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表