尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
text-to-cad实战:用Python将自然语言生成STEP与URDF三维模型
1. 从一段文字到三维模型text-to-cad 到底在解决什么问题第一次听到 text-to-cad 这个词很多人脑子里浮现的画面大概是对着电脑敲一句“给我画一个长宽高 100×60×40 的带圆角盒子”然后屏幕上就自动出现一个可以旋转、可以导出、可以继续编辑的三维模型。这个画面放在几年前还属于科幻范畴但现在已经有一批开源项目和商业工具把它做成了能跑通的流程。text-to-cad 的核心就是把自然语言描述转换成计算机辅助设计软件能够识别的几何数据最终落地成 STEP、STL、URDF 这类标准格式文件。这件事为什么值得关注因为传统 CAD 建模的门槛并不低。你得先学会草图约束、拉伸切除、倒角圆角、装配配合这一整套操作逻辑还得熟悉具体软件的界面和快捷键。对于机械工程师来说这不算什么但对于做机器人仿真的、做强化学习环境搭建的、做快速原型验证的开发者来说为了一个简单的几何体去啃 CAD 软件时间成本太高了。text-to-cad 瞄准的就是这个缝隙让描述需求的人不需要成为 CAD 专家也能拿到可用的几何文件。从热搜词也能看出这个领域的真实需求分布。一边是大量“cad安装”“cad教程”“cad制图初学入门”这类基础搜索说明 CAD 的入门门槛依然是很多人的痛点另一边是“urdf导入coppeliasim”“python构建邻接矩阵”“python批量对cad修改”这类偏开发向的搜索说明已经有一批人在用 Python 做 CAD 相关的自动化处理。text-to-cad 正好卡在这两拨人中间它既需要理解 CAD 的几何语义又需要用 Python 这类编程语言来实现自动化生成。这篇文章适合谁看如果你是做机器人仿真的需要批量生成 URDF 模型如果你是做算法验证的需要快速构造带特定参数的几何体如果你是做 CAD 二次开发的想了解怎么用 Python 操作几何数据或者你只是对“用文字生成模型”这件事好奇想看看背后到底是怎么实现的——那接下来的内容应该对你有用。我会从整体设计思路讲起然后拆解核心实现细节再给出一套可以跟着做的实操流程最后把常见的坑和排查方法整理出来。2. 整体设计思路为什么是 Python STEP URDF 这套组合2.1 核心架构的选型逻辑text-to-cad 的实现路径可以粗略分成两大流派。一派是“生成式”路线用大模型直接输出几何代码或者点云再后处理成 CAD 格式另一派是“参数化”路线先把自然语言解析成结构化的参数再调用几何内核生成模型。两条路线各有优劣但落到实际工程里参数化路线更可控、更可调试、更容易保证几何有效性。我倾向于用 Python 作为主语言原因很直接几何处理生态成熟。cadquery、build123d、trimesh、numpy-stl这些库覆盖了从参数化建模到网格处理的全流程。而且 Python 的字符串处理和自然语言解析能力也够用不需要为了解析一句话去引入额外的重型依赖。热搜词里“python安装”“python安装numpy库的方法”“python环境变量配置”出现频率很高说明大量用户本身就在 Python 生态里工作用 Python 做 text-to-cad 的落地语言学习成本最低。输出格式选 STEP 和 URDF 也是有讲究的。STEP 是 CAD 领域的通用交换格式几乎所有主流 CAD 软件都能读写适合做后续的编辑和加工。URDF 是机器人描述格式专门用来描述刚体、关节、连杆之间的运动学关系适合做仿真和运动规划。一个 text-to-cad 工具如果只能输出 STL那它只能用于 3D 打印或者可视化如果能输出 STEP 和 URDF那它的应用场景就扩展到了机械设计和机器人仿真两个大领域。2.2 自然语言到几何参数的映射策略把“一个长 100 宽 60 高 40 的盒子四个角倒 R5 圆角”这句话变成几何模型中间需要经过几步转换。第一步是实体识别找出“盒子”这个几何类型找出“长 100 宽 60 高 40”这组尺寸参数找出“R5 圆角”这个特征操作。第二步是参数归一化把“长宽高”映射到几何内核能理解的length、width、height变量把“R5”映射到fillet_radius5。第三步是代码生成根据几何类型和参数拼出一段调用几何内核的 Python 代码。第四步是执行与验证跑这段代码检查生成的几何体是否有效体积、包围盒是否符合预期。这个流程里最容易被低估的是第三步和第四步。很多人以为只要把参数提取出来就完事了实际上几何内核的 API 调用有很多细节倒圆角的边怎么选、坐标系怎么定、单位怎么统一。而且生成的几何体不一定有效比如圆角半径大于了最小边长的一半内核会直接报错。所以一个健壮的 text-to-cad 流程必须包含几何有效性检查。2.3 为什么不用端到端大模型直接生成有人会问现在大模型这么强为什么不直接让模型输出 STEP 文件原因在于几何数据的表示方式。STEP 文件本质上是边界表示BRep的文本描述包含大量的拓扑和几何信息直接让语言模型生成这种结构化数据出错率极高而且生成的模型往往拓扑无效无法被 CAD 软件正常打开。相比之下让模型生成一段调用几何内核的 Python 代码再由内核去保证几何有效性是更稳妥的做法。这也是目前大多数 text-to-cad 开源项目的共同选择。3. 核心细节解析几何内核、参数提取与格式转换3.1 几何内核的选择与对比Python 生态里能做参数化建模的库主要有几个选哪个直接决定了后续的开发体验。库名底层内核优势劣势适用场景cadqueryOpenCASCADEAPI 简洁社区活跃文档全依赖较重安装偶尔出问题快速原型、批量生成build123dOpenCASCADE语法更 Pythonic支持上下文管理器相对较新资料少复杂装配体trimesh自研轻量网格处理强不做 BRep只做网格STL 处理、可视化pythonoccOpenCASCADE底层控制力强API 繁琐学习曲线陡深度定制我实测下来cadquery 是 text-to-cad 场景下最平衡的选择。它的 API 设计接近自然语言比如cq.Workplane(XY).box(100, 60, 40).edges(|Z).fillet(5)这一行就完成了“在 XY 平面上画一个 100×60×40 的盒子对 Z 方向的边倒 R5 圆角”的全部操作。这种表达方式很容易和自然语言描述对应起来也方便做代码生成。安装 cadquery 有个坑要注意它依赖 OpenCASCADE 的 Python 绑定在 Windows 上直接用 pip 安装有时会因为缺少 C 运行库而失败。热搜词里“安装cad一直出现c2005cpi错误”虽然说的是 CAD 软件本身但 cadquery 的安装也会遇到类似的运行库问题。稳妥的做法是先装好 Visual C Redistributable再用 conda 安装 cadquery比 pip 省心很多。conda install -c conda-forge cadquery如果坚持用 pip建议先升级 pip 和 setuptools再安装python -m pip install --upgrade pip setuptools wheel pip install cadquery3.2 自然语言参数提取的实现细节参数提取这块可以用规则匹配也可以用大模型做意图识别。规则匹配适合格式固定的描述比如“长 X 宽 Y 高 Z”这种模板化表达大模型适合处理更自由的语言比如“帮我做一个差不多巴掌大的方块边角圆润一点”。实际项目里可以两者结合先用规则匹配尝试提取匹配失败再走大模型兜底。规则匹配的核心是正则表达式加单位归一化。比如下面这段代码可以提取尺寸参数import re def extract_dimensions(text): # 匹配 长100宽60高40 或 100x60x40 或 100*60*40 patterns [ r长\s*(\d\.?\d*)\s*宽\s*(\d\.?\d*)\s*高\s*(\d\.?\d*), r(\d\.?\d*)\s*[xX*×]\s*(\d\.?\d*)\s*[xX*×]\s*(\d\.?\d*), ] for p in patterns: m re.search(p, text) if m: return tuple(float(g) for g in m.groups()) return None单位处理是个容易被忽略的细节。CAD 里默认单位通常是毫米但用户可能说“10 厘米”或者“0.1 米”。如果不做单位归一化生成的模型尺寸会差一个数量级。我的做法是在提取参数后统一转成毫米并在代码里显式标注单位。圆角、倒角这类特征操作的提取也有讲究。“倒 R5 圆角”和“倒角 5mm”是两种不同的操作前者是圆角fillet后者可能是倒角chamfer。需要根据关键词区分并映射到不同的内核 API。3.3 STEP 与 URDF 的输出差异STEP 和 URDF 虽然都是三维模型格式但用途完全不同输出逻辑也不一样。STEP 是纯几何格式描述的是形状本身不包含运动学信息。cadquery 导出 STEP 很简单import cadquery as cq result cq.Workplane(XY).box(100, 60, 40).edges(|Z).fillet(5) cq.exporters.export(result, output.step)URDF 则复杂得多。它描述的是机器人模型包含 link连杆和 joint关节的层级关系。一个 URDF 文件里每个 link 需要指定视觉几何、碰撞几何、惯性参数每个 joint 需要指定类型、父连杆、子连杆、旋转轴。text-to-cad 生成 URDF 时通常需要用户额外描述关节信息比如“这个盒子是一个底座上面有一个绕 Z 轴旋转的关节连接一个圆柱体”。URDF 的几何部分可以引用 STL 或 STEP 文件也可以直接内嵌几何参数。引用外部文件的方式更常见因为这样可以把几何和运动学描述分离方便后续修改。下面是一个简化的 URDF 结构示例robot namesimple_robot link namebase_link visual geometry box size0.1 0.06 0.04/ /geometry /visual collision geometry box size0.1 0.06 0.04/ /geometry /collision inertial mass value1.0/ inertia ixx0.001 ixy0 ixz0 iyy0.001 iyz0 izz0.001/ /inertial /link joint namejoint1 typerevolute parent linkbase_link/ child linkarm_link/ axis xyz0 0 1/ limit lower-1.57 upper1.57 effort10 velocity1.0/ /joint /robot注意 URDF 里的单位是米不是毫米。从 STEP 转到 URDF 时尺寸要除以 1000。这个单位转换如果搞错导入 CoppeliaSim 或者 Gazebo 后模型会大得离谱或者小得看不见。热搜词里“urdf导入coppeliasim”是个高频操作很多人第一次导入时都会遇到模型比例不对的问题根源往往就在这里。4. 实操过程从零搭建一个 text-to-cad 流程4.1 环境准备与依赖安装先把环境搭起来。我推荐用 conda 创建独立环境避免和系统里的其他 Python 包冲突。conda create -n text2cad python3.10 conda activate text2cad conda install -c conda-forge cadquery pip install numpy trimesh lxmlPython 版本选 3.10 是因为 cadquery 对 3.11 以上的支持还在完善中3.10 最稳。numpy 用于数值计算trimesh 用于网格处理lxml 用于生成 URDF 的 XML 结构。验证安装是否成功import cadquery as cq box cq.Workplane(XY).box(10, 10, 10) print(box.val().Volume())如果输出接近 1000说明环境没问题。如果报错找不到 OpenCASCADE 相关库检查 conda 环境是否激活或者重新安装 cadquery。4.2 自然语言解析模块的实现解析模块的目标是把一句话拆成结构化的建模指令。我设计的数据结构是这样的from dataclasses import dataclass, field from typing import Optional dataclass class ModelingIntent: shape_type: str # box, cylinder, sphere dimensions: dict # {length: 100, width: 60, height: 40} features: list field(default_factorylist) # [{type: fillet, radius: 5}] units: str mm解析函数先做关键词匹配确定几何类型SHAPE_KEYWORDS { box: [盒子, 方块, 长方体, 立方体, box], cylinder: [圆柱, 圆筒, cylinder], sphere: [球, 圆球, sphere], } def detect_shape(text): for shape, keywords in SHAPE_KEYWORDS.items(): for kw in keywords: if kw in text: return shape return None然后提取尺寸和特征。特征提取要区分圆角和倒角def extract_features(text): features [] fillet_match re.search(r[Rr]\s*(\d\.?\d*)\s*(?:圆角|倒圆), text) if fillet_match: features.append({type: fillet, radius: float(fillet_match.group(1))}) chamfer_match re.search(r倒角\s*(\d\.?\d*), text) if chamfer_match: features.append({type: chamfer, distance: float(chamfer_match.group(1))}) return features这套规则能覆盖大部分常见描述。遇到“边角圆润一点”这种模糊表达规则匹配会失败这时候可以调用大模型做兜底让模型输出结构化的 JSON再解析成ModelingIntent。4.3 几何生成与有效性检查拿到ModelingIntent后生成 cadquery 代码并执行def build_model(intent): if intent.shape_type box: d intent.dimensions model cq.Workplane(XY).box(d[length], d[width], d[height]) for feat in intent.features: if feat[type] fillet: model model.edges(|Z).fillet(feat[radius]) elif feat[type] chamfer: model model.edges(|Z).chamfer(feat[distance]) return model raise ValueError(fUnsupported shape: {intent.shape_type})生成之后必须做有效性检查。检查项包括体积是否大于零、包围盒尺寸是否和输入参数一致、是否有自相交。cadquery 的val().isValid()可以检查拓扑有效性def validate_model(model, intent): solid model.val() if not solid.isValid(): raise ValueError(Generated geometry is not valid) bb solid.BoundingBox() expected intent.dimensions tolerance 0.1 if abs(bb.xlen - expected[length]) tolerance: raise ValueError(fLength mismatch: {bb.xlen} vs {expected[length]}) return True这个检查很有必要。我遇到过用户输入“长 10 宽 10 高 10倒 R6 圆角”的情况圆角半径大于了边长的一半内核直接报错。如果没有有效性检查程序会抛出一堆看不懂的内核异常有了检查可以给出明确的提示“圆角半径过大请减小到 5 以下”。4.4 导出 STEP 与生成 URDF导出 STEP 很简单一行代码cq.exporters.export(model, output.step)生成 URDF 需要多做一些工作。首先要确定 link 和 joint 的结构。对于单几何体的情况可以生成一个只有 base_link 的 URDFfrom lxml import etree def generate_urdf(model, namemodel, mass1.0): bb model.val().BoundingBox() size (bb.xlen / 1000, bb.ylen / 1000, bb.zlen / 1000) # 转米 robot etree.Element(robot, namename) link etree.SubElement(robot, link, namebase_link) visual etree.SubElement(link, visual) geom etree.SubElement(visual, geometry) box etree.SubElement(geom, box) box.set(size, f{size[0]} {size[1]} {size[2]}) collision etree.SubElement(link, collision) cgeom etree.SubElement(collision, geometry) cbox etree.SubElement(cgeom, box) cbox.set(size, f{size[0]} {size[1]} {size[2]}) inertial etree.SubElement(link, inertial) m etree.SubElement(inertial, mass) m.set(value, str(mass)) inertia etree.SubElement(inertial, inertia) # 简化计算实际应根据几何形状计算转动惯量 for attr in [ixx, ixy, ixz, iyy, iyz, izz]: inertia.set(attr, 0.001) return etree.tostring(robot, pretty_printTrue, encodingunicode)这里有个细节URDF 的视觉几何和碰撞几何可以不同。视觉几何用精细模型碰撞几何用简化模型可以提升仿真效率。text-to-cad 生成的模型通常比较简单两者可以一致。转动惯量的计算是个坑。上面代码里用了固定值 0.001这在仿真里会导致物理行为不真实。正确的做法是根据几何形状和密度计算。对于长方体转动惯量公式是Ixx m/12 * (h² d²)Iyy m/12 * (w² h²)Izz m/12 * (w² d²)其中 w、h、d 分别是长、高、宽。把这个计算补进去URDF 的物理属性才靠谱。4.5 完整流程串联与测试把上面的模块串起来形成一个完整的处理函数def text_to_cad(text, output_nameoutput): intent parse_text(text) model build_model(intent) validate_model(model, intent) cq.exporters.export(model, f{output_name}.step) urdf_str generate_urdf(model, nameoutput_name) with open(f{output_name}.urdf, w) as f: f.write(urdf_str) return f{output_name}.step, f{output_name}.urdf测试一下text_to_cad(做一个长100宽60高40的盒子四个角倒R5圆角, test_box)跑完之后应该得到test_box.step和test_box.urdf两个文件。STEP 文件可以用 FreeCAD 或者中望 CAD 打开检查URDF 文件可以导入 CoppeliaSim 验证。导入 CoppeliaSim 的步骤是菜单栏选择Add-Robot-Import URDF选中生成的 urdf 文件。如果模型显示不出来检查 URDF 里的文件路径是否正确以及单位是否匹配。CoppeliaSim 默认单位是米如果 URDF 里写的是毫米数值模型会大 1000 倍。5. 常见问题与排查技巧实录5.1 几何生成失败类问题这类问题最典型的表现是程序抛出 OpenCASCADE 的异常信息晦涩难懂。下面整理了几种常见情况和处理方法。问题现象可能原因排查方法解决方案圆角操作报错圆角半径大于最小边长一半检查 dimensions 和 radius 的关系减小半径或增大尺寸布尔运算失败两个几何体没有交集或完全重合打印两者的包围盒调整位置参数导出 STEP 为空模型拓扑无效调用 isValid() 检查修复几何或重新生成体积为零尺寸参数为负或零检查提取的 dimensions增加参数校验圆角半径的问题我踩过好几次。用户说“倒 R5 圆角”但盒子高度只有 8圆角半径 5 大于高度的一半 4内核直接拒绝。这时候要么提示用户改小半径要么自动把半径截断到安全值。我倾向于前者因为自动截断会让用户困惑“为什么我设的 5 变成了 3.9”。5.2 URDF 导入仿真环境的问题URDF 导入 CoppeliaSim 或者 Gazebo 时最常见的问题是模型不可见、位置不对、关节不动。模型不可见通常是路径问题。URDF 里如果引用了外部 STL 文件路径要写相对路径或者绝对路径而且不同仿真器对路径的解析方式不一样。稳妥的做法是把几何直接内嵌在 URDF 里用box、cylinder这类基本几何标签避免路径问题。关节不动通常是 joint 的 axis 设置有问题。URDF 里 axis 是单位向量比如xyz0 0 1表示绕 Z 轴旋转。如果写成了xyz0 0 0关节就没有旋转轴仿真器会忽略这个关节。还有一个隐蔽的坑是惯性矩阵。如果惯性矩阵设成了全零仿真器计算动力学时会出问题模型可能会飞走或者抖动。至少要给对角线元素一个合理的非零值。5.3 单位与坐标系问题单位问题是 text-to-cad 里最容易出错的地方。CAD 用毫米URDF 用米STL 没有单位约定但通常按毫米处理。如果中间不做转换模型尺寸会差三个数量级。我的做法是在ModelingIntent里统一用毫米生成 URDF 时再除以 1000。同时在代码里加断言检查转换后的尺寸是否在合理范围内def to_meters(mm_value): m mm_value / 1000.0 assert 0.001 m 10, fSize {m}m seems unreasonable return m坐标系的问题也很常见。cadquery 默认在 XY 平面建模Z 轴向上。URDF 的坐标系约定是 X 向前、Y 向左、Z 向上。如果直接把 cadquery 的模型导出成 URDF方向可能不对。需要在生成 URDF 时做坐标变换或者在建模型时就按 URDF 的坐标系来。5.4 批量生成时的性能问题如果需要批量生成几十上百个模型性能会成为瓶颈。cadquery 每次调用都会初始化内核开销不小。优化方法是复用 Workplane 对象或者用多进程并行。from multiprocessing import Pool def generate_one(args): text, name args return text_to_cad(text, name) with Pool(4) as p: results p.map(generate_one, task_list)多进程比多线程有效因为 cadquery 的计算主要在 C 层Python 的 GIL 会限制多线程的并行度。实测下来4 进程比单进程快 3 倍左右。另外导出 STEP 时如果模型很复杂文件会很大。可以在导出前做简化比如降低圆角的段数。cadquery 的fillet方法可以指定segments参数默认值比较大适当减小可以显著降低文件体积。6. 扩展方向与个人经验text-to-cad 这个方向还有很多可以挖的地方。一个自然的扩展是支持更多几何类型比如齿轮、螺纹、法兰这些标准件。这些零件的参数化程度很高用规则匹配就能覆盖大部分需求。另一个扩展是支持装配体让用户描述多个零件之间的位置关系和配合关系生成完整的装配模型。从工程落地的角度我觉得最有价值的扩展是“模板库 参数填充”的模式。与其让用户用自然语言描述一切不如提供一批常用模板用户只需要填参数。比如“创建一个 M8 螺栓长度 30”背后调用的是预定义的螺栓模板参数化生成几何。这种方式比纯自然语言生成更可靠也更符合工程实际。我在实际使用中最大的体会是不要追求一步到位。text-to-cad 的价值不在于完全替代 CAD 软件而在于把重复性的、模板化的建模工作自动化。对于简单的几何体它能省下大量时间对于复杂的曲面造型它目前还力不从心。把边界划清楚在能用的场景里用好比追求全能更实际。还有一个实用技巧生成的 STEP 文件最好用 FreeCAD 做一次二次验证。FreeCAD 的 Python 控制台可以直接读取 STEP 文件并检查几何有效性比在 cadquery 里检查更接近实际 CAD 软件的行为。如果 FreeCAD 能正常打开并显示那这个文件基本就没问题了。最后分享一个排查 URDF 问题的笨办法把 URDF 文件用文本编辑器打开逐行检查 link 和 joint 的定义确认每个 link 都有 visual 和 collision每个 joint 都有 parent 和 child且 parent/child 的名字和 link 的名字完全一致。大部分导入失败的问题根源都在这些基础定义上。
RELATED

相关推荐

微信小程序就业平台源码交付:从环境搭建到投递状态可视化的完整实战

微信小程序就业平台源码交付:从环境搭建到投递状态可视化的完整实战

简介:这份资源是面向计算机相关专业学生与Java学习者的微信小程序毕业设计完整项目包,以大学生就业平台为主题,可直接用于毕设、课程设计或期末大作业。项目采用微信小程序开发工具搭配Java后端与MySQL数据库,实现了学生、企业、管…

📅 2026/10/27 14:55:55
DSSA与ABSD:领域特定软件架构设计与复用实践

DSSA与ABSD:领域特定软件架构设计与复用实践

1. 领域特定软件架构(DSSA)核心概念解析在软件工程领域,DSSA(Domain Specific Software Architecture)代表着一种针对特定问题域的架构设计方法论。我第一次接触这个概念是在参与金融交易系统重构项目时,当…

📅 2026/10/27 14:50:53
Axure高级交互设计:多条件判断与循环逻辑实战

Axure高级交互设计:多条件判断与循环逻辑实战

1. Axure中的多条件判断与循环逻辑解析 在原型设计领域,Axure RP作为行业标杆工具,其交互逻辑构建能力直接影响原型的表现力和真实度。最近在为一个电商后台系统制作原型时,我深刻体会到多条件判断和循环结构的重要性——当需要模拟商品库存状…

📅 2026/10/27 14:50:53
MORE NEWS

更多资讯

📰

K均值与层次聚类:Matlab实操选择指南与冲突验证

1. 为什么层次聚类和K均值必须放在一起讲?——从一个真实误判案例说起去年在帮某高校实验室处理一批植物叶片光谱数据时,我遇到个典型问题:用K均值跑出5个簇,结果生物学导师一眼就指出“第三类明显混进了两种完全不同的叶型”。后…

📰

Vue3中使用pretext实现Canvas高性能文本渲染

1. 项目背景与核心价值 在Web前端开发领域,高性能文本渲染一直是个棘手问题。传统DOM方案在处理大量动态文本时性能堪忧,而Canvas虽然能解决性能问题,却面临着文本排版、测量、换行等复杂逻辑的挑战。这正是chenglou/pretext库试图解决的问题…

📰

OpenClaw自动化测试实践指南与常见问题解析

1. OpenClaw自动化测试的常见困境 OpenClaw作为一款新兴的测试自动化工具,在实际应用中常常会遇到各种问题。很多团队在引入OpenClaw后,发现测试效果并不理想,甚至比手动测试还要低效。这种情况通常源于几个关键误区: 首先是对Op…

📰

n8n 深度解析:AI 原生自动化平台的核心架构与实践

自动化工具我折腾了不少,从 Zapier、Make 这类 SaaS 工具,到后来自己写脚本套 Cron,再到各种低代码平台,最后在 n8n 上真正稳定了下来。说稳定,不是因为它完美,而是它踩中了我对自动化引擎最在意的几个点&a…

📰

TraceScope:UI设计与开发协同的三层差异建模引擎

1. 这不是“找茬工具”,而是设计协同的“翻译器” 你有没有遇到过这样的场景:产品同学拿着蓝湖链接说“这个按钮间距不对”,开发同学打开Figma稿子反复比对后回一句“我这边看着没问题”,设计师再切到蓝湖截图发现“阴影参数确实没…

📰

校园二手小程序开发:Spring Boot + uniapp 从登录到部署全流程

简介:基于Spring Boot与uniapp的校园二手交易微信小程序源码包,属于前后端分离的毕设级完整工程,适合计算机相关专业学生、小程序开发者以及需要快速搭建校园交易场景的技术人员。项目覆盖用户浏览与购买、商家发布与商品管理、后台管理员审核…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬