uniapp富文本editor输入二次扩展兼容微信小程序

在uni-app中开发富文本输入功能,并使其兼容微信小程序,需要注意一些特定的限制和解决方案。由于微信小程序本身对HTML的支持有限,直接在小程序中实现像Web那样完整的富文本编辑功能(如使用CKEditor、Quill等)是不可能的。但你可以通过一些方法来实现基本的富文本输入或近似功能。

富文本编辑器,可以对图片、文字格式进行编辑和混排。

在web开发时,可以使用contenteditable来实现内容编辑。但这是一个dom API,在非H5平台无法使用。于是微信小程序和uni-app的App-vue提供了editor组件来实现这个功能,并且在uni-app的H5平台也提供了兼容。从技术本质来讲,这个组件仍然运行在视图层webview中,利用的也是浏览器的contenteditable功能。

编辑器导出内容支持带标签的 html和纯文本的 text,编辑器内部采用 delta 格式进行存储。

通过setContents接口设置内容时,解析插入的 html 可能会由于一些非法标签导致解析错误,建议开发者在应用内使用时通过 delta 进行插入。

组件扩展

<template><view class="diygw-col-24"><view :style="{height:height}" class='flex  flex-direction-column wrapper'><view class='toolbar' @tap="format"><view v-if="tools.indexOf('undo')>-1" class="iconfont icon-undo" @tap="undo"></view><view v-if="tools.indexOf('redo')>-1" class="iconfont icon-redo" @tap="redo"></view><view v-if="tools.indexOf('bold')>-1" :class="formats.bold ? 'ql-active' : ''" class="iconfont icon-zitijiacu" data-name="bold"></view><view v-if="tools.indexOf('italic')>-1" :class="formats.italic ? 'ql-active' : ''" class="iconfont icon-zitixieti" data-name="italic"></view><view v-if="tools.indexOf('underline')>-1" :class="formats.underline ? 'ql-active' : ''" class="iconfont icon-zitixiahuaxian" data-name="underline"></view><view v-if="tools.indexOf('strike')>-1" :class="formats.strike ? 'ql-active' : ''" class="iconfont icon-zitishanchuxian" data-name="strike"></view><view v-if="tools.indexOf('align-left')>-1" :class="formats.align === 'left' ? 'ql-active' : ''" class="iconfont icon-zuoduiqi" data-name="align" data-value="left"></view><view v-if="tools.indexOf('align-center')>-1" :class="formats.align === 'center' ? 'ql-active' : ''" class="iconfont icon-juzhongduiqi" data-name="align" data-value="center"></view><view v-if="tools.indexOf('align-right')>-1" :class="formats.align === 'right' ? 'ql-active' : ''" class="iconfont icon-youduiqi" data-name="align" data-value="right"></view><view v-if="tools.indexOf('align-justify')>-1" :class="formats.align === 'justify' ? 'ql-active' : ''" class="iconfont icon-zuoyouduiqi" data-name="align" data-value="justify"></view><view v-if="tools.indexOf('lineHeight')>-1" :class="formats.lineHeight ? 'ql-active' : ''" class="iconfont icon-line-height" data-name="lineHeight" data-value="2"></view><view v-if="tools.indexOf('letterSpacing')>-1" :class="formats.letterSpacing ? 'ql-active' : ''" class="iconfont icon-Character-Spacing" data-name="letterSpacing" data-value="2em"></view><view v-if="tools.indexOf('marginTop')>-1" :class="formats.marginTop ? 'ql-active' : ''" class="iconfont icon-722bianjiqi_duanqianju" data-name="marginTop" data-value="20px"></view><view v-if="tools.indexOf('previewarginBottom')>-1" :class="formats.previewarginBottom ? 'ql-active' : ''" class="iconfont icon-723bianjiqi_duanhouju" data-name="marginBottom" data-value="20px"></view><view v-if="tools.indexOf('removeFormat')>-1" class="iconfont icon-clearedformat" @tap="removeFormat"></view><view v-if="tools.indexOf('fontFamily')>-1" :class="formats.fontFamily ? 'ql-active' : ''" class="iconfont icon-font" data-name="fontFamily" data-value="仿宋, 仿宋_GB2312"></view><!-- <picker v-if="tools.indexOf('fontSize')>-1" :range="fontSizelist" @change="formatsChange" @tap.stop="formatsChange" data-name="size" class="iconfont icon-fontsize" :class="formats.size? ' ql-active' : ''"></picker> --><picker v-if="tools.indexOf('fontSize')>-1" range-key="name" :range="fontSizelist" @change="formatsChange" @tap.stop="formatsChange" data-name="fontSize" class="iconfont icon-fontsize" :class="formats.fontSize? ' ql-active' : ''"></picker><!-- <view v-if="tools.indexOf('fontSize')>-1" :class="formats.fontSize === '24px' ? 'ql-active' : ''" class="iconfont icon-fontsize" data-name="fontSize" data-value="24px"></view> --><view v-if="tools.indexOf('color')>-1" :style="(formats.color != '#FFFFFF'&&formats.color != '#fff'&&formats.color != '#ffffff')? 'color:' + formats.color : ''" class="iconfont icon-text_color" data-name="color" @tap.stop="openColor"></view><view v-if="tools.indexOf('backgroundColor')>-1" :style="(formats.backgroundColor != '#FFFFFF'&&formats.backgroundColor != '#fff'&&formats.backgroundColor != '#ffffff') ? 'color:' + formats.backgroundColor : ''" class="iconfont icon-fontbgcolor" data-name="backgroundColor" @tap.stop="openColor"></view><view v-if="tools.indexOf('insertDate')>-1" class="iconfont icon-date" @tap="insertDate"></view><view v-if="tools.indexOf('list')>-1" class="iconfont icon--checklist" data-name="list" data-value="check"></view><view v-if="tools.indexOf('ordered')>-1" :class="formats.list === 'ordered' ? 'ql-active' : ''" class="iconfont icon-youxupailie" data-name="list" data-value="ordered"></view><view v-if="tools.indexOf('bullet')>-1" :class="formats.list === 'bullet' ? 'ql-active' : ''" class="iconfont icon-wuxupailie" data-name="list" data-value="bullet"></view><view v-if="tools.indexOf('indent-reduce')>-1" class="iconfont icon-outdent" data-name="indent" data-value="-1"></view><view v-if="tools.indexOf('indent-add')>-1" class="iconfont icon-indent" data-name="indent" data-value="+1"></view><view v-if="tools.indexOf('insert-divider')>-1" class="iconfont icon-fengexian" @tap="insertDivider"></view><view v-if="tools.indexOf('insert-image')>-1" class="iconfont icon-charutupian" @tap="selectImage"></view><picker v-if="tools.indexOf('header')>-1" :range="headerlist" @change="formatsChange" @tap.stop="formatsChange" data-name="header" :class="'iconfont icon-format-header-'+(headerindex==0?1:headerindex)+(formats.header? ' ql-active' : '')"></picker><!-- <view v-if="tools.indexOf('header')>-1" :class="formats.header === 1 ? 'ql-active' : ''" class="iconfont icon-format-header-1" data-name="header" :data-value="3"></view> --><view v-if="tools.indexOf('script-sub')>-1" :class="formats.script === 'sub' ? 'ql-active' : ''" class="iconfont icon-zitixiabiao" data-name="script" data-value="sub"></view><view v-if="tools.indexOf('script-super')>-1" :class="formats.script === 'super' ? 'ql-active' : ''" class="iconfont icon-zitishangbiao" data-name="script" data-value="super"></view><view v-if="tools.indexOf('direction')>-1" :class="formats.direction === 'rtl' ? 'ql-active' : ''" class="iconfont icon-direction-rtl" data-name="direction" data-value="rtl"></view><view v-if="tools.indexOf('clear')>-1" class="iconfont icon-shanchu" @tap="clear"></view></view><view class="flex-sub editor-wrapper"><editor id="editor" class="ql-container" :placeholder="placeholder" showImgSize showImgToolbar showImgResize @statuschange="onStatusChange" :read-only="readOnly" @ready="onEditorReady" @input="editorChange"></editor></view></view><block v-if="modal.show"><view class="mask" /><view class="modal"><view class="modal_title">{{modal.title}}</view><input type="text" class="modal_input" v-model="modal.value" /><view class="modal_foot"><view class="modal_button" @tap="modalCancel">取消</view><view class="modal_button" style="color:#576b95;border-left:1px solid rgba(0,0,0,.1)" @tap="modalConfirm">确定</view></view></view></block><diy-color-picker v-model="showColorPicker" :hexcolor="hexcolor" @confirm="getColor"></diy-color-picker></view>
</template><script>import Emitter from "../../libs/util/emitter.js";export default {mixins: [Emitter],emits: ["update:modelValue", "change"],props: {value: {type: String},modelValue:{type: String},placeholder: {type: String,default: '开始输入...'},height:{type:String,default: '100vh'},tools: {type: Array,default: function() {return ['bold','italic','underline','strike','align-left','align-center','align-right','align-justify','lineHeight','letterSpacing','marginTop','previewarginBottom','removeFormat','fontFamily','fontSize','color','backgroundColor','insertDate','list','ordered','bullet','redo','undo','indent-reduce','indent-add','insert-divider','insert-image','header','script-sub','script-super','clear','direction'];}},//上传图片action:{type:String,default: '/sys/storage/upload'}/*,uploadFile: {type: Function}*/},data() {return {modal: {show: false,title: '',value: ''},showColorPicker:false,html: '',fontSizelist: [{code: "",name: "默认"}, {code: "x-small",name: "超小"}, {code: "small",name: "小"}, {code: "medium",name: "中等"}, {code: "large",name: "大"}, {code: "x-large",name: "超大"}, {code: "xx-large",name: "超级大"}],headerlist: ['默认', 'H1', 'H2', 'H3', 'H4', 'H5', 'H6'],headerindex: 0,colorPickerName: '',hexcolor: "#0000ff",readOnly: false,formats: {},update: 0,uForm:{inputAlign: "",clearable: ""}}},watch: {value: function(newval) {this.html = newval},modelValue: function(newval) {this.html = newval},html: function(newvar) {if (this.editorCtx) {if (this.update == 0) {this.editorCtx.setContents({html: this.html});} else {this.update = 0}}}},created() {this.html = this.value;},mounted() {let parent = this.$u.$parent.call(this, 'u-form');if (parent) {Object.keys(this.uForm).map(key => {this.uForm[key] = parent[key];});}},methods: {openColor(e) {let dataset = e.target.datasetthis.colorPickerName = dataset.name;this.hexcolor = dataset.value;this.showColorPicker = true// this.$refs.colorPicker.open();},getColor(e) {let msg = '';switch (this.colorPickerName) {case 'backgroundColor':if (e.hex.toUpperCase() == '#FFFFFF') {e.hex = '';}msg = '背景色';break;case 'color':msg = '颜色';break;}this.setformat(this.colorPickerName, e.hex, msg + e.hex);},modalConfirm() {let src = this.modal.value || '';if (src) {this.insertImage(src, null, null)}this.modal.show = false;},modalCancel() {this.modal.show = false;},formatsChange(e) {if (e.type == 'click') { //不让上层触发点击事件return false;}let value = e.detail.value;let name = e.target.dataset.nameif (name == 'header') {this.headerindex = value;if (value == 0) {value = null;}} else if (name == 'fontSize') {value = this.fontSizelist[value].code;} else if (name == 'size') {value = value > 0 ? value : 1;}let msg = name + '设置成功';console.log(value);this.setformat(name, value, msg)return false;},editorChange(e) {this.update = 1this.$emit('input', e.detail.html);this.$emit("update:modelValue", e.detail.html);// vue 原生的方法 return 出去this.$emit("change", e.detail.html);// 将当前的值发送到 u-form-item 进行校验this.dispatch("u-form-item", "onFieldBlur", e.detail.html);},readOnlyChange() {this.readOnly = !this.readOnly},onEditorReady() {const query = uni.createSelectorQuery().in(this);query.select('#editor').context((res) => {this.editorCtx = res.contextif (this.html) {this.editorCtx.setContents({html: this.html});}}).exec()},undo() {this.editorCtx.undo()},redo() {this.editorCtx.redo()},format(e) {let {name,value} = e.target.datasetif (!name) return// console.log('format', name, value)this.editorCtx.format(name, value)},setformat(name, value, msg) {this.editorCtx.format(name, value);// this.toast(msg);},toast(msg) {uni.showToast({duration: 600,icon: 'none',title: msg});},onStatusChange(e) {const formats = e.detailthis.formats = formats},insertDivider() {this.editorCtx.insertDivider({success: function() {console.log('insert divider success')}})},clear() {uni.showModal({content: "确定清空编辑器内容?",complete: (rs) => {if (rs.confirm) {this.editorCtx.clear({success: function(res) {console.log("clear success")}})}}})},removeFormat() {this.editorCtx.removeFormat()},insertDate() {const date = new Date()let month = date.getMonth() + 1if(month<10){month = "0" +month}let day = date.getDate()if(day<10){day = "0" + day}const formatDate = `${date.getFullYear()}-${month}-${day}`this.editorCtx.insertText({text: formatDate})},selectImage() {let thiz = this// 本地选取 自已处理上传方法,包括选择文件uni.chooseImage({count: 9,sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有javascript:;success: function (res) {// 返回选定照片的本地文件路径列表,tempFilePath可以作为img标签的src属性显示图片let tempFilePaths = res.tempFilePaths;for (let i = 0; i < tempFilePaths.length; i++) {let header = {}if(getApp().globalData.currentPage && getApp().globalData.currentPage.$session){header.Authorization =  getApp().globalData.currentPage.$session.getToken()||''}uni.uploadFile({url: getApp().globalData.currentPage && getApp().globalData.currentPage.$http?getApp().globalData.currentPage.$http.setUrl(thiz.action,{}):thiz.action,filePath: tempFilePaths[i],name: 'file',header:header,success(res) {let data = getApp().globalData.currentPage.$tools.fromJson(res.data);let url = ''if(data.url){url = getApp().globalData.currentPage.$tools.renderImage(data.url);}if(data.data &&getApp().globalData.currentPage.$tools.isObject(data.data) && data.data.url){url = getApp().globalData.currentPage.$tools.renderImage(data.data.url);}if(url){thiz.insertImage(url,null,null);}}});}},});// uni.showActionSheet({// 	itemList: ['本地选取', '远程链接'],// 	success: res => {// 		if (res.tapIndex === 0) {// 		} else {// 			thiz.modal = {// 				show: true,// 				title: '图片链接',// 				value: ''// 			}// 		}// 	}// })},insertImage(src, data, alt) {debuggerlet inserdata = {src: src}if (data) {inserdata.data = data}if (alt) {inserdata.alt = alt}this.editorCtx.insertImage({...inserdata,success: function() {console.log('insert image success')}})}}}
</script><style>@import "./editor-icon.css";.container {width: 100%;}.wrapper {width: 100%;}.editor-wrapper {width: 100%;background: #fff;}.iconfont {display: inline-block;padding: 8px 8px;cursor: pointer;font-size: 25px;}.toolbar {box-sizing: border-box;border-bottom: 0;font-family: 'Helvetica Neue', 'Helvetica', 'Arial', sans-serif;}.ql-container {box-sizing: border-box;padding: 10px;width: 100%;min-height: 30vh;height: 100%;font-size: 16px;line-height: 1.5;}.ql-active {color: #06c;}/* 模态框 */.modal {position: fixed;z-index: 999999;top: 50%;left: 16px;right: 16px;background-color: #fff;border-radius: 12px;transform: translateY(-50%);}.modal_title {padding: 32px 24px 16px;font-size: 17px;font-weight: 700;text-align: center;}.modal_input {display: block;padding: 5px;line-height: 2.5em;height: 2.5em;margin: 0 24px 32px 24px;font-size: 14px;border: 1px solid #dfe2e5;}.modal_foot {display: flex;line-height: 56px;font-weight: 700;border-top: 1px solid rgba(0, 0, 0, .1);}.modal_button {flex: 1;text-align: center;}/* 遮罩版 */.mask {position: fixed;z-index: 99999;top: 0;right: 0;bottom: 0;left: 0;background-color: black;opacity: 0.5;}
</style>

组件调用

<template><view class="container container329152"><u-form-item :borderBottom="false" class="diygw-col-24" labelPosition="top" prop="editor"><diy-editor height="500px" v-model="editor"></diy-editor></u-form-item><view class="clearfix"></view></view>
</template><script>export default {data() {return {//用户全局信息userInfo: {},//页面传参globalOption: {},//自定义全局变量globalData: {},editor: ''};},onShow() {this.setCurrentPage(this);},onLoad(option) {this.setCurrentPage(this);if (option) {this.setData({globalOption: this.getOption(option)});}this.init();},methods: {async init() {},// 新增方法 自定义方法async testFunction(param) {let thiz = this;console.log(this.checkbox);}}};
</script><style lang="scss" scoped>.container329152 {}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1538262.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

2024年【电气试验】试题及解析及电气试验模拟考试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年【电气试验】试题及解析及电气试验模拟考试题&#xff0c;包含电气试验试题及解析答案和解析及电气试验模拟考试题练习。安全生产模拟考试一点通结合国家电气试验考试最新大纲及电气试验考试真题汇总&#xff0…

【强化学习系列】Gym库使用——创建自己的强化学习环境2:拆解官方标准模型源码/规范自定义类+打包自定义环境

目录 一、 官方标准环境的获取与理解 二、根据官方环境源码修改自定义 1.初始化__init__() 2.重置环境 reset() 三、打包环境 1.注册与创建自定义环境 2.环境规范化 在本文的早些时候&#xff0c;曾尝试按照自己的想法搭建自定义的基于gym强化学习环境。 【强化学习系列】Gy…

IEEE-754 32位十六进制数 转换为十进制浮点数

要将 IEEE-754 32位十六进制数 转换为 十进制浮点数&#xff0c;可以使用LabVIEW中的 Type Cast 函数。以下是一些具体步骤&#xff0c;以及相关实例的整理&#xff1a; 实现步骤&#xff1a; 输入十六进制数&#xff1a;在LabVIEW中&#xff0c;首先需要创建一个输入控制器&am…

剃(磨)前插齿刀设计计算开发第二步:

从刀具上的各段齿形计算加工出的齿轮端面齿形&#xff0c;下一步进行细化处理[开心]&#xff0c;去掉一些线头&#xff0c;增加一些关键参数的计算及标准&#xff0c;例如&#xff1a;SAP、UnderCut、EAP、Chamfer等等&#xff0c;祝我好运吧&#xff0c;谢谢&#xff01;

MySQL系列—11.Redo log

1.简介 概念 redo log用于记录事务操作变化&#xff0c;记录的是数据被修改之后的值&#xff0c;&#xff08;tbs space id page no action&#xff09;。 作用 尚未完成的DML,数据库崩溃则用log恢复。保证事务持久性。 ( 1 ) 在页面修改完成之后&#xff0c;脏页刷入磁盘之…

ZYNQ FPGA自学笔记~点亮LED

一 ZYNQ FPGA简介 ZYNQ FPGA主要特点是包含了完整的ARM处理系统&#xff0c;内部包含了内存控制器和大量的外设&#xff0c;且可独立于可编程逻辑单元&#xff0c;下图中的ARM内核为 ARM Cortex™-A9&#xff0c;ZYNQ FPGA包含两大功能块&#xff0c;处理系统Processing System…

路由原理介绍

定义与过程 定义&#xff1a;是指导IP报文发送的路径信息 过程&#xff1a; 检查数据包的目的地确定信息源发现可能的路径选择最佳路径验证和维护路由信息 路由来源 直连路由&#xff1a;不需配置&#xff0c;路由器配置IP后自动生效 静态路由&#xff1a;手动配置 ip r…

Ubantu LLaMA-Factory实战

一、Ubantu LLaMA-Factory实战安装&#xff1a; CUDA 安装 CUDA 是由 NVIDIA 创建的一个并行计算平台和编程模型&#xff0c;它让开发者可以使用 NVIDIA 的 GPU 进行高性能的并行计算。 首先&#xff0c;在 https://developer.nvidia.com/cuda-gpus 查看您的 GPU 是否支持CU…

壹嘉情,中国与世界经济文化交流的新桥梁

壹嘉情正在全球华商领域迅速崛起。作为意大利华商总会的中国分部&#xff0c;壹嘉情承载着推动两岸及全球华商深度合作、实现资源共享和互利共赢的使命。它的成立标志着意大利华商总会在全球战略布局上的重要一步&#xff0c;同时也昭示了全球化浪潮中&#xff0c;华人企业正加…

苹果电脑也可以清除垃圾吗?苹果电脑清理垃圾用什么软件哪个好?

相对于Windows电脑&#xff0c;目前专注于苹果电脑清理的软件不算多&#xff0c;那么&#xff0c;苹果电脑垃圾清理软件哪个好&#xff1f;本文经过对比给大家推荐几款好用的软件。另外&#xff0c;我们还会进行苹果电脑垃圾清理方法盘点&#xff0c;让大家更了解电脑的清理方法…

从零开始讲DDR(0)——DDR的前世今生

一、计算机组成 计算机组成结构&#xff08;Computer Architecture&#xff09;是计算机系统的核心&#xff0c;它定义了计算机的基本工作原理和设计模式。计算机的组成可以分成以下3大类&#xff1a;中央处理器&#xff08;CPU&#xff09;、存储器和输入/输出子系统。 1.1 中…

达梦数据库DM8使用介绍

达梦数据库DM8使用介绍 达梦数据库DM8使用介绍一、安装达梦数据库二、初始化数据库实例三、SQL 分类DML(Data Mannipulation Language)数据操纵语言&#xff1a;DDL(Data Definition Language)数据定义语言&#xff1a;DCL(Data Control Language)数据控制语言&#xff1a;TCL(…

springboot实训学习笔记(5)(用户登录接口的主逻辑)

接着上篇博客学习。上篇博客是已经基本完成用户模块的注册接口的开发以及注册时的参数合法性校验。具体往回看了解的链接如下。 springboot实训学习笔记&#xff08;4&#xff09;(Spring Validation参数校验框架、全局异常处理器)-CSDN博客文章浏览阅读576次&#xff0c;点赞7…

城市级河流三维处理及展示的一些技术

本文是一些算法技术的初探分析&#xff0c;会陆续修订。 1、问题 河流是一种非常复杂的多边形。在二维地图可以采用多边形填充算法(DDA)对任意复杂的多边形进行绘制与填充。但是三维引擎只能采纳三角面进行渲染。但在如此复杂的多边形面前&#xff0c;简单的三角化算法不能解…

Java 回顾方法的定义

一、方法的定义 1&#xff0e;修饰符&#xff08;public static…&#xff09;详见博客【Java 方法的定义】 2&#xff0e;返回值&#xff08;int, double, char[],…., void&#xff09;详见博客【Java 方法的定义】 3. break&#xff1a;跳出switch 结束循环&#xff0c;详…

2024年09月18日《每日一练》

1、 智慧城市建设参考模型包括有依赖关系的5层结构和对建设有约束关系的3个支撑体系&#xff0c;5层结构包括物联感知层、通信网络层、计算与存储层、数据及服务支撑层、智慧应用层;3个支撑体系除了建设和运营管理体系、安全保障体系之外还包括&#xff08;&#xff09;。 A 人…

使用arduino玩基于esp8266的nodemcu开发板

一、简介 中秋节到图书馆看书&#xff0c;看到了arduino方面的书籍&#xff0c;里面有提到ESP8266模块。让我想起我抽屉里吃灰很久了的基于esp8266的nodemcu开发板。于是把书借回家研究了一下。这里做个记录。 二、我目前在使用的云服务器推荐 学Linux不搞个云服务器始终感觉…

进行直流充电桩测试仪的步骤和规范

直流充电桩测试仪是一种用于检测和评估直流充电桩性能的设备。它能够测量充电桩的输出电压、电流、功率等参数&#xff0c;并能够模拟各种负载条件&#xff0c;以测试充电桩的稳定性和可靠性。下面是进行直流充电桩测试仪的步骤和规范&#xff1a; 确保测试环境安全&#xff0…

2024.9.18 作业+思维导图

练习&#xff1a;提示并输入一个字符串&#xff0c;统计该字符串中字母、数字、空格、其他字符的个数并输出 #include <iostream>using namespace std;int main() {cout << "请输入一个字符串:" << endl;string str;int shuzi 0,zimu0,space 0,q…

MAGDA:多智能体指南驱动的诊断助手

MAGDA&#xff1a;多智能体指南驱动的诊断助手 秒懂大纲提出背景精细拆解输入输出全流程创意视角中文意译 论文&#xff1a;MAGDA: Multi-agent guideline-driven diagnostic assistance 秒懂大纲 ├── MAGDA: Multi-agent guideline-driven diagnostic assistance【研究主…