- 🏠 简介
- 🔌 api接口
-
🔧 插件开发
- 介绍
- 插件优势
- 新建插件
- 技术栈
- 插件开发规范
- 插件目录结构
- model 层开发
- service 层开发
- api 接口开发
- menu 菜单开发
-
event 事件钩子开发
- 开发指南
- 常用事件
- SiteInit 站点初始化事件
- AddSiteAfter 站点创建后事件
- MemberRegister 会员注册后事件
- MemberLogin 会员登录后事件
- PayCreate 支付创建事件
- PaySuccess 支付成功事件
- RefundSuccess 退款成功事件
- TransferSuccess 转账成功事件
- BottomNavigation 底部导航事件
- NoticeData 消息模板数据内容事件
- GetQrcodeOfChannel 创建二维码事件
- ExportDataType 导出数据类型事件
- ExportData 导出数据源事件
- GetPosterType 海报类型事件
- GetPosterData 海报数据事件
- ShowCustomer 应用管理加载事件
- GetWechatTransferTradeScene 微信支付转账场景事件
- ThemeColor 主题风格事件
- initWap 手机端初始化加载事件
- dict 数据字典开发
- layout 自定义布局开发
- job 消息队列和计划任务开发
- notice 消息发送开发
- printer 小票打印模板开发
- export 数据导出开发
- diy 自定义组件/页面装修开发
- diy 自定义表单组件开发
- poster 自定义海报开发
- icon 引入图标
- 支付方式开发
- upgrade 插件版本升级
- 打包插件
- 授权信息变更回调通知
- 官网上架
- 📝 二次开发须知
- 👨💻 二次开发指导
-
🎬 二次开发应用插件视频教程
- 二次开发安装视频教程
- 准备工作与创建插件
- 插件目录整体说明
- 插件admin目录
- 插件app目录说明(adminapi、api、验证器)
- 插件app目录(dict、job)
- 插件app目录说明(lang、listener)
- 插件app目录说明(model、service)
- 插件uniapp目录说明
- 插件开发之后台功能开发(代码生成器)
- 插件开发之uniapp功能开发(api)第一节
- 插件开发之uniapp功能开发(api)第二节
- 插件开发之uniapp功能开发(api)第三节
- 插件安装与打包原理
- 消息队列开发
- 计划任务开发
- DIY组件和自定义页面装修开发
- 支付接口开发
- 插件升级包打包流程以及云编译功能
海报组件开发
开发自定义海报组件
定义海报组件文件位置:niucloud/addon/shop/app/dict/poster/components.php
文件名称必须对应,框架会寻找所有插件下的这个文件,进行加载

components.php 自定义海报组件
系统框架已经定义好了一些基础的海报组件(不包含业务),若无业务需求,开发者可以正常使用,无需重复开发
系统框架定义的海报组件,还包括加载插件的海报组件的文件位置:niucloud\app\dict\poster\ComponentDict.php

components.php 海报组件关键代码
<?php
return [
'shop_goods' => [ // 海报类型
'title' => get_lang('dict_diy_poster.shop_goods_component_type_basic'), // 海报组件分组名称
'support' => [ 'fenxiao_goods', 'shop_point_goods' ], // 组件所支持的海报类型,为空表示都支持
'list' => [
'GoodsImage' => [
'title' => "商品名称", // 组件名称
'type' => 'text', // 组件类型,文本:text,image:图片,qrcode:二维码,draw:绘画
'icon' => "iconfont iconbiaoti", // 组件图标
'path' => "goods-name", // 属性编辑,在前端定义海报的预览组件和海报编辑组件时,组件预览前缀加edit-,编辑组件属性前缀加preview-
'uses' => 1, // 最大添加数量,0为不限制
'sort' => 10006, // 排序号,从小到大
'relate' => 'goods_name', // 关联字段,空为不处理
'value' => '', // 默认值
'template' => [
"fontFamily" => 'static/font/OPLUSSANS3-REGULAR.ttf',
"width" => 400, // 宽度
'height' => 400, // 高度
'minWidth' => 60, // 最小宽度
'minHeight' => 60 // 最小高度
]
]
]
]
];
定义海报组件的语言包

指定字体
在components.php中的template 中可以指定字体文件,字体文件存放位置:niucloud/public/static/font
关键代码:
'template' => [
"fontFamily" => 'static/font/OPLUSSANS3-REGULAR.ttf'
]
前端定义海报的预览组件、编辑组件
代码位置:admin/src/addon/shop/views/poster/components
根据components.php中定义的path路径,需要在前端定义海报的预览组件和海报编辑组件。
预览组件前缀为:preview-,编辑组件前缀为:edit-
例如:path 为 goods-name,预览组件名称就是:preview-goods-name,编辑组件名称就是:edit-goods-name

preview 预览组件
无需编写复杂界面,只需要提供简单的预览效果即可,可以写成固定
调用右侧编辑属性的样式,实时预览,prop.value 为当前组件的对象。关键代码:
<template>
<div :style="componentStyle">商品名称</div>
</template>
const componentStyle = computed(() => {
let style = ''
style += `font-size: ${prop.value.fontSize}px;color: ${prop.value.fontColor};line-height: ${prop.value.lineHeight + prop.value.fontSize}px;`
if (prop.value.x == 'left' || prop.value.x == 'center' || prop.value.x == 'right') {
style += `text-align: ${prop.value.x};`
}
if (prop.value.weight) {
style += 'font-weight: bold;'
}
if (!prop.value.fontFamily || prop.value.fontFamily == 'static/font/PingFang-Medium.ttf') {
style += 'font-family: poster_default_font;'
}
const box: any = document.getElementById(prop.value.id)
if (box) {
style += `width:${box.offsetWidth}px;height:${box.offsetHeight}px;`
} else {
style += `width:${prop.value.width}px;height:${prop.value.height}px;`
}
return style
})
edit 编辑组件
增加这段代码,即可调用框架封装好的公共属性编辑
<!-- 组件公共属性 -->
<slot name="common"></slot>
框架封装的通用编辑属性,关键代码截图
效果图
