mirror of
https://github.com/fastapiadmin/FastapiAdmin.git
synced 2026-09-26 22:31:21 +00:00
refactor: 重构项目模块结构与代码细节优化
1. 调整后端模块路由与插件文件结构,迁移部分模块代码至api/v1目录 2. 优化代码注释格式与文档字符串,简化冗余代码 3. 添加监控仪表盘、工单评论等新模块功能 4. 修复前端部分组件交互逻辑与类型定义 5. 清理冗余的初始化数据与废弃配置文件 6. 新增租户注册表单字段与国际化支持 7. 优化HTTP请求拦截器与快捷键功能
This commit is contained in:
@@ -1,14 +0,0 @@
|
||||
[
|
||||
{
|
||||
"name": "默认SMTP",
|
||||
"smtp_host": "smtp.example.com",
|
||||
"smtp_port": 465,
|
||||
"smtp_user": "noreply@fastapiadmin.com",
|
||||
"smtp_password": "PLACEHOLDER_AES_ENCRYPTED",
|
||||
"from_name": "FastapiAdmin",
|
||||
"use_tls": true,
|
||||
"is_default": true,
|
||||
"timeout": 30,
|
||||
"description": "平台默认SMTP配置"
|
||||
}
|
||||
]
|
||||
@@ -1,110 +0,0 @@
|
||||
[
|
||||
{
|
||||
"name": "注册验证码",
|
||||
"template_code": "register_code",
|
||||
"subject": "【FastapiAdmin】注册验证码",
|
||||
"body_html": "<div style='max-width:600px;margin:0 auto;padding:20px;font-family:Arial,sans-serif;background:#f5f7fa;border-radius:8px;'><div style='background:#fff;padding:30px;border-radius:8px;box-shadow:0 2px 12px rgba(0,0,0,0.08);'><h2 style='color:#1a1a2e;margin-top:0;'>欢迎注册 FastapiAdmin</h2><p style='color:#666;font-size:15px;line-height:1.8;'>{{ username }} 您好:</p><p style='color:#666;font-size:15px;line-height:1.8;'>您的验证码是:</p><div style='background:linear-gradient(135deg,#667eea,#764ba2);padding:16px 24px;border-radius:6px;text-align:center;margin:20px 0;'><span style='color:#fff;font-size:28px;font-weight:bold;letter-spacing:6px;'>{{ code }}</span></div><p style='color:#999;font-size:13px;line-height:1.6;'>验证码 5 分钟内有效,请勿泄露给他人。</p><hr style='border:none;border-top:1px solid #eee;margin:24px 0;'><p style='color:#bbb;font-size:12px;text-align:center;'>此邮件由系统自动发送,请勿回复。</p></div></div>",
|
||||
"body_text": "欢迎注册 FastapiAdmin\n\n{{ username }} 您好:\n\n您的验证码是:{{ code }}\n\n验证码 5 分钟内有效,请勿泄露给他人。\n\n此邮件由系统自动发送,请勿回复。",
|
||||
"variables": "{\"username\":\"用户名\",\"code\":\"验证码\"}",
|
||||
"description": "用户注册发送邮箱验证码"
|
||||
},
|
||||
{
|
||||
"name": "密码重置",
|
||||
"template_code": "reset_password",
|
||||
"subject": "【FastapiAdmin】密码重置",
|
||||
"body_html": "<div style='max-width:600px;margin:0 auto;padding:20px;font-family:Arial,sans-serif;background:#f5f7fa;border-radius:8px;'><div style='background:#fff;padding:30px;border-radius:8px;box-shadow:0 2px 12px rgba(0,0,0,0.08);'><h2 style='color:#1a1a2e;margin-top:0;'>密码重置</h2><p style='color:#666;font-size:15px;line-height:1.8;'>{{ username }} 您好:</p><p style='color:#666;font-size:15px;line-height:1.8;'>您正在申请重置密码,点击下方链接设置新密码(30 分钟内有效):</p><div style='text-align:center;margin:24px 0;'><a href='{{ reset_link }}' style='display:inline-block;background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;padding:12px 32px;border-radius:6px;text-decoration:none;font-size:16px;font-weight:bold;'>重置密码</a></div><p style='color:#999;font-size:13px;'>如非本人操作,请忽略此邮件。</p><hr style='border:none;border-top:1px solid #eee;margin:24px 0;'><p style='color:#bbb;font-size:12px;text-align:center;'>此邮件由系统自动发送,请勿回复。</p></div></div>",
|
||||
"body_text": "密码重置\n\n{{ username }} 您好:\n\n您正在申请重置密码,请点击以下链接设置新密码(30 分钟内有效):\n{{ reset_link }}\n\n如非本人操作,请忽略此邮件。\n\n此邮件由系统自动发送,请勿回复。",
|
||||
"variables": "{\"username\":\"用户名\",\"reset_link\":\"密码重置链接\"}",
|
||||
"description": "用户申请重置登录密码"
|
||||
},
|
||||
{
|
||||
"name": "邮箱验证",
|
||||
"template_code": "email_verify",
|
||||
"subject": "【FastapiAdmin】请验证您的邮箱",
|
||||
"body_html": "<div style='max-width:600px;margin:0 auto;padding:20px;font-family:Arial,sans-serif;background:#f5f7fa;border-radius:8px;'><div style='background:#fff;padding:30px;border-radius:8px;box-shadow:0 2px 12px rgba(0,0,0,0.08);'><h2 style='color:#1a1a2e;margin-top:0;'>验证您的邮箱</h2><p style='color:#666;font-size:15px;line-height:1.8;'>{{ username }} 您好:</p><p style='color:#666;font-size:15px;line-height:1.8;'>感谢您注册 FastapiAdmin!请点击下方按钮完成邮箱验证(24 小时内有效):</p><div style='text-align:center;margin:24px 0;'><a href='{{ verify_link }}' style='display:inline-block;background:linear-gradient(135deg,#27ae60,#2ecc71);color:#fff;padding:12px 32px;border-radius:6px;text-decoration:none;font-size:16px;font-weight:bold;'>验证邮箱</a></div><p style='color:#999;font-size:13px;'>如果按钮无法点击,请复制以下链接到浏览器:<br>{{ verify_link }}</p></div></div>",
|
||||
"body_text": "邮箱验证\n\n{{ username }} 您好:\n\n请点击以下链接完成邮箱验证(24 小时内有效):\n{{ verify_link }}",
|
||||
"variables": "{\"username\":\"用户名\",\"verify_link\":\"验证链接\"}",
|
||||
"description": "新用户邮箱地址验证"
|
||||
},
|
||||
{
|
||||
"name": "工单回复通知",
|
||||
"template_code": "ticket_reply",
|
||||
"subject": "【FastapiAdmin】工单回复通知 - {{ ticket_title }}",
|
||||
"body_html": "<div style='max-width:600px;margin:0 auto;padding:20px;font-family:Arial,sans-serif;background:#f5f7fa;border-radius:8px;'><div style='background:#fff;padding:30px;border-radius:8px;box-shadow:0 2px 12px rgba(0,0,0,0.08);'><h2 style='color:#1a1a2e;margin-top:0;'>工单回复通知</h2><p style='color:#666;font-size:15px;line-height:1.8;'>您的工单 <strong>{{ ticket_title }}</strong> 收到新回复:</p><div style='background:#f8f9fb;border-left:4px solid #667eea;padding:16px 20px;margin:16px 0;border-radius:4px;'><p style='color:#444;font-size:14px;line-height:1.8;margin:0;'>{{ reply_content }}</p></div><p style='color:#999;font-size:13px;'>回复时间:{{ reply_time }}</p><div style='text-align:center;margin:24px 0;'><a href='{{ ticket_link }}' style='display:inline-block;background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;padding:10px 24px;border-radius:6px;text-decoration:none;font-size:14px;'>查看工单</a></div></div></div>",
|
||||
"body_text": "工单回复通知\n\n您的工单 {{ ticket_title }} 收到新回复:\n{{ reply_content }}\n\n回复时间:{{ reply_time }}\n查看工单:{{ ticket_link }}",
|
||||
"variables": "{\"ticket_title\":\"工单标题\",\"reply_content\":\"回复内容\",\"reply_time\":\"回复时间\",\"ticket_link\":\"工单链接\"}",
|
||||
"description": "工单被回复时通知提交人"
|
||||
},
|
||||
{
|
||||
"name": "套餐到期提醒",
|
||||
"template_code": "expiry_warning",
|
||||
"subject": "【FastapiAdmin】套餐即将到期提醒",
|
||||
"body_html": "<div style='max-width:600px;margin:0 auto;padding:20px;font-family:Arial,sans-serif;background:#f5f7fa;border-radius:8px;'><div style='background:#fff;padding:30px;border-radius:8px;box-shadow:0 2px 12px rgba(0,0,0,0.08);'><h2 style='color:#e74c3c;margin-top:0;'>套餐即将到期</h2><p style='color:#666;font-size:15px;line-height:1.8;'>尊敬的 {{ tenant_name }}:</p><p style='color:#666;font-size:15px;line-height:1.8;'>您的 <strong>{{ package_name }}</strong> 套餐将于 <strong style='color:#e74c3c;'>{{ expire_date }}</strong> 到期,剩余 <strong style='color:#e74c3c;'>{{ remaining_days }}</strong> 天。</p><p style='color:#666;font-size:15px;line-height:1.8;'>到期后部分功能将受限,请及时续费以保证服务正常使用。</p><div style='text-align:center;margin:24px 0;'><a href='{{ renew_link }}' style='display:inline-block;background:linear-gradient(135deg,#e74c3c,#c0392b);color:#fff;padding:12px 32px;border-radius:6px;text-decoration:none;font-size:16px;font-weight:bold;'>立即续费</a></div></div></div>",
|
||||
"body_text": "套餐即将到期\n\n尊敬的 {{ tenant_name }}:您的「{{ package_name }}」套餐将于 {{ expire_date }} 到期,剩余 {{ remaining_days }} 天。请及时续费。\n续费链接:{{ renew_link }}",
|
||||
"variables": "{\"tenant_name\":\"租户名称\",\"package_name\":\"套餐名称\",\"expire_date\":\"到期日期\",\"remaining_days\":\"剩余天数\",\"renew_link\":\"续费链接\"}",
|
||||
"description": "套餐到期前7/3/1天发送提醒"
|
||||
},
|
||||
{
|
||||
"name": "团队邀请",
|
||||
"template_code": "team_invite",
|
||||
"subject": "【FastapiAdmin】{{ tenant_name }} 邀请您加入团队",
|
||||
"body_html": "<div style='max-width:600px;margin:0 auto;padding:20px;font-family:Arial,sans-serif;background:#f5f7fa;border-radius:8px;'><div style='background:#fff;padding:30px;border-radius:8px;box-shadow:0 2px 12px rgba(0,0,0,0.08);'><h2 style='color:#1a1a2e;margin-top:0;'>团队邀请</h2><p style='color:#666;font-size:15px;line-height:1.8;'>您好:</p><p style='color:#666;font-size:15px;line-height:1.8;'><strong>{{ inviter_name }}</strong> 邀请您加入 <strong>{{ tenant_name }}</strong> 团队。</p><div style='text-align:center;margin:24px 0;'><a href='{{ invite_link }}' style='display:inline-block;background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;padding:12px 32px;border-radius:6px;text-decoration:none;font-size:16px;font-weight:bold;'>接受邀请</a></div><p style='color:#999;font-size:13px;'>链接 24 小时内有效。</p></div></div>",
|
||||
"body_text": "团队邀请\n\n您好:{{ inviter_name }} 邀请您加入 {{ tenant_name }} 团队。\n点击链接接受邀请:{{ invite_link }}\n链接 24 小时内有效。",
|
||||
"variables": "{\"tenant_name\":\"团队名称\",\"inviter_name\":\"邀请人姓名\",\"invite_link\":\"邀请链接\"}",
|
||||
"description": "邀请新成员加入团队"
|
||||
},
|
||||
{
|
||||
"name": "发票开具通知",
|
||||
"template_code": "invoice_issued",
|
||||
"subject": "【FastapiAdmin】发票已开具 - {{ invoice_no }}",
|
||||
"body_html": "<div style='max-width:600px;margin:0 auto;padding:20px;font-family:Arial,sans-serif;background:#f5f7fa;border-radius:8px;'><div style='background:#fff;padding:30px;border-radius:8px;box-shadow:0 2px 12px rgba(0,0,0,0.08);'><h2 style='color:#1a1a2e;margin-top:0;'>发票已开具</h2><p style='color:#666;font-size:15px;line-height:1.8;'>尊敬的客户:</p><p style='color:#666;font-size:15px;line-height:1.8;'>您的发票已开具完成:</p><table style='width:100%;border-collapse:collapse;margin:16px 0;'><tr><td style='padding:8px 12px;color:#888;'>发票号码</td><td style='padding:8px 12px;color:#333;'>{{ invoice_no }}</td></tr><tr style='background:#f8f9fb;'><td style='padding:8px 12px;color:#888;'>发票抬头</td><td style='padding:8px 12px;color:#333;'>{{ invoice_title }}</td></tr><tr><td style='padding:8px 12px;color:#888;'>开票金额</td><td style='padding:8px 12px;color:#333;font-weight:bold;'>¥{{ invoice_amount }}</td></tr></table><div style='text-align:center;margin:20px 0;'><a href='{{ pdf_link }}' style='display:inline-block;background:linear-gradient(135deg,#27ae60,#2ecc71);color:#fff;padding:12px 24px;border-radius:6px;text-decoration:none;font-size:15px;'>下载 PDF 电子发票</a></div></div></div>",
|
||||
"body_text": "发票已开具\n\n尊敬的客户:您的发票已开具完成。\n发票号码:{{ invoice_no }}\n发票抬头:{{ invoice_title }}\n开票金额:¥{{ invoice_amount }}\n下载 PDF:{{ pdf_link }}",
|
||||
"variables": "{\"invoice_no\":\"发票号\",\"invoice_title\":\"发票抬头\",\"invoice_amount\":\"开票金额\",\"pdf_link\":\"PDF下载链接\"}",
|
||||
"description": "发票开具完成通知客户"
|
||||
},
|
||||
{
|
||||
"name": "订单支付成功",
|
||||
"template_code": "order_paid",
|
||||
"subject": "【FastapiAdmin】订单支付成功 - {{ order_no }}",
|
||||
"body_html": "<div style='max-width:600px;margin:0 auto;padding:20px;font-family:Arial,sans-serif;background:#f5f7fa;border-radius:8px;'><div style='background:#fff;padding:30px;border-radius:8px;box-shadow:0 2px 12px rgba(0,0,0,0.08);'><h2 style='color:#27ae60;margin-top:0;'>✓ 订单支付成功</h2><p style='color:#666;font-size:15px;line-height:1.8;'>尊敬的 {{ username }}:</p><p style='color:#666;font-size:15px;line-height:1.8;'>您的订单已支付成功,详情如下:</p><table style='width:100%;border-collapse:collapse;margin:16px 0;'><tr><td style='padding:8px 12px;color:#888;'>订单号</td><td style='padding:8px 12px;color:#333;'>{{ order_no }}</td></tr><tr style='background:#f8f9fb;'><td style='padding:8px 12px;color:#888;'>订单金额</td><td style='padding:8px 12px;color:#333;font-weight:bold;'>¥{{ order_amount }}</td></tr><tr><td style='padding:8px 12px;color:#888;'>支付方式</td><td style='padding:8px 12px;color:#333;'>{{ pay_method }}</td></tr><tr style='background:#f8f9fb;'><td style='padding:8px 12px;color:#888;'>套餐名称</td><td style='padding:8px 12px;color:#333;'>{{ package_name }}</td></tr></table><p style='color:#999;font-size:13px;'>支付时间:{{ paid_time }}</p><div style='text-align:center;margin:24px 0;'><a href='{{ order_link }}' style='display:inline-block;background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;padding:10px 24px;border-radius:6px;text-decoration:none;font-size:14px;'>查看订单详情</a></div></div></div>",
|
||||
"body_text": "订单支付成功\n\n尊敬的 {{ username }}:\n\n您的订单已支付成功:\n订单号:{{ order_no }}\n订单金额:¥{{ order_amount }}\n支付方式:{{ pay_method }}\n套餐名称:{{ package_name }}\n支付时间:{{ paid_time }}\n\n查看订单:{{ order_link }}",
|
||||
"variables": "{\"username\":\"用户名\",\"order_no\":\"订单号\",\"order_amount\":\"订单金额\",\"pay_method\":\"支付方式\",\"package_name\":\"套餐名称\",\"paid_time\":\"支付时间\",\"order_link\":\"订单链接\"}",
|
||||
"description": "订单支付完成通知"
|
||||
},
|
||||
{
|
||||
"name": "套餐升级成功",
|
||||
"template_code": "package_upgraded",
|
||||
"subject": "【FastapiAdmin】套餐升级成功",
|
||||
"body_html": "<div style='max-width:600px;margin:0 auto;padding:20px;font-family:Arial,sans-serif;background:#f5f7fa;border-radius:8px;'><div style='background:#fff;padding:30px;border-radius:8px;box-shadow:0 2px 12px rgba(0,0,0,0.08);'><h2 style='color:#1a1a2e;margin-top:0;'>套餐升级成功 🎉</h2><p style='color:#666;font-size:15px;line-height:1.8;'>尊敬的 {{ tenant_name }}:</p><p style='color:#666;font-size:15px;line-height:1.8;'>您的套餐已从 <strong>{{ old_package }}</strong> 升级为 <strong style='color:#27ae60;'>{{ new_package }}</strong>。</p><div style='background:#f8f9fb;border-left:4px solid #27ae60;padding:16px 20px;margin:16px 0;border-radius:4px;'><p style='color:#444;font-size:14px;line-height:1.8;margin:0;'>新套餐有效期至:<strong>{{ expire_date }}</strong></p></div><p style='color:#999;font-size:13px;'>升级时间:{{ upgrade_time }}</p><div style='text-align:center;margin:24px 0;'><a href='{{ console_link }}' style='display:inline-block;background:linear-gradient(135deg,#27ae60,#2ecc71);color:#fff;padding:10px 24px;border-radius:6px;text-decoration:none;font-size:14px;'>立即体验</a></div></div></div>",
|
||||
"body_text": "套餐升级成功\n\n尊敬的 {{ tenant_name }}:\n\n您的套餐已从 {{ old_package }} 升级为 {{ new_package }}。\n新套餐有效期至:{{ expire_date }}\n升级时间:{{ upgrade_time }}\n\n立即体验:{{ console_link }}",
|
||||
"variables": "{\"tenant_name\":\"租户名称\",\"old_package\":\"原套餐\",\"new_package\":\"新套餐\",\"expire_date\":\"到期日期\",\"upgrade_time\":\"升级时间\",\"console_link\":\"控制台链接\"}",
|
||||
"description": "租户套餐升级完成通知"
|
||||
},
|
||||
{
|
||||
"name": "退款成功通知",
|
||||
"template_code": "refund_success",
|
||||
"subject": "【FastapiAdmin】退款已到账 - {{ refund_no }}",
|
||||
"body_html": "<div style='max-width:600px;margin:0 auto;padding:20px;font-family:Arial,sans-serif;background:#f5f7fa;border-radius:8px;'><div style='background:#fff;padding:30px;border-radius:8px;box-shadow:0 2px 12px rgba(0,0,0,0.08);'><h2 style='color:#27ae60;margin-top:0;'>退款已到账</h2><p style='color:#666;font-size:15px;line-height:1.8;'>尊敬的 {{ username }}:</p><p style='color:#666;font-size:15px;line-height:1.8;'>您的退款申请已处理完成:</p><table style='width:100%;border-collapse:collapse;margin:16px 0;'><tr><td style='padding:8px 12px;color:#888;'>退款单号</td><td style='padding:8px 12px;color:#333;'>{{ refund_no }}</td></tr><tr style='background:#f8f9fb;'><td style='padding:8px 12px;color:#888;'>原订单号</td><td style='padding:8px 12px;color:#333;'>{{ order_no }}</td></tr><tr><td style='padding:8px 12px;color:#888;'>退款金额</td><td style='padding:8px 12px;color:#e74c3c;font-weight:bold;'>¥{{ refund_amount }}</td></tr><tr style='background:#f8f9fb;'><td style='padding:8px 12px;color:#888;'>退回账户</td><td style='padding:8px 12px;color:#333;'>{{ refund_account }}</td></tr></table><p style='color:#999;font-size:13px;'>到账时间:{{ refund_time }}<br>预计 1-3 个工作日内到账,请注意查收。</p></div></div>",
|
||||
"body_text": "退款已到账\n\n尊敬的 {{ username }}:\n\n您的退款申请已处理完成:\n退款单号:{{ refund_no }}\n原订单号:{{ order_no }}\n退款金额:¥{{ refund_amount }}\n退回账户:{{ refund_account }}\n到账时间:{{ refund_time }}",
|
||||
"variables": "{\"username\":\"用户名\",\"refund_no\":\"退款单号\",\"order_no\":\"原订单号\",\"refund_amount\":\"退款金额\",\"refund_account\":\"退回账户\",\"refund_time\":\"到账时间\"}",
|
||||
"description": "用户退款成功通知"
|
||||
},
|
||||
{
|
||||
"name": "登录提醒",
|
||||
"template_code": "login_notify",
|
||||
"subject": "【FastapiAdmin】账号登录提醒",
|
||||
"body_html": "<div style='max-width:600px;margin:0 auto;padding:20px;font-family:Arial,sans-serif;background:#f5f7fa;border-radius:8px;'><div style='background:#fff;padding:30px;border-radius:8px;box-shadow:0 2px 12px rgba(0,0,0,0.08);'><h2 style='color:#1a1a2e;margin-top:0;'>账号登录提醒</h2><p style='color:#666;font-size:15px;line-height:1.8;'>{{ username }} 您好:</p><p style='color:#666;font-size:15px;line-height:1.8;'>您的账号于 <strong>{{ login_time }}</strong> 在 <strong>{{ login_location }}</strong> 登录。</p><table style='width:100%;border-collapse:collapse;margin:16px 0;'><tr><td style='padding:8px 12px;color:#888;'>登录 IP</td><td style='padding:8px 12px;color:#333;'>{{ login_ip }}</td></tr><tr style='background:#f8f9fb;'><td style='padding:8px 12px;color:#888;'>设备类型</td><td style='padding:8px 12px;color:#333;'>{{ device }}</td></tr><tr><td style='padding:8px 12px;color:#888;'>浏览器</td><td style='padding:8px 12px;color:#333;'>{{ browser }}</td></tr></table><p style='color:#e74c3c;font-size:13px;'>如非本人操作,请立即<a href='{{ change_pwd_link }}' style='color:#e74c3c;'>修改密码</a>并联系客服。</p><hr style='border:none;border-top:1px solid #eee;margin:24px 0;'><p style='color:#bbb;font-size:12px;text-align:center;'>此邮件由系统自动发送,请勿回复。</p></div></div>",
|
||||
"body_text": "账号登录提醒\n\n{{ username }} 您好:\n\n您的账号于 {{ login_time }} 在 {{ login_location }} 登录。\n登录 IP:{{ login_ip }}\n设备类型:{{ device }}\n浏览器:{{ browser }}\n\n如非本人操作,请立即修改密码并联系客服。",
|
||||
"variables": "{\"username\":\"用户名\",\"login_time\":\"登录时间\",\"login_location\":\"登录地点\",\"login_ip\":\"登录IP\",\"device\":\"设备类型\",\"browser\":\"浏览器\",\"change_pwd_link\":\"改密链接\"}",
|
||||
"description": "异地/新设备登录提醒(安全)"
|
||||
},
|
||||
{
|
||||
"name": "密码已修改",
|
||||
"template_code": "password_changed",
|
||||
"subject": "【FastapiAdmin】密码修改成功",
|
||||
"body_html": "<div style='max-width:600px;margin:0 auto;padding:20px;font-family:Arial,sans-serif;background:#f5f7fa;border-radius:8px;'><div style='background:#fff;padding:30px;border-radius:8px;box-shadow:0 2px 12px rgba(0,0,0,0.08);'><h2 style='color:#27ae60;margin-top:0;'>密码修改成功</h2><p style='color:#666;font-size:15px;line-height:1.8;'>{{ username }} 您好:</p><p style='color:#666;font-size:15px;line-height:1.8;'>您的账号密码已于 <strong>{{ change_time }}</strong> 修改成功。</p><div style='background:#f8f9fb;border-left:4px solid #27ae60;padding:16px 20px;margin:16px 0;border-radius:4px;'><p style='color:#444;font-size:14px;line-height:1.8;margin:0;'>操作 IP:{{ change_ip }}<br>操作地点:{{ change_location }}</p></div><p style='color:#e74c3c;font-size:13px;'>如非本人操作,请立即联系客服冻结账号!</p><hr style='border:none;border-top:1px solid #eee;margin:24px 0;'><p style='color:#bbb;font-size:12px;text-align:center;'>此邮件由系统自动发送,请勿回复。</p></div></div>",
|
||||
"body_text": "密码修改成功\n\n{{ username }} 您好:\n\n您的账号密码已于 {{ change_time }} 修改成功。\n操作 IP:{{ change_ip }}\n操作地点:{{ change_location }}\n\n如非本人操作,请立即联系客服冻结账号!",
|
||||
"variables": "{\"username\":\"用户名\",\"change_time\":\"修改时间\",\"change_ip\":\"操作IP\",\"change_location\":\"操作地点\"}",
|
||||
"description": "用户修改密码成功通知"
|
||||
}
|
||||
]
|
||||
@@ -591,111 +591,11 @@
|
||||
"show_text_badge": null,
|
||||
"scope": "platform"
|
||||
},
|
||||
{
|
||||
"name": "邮件管理",
|
||||
"type": 2,
|
||||
"icon": "ri:mail-send-line",
|
||||
"order": 5,
|
||||
"permission": "module_platform:email:*",
|
||||
"route_name": "Email",
|
||||
"route_path": "email",
|
||||
"component_path": "module_platform/email/index",
|
||||
"status": 0,
|
||||
"keep_alive": true,
|
||||
"hidden": false,
|
||||
"always_show": false,
|
||||
"title": "邮件管理",
|
||||
"params": null,
|
||||
"affix": false,
|
||||
"description": "系统邮件服务管理",
|
||||
"children": [
|
||||
{
|
||||
"name": "发件配置",
|
||||
"route_name": "EmailConfig",
|
||||
"permission": "module_platform:email:update",
|
||||
"type": 3,
|
||||
"order": 1,
|
||||
"status": 0,
|
||||
"route_path": null,
|
||||
"component_path": null,
|
||||
"link": null,
|
||||
"is_iframe": false,
|
||||
"is_hide_tab": false,
|
||||
"active_path": null,
|
||||
"show_badge": false,
|
||||
"show_text_badge": null,
|
||||
"client": "pc",
|
||||
"scope": "platform"
|
||||
},
|
||||
{
|
||||
"name": "邮件模板",
|
||||
"route_name": "EmailTemplate",
|
||||
"permission": "module_platform:email:query",
|
||||
"type": 3,
|
||||
"order": 2,
|
||||
"status": 0,
|
||||
"route_path": null,
|
||||
"component_path": null,
|
||||
"link": null,
|
||||
"is_iframe": false,
|
||||
"is_hide_tab": false,
|
||||
"active_path": null,
|
||||
"show_badge": false,
|
||||
"show_text_badge": null,
|
||||
"client": "pc",
|
||||
"scope": "platform"
|
||||
},
|
||||
{
|
||||
"name": "发送邮件",
|
||||
"route_name": "EmailSend",
|
||||
"permission": "module_platform:email:update",
|
||||
"type": 3,
|
||||
"order": 3,
|
||||
"status": 0,
|
||||
"route_path": null,
|
||||
"component_path": null,
|
||||
"link": null,
|
||||
"is_iframe": false,
|
||||
"is_hide_tab": false,
|
||||
"active_path": null,
|
||||
"show_badge": false,
|
||||
"show_text_badge": null,
|
||||
"client": "pc",
|
||||
"scope": "platform"
|
||||
},
|
||||
{
|
||||
"name": "发送日志",
|
||||
"route_name": "EmailLog",
|
||||
"permission": "module_platform:email:query",
|
||||
"type": 3,
|
||||
"order": 4,
|
||||
"status": 0,
|
||||
"route_path": null,
|
||||
"component_path": null,
|
||||
"link": null,
|
||||
"is_iframe": false,
|
||||
"is_hide_tab": false,
|
||||
"active_path": null,
|
||||
"show_badge": false,
|
||||
"show_text_badge": null,
|
||||
"client": "pc",
|
||||
"scope": "platform"
|
||||
}
|
||||
],
|
||||
"link": null,
|
||||
"is_iframe": false,
|
||||
"is_hide_tab": false,
|
||||
"active_path": null,
|
||||
"show_badge": false,
|
||||
"show_text_badge": null,
|
||||
"client": "pc",
|
||||
"scope": "platform"
|
||||
},
|
||||
{
|
||||
"name": "订单管理",
|
||||
"type": 2,
|
||||
"icon": "ri:file-list-3-line",
|
||||
"order": 7,
|
||||
"order": 4,
|
||||
"permission": "module_platform:order:query",
|
||||
"route_name": "PlatformOrder",
|
||||
"route_path": "order",
|
||||
@@ -850,7 +750,7 @@
|
||||
"type": 3,
|
||||
"icon": null,
|
||||
"order": 6,
|
||||
"permission": "tenant:order:refund",
|
||||
"permission": "module_platform:order:refund",
|
||||
"route_name": null,
|
||||
"route_path": null,
|
||||
"component_path": null,
|
||||
@@ -886,7 +786,7 @@
|
||||
"name": "发票管理",
|
||||
"type": 2,
|
||||
"icon": "ri:file-text-line",
|
||||
"order": 9,
|
||||
"order": 5,
|
||||
"permission": "module_platform:invoice:query",
|
||||
"route_name": "PlatformInvoice",
|
||||
"route_path": "invoice",
|
||||
@@ -933,7 +833,7 @@
|
||||
"type": 3,
|
||||
"icon": null,
|
||||
"order": 2,
|
||||
"permission": "module_platform:invoice:update",
|
||||
"permission": "module_platform:invoice:create",
|
||||
"route_name": null,
|
||||
"route_path": null,
|
||||
"component_path": null,
|
||||
@@ -981,6 +881,33 @@
|
||||
"show_badge": false,
|
||||
"show_text_badge": null,
|
||||
"scope": "platform"
|
||||
},
|
||||
{
|
||||
"name": "下载PDF",
|
||||
"type": 3,
|
||||
"icon": null,
|
||||
"order": 4,
|
||||
"permission": "module_platform:invoice:download",
|
||||
"route_name": null,
|
||||
"route_path": null,
|
||||
"component_path": null,
|
||||
"status": 0,
|
||||
"keep_alive": true,
|
||||
"hidden": false,
|
||||
"always_show": false,
|
||||
"title": "下载PDF",
|
||||
"params": null,
|
||||
"affix": false,
|
||||
"redirect": null,
|
||||
"description": "初始化数据",
|
||||
"client": "pc",
|
||||
"link": null,
|
||||
"is_iframe": false,
|
||||
"is_hide_tab": false,
|
||||
"active_path": null,
|
||||
"show_badge": false,
|
||||
"show_text_badge": null,
|
||||
"scope": "platform"
|
||||
}
|
||||
],
|
||||
"link": null,
|
||||
@@ -996,7 +923,7 @@
|
||||
"name": "租户工作台",
|
||||
"type": 2,
|
||||
"icon": "ri:briefcase-line",
|
||||
"order": 13,
|
||||
"order": 6,
|
||||
"permission": "module_platform:workspace:query",
|
||||
"route_name": "PlatformWorkspace",
|
||||
"route_path": "workspace",
|
||||
@@ -1047,251 +974,6 @@
|
||||
"show_text_badge": null,
|
||||
"client": "pc",
|
||||
"scope": "platform"
|
||||
},
|
||||
{
|
||||
"name": "插件市场",
|
||||
"type": 2,
|
||||
"icon": "ri:store-2-line",
|
||||
"order": 14,
|
||||
"permission": "module_platform:plugin:query",
|
||||
"route_name": "PluginMarket",
|
||||
"route_path": "plugin-market",
|
||||
"component_path": "module_platform/plugin/index",
|
||||
"status": 0,
|
||||
"keep_alive": true,
|
||||
"hidden": false,
|
||||
"always_show": false,
|
||||
"title": "插件市场",
|
||||
"params": null,
|
||||
"affix": false,
|
||||
"redirect": null,
|
||||
"description": "初始化数据",
|
||||
"children": [
|
||||
{
|
||||
"name": "查询",
|
||||
"type": 3,
|
||||
"icon": null,
|
||||
"order": 1,
|
||||
"permission": "module_platform:plugin:query",
|
||||
"route_name": null,
|
||||
"route_path": null,
|
||||
"component_path": null,
|
||||
"status": 0,
|
||||
"keep_alive": true,
|
||||
"hidden": false,
|
||||
"always_show": false,
|
||||
"title": "查询",
|
||||
"params": null,
|
||||
"affix": false,
|
||||
"redirect": null,
|
||||
"description": "初始化数据",
|
||||
"client": "pc",
|
||||
"link": null,
|
||||
"is_iframe": false,
|
||||
"is_hide_tab": false,
|
||||
"active_path": null,
|
||||
"show_badge": false,
|
||||
"show_text_badge": null,
|
||||
"scope": "platform"
|
||||
},
|
||||
{
|
||||
"name": "安装",
|
||||
"type": 3,
|
||||
"icon": null,
|
||||
"order": 2,
|
||||
"permission": "module_platform:plugin:install",
|
||||
"route_name": null,
|
||||
"route_path": null,
|
||||
"component_path": null,
|
||||
"status": 0,
|
||||
"keep_alive": true,
|
||||
"hidden": false,
|
||||
"always_show": false,
|
||||
"title": "安装",
|
||||
"params": null,
|
||||
"affix": false,
|
||||
"redirect": null,
|
||||
"description": "初始化数据",
|
||||
"client": "pc",
|
||||
"link": null,
|
||||
"is_iframe": false,
|
||||
"is_hide_tab": false,
|
||||
"active_path": null,
|
||||
"show_badge": false,
|
||||
"show_text_badge": null,
|
||||
"scope": "platform"
|
||||
},
|
||||
{
|
||||
"name": "卸载",
|
||||
"type": 3,
|
||||
"icon": null,
|
||||
"order": 3,
|
||||
"permission": "module_platform:plugin:uninstall",
|
||||
"route_name": null,
|
||||
"route_path": null,
|
||||
"component_path": null,
|
||||
"status": 0,
|
||||
"keep_alive": true,
|
||||
"hidden": false,
|
||||
"always_show": false,
|
||||
"title": "卸载",
|
||||
"params": null,
|
||||
"affix": false,
|
||||
"redirect": null,
|
||||
"description": "初始化数据",
|
||||
"client": "pc",
|
||||
"link": null,
|
||||
"is_iframe": false,
|
||||
"is_hide_tab": false,
|
||||
"active_path": null,
|
||||
"show_badge": false,
|
||||
"show_text_badge": null,
|
||||
"scope": "platform"
|
||||
},
|
||||
{
|
||||
"name": "新增",
|
||||
"type": 3,
|
||||
"icon": null,
|
||||
"order": 4,
|
||||
"permission": "module_platform:plugin:create",
|
||||
"route_name": null,
|
||||
"route_path": null,
|
||||
"component_path": null,
|
||||
"status": 0,
|
||||
"keep_alive": true,
|
||||
"hidden": false,
|
||||
"always_show": false,
|
||||
"title": "新增",
|
||||
"params": null,
|
||||
"affix": false,
|
||||
"redirect": null,
|
||||
"description": "初始化数据",
|
||||
"client": "pc",
|
||||
"link": null,
|
||||
"is_iframe": false,
|
||||
"is_hide_tab": false,
|
||||
"active_path": null,
|
||||
"show_badge": false,
|
||||
"show_text_badge": null,
|
||||
"scope": "platform"
|
||||
},
|
||||
{
|
||||
"name": "编辑",
|
||||
"type": 3,
|
||||
"icon": null,
|
||||
"order": 5,
|
||||
"permission": "module_platform:plugin:update",
|
||||
"route_name": null,
|
||||
"route_path": null,
|
||||
"component_path": null,
|
||||
"status": 0,
|
||||
"keep_alive": true,
|
||||
"hidden": false,
|
||||
"always_show": false,
|
||||
"title": "编辑",
|
||||
"params": null,
|
||||
"affix": false,
|
||||
"redirect": null,
|
||||
"description": "初始化数据",
|
||||
"client": "pc",
|
||||
"link": null,
|
||||
"is_iframe": false,
|
||||
"is_hide_tab": false,
|
||||
"active_path": null,
|
||||
"show_badge": false,
|
||||
"show_text_badge": null,
|
||||
"scope": "platform"
|
||||
},
|
||||
{
|
||||
"name": "删除",
|
||||
"type": 3,
|
||||
"icon": null,
|
||||
"order": 6,
|
||||
"permission": "module_platform:plugin:delete",
|
||||
"route_name": null,
|
||||
"route_path": null,
|
||||
"component_path": null,
|
||||
"status": 0,
|
||||
"keep_alive": true,
|
||||
"hidden": false,
|
||||
"always_show": false,
|
||||
"title": "删除",
|
||||
"params": null,
|
||||
"affix": false,
|
||||
"redirect": null,
|
||||
"description": "初始化数据",
|
||||
"client": "pc",
|
||||
"link": null,
|
||||
"is_iframe": false,
|
||||
"is_hide_tab": false,
|
||||
"active_path": null,
|
||||
"show_badge": false,
|
||||
"show_text_badge": null,
|
||||
"scope": "platform"
|
||||
},
|
||||
{
|
||||
"name": "启用/禁用",
|
||||
"type": 3,
|
||||
"icon": null,
|
||||
"order": 7,
|
||||
"permission": "module_platform:plugin:toggle",
|
||||
"route_name": null,
|
||||
"route_path": null,
|
||||
"component_path": null,
|
||||
"status": 0,
|
||||
"keep_alive": true,
|
||||
"hidden": false,
|
||||
"always_show": false,
|
||||
"title": "启用/禁用",
|
||||
"params": null,
|
||||
"affix": false,
|
||||
"redirect": null,
|
||||
"description": "初始化数据",
|
||||
"client": "pc",
|
||||
"link": null,
|
||||
"is_iframe": false,
|
||||
"is_hide_tab": false,
|
||||
"active_path": null,
|
||||
"show_badge": false,
|
||||
"show_text_badge": null,
|
||||
"scope": "platform"
|
||||
},
|
||||
{
|
||||
"name": "重新加载",
|
||||
"type": 3,
|
||||
"icon": null,
|
||||
"order": 8,
|
||||
"permission": "module_platform:plugin:reload",
|
||||
"route_name": null,
|
||||
"route_path": null,
|
||||
"component_path": null,
|
||||
"status": 0,
|
||||
"keep_alive": true,
|
||||
"hidden": false,
|
||||
"always_show": false,
|
||||
"title": "重新加载",
|
||||
"params": null,
|
||||
"affix": false,
|
||||
"redirect": null,
|
||||
"description": "初始化数据",
|
||||
"client": "pc",
|
||||
"link": null,
|
||||
"is_iframe": false,
|
||||
"is_hide_tab": false,
|
||||
"active_path": null,
|
||||
"show_badge": false,
|
||||
"show_text_badge": null,
|
||||
"scope": "platform"
|
||||
}
|
||||
],
|
||||
"client": "pc",
|
||||
"link": null,
|
||||
"is_iframe": false,
|
||||
"is_hide_tab": false,
|
||||
"active_path": null,
|
||||
"show_badge": true,
|
||||
"show_text_badge": "NEW",
|
||||
"scope": "platform"
|
||||
}
|
||||
],
|
||||
"client": "pc",
|
||||
@@ -3526,6 +3208,170 @@
|
||||
"show_badge": true,
|
||||
"show_text_badge": "NEW",
|
||||
"scope": "tenant"
|
||||
},
|
||||
{
|
||||
"name": "版本管理",
|
||||
"type": 2,
|
||||
"icon": "ri:git-branch-line",
|
||||
"order": 7,
|
||||
"permission": "module_system:version:query",
|
||||
"route_name": "ModuleVersion",
|
||||
"route_path": "version/list",
|
||||
"component_path": "module_platform/version/index",
|
||||
"status": 0,
|
||||
"keep_alive": true,
|
||||
"hidden": false,
|
||||
"always_show": false,
|
||||
"title": "版本管理",
|
||||
"params": null,
|
||||
"affix": false,
|
||||
"redirect": null,
|
||||
"description": "初始化数据",
|
||||
"children": [
|
||||
{
|
||||
"name": "查询",
|
||||
"type": 3,
|
||||
"icon": null,
|
||||
"order": 1,
|
||||
"permission": "module_system:version:query",
|
||||
"route_name": null,
|
||||
"route_path": null,
|
||||
"component_path": null,
|
||||
"status": 0,
|
||||
"keep_alive": true,
|
||||
"hidden": false,
|
||||
"always_show": false,
|
||||
"title": "查询",
|
||||
"params": null,
|
||||
"affix": false,
|
||||
"redirect": null,
|
||||
"description": "初始化数据",
|
||||
"client": "pc",
|
||||
"link": null,
|
||||
"is_iframe": false,
|
||||
"is_hide_tab": false,
|
||||
"active_path": null,
|
||||
"show_badge": false,
|
||||
"show_text_badge": null,
|
||||
"scope": "platform"
|
||||
},
|
||||
{
|
||||
"name": "新增",
|
||||
"type": 3,
|
||||
"icon": null,
|
||||
"order": 2,
|
||||
"permission": "module_system:version:create",
|
||||
"route_name": null,
|
||||
"route_path": null,
|
||||
"component_path": null,
|
||||
"status": 0,
|
||||
"keep_alive": true,
|
||||
"hidden": false,
|
||||
"always_show": false,
|
||||
"title": "新增",
|
||||
"params": null,
|
||||
"affix": false,
|
||||
"redirect": null,
|
||||
"description": "初始化数据",
|
||||
"client": "pc",
|
||||
"link": null,
|
||||
"is_iframe": false,
|
||||
"is_hide_tab": false,
|
||||
"active_path": null,
|
||||
"show_badge": false,
|
||||
"show_text_badge": null,
|
||||
"scope": "platform"
|
||||
},
|
||||
{
|
||||
"name": "编辑",
|
||||
"type": 3,
|
||||
"icon": null,
|
||||
"order": 3,
|
||||
"permission": "module_system:version:update",
|
||||
"route_name": null,
|
||||
"route_path": null,
|
||||
"component_path": null,
|
||||
"status": 0,
|
||||
"keep_alive": true,
|
||||
"hidden": false,
|
||||
"always_show": false,
|
||||
"title": "编辑",
|
||||
"params": null,
|
||||
"affix": false,
|
||||
"redirect": null,
|
||||
"description": "初始化数据",
|
||||
"client": "pc",
|
||||
"link": null,
|
||||
"is_iframe": false,
|
||||
"is_hide_tab": false,
|
||||
"active_path": null,
|
||||
"show_badge": false,
|
||||
"show_text_badge": null,
|
||||
"scope": "platform"
|
||||
},
|
||||
{
|
||||
"name": "删除",
|
||||
"type": 3,
|
||||
"icon": null,
|
||||
"order": 4,
|
||||
"permission": "module_system:version:delete",
|
||||
"route_name": null,
|
||||
"route_path": null,
|
||||
"component_path": null,
|
||||
"status": 0,
|
||||
"keep_alive": true,
|
||||
"hidden": false,
|
||||
"always_show": false,
|
||||
"title": "删除",
|
||||
"params": null,
|
||||
"affix": false,
|
||||
"redirect": null,
|
||||
"description": "初始化数据",
|
||||
"client": "pc",
|
||||
"link": null,
|
||||
"is_iframe": false,
|
||||
"is_hide_tab": false,
|
||||
"active_path": null,
|
||||
"show_badge": false,
|
||||
"show_text_badge": null,
|
||||
"scope": "platform"
|
||||
},
|
||||
{
|
||||
"name": "详情",
|
||||
"type": 3,
|
||||
"icon": null,
|
||||
"order": 5,
|
||||
"permission": "module_system:version:detail",
|
||||
"route_name": null,
|
||||
"route_path": null,
|
||||
"component_path": null,
|
||||
"status": 0,
|
||||
"keep_alive": true,
|
||||
"hidden": false,
|
||||
"always_show": false,
|
||||
"title": "详情",
|
||||
"params": null,
|
||||
"affix": false,
|
||||
"redirect": null,
|
||||
"description": "初始化数据",
|
||||
"client": "pc",
|
||||
"link": null,
|
||||
"is_iframe": false,
|
||||
"is_hide_tab": false,
|
||||
"active_path": null,
|
||||
"show_badge": false,
|
||||
"show_text_badge": null,
|
||||
"scope": "platform"
|
||||
}
|
||||
],
|
||||
"client": "pc",
|
||||
"link": null,
|
||||
"is_iframe": false,
|
||||
"is_hide_tab": false,
|
||||
"active_path": null,
|
||||
"show_badge": false,
|
||||
"show_text_badge": null,
|
||||
"scope": "platform"
|
||||
}
|
||||
],
|
||||
"client": "pc",
|
||||
@@ -4749,7 +4595,7 @@
|
||||
"description": "调度器监控",
|
||||
"children": [
|
||||
{
|
||||
"name": "查询调度器",
|
||||
"name": "查询",
|
||||
"type": 3,
|
||||
"icon": null,
|
||||
"order": 1,
|
||||
@@ -4761,11 +4607,11 @@
|
||||
"keep_alive": true,
|
||||
"hidden": false,
|
||||
"always_show": false,
|
||||
"title": "查询调度器",
|
||||
"title": "查询",
|
||||
"params": null,
|
||||
"affix": false,
|
||||
"redirect": null,
|
||||
"description": "查询调度器",
|
||||
"description": "查询",
|
||||
"client": "pc",
|
||||
"link": null,
|
||||
"is_iframe": false,
|
||||
@@ -4803,7 +4649,7 @@
|
||||
"scope": "platform"
|
||||
},
|
||||
{
|
||||
"name": "操作任务",
|
||||
"name": "执行",
|
||||
"type": 3,
|
||||
"icon": null,
|
||||
"order": 3,
|
||||
@@ -4815,11 +4661,11 @@
|
||||
"keep_alive": true,
|
||||
"hidden": false,
|
||||
"always_show": false,
|
||||
"title": "操作任务",
|
||||
"title": "执行",
|
||||
"params": null,
|
||||
"affix": false,
|
||||
"redirect": null,
|
||||
"description": "操作任务",
|
||||
"description": "执行",
|
||||
"client": "pc",
|
||||
"link": null,
|
||||
"is_iframe": false,
|
||||
@@ -4830,7 +4676,7 @@
|
||||
"scope": "platform"
|
||||
},
|
||||
{
|
||||
"name": "删除执行日志",
|
||||
"name": "删除",
|
||||
"type": 3,
|
||||
"icon": null,
|
||||
"order": 4,
|
||||
@@ -4842,11 +4688,11 @@
|
||||
"keep_alive": true,
|
||||
"hidden": false,
|
||||
"always_show": false,
|
||||
"title": "删除执行日志",
|
||||
"title": "删除",
|
||||
"params": null,
|
||||
"affix": false,
|
||||
"redirect": null,
|
||||
"description": "删除执行日志",
|
||||
"description": "删除",
|
||||
"client": "pc",
|
||||
"link": null,
|
||||
"is_iframe": false,
|
||||
@@ -4857,7 +4703,7 @@
|
||||
"scope": "platform"
|
||||
},
|
||||
{
|
||||
"name": "详情执行日志",
|
||||
"name": "详情",
|
||||
"type": 3,
|
||||
"icon": null,
|
||||
"order": 5,
|
||||
@@ -4869,11 +4715,11 @@
|
||||
"keep_alive": true,
|
||||
"hidden": false,
|
||||
"always_show": false,
|
||||
"title": "详情执行日志",
|
||||
"title": "详情",
|
||||
"params": null,
|
||||
"affix": false,
|
||||
"redirect": null,
|
||||
"description": "详情执行日志",
|
||||
"description": "详情",
|
||||
"client": "pc",
|
||||
"link": null,
|
||||
"is_iframe": false,
|
||||
@@ -4913,7 +4759,7 @@
|
||||
"description": "节点管理",
|
||||
"children": [
|
||||
{
|
||||
"name": "创建节点",
|
||||
"name": "新增",
|
||||
"type": 3,
|
||||
"icon": null,
|
||||
"order": 1,
|
||||
@@ -4925,11 +4771,11 @@
|
||||
"keep_alive": true,
|
||||
"hidden": false,
|
||||
"always_show": false,
|
||||
"title": "创建节点",
|
||||
"title": "新增",
|
||||
"params": null,
|
||||
"affix": false,
|
||||
"redirect": null,
|
||||
"description": "创建节点",
|
||||
"description": "新增",
|
||||
"client": "pc",
|
||||
"link": null,
|
||||
"is_iframe": false,
|
||||
@@ -4967,7 +4813,7 @@
|
||||
"scope": "platform"
|
||||
},
|
||||
{
|
||||
"name": "修改节点",
|
||||
"name": "编辑",
|
||||
"type": 3,
|
||||
"icon": null,
|
||||
"order": 3,
|
||||
@@ -4979,11 +4825,11 @@
|
||||
"keep_alive": true,
|
||||
"hidden": false,
|
||||
"always_show": false,
|
||||
"title": "修改节点",
|
||||
"title": "编辑",
|
||||
"params": null,
|
||||
"affix": false,
|
||||
"redirect": null,
|
||||
"description": "修改节点",
|
||||
"description": "编辑",
|
||||
"client": "pc",
|
||||
"link": null,
|
||||
"is_iframe": false,
|
||||
@@ -5021,7 +4867,7 @@
|
||||
"scope": "platform"
|
||||
},
|
||||
{
|
||||
"name": "详情节点",
|
||||
"name": "详情",
|
||||
"type": 3,
|
||||
"icon": null,
|
||||
"order": 5,
|
||||
@@ -5033,11 +4879,11 @@
|
||||
"keep_alive": true,
|
||||
"hidden": false,
|
||||
"always_show": false,
|
||||
"title": "详情节点",
|
||||
"title": "详情",
|
||||
"params": null,
|
||||
"affix": false,
|
||||
"redirect": null,
|
||||
"description": "详情节点",
|
||||
"description": "详情",
|
||||
"client": "pc",
|
||||
"link": null,
|
||||
"is_iframe": false,
|
||||
@@ -5048,7 +4894,7 @@
|
||||
"scope": "platform"
|
||||
},
|
||||
{
|
||||
"name": "查询节点",
|
||||
"name": "查询",
|
||||
"type": 3,
|
||||
"icon": null,
|
||||
"order": 6,
|
||||
@@ -5060,11 +4906,11 @@
|
||||
"keep_alive": true,
|
||||
"hidden": false,
|
||||
"always_show": false,
|
||||
"title": "查询节点",
|
||||
"title": "查询",
|
||||
"params": null,
|
||||
"affix": false,
|
||||
"redirect": null,
|
||||
"description": "查询节点",
|
||||
"description": "查询",
|
||||
"client": "pc",
|
||||
"link": null,
|
||||
"is_iframe": false,
|
||||
@@ -5133,7 +4979,7 @@
|
||||
"description": "Vue Flow 画布与发布执行",
|
||||
"children": [
|
||||
{
|
||||
"name": "创建流程",
|
||||
"name": "新增",
|
||||
"type": 3,
|
||||
"icon": null,
|
||||
"order": 1,
|
||||
@@ -5145,11 +4991,11 @@
|
||||
"keep_alive": true,
|
||||
"hidden": false,
|
||||
"always_show": false,
|
||||
"title": "创建流程",
|
||||
"title": "新增",
|
||||
"params": null,
|
||||
"affix": false,
|
||||
"redirect": null,
|
||||
"description": "创建流程",
|
||||
"description": "新增",
|
||||
"client": "pc",
|
||||
"link": null,
|
||||
"is_iframe": false,
|
||||
@@ -5187,7 +5033,7 @@
|
||||
"scope": "platform"
|
||||
},
|
||||
{
|
||||
"name": "修改流程",
|
||||
"name": "编辑",
|
||||
"type": 3,
|
||||
"icon": null,
|
||||
"order": 3,
|
||||
@@ -5199,11 +5045,11 @@
|
||||
"keep_alive": true,
|
||||
"hidden": false,
|
||||
"always_show": false,
|
||||
"title": "修改流程",
|
||||
"title": "编辑",
|
||||
"params": null,
|
||||
"affix": false,
|
||||
"redirect": null,
|
||||
"description": "修改流程",
|
||||
"description": "编辑",
|
||||
"client": "pc",
|
||||
"link": null,
|
||||
"is_iframe": false,
|
||||
@@ -5241,7 +5087,7 @@
|
||||
"scope": "platform"
|
||||
},
|
||||
{
|
||||
"name": "详情流程",
|
||||
"name": "详情",
|
||||
"type": 3,
|
||||
"icon": null,
|
||||
"order": 5,
|
||||
@@ -5253,11 +5099,11 @@
|
||||
"keep_alive": true,
|
||||
"hidden": false,
|
||||
"always_show": false,
|
||||
"title": "详情流程",
|
||||
"title": "详情",
|
||||
"params": null,
|
||||
"affix": false,
|
||||
"redirect": null,
|
||||
"description": "详情流程",
|
||||
"description": "详情",
|
||||
"client": "pc",
|
||||
"link": null,
|
||||
"is_iframe": false,
|
||||
@@ -5268,7 +5114,7 @@
|
||||
"scope": "platform"
|
||||
},
|
||||
{
|
||||
"name": "查询流程",
|
||||
"name": "查询",
|
||||
"type": 3,
|
||||
"icon": null,
|
||||
"order": 6,
|
||||
@@ -5280,11 +5126,11 @@
|
||||
"keep_alive": true,
|
||||
"hidden": false,
|
||||
"always_show": false,
|
||||
"title": "查询流程",
|
||||
"title": "查询",
|
||||
"params": null,
|
||||
"affix": false,
|
||||
"redirect": null,
|
||||
"description": "查询流程",
|
||||
"description": "查询",
|
||||
"client": "pc",
|
||||
"link": null,
|
||||
"is_iframe": false,
|
||||
@@ -5324,7 +5170,7 @@
|
||||
"description": "画布节点类型与 Prefect 执行逻辑",
|
||||
"children": [
|
||||
{
|
||||
"name": "创建节点类型",
|
||||
"name": "新增",
|
||||
"type": 3,
|
||||
"icon": null,
|
||||
"order": 1,
|
||||
@@ -5336,11 +5182,11 @@
|
||||
"keep_alive": true,
|
||||
"hidden": false,
|
||||
"always_show": false,
|
||||
"title": "创建节点类型",
|
||||
"title": "新增",
|
||||
"params": null,
|
||||
"affix": false,
|
||||
"redirect": null,
|
||||
"description": "创建节点类型",
|
||||
"description": "新增",
|
||||
"client": "pc",
|
||||
"link": null,
|
||||
"is_iframe": false,
|
||||
@@ -5351,7 +5197,7 @@
|
||||
"scope": "platform"
|
||||
},
|
||||
{
|
||||
"name": "修改节点类型",
|
||||
"name": "编辑",
|
||||
"type": 3,
|
||||
"icon": null,
|
||||
"order": 2,
|
||||
@@ -5363,11 +5209,11 @@
|
||||
"keep_alive": true,
|
||||
"hidden": false,
|
||||
"always_show": false,
|
||||
"title": "修改节点类型",
|
||||
"title": "编辑",
|
||||
"params": null,
|
||||
"affix": false,
|
||||
"redirect": null,
|
||||
"description": "修改节点类型",
|
||||
"description": "编辑",
|
||||
"client": "pc",
|
||||
"link": null,
|
||||
"is_iframe": false,
|
||||
@@ -5405,7 +5251,7 @@
|
||||
"scope": "platform"
|
||||
},
|
||||
{
|
||||
"name": "详情节点类型",
|
||||
"name": "详情",
|
||||
"type": 3,
|
||||
"icon": null,
|
||||
"order": 4,
|
||||
@@ -5417,11 +5263,11 @@
|
||||
"keep_alive": true,
|
||||
"hidden": false,
|
||||
"always_show": false,
|
||||
"title": "详情节点类型",
|
||||
"title": "详情",
|
||||
"params": null,
|
||||
"affix": false,
|
||||
"redirect": null,
|
||||
"description": "详情节点类型",
|
||||
"description": "详情",
|
||||
"client": "pc",
|
||||
"link": null,
|
||||
"is_iframe": false,
|
||||
@@ -5432,7 +5278,7 @@
|
||||
"scope": "platform"
|
||||
},
|
||||
{
|
||||
"name": "查询节点类型",
|
||||
"name": "查询",
|
||||
"type": 3,
|
||||
"icon": null,
|
||||
"order": 5,
|
||||
@@ -5444,11 +5290,11 @@
|
||||
"keep_alive": true,
|
||||
"hidden": false,
|
||||
"always_show": false,
|
||||
"title": "查询节点类型",
|
||||
"title": "查询",
|
||||
"params": null,
|
||||
"affix": false,
|
||||
"redirect": null,
|
||||
"description": "查询节点类型",
|
||||
"description": "查询",
|
||||
"client": "pc",
|
||||
"link": null,
|
||||
"is_iframe": false,
|
||||
|
||||
@@ -1,67 +0,0 @@
|
||||
[
|
||||
{
|
||||
"name": "代码生成器",
|
||||
"code": "code_generator",
|
||||
"description": "自动生成CRUD代码,支持多种模板",
|
||||
"version": "1.0.0",
|
||||
"author": "FastApiAdmin",
|
||||
"icon": "ri:code-box-line",
|
||||
"category": "tool",
|
||||
"price": 0,
|
||||
"menu_path": "/tool/generator",
|
||||
"permission_prefix": "tool:generator",
|
||||
"sort": 1
|
||||
},
|
||||
{
|
||||
"name": "AI助手",
|
||||
"code": "ai_assistant",
|
||||
"description": "集成AI对话助手,支持智能问答",
|
||||
"version": "1.0.0",
|
||||
"author": "FastApiAdmin",
|
||||
"icon": "ri:robot-2-line",
|
||||
"category": "ai",
|
||||
"price": 9900,
|
||||
"menu_path": "/ai/assistant",
|
||||
"permission_prefix": "ai:assistant",
|
||||
"sort": 2
|
||||
},
|
||||
{
|
||||
"name": "系统监控",
|
||||
"code": "system_monitor",
|
||||
"description": "实时监控系统运行状态,CPU、内存、磁盘等",
|
||||
"version": "1.0.0",
|
||||
"author": "FastApiAdmin",
|
||||
"icon": "ri:dashboard-3-line",
|
||||
"category": "monitor",
|
||||
"price": 0,
|
||||
"menu_path": "/monitor/system",
|
||||
"permission_prefix": "monitor:system",
|
||||
"sort": 3
|
||||
},
|
||||
{
|
||||
"name": "工作流引擎",
|
||||
"code": "workflow_engine",
|
||||
"description": "可视化工作流设计器,支持审批流程",
|
||||
"version": "1.0.0",
|
||||
"author": "FastApiAdmin",
|
||||
"icon": "ri:flow-chart",
|
||||
"category": "business",
|
||||
"price": 19900,
|
||||
"menu_path": "/workflow/design",
|
||||
"permission_prefix": "workflow:design",
|
||||
"sort": 4
|
||||
},
|
||||
{
|
||||
"name": "数据大屏",
|
||||
"code": "data_dashboard",
|
||||
"description": "可视化数据大屏,支持多种图表",
|
||||
"version": "1.0.0",
|
||||
"author": "FastApiAdmin",
|
||||
"icon": "ri:bar-chart-box-line",
|
||||
"category": "business",
|
||||
"price": 4900,
|
||||
"menu_path": "/dashboard/data",
|
||||
"permission_prefix": "dashboard:data",
|
||||
"sort": 5
|
||||
}
|
||||
]
|
||||
@@ -22,29 +22,5 @@
|
||||
"privacy": "https://fastapiadmin.com/privacy",
|
||||
"clause": "https://fastapiadmin.com/clause",
|
||||
"git_code": "https://github.com/fastapi-admin/fastapi-admin"
|
||||
},
|
||||
{
|
||||
"name": "测试租户",
|
||||
"code": "test",
|
||||
"contact_name": "测试管理员",
|
||||
"contact_phone": "13800138001",
|
||||
"contact_email": "test@fastapiadmin.com",
|
||||
"address": "上海市浦东新区",
|
||||
"domain": "test.fastapiadmin.com",
|
||||
"logo_url": "https://service.fastapiadmin.com/api/v1/static/image/logo.png",
|
||||
"sort": 1,
|
||||
"package_id": 2,
|
||||
"start_time": "2024-01-01 00:00:00",
|
||||
"end_time": "2027-12-31 23:59:59",
|
||||
"description": "测试租户,用于功能测试",
|
||||
"version": "1.0.0",
|
||||
"favicon": "https://service.fastapiadmin.com/api/v1/static/image/favicon.ico",
|
||||
"login_bg": "https://service.fastapiadmin.com/api/v1/static/image/background.svg",
|
||||
"copyright": "Copyright © 2024 Test Tenant 版权所有",
|
||||
"keep_record": "陕ICP备2024000000号",
|
||||
"help_doc": "https://docs.fastapiadmin.com",
|
||||
"privacy": "https://fastapiadmin.com/privacy",
|
||||
"clause": "https://fastapiadmin.com/clause",
|
||||
"git_code": null
|
||||
}
|
||||
]
|
||||
|
||||
@@ -1,44 +0,0 @@
|
||||
[
|
||||
{
|
||||
"tenant_id": 1,
|
||||
"plugin_id": 1,
|
||||
"enabled": true,
|
||||
"installed_time": "2024-01-01 00:00:00"
|
||||
},
|
||||
{
|
||||
"tenant_id": 1,
|
||||
"plugin_id": 2,
|
||||
"enabled": true,
|
||||
"installed_time": "2024-01-01 00:00:00"
|
||||
},
|
||||
{
|
||||
"tenant_id": 1,
|
||||
"plugin_id": 3,
|
||||
"enabled": true,
|
||||
"installed_time": "2024-01-01 00:00:00"
|
||||
},
|
||||
{
|
||||
"tenant_id": 1,
|
||||
"plugin_id": 4,
|
||||
"enabled": true,
|
||||
"installed_time": "2024-01-01 00:00:00"
|
||||
},
|
||||
{
|
||||
"tenant_id": 1,
|
||||
"plugin_id": 5,
|
||||
"enabled": true,
|
||||
"installed_time": "2024-01-01 00:00:00"
|
||||
},
|
||||
{
|
||||
"tenant_id": 2,
|
||||
"plugin_id": 1,
|
||||
"enabled": true,
|
||||
"installed_time": "2024-01-01 00:00:00"
|
||||
},
|
||||
{
|
||||
"tenant_id": 2,
|
||||
"plugin_id": 2,
|
||||
"enabled": true,
|
||||
"installed_time": "2024-01-01 00:00:00"
|
||||
}
|
||||
]
|
||||
@@ -16,17 +16,5 @@
|
||||
"tenant_id": 1,
|
||||
"role": "member",
|
||||
"is_default": 1
|
||||
},
|
||||
{
|
||||
"user_id": 4,
|
||||
"tenant_id": 2,
|
||||
"role": "owner",
|
||||
"is_default": 1
|
||||
},
|
||||
{
|
||||
"user_id": 5,
|
||||
"tenant_id": 2,
|
||||
"role": "member",
|
||||
"is_default": 1
|
||||
}
|
||||
]
|
||||
]
|
||||
|
||||
@@ -1,91 +1,15 @@
|
||||
[
|
||||
{
|
||||
"name": "集团总公司",
|
||||
"code": "GROUP",
|
||||
"name": "平台租户",
|
||||
"code": "DEFAULT",
|
||||
"order": 1,
|
||||
"status": 0,
|
||||
"leader": "张总",
|
||||
"phone": "13800138000",
|
||||
"email": "ceo@example.com",
|
||||
"description": "集团总部",
|
||||
"leader": "管理员",
|
||||
"phone": "15382112620",
|
||||
"email": "948080782@qq.com",
|
||||
"description": "平台默认部门",
|
||||
"parent_id": null,
|
||||
"tenant_id": 1,
|
||||
"children": [
|
||||
{
|
||||
"name": "技术研发部",
|
||||
"code": "TECH",
|
||||
"order": 1,
|
||||
"status": 0,
|
||||
"leader": "李工",
|
||||
"phone": "13800138001",
|
||||
"email": "tech@example.com",
|
||||
"description": "负责技术研发",
|
||||
"parent_id": null,
|
||||
"tenant_id": 1,
|
||||
"children": [
|
||||
{
|
||||
"name": "后端开发组",
|
||||
"code": "BACKEND",
|
||||
"order": 1,
|
||||
"status": 0,
|
||||
"leader": "王工",
|
||||
"phone": "13800138002",
|
||||
"email": "backend@example.com",
|
||||
"description": "后端技术开发",
|
||||
"parent_id": null,
|
||||
"tenant_id": 1,
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"name": "前端开发组",
|
||||
"code": "FRONTEND",
|
||||
"order": 2,
|
||||
"status": 0,
|
||||
"leader": "陈工",
|
||||
"phone": "13800138003",
|
||||
"email": "frontend@example.com",
|
||||
"description": "前端技术开发",
|
||||
"parent_id": null,
|
||||
"tenant_id": 1,
|
||||
"children": []
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "产品运营部",
|
||||
"code": "PRODUCT",
|
||||
"order": 2,
|
||||
"status": 0,
|
||||
"leader": "赵经理",
|
||||
"phone": "13800138004",
|
||||
"email": "product@example.com",
|
||||
"description": "产品与运营",
|
||||
"parent_id": null,
|
||||
"tenant_id": 1,
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"name": "人力资源部",
|
||||
"code": "HR",
|
||||
"order": 3,
|
||||
"status": 0,
|
||||
"leader": "刘经理",
|
||||
"phone": "13800138005",
|
||||
"email": "hr@example.com",
|
||||
"description": "人事管理",
|
||||
"parent_id": null,
|
||||
"tenant_id": 1,
|
||||
"children": []
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "测试租户技术部",
|
||||
"code": "TEST_TECH",
|
||||
"order": 1,
|
||||
"tenant_id": 2,
|
||||
"parent_id": null,
|
||||
"status": 0,
|
||||
"description": "测试租户技术部门"
|
||||
"children": []
|
||||
}
|
||||
]
|
||||
]
|
||||
|
||||
@@ -1,50 +0,0 @@
|
||||
[
|
||||
{
|
||||
"name": "技术总监",
|
||||
"code": "TECH_DIRECTOR",
|
||||
"order": 1,
|
||||
"status": 0,
|
||||
"description": "技术部门负责人",
|
||||
"tenant_id": 1
|
||||
},
|
||||
{
|
||||
"name": "高级工程师",
|
||||
"code": "SR_ENGINEER",
|
||||
"order": 2,
|
||||
"status": 0,
|
||||
"description": "高级技术岗位",
|
||||
"tenant_id": 1
|
||||
},
|
||||
{
|
||||
"name": "工程师",
|
||||
"code": "ENGINEER",
|
||||
"order": 3,
|
||||
"status": 0,
|
||||
"description": "技术岗位",
|
||||
"tenant_id": 1
|
||||
},
|
||||
{
|
||||
"name": "产品经理",
|
||||
"code": "PRODUCT_MANAGER",
|
||||
"order": 4,
|
||||
"status": 0,
|
||||
"description": "产品管理岗位",
|
||||
"tenant_id": 1
|
||||
},
|
||||
{
|
||||
"name": "运营专员",
|
||||
"code": "OPERATOR",
|
||||
"order": 5,
|
||||
"status": 0,
|
||||
"description": "运营岗位",
|
||||
"tenant_id": 1
|
||||
},
|
||||
{
|
||||
"name": "HR专员",
|
||||
"code": "HR_STAFF",
|
||||
"order": 6,
|
||||
"status": 0,
|
||||
"description": "人事专员",
|
||||
"tenant_id": 1
|
||||
}
|
||||
]
|
||||
@@ -25,23 +25,5 @@
|
||||
"data_scope": 1,
|
||||
"description": "仅能查看和操作自己的数据",
|
||||
"tenant_id": 1
|
||||
},
|
||||
{
|
||||
"name": "测试租户管理员",
|
||||
"code": "TEST_ADMIN",
|
||||
"order": 1,
|
||||
"data_scope": 4,
|
||||
"tenant_id": 2,
|
||||
"status": 0,
|
||||
"description": "测试租户管理员"
|
||||
},
|
||||
{
|
||||
"name": "测试租户员工",
|
||||
"code": "TEST_STAFF",
|
||||
"order": 2,
|
||||
"data_scope": 2,
|
||||
"tenant_id": 2,
|
||||
"status": 0,
|
||||
"description": "测试租户普通员工"
|
||||
}
|
||||
]
|
||||
]
|
||||
|
||||
@@ -35,9 +35,9 @@
|
||||
"github_login": null,
|
||||
"wx_login": null,
|
||||
"qq_login": null,
|
||||
"dept_id": 2,
|
||||
"dept_id": 1,
|
||||
"status": 0,
|
||||
"description": "技术部门管理员",
|
||||
"description": "系统管理员",
|
||||
"created_id": 1,
|
||||
"updated_id": null
|
||||
},
|
||||
@@ -56,32 +56,10 @@
|
||||
"github_login": null,
|
||||
"wx_login": null,
|
||||
"qq_login": null,
|
||||
"dept_id": 3,
|
||||
"dept_id": 1,
|
||||
"status": 0,
|
||||
"description": "后端开发工程师",
|
||||
"description": "普通用户",
|
||||
"created_id": 1,
|
||||
"updated_id": null
|
||||
},
|
||||
{
|
||||
"tenant_id": 2,
|
||||
"username": "test_admin",
|
||||
"password": "$pbkdf2-sha256$600000$E8jfd18sWu7N9DWsx/nYKg==$9DNKCv+dm1QDvYXwpQlZH6e7trYp1WCPdsvSyzXwuo0=",
|
||||
"name": "测试管理员",
|
||||
"mobile": "13800138001",
|
||||
"email": "test@fastapiadmin.com",
|
||||
"status": 0,
|
||||
"is_superuser": false,
|
||||
"description": "测试租户管理员"
|
||||
},
|
||||
{
|
||||
"tenant_id": 2,
|
||||
"username": "test_user",
|
||||
"password": "$pbkdf2-sha256$600000$E8jfd18sWu7N9DWsx/nYKg==$9DNKCv+dm1QDvYXwpQlZH6e7trYp1WCPdsvSyzXwuo0=",
|
||||
"name": "测试用户",
|
||||
"mobile": "13800138002",
|
||||
"email": "test2@fastapiadmin.com",
|
||||
"status": 0,
|
||||
"is_superuser": false,
|
||||
"description": "测试租户普通用户"
|
||||
}
|
||||
]
|
||||
]
|
||||
|
||||
@@ -10,13 +10,5 @@
|
||||
{
|
||||
"user_id": 3,
|
||||
"role_id": 3
|
||||
},
|
||||
{
|
||||
"user_id": 4,
|
||||
"role_id": 4
|
||||
},
|
||||
{
|
||||
"user_id": 5,
|
||||
"role_id": 5
|
||||
}
|
||||
]
|
||||
]
|
||||
|
||||
@@ -0,0 +1,124 @@
|
||||
[
|
||||
{
|
||||
"version": "v3.0.0",
|
||||
"title": "问题修复、表单与路由体验优化",
|
||||
"date": "2026-03-15",
|
||||
"content": "- 修复:富文本编辑器样式异常问题\n- 修复:菜单区域无法滚动的问题\n- 修复:特殊路由打开后显示空白页面的问题\n- 修复:WebSocket 重连异常问题\n- 修复:特殊动态路由参数处理异常问题\n- 优化:FaForm、FaSearchBar 表单提交前增加数据清洗,避免无效字段提交到后端\n- 修复:FaTable 与 ElForm 组合使用时动态表单校验错误的问题\n- 修复:隐藏子菜单时父级菜单被一并隐藏的问题\n- 修复:静态路由刷新后跳回首页的问题\n- 修复:fa-table 属性继承异常问题\n- 修复:PC 端切换到移动端后再切回 PC 端,菜单无法恢复原桌面布局的问题",
|
||||
"description": null,
|
||||
"status": 1,
|
||||
"sort": 1,
|
||||
"create_by": 1,
|
||||
"create_time": "2026-03-15 10:00:00",
|
||||
"update_time": "2026-03-15 10:00:00"
|
||||
},
|
||||
{
|
||||
"version": "v2.6.3",
|
||||
"title": "bug修复、新增功能",
|
||||
"date": "2025-11-15",
|
||||
"content": "- 修复:路由注册时不存在接口的重复请求问题\n- 修复:一键精简脚本打包失败的问题\n- 优化:完善路由配置验证机制,自动检测并提示非一级菜单的路径配置错误\n- 优化:顶部进度条残影\n- 优化:vite 预构建优化\n- 优化:圆角、边框统一\n- 优化:锁屏页面重新设计\n- 优化:退出登录菜单提前消失造成的视觉体验不好问题\n- 新增:FaForm 和 FaSearchBar 组件的 label 支持自定义渲染函数\n- 新增:菜单管理表单关键字段新增 Tooltip 提示\n- 新增:iconify 新增离线图标加载模式\n- 新增:退出登录新增 redirect 属性\n- 新增:退出登录重新进入系统保留用户标签页\n- 新增:双列菜单新增折叠按钮\n- 新增:菜单图标完善\n- 新增:多标签页增加图标\n- 新增:WebSocket 连接",
|
||||
"description": null,
|
||||
"status": 1,
|
||||
"sort": 2,
|
||||
"create_by": 1,
|
||||
"create_time": "2025-11-15 10:00:00",
|
||||
"update_time": "2025-11-15 10:00:00"
|
||||
},
|
||||
{
|
||||
"version": "v2.6.2",
|
||||
"title": "Sass 重构为 Tailwind CSS,Iconfont 替换为 Iconify",
|
||||
"date": "2025-11-09",
|
||||
"content": "- 样式系统重构:Sass 全面迁移至 Tailwind CSS\n- 图标方案升级:Iconfont 替换为 Iconify\n- 构建优化:完整包体积减少 1.3 MB\n- 路由注册重构:全面重构路由注册系统\n- 架构优化:优化目录结构,职责划分更清晰\n- 注释优化:统一模块注释规范\n- 性能提升:优化核心代码逻辑\n- 设计系统:重构颜色体系\n- 菜单优化:细化菜单样式\n- 组件重构:重构 ArtTextScroll 组件\n- 问题修复:修复 FaForm、FaSearchBar 自定义组件渲染异常\n- 功能增强:FaForm、FaSearchBar 新增 render 属性\n- 功能增强:useTable hooks 新增 visible 属性\n- 响应式优化:优化 FaForm、FaSearchBar 栅格布局\n- 节日功能增强:礼花配置支持跨日期范围设置\n- 依赖更新:升级核心依赖至最新稳定版本",
|
||||
"description": "重要提示:本次升级涉及样式系统(Sass → Tailwind CSS)与图标库(Iconfont → Iconify)的底层重构,属于破坏性更新。建议新项目直接使用 v3.0,旧版本项目不建议升级。",
|
||||
"require_re_login": true,
|
||||
"status": 1,
|
||||
"sort": 3,
|
||||
"create_by": 1,
|
||||
"create_time": "2025-11-09 10:00:00",
|
||||
"update_time": "2025-11-09 10:00:00"
|
||||
},
|
||||
{
|
||||
"version": "v2.6.1",
|
||||
"title": "bug修复、授权页增加主题色切换功能",
|
||||
"date": "2025-10-19",
|
||||
"content": "- 修复获取用户信息、获取菜单接口访问无效地址重复调用问题\n- 升级部分依赖兼容 tailwindcss\n- 修复 ElButton circle 模式样式\n- 修复 ElSelect 无法通过键盘选择问题\n- 修复带参数静态路由跳转登录页面问题\n- 优化外部链接菜单点击选中状态\n- 授权页增加主题色切换功能",
|
||||
"description": null,
|
||||
"status": 1,
|
||||
"sort": 4,
|
||||
"create_by": 1,
|
||||
"create_time": "2025-10-19 10:00:00",
|
||||
"update_time": "2025-10-19 10:00:00"
|
||||
},
|
||||
{
|
||||
"version": "v2.6.0",
|
||||
"title": "代码优化、bug修复",
|
||||
"date": "2025-10-16",
|
||||
"content": "- 优化精简版本菜单数据结构\n- 优化本地开发环境网络请求代理配置\n- 优化 ElTree 组件默认样式\n- 新增 VsCode 推荐插件相关配置\n- 优化 ElDropdown 组件点击触发模式下的交互样式\n- 扩展注册、密码重置页面顶部组件支持\n- 优化菜单过滤逻辑\n- 优化页面切换动画\n- 优化暗黑模式文字颜色\n- 修复静态路由自定义首页路径首次访问跳转登录页问题\n- 修复退出登录时短暂跳转至 500 页的问题\n- 修复 v2.5.9 版本首页路由跳转配置失效问题\n- 修复 v2.5.9 自动导包机制导致的构建异常",
|
||||
"description": null,
|
||||
"require_re_login": true,
|
||||
"status": 1,
|
||||
"sort": 5,
|
||||
"create_by": 1,
|
||||
"create_time": "2025-10-16 10:00:00",
|
||||
"update_time": "2025-10-16 10:00:00"
|
||||
},
|
||||
{
|
||||
"version": "v2.5.9",
|
||||
"title": "代码优化",
|
||||
"date": "2025-10-12",
|
||||
"content": "- views 文件目录、文件名、代码优化\n- useTable 分页请求字段增加全局配置 tableConfig.ts\n- 优化路由配置为模块化结构\n- 获取菜单接口使用 apifox mock 数据",
|
||||
"description": null,
|
||||
"status": 1,
|
||||
"sort": 6,
|
||||
"create_by": 1,
|
||||
"create_time": "2025-10-12 10:00:00",
|
||||
"update_time": "2025-10-12 10:00:00"
|
||||
},
|
||||
{
|
||||
"version": "v2.5.8",
|
||||
"title": "依赖升级、bug修复",
|
||||
"date": "2025-09-29",
|
||||
"content": "- vue、vite、element-plus 等核心库升级\n- 修复富文本编辑器全屏顶栏层级问题\n- 修复表格列排序组件文字溢出问题\n- 修复统计卡片条件判断\n- 优化 el-tag 样式\n- 优化顶部进度条颜色\n- 优化自定义主题配置\n- 优化 ElementPlus 自定义主题问题\n- 修复根路径 / 与 HOME_PAGE_PATH 同为 / 时出现的无限重定向",
|
||||
"description": "由于项目依赖升级,node 版本需要升级到 v20.19.0 或以上",
|
||||
"status": 1,
|
||||
"sort": 7,
|
||||
"create_by": 1,
|
||||
"create_time": "2025-09-29 10:00:00",
|
||||
"update_time": "2025-09-29 10:00:00"
|
||||
},
|
||||
{
|
||||
"version": "v2.5.7",
|
||||
"title": "新增表单组件",
|
||||
"date": "2025-09-14",
|
||||
"content": "- 新增 FaForm 组件\n- 修复新版本谷歌浏览器切换主题闪烁问题\n- 优化表单 label 高度没有对齐问题\n- 首屏启动性能优化",
|
||||
"description": null,
|
||||
"status": 1,
|
||||
"sort": 8,
|
||||
"create_by": 1,
|
||||
"create_time": "2025-09-14 10:00:00",
|
||||
"update_time": "2025-09-14 10:00:00"
|
||||
},
|
||||
{
|
||||
"version": "v2.5.6",
|
||||
"title": "优化用户体验、bug修复",
|
||||
"date": "2025-08-17",
|
||||
"content": "- useTable 类型推导优化\n- useTable removeColumn 支持多数据删除\n- useTable 自动识别响应体支持自定义配置\n- useTable 空数据浏览器警告优化\n- api 接口请求代码优化\n- FaTable 分页组件选中样式优化\n- FaTable 空状态高度默认撑满\n- ArtButtonMore 组件新增图标、颜色配置\n- FaTableHeader 新增搜索按钮\n- FaSearchBar label 为空时不占空间\n- 表格操作栏拖拽禁止固定列拖拽\n- 角色管理页面接口对接\n- 菜单管理页面优化\n- 优化设置中心滚动页面跟随滚动问题\n- 一级路由是外链时component校验逻辑优化\n- 优化地图右下角拖动问题\n- 优化暗黑模式刷新页面白色背景问题\n- 移动端显示左侧菜单logo\n- 网络请求新增 showSuccessMessage\n- 添加全局错误处理基础框架\n- 修复批量删除整页数据没有返回上一页的bug\n- 修复动态路由参数导致的问题\n- 新增权限演示示例\n- 全局组件采用异步加载策略",
|
||||
"description": null,
|
||||
"status": 1,
|
||||
"sort": 9,
|
||||
"create_by": 1,
|
||||
"create_time": "2025-08-17 10:00:00",
|
||||
"update_time": "2025-08-17 10:00:00"
|
||||
},
|
||||
{
|
||||
"version": "v2.5.5",
|
||||
"title": "bug修复、优化用户体验",
|
||||
"date": "2025-07-27",
|
||||
"content": "- 重构 FaSearchBar 组件,支持更多组件、表单校验等能力\n- useTable 列配置:支持动态更新能力\n- 修复多个富文本编辑器图标不统一问题\n- 优化颜色选择器圆角\n- el-radio、el-checkbox 统一大小\n- art-stats-card 新增小数位、分隔符配置\n- 路由配置示例优化\n- 高级表格新增自定义获取数据示例\n- useTable 新增 excludeParams\n- 优化路径别名类型问题\n- 本地开发跨域配置优化\n- 修复 useTable 删除最后一整页数据没有返回上一页的问题\n- 修复 echarts 图表数据初始化、更新数据浏览器报错\n- 删除 art-chart-empty 组件\n- 新增 FaSearchBar 组件示例\n- 网络请求支持 http 状态码为 401 时退出登录\n- 优化网络请求退出登录多次提示问题\n- useTable 属性、方法命名优化\n- 登录页UI升级\n- 403、404、500 页面UI升级",
|
||||
"description": null,
|
||||
"status": 1,
|
||||
"sort": 10,
|
||||
"create_by": 1,
|
||||
"create_time": "2025-07-27 10:00:00",
|
||||
"update_time": "2025-07-27 10:00:00"
|
||||
}
|
||||
]
|
||||
@@ -1,62 +0,0 @@
|
||||
[
|
||||
{
|
||||
"name": "HTTP请求",
|
||||
"code": "http_request",
|
||||
"category": "action",
|
||||
"func": "import json\nimport urllib.request\n\ndef handler(*args, **kwargs):\n \"\"\"发送 HTTP 请求并返回响应\"\"\"\n url = kwargs.get(\"url\", \"\")\n method = kwargs.get(\"method\", \"GET\")\n headers = kwargs.get(\"headers\", {})\n body = kwargs.get(\"body\")\n if not url:\n raise ValueError(\"缺少 url 参数\")\n req = urllib.request.Request(url, method=method, headers=headers)\n if body and isinstance(body, dict):\n req.data = json.dumps(body).encode()\n with urllib.request.urlopen(req) as resp:\n return {\"status_code\": resp.status, \"body\": resp.read().decode()}\n",
|
||||
"args": null,
|
||||
"kwargs": "{\"url\": \"\", \"method\": \"GET\"}",
|
||||
"sort_order": 1,
|
||||
"is_active": true,
|
||||
"status": 0,
|
||||
"description": "发送 HTTP 请求,支持 GET/POST 等方法"
|
||||
},
|
||||
{
|
||||
"name": "发送通知",
|
||||
"code": "send_notification",
|
||||
"category": "action",
|
||||
"func": "import logging\n\ndef handler(*args, **kwargs):\n \"\"\"发送通知消息\"\"\"\n logger = logging.getLogger(__name__)\n channel = kwargs.get(\"channel\", \"system\")\n title = kwargs.get(\"title\", \"工作流通知\")\n content = kwargs.get(\"content\", \"\")\n recipients = kwargs.get(\"recipients\", [])\n logger.info(f\"[{channel}] 发送通知: {title} -> {len(recipients)}人\")\n return {\n \"channel\": channel,\n \"title\": title,\n \"recipient_count\": len(recipients),\n \"status\": \"sent\"\n }\n",
|
||||
"args": null,
|
||||
"kwargs": "{\"channel\": \"system\", \"title\": \"工作流通知\", \"recipients\": []}",
|
||||
"sort_order": 2,
|
||||
"is_active": true,
|
||||
"status": 0,
|
||||
"description": "发送系统通知、邮件或短信"
|
||||
},
|
||||
{
|
||||
"name": "条件判断",
|
||||
"code": "condition",
|
||||
"category": "condition",
|
||||
"func": "import json\n\ndef handler(*args, **kwargs):\n \"\"\"条件分支:根据 upstream 结果决定走向\"\"\"\n upstream = kwargs.get(\"upstream\", {})\n variables = kwargs.get(\"variables\", {})\n field = kwargs.get(\"field\", \"status\")\n expected = kwargs.get(\"expected\", \"success\")\n operator = kwargs.get(\"operator\", \"eq\")\n last = list(upstream.values())[-1] if upstream else {}\n actual = last.get(field) if isinstance(last, dict) else last\n operations = {\n \"eq\": lambda a, e: a == e,\n \"ne\": lambda a, e: a != e,\n \"gt\": lambda a, e: a > e,\n \"lt\": lambda a, e: a < e,\n \"contains\": lambda a, e: str(e) in str(a)\n }\n op = operations.get(operator, operations[\"eq\"])\n result = op(actual, expected)\n return {\"passed\": result, \"actual\": actual, \"expected\": expected}\n",
|
||||
"args": null,
|
||||
"kwargs": "{\"field\": \"status\", \"expected\": \"success\", \"operator\": \"eq\"}",
|
||||
"sort_order": 3,
|
||||
"is_active": true,
|
||||
"status": 0,
|
||||
"description": "根据上游节点输出判断分支走向"
|
||||
},
|
||||
{
|
||||
"name": "数据转换",
|
||||
"code": "data_transform",
|
||||
"category": "action",
|
||||
"func": "import json\nfrom datetime import datetime\n\ndef handler(*args, **kwargs):\n \"\"\"转换上游数据格式\"\"\"\n upstream = kwargs.get(\"upstream\", {})\n mapping = kwargs.get(\"mapping\", {})\n result = {}\n for upstream_key, target_key in mapping.items():\n for source, value in upstream.items():\n if isinstance(value, dict) and upstream_key in value:\n result[target_key] = value[upstream_key]\n result[\"transformed_at\"] = datetime.now().isoformat()\n return result\n",
|
||||
"args": null,
|
||||
"kwargs": "{\"mapping\": {}}",
|
||||
"sort_order": 4,
|
||||
"is_active": true,
|
||||
"status": 0,
|
||||
"description": "转换上游节点的数据格式"
|
||||
},
|
||||
{
|
||||
"name": "聚合汇总",
|
||||
"code": "aggregate",
|
||||
"category": "action",
|
||||
"func": "import json\n\ndef handler(*args, **kwargs):\n \"\"\"聚合上游多个节点的输出\"\"\"\n upstream = kwargs.get(\"upstream\", {})\n variables = kwargs.get(\"variables\", {})\n results = {\n \"node_count\": len(upstream),\n \"nodes\": list(upstream.keys()),\n \"values\": list(upstream.values()),\n \"variables\": variables\n }\n return results\n",
|
||||
"args": null,
|
||||
"kwargs": null,
|
||||
"sort_order": 5,
|
||||
"is_active": true,
|
||||
"status": 0,
|
||||
"description": "将多个上游节点的输出聚合到一个结果中"
|
||||
}
|
||||
]
|
||||
Reference in New Issue
Block a user