# 部件开发脚手架 **Repository Path**: zhangpu_666/low-code-part ## Basic Information - **Project Name**: 部件开发脚手架 - **Description**: 麦冬数字科技低代码开发平台部件开发脚手架 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-08-30 - **Last Updated**: 2025-09-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 部件脚手架 ## 1、运行 开发运行命令 ``` npm run dev ``` ## 2、打包 开发打包命令 ``` npm run build ``` ## 3、开发目录 用户的所有操作都需要在/src/part下操作 基本目录结构 ``` ├── attr.vue ├── dataInfo.json ├── index.vue ├── preview.png ├── publicFun.json └── static\ ``` 其中: 1、index.vue 是我们部件的主题,打包后项目运行起来也是以它为主的 2、attr.vue 是我们自定义属性面板 3、dataInfo.json 是我们的部件信息 4、publicFun.json 是我们定义的公共函数 5、preview.png 是我们预览的图片,也就是拖拽时供用户识别的功能 下面我们会对每个模块进行讲解。 ## 4、index.vue 我们开发的部件的所有内容都在这里。 ### 入参 值得注意的是我们需要父级传过来5个参数供我们控制部件的动态变化。数据如下: ```javascript const props = defineProps({ options: { // 配置项 type: Object, default: () => ({}) }, apiData: {// 接口数据 自己接口的数据 type: Object, default: () => ({}) }, busStore: {// 公用数据 一对多组件通信数据 type: Object, default: () => ({}) }, privateStore: {// 私有数据 一对一组件通信数据 type: Object, default: () => ({}) }, ownStore: {// 系统分配给当前组件的数据 每个系统提供的接口最好都传一下这个参数 type: Object, default: () => ({}) } }) ``` #### options options是我们拿到的attr.vue内配置的属性,当attr.vue的属性被赋值以后,数据就会在这里出现。 #### apiData apiData 是获取当前组件接口返回来的数据。 注意:接口不被调用则不会触发该事件。默认进入是不被调用的。 返回的数据格式: ``` { id: "当前组件的唯一标识", url: opts.url, result: result, }; ``` | 字段名 | 说明 | | ------ | ------------------------------------------------------------ | | id | 无意义,一般用不着,代表该组件的唯一标识 | | url | 接口唯一标识,也就是接口地址。这个必须强调一下,该参数是唯一的,不可以出现两个接口是同一个地址的情况,否则会合并成一个,并且以最后一个为准 | | result | 接口返回来的结果 | #### busStore busStore是全局通信过来的参数,部件自己设置的busStore参数会被提升到全局被每个部件拿到。不同部件设置了相同的通信参数的话,会被合并,并且以最后触发的数据为准。对于部分实时监听变化的,可能会出现闪屏,所以最好由上层框架定义该参数。触发该参数是由全局函数$broadcast来触发。 数据结构:无固定数据结构,任何部件都可以通过触发$broadcast的方式添加key值,修改值。 #### privateStore privateStore 是该部件的私有参数,不会与其他部件进行共享,当某个部件指定触发该部件时,参数就会被传入。该位置配置的key值会被一一映射,没有的会以原来的值进行修改,该位置配置的value值无意义,可以作为说明。 #### ownStore ownStore 是该部件的所有信息,在我们使用方法的时候需要把该参数传过去,用于识别数据是从哪里来的。不可修改。 ### 事件 index.vue内置了13个公共函数。但是都是挂载到了全局,所以在使用的时候需要通过getMDInstance()调取。 这些接口有些是外部插件,比如: #### [$lodash](https://www.lodashjs.com/) lodash一个高性能的 JavaScript 实用工具库. 版本:4.17.21 使用方式 ```html ``` #### [$echarts](https://echarts.apache.org/examples/zh/index.html) echarts一个功能强大的图表库,支持多种类型的图表(如折线图、柱状图、饼图、散点图等). 版本:6.0.0 使用方式 ```html ``` #### [$d3](https://d3.nodejs.cn/) d3一个非常强大的数据可视化库,可以进行高度定制的可视化。 版本:7.9.0 使用方式 ```html ``` #### [$dayjs](https://dayjs.fenxianglu.cn/category/) 日期处理插件。 版本:1.11.13 使用方式 ```html ``` #### [$Hls](https://github.com/video-dev/hls.js) 专门用于播放 HLS(HTTP Live Streaming)流,但可以通过其实现支持低延迟的实时视频流播放。 版本:1.6.10 使用方式 ```html ``` #### [$videojs](https://videojs.com/) 支持 HLS、DASH、RTMP、RTSP、MPEG-DASH 等多种流协议。 版本:8.23.4 使用方式 ```html ``` #### [$ol](https://openlayers.org/) openlayers是一个开源的 JavaScript 地图库,适用于展示各种地图类型,支持与多种地图数据源(如 OpenStreetMap、Google Maps 等)集成。 版本:10.6.1 使用方式 ```html ``` #### [$ThreeJs](http://www.webgl3d.cn/pages/aac9ab/) **Three.js** 是一个基于 **WebGL** 封装的 JavaScript 3D 渲染库。它能让前端开发者更轻松地在浏览器中创建和展示 **3D 图形、动画、交互效果**。 版本:0.179.1 ```vue ``` #### [$anime](https://animejs.com/documentation/) anime.js 是一个轻量级且功能强大的 JavaScript 动画库,可用于创建流畅的 CSS 动画、DOM 元素动画、SVG 动画等。 版本:4.1.3 ```vue ``` 有些是内部函数,比如: #### $runApi 传统的 `XMLHttpRequest`,但是引入了axios插件,不过不用关心其是否引用,在组件中有独特的调用方式。 每次触发它的时候apiData都会监听到变动。apiData的使用可以查看入参apiData。 ``` $runApi({ url:'接口地址', data:'请求参数', ownStore: props.ownStore,// 必填 }); ``` 使用方式 ```html ``` #### $runFetch 一种现代版的送网络请求发送方式。 每次触发它的时候apiData也都会监听到变动。apiData的使用同样可以查看入参apiData。 ``` $runFetch({ url:'接口地址', data:{},// 是fetch的全部参数 ownStore: props.ownStore,// 必填 }); ``` 使用方式 ```html ``` 注意:data是全参数,如果字段覆盖了请求头,那就会修改请求头。 如果你只想传递data,那么你应该把数据放到body里。 那么此时接口调用就成了下面的样子: ``` $runFetch({ url: props.options.url, data: { body:body }, ownStore: props.ownStore }); ``` 关于fetch可以去[cdn](https://developer.mozilla.org/zh-CN/docs/Web/API/Fetch_API/Using_Fetch)查看。 #### $runPublicFun 该事件是触发局部通信的,其所执行的函数必须是publicFun.json定义的。 每次触发它的时候,目标组件的privateStore会发生变动。 ``` $runPublicFun({ key: '事件key值', ownStore: props.ownStore }) ``` 使用方式 ```html ``` 在配置界面有个全局通讯属性,在那里可以看到该部件定义的参数,而事件的触发直接指向目标组件。 #### $broadcast 全局广播。 每次触发它的时候,busStore都会发生变动。 使用方式 ```html ``` 广播会通知所有组件的busStore发生变化,切记不可以造成死循环。即监听到广播后又发出广播,这种做法是不对的。如果即监听又触发的话,可以选择不同的字段。 ## 5、attr.vue 这个文件是我们开发的部件属性。需要注意的是宽度需要自适应,否则属性会出现错位。 该组件内最好不要使用接口,因为在真实环境中该部件会被拿掉,其所生产的数据会永久保留在目标部件中。 基本代码 ```javascript ``` ### 入参 #### options options是默认属性,但是需要实时监听,因为在真实应用场景下,options是会在不同组件中进行切换的。 ### 出参 #### options 通过使用defineExpose将属性值抛出,这样才能让组件真实接收到该属性的实时变化。 名称不能变。使用默认代码就可以。 defineExpose({ options: options }) ## 6、dataInfo.json 布局配置 ``` { "name": "chaiquan555",// 组件名 (唯一) "version": "0.0.0",// 版本 "chineseName": "柴犬555",// 中文名称 "category": 0,// 组件适用类型 0代表通用。1代表仅适用于大屏。2代表适用于普通网页。后续会增加更多专业版本,请及时查看文档。 "describe": "描述",// 描述 "author": "zhangbaoqi",// 作者 "width": "200",// 拖入格的宽度(不建议修改) "height": "200",// 拖入格的高度(不建议修改 "options": {// 自定义属性数据 "url": "1", "width": "100%", "height": "100%" }, "apiData": [],// 数据内容 "busStore": {},// 公用数据,不建议配置内容。若配置后会自动提升到全局。 "privateStore": {// 默认私有数据 "data": {}, "methods": {}, "computed": {} }, "apiList": [// 默认接口 { "url": "1", "method": "GET", "type": "2", "apiType": "1", "staticData": "{\"data\": {\"name\": \"zhangbaoqi\"}}" } ], "ownStore": {} } ``` 值得注意的是,默认接口的静态数据必须转译。 ## 7、publicFun.json 公开接口 下面是示例: ``` { "runFetch": { "url": "http://localhost:3000/api/getData", "method": "GET", "data": "" }, "runPost": { "url": "http://localhost:3000/api/postData", "method": "POST", "data": "" } } ``` 上面定义了两个公共接口,一个是runFetch,一个是runPost,他们所发送的字段都是url、method、data。url、method、data的值无意义。 ## 8、preview.png 预设标识图片。 ## 9、UI组件库 组件库的使用需要**按需引入**,全局引入不会被打包进去。这里推荐使用原生html,因为原生的能够缩小组件大小,组件大小是受平台限制的。 以下是支持的组件库。 #### [element-plus](https://element-plus.org/zh-CN/component/overview.html) 一个基于 Vue 3 的开源 UI 组件库 版本:2.10.6 #### [vant](https://vant-ui.github.io/vant/#/zh-CN/home) 针对移动端开发,有一些非常优秀的 UI 库 版本:4.9.21 ## 10、static文件夹 无意义。 如果有需要单独引入的资源,可以放在这里,但是如果在index.vue和attr.vue中没有被引用的话。依然不会被打包进去。 静态资源建议放在第三方服务器上,通过发送请求的方式获取资源。 根据上传要求,最后上传的组件不得大于200KB。 ## 11、注意事项 1、组件名命名最好不要使用特殊字符,下划线中划线会自动转成驼峰形式。 2、自己的组件库不可以重复出现两个相同命名的组件。 3、如果node安装有些包下载不下来的话,这里提供了一个直接下载的包。 链接: https://pan.baidu.com/s/1eP2iFVYyPgugsKPjK7aVzA?pwd=eigc 提取码: eigc