1601 Commits

Author SHA1 Message Date
YunaiV
f8c869f1ff feat(mes):md client select 迁移 2026-05-22 08:41:54 +08:00
YunaiV
00779aacb3 feat(mes): 迁移 cal、dv、tm 的 api 2026-05-22 08:34:47 +08:00
YunaiV
9d665bd6b9 docs(iot): 新增 codex 评审入口 + 登记异步竞态不修决策
- review-for-codex.md:本轮修复背景 + 决策 + 文件清单 + 给 codex
  的 5 项重点关注。与 bug.md(待修源头) / bug_ignore.md(不修登记)
  形成三文件分工,后续 codex / 二次评审不会丢上下文
- bug_ignore.md/I-1:登记 scene 表单 3 处异步竞态(property-selector
  / device-selector / device-control-config 的 watch 异步加载)不修决策。
  评估理由:触发窗口极窄、低频操作、~40 行 epoch 模板代码成本不匹配、
  vue3 源也未做。复评条件:API 层接入 AbortController 时顺手补、
  用户实际反馈、改后端 push 模式
2026-05-21 21:26:36 +08:00
YunaiV
df8e23542b fix(iot): 修复 scene 表单 vue-tsc 3 处类型错误
- ele device-control-config:
  - defaultParams 类型显式为 Record<string, any> ;
    param.identifier 可能为 undefined 时跳过赋值
  - ElOption :value="service.identifier" 改为非空断言 service.identifier!
- ele json-params-input:getParamTypeTag 用 as const 让 TS 自动推断字面值
  联合('primary' | 'success' | 'info' | 'warning' | 'danger'),传给
  ElTag.type 不再报错
- antd value-input:handleNumberChange 参数改为 any 内部 String 转换
  (AntD InputNumber @change 类型为 ValueType = string | number ,
   原 number | undefined 报错)
2026-05-21 19:58:33 +08:00
YunaiV
e7361a60ec feat(iot):md 模块,支持生成 2026-05-21 18:48:57 +08:00
YunaiV
66843f2392 chore(iot): 数组回调缩写参数展开为完整业务命名
- products.find((p)) → ((product)),propertyList.find((p)) → ((property))
  等:把 .find / .filter / .map / .reduce 的单字母回调参数 (p / d / s / g / v
  / acc / val) 全部展开为 product / device / service / group / value /
  total 等完整命名
- 涉及 web-antd 与 web-ele 两侧 :device 列表 / 卡片 / 物模型属性历史 /
  ota 固件 / 场景执行器服务选择 / 属性选择器 / 产品选择组件
- 外层已绑定同名变量的场景,回调形参用 item 避免命名重复
2026-05-21 18:46:59 +08:00
YunaiV
83bf576daf feat(mes): rename field 'level' to 'configLevel' for clarity 2026-05-21 17:45:25 +08:00
YunaiV
2a97bed546 feat(mes): 移除多余 defineOptions 2026-05-21 17:36:30 +08:00
YunaiV
c8ce1a8911 fix(iot): 设备配置详情统一 460px 高度 + 按钮加 8px 间距,卡片视图删除按钮改 !h-8 对齐其它按钮高度 2026-05-21 17:27:17 +08:00
YunaiV
d1a2601b6c fix(iot): alert 模块对齐后端 VO + 搜索体验对齐 vben 实践(P1)
- alert/config API 删除多余字段 updateTime
- alert/record API 删除多余字段 deviceName / productName / processTime
- alert/record 搜索表单告警级别字段 configLevel → level ,
  对齐后端 IotAlertRecordPageReqVO.level(之前提交后端不会按级别筛选)
- alert/record 搜索表单设备字段改用 ApiSelect + getSimpleDeviceList 全量加载,
  showSearch / filterable 模糊搜索,对齐 vben 项目 13+ 处 ApiSelect 主流实践
- alert/config + alert/record 列表移除空跑 checkbox 列(无批量删除接口)
2026-05-21 16:39:30 +08:00
YunaiV
d2587c17b0 fix: iot 固件的优化 2026-05-21 15:11:01 +08:00
YunaiV
33cdfcac3c feat(im): 修管理端 3 处:群消息 atUserNicknames 类型允许 null、移除前端无效的「消息内容」查询入口、表情包宽高加表单校验 2026-05-21 15:10:22 +08:00
YunaiV
58f2e23654 fix: iot 补齐 vue3 源缺失的表单校验(P1)
- 物模型功能定义「数据类型」字段补 required 必填校验
- 产品选择器(ProductSelect)补搜索能力:antd 加 show-search + option-filter-prop ,ele 加 filterable
- 设备表单 onConfirm 增加 advancedFormApi.validate() 调用,
  否则高级表单(含经纬度等字段)的 schema rules 不会触发
- 设备经纬度增加「成对填写」跨字段校验:仅填一项时给 warning 提示,
  与 vue3 源 DeviceForm.vue 行为对齐
2026-05-21 14:43:06 +08:00
YunaiV
d207e3b82c feat(mes): 优化 md 基础模块的迁移 2026-05-21 13:23:33 +08:00
YunaiV
1afa70bb53 fix: iot 二次确认统一改用 popconfirm 模式(P1)
- 设备详情「配置推送」按钮包 Popconfirm / ElPopconfirm,防误下发
- 场景联动列表 TableAction 启用 / 停用项改用 popConfirm 配置
- 产品详情头部「发布 / 撤销发布 / 同步物模型表结构」三处按钮同步切换
- 移除命令式 Modal.confirm / ElMessageBox.confirm,与 system / iot 现有惯例一致
- 顺带消除 ele 端 ElMessageBox.confirm 取消未 catch 的未处理 promise
2026-05-21 12:44:12 +08:00
YunaiV
751ba2c782 feat(mes): 迁移工作站管理及设备、工具、人员关联 2026-05-21 11:10:21 +08:00
YunaiV
057ca0bfde refactor: 收敛 iot rule/scene API 的重复类型声明(P1)
- antd / ele api/iot/rule/scene,删除外层重复的 4 个 interface
- createSceneRule / updateSceneRule 入参改用 RuleSceneApi.SceneRule
- 业务文件 import 统一改用 RuleSceneApi.SceneRule / Trigger / TriggerCondition / Action
- 清理 2 处 TODO @haohao 残留注释

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 11:01:09 +08:00
YunaiV
df720b2c1a style: 应用 lint 格式化到 ele scene 设备控制 / 属性选择器组件
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 10:44:32 +08:00
YunaiV
4b6e2de778 feat(mes): 迁移客户、供应商、车间管理到 vben 2026-05-21 10:36:07 +08:00
YunaiV
e6e15ca4ef feat(mes): 迁移客户、供应商、车间管理到 vben 2026-05-21 10:35:54 +08:00
YunaiV
0d175cbe9c fix: 修复 iot 模块 ele 端迁移阻塞的类型 / 字段问题(P0)
- ele property-selector / device-control-config,改用 ThingModelApi 命名空间引用
- ele api/iot/thingmodel,补 ThingModelTSL 类型,收敛 getThingModelTSLByProductId 返回值
- ele api/iot/rule/scene,SceneRule 补 lastTriggeredTime 字段
- ele views/iot/rule/scene/data.ts,useGridColumns 对齐 antd 的 5 列结构
- ele views/iot/home/modules/message-trend-card,ElSelect 改用 ElOption 子节点
- ele / antd api/iot/rule/scene,Action.params 类型 Record<string, any> 改为 string

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 10:20:30 +08:00
YunaiV
f02a5975b8 feat(wms): 优化 md unit 的迁移代码(优化代码) 2026-05-21 09:15:57 +08:00
YunaiV
b35ce18c6e feat(wms): 优化 md unit 的迁移代码 2026-05-21 09:11:58 +08:00
YunaiV
c11db17376 feat(iot): 将 antd 的 rule scene 迁移到 ele 里。 2026-05-21 08:53:22 +08:00
YunaiV
b3462c3286 feat(iot): 将 antd 的 rule scene 迁移到 ele 里。 2026-05-21 08:53:16 +08:00
YunaiV
9cc52f128c feat(wms): 优化 md item 的迁移代码(继续) 2026-05-21 08:45:48 +08:00
YunaiV
67997bd44d feat(wms): 优化 md item 的迁移代码 2026-05-21 08:09:29 +08:00
YunaiV
5790211897 feat(iot): 修复 antd Select 的 v-model 用法
将场景联动执行器配置、物模型数值单位的 Select 由 EP 风格的 `:model-value` 改为 antd 标准的 `:value`;前者不被 ant-design-vue 接收,导致下拉无法选中 / 回显失效。顺手把数值单位的 `getDictOptions` 提到 computed 缓存。
2026-05-21 01:09:55 +08:00
YunaiV
6b1425d541 feat(mes): 新增 md item 的迁移 2026-05-21 00:58:45 +08:00
YunaiV
13c3028ecc feat(iot): 修复 rule scene 的样式(覆盖)问题、间隙问题 2026-05-21 00:37:30 +08:00
YunaiV
cb175e331f feat(iot): 优化代码,尽量使用 ProductStatusEnum 枚举 2026-05-21 00:17:56 +08:00
YunaiV
3f09fc1498 feat(iot): 优化 iot 的代码风格(迁移 constants.ts)地址 2026-05-20 23:11:02 +08:00
YunaiV
e816288b82 feat(iot): 迁移 ele 的 alert、device、product、ota、home、thingmodel 的实现 2026-05-20 13:31:27 +08:00
YunaiV
f1f8f4e64a feat(iot): 迁移 ele 的 map 组件 2026-05-20 13:09:26 +08:00
YunaiV
250d3eb39f feat(iot): 迁移 iot 在 ele 的 api 2026-05-20 09:57:47 +08:00
YunaiV
5607f23322 feat(iot): 优化 rule scene 的代码风格 2026-05-20 09:57:05 +08:00
YunaiV
538d04a380 feat(iot): 优化 data rule,使用 vxe 简化表单,提升 antd、ele 的代码复用性 2026-05-20 09:54:33 +08:00
YunaiV
b9d333f7ec feat(mes): 同步 api 的迁移 2026-05-20 09:52:20 +08:00
YunaiV
dab9509ba0 feat(iot): 完善 rule/scene 的迁移 2026-05-20 09:01:57 +08:00
YunaiV
b1bd32a89b fix(iot): 完善 thingmodel 的迁移 2026-05-20 08:46:28 +08:00
YunaiV
ec796b8336 fix(iot): 完善 rule data 的迁移 2026-05-20 08:45:51 +08:00
YunaiV
e7a61ce150 feat(iot): 优化 antd 里的整体代码风格。 2026-05-20 00:41:06 +08:00
YunaiV
1bdc0d992f feat(mes): 新增 md item type 的迁移 2026-05-19 22:20:13 +08:00
YunaiV
8bcfa20577 feat(iot):优化 ota 的代码风格(v6) 2026-05-19 16:52:27 +08:00
YunaiV
ab15c884bf feat(wms): 优化 sku-form.vue 的 skuSeq 2026-05-19 16:31:41 +08:00
YunaiV
9c57ae07a6 feat(wms): update input components to disable controls and enhance user selection 2026-05-19 16:16:28 +08:00
YunaiV
09c19526bb feat(iot):优化 ota 的代码风格(v5) 2026-05-19 15:31:45 +08:00
YunaiV
b9a7eddb72 feat(iot):优化 ota 的代码风格(v4) 2026-05-19 14:51:54 +08:00
YunaiV
0bc1981675 fix(wms): 优化 WMS 首页卡片样式和区块间距 2026-05-19 14:46:05 +08:00
YunaiV
9d54f60b10 feat(iot):优化 ota 的代码风格(v3) 2026-05-19 14:29:14 +08:00
YunaiV
a70fcc9616 fix(wms): 对齐商品分类树筛选查询 2026-05-19 13:00:05 +08:00
YunaiV
4821d49017 feat(iot):优化 ota 的代码风格(v2) 2026-05-19 11:27:35 +08:00
YunaiV
a1b66588ec fix(wms): 修复首页汇总卡展示跳转和库存选择跨页勾选 2026-05-19 10:59:14 +08:00
YunaiV
a098c201e1 fix(wms): 修复库存选择器跨页选择
- 合并 VXE 当前页勾选与 reserve 跨页保留记录
- 关闭或重开弹窗时清理 checkbox reserve 状态
- 补回双击库存行直接选择确认
2026-05-19 10:08:01 +08:00
YunaiV
8da5c12dfc fix(wms): 修复库存统计商品维度合并字段
- 对齐商品维度列字段为 itemId、skuId、skuWarehouseId
- 同步 antd/ele 的 spanMethod 合并字段
- 补充 WMS 迁移验证记录
2026-05-19 08:58:54 +08:00
YunaiV
3d0917f1a9 feat(wms):完成 inventory index 的迁移 2026-05-18 23:15:34 +08:00
YunaiV
0280df114f feat(wms):完成 inventory history 的迁移 2026-05-18 22:55:37 +08:00
YunaiV
6b61004b6a feat(wms):完成 md item 的迁移(antd 优化,ele 全部) 2026-05-18 22:46:47 +08:00
YunaiV
8d69e4d9f0 feat(wms):完成 md item 的迁移 2026-05-18 22:35:58 +08:00
YunaiV
cd42a653c5 feat(wms):修复 inventory-select.vue、item-sku-select.vue 重叠的问题 2026-05-18 22:35:22 +08:00
YunaiV
56de1f1412 feat(iot):清理 defineOptions 冗余的 2026-05-18 22:34:31 +08:00
YunaiV
80f071d57f feat(wms):完成 antd、ele 的 inventory-select.vue 的迁移 2026-05-18 22:09:49 +08:00
YunaiV
68800c96d7 feat(wms):完成 antd、ele 的 item-sku-select.vue 的迁移 2026-05-18 22:07:32 +08:00
YunaiV
2dfa863d68 feat(wms):完成 antd、ele 的 category 的迁移 2026-05-18 21:57:19 +08:00
YunaiV
4cded0a674 feat(wms):完成 antd、ele 的 check 的迁移 2026-05-18 21:56:44 +08:00
YunaiV
584370358e feat(iot):优化 ota 的代码风格 2026-05-18 21:14:20 +08:00
YunaiV
76bed17ed9 feat(iot):优化 alert 的代码实现(继续) 2026-05-18 20:56:13 +08:00
YunaiV
e9e534018f feat(iot):优化 alert 的代码实现(继续) 2026-05-18 20:35:07 +08:00
YunaiV
fbc03a9713 feat(wms):完成 antd、ele 的 movement 的迁移 2026-05-18 13:29:26 +08:00
YunaiV
1bbb7eb1d5 feat(wms):完成 antd、ele 的 shipment 的迁移 2026-05-18 13:13:29 +08:00
YunaiV
88515705dc feat(iot):优化 alert 的代码实现。 2026-05-18 12:36:58 +08:00
YunaiV
81b4690998 feat(iot):优化 device 的权限校验 2026-05-18 12:28:21 +08:00
YunaiV
cfb1f8401e feat(iot):优化 IoT 请求的代码风格(thingmodel 界面调整引入) 2026-05-18 12:27:37 +08:00
YunaiV
5182cdbffa feat(iot):优化 IoT 请求的代码风格(device 界面调整引入) 2026-05-18 12:26:58 +08:00
YunaiV
d649a617ac feat(iot):优化 IoT 请求的代码风格 2026-05-18 12:26:06 +08:00
YunaiV
71a23487f7 feat(iot):优化首页的设备统计实现 2026-05-18 08:55:39 +08:00
YunaiV
89f75428d6 feat(iot):增加 product/product 模块的代码评审 2026-05-18 08:54:44 +08:00
YunaiV
179881bd3d feat(iot):补充产品分类的 auth 操作校验 2026-05-18 08:50:23 +08:00
YunaiV
58f8b7fb22 feat(iot):增加 alert 模块的代码评审 2026-05-18 08:48:25 +08:00
YunaiV
6740401f6c fix(wms):完善 ep 的 order receipt 迁移(表单、详情) 2026-05-18 08:34:35 +08:00
YunaiV
b42e9b36e5 feat(wms):优化 antd、ele 的 order receipt 迁移 2026-05-18 01:02:09 +08:00
YunaiV
f8c2d4b1ff feat(wms):优化 antd、ele 的 order receipt 迁移 2026-05-17 23:56:05 +08:00
YunaiV
41d5aa93d6 feat(wms):新增 ele 的 order receipt 迁移 2026-05-17 23:40:00 +08:00
YunaiV
3135b28211 feat(全局):增加 number-range-input 组件 2026-05-17 23:35:31 +08:00
YunaiV
08511191f7 feat(wms):修复 print 顶部白块的问题,对齐 vue3 + ep 的样式 2026-05-17 23:15:16 +08:00
YunaiV
0246fa1ebc feat(wms):优化 order receipt 的实现,对齐 vue3 + ep 版本 2026-05-17 23:09:18 +08:00
YunaiV
0e4012c623 feat(全局):增加 barcode 二维码组件 2026-05-17 23:07:56 +08:00
YunaiV
4933180560 feat(wms):增加 receipt 功能、评审 2026-05-17 21:39:15 +08:00
YunaiV
8710da9383 feat(wms):增加 wms 工具类 2026-05-17 19:09:01 +08:00
YunaiV
5a1f4901da feat(iot):优化 iot 设备管理的样式 2026-05-17 19:07:50 +08:00
YunaiV
3da4a3f417 feat(wms):将首页的枚举值去掉,统一合并到 constants 里,更聚焦点 2026-05-17 18:17:30 +08:00
YunaiV
84b91c6795 feat(iot):优化 iot 产品管理的样式 2026-05-17 18:11:31 +08:00
YunaiV
735ff018be feat(wms):增加 home 统计的迁移 2026-05-17 17:48:53 +08:00
YunaiV
0163794e3f feat(wms):增加 category 模块的迁移 2026-05-17 16:47:27 +08:00
YunaiV
bb63ca9541 feat(wms):增加 brand 模块的迁移 2026-05-17 16:35:51 +08:00
YunaiV
6b28518165 feat(wms):迁移 api 接口 2026-05-17 16:30:50 +08:00
YunaiV
4adce844d3 feat(wms):增加 merchant 模块的迁移 2026-05-17 10:50:34 +08:00
YunaiV
19b5f38e23 feat(wms):增加 warehouse 模块的迁移 2026-05-16 23:12:33 +08:00
YunaiV
80fa8b74e8 feat:补齐 antd 的 component: 'InputNumber', 的 class full 样式 2026-05-16 22:46:16 +08:00
YunaiV
5710761dbe feat(wms):调整 README.md 2026-05-16 15:09:05 +08:00
YunaiV
877ba2727f feat(wms):调整 README.md 2026-05-16 14:56:01 +08:00
YunaiV
70a639967c feat:更新 README.md
- 提交时不再用节点表单值覆盖 data.variables;与预览阶段使用同一份合并变量
- onChange 加 useDebounceFn(300ms) + 请求序号去重,handleAudit 提交前 await 最新一轮重算
- 切换任务时重置请求序号与 pending 重算
- 改用 form-create 官方 formData() 取节点表单当前值
- 节点表单初始化等 fApi 就绪后再计算下一节点(until + 1s 兜底)

同步至 web-antd / web-ele 两端
2026-05-16 14:44:01 +08:00
xingyu
59183029b6 !341 fix: 修复禁用的删除按钮仍然可以点击的问题
Merge pull request !341 from li_shifeng/fix-dept-delete
2026-05-14 08:29:04 +00:00
xingyu
e81ca2c13f !343 fix(@vben/web-antdv-next): 修复 InputNumber 组件宽度在表单中不占满的问题
Merge pull request !343 from XuZhiqiang/feat-antdv-next
2026-05-14 08:03:20 +00:00
XuZhiqiang
dcccef1c02 fix(@vben/web-antdv-next): 修复 InputNumber 组件宽度在表单中不占满的问题 2026-05-13 15:47:52 +08:00
XuZhiqiang
9a5bee4dce fix(@vben/web-antdv-next): adapter修正组件名称TextArea一致的大小写格式 2026-05-13 15:20:15 +08:00
xingyu
29665f02bf !342 feat(@vben/web-antdv-next): migrate ant-design-vue to antdv-next
Merge pull request !342 from XuZhiqiang/feat-antdv-next
2026-05-12 13:46:18 +00:00
XuZhiqiang
06f776d1ef feat(@vben/web-antdv-next): 替换 antdv-next 中不可用的 List 组件,手动迁移为 div 结构,后续组件库新增 Listy 组件在进行替换 2026-05-12 16:37:42 +08:00
XuZhiqiang
40f0ba71f5 feat(@vben/web-antdv-next): migrate ant-design-vue to antdv-next
Migration Summary: ant-design-vue → antdv-next
Core Changes
package.json - Replaced "ant-design-vue": "catalog:" with "antdv-next": "catalog:"

bootstrap.ts - Changed @vben/styles/antd to @vben/styles/antdv-next

adapter/component/index.ts - Major rewrite:

Removed dynamic defineAsyncComponent imports from ant-design-vue/es/...
Added static imports from antdv-next main entry
Renamed RangePicker → DateRangePicker, Textarea → TextArea
Defined local types for Rule, Locale, UploadRequestOption, FileType, Key
Bulk Import Replacements (100+ files)
from ant-design-vue → from antdv-next
from ant-design-vue/es/locale/... → from antdv-next/locale/...
from ant-design-vue/es/... → removed (use main entry)
from ant-design-vue/lib/... → removed (use main entry)
Component API Differences Handled
ant-design-vue	antdv-next	Files affected
Form.Item	FormItem	475 references
Tabs.TabPane	TabPane	240 references
Select.Option	SelectOption	151 references
Descriptions.Item	DescriptionsItem	2 references
Timeline.Item	TimelineItem	2 references
Radio.Group	RadioGroup	20 references
Collapse.Panel	CollapsePanel	9 references
Layout.Content/Sider/Header/Footer	LayoutContent/LayoutSider/...	14 references
Dropdown#overlay slot	Dropdown#popupRender	6 references
RangePicker	DateRangePicker	15+ references
Textarea	TextArea	37 references
ButtonGroup	Space (fallback)	12 references
Known Issues (requires manual attention)
List component - Not available in antdv-next. 4 files have TODO comments where List/List.Item/List.Item.Meta are used
@form-create/ant-design-vue - Kept as-is (compatible with antdv-next at runtime)
Type errors - ~366 type errors remain (vs 189 in web-antd), mostly pre-existing business logic issues and minor API differences
2026-05-12 15:30:08 +08:00
XuZhiqiang
0fced45a9c refactor(@vben/web-antdv-next): 根据web-antd初始化web-antdv-next 2026-05-12 12:14:32 +08:00
li_shifeng
2ea7da06c5 fix: 修复禁用的删除任然可以点击的问题 2026-05-11 14:13:23 +08:00
YunaiV
c164904a14 chore: 合并 github/master,引入 PR #259 BPMN 流程设计器审批节点自定义配置编辑后丢失修复 2026-05-04 00:36:22 +08:00
芋道源码
a0ceb45df9 Merge pull request #259 from lb1565387341/fix_bpmn_custom_user_config
fix: [bpm][antd&ele] 修复流程设计器自定义配置编辑后丢失的问题
2026-05-04 00:26:29 +08:00
YunaiV
c641542c71 fix(bpm):修正 BPM 流程实例审批弹窗网关分支重算的并发与提交问题
- 提交时不再用节点表单值覆盖 data.variables;与预览阶段使用同一份合并变量
- onChange 加 useDebounceFn(300ms) + 请求序号去重,handleAudit 提交前 await 最新一轮重算
- 切换任务时重置请求序号与 pending 重算
- 改用 form-create 官方 formData() 取节点表单当前值
- 节点表单初始化等 fApi 就绪后再计算下一节点(until + 1s 兜底)

同步至 web-antd / web-ele 两端
2026-05-03 16:35:03 +08:00
YunaiV
a3d8e4bfc1 feat: 添加包含和不包含条件选项到常量定义 2026-05-03 11:04:58 +08:00
YunaiV
e385823d46 fix: 修复 Vben5.0 form-create 多图上传校验拒绝 png/jpeg/gif,isImage 兼容 MIME 与扩展名两种 accept 写法 2026-05-02 22:56:38 +08:00
YunaiV
897220e19a fix: 修复 Vben5.0 download 接口 token 过期不触发刷新,导出/下载文件变成「账号未登录」JSON;web-antd / web-ele / web-naive / web-tdesign 加 Blob 业务错误嗅探拦截器 2026-05-02 20:36:00 +08:00
YunaiV
b293e112c6 fix: 修复 MALL 商品保存时 SKU 价格被反复 *100 的漂移 2026-05-02 20:23:43 +08:00
YunaiV
627e31f1b0 fix: 修复 Vben5.0 CRM 合同配置 / 客户公海规则配置表单 label 错用 labelClass: 'w-100',Tailwind v4 动态间距下被解析为 400px 撑爆 w-1/4 容器,挤掉 RadioGroup 输入区,改用 labelWidth: 120 2026-05-02 19:44:21 +08:00
YunaiV
8020b4b743 fix: 修复 MALL 商品列表/选择器「价格」列展示原始的「分」(web-antd / web-ele)
商品列表 [mall/product/spu/data.ts] 与商品选择器 [mall/product/spu/components/spu-select-data.ts]
的「价格」列原先 formatter: 'formatAmount2',只做了小数格式化、漏了「分转元」,导致
19900 直接显示成 19900.00(应为 199.00 元)。同文件的 marketPrice / costPrice 已正确使用
fenToYuan,唯独 price 漏了。

顺手将 spu/data.ts 的 price / marketPrice / costPrice 三列从手写闭包统一切到已注册的
formatFenToYuanAmount formatter,单位「元」从 cell 后缀挪进列标题(如「价格(元)」),
减少 8 处闭包并复用平台统一的 null/NaN 处理。
2026-05-02 19:38:50 +08:00
YunaiV
228c5463da fix: 修复 IoT 物模型表单 Form.Item 嵌套字段 name 误用点号字符串,事件类型等校验始终失败 / resetFields 写错路径 2026-05-02 19:27:35 +08:00
YunaiV
50ee691191 fix: 修复 web-ele 下 ApiSelect / ApiTreeSelect 误用 antd 的 fieldNames 写法导致下拉无内容
element-plus 适配器走 ApiComponent,识别的是 labelField / valueField / childrenField;
而 fieldNames 是 antd 风格写法,从 web-antd 复制过来未做适配,导致内部数据无法被映射成
{ label, value, children },下拉树/列表显示为空。

涉及:
- CRM 客户 / 联系人 / 线索 新增表单的「地址」树
- CRM 商机状态「应用部门」、产品「产品类型」树
- ERP 销售出库的 客户 / 销售人员 / 结算账户 / 产品 / 创建人 下拉
2026-05-02 18:55:48 +08:00
YunaiV
eda6ffaf1e fix: 修复 web-ele 下 ApiSelect / ApiTreeSelect 误用 antd 的 fieldNames 写法导致下拉无内容
element-plus 适配器走 ApiComponent,识别的是 labelField / valueField / childrenField;
而 fieldNames 是 antd 风格写法,从 web-antd 复制过来未做适配,导致内部数据无法被映射成
{ label, value, children },下拉树/列表显示为空。

涉及:
- CRM 客户 / 联系人 / 线索 新增表单的「地址」树
- CRM 商机状态「应用部门」、产品「产品类型」树
- ERP 销售出库的 客户 / 销售人员 / 结算账户 / 产品 / 创建人 下拉
2026-05-02 18:53:11 +08:00
xingyu
f542db27f9 !340 feat: 商城订单发货后可再修改发货信息
Merge pull request !340 from hice/master
2026-04-13 08:47:29 +00:00
xingyu4j
b2cf1646a4 fix: lint 2026-04-13 16:46:44 +08:00
xingyu4j
adecddae67 Merge branch 'main' of https://github.com/vbenjs/vue-vben-admin 2026-04-13 16:46:22 +08:00
xingyu4j
a653e428f3 Merge branch 'main' of https://github.com/vbenjs/vue-vben-admin 2026-04-13 16:45:32 +08:00
hice
eb62e63a04 feat: 商城订单发货后可再修改发货信息 2026-04-13 16:31:48 +08:00
Caisin
ccabbf0e97 feat: enable project-scoped preferences extension tabs (#7803)
* feat: enable project-scoped preferences extension tabs

Add a typed extension schema so subprojects can define extra settings,
render them in the shared preferences drawer only when configured, and
consume them in playground as a real feature demo. Extension labels now
follow locale keys instead of hardcoded app-specific strings.

Constraint: Reuse the shared preferences drawer and field blocks
Rejected: Add app-specific fields to core preferences | too tightly coupled
Rejected: Inline localized label objects | breaks existing locale-key flow
Confidence: high
Scope-risk: moderate
Reversibility: clean
Directive: Keep extension labels as locale keys rendered via $t in UI
Tested: Vitest preferences tests
Tested: Turbo typecheck for preferences, layouts, web-antd, and playground
Tested: ESLint for touched preferences and playground files
Not-tested: Manual browser interaction in playground preferences drawer

* fix: satisfy lint formatting for preferences extension demo

Adjust the playground preferences extension demo template so formatter and
Vue template lint rules agree on the rendered markup. This keeps CI green
without changing runtime behavior.

Constraint: Must preserve the existing demo behavior while fixing CI only
Rejected: Disable the Vue newline rule | would weaken shared lint guarantees
Confidence: high
Scope-risk: narrow
Reversibility: clean
Directive: Prefer computed/template structures that avoid formatter-vs-lint conflicts
Tested: pnpm run lint
Not-tested: Manual browser interaction in playground preferences extension demo

* fix: harden custom preferences validation and i18n labels

Tighten custom preferences handling so numeric extension fields respect
min, max, and step constraints. Number inputs now ignore NaN values,
and web-antd extension metadata uses locale keys instead of raw strings.
Also align tip-based hover guards in shared preference inputs/selects.

Constraint: Keep fixes scoped to verified findings only
Rejected: Broader refactor of preferences field components | not needed for these fixes
Confidence: high
Scope-risk: narrow
Reversibility: clean
Directive: Reuse the same validation path for updates and cache hydration
Tested: Vitest preferences tests
Tested: ESLint for touched preferences and widget files
Tested: Typecheck for web-antd, layouts, and core preferences
Not-tested: Manual browser interaction for all preference field variants

* fix: remove localized default from playground extension config

Drop the hardcoded Chinese default value from the playground extension
report title field and fall back to an empty string instead. This keeps
extension config locale-neutral while preserving localized labels and
placeholders through translation keys.

Constraint: Keep the fix limited to the verified localized default issue
Rejected: Compute the default from runtime locale in config | unnecessary for this finding
Confidence: high
Scope-risk: narrow
Reversibility: clean
Directive: Avoid embedding localized literals in extension default values
Tested: ESLint for playground/src/preferences.ts
Tested: Oxfmt check for playground/src/preferences.ts
Not-tested: Manual playground preferences interaction

* docs: document project-scoped preferences extension workflow

Add Chinese and English guide sections explaining how to define,
initialize, read, and update project-scoped preferences extensions.
Also document numeric field validation and point readers to the
playground demo for a complete example.

Constraint: Keep this docs-only and aligned with the shipped API
Rejected: Update only Chinese docs | would leave English docs inconsistent
Confidence: high
Scope-risk: narrow
Reversibility: clean
Directive: Keep zh/en examples and playground demo paths synchronized
Tested: git diff --check; pnpm build:docs
Not-tested: Manual browser review of the rendered docs site

* fix: harden custom preferences defaults and baselines

Use a locale-neutral default for the web-antd report title.
Also stop preference getters from exposing mutable baseline
or extension schema objects, and add a regression test for
external mutation attempts.

Constraint: Keep behavior compatible with the shipped preferences API
Rejected: Return raw refs with readonly typing only | callers could still mutate internals
Confidence: high
Scope-risk: narrow
Reversibility: clean
Directive: Keep defensive copies for baseline and schema getters unless storage semantics change
Tested: eslint, oxlint, targeted vitest, filtered typecheck, git diff --check
Not-tested: Full monorepo typecheck and test suite

* test: relax custom preference cache key matching

Avoid coupling the custom-number cache test to one exact
localStorage key string. Match the intended cache lookup
more loosely so the test still verifies filtering behavior
without depending on the full namespaced cache key.

Constraint: Focus the test on cache filtering behavior
Rejected: Assert one exact key | brittle with namespace changes
Confidence: high
Scope-risk: narrow
Reversibility: clean
Directive: Prefer behavior tests over literal storage keys
Tested: targeted vitest, eslint, git diff --check
Not-tested: Full monorepo test suite

---------

Co-authored-by: caisin <caisin@caisins-Mac-mini.local>
2026-04-13 15:11:57 +08:00
Caisin
5b84ac5b13 feat(form-ui): support schema valueFormat for getValues payload shaping (#7804)
* feat(@vben-core/form-ui): support schema valueFormat on getValues

Some form fields emit UI-friendly structures such as time-range arrays,
while consumers and backend APIs often need a different payload shape.
This adds schema-level `valueFormat` hooks so `getValues()` can
normalize field output at read time without forcing callers to
post-process every submission path.

Constraint: Must preserve existing range-time mapping and nested field behavior
Constraint: Must not mutate live vee-validate form state while formatting output
Rejected: Global formatter config | too coarse for per-field payload shaping
Rejected: Post-submit-only transform | misses reset/query/change handlers
Confidence: high
Scope-risk: narrow
Reversibility: clean
Directive: Keep `getValues()` output derivation side-effect free
Directive: Clone raw form values before formatting derived payloads
Tested: vitest form-api test for valueFormat and existing getValues paths
Tested: oxlint on changed form-ui source and test files
Not-tested: Full repo typecheck baseline has unrelated .vue module resolution errors

* fix(@vben-core/form-ui): restore mount compatibility and share field path parsing

Follow-up review found two real regressions and one missing assertion in the
new value formatting flow. `FormApi.mount()` had become breaking by requiring
`componentRefMap`, and delete path resolution duplicated field-name parsing
instead of sharing the reader grammar. This patch restores backward
compatibility, centralizes field-name path parsing, and extends the test to
prove formatting does not mutate live form values.

Constraint: Must preserve current valueFormat behavior and nested field support
Constraint: Must not reintroduce mutation of live vee-validate values
Rejected: Keep duplicated delete parsing | risks grammar drift from read path
Rejected: Only loosen mount tests | would leave consumer-facing API breakage
Confidence: high
Scope-risk: narrow
Reversibility: clean
Directive: Reuse shared field-name parsing for read/delete semantics in form-ui
Tested: vitest form-api test suite
Tested: oxlint on changed form-ui files
Not-tested: Full repo typecheck baseline has unrelated .vue module resolution errors
EOF && git push hekx feature-form-value-format

* fix(@vben-core/form-ui): clear stale component refs on unmount

A follow-up review found that `unmount()` left the private component ref map
populated. Because `mount()` now accepts an optional `componentRefMap`, a later
mount without a new map could silently reuse stale refs from a prior form
instance. This change clears the ref map on unmount and adds a regression test
covering remount behavior without a new ref map.

Constraint: Must preserve backward-compatible optional `mount()` ref map behavior
Constraint: Focus and field-ref lookups must not observe stale refs after unmount
Rejected: Clear refs only during next mount | stale state would still leak between lifecycle calls
Rejected: Remove mount fallback entirely | would undo the compatibility fix
Confidence: high
Scope-risk: narrow
Reversibility: clean
Directive: When mount falls back to internal refs, unmount must always reset that cache
Tested: vitest form-api test suite
Tested: oxlint on changed form-api source and test files
Not-tested: Full repo typecheck baseline has unrelated .vue module resolution errors

* refactor(@vben-core/form-ui): trim redundant valueFormat plumbing

Review feedback identified a few small cleanups in the value formatting path.
This removes an unnecessary shallow clone in `getValues()`, reuses the
already-parsed `rawKey` from `resolveFieldNamePath()` instead of re-resolving
it in multiple helpers, and clarifies the `FormValueFormat` contract for
undefined-as-delete decomposition behavior.

Constraint: Must not change runtime valueFormat behavior or payload shape
Constraint: Documentation and helper cleanup should stay behavior-preserving
Rejected: Leave duplicate raw-key resolution in place | adds needless parsing churn
Rejected: Expand the formatter API further | outside the scope of this cleanup
Confidence: high
Scope-risk: narrow
Reversibility: clean
Directive: Keep read/format helper plumbing lean and avoid duplicate field-name parsing
Tested: vitest form-api test suite
Tested: oxlint on changed form-ui source and test files
Not-tested: Full repo typecheck baseline has unrelated .vue module resolution errors

* feat(@vben-core/form-ui): document valueFormat with live examples

The new `valueFormat` feature needed a concrete usage path in both the
playground and the docs so users can understand how raw component values differ
from the final payload returned by `getValues()`. This adds a dedicated form
example, wires it into the playground menu, and documents the API with an
interactive docs demo. The preview panels now stay in sync when values are set,
reset, or submitted.

Constraint: Must demonstrate both return-value and setValue decomposition flows
Constraint: Example previews must react to setValues, reset, and manual edits
Rejected: Only document via markdown snippet | insufficient for verifying live payload behavior
Rejected: Reuse an existing basic form page | would bury feature-specific behavior
Confidence: high
Scope-risk: narrow
Reversibility: clean
Directive: Keep playground and docs demos behaviorally aligned when extending valueFormat examples
Tested: eslint on playground/docs valueFormat demo files and route module
Tested: oxlint on playground route module
Not-tested: Full docs/playground app runtime was not launched in this session

* chore(@vben-core/form-ui): normalize valueFormat demo formatting

The previous feature/docs commit left a few formatter-only adjustments unstaged
after hooks rewrote line wrapping in the new demo and docs pages. This commit
captures those final non-behavioral formatting updates so the branch matches the
current working tree.

Constraint: Must not change runtime behavior or docs meaning
Rejected: Leave post-hook diffs unstaged | branch would not reflect local state
Confidence: high
Scope-risk: narrow
Reversibility: clean
Directive: After hook-driven rewrites, verify the working tree is clean before final push
Tested: Git diff inspection of remaining changes
Not-tested: No additional runtime verification needed; formatting-only follow-up
EOF && git push hekx feature-form-value-format

* fix(@vben-core/form-ui): remove docs demo dayjs dependency

The docs valueFormat demo imported `dayjs` directly even though the docs
package does not declare it as a dependency. That caused `@vben/docs:build`
to fail in CI during VitePress bundling. This change removes the direct
import, keeps the preview formatter generic for day-like values, and drops
the docs-only preset button that required constructing dayjs instances.

Constraint: Docs build must succeed without adding new package dependencies
Constraint: Playground example should remain unchanged and fully interactive
Rejected: Add dayjs to docs dependencies | unnecessary for a small display demo
Rejected: Externalize dayjs in VitePress build | hides a package boundary issue
Confidence: high
Scope-risk: narrow
Reversibility: clean
Directive: Docs demos should avoid imports only available through transitive deps
Tested: pnpm exec eslint docs/src/demos/vben-form/value-format/index.vue
Tested: pnpm --dir docs run build
Not-tested: No browser-side manual verification of the docs demo in this session

---------

Co-authored-by: caisin <caisin@caisins-Mac-mini.local>
2026-04-13 11:22:04 +08:00
芋道源码
f610bd690b !339 增加 iot、mes 的说明
Merge pull request !339 from 芋道源码/dev
2026-04-12 13:29:10 +00:00
YunaiV
76f9d3d9fc merge: 合并 master 分支,解决 isUrl 冲突(保留从 @vben/utils 导出的方式)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-12 21:27:05 +08:00
YunaiV
1e6c39a4c6 feat:增加 iot 模块 2026-04-12 21:24:37 +08:00
YunaiV
7a1f8da68f feat:增加 iot 模块 2026-04-12 21:24:19 +08:00
YunaiV
51cae9b00c feat(mes):增加 mes 模块 2026-04-12 16:45:38 +08:00
YunaiV
7cbeaa8390 feat(mes):增加 mes 模块 2026-04-12 16:44:53 +08:00
Caisin
6be3a0e204 feat(common-ui): add labelFn support to ApiComponent (#7801)
* feat: allow api-component labels to be derived from option data

ApiComponent already normalizes option records into the label/value shape used by
consuming controls, but label text could only come from a single field. Add
labelFn so callers can build labels from the full option record while keeping
labelField as the fallback path.

This keeps the change inside the existing component instead of introducing a
wrapper, and it also normalizes direct options through the same transform path
as API-loaded options for consistent behavior.

Constraint: Must extend the existing ApiComponent API instead of adding a second
Constraint: wrapper component
Rejected: Add a separate ApiLabelComponent wrapper |
Rejected: extra surface area for one option-mapping concern
Confidence: high
Scope-risk: narrow
Reversibility: clean
Directive: Keep labelFn as a presentation transform and preserve labelField
Directive: fallback for existing callers
Tested: pnpm exec eslint api-component.vue index.ts types.ts
Tested: pnpm exec vue-tsc --noEmit -p packages/effects/common-ui/tsconfig.json
Not-tested: runtime integration in consuming select/tree-select components

* Update packages/effects/common-ui/src/components/api-component/api-component.vue

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

---------

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2026-04-12 14:29:18 +08:00
过冬
a9b76ba2ed fix: antdv-next message/notification 跟随暗色主题 (#7799) 2026-04-12 11:51:23 +08:00
Jin Mao
53ccec1d80 fix: 修复VITE_APP_TITLE变量替换语法
- 将index.html中的<%= VITE_APP_TITLE %>替换为%VITE_APP_TITLE%
- 更新web-antd、web-antdv-next、web-ele、web-naive、web-tdesign应用
- 修改文档中loading组件的VITE_APP_TITLE引用方式
- 修复vite-config插件中默认加载模板的变量语法
- 统一所有应用和模板中的环境变量引用格式
2026-04-11 14:29:18 +08:00
Jin Mao
4af5d6152b chore: fix actions error 2026-04-11 14:13:13 +08:00
xingyu4j
307781f437 chore: update deps 2026-04-10 22:16:33 +08:00
xingyu4j
1326994d8e fix: tailwindcss lint config 2026-04-10 22:14:09 +08:00
xingyu4j
fd70a3f3e0 fix: lint 2026-04-10 22:01:01 +08:00
xingyu4j
298930b0d7 chore: remove vite-plugin-html 2026-04-10 22:00:33 +08:00
xingyu4j
54d95b8761 fix: check deps 2026-04-10 21:23:24 +08:00
xingyu4j
4a16040d3e chore: update deps 2026-04-10 21:18:26 +08:00
xingyu4j
ee95548340 fix: tailwindcss lint 2026-04-10 21:13:04 +08:00
xingyu4j
320e687bad fix: ts config 2026-04-10 21:08:54 +08:00
Jin Mao
ad43c6817e fix: 配置 TypeScript 构建根目录
- 添加 rootDir 编译选项指向 ./src 目录
- 保持现有编译配置不变
- 排除测试文件和 node_modules 目录
2026-04-09 14:48:26 +08:00
Jin Mao
c8747c079d chore: update deps 2026-04-08 18:25:39 +08:00
dullathanol
224bfe7fcb chore: 修正注释 2026-04-08 10:19:53 +08:00
dullathanol
f443bfbc7b fix: tailwindcss config 2026-04-08 10:11:05 +08:00
过冬
195b2ea0d2 Merge branch 'vbenjs:main' into main 2026-04-08 09:34:24 +08:00
Jin Mao
4150479549 chore: fix lint 2026-04-08 07:20:52 +08:00
dullathanol
5ebf513498 fix: 修正 Modal/Drawer 中 loading 属性注释 2026-04-07 12:28:57 +08:00
dullathanol
4e4ffc439c feat: 支持 overflow 配置以允许拖拽超出可视区 2026-04-07 11:41:39 +08:00
dullathanol
ad7ed50b52 fix: 弹窗组件拖拽后全屏位置异常 2026-04-06 22:26:27 +08:00
Jin Mao
92f8916225 chore: fix lint
- 关闭 vitest/require-mock-type-parameters 规则
2026-04-06 21:20:53 +08:00
dullathanol
7e4edd270d fix: 补全 ComponentPropsMap 与 Vxe 表格表单链路的类型 2026-04-05 19:03:03 +08:00
dullathanol
332ff44219 fix: 修复 FormField 在 SFC 中的运行时异常 2026-04-05 03:05:01 +08:00
dullathanol
834ce3efc0 fix: 修复部分情况 component 类型丢失问题 2026-04-05 01:59:17 +08:00
dullathanol
5211f5065d feat: 表单 Schema 支持组件 Props 映射泛型,同步适配VxeGrid 2026-04-04 23:40:27 +08:00
dullathanol
96d6f89732 refactor: 简化 componentProps 回调的类型写法 2026-04-03 15:02:32 +08:00
dullathanol
6ab06584eb fix: 函数式 componentProps 按已注册 component 的 Props 校验返回值 2026-04-03 13:36:03 +08:00
dullathanol
a6433c2b50 feat: Schema 中 componentProps 随注册组件联动类型提示 2026-04-03 01:39:49 +08:00
墨苒孤
128a131797 fix(form): 修复表单示例中 switch 组件无法切换的问题 (#7636) (#7763) 2026-04-02 18:18:56 +08:00
橙子
c775d7ed80 fix: interface DropdownMenuProps don‘t have key prop (#7757) 2026-04-02 08:33:26 +08:00
HaroldZhangCode91
b8b4308e1c feat: fix oxlint error for oxlint upgrade (#7756)
1. remove unknown rule out of oxlint
2. add the corresponding back to eslint-config
3. fixed the eslint error for package.json
2026-04-01 19:28:57 +08:00
墨苒孤
80d6e2255f fix: make search case-insensitive (#7689) (#7755) 2026-04-01 19:17:36 +08:00
橙子
4e0968d4b7 perf: replace onUnMounted to tryOnScopeDispose (#7747)
* perf: replace `onUnMounted` to `tryOnScopeDispose`

* perf: replace `onUnMounted` to `tryOnScopeDispose`
2026-04-01 10:30:54 +08:00
Jin Mao
44a5809a46 chore: update deps 2026-04-01 08:10:49 +08:00
xingyu4j
2428fb1407 fix: extension-document 2026-03-30 19:50:44 +08:00
xingyu4j
bb78882f72 feat(@vben/plugins): add tiptap rich text editor 2026-03-30 19:36:29 +08:00
xingyu4j
df88a23102 chore: typescript config is expired‌ 2026-03-30 18:26:07 +08:00
xingyu4j
ca5f360231 chore: update deps 2026-03-30 18:24:25 +08:00
Anonymouscen
147b50ec45 chore: 修复名称错误问题,帐户改为账户 (#7735) 2026-03-29 14:17:00 +08:00
橙子
34439dce4e fix: history search can not remove (#7732) 2026-03-29 14:16:32 +08:00
Jin Mao
9a22027b35 chore: 更新 GitHub Actions 依赖版本
- 将 pnpm/action-setup 从 v4 升级到 v5
- 将 release-drafter/release-drafter 从 v6 升级到 v7
- 更新所有工作流中的依赖版本以确保兼容性
2026-03-25 17:58:47 +08:00
Jin Mao
282a102826 chore: fix lint 2026-03-25 17:31:33 +08:00
Jin Mao
417e6c2ade chore: fix lint && typecheck 2026-03-25 16:33:41 +08:00
Jin Mao
9d69d7f46c Merge branch 'main' into chore/plugins 2026-03-25 15:19:21 +08:00
Jin Mao
87d1593a1f refactor(effects): 扩展 echarts 类型定义并优化插件配置合并逻辑
- 添加 PieSeriesOption 和 RadarSeriesOption 到 echarts 类型定义
- 添加 LegendComponentOption 和 ToolboxComponentOption 组件选项
- 重构 providePluginsOptions 函数实现深合并逻辑
- 优化 vxe-table 初始化中的表单工厂优先级处理
- 调整 playground 中的 import 语句顺序和格式
2026-03-25 15:16:24 +08:00
过冬
7fbdf3d914 fix(@vben/common-ui): 修复 JsonViewer 在 Vite 下因 CJS 默认导出未解包导致的渲染失败 (#7728)
* fix: lint

* fix(@vben/common-ui): 修复 JsonViewer 在 Vite 下因 CJS 默认导出未解包导致的渲染失败
2026-03-25 14:54:14 +08:00
JyQAQ
65287cf4b7 feat: Dockerfile构建调整 (#7727)
Co-authored-by: 吉远 <jiyuan@txhmo.com>
2026-03-25 14:53:26 +08:00
Jin Mao
6da3017dcf feat: 插件新增依赖注入功能 2026-03-25 14:46:55 +08:00
Jin Mao
5c02057198 refactor(effects): 替换上下文创建逻辑为全局选项管理
- 移除 createContext 依赖并实现全局插件选项存储
- 添加 providePluginsOptions 函数用于提供插件配置
- 添加 injectPluginsOptions 函数用于注入插件配置
- 添加 resetPluginsOptions 函数用于重置插件配置
- 更新 package.json 导出配置添加主入口点定义
2026-03-25 14:42:40 +08:00
Jin Mao
a7ca7cdb9f refactor(vxe-table): 重构 useTableForm 函数实现并优化初始化逻辑
- 将 useTableForm 从箭头函数改为普通函数声明
- 简化表单工厂函数的获取逻辑,支持上下文注入
- 移除初始化时的重复上下文注入代码
- 改进错误提示信息的准确性
- 调整代码结构以提高可读性和维护性
- 将 SetupVxeTable 接口中的 useVbenForm 字段改为可选参数
2026-03-25 14:42:31 +08:00
Jin Mao
79408d406d feat: 添加插件模块导出
- 导出 types 模块
- 导出 plugins-context 模块
2026-03-25 13:33:12 +08:00
Jin Mao
e555f71bf8 feat(vxe-table): 集成表格插件并优化初始化配置
- 添加了完整的 vxe-table 插件功能实现
- 实现了插件上下文选项注入机制
- 重构了 useTableForm 工厂函数的初始化逻辑
- 支持通过参数或上下文注入 useVbenForm 函数
- 优化了组件导入和类型定义
- 添加了插件使用文档说明
- 移除了未使用的组件注释代码
- 统一了字符串引号格式为双引号
2026-03-25 13:32:21 +08:00
Jin Mao
4c320346c3 docs(motion): 添加 motion 插件文档
- 创建了 Motion 插件的 README.md 文件
- 添加了插件导出组件和类型的说明表格
- 提供了插件的基本使用示例代码
- 包含了 MotionOptions 和 MotionVariants 类型导入说明
2026-03-25 13:27:10 +08:00
Jin Mao
e5ec88169a refactor: 重构 ECharts 插件类型定义和导出结构
- 将 ECOption 类型定义移至独立的 types.ts 文件
- 修改 echarts.ts 文件导入 ECOption 类型而不是定义
- 更新 index.ts 添加 types 导出
- 移除 echarts.ts 中冗余的类型导入和定义
- 添加完整的 README.md 文档说明插件使用方法
- 优化代码组织结构提高可维护性
2026-03-25 13:27:02 +08:00
Jin Mao
914711ae04 feat: 添加插件上下文和类型定义
- 创建了插件选项的 createContext 功能
- 定义了 VbenPluginsOptions 接口结构
- 添加了表单、模态框、消息和组件的插件选项接口
- 提供了插件选项的注入和提供功能
2026-03-25 13:25:19 +08:00
Jin Mao
4c1e3b9548 Merge branch 'fork/Voidlurk/fix-default' 2026-03-24 10:36:40 +08:00
Jin Mao
9cd3987475 Merge branch 'main' into fix 2026-03-24 10:24:18 +08:00
xueyitt
47a853330d feat: ApiSelect增加shouldFetch控制,在api请求之前的判断是否允许请求的回调函数 (#7713) 2026-03-24 10:22:02 +08:00
xueyitt
2aced2f659 feat: 增加table 帮助信息help通过表单values动态展示内容 (#7712) 2026-03-24 10:20:43 +08:00
Jin Mao
cd955df02f chore: fix lint 2026-03-24 10:19:24 +08:00
Bk201
0a819df2bf fix bug
[Vue warn]: Invalid prop: custom validator check failed for prop "variant".
2026-03-24 03:01:00 +08:00
xingyu4j
67afcadcf0 fix: rollup -> rolldown 2026-03-23 17:51:46 +08:00
xingyu4j
1128ef5acd chore: update deps 2026-03-23 17:13:39 +08:00
xingyu
ca39b8d0c9 !337 Merge branch 'main' of <a href="https://gitee.com/link?target=https%3A%2F%2Fgithub.com%2Fvbenjs%2Fvue-vben-admin">https://github.com/vbenjs/vue-vben-admin</a> into vite8
Merge pull request !337 from xingyu/vite8
2026-03-23 08:57:12 +00:00
xingyu4j
fece74f744 Merge branch 'main' of https://github.com/vbenjs/vue-vben-admin into vite8 2026-03-23 16:55:27 +08:00
雪忆天堂
6b3506f128 feat: table 类型VxeTableGridColumns替代VxeTableGridOptions['columns']魔法值写法 2026-03-23 10:06:35 +08:00
雪忆天堂
5613dcef99 feat: table允许通过props动态变化data数据 2026-03-23 10:05:32 +08:00
MistyMoon
3528517fe0 fix(project): fix sub sidebar theme in two-column menu (#7708)
- Reset light tokens for nested sub sidebars.
- Align the extra title logo theme with sidebarThemeSub.
2026-03-22 09:15:56 +08:00
Jin Mao
2a5b520ec9 chore: update deps 2026-03-22 09:15:27 +08:00
lmx
e2fb3602f1 fix: 修复菜单项外部链接跳转问题
- 引入 isHttpUrl 工具函数用于判断 URL 类型
- 添加 isHttp 计算属性检测父路径是否为 HTTP 链接
- 修改菜单项渲染逻辑,对外部链接直接使用原地址跳转
- 调整 HTML 结构,将链接属性移到正确位置
- 确保内部路由和外部链接都能正常工作
2026-03-19 23:56:13 +08:00
lmx
da3580cbd7 Merge remote-tracking branch 'origin/main' 2026-03-19 22:07:20 +08:00
xingyu
0c300d040c fix: tailwindcss config (#7693)
* chore: update deps

* fix: tailwindcss config

* fix: lint

* fix: lint

* chore: update deps
2026-03-19 15:51:09 +08:00
橙子
d43a3729c3 fix: playground(drawer) comment (#7695) 2026-03-19 09:03:40 +08:00
Jin Mao
bed97a84d8 revert: "fix: sass-embedded@1.98.0 在 macOS 13 会直接崩 (#7692)" 2026-03-19 09:02:28 +08:00
afe1
b908076846 fix: sass-embedded@1.98.0 在 macOS 13 会直接崩 (#7692)
* fix: catelog

* fix: system
2026-03-18 20:18:25 +08:00
Noah Lan
885a0a9a00 fix: build.mjs commands could not be executed correctly. (#7682)
* fix: Fix issue where commands could not be executed correctly when they contained spaces

* chore: oxfmt
2026-03-17 18:59:35 +08:00
Jin Mao
340baf4f0b chore: 处理合并的一些问题 2026-03-16 20:50:01 +08:00
Jin Mao
82cda0edaa Merge branch 'fork/xingyu4j/tsdown'
# Conflicts:
#	pnpm-lock.yaml
2026-03-16 20:36:27 +08:00
Jin Mao
9fe875355a fix: 修复构建脚本中的进程执行问题
- 移除平台特定的 pnpm 命令路径检测逻辑
- 统一使用 'pnpm' 命令执行
- 启用 shell 模式以正确处理命令执行
- 确保子进程继承正确的标准输入输出流
2026-03-16 20:30:27 +08:00
Jin Mao
5f21bd2036 Merge branch 'fork/jyqwq/feature/antd上传组件支持拖拽排序' 2026-03-16 19:54:08 +08:00
Sun
5b5ea6d2d8 chore: Configure the ESLint auto-repair feature (#7670) 2026-03-16 18:26:42 +08:00
JyQAQ
3dcfd23036 perf: 裁剪组件默认输出格式调整 (#7673)
Co-authored-by: 吉远 <jiyuan@txhmo.com>
2026-03-16 18:25:04 +08:00
xingyu
186914bcac fix: vxe i18n (#7675)
* chore: engines node

* chore: update deps

* fix: oxlint

* chore: fix lint issues

* chore: update deps

* fix: vxe i18n
2026-03-16 18:24:28 +08:00
吉远
4b3205fee8 feat: antd Upload 组件上传文件组支持拖拽排序 2026-03-16 15:01:43 +08:00
lmx
e4453841db fix: 修复在vue-router 的模式hash复制路径不对 2026-03-16 01:32:11 +08:00
xingyu4j
32db4cbd11 fix: build warn 2026-03-15 23:11:59 +08:00
xingyu4j
5558249cd3 chore: unbuild 2026-03-15 23:11:41 +08:00
xingyu4j
86b636ae54 fix(@vben/vite-config): externalize node utils dependency 2026-03-15 22:47:28 +08:00
xingyu4j
c9f7154524 chore(tsdown): remove unbuild leftovers 2026-03-15 22:04:48 +08:00
xingyu4j
d72f872369 refactor(tsdown): migrate styled ui-kit packages 2026-03-15 21:42:44 +08:00
xingyu4j
b300011d07 refactor(tsdown): migrate ui-kit vue packages 2026-03-15 21:30:13 +08:00
xingyu4j
3946253d6e chore(tsdown): align stub scripts and package exports 2026-03-15 21:17:41 +08:00
xingyu4j
11fc367845 chore: migrate vite build to tsdown 2026-03-15 21:04:12 +08:00
xingyu4j
bdc65cc250 chore: update deps 2026-03-15 21:03:41 +08:00
xingyu4j
70dad0f600 fix(node-utils): avoid find-up sync API in monorepo root lookup 2026-03-15 20:50:07 +08:00
xingyu4j
26e9aa244b fix(vite): adapt rolldown workspace resolution 2026-03-15 20:27:01 +08:00
xingyu4j
913f77fd2f chore(pnpm): sync lockfile for tsdown migration 2026-03-15 19:41:17 +08:00
xingyu4j
dba774e1c7 chore(vsh): migrate build to tsdown 2026-03-15 19:41:00 +08:00
xingyu4j
af09d652a3 chore(turbo-run): migrate build to tsdown 2026-03-15 19:40:54 +08:00
xingyu4j
0babdfbc44 chore(core-preferences): migrate build to tsdown 2026-03-15 19:40:48 +08:00
xingyu4j
f154d53be9 chore(core-composables): migrate build to tsdown 2026-03-15 19:40:42 +08:00
xingyu4j
ed3cd2fe3b chore(core-typings): migrate build to tsdown 2026-03-15 19:40:36 +08:00
xingyu4j
59912a00bc chore(core-shared): migrate build to tsdown 2026-03-15 19:40:29 +08:00
xingyu4j
675d8b0179 chore(core-icons): migrate build to tsdown 2026-03-15 19:40:17 +08:00
xingyu4j
a1ca296fc0 chore(node-utils): migrate build to tsdown 2026-03-15 19:40:09 +08:00
xingyu4j
c1b1fe90fd chore(oxlint-config): migrate build to tsdown 2026-03-15 19:39:59 +08:00
xingyu4j
30b5610a73 chore(oxfmt-config): migrate build to tsdown 2026-03-15 19:39:51 +08:00
xingyu4j
db9b9df8f7 chore(eslint-config): migrate build to tsdown 2026-03-15 19:39:43 +08:00
xingyu4j
ae6a75e913 build: migrate core ts packages to tsdown 2026-03-15 18:13:49 +08:00
xingyu
37d72c1628 fix: oxlint config (#7661)
* chore: engines node

* chore: update deps

* fix: oxlint

* chore: fix lint issues
2026-03-15 17:41:47 +08:00
xingyu4j
ab3e6bb37c chore: fix lint issues 2026-03-15 16:35:34 +08:00
xingyu4j
9ddb899a1a fix: oxlint 2026-03-15 16:23:18 +08:00
xingyu4j
1f0cda8aee chore: update deps 2026-03-15 12:35:42 +08:00
xingyu4j
90ae85317c chore: engines node 2026-03-15 12:33:23 +08:00
Jin Mao
a8ae891aff chore: update pnpm-lock 2026-03-15 03:57:55 +08:00
Jin Mao
1f2df3e944 Merge branch 'fork/Lmx1220/main'
# Conflicts:
#	pnpm-lock.yaml
2026-03-15 03:53:43 +08:00
Jin Mao
e39a432210 Merge branch 'fork/caodachen/fix_useEcharts' 2026-03-15 03:50:21 +08:00
xingyu4j
6b3bcee582 docs(@vben/docs): sync component docs with current APIs 2026-03-14 21:34:48 +08:00
xingyu4j
6c274b75b8 docs(@vben/docs): align guide docs with current tooling 2026-03-14 21:33:55 +08:00
xingyu4j
278032c94b docs: remove docs 2026-03-14 20:29:49 +08:00
xingyu4j
23a8982f5c chore: add prepare 2026-03-14 20:19:34 +08:00
xingyu4j
5df6c32d04 fix: lint 2026-03-14 20:14:35 +08:00
xingyu4j
7cae330c3c chore: deps 2026-03-14 19:48:49 +08:00
xingyu4j
100aaa4cee chore: vsh lint 2026-03-14 19:48:40 +08:00
xingyu4j
ead0b73e7b fix: lint 2026-03-14 19:47:02 +08:00
xingyu4j
2ace846e38 chore: recommend vscode yaml extension 2026-03-14 19:41:28 +08:00
xingyu4j
1d98393f0c chore: recommend vscode eslint extension 2026-03-14 19:39:37 +08:00
xingyu4j
c48ee2a364 revert: restore vscode extensions comments 2026-03-14 19:38:09 +08:00
xingyu4j
95d1e8432f fix: surface eslint diagnostics in vscode 2026-03-14 19:36:27 +08:00
xingyu4j
4d59ac78bd fix: lint 2026-03-14 19:34:22 +08:00
xingyu4j
f1143e134e fix: match root json files in oxfmt overrides 2026-03-14 19:33:55 +08:00
xingyu4j
e3e869faee fix: align oxfmt json commas with lint 2026-03-14 19:31:01 +08:00
xingyu4j
8350e72393 fix: align json formatter with lint rules 2026-03-14 19:28:25 +08:00
xingyu4j
15f74b9d97 refactor: drop unused turbo eslint shim 2026-03-14 19:20:39 +08:00
xingyu4j
55b54e24fe refactor: migrate command lint to oxlint 2026-03-14 19:13:50 +08:00
xingyu4j
46b4ce81e4 refactor: shrink eslint fallback layer 2026-03-14 19:10:22 +08:00
xingyu4j
7a723d03d0 fix: tailwindcss 2026-03-14 18:48:30 +08:00
xingyu4j
9d6fbfd0d6 refactor: replace simple px utility styles 2026-03-14 18:43:00 +08:00
xingyu4j
8fd6bf47b1 revert: restore px-based calc utilities 2026-03-14 18:36:31 +08:00
xingyu4j
f25f3a34d0 refactor: replace px calc spacing utilities 2026-03-14 18:31:35 +08:00
xingyu4j
2823848fae refactor: migrate spacing utilities to tailwind v4 syntax 2026-03-14 18:27:16 +08:00
xingyu4j
b9467b2bc3 chore: configure tailwind v4 dynamic spacing 2026-03-14 18:14:44 +08:00
xingyu4j
fa190e0975 chore: checkpoint tailwind spacing updates 2026-03-14 18:11:08 +08:00
xingyu4j
90dc8cf997 chore: update deps 2026-03-14 17:52:40 +08:00
xingyu
53c5ccc00a !336 chore: vite 8.0
Merge pull request !336 from xingyu/vite8
2026-03-14 05:40:10 +00:00
xingyu4j
06c9e8d7c1 fix: type check 2026-03-14 13:39:51 +08:00
xingyu4j
f32818c6aa fix(lint): resolve shared form and utility warnings 2026-03-14 13:28:45 +08:00
xingyu4j
fb03afb6b7 fix(lint): clean up ai rich text views 2026-03-14 13:28:13 +08:00
xingyu4j
577efa56a9 fix(lint): update bpmn designer compatibility code 2026-03-14 13:27:38 +08:00
xingyu4j
cb98b3a47e fix(lint): add ts-expect-error descriptions 2026-03-14 13:27:00 +08:00
xingyu4j
8daf9a3ce5 docs: update version 2026-03-14 12:32:50 +08:00
xingyu4j
a83d8248d7 fix: lint 2026-03-14 12:27:31 +08:00
xingyu4j
4cdc92f759 fix: lint 2026-03-14 12:16:31 +08:00
xingyu4j
54c668c3f0 chore: update deps 2026-03-14 11:37:28 +08:00
xingyu4j
ac3fc6b7d3 Merge branch 'main' of https://github.com/vbenjs/vue-vben-admin into vite8 2026-03-14 11:34:06 +08:00
Jin Mao
a6a6efdf59 chore: release 5.7.0
- 更新 backend-mock 包版本
- 更新 web-antd 包版本
- 更新 web-antdv-next 包版本
- 更新 web-ele 包版本
- 更新 web-naive 包版本
- 更新 web-tdesign 包版本
- 更新 docs 包版本
- 更新 commitlint-config 包版本
- 更新 eslint-config 包版本
- 更新 oxfmt-config 包版本
- 更新 oxlint-config 包版本
- 更新 stylelint-config 包版本
- 更新 node-utils 包版本
- 更新 tsconfig 包版本
- 更新 vite-config 包版本
- 更新 @core/base/design 包版本
- 更新 @core/base/icons 包版本
- 更新 @core/base/shared 包版本
- 更新 @core/base/typings 包版本
- 更新 @core/composables 包版本
- 更新 @core/preferences 包版本
- 更新 @core/ui-kit/form-ui 包版本
- 更新 @core/ui-kit/layout-ui 包版本
- 更新 @core/ui-kit/menu-ui 包版本
- 更新 @core/ui-kit/popup-ui 包版本
- 更新 @core/ui-kit/shadcn-ui 包版本
- 更新 @core/ui-kit/tabs-ui 包版本
- 更新 constants 包版本
- 更新 access 包版本
- 更新 common-ui 包版本
- 更新 hooks 包版本
- 更新 layouts 包版本
- 更新 plugins 包版本
- 更新 request 包版本
- 更新 icons 包版本
- 更新 locales 包版本
- 更新 preferences 包版本
- 更新 stores 包版本
- 更新 styles 包版本
- 更新 types 包版本
- 更新 utils 包版本
- 更新 playground 包版本
- 更新 turbo-run 包版本
- 更新 vsh 包版本
- 更新根目录包版本
2026-03-14 09:14:23 +08:00
xingyu4j
8043faf6c7 docs: remove doc 2026-03-14 00:18:54 +08:00
xingyu4j
ebed9e64ed fix: lint 2026-03-14 00:17:06 +08:00
xingyu4j
913636ae44 refactor: simplify oxc eslint compatibility 2026-03-14 00:16:27 +08:00
xingyu4j
7b064e9f33 chore: vsh lint 2026-03-13 23:41:17 +08:00
xingyu4j
16da0eaca3 fix: vsh lint 2026-03-13 23:31:19 +08:00
xingyu4j
6acfee2737 fix: vsh lint 2026-03-13 23:26:29 +08:00
xingyu4j
92abf7edaa chore: oxlint-tsgolint 2026-03-13 23:22:52 +08:00
xingyu4j
395babc1f5 feat: tsgolint 2026-03-13 23:13:10 +08:00
xingyu4j
68cde54bad feat: add tsgolint 2026-03-13 23:13:01 +08:00
xingyu4j
c7d7529c00 chore: ts 2026-03-13 23:07:04 +08:00
xingyu4j
748f60c7bb chore: lint config 2026-03-13 22:12:15 +08:00
xingyu4j
ffee62e940 chore(vscode): update workspace editor settings 2026-03-13 22:02:50 +08:00
xingyu4j
a0ea221131 style(common-ui): normalize generic formatting 2026-03-13 21:57:18 +08:00
xingyu4j
2846bcb84e fix(common-ui): guard resize drag start state 2026-03-13 21:56:53 +08:00
xingyu4j
542ed6c08f refactor: rename formatter utilities 2026-03-13 21:56:23 +08:00
xingyu4j
6dabb848a5 build: migrate formatting pipeline to oxfmt 2026-03-13 21:56:08 +08:00
xingyu4j
de0181e0d9 fix: lint 2026-03-13 20:58:07 +08:00
xingyu4j
a850d426ef chore: fix lint and typecheck issues 2026-03-13 20:57:52 +08:00
xingyu4j
771277d5d9 fix: align oxlint compat config typing 2026-03-13 20:28:56 +08:00
xingyu4j
20b4f5c99f chore: oxlint config 2026-03-13 20:26:10 +08:00
xingyu4j
e7fa87b301 chore: finalize oxlint migration config 2026-03-13 20:25:25 +08:00
xingyu4j
40c66958bc chore: remove un use deps 2026-03-13 15:59:04 +08:00
xingyu4j
600fc71aed fix: eslint 2026-03-13 15:58:53 +08:00
xingyu4j
443e4b04cd chore: update vite 8 2026-03-13 15:51:28 +08:00
Lmx1220
556a3c0fab Update pnpm-lock.yaml 2026-03-13 15:25:14 +08:00
Lmx1220
1eca52f962 Update pnpm-lock.yaml
更新到使用vue3版本
2026-03-13 15:20:58 +08:00
Lmx1220
e21adb395b Merge branch 'main' into main 2026-03-13 15:08:24 +08:00
xingyu4j
0e4bf80bf4 chore: update deps 2026-03-13 10:33:23 +08:00
cdc
107750971b fix: fix useEcharts 2026-03-10 21:48:33 +08:00
橙子
24e1be47ca fix: fix component type (#7601) 2026-03-10 05:11:06 +08:00
Mr. Xie
7e0978c764 fix: 修复验证码登录发送逻辑,未校验手机号或发送失败仍开始倒计时的问题 (#7616) 2026-03-10 05:10:34 +08:00
Leo
83a0c9662d fix: 修复路由重复 (#7590)
* fix: 修复路由重复

优化mixed模式路由合并逻辑。以backend 为基础,并从frontend补充

* fix: 修复名称冲突时子项合并顺序/覆盖(后端子项可能会丢失)。

* fix: 优化可访问性判断逻辑

* fix: error Forbidden non-null assertion

* refactor(access): 调整可访问性判断逻辑
2026-03-10 05:09:48 +08:00
xingyu
a4736a49f8 feat: migrate to Tailwind CSS v4 (#7614)
* chore: update deps

* feat: use jsonc/x language

* chore: update eslint 10.0

* fix: no-useless-assignment

* feat: add CLAUDE.md

* chore: ignore

* feat: claude

* fix: lint

* chore: suppot eslint v10

* fix: lint

* fix: lint

* fix: type check

* fix: unit test

* fix: Suggested fix

* fix: unit test

* chore: update stylelint v17

* chore: update all major deps

* fix:  echarts console warn

* chore: update vitest v4

* feat: add skills ignores

* chore: update deps

* chore: update deps

* fix: cspell

* chore: update deps

* chore: update tailwindcss v4

* chore: remove postcss config

* fix: no use catalog

* chore: tailwind v4 config

* fix: tailwindcss v4 sort

* feat: use eslint-plugin-better-tailwindcss

* fix: Interference between enforce-consistent-line-wrapping, jsx-curly-brace-presence and Prettier

* fix: Interference between enforce-consistent-line-wrapping, jsx-curly-brace-presence and Prettier

* fix(lint): resolve prettier and better-tailwindcss formatting conflicts

* fix(tailwind): update theme references and lint sources

* style(format): normalize apps docs and playground vue files

* style(format): normalize core ui-kit components

* style(format): normalize effects ui and layout components
2026-03-10 05:08:45 +08:00
YunaiV
1cbdf442ee feat: 添加 URL 验证工具函数并优化 area-select 组件的类型定义 2026-03-07 17:33:02 +08:00
YunaiV
f91a2702c9 merge: 合并 master 分支的 form-create 修复
合并 master 分支中关于 form-create 组件的修复,包括 area-select 和 iframe 组件的改进。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 11:32:54 +08:00
芋道源码
c885c0c71a !333 fix(form-create): 【ele/antd】完成 vue3 review c153ff93 的所有 TODO 修复
Merge pull request !333 from puhui999/master-fix
2026-03-07 03:23:42 +00:00
YunaiV
a8f67ab717 !335 fix: 修复上传头像时,如果图片加载失败,弹框一直loading的问题,针对 ele 版本 2026-03-07 11:21:03 +08:00
zouawen
aa7d8630b5 fix: 侧边菜单栏拖拽优化 (#7606)
* fix: 拖拽使用遮罩层实现,使得拖拽到min或max临界值时cursor显示not-allowed,同时拖拽线条颜色变浅,类似于disabled,提升用户体验

* fix: 修复代码审查建议;修复lint和test报错

* fix: 修复遮罩层挡住hover:bg-primary视觉效果问题
2026-03-07 05:32:09 +08:00
lmx
36313f378e chore: update package.json and cspell.json 2026-03-04 19:17:33 +08:00
lmx
45054d3238 chore: update pnpm-lock.yaml 2026-03-04 19:03:41 +08:00
lmx
173e6b08c9 fix: 修复执行: check:cspell 命令路径参数传入没有转义导致检测路径失效。添加菜单右键功能。优化:多余监听 activePath 变化,自动滚动到激活项 watch 2026-03-04 18:25:15 +08:00
xingyu
75e4d07395 !335 fix: 修复上传头像时,如果图片加载失败,弹框一直loading的问题
Merge pull request !335 from li_shifeng/fix-upload-avatar
2026-03-04 02:21:33 +00:00
zouawen
2a86404ba5 fix: 修复混合双列布局侧边栏拖拽线条位置显示bug,同步修复普通布局和混合双列布局切换时width计算导致侧边栏宽度显示异常问题,新增普通布局和混合双列布局侧边栏菜单折叠状态同步 (#7596) 2026-03-02 15:31:29 +08:00
han
b8a0199cde feat(preferences): add toggle for copy preferences button (#7594)
Co-authored-by: hl <hl@nmcsoft.com>
2026-03-02 15:30:38 +08:00
Bryan Qiu
a46ed55a86 fix: bump version to 5.6.0 (#7592) 2026-03-02 04:22:21 +08:00
Jin Mao
1a9fbddef4 Merge branch 'main' into main 2026-02-28 12:04:48 +08:00
zouawen
1209aaafb4 fix: 修复lint报错 2026-02-28 11:25:08 +08:00
zouawen
8e71261d49 fix: 侧边栏菜单拖拽功能在设置内增加开关 2026-02-28 11:19:24 +08:00
li_shifeng
586978f1b0 fix: 修复上传头像时,如果图片加载失败,弹框一直loading的问题 2026-02-28 10:00:39 +08:00
dependabot[bot]
49e45eab54 chore(deps): bump vue-router from 4.6.4 to 5.0.3 (#7583)
Bumps [vue-router](https://github.com/vuejs/router) from 4.6.4 to 5.0.3.
- [Release notes](https://github.com/vuejs/router/releases)
- [Commits](https://github.com/vuejs/router/compare/v4.6.4...v5.0.3)

---
updated-dependencies:
- dependency-name: vue-router
  dependency-version: 5.0.3
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-27 17:06:18 +08:00
Jin Mao
bd22793ceb feat: add the attribute routeCached to route to control cache the DOM corresponding to the route 2026-02-27 16:04:01 +08:00
zouawen
b2013436c5 fix: 优化最大值限制 2026-02-27 11:12:51 +08:00
zouawen
cc808cb8c5 fix: 优化最小值限制 2026-02-27 11:07:28 +08:00
zouawen
afffc4b3f0 fix: 优化侧边栏拖拽逻辑,支持展开和折叠 2026-02-27 10:54:15 +08:00
zouawen
99710ef9dc feat: 优化侧边栏拖拽逻辑 2026-02-26 18:11:53 +08:00
zouawen
3d4ae04d9b Merge branch 'main' into main 2026-02-26 10:20:32 +08:00
zouawen
707b391449 feat: 侧边栏宽度拖拽改为composable实现,同时修复tabbar.ts文件lint报错 2026-02-26 10:09:57 +08:00
ming4762
45b843f344 fix: fix bug where renderEcharts gets stuck in a dead loop (#7561)
* 触发条件:echart所在页面开启keepalive 在其他页面切换颜色模式
2026-02-26 06:21:08 +08:00
Wu Clan
191fd90f06 chore: 更新表单描述显示样式 (#6938) 2026-02-26 06:17:04 +08:00
moil-xm
05920cd66d feat(vite-config): vite export typing (#7569)
* feat(vite-config): vite export typing

* feat(vite-config): add type

---------

Co-authored-by: Jin Mao <50581550+jinmao88@users.noreply.github.com>
2026-02-26 06:14:12 +08:00
Jin Mao
01508d5e42 fix: fix lint 2026-02-26 05:45:36 +08:00
zouawen
57cf6cbc9e feature: 简易版菜单宽度拖拽功能 2026-02-25 17:50:22 +08:00
芋道源码
dd69d7c1a5 !334 feat(iot):增加 modbus 配置 100%
Merge pull request !334 from 芋道源码/dev
2026-02-14 03:04:43 +00:00
YunaiV
63743b6929 feat(iot):增加 modbus 配置 100% 2026-02-14 11:02:56 +08:00
YunaiV
38597dd19d feat(iot):增加 modbus 配置 50% 2026-02-14 09:19:43 +08:00
AxiosLeo
03ebbea46a fix(menu): update hover color variable to use the correct reference (#7544)
* fix(menu): update hover color variable to use the correct reference

Medium Severity

In the horizontal .is-light menu section, --menu-item-hover-color is set to hsl(var(--menu-item-color)), but --menu-item-color is already defined as hsl(var(--accent-foreground)). This results in hsl(hsl(...)) at computed-value time, which is invalid CSS. The non-horizontal .is-light block correctly uses var(--menu-item-color) without the extra hsl() wrapper.

* fix(menu): simplify hover styles by removing redundant nested hover rules

Low Severity

The SCSS &:not(.is-active):hover { &:hover { ... } } compiles to a :hover:hover pseudo-class chain, which is functionally identical to a single :hover. The inner &:hover nesting is redundant and adds unnecessary complexity compared to placing styles directly inside the &:not(.is-active):hover block.
2026-02-12 22:22:53 +08:00
zouawen
8e7a5d1ec3 fix: Fix layout change, ensure div[ref="asideRef"] is contained within <aside> (#7551) 2026-02-12 22:22:34 +08:00
puhui999
e7365a4a00 fix(form-create): 【ele/antd】完成 vue3 review c153ff93 的所有 TODO 修复 2026-02-11 17:58:13 +08:00
AxiosLeo
aa74a2535b fix(tabbar): visitHistory field (#7543)
High Severity

The visitHistory field is a Stack<string> class instance persisted to sessionStorage via pinia-plugin-persistedstate. There's no custom serializer or hydration hook. When the page reloads, JSON.parse(JSON.stringify(stack)) produces a plain object {dedup, items, maxSize} that lacks all Stack methods (push, pop, remove, retain, etc.) and the size getter. Pinia's $patch replaces the Stack instance with this plain object, so subsequent calls like this.visitHistory.push(...) will throw a TypeError.
2026-02-11 16:09:37 +08:00
zouawen
32379ba4b7 fix: 双列菜单模式下新增深色侧边栏和深色侧边栏子栏 (#7542)
* fix: 双列菜单模式下新增深色侧边栏和深色侧边栏子栏

* fix: 修复报错 config.test.ts.snap

* fix: 修复lint报错

* fix: 修复侧边栏菜单文本内容溢出问题

* fix: 修复lint报错
2026-02-11 16:08:32 +08:00
xingyu
bf4fed78f2 !332 Merge branch 'main' of <a href="https://gitee.com/link?target=https%3A%2F%2Fgithub.com%2Fvbenjs%2Fvue-vben-admin">https://github.com/vbenjs/vue-vben-admin</a> into dev
Merge pull request !332 from xingyu/dev
2026-02-11 03:12:23 +00:00
xingyu4j
722afc85df Merge branch 'main' of https://github.com/vbenjs/vue-vben-admin into dev 2026-02-11 11:01:44 +08:00
xingyu
3036596d16 !331 Merge remote-tracking branch 'yudao/dev' into dev
Merge pull request !331 from Jason/dev
2026-02-10 14:34:20 +00:00
jason
aee539f37e Merge remote-tracking branch 'yudao/dev' into dev 2026-02-10 22:08:57 +08:00
jason
05b41692ba feat: 移动端 uniapp 流程表单嵌入页面 2026-02-10 22:07:19 +08:00
moil-xm
7fe8d7b4be fix: ts 错误: 类型实例化过深,且可能无限 2026-02-10 16:13:36 +08:00
Bin
aace726a91 feat(playground): add antdv-next router link (#7532)
Co-authored-by: fuwb <fuwb@sunsharing.com.cn>
2026-02-10 13:09:34 +08:00
Jin Mao
e6f6e5464a Merge branch 'main' into main 2026-02-10 12:08:16 +08:00
Aliner
7d04b600fb fix: correct updateDate to updateData in the echarts hook (#7538)
* fix(@vben/plugins): Fixed the misspelling of the data update method name in the echarts hook

Correct updateDate to updateData, ensuring that the API method name is correct and consistent

* Revert "fix(@vben/plugins): Fixed the misspelling of the data update method name in the echarts hook"

This reverts commit 86d679cf25631bd1abd56d4f971e6db3a9b9d6d5.

* fix(@vben/plugins): fixed the misspelling of the data update method name in the echarts hook

Correct updateDate to updateData, ensuring that the API method name is correct and consistent
2026-02-10 11:19:45 +08:00
xingyu
8a622889ff !330 feat(form-create): 【ele/antd】新增 iframe 和省市区选择器组件
Merge pull request !330 from puhui999/master-fix
2026-02-10 01:32:01 +00:00
zouawen
463bfde2ac fix: config.test.ts.snap新增showRefresh参数 2026-02-10 08:50:06 +08:00
zouawen
893f74dc3e fix: 优化横向布局时菜单激活或聚焦时背景色,标签工具栏新增刷新按钮,其他样式优化 2026-02-09 16:32:02 +08:00
liubei
e136679934 fix: [bpm][antd&ele] 修复流程设计器自定义配置编辑后丢失的问题 2026-02-09 15:35:53 +08:00
Jin Mao
8a215fbcc7 chore: release 5.6.0 2026-02-09 05:09:57 +08:00
Jin Mao
ac5e4c4722 chore: update deps 2026-02-09 04:52:06 +08:00
Jin Mao
04d01b0bab chore: fix lint 2026-02-09 04:49:06 +08:00
Jin Mao
cb1d7565a3 Merge branch 'fork/ffgenius/antd-vue-next' 2026-02-09 03:09:01 +08:00
Jin Mao
1d9b6407a4 chore: 更新开发环境端口号配置
- 将 VITE_PORT 从 5555 修改为 5999
- 保持其他环境变量配置不变
2026-02-09 03:04:42 +08:00
MistyMoon
22ed522711 feat: support menuVisibleWithForbidden in generate-routes-backend (#7526)
当后端菜单项 `meta.menuVisibleWithForbidden` 为 true 时,将其路由组件替换为 403 页,菜单仍展示该项,访问时展示 403,便于用户知悉功能并申请权限。
2026-02-09 02:44:29 +08:00
Jin Mao
a3598ef859 chore: fix lint 2026-02-09 02:42:50 +08:00
Jin Mao
6fe09ec2dd perf: optimize the closing jump logic of tabs 2026-02-09 02:36:38 +08:00
Jin Mao
57911d9e09 Merge branch 'tab-2026020401' of https://github.com/ming4762/smart-boot-ui-vben into ming4762-tab-2026020401 2026-02-09 02:36:04 +08:00
Bin
3aee283495 Revert "feat(web): cancel pnpm-lock.yaml submission"
This reverts commit 54b24c2677.
2026-02-08 23:14:31 +08:00
Bin
54b24c2677 feat(web): cancel pnpm-lock.yaml submission 2026-02-08 23:12:40 +08:00
Bin
8cadad0a1e feat(web): add antdv-next model 2026-02-08 23:00:19 +08:00
zhongming4762
633c5f3cda perf: optimize the closing jump logic of tabs
* 依据tab访问历史回退上一个tab,原逻辑是返回一下个 或 上一个
 * 支持在配置中开启或关闭
2026-02-08 20:50:54 +08:00
zhongming4762
a8431e2040 perf: optimize the closing jump logic of tabs
* 依据tab访问历史回退上一个tab,原逻辑是返回一下个 或 上一个
 * 支持在配置中开启或关闭
2026-02-08 20:36:32 +08:00
zhongming4762
7a2b916387 perf: optimize the closing jump logic of tabs
* 依据tab访问历史回退上一个tab,原逻辑是返回一下个 或 上一个
 * 支持在配置中开启或关闭
2026-02-08 20:36:16 +08:00
puhui999
f3deefae56 Merge remote-tracking branch 'yudao/master' into master-fix 2026-02-08 11:57:23 +08:00
puhui999
d0a7065991 feat(form-create): 【ele/antd】新增 iframe 和省市区选择器组件
- 新增 iframe 网页嵌入组件,支持 URL 配置和实时预览
- 新增省市区三级联动选择器组件
- 支持 web-ele 和 web-antd 双版本
2026-02-08 11:56:02 +08:00
YunaiV
5b7e7c4d56 fix: 修复新增空目录菜单时 component 为 null 导致路由生成报错 2026-02-07 18:30:03 +08:00
Jin Mao
f4dfb68b7b Merge branch 'MrLeo-main' 2026-02-06 15:41:55 +08:00
Jin Mao
8f4f27d860 Merge branch 'main' of https://github.com/MrLeo/vue-vben-admin into MrLeo-main 2026-02-06 15:39:48 +08:00
tikitoki
e9eab29953 fix:fix password input icon visual bug in certain browser (#7521)
Co-authored-by: nick8799981325 <zc1078134211@163.com>
2026-02-06 15:28:48 +08:00
Leo Caan (陈栋)
4f1eeb7da5 fix: 修复设置default-expanded-level后无法check更低层级节点 logic and tree value updates (#7155)
假设缺省展开2级,当check 3级节点时,会触发effectWatch重新收缩到2级,并丢失check操作check操作andling.
2026-02-06 12:55:14 +08:00
Leo
6fd426d719 fix: 当 showToolbar 为 false 时禁用工具栏(vxe-table),减少无 Toolbar 的 Gird 留白 2026-02-04 22:20:17 +08:00
zhongming4762
331da3c8c7 perf: optimize the closing jump logic of tabs
* 依据tab访问历史回退上一个tab,原逻辑是返回一下个 或 上一个
2026-02-04 19:29:33 +08:00
ming4762
c48943bc67 fix: fix Nested Objects dependencies not effective (#7345) 2026-01-31 16:44:20 +08:00
芋道源码
f6c5bc4b7c !329 同步最新代码(2026.01 发版前)
Merge pull request !329 from 芋道源码/dev
2026-01-29 15:54:36 +00:00
YunaiV
448f073143 review:【antd/ele】【bpm】工作流相关的代码 2026-01-29 21:20:24 +08:00
xingyu
fc31aa3c8f !328 表单设计器 UserSelect/DeptSelect 支持默认选中当前用户/部门、修复商品 SKU 名称校验失败的问题
Merge pull request !328 from puhui999/master-fix
2026-01-29 03:28:24 +00:00
xingyu
7680b33b99 fix: #7140 (#7153)
* chore: add yaml eslint validate

* chore: update deps

* fix: unused ts lint

* fix: 弹窗只能点击一次 #7140

* chore: update actions/checkout v6

* chore: update node version v22.22.0
2026-01-28 18:05:20 +08:00
puhui999
548da70f9f fix(mall): 【antd/ele】修复商品 SKU 名称校验失败的问题
前端创建/编辑商品时,SKU 对象缺少 name 字段初始化,导致提交时后端校验 "商品 SKU 名字不能为空" 失败。

修改内容:
- form/index.vue: 初始化 SKU 添加 name 字段,提交前校验商品名称并赋值给 SKU
- sku-list.vue: createEmptySku 函数添加 name 字段

影响范围:web-antd、web-ele 两个版本
2026-01-28 17:45:20 +08:00
puhui999
0441afc24f Merge remote-tracking branch 'yudao/master' 2026-01-28 17:37:04 +08:00
puhui999
1196dab9e4 feat(form-create): 【antd/ele】表单选择器支持默认选中当前用户/部门
- UserSelect 组件新增 defaultCurrentUser 配置,支持默认选中当前登录用户
- DeptSelect 组件重构为独立的树形选择器,支持 defaultCurrentDept 配置
- DeptSelect 支持 returnType 配置,可返回部门 ID 或部门名称
- 修复 useSelectRule 未将自定义 props 默认值传递给组件的问题
- 修复 DeptSelect 数据加载完成前回显失败的问题
- 同时支持 web-antd 和 web-ele 两个应用
2026-01-28 17:23:39 +08:00
xingyu
00bf48704d !327 docs: README
Merge pull request !327 from xingyu/dev
2026-01-28 07:25:26 +00:00
xingyu4j
7a1218e6f0 fix: lint 2026-01-28 15:24:55 +08:00
xingyu4j
dbb1a19c5d fix: lint 2026-01-28 15:24:49 +08:00
xingyu4j
f433b207c6 docs: README lint 2026-01-28 15:24:44 +08:00
xingyu4j
82b91dfed3 fix: lint 2026-01-28 15:22:35 +08:00
xingyu4j
1295aee180 feta: add moddle cspell 2026-01-28 15:22:28 +08:00
xingyu4j
00105e1302 docs: README 2026-01-28 15:12:23 +08:00
xingyu
e82433e3e7 !326 fix: 弹窗只能点击一次
Merge pull request !326 from xingyu/dev
2026-01-28 06:33:37 +00:00
xingyu4j
ccaef2b591 fix: 弹窗只能点击一次 2026-01-28 14:32:06 +08:00
Jin Mao
bb5d75bc7e fix: 修复表单展开无效 (#7148)
- 修正模板中 ref 属性的引用名称
2026-01-27 11:35:50 +08:00
ming4762
528395e2c3 perf: optimizing hidden fields cannot trigger dependencies (#7142) 2026-01-26 16:12:26 +08:00
programmer
6a9012e5e4 chore: 给个人中心的2个按钮加上 i18n (#7138)
* fix: 个人中心按钮i18n

* fix: eslint format

* fix: 调整label宽度让英文显示在一行

* chore: 调整label小点

* fix: import

---------

Co-authored-by: Jin Mao <50581550+jinmao88@users.noreply.github.com>
2026-01-26 16:12:09 +08:00
橙子
6e8315ab40 fix: arguments order update (#7132)
Co-authored-by: Jin Mao <50581550+jinmao88@users.noreply.github.com>
2026-01-26 16:11:37 +08:00
xingyu
36aa195378 !325 remove playground
Merge pull request !325 from xingyu/dev
2026-01-26 07:08:43 +00:00
xingyu4j
de2662ca8f fix: remove playground 2026-01-26 15:08:14 +08:00
xingyu
35acb9558b !324 merge dev
Merge pull request !324 from xingyu/dev
2026-01-26 07:06:52 +00:00
xingyu4j
c4a262d1e2 docs: README 2026-01-26 15:06:10 +08:00
xingyu4j
a1e021074e docs: README 2026-01-26 15:03:32 +08:00
xingyu4j
0a7ead980a feat: naive add AutoComplete 2026-01-26 14:59:34 +08:00
xingyu4j
cdcbd58f0e fix: ele auto complete 2026-01-26 14:35:53 +08:00
xingyu4j
c57f3d8820 fix: ele auto complete 2026-01-26 14:34:45 +08:00
xingyu4j
02c977f969 fix: IDLPAD 2026-01-26 11:06:38 +08:00
xingyu4j
a0019cef04 chore: update deps 2026-01-26 10:37:44 +08:00
xingyu4j
e447a8a569 chore: remove unused deps 2026-01-26 10:34:58 +08:00
xingyu4j
071468b716 chore: yaml validate 2026-01-26 10:34:33 +08:00
xingyu4j
24b8bba754 fix: lint 2026-01-26 10:34:14 +08:00
xingyu4j
6d60071515 fix: lint sort 2026-01-26 10:33:23 +08:00
xingyu4j
baed599fcc Merge branch 'main' of https://github.com/vbenjs/vue-vben-admin into dev 2026-01-26 10:13:23 +08:00
Jin Mao
7cb2699f19 chore: 更新pnpm工作区配置
- 移除 neverBuiltDependencies 配置
- 移除 peerDependencyRules.allowedVersions 配置
- 重新整理 overrides 和 catalog 部分
- 保持 @ast-grep/napi 等依赖的目录引用配置
- 维持 eslint 版本约束在目录顶层配置中
2026-01-25 19:55:53 +08:00
YunaiV
1ce562601f feat(iot):【网关设备:80%】动态注册的初步实现(已测试) 2026-01-25 18:50:26 +08:00
Jin Mao
4b5da81ba6 chore(deps): 更新项目依赖包版本
- 更新 @playwright/test 从 1.57.0 到 1.58.0
- 更新 @tanstack/vue-query 从 5.92.8 到 5.92.9
- 更新 cheerio 从 1.1.2 到 1.2.0
- 更新 eslint-config-turbo 从 2.7.5 到 2.7.6
- 更新 playwright 从 1.57.0 到 1.58.0
- 更新 turbo 从 2.7.5 到 2.7.6
- 更新 vxe-pc-ui 从 4.12.10 到 4.12.12
- 更新 @babel/helper-define-polyfill-provider 从 0.6.5 到 0.6.6
- 更新 @cspell/dict-fullstack 从 3.2.7 到 3.2.8
- 更新 @cspell/dict-git 从 3.0.7 到 3.1.0
- 更新 @cspell/dict-node 从 5.0.8 到 5.0.9
- 更新 @cspell/dict-npm 从 5.2.29 到 5.2.30
- 更新 @parcel/watcher 相关包从 2.5.4 到 2.5.6
- 更新 @tanstack/query-core 从 5.90.19 到 5.90.20
- 更新 babel-plugin-polyfill 相关包到最新版本
- 更新 baseline-browser-mapping 从 2.9.17 到 2.9.18
- 更新 caniuse-lite 从 1.0.30001765 到 1.0.30001766
- 更新 electron-to-chromium 从 1.5.277 到 1.5.278
- 更新 eslint-plugin-turbo 从 2.7.5 到 2.7.6
- 更新 playwright-core 从 1.57.0 到 1.58.0
- 更新 turbo 平台特定版本到 2.7.6
- 更新 undici 从 7.19.0 到 7.19.1
2026-01-25 15:05:14 +08:00
Jin Mao
6aca9a9c99 test(dom): 更新元素可见区域计算的测试用例
- 修正了getElementVisibleRect函数的期望值断言
- 将bottom值从800更正为0以匹配实际计算结果
- 将left值从1100更正为0以匹配实际计算结果
- 将right值从1000更正为0以匹配实际计算结果
- 将top值从900更正为0以匹配实际计算结果
2026-01-25 14:22:22 +08:00
YunaiV
c55465a6c0 chore: merge origin/dev branch 2026-01-24 09:31:43 +08:00
YunaiV
2ae684bdad feat(iot):【设备定位】添加设备位置功能,支持地图展示和坐标选择 2026-01-23 07:06:28 +00:00
haohao
ce2bfa5cd2 refactor:【antd】【iot】将 DeviceSaveReqVO 和 DeviceRespVO 合并到 Device,简化设备 API 接口 2026-01-23 07:06:28 +00:00
jason
63265c1a6b feat: [bpm][antd] 审批签名大小控制 2026-01-23 07:06:28 +00:00
xingyu4j
fa195fde8e fix: lint 2026-01-23 14:48:21 +08:00
xingyu4j
1057f2932b chore: update deps 2026-01-23 14:48:06 +08:00
Jin Mao
b9224fc379 Merge branch 'main' into fix 2026-01-23 13:48:54 +08:00
Jin Mao
57dd818170 Merge branch 'fork/kuchaguangjie/fix' 2026-01-23 13:47:54 +08:00
Jin Mao
49256ec1b7 Merge branch 'main' into fix 2026-01-23 13:46:59 +08:00
Jin Mao
f6f92e5403 Merge branch 'fork/kuchaguangjie/fix' 2026-01-23 13:45:38 +08:00
Jin Mao
613c311076 Merge branch 'fork/abcd0f/dev/sun-local' 2026-01-23 13:25:03 +08:00
Jin Mao
9ee7a7d9ff Merge branch 'fork/Child-qjj/patch-1' 2026-01-23 13:21:49 +08:00
橙子
44f8aed06d fix: timer not need reactivity (#7128) 2026-01-23 13:16:09 +08:00
Sun
d5d4a5c591 feat(effects-plugins): 添加 echarts 图表更新功能
新增 updateDate 方法用于更新 echarts 图表选项,支持合并配置、
完全替换和延迟更新等模式。该方法会在组件未初始化时自动执
行首次渲染,并能够合并全局配置如 backgroundColor 等选项。
2026-01-23 11:06:45 +08:00
yuhengshen
74381aa8c1 fix: 嵌套弹窗,错误 merge options (#7126) 2026-01-22 20:07:13 +08:00
橙子
203ee9b623 fix(@vben-core/shared): element outside viewport, the element visible rect each prop expect 0 (#7120)
* fix(@vben-core/shared): element outside viewport

* fix(@vben-core/shared): element outside viewport
2026-01-22 11:37:01 +08:00
xingyu
13b1ef71a9 !323 Merge remote-tracking branch 'yudao/dev' into dev
Merge pull request !323 from Jason/dev
2026-01-22 03:10:39 +00:00
jason
ba08820be8 Merge remote-tracking branch 'yudao/dev' into dev 2026-01-21 23:28:00 +08:00
jason
d9e933e3a6 feat: [bpm][antd] 审批签名大小控制 2026-01-21 23:25:48 +08:00
YunaiV
50216e5047 feat(iot):【设备定位】添加设备位置功能,支持地图展示和坐标选择 2026-01-21 21:10:09 +08:00
JyQAQ
6c8c49966a Perf: 优化antd upload组件参数获取 (#7114)
* perf(antd upload params): 优化组件参数取值 确保不同调用场景配置参数可用

* perf(antd upload params): 优化组件参数取值 确保不同调用场景配置参数可用

* perf(antd upload params): 优化组件参数取值 确保不同调用场景配置参数可用

* perf(antd upload params): 优化组件参数取值 确保不同调用场景配置参数可用
2026-01-21 17:20:53 +08:00
芋道源码
4aeb7a489a !322 refactor:【antd】【iot】将 DeviceSaveReqVO 和 DeviceRespVO 合并到 Device,简化设备 API 接口
Merge pull request !322 from haohaoMT/dev
2026-01-21 05:43:57 +00:00
Qiu
3862942e9f fix: chart instance disposal condition
dom has been disposed in vue3 v-if,but chartInstance exist
2026-01-21 11:47:01 +08:00
xingyu
8571fc43b0 Merge branch 'main' into fix 2026-01-19 15:28:12 +08:00
JyQAQ
59aabd956d Perf: Optimization of cropping component result acquisition & optimization of cropping frame prompts (#7111)
* perf(cropper): enhance image cropping functionality and add output type support

* perf(cropper): enhance image cropping functionality and add output type support
2026-01-19 14:18:36 +08:00
xingyu
9b09ba4483 Merge branch 'main' into fix 2026-01-19 10:54:43 +08:00
芋道源码
42f2fecb1e !320 完成 mall、bpm 的全部迁移
Merge pull request !320 from 芋道源码/dev
2026-01-18 10:12:49 +00:00
YunaiV
af0057940a feat:增加 allowedHosts 变量,允许 natapp 转发,对应 https://t.zsxq.com/kSg2A 2026-01-18 17:04:03 +08:00
YunaiV
9e3d75ae65 fix:【infra】代码生成:全选不生效的问题 2026-01-18 16:20:43 +08:00
YunaiV
e5f5523bc6 fix:外链是子菜单时,路径不正确的问题,对应 https://t.zsxq.com/aE8AX 问题 2026-01-18 14:46:56 +08:00
YunaiV
4cc900f542 review:【antd/ele】【mall】商城相关的代码 2026-01-18 14:43:49 +08:00
芋道源码
ce34e6e1a0 !319 feat: [bpm][antd] todo 修改
Merge pull request !319 from Jason/dev
2026-01-17 09:09:11 +00:00
jason
db1dfae481 feat: [bpm][antd] todo 修改 2026-01-17 15:47:31 +08:00
jason
012412ec22 feat: [bpm][antd] todo 修改 2026-01-17 15:31:54 +08:00
jason
db97d414ec feat: [bpm][antd] todo 流程监听器、流程表达式修改 2026-01-17 12:09:46 +08:00
haohao
8bf286fda0 refactor:【antd】【iot】将 DeviceSaveReqVO 和 DeviceRespVO 合并到 Device,简化设备 API 接口 2026-01-16 17:38:02 +08:00
xingyu
91119eac8e !318 fix:【ele/antd】修复更新个人信息后菜单丢失问题
Merge pull request !318 from zlflying/dev
2026-01-15 08:11:15 +00:00
橙子
686c3f9208 docs(@vben-core/preferences): update comments (#7107) 2026-01-14 19:36:45 +08:00
MRSWC
8a7e2bd8e4 fix:修复默认默认首页如果携带参数时刷新页面参数丢失问题 (#7102)
Co-authored-by: chenwei <chenw@jiuzhekan.com>
2026-01-14 15:38:55 +08:00
JyQAQ
174c4ae749 fix(antd Upload onChange Event): rewrite onChange event to handle upl… (#7098)
* fix(antd Upload onChange Event): rewrite onChange event to handle upload success or error messages

* fix(antd Upload onChange Event): rewrite onChange event to handle upload success or error messages

* fix(antd Upload onChange Event): rewrite onChange event to handle upload success or error messages
2026-01-14 15:38:21 +08:00
JyQAQ
67da9417a8 feat(upload prop:crop,aspectRatio): from Upload component accept prop… (#7095)
* feat(upload prop:crop,aspectRatio): from Upload component accept prop crop,aspectRatio

* feat(upload prop:crop,aspectRatio): from Upload component accept prop crop,aspectRatio

* feat(upload prop:crop,aspectRatio): from Upload component accept prop crop,aspectRatio

* feat(upload prop:crop,aspectRatio): from Upload component accept prop crop,aspectRatio
2026-01-14 15:38:05 +08:00
zlflying
d5b49e6a3b fix:【ele/antd】修复更新个人信息后菜单丢失问题
Signed-off-by: zlflying <zlflying@qq.com>
2026-01-14 14:44:17 +08:00
芋道源码
c894617e10 !317 修复一些 review TODO 提到的问题
Merge pull request !317 from puhui999/dev-mall
2026-01-13 12:27:48 +00:00
puhui999
10f4641fee fix:【ele/antd】修复 setup() 函数没有接收 props 参数,导致渲染函数中的 props 无法从 formCreate 传递 2026-01-13 12:37:13 +08:00
puhui999
c478bef269 feat:【ele】cropper todo 优化,对齐 antd 2026-01-13 12:32:00 +08:00
puhui999
0302b70c48 feat:【antd/ele】Element Plus 的 value-format="x" 返回的值可以直接赋值,不需要 Number() 转换,与 antd 版本保持一致 2026-01-13 12:25:27 +08:00
puhui999
2426f891e7 feat:【antd/ele】将文章的商品关联字段从手动输入 SPU 编号改为使用 SpuShowcase 组件选择商品 2026-01-13 12:13:22 +08:00
puhui999
e2433fc531 feat:【antd/ele】使用 productSpuIds 和 productCategoryIds 自定义插槽的表单在验证前同步 formData 中的值到表单中 2026-01-13 12:06:10 +08:00
puhui999
bbc74ae663 feat:【antd/ele】discountActivity 移除 structuredClone 使用 cloneDeep 2026-01-13 11:55:13 +08:00
puhui999
ea79b7d6a1 feat:【antd】cropper-modal 删除多余的 Image 预加载逻辑 2026-01-13 11:33:11 +08:00
ppxb
f4a4ced88d fix: header auto mode issue (#7096) 2026-01-12 21:40:26 +08:00
ppxb
19b2d7af41 fix: tdesign theme toggle and demos (#7087) 2026-01-10 14:11:08 +08:00
yuhengshen
343d8a1c1e fix: 切换时区后,页面不刷新 (#7085)
* fix: 切换时区后,页面不刷新

* fix: keep-alive 的页面,i18n 和 timezone 不更新
2026-01-10 14:10:27 +08:00
JyQAQ
9480f8272a feat(common-ui cropper): Implement the image cropping component VCropper (#7082)
* feat(common-ui cropper): Implement the image cropping component VCropper

* feat(common-ui cropper): Implement the image cropping component VCropper

* feat(common-ui cropper): Implement the image cropping component VCropper

* feat(common-ui cropper): Implement the image cropping component VCropper

* feat(common-ui cropper): Implement the image cropping component VCropper
2026-01-10 14:08:15 +08:00
ppxb
0d9e260a6a fix: vite.config.mts type error (#7081) 2026-01-10 14:07:28 +08:00
ppxb
51bca25345 fix(lint): pnpm format lint warning (#7080) 2026-01-10 14:06:03 +08:00
eric
694396dcfb refactor: move cleanup to finally block 2026-01-09 23:22:49 +08:00
eric
1cb53e943e refactor: 将跳转放到最后 2026-01-09 23:13:06 +08:00
eric
13c8318adc refactor: 1. 用 ref 包装 flag; 2. 在最后 清理 flag; 2026-01-09 23:05:05 +08:00
eric
48ed797055 fix: 防止 /logout 死循环 2026-01-09 22:38:11 +08:00
xingyu4j
3c2285141c chore: update deps 2026-01-06 13:58:42 +08:00
xingyu
49b884c0b1 Merge branch 'main' into fix 2026-01-06 13:50:26 +08:00
ppxb
24d20ca9ee refactor: preference manager and export (#7068)
* fix: preferences drawer outline z-index

* refactor: preferencesManager and exports
2026-01-06 12:42:32 +08:00
wyc001122
6f02181024 fix(layout): 修复双列模式下重复显示logo的问题(#7071) (#7072) 2026-01-05 21:13:06 +08:00
YunaiV
17d5d1b889 review:【antd】【iot】设备管理相关 2026-01-05 20:45:39 +08:00
芋道源码
a5c76ef89d !315 refactor:【antd】【iot】设备管理跟后端对齐,必要的 ReqVO、RespVO,子设备管理实现
Merge pull request !315 from haohaoMT/dev
2026-01-05 12:10:39 +00:00
YunaiV
e622c052a9 feat:【antd/ele】菜单支持查询参数、iframe 内嵌功能 2026-01-05 19:35:01 +08:00
ppxb
ed3353a271 fix: preferences drawer outline z-index (#7067) 2026-01-04 14:44:33 +08:00
haohao
de28c5c4c2 refactor:【antd】【iot】设备管理跟后端对齐,必要的 ReqVO、RespVO,子设备管理实现 2026-01-04 12:25:25 +08:00
xingyu4j
965f5f96b7 chore: update deps 2026-01-04 11:03:19 +08:00
xingyu4j
61d9df7f58 feat: add cascader cspell:words 2026-01-04 11:00:07 +08:00
xingyu4j
231a5169ec fix: lint 2026-01-04 10:56:55 +08:00
xingyu4j
ce7b7b910a Merge branch 'main' of https://github.com/xingyu4j/vue-vben-admin into fix 2026-01-04 10:56:14 +08:00
YunaiV
f7f01c9280 feat:【antd/ele】生产环境下,默认开启 CAPTCHA 验证码,保证安全性 2026-01-03 19:20:25 +08:00
JyQAQ
81a61558cb feat(upload prop:maxSize): from Upload component accept prop maxSize (AI prompt fixed) (#7059)
* feat(upload prop:maxSize): from component accept prop maxSize

* feat(upload prop:maxSize): from component accept prop maxSize

* feat(upload prop:maxSize): from component accept prop maxSize

* feat(upload prop:maxSize): from component accept prop maxSize
2026-01-03 13:19:40 +08:00
YunaiV
a9f21c1acb feat:【system】菜单管理:增加 visible 管理字段 2026-01-02 19:50:38 +08:00
YunaiV
19c7f0d5dd feat: 【框架】更新 operate-log 的实现 2026-01-02 19:44:09 +08:00
YunaiV
cd43149429 review:【antd/ele】【bpm】流程模型的迁移 2026-01-02 18:49:47 +08:00
YunaiV
19919f6685 Merge remote-tracking branch 'origin/dev' into dev
# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch.
#
# Lines starting with '#' will be ignored, and an empty message aborts
# the commit.
2026-01-02 18:29:54 +08:00
YunaiV
036ef294db feat:【infra】代码生成:字典筛选时,支持 key、name 两种类型 2026-01-02 18:12:23 +08:00
ppxb
7d2bc2e885 fix: dropdown raido menu type error (#7062)
* fix: dropdown raido menu type

* chore: format code
2026-01-02 14:25:19 +08:00
luoqiz
89b237f6b4 feat: 添加上下文菜单演示,添加菜单项隐藏性 (#7057)
Co-authored-by: luoqiz <851092732@qq.com>
2026-01-02 14:22:19 +08:00
芋道源码
d8f685708d !314 Merge remote-tracking branch 'yudao/dev' into dev
Merge pull request !314 from Jason/dev
2026-01-01 13:27:55 +00:00
jason
f8ce09a203 Merge remote-tracking branch 'yudao/dev' into dev 2025-12-31 11:02:11 +08:00
jason
59d83d29cb feat: [bpm][ele] bpm oa 请假迁移 2025-12-31 11:00:13 +08:00
jason
02193755be feat: [bpm][antd] oa 请假优化 2025-12-31 00:04:40 +08:00
芋道源码
6d524906a3 !313 Merge remote-tracking branch 'yudao/dev' into dev
Merge pull request !313 from Jason/dev
2025-12-29 14:43:47 +00:00
jason
cbd1f0bcbb Merge remote-tracking branch 'yudao/dev' into dev 2025-12-29 11:53:00 +08:00
jason
2ba2c8e986 feat: [bpm] [ele,antd] todo 优化, 更多设置问题修复 2025-12-29 11:51:48 +08:00
YunaiV
06f1ae1a66 review:【mall】营销相关 2025-12-29 08:17:35 +08:00
YunaiV
029b2ffaab review:【antd/ele】【mall】营销活动的实现 2025-12-29 07:03:00 +08:00
jason
64ac25de00 Merge remote-tracking branch 'yudao/dev' into dev 2025-12-29 00:12:30 +08:00
jason
6606dfd40a feat: [bpm][ele] todo 优化 2025-12-29 00:09:22 +08:00
芋道源码
6da4a39ff9 !312 feat:【ele/antd】mall todo 优化
Merge pull request !312 from puhui999/dev-mall
2025-12-28 13:23:18 +00:00
puhui999
aa95d0e87c feat:【ele/antd】profile todo 优化 2025-12-28 18:55:07 +08:00
puhui999
6353f0a8e9 feat:【ele/antd】discountActivity todo 优化 2025-12-28 18:34:28 +08:00
puhui999
e6327ae9da feat:【ele】spu todo 优化 2025-12-28 17:57:10 +08:00
puhui999
4395353c22 feat:【ele/antd】rewardActivity todo 优化 2025-12-28 17:35:43 +08:00
puhui999
c023ebbdb9 feat:【ele】cropper、form-create\rules todo 优化 2025-12-28 15:44:21 +08:00
芋道源码
9be7bb5065 !311 (〃'▽'〃) v2025.12 发布:极大极大完善 vben5 的 antd、vben 版本的功能,新增 admin uniapp vue3 版本
Merge pull request !311 from 芋道源码/dev
2025-12-28 03:08:53 +00:00
YunaiV
63a8d562ce feat:【antd/ele】文件上传的组件优化 2025-12-27 18:50:42 +08:00
YunaiV
a109168c66 fix:【pay】修复钱包支付、模拟支付配置的修改报错问题 2025-12-27 17:29:08 +08:00
YunaiV
304f2442eb feat:【antd/ele】【infra】统一 cron-tab 的封装 2025-12-27 17:13:40 +08:00
YunaiV
826a1b355a feat:【antd/ele】对齐两侧的代码 2025-12-27 17:06:15 +08:00
YunaiV
9ef218f930 refactor: 【crm】【antd/ele】提取图表配置生成函数,统一 legend/grid/tooltip 处理,优化饼图面板生成 2025-12-27 17:02:11 +08:00
YunaiV
5a5d2f17da feat:【bpm】【antd/ele】业务表单,支持重新发起流程 2025-12-27 12:49:14 +08:00
芋道源码
70f075b003 !310 chore: new tag
Merge pull request !310 from xingyu/dev
2025-12-27 03:40:30 +00:00
xingyu4j
ab7b77989f fix: lint 2025-12-26 14:25:55 +08:00
xingyu4j
eacff553bd docs: README 2025-12-26 14:18:47 +08:00
xingyu4j
331cb2ca70 fix: sort 2025-12-26 14:18:38 +08:00
xingyu4j
703561ea33 chore: update deps 2025-12-26 14:18:29 +08:00
xingyu4j
c32a4c3e05 feat: remove playground 2025-12-26 14:11:34 +08:00
xingyu4j
77cd814c99 Merge branch 'main' of https://github.com/vbenjs/vue-vben-admin into dev 2025-12-26 14:00:55 +08:00
芋道源码
3908f03418 !309 feat:【antd】【ele】大量更新同步
Merge pull request !309 from 芋道源码/dev
2025-12-26 01:03:05 +00:00
YunaiV
68bb90a503 review:【antd】【iot】代码实现 2025-12-25 09:19:17 +08:00
YunaiV
11b5068e91 review:【antd】【bpm】评审流程详情界面 2025-12-25 00:58:16 +08:00
芋道源码
cb8a633f1f !308 refactor:【antd】【iot】代码优化
Merge pull request !308 from haohaoMT/dev
2025-12-22 14:21:49 +00:00
JyQAQ
a1bb132233 feat(api-cascader): 添加联级组件ApiCascader (#7031) 2025-12-22 20:00:31 +08:00
zhenghaoyang24
022d538940 Fix formatting in thin.md for clarity (#7008)
修改一些语句错误
2025-12-22 19:58:05 +08:00
xueyitt
ccf70a1b76 feat: 修正菜单排序在二级菜单不生效问题 (#7007)
* treeUtil增加对树形结构数据进行递归排序

* 菜单sort排序各级菜单均生效
2025-12-22 19:57:21 +08:00
xingyu4j
af3fe53ec8 fix: type error 2025-12-22 17:50:06 +08:00
xingyu4j
e981fb159f chore: update deps 2025-12-22 17:49:51 +08:00
haohao
6bf9acbfb2 refactor:【antd】【iot】代码优化 2025-12-22 17:30:59 +08:00
xingyu
79b9d55854 Merge branch 'main' into fix 2025-12-22 16:42:15 +08:00
YunaiV
13f81b3130 review:【antd】【iot】代码实现 2025-12-21 23:04:57 +08:00
YunaiV
835da00f2c review:【antd/ele】【bpm】流程模型的迁移 2025-12-21 22:41:03 +08:00
YunaiV
bc654c9d45 fix:【ele】【mall】商品列表的“商品分类”不展示的问题,对应 https://t.zsxq.com/JCOWV 2025-12-21 21:24:59 +08:00
YunaiV
0f864b22c1 fix:【ele】【infra】代码生成时,无法选中菜单,对应 https://t.zsxq.com/xZ4fL 2025-12-21 21:15:49 +08:00
芋道源码
08f6cb7d14 !305 fix: [ele] 树形控件展开和选择属性配置问题
Merge pull request !305 from Lcp/dev
2025-12-21 12:53:39 +00:00
YunaiV
3ea5510a21 review:【antd/ele】【mall】营销模块的迁移 2025-12-21 20:50:27 +08:00
芋道源码
a3f282cba3 !307 mall 商城优化完善
Merge pull request !307 from puhui999/dev-mall
2025-12-21 11:13:33 +00:00
YunaiV
7ab917dc48 fix:【system】邮箱移除无用的 remark 字段及相关表单项 2025-12-20 20:48:24 +08:00
YunaiV
e850ffb038 fix:【bpm】修复流程模型的业务表单,路径的 tooltip 不对 2025-12-20 15:11:54 +08:00
芋道源码
1fc39e3fbb !306 Merge remote-tracking branch 'yudao/dev' into dev
Merge pull request !306 from Jason/dev
2025-12-20 07:10:35 +00:00
puhui999
568d5aa4cf feat:【antd】【mall】修复满减送编辑时表单打开异常的问题,原因:antd RangePicker 需要 dayjs 对象 2025-12-20 11:35:01 +08:00
puhui999
535c82c844 feat:【ele】【mall】seckill 代码对齐 antd 2025-12-20 11:20:34 +08:00
puhui999
c1b1343794 feat:【ele】【mall】rewardActivity 代码对齐 antd 2025-12-20 11:11:00 +08:00
puhui999
41f0a9465d feat:【ele】【mall】point 代码对齐 antd 2025-12-20 10:59:40 +08:00
puhui999
a7054ec09c feat:【ele】【mall】coupon 代码对齐 antd 2025-12-20 10:46:59 +08:00
puhui999
ebf7221fd2 feat:【ele】【mall】ElDialog :append-to-body="true" 2025-12-20 10:40:27 +08:00
puhui999
fad560db52 feat:【ele】【mall】discountActivity 代码对齐 antd 2025-12-20 10:36:50 +08:00
puhui999
503ed01c57 feat:【ele】【mall】combination 代码对齐 antd 2025-12-20 10:32:38 +08:00
puhui999
b9466282fc feat:【ele】【mall】bargain 代码对齐 antd 2025-12-20 10:10:19 +08:00
puhui999
d3a7a874a6 feat:【ele】【mall】comment 代码对齐 antd 2025-12-20 10:04:24 +08:00
YunaiV
d4b99f321d fix:【system】登录日志的“操作类型”改为“登录类型” 2025-12-20 09:23:34 +08:00
puhui999
e1e0554aca feat:【ele】【mall】spu 代码对齐 antd 2025-12-20 09:13:38 +08:00
puhui999
f429e74e79 feat:【antd】【mall】point 优化完善 2025-12-20 08:56:32 +08:00
puhui999
f99d708c97 feat:【antd】【mall】rewardActivity 优化完善 2025-12-20 08:53:47 +08:00
puhui999
57855eff06 feat:【antd】【mall】seckill 优化完善 2025-12-20 08:40:09 +08:00
puhui999
348cc35aec feat:【antd】【mall】combination 优化完善 2025-12-20 08:33:40 +08:00
puhui999
6922ab13fc feat:【antd】【mall】bargain 优化完善 2025-12-20 08:24:30 +08:00
jason
01dd8171e9 Merge remote-tracking branch 'yudao/dev' into dev 2025-12-18 23:32:39 +08:00
jason
0d043bca94 feat: [bpm][ele] bpmn 设计器问题修复 2025-12-18 23:28:59 +08:00
jason
9504fa3980 feat: [bpm][ele] bpmn 设计器流程监听器选择弹窗组件 2025-12-18 23:27:38 +08:00
jason
a91be61c21 feat: [bpm][ele] bpmn 设计器流程表达式选择弹窗组件 2025-12-18 23:25:37 +08:00
jason
b18353e171 feat: [bpm][ele] bpmn 设计器时间事件配置优化 2025-12-18 11:15:35 +08:00
xingyu4j
b2055a4457 chore: update deps 2025-12-17 13:47:37 +08:00
YunaiV
fbcb498f5b feat:【system】操作日志增加 userType 的展示 2025-12-17 13:13:22 +08:00
Liu
32263c2b09 fix: [ele] 树形控件展开和选择属性配置问题 2025-12-17 11:12:51 +08:00
芋道源码
2202ef3b3c !304 refactor:【antd】【iot】重构设备详情页面,优化组件结构与路径,优化设备配置、属性、事件管理等功能
Merge pull request !304 from haohaoMT/dev
2025-12-16 14:55:09 +00:00
haohao
191e15975c refactor:【antd】【iot】重构设备详情页面,优化组件结构与路径,优化设备配置、属性、事件管理等功能 2025-12-16 16:45:35 +08:00
YunaiV
eb17976e96 merge: 合并远程 origin/dev 分支代码 2025-12-16 13:35:38 +08:00
YunaiV
70982eff92 fix:【ele】promotion activity 漏了一个 } 导致报错 2025-12-16 13:33:26 +08:00
芋道源码
5532f59c40 !303 refactor:【antd】【iot】统一列表视图和卡片视图的查询接口
Merge pull request !303 from haohaoMT/dev
2025-12-16 05:28:16 +00:00
haohao
439a35c165 refactor:【antd】【iot】统一列表视图和卡片视图的查询接口 2025-12-16 09:58:16 +08:00
芋道源码
42bdc15df5 !302 Merge remote-tracking branch 'yudao/dev' into dev
Merge pull request !302 from Jason/dev
2025-12-16 00:55:46 +00:00
haohao
3744069aa2 refactor:【antd】【iot】产品详情修改路径到 detail 2025-12-15 22:48:09 +08:00
jason
936e127c0d Merge remote-tracking branch 'yudao/dev' into dev 2025-12-15 22:42:17 +08:00
jason
ba126288a0 feat: [bpm][ele] bpmn 设计器 用户任务配置迁移优化 2025-12-15 22:39:59 +08:00
芋道源码
1d8d70e71a !301 refactor:【antd】【iot】更新首页必要的 ReqVO、RespVO
Merge pull request !301 from haohaoMT/dev
2025-12-15 14:28:31 +00:00
haohao
5cb412a4da refactor:【antd】【iot】更新首页必要的 ReqVO、RespVO 2025-12-15 21:51:09 +08:00
jason
dde16e26fe feat: [bpm][ele] bpmn 设计器迁移 2025-12-15 21:21:54 +08:00
jason
ca8ac99b6e feat: [bpm][ele] bpmn 设计器迁移 2025-12-15 21:03:28 +08:00
YunaiV
e3c1676523 review:【antd/ele】【mall】商品模块的迁移 2025-12-15 19:44:11 +08:00
YunaiV
4ec82f0fd0 review:【antd/ele】【mall】营销模块的迁移 2025-12-15 19:29:47 +08:00
芋道源码
ef0f0a9a9d !300 feat:【ele】【mall】promotion 代码迁移
Merge pull request !300 from puhui999/dev-mall
2025-12-15 09:01:19 +00:00
puhui999
b36c3c4209 feat:【ele】【mall】combination 代码迁移 2025-12-15 16:26:23 +08:00
puhui999
f137a66b6c feat:【ele】【mall】bargain 代码迁移 2025-12-15 16:18:14 +08:00
puhui999
e8526674c5 feat:【ele】【mall】seckill 代码迁移 2025-12-15 16:16:50 +08:00
puhui999
5417b19a8b feat:【ele】【mall】spu 选择组件优化 2025-12-15 16:07:47 +08:00
puhui999
e0d3fac19e feat:【ele】【mall】rewardActivity 代码迁移 2025-12-15 15:55:56 +08:00
puhui999
f943b175eb feat:【ele】【mall】point 代码迁移 2025-12-15 15:29:37 +08:00
YunaiV
3088fb3d46 review:【antd/ele】【MP】代码迁移的 review 2025-12-15 14:27:09 +08:00
芋道源码
43f3303ad2 !299 Merge branch 'dev' of <a href="https://gitee.com/yudaocode/yudao-ui-admin-vben">https://gitee.com/yudaocode/yudao-ui-admin-vben</a> into dev
Merge pull request !299 from dylanmay/dev
2025-12-15 06:17:56 +00:00
dylanmay
bdf1c293bd Merge branch 'dev' of https://gitee.com/yudaocode/yudao-ui-admin-vben into dev 2025-12-15 10:18:46 +08:00
dylanmay
12b0575ca1 fix: resolve todo 2025-12-15 10:13:13 +08:00
puhui999
3102eb511f feat:【ele】【mall】spu 代码迁移 2025-12-14 16:35:58 +08:00
puhui999
d8c87c0f7c feat:【antd】【mall】砍价活动商品选择优化 2025-12-14 15:05:46 +08:00
puhui999
f849f3ad3d feat:【antd】【mall】拼团活动商品选择优化 2025-12-14 14:59:24 +08:00
芋道源码
47dfccd9eb Merge pull request #187 from solante1012/dev
fix: [bpm][antd] BPM 设计器用户任务, 点击查不到数据问题
2025-12-13 10:27:01 +08:00
芋道源码
1d0b14bbe5 !298 Merge remote-tracking branch 'yudao/dev' into dev
Merge pull request !298 from Jason/dev
2025-12-13 01:15:08 +00:00
jason
07c8763fae Merge remote-tracking branch 'yudao/dev' into dev 2025-12-13 00:43:26 +08:00
jason
8df5fbc843 feat: [bpm][antd] bpmn 设计器时间事件定义优化 2025-12-13 00:39:00 +08:00
chencan
51ce864dbd fix: [bpm][antd] BPM 设计器用户任务, 点击查不到数据问题 2025-12-12 15:12:39 +08:00
jason
d50b9fae60 fix: [bpm][antd] bpmn 设计器审批人超时未处理自定义配置问题修复 2025-12-12 13:36:50 +08:00
jason
0db2710e80 fix: [bpm][antd] bpmn 设计器流转条件问题修复 2025-12-11 18:05:58 +08:00
芋道源码
380f74015e !297 Merge remote-tracking branch 'yudao/dev' into dev
Merge pull request !297 from Jason/dev
2025-12-09 15:26:58 +00:00
jason
2fc76789e2 Merge remote-tracking branch 'yudao/dev' into dev 2025-12-09 23:15:54 +08:00
jason
43ed7aeefb feat: [bpm][antd] bpmn 设计器子流程调用问题修复 2025-12-09 23:14:35 +08:00
jason
28e4305916 feat: [bpm][antd] bpm 设计器接收任务优化 2025-12-09 20:20:47 +08:00
芋道源码
223be87dc8 !296 feat: [bpm][antd] bpmn设计器脚本任务优化
Merge pull request !296 from Jason/dev
2025-12-09 01:11:31 +00:00
jason
70bcc5ea0f feat: [bpm][antd] bpmn设计器脚本任务优化 2025-12-08 23:41:34 +08:00
jason
fba43de19f fix: [bpm][antd] bpm设计器 ServiceTask 问题修复 2025-12-08 22:55:27 +08:00
YunaiV
f1c7a4ebfb review:【antd】【BPM】代码迁移的 review 2025-12-08 08:59:55 +08:00
芋道源码
67ed1753a7 !295 feat: [bpm][antd] bpm设计器 用户任务自定义配置优化
Merge pull request !295 from Jason/dev
2025-12-08 00:54:24 +00:00
jason
1c17746864 feat: [bpm][antd] bpm设计器 用户任务自定义配置优化 2025-12-08 00:01:44 +08:00
jason
2cf7e70b70 feat: [bpm][antd] bpm设计器 多人审批方式优化 2025-12-07 23:59:50 +08:00
jason
cfb9a9b3c9 fix: 冲突解决 2025-12-07 21:22:27 +08:00
YunaiV
2a4c774aca review:【antd/ele】【iot】代码迁移的 review 2025-12-07 16:36:55 +08:00
芋道源码
250109507f !294 refactor:【antd】【iot】将物联网设备和产品枚举整合为常量,优化设备导入功能,简化设备管理UI组件
Merge pull request !294 from haohaoMT/dev
2025-12-07 04:53:11 +00:00
YunaiV
03d25bf85a review:【antd/ele】【mp】代码迁移的 review 2025-12-07 12:51:51 +08:00
芋道源码
2fc86b7bda !292 fix: todo 处理
Merge pull request !292 from dylanmay/dev
2025-12-07 04:36:19 +00:00
YunaiV
274aa7da73 fix: 【bpm】bpmn设计器: 消息与信号不能保存,对应issure:#202 #206【同步自 vue3 + element-plus】 2025-12-07 12:28:24 +08:00
YunaiV
7366b948a3 fix: 【bpm】bpmn设计器: 组件部分属性第一次失去焦点丢失数据问题 #204 【同步自 vue3 + element-plus】 2025-12-07 12:26:03 +08:00
jason
89f93d0291 feat: [bpm][antd] bpm 设计器消息与信号,文档描述优化 2025-12-06 21:56:27 +08:00
haohao
2b270caf30 refactor:【antd】【iot】将物联网设备和产品枚举整合为常量,优化设备导入功能,简化设备管理UI组件 2025-12-06 17:54:46 +08:00
jason
21b5dc255e fix: [bpm][antd] bpm 设计器添加属性问题修复 2025-12-06 16:59:02 +08:00
JyQAQ
1479f159aa feat(CellImage): CellImage组件支持图片属性写入 (#6992) 2025-12-06 10:12:58 +08:00
jason
5e1abfb08a Merge remote-tracking branch 'yudao/dev' into dev 2025-12-05 22:54:07 +08:00
jason
604517b2ab feat: [bpm][antd] bpm 设计器执行监听器优化 2025-12-05 22:52:42 +08:00
jason
d3cfc67bd7 feat: [bpm][antd] BPM 设计器选择监听器 2025-12-05 21:24:32 +08:00
xingyu4j
7bf7e09002 fix: lint 2025-12-05 15:09:43 +08:00
xingyu4j
de8d39ffed chore: workspace file is deprecated 2025-12-05 15:07:39 +08:00
xingyu4j
543a7e3962 chore: update deps 2025-12-05 14:55:44 +08:00
dylanmay
5bae28516c fix: todo 处理 2025-12-05 11:00:48 +08:00
dylanmay
5a6122ab75 Merge branch 'dev' of https://gitee.com/yudaocode/yudao-ui-admin-vben into dev 2025-12-05 09:37:41 +08:00
dylanmay
5021f2487d fix: ele mp 素材管理 2025-12-05 09:35:49 +08:00
jason
75a2b331b7 feat: [bpm][antd] 用户和部门选择组件位置优化 2025-12-04 22:35:40 +08:00
xingyu4j
9dfe3f5af8 fix: type not find 2025-12-04 18:03:55 +08:00
xingyu4j
f11b08d8cb chore: update deps 2025-12-04 17:59:12 +08:00
xingyu
cc375100cb !290 refactor:【antd】【iot】产品管理问题修复
Merge pull request !290 from haohaoMT/dev
2025-12-04 03:07:26 +00:00
xingyu
dea8bf4631 !291 Merge remote-tracking branch 'yudao/dev' into dev
Merge pull request !291 from Jason/dev
2025-12-04 03:05:40 +00:00
jason
d7d883a54c Merge remote-tracking branch 'yudao/dev' into dev 2025-12-03 23:57:54 +08:00
jason
943a8e0cee fix: [bpm][antd] BPM 设计器任务监听器问题修复 2025-12-03 23:55:28 +08:00
xingyu4j
45b6f08984 chore: neverBuiltDependencies 2025-12-03 16:34:14 +08:00
xingyu4j
92a4676f8d chore: update version 2025-12-03 16:27:14 +08:00
xingyu4j
7bf7c0bb06 chore: remove unused deps 2025-12-03 16:26:58 +08:00
xingyu4j
8f8cf5b704 chore: update deps 2025-12-03 16:22:14 +08:00
xingyu4j
6be238430d chore: add cspell 2025-12-03 16:12:08 +08:00
xingyu4j
f77216d8f4 feat: lint add pnpm config 2025-12-03 16:11:51 +08:00
xingyu4j
d42a9b2409 feat: lint add yaml config 2025-12-03 16:01:27 +08:00
xingyu4j
6753834054 fix: lint 2025-12-03 15:37:33 +08:00
xingyu4j
77a4a64eb4 fix: stylelint 2025-12-03 15:37:20 +08:00
xingyu4j
49db40d557 feat: cspell sort 2025-12-03 15:37:04 +08:00
xingyu4j
0032c608f1 chore: update deps 2025-12-03 15:36:43 +08:00
xingyu4j
fa603b32b1 fix: locales 2025-12-03 13:51:30 +08:00
JyQAQ
9105d4d14a feat(api-component): api-component组件的options支持指定disabled值 (#6991) 2025-12-03 10:03:23 +08:00
haohao
62b12235f7 refactor:【antd】【iot】产品管理问题修复 2025-12-02 17:54:18 +08:00
haohao
00ee233f14 refactor:【antd】【iot】设备分组和产品分类表单简化 2025-12-02 16:17:00 +08:00
芋道源码
ae1c75ae9a !289 Merge remote-tracking branch 'yudao/dev' into dev
Merge pull request !289 from Jason/dev
2025-12-01 16:50:15 +00:00
jason
b94513dee4 Merge remote-tracking branch 'yudao/dev' into dev 2025-12-01 20:47:51 +08:00
YunaiV
16f9057e1c review:【antd】【mall】diy 店铺装修 2025-12-01 19:40:07 +08:00
芋道源码
60400525cc !287 fix: ele wx-material-select组件同步
Merge pull request !287 from hw/dev
2025-12-01 11:23:59 +00:00
YunaiV
c05463ca0a review:【antd】【mall】营销活动的商品选择 2025-12-01 19:21:30 +08:00
YunaiV
a2e6e5097d review:【antd】【mall】营销活动的商品选择 2025-12-01 19:20:28 +08:00
芋道源码
68fc2f6a33 !288 feat:【antd】【mall】商城活动优化
Merge pull request !288 from puhui999/dev-mall
2025-12-01 10:54:59 +00:00
puhui999
a5b51f45da feat:【antd】【mall】商城活动优化 2025-12-01 18:37:05 +08:00
xingyu4j
05c064a250 fix: lint 2025-12-01 17:03:38 +08:00
xingyu4j
d16ebea639 fix: #ID9R98 2025-12-01 16:56:22 +08:00
jason
29e79448e4 feat: [bpm][antd] todo 修改, 一些优化 2025-12-01 15:53:57 +08:00
hw
a9a075346f fix: 【装修】todo修复 2025-12-01 15:48:27 +08:00
jason
0731999e7d feat: [bpm][antd] bpmn 设计器问题修复 2025-12-01 12:52:18 +08:00
hw
aedcf2d05c fix: ele wx-material-select组件同步 2025-12-01 10:40:36 +08:00
luoqiz
c76db7d8d1 fix: 修复icon丢失根属性导致的样式错误 (#6986) 2025-12-01 09:51:27 +08:00
芋道源码
df7135b288 !286 Merge remote-tracking branch 'yudao/dev' into dev
Merge pull request !286 from Jason/dev
2025-11-30 02:07:47 +00:00
jason
867ebf2967 Merge remote-tracking branch 'yudao/dev' into dev 2025-11-30 00:12:03 +08:00
jason
56669b134c feat: [bpm][ele] bpm 迁移优化 2025-11-30 00:10:54 +08:00
jason
e18bbca376 feat: [bpm][ele] bpm 迁移优化 2025-11-30 00:08:25 +08:00
YunaiV
86894d6e66 fix:【antd】【bpm】simple 设计器:画布的 CSS transition 属性以解决拖拽卡顿问题,来自:https://github.com/yudaocode/yudao-ui-admin-vue3/pull/173 2025-11-29 19:51:19 +08:00
YunaiV
2548db3fda feat:【antd】【bpm】bpmn 设计器:服务任务中新增执行类型,来自:https://github.com/yudaocode/yudao-ui-admin-vue3/pull/200/ 2025-11-29 18:46:40 +08:00
YunaiV
3f9dc0becc feat:【antd】【bpm】bpmn 设计器:修复一些bpmn-js标签typo问题,新增一些翻译,来自:https://github.com/yudaocode/yudao-ui-admin-vue3/pull/201 2025-11-29 18:36:58 +08:00
YunaiV
22aefe72f4 feat:【antd】【bpm】bpmn 设计器:优化 消息和信号 的新增,自动生成符合BPMN规范的id,来自:https://github.com/yudaocode/yudao-ui-admin-vue3/pull/203 2025-11-29 18:30:23 +08:00
YunaiV
6c9affae76 feat:【antd】【bpm】bpmn 设计器:工作流节点操作按钮的操作不起作用,来自:9f1c4f2578 2025-11-29 18:14:41 +08:00
YunaiV
71c80efab0 feat:【antd】【bpm】bpmn 设计器:增加消息与信号的编辑、删除功能,来自:c568d45180 2025-11-29 18:09:49 +08:00
YunaiV
f7ce553771 feat:【antd】【bpm】bpmn 设计器:bpmn 设计器:使用定时中间捕获事件,部署流程图提示校验失败:flowable-event-timer-missing-configuration,来自:b666e1bdd4 2025-11-29 18:05:03 +08:00
YunaiV
f9913692f0 feat:【antd】【bpm】bpmn 设计器:保留非监听器类型的扩展属性,避免移除监听器时清空其他配置,来自:33e489ebfc 2025-11-29 18:01:22 +08:00
YunaiV
72bbfd4a9c fix:【infra】数据源 id = 0 可以被编辑的错误 2025-11-29 16:12:38 +08:00
YunaiV
7aab11b984 feat:【system】支付宝小程序登录补充 2025-11-29 16:06:23 +08:00
YunaiV
09300af7bc feat:【infra】文件配置,增加 region 区域 2025-11-29 15:59:55 +08:00
YunaiV
6fb3480676 review:【antd/ele】【mp】代码迁移的 review 2025-11-29 11:54:15 +08:00
芋道源码
3409a8a88f !284 Merge branch 'dev' of <a href="https://gitee.com/yudaocode/yudao-ui-admin-vben">https://gitee.com/yudaocode/yudao-ui-admin-vben</a> into dev
Merge pull request !284 from dylanmay/dev
2025-11-29 03:34:46 +00:00
YunaiV
bdb63cb293 review:【antd】【mall】店铺装修 2025-11-29 11:32:37 +08:00
YunaiV
0ffebd6de4 feat:【antd】【mall】优化满减送的界面 2025-11-29 11:17:37 +08:00
YunaiV
56409edff4 Merge remote-tracking branch 'origin/dev' 2025-11-29 10:42:13 +08:00
YunaiV
d868e4abfc review:【antd】【mall】商品选择相关逻辑 2025-11-29 10:30:48 +08:00
xingyu
65b210faf6 !285 !283 Merge remote-tracking branch 'yudao/dev' into dev
Merge pull request !285 from xingyu/dev
2025-11-28 10:12:18 +00:00
dylanmay
6214c33c86 Merge branch 'dev' of https://gitee.com/yudaocode/yudao-ui-admin-vben into dev 2025-11-28 15:51:53 +08:00
dylanmay
1dc2a31f84 fix: resolve ele to do 2025-11-28 15:42:19 +08:00
dylanmay
0d0d9e30c0 fix: resolve antd to do 2025-11-28 15:41:17 +08:00
dylanmay
ffc48fa171 fix: resolve antd to do 2025-11-28 15:39:39 +08:00
xingyu
8fa541ac95 !283 Merge remote-tracking branch 'yudao/dev' into dev
Merge pull request !283 from Jason/dev
2025-11-28 02:34:23 +00:00
jason
86efe618de Merge remote-tracking branch 'yudao/dev' into dev 2025-11-28 09:13:09 +08:00
jason
c9d917b649 feat: [bpm][ele] 发起流程迁移 2025-11-28 00:26:42 +08:00
YunaiV
6a8f60957d review:【antd/ele】【mall】代码迁移的 review 2025-11-27 17:58:54 +08:00
芋道源码
271923999c !282 feat:【antd】【mall】满减送组件优化
Merge pull request !282 from puhui999/dev-mall
2025-11-27 09:54:39 +00:00
puhui999
33c7f38ec3 feat:【antd】【mall】满减送组件优化 2025-11-27 17:50:07 +08:00
xingyu4j
1f212e7e6a Merge branch 'dev' of https://gitee.com/yudaocode/yudao-ui-admin-vben into dev 2025-11-27 17:25:13 +08:00
puhui999
07c209bd1d feat:【antd】【mall】满减送组件优化 2025-11-27 17:20:12 +08:00
YunaiV
7d9285de96 review:【antd/ele】【mp】代码迁移的 review 2025-11-27 16:24:39 +08:00
xingyu4j
d558ebe510 fix: todo 比较通用 2025-11-27 14:08:17 +08:00
xingyu4j
0ab23a98d8 fix: todo 比较通用的功能 2025-11-27 14:07:00 +08:00
xingyu4j
7fea95adff fix: lint 2025-11-27 13:55:12 +08:00
xingyu
a976ca88f6 !281 Merge branch 'dev' of <a href="https://gitee.com/yudaocode/yudao-ui-admin-vben">https://gitee.com/yudaocode/yudao-ui-admin-vben</a> into dev
Merge pull request !281 from dylanmay/dev
2025-11-27 05:33:41 +00:00
dylanmay
6c5a65a6bd Merge branch 'dev' of https://gitee.com/yudaocode/yudao-ui-admin-vben into dev 2025-11-27 12:17:53 +08:00
xingyu4j
8d9d60b960 fix: ele build error 2025-11-27 11:27:42 +08:00
xingyu4j
80c61f00eb fix: build error 2025-11-27 11:24:07 +08:00
xingyu4j
08eb0d6bc0 fix: build error 2025-11-27 11:22:19 +08:00
xingyu4j
dcb491dfa8 fix: build error 2025-11-27 11:22:17 +08:00
xingyu4j
45449475e3 chore: deps 2025-11-27 11:08:23 +08:00
xingyu4j
219c8e19c4 fix: tailwindcss style 2025-11-27 11:05:57 +08:00
xingyu4j
1a18c5c771 fix: tailwindcss style 2025-11-27 11:05:04 +08:00
xingyu4j
8e2c85770c fix: lint 2025-11-27 11:04:41 +08:00
xingyu4j
54bd498f24 fix: tailwindcss style 2025-11-27 11:04:23 +08:00
xingyu4j
9ce498f269 fix: lint 2025-11-27 11:03:49 +08:00
dylanmay
5374e64bcb fix: resolve todo 2025-11-27 09:55:24 +08:00
芋道源码
631c098c11 !280 Merge remote-tracking branch 'yudao/dev' into dev
Merge pull request !280 from Jason/dev
2025-11-26 15:13:19 +00:00
jason
8fa9366a19 Merge remote-tracking branch 'yudao/dev' into dev 2025-11-26 22:50:12 +08:00
jason
fe8d13da66 feat: [bpm][ele] 流程/任务详情迁移 2025-11-26 22:49:00 +08:00
jason
ac305676d8 feat: [bpm][ele] 流程/任务详情迁移 2025-11-26 22:46:38 +08:00
YunaiV
03e5bf5c3d fix:【antd】构建失败的问题 2025-11-26 19:24:49 +08:00
YunaiV
4af433e4d7 review:【antd/ele】代码迁移的 review 2025-11-26 19:17:55 +08:00
芋道源码
d5e2afdb55 !279 fix: 图文草稿箱样式调整、todo修复
Merge pull request !279 from hw/dev
2025-11-26 11:08:51 +00:00
YunaiV
3cb0afe319 feat:【ele】【mp】模版消息的新增 2025-11-26 19:08:09 +08:00
YunaiV
672a6c9ccc feat:【antd】【mp】模版消息的新增 2025-11-26 19:05:08 +08:00
puhui999
4f45438e11 feat:【antd】【mall】积分商城活动优化 2025-11-26 16:40:13 +08:00
puhui999
0ded54872b fix:【antd】【mall】优化修复 spu-and-sku-list 选择器 2025-11-26 16:34:14 +08:00
puhui999
ea57b64795 fix:【antd】【mall】优化修复 sku-table-select 选择器 2025-11-26 16:30:30 +08:00
hw
0b2d35fc67 fix: 草稿箱行内样式修改 2025-11-26 15:44:00 +08:00
hw
c014f2a188 fix: 图文草稿箱样式调整、todo修复 2025-11-26 10:46:24 +08:00
芋道源码
4be5f8f799 !278 fix: 修复freePublish list类型错误
Merge pull request !278 from jawe/dev
2025-11-26 02:22:31 +00:00
YunaiV
2401559fa5 review:【antd】【mall】商品发布的迁移 2025-11-26 10:21:19 +08:00
芋道源码
58e8a71936 !277 feat:【antd】【mall】spu 优化
Merge pull request !277 from puhui999/dev-mall
2025-11-26 01:58:40 +00:00
jawe
6a95ed1af0 fix: 修复freePublish list类型错误 2025-11-26 09:53:26 +08:00
puhui999
c6ef772f93 fix:【antd】【mall】完善评论商品选择 2025-11-25 23:36:17 +08:00
puhui999
9b521cff90 fix:【antd】【mall】业务弹窗选择组件的 Modal 改成使用 antd 自己的。原因是 vben modal 嵌套关闭一个会全都关闭。 2025-11-25 21:29:35 +08:00
YunaiV
eb27bd5c6d review:【antd/ele】代码迁移的 review 2025-11-25 21:13:46 +08:00
YunaiV
b4a679dd08 feat: 【antd/ele】【infra】表单设计器:添加返回值类型配置到部门选择器 2025-11-25 20:09:06 +08:00
puhui999
c1fa433348 fix:【antd】【mall】业务弹窗选择组件的 Modal 改成使用 antd 自己的。原因是 vben modal 嵌套关闭一个会全都关闭。 2025-11-25 19:02:56 +08:00
puhui999
58e958fd87 fix:【antd】【mall】sku-list 为选择列(checkbox)添加了 fixed="left" 属性,确保它始终固定在第一列 2025-11-25 18:25:11 +08:00
puhui999
46129c53af feat:【antd】【mall】 优化积分商城活动表单 2025-11-25 18:22:00 +08:00
芋道源码
d40b6bc25b !276 fix: 启动命令还原
Merge pull request !276 from hw/dev
2025-11-25 10:18:15 +00:00
hw
11e3528eec fix: 启动命令还原 2025-11-25 14:46:55 +08:00
hw
46663651b4 fix: 遗漏修改 2025-11-25 14:45:52 +08:00
hw
1aad3b641c fix: eslint 2025-11-25 14:44:08 +08:00
hw
b4c77f5498 fix: 新分支迁移mp 2025-11-25 14:42:56 +08:00
Jin Mao
6f39e9136e Merge branch 'main' into feature/antd上传组件支持调用Image组件查看图片 2025-11-24 21:59:34 +08:00
xingyu4j
f22b390380 fix: lint 2025-11-24 15:34:25 +08:00
xingyu4j
c3a702efbf chore: lock 2025-11-24 15:34:18 +08:00
puhui999
26416b0acd feat:【antd】【mall】 spu 相关公共组件迁移 2025-11-24 15:07:00 +08:00
puhui999
390d9d7ca7 feat:【antd】【mall】 spu 相关公共组件迁移 2025-11-24 15:03:20 +08:00
xingyu4j
5804bc59f4 fix: lint 2025-11-24 14:35:21 +08:00
xingyu4j
a8fc1e5d33 fix: tdesign lint 2025-11-24 14:35:16 +08:00
xingyu4j
2c0c71e20a fix: naive lint 2025-11-24 14:35:01 +08:00
xingyu4j
db8d66d046 fix: ele lint 2025-11-24 14:34:52 +08:00
xingyu4j
50ba0c137a fix: antd lint 2025-11-24 14:34:38 +08:00
puhui999
c842592d10 feat:【antd】【mall】ProductAttributes 组件样式优化 2025-11-24 14:23:36 +08:00
xingyu4j
709afe9a83 Merge branch 'dev' of https://gitee.com/yudaocode/yudao-ui-admin-vben into dev 2025-11-24 13:54:12 +08:00
puhui999
0ae62ef7e7 feat:【antd】【mall】spu 优化 2025-11-24 12:00:50 +08:00
xingyu4j
8f0b784124 feat: merge github 2025-11-24 11:47:54 +08:00
YunaiV
2926a8aa36 feat:【antd/ele】【mp】freePublish review 2025-11-24 11:47:47 +08:00
xingyu4j
e44f9a0aca Merge branch 'main' of https://github.com/vbenjs/vue-vben-admin into dev 2025-11-24 11:47:31 +08:00
芋道源码
ffba101d39 !271 feat: [mp] 图文发表记录迁移
Merge pull request !271 from jawe/dev
2025-11-24 03:30:18 +00:00
jawe
77596d716b feat: [mp] 图文发表记录迁移 2025-11-24 11:04:38 +08:00
milletpeak
1f1ba16ead Merge branch 'main' into milletpeak-fontsize 2025-11-24 08:55:54 +08:00
panda7
b6edc5f574 fix: centered 为 true 时设置 draggable 无法拖拽 (#6948)
Co-authored-by: sqchen <chenshiqi@sshlx.com>
2025-11-24 08:38:10 +08:00
Jin Mao
8b0f138100 Merge branch 'main' into deps 2025-11-24 08:23:02 +08:00
ming4762
a810cd0b48 fix: fix IconPicker reporting an error when using search if no icon is found (#6944)
* 修复未搜索图标时分页报错的问题
 * 优化`IconPicker` 的分页逻辑,由total触发跳转到第一页,而不是用户控制
2025-11-24 07:56:55 +08:00
aonoa
b17fec41b0 fix: tree component cannot set a value (#6941)
Signed-off-by: aonoa <1991849113@qq.com>
2025-11-24 07:56:16 +08:00
Rex
5fcfabf1d4 fix: 修复菜单管理中标题栏样式异常问题 (#6934) 2025-11-24 07:00:08 +08:00
YunaiV
cc7e8eda4f feat:【antd/ele】【mp】菜单的 review 2025-11-23 21:03:36 +08:00
YunaiV
5622b810e4 feat:【antd/ele】【mp】图文草稿箱的 review 2025-11-23 20:52:13 +08:00
YunaiV
97e337ef16 feat:【antd/ele】【mp】autoReply 迁移完成 2025-11-23 20:08:49 +08:00
芋道源码
e60bbcf1d5 !268 Merge branch 'dev' of <a href="https://gitee.com/yudaocode/yudao-ui-admin-vben">https://gitee.com/yudaocode/yudao-ui-admin-vben</a> …
Merge pull request !268 from hw/reform-mp
2025-11-23 10:53:33 +00:00
YunaiV
42697ec614 review:【antd】【iot】首页的迁移 2025-11-23 18:51:16 +08:00
芋道源码
a32ff4a9c9 !269 refactor:【antd】【iot】重构首页统计组件,优化图表配置和数据加载逻辑,移除未使用的比较卡片组件
Merge pull request !269 from haohaoMT/dev
2025-11-23 10:43:57 +00:00
YunaiV
7a3780ca0b fix:【antd】DatePicker 在 valueFormat: 'x' 时,会存在告警,对应 https://gitee.com/yudaocode/yudao-ui-admin-vben/issues/ID43CX 2025-11-23 18:42:44 +08:00
YunaiV
adf4c23dbc fix:【antd/ele】【bpm】修复模型管理的权限控制错误,对应 https://github.com/yudaocode/yudao-ui-admin-vben/issues/142 2025-11-23 18:23:47 +08:00
芋道源码
183547cdf2 !270 Merge remote-tracking branch 'yudao/dev' into dev
Merge pull request !270 from Jason/dev
2025-11-23 10:15:45 +00:00
jason
5b3f1b7ea0 Merge remote-tracking branch 'yudao/dev' into dev 2025-11-23 17:41:22 +08:00
jason
82b787188b feat: [bpm][ele] 仿钉钉流程设计器子流程迁移问题修复 2025-11-23 17:40:08 +08:00
haohao
c4ec1748a8 refactor:【antd】【iot】更新消息趋势卡片组件,替换日期选择器为快捷日期范围选择器 2025-11-23 16:02:21 +08:00
haohao
7d8c57711f refactor:【antd】【iot】优化消息趋势卡片组件,调整图表渲染逻辑 2025-11-23 15:44:24 +08:00
YunaiV
86991eb67b fix:【bpm】提交人权限的错误文案提示,https://gitee.com/zhijiantianya/yudao-cloud/issues/ICXD5T 2025-11-23 15:32:42 +08:00
YunaiV
3b5850bf6b fix:【framework】文件、图片上传的类型限制多选配置不正确的问题,https://t.zsxq.com/Pf1m7 2025-11-23 15:17:33 +08:00
haohao
a1e6982a28 refactor:【antd】【iot】重构首页统计组件,优化图表配置和数据加载逻辑,移除未使用的比较卡片组件 2025-11-23 15:07:21 +08:00
jason
c9fc450d74 Merge remote-tracking branch 'yudao/dev' into dev 2025-11-23 12:00:12 +08:00
jason
fec9a768d9 feat: [bpm][ele] 仿钉钉流程设计器迁移问题修复 2025-11-23 10:56:59 +08:00
jason
0e6d92e328 feat: [bpm][ele] 仿钉钉设计器迁移问题修复 2025-11-23 00:06:12 +08:00
YunaiV
b06278b3fd 834 fix:bpm 流程表单编辑打开直接保存js丢失问题修复 2025-11-22 22:05:27 +08:00
jason
c01b09b64b feat: [bpm][ele] 仿钉钉流程模型迁移 2025-11-22 09:29:25 +08:00
jason
9fa9437abf feat: [bpm][ele] 仿钉钉流程模型迁移 2025-11-22 09:20:49 +08:00
jason
dee1764556 feat: [bpm][ele] 用户选择弹窗,部门选择弹窗组件迁移 2025-11-21 22:12:24 +08:00
hw
a76583a522 Merge branch 'dev' of https://gitee.com/yudaocode/yudao-ui-admin-vben into reform-mp 2025-11-21 18:20:07 +08:00
hw
8d7d3d5fe1 fix: todo修复 2025-11-21 18:19:42 +08:00
yuan.ji
1d77b018bb feat(function): add antd上传组件支持调用Image组件查看图片 2025-11-21 17:33:59 +08:00
YunaiV
80b4a16dc4 review:【antd】【iot】数据流转 2025-11-21 11:35:39 +08:00
YunaiV
f650d44194 review:【antd】【iot】物模型的管理 2025-11-21 11:20:27 +08:00
YunaiV
543e48504b review:【antd】【iot】设备管理(暂未彻底 review,等 product 搞完) 2025-11-21 10:53:54 +08:00
YunaiV
77afbe4d64 review:【antd】【iot】产品管理 2025-11-21 10:48:06 +08:00
jason
ff8187bcb0 feat: [bpm][ele] 新建流程模型 20% 2025-11-21 09:44:56 +08:00
YunaiV
863fbf7456 review:【antd】【iot】设备分组 2025-11-21 09:34:28 +08:00
YunaiV
0251dc2f3b review:【antd】【iot】商品分类 2025-11-21 09:23:55 +08:00
YunaiV
c38d746c25 review:【antd】【iot】首页统计 2025-11-21 09:17:19 +08:00
芋道源码
23b87b13c4 !260 refactor:【antd】【iot】优化设备详情中的自动刷新开关样式
Merge pull request !260 from haohaoMT/dev
2025-11-20 13:54:57 +00:00
YunaiV
0207271e62 feat:【ele/antd】【mall】diy 的 coupon 组件的代码风格统一 2025-11-20 21:39:53 +08:00
YunaiV
5c9a86c0f0 feat:【antd】【mp】mp 的代码评审(menu) 2025-11-20 21:36:36 +08:00
YunaiV
53ef992d1e feat:【antd】【mp】mp 的代码评审(material) 2025-11-20 21:25:46 +08:00
YunaiV
e2848653f9 feat:【antd】【mp】mp 的代码评审(autoReply) 2025-11-20 21:18:21 +08:00
YunaiV
8d2da0a4d1 feat:【antd】【mp】mp 的代码评审(components) 2025-11-20 21:09:02 +08:00
YunaiV
c39a445d77 feat:【antd】【mp】mp 的代码评审(draft) 2025-11-20 18:40:35 +08:00
YunaiV
5b4d3c9820 feat:【antd】【mp】mp 的代码评审 2025-11-20 18:08:15 +08:00
芋道源码
7f9041da18 !266 【antd/ele】【mp】迁移
Merge pull request !266 from hw/reform-mp
2025-11-20 09:57:17 +00:00
芋道源码
ee7b0de534 !267 Merge remote-tracking branch 'yudao/dev' into dev
Merge pull request !267 from Jason/dev
2025-11-20 09:54:06 +00:00
hw
c815e07321 fix: gitignore 2025-11-20 16:46:04 +08:00
hw
99e9d90e66 fix: gitignore 2025-11-20 16:38:35 +08:00
hw
05bf8092d0 Merge branch 'dev' of https://gitee.com/yudaocode/yudao-ui-admin-vben into reform-mp 2025-11-20 16:31:23 +08:00
hw
0cb43368b4 fix: 环境变量还原 2025-11-20 16:30:35 +08:00
jason
fe940663cd Merge remote-tracking branch 'yudao/dev' into dev 2025-11-20 16:27:47 +08:00
YunaiV
21b5c126c1 feat:【antd/ele】【组件】dict-tag 封装的代码统一评审 2025-11-20 16:22:47 +08:00
YunaiV
342a948bc0 feat:【antd/ele】【组件】form-create 封装的代码统一评审 2025-11-20 16:10:41 +08:00
jason
acb0cd350c feat: [bpm][ele] 流程定义列表 2025-11-20 16:06:35 +08:00
YunaiV
4aef96a8f8 feat:【antd/ele】【组件】cron-tab 封装的代码统一评审 2025-11-20 15:41:36 +08:00
YunaiV
c295fdda37 feat:【antd/ele】【组件】cropper 封装的代码统一评审 2025-11-20 15:41:29 +08:00
YunaiV
76c3632c52 feat:【antd/ele】【组件】table-action 封装的代码统一(剩余部分) 2025-11-20 15:24:09 +08:00
YunaiV
5147e75331 feat:【antd/ele】【组件】tinymce 封装的代码统一 2025-11-20 15:19:45 +08:00
jason
656e6447f0 Merge remote-tracking branch 'yudao/dev' into dev 2025-11-20 13:32:53 +08:00
jason
2cf122ed14 feat: [bpm][ele] 流程模型列表 2025-11-20 13:02:37 +08:00
YunaiV
f425b821b3 feat:【ele】【infra】优化文件管理 2025-11-20 11:56:12 +08:00
YunaiV
cf581f3bb3 feat:【antd/ele】【mall/stat】优化 api 的注释 2025-11-20 11:05:51 +08:00
hw
0ea99e5aa8 fix: ele改回使用账号选择组件 2025-11-20 11:05:18 +08:00
YunaiV
f278ebaf79 feat:【antd/ele】【mall/stat】优化 api 的注释 2025-11-20 11:00:24 +08:00
YunaiV
937aac5b01 feat:【antd/ele】【mall/trade】优化 api 的注释 2025-11-20 10:50:17 +08:00
hw
cf14806b6f fix: todo修复 2025-11-20 10:34:21 +08:00
xingyu4j
712fdb6382 docs: images 2025-11-20 09:21:40 +08:00
xingyu4j
648224c252 docs: image 2025-11-20 09:21:24 +08:00
xingyu4j
17cd7670ab chore: move ci 2025-11-20 09:18:58 +08:00
YunaiV
2e4d79c99d feat:【antd/ele】【mall/product】优化 api 的注释 2025-11-20 09:16:08 +08:00
YunaiV
19c45368db feat:【antd/ele】【mall/promotion】优化 api 的注释 2025-11-20 09:09:46 +08:00
YunaiV
4d6eeb2681 feat:【antd/ele】【pay】优化 api 的注释 2025-11-20 08:43:34 +08:00
YunaiV
5743c213c2 feat:【ele】【bpm】优化 api 的注释 2025-11-20 08:37:08 +08:00
YunaiV
55cd88080c feat:【antd】【mp】优化 api 的注释 2025-11-19 22:18:02 +08:00
YunaiV
d7b6c87e33 feat:【antd/ele】【mp】优化 mp 账号的选择逻辑 2025-11-19 21:58:25 +08:00
YunaiV
25cd2b629c feat:【antd】【mp】review 枚举类相关的代码 2025-11-19 21:05:32 +08:00
YunaiV
234ca5cfa4 feat:【全局】system-enum.ts 拆分成 biz-*-enum.ts 多个枚举类,解耦 2025-11-19 20:51:26 +08:00
YunaiV
c0fe164710 feat:【ele】【ai】chat/index:修复小按钮之间的间隙不生效问题 2025-11-19 20:31:33 +08:00
YunaiV
55b47214c6 feat:【ele】【ai】chat/index:修复 conversation 高度不够的问题 2025-11-19 20:21:03 +08:00
YunaiV
ca04195846 feat:【ele】【ai】chat/index:关键组件的 review 2025-11-19 20:16:31 +08:00
YunaiV
241471f17a feat:【ele】【ai】chat/index:角色面板的优化 2025-11-19 18:48:19 +08:00
YunaiV
3b434cefa9 feat:【antd】【ai】chat/index:角色面板的优化 2025-11-19 17:10:51 +08:00
YunaiV
523e4b81da feat:【antd/ele】【ai】优化 api 格式 2025-11-19 16:46:34 +08:00
YunaiV
42f30230f2 feat:【ele】【ai】优化 chat 界面 2025-11-19 11:47:26 +08:00
米山
f7d9d1b1af chore: update package.json and app.vue imports, and ensure global styles are included 2025-11-19 11:13:06 +08:00
hw
c65fcfa2f3 Merge branch 'dev' of https://gitee.com/yudaocode/yudao-ui-admin-vben into reform-mp 2025-11-19 11:12:42 +08:00
hw
887e9766be fix: todo修改 2025-11-19 11:12:09 +08:00
YunaiV
07cb707e82 feat:【antd/ele】useFormSchema 的 placeholder 2025-11-19 10:52:29 +08:00
米山
aaf0274fe9 feat: add menu font size variable and update related components
- Introduced a new CSS variable `--menu-font-size` calculated from the base font size.
- Updated `PreferenceManager` to trigger CSS variable updates when `fontSize` is modified.
- Adjusted `updateCSSVariables` to set the new `--menu-font-size` based on the theme's font size.
- Ensured that the menu components utilize the updated font size with `!important` to maintain styling consistency.
2025-11-19 10:51:10 +08:00
YunaiV
b5adb74349 feat:【antd/ele】useFormSchema 的 placeholder 2025-11-19 10:44:49 +08:00
YunaiV
b67c24021c feat:【antd/ele】useFormSchema 的 placeholder 2025-11-19 10:40:59 +08:00
YunaiV
6b1a054e11 feat:【ele】DatePicker 补全 class 2025-11-19 10:25:47 +08:00
YunaiV
1100626968 feat:【ele】InputNumber 补全 controlsPosition、class 2025-11-19 10:21:31 +08:00
米山
c142af482b fix: update snapshot for defaultPreferences immutability test to reflect fontSize change
- Adjusted the snapshot to ensure consistency with the updated defaultPreferences configuration, specifically retaining the fontSize property.
2025-11-19 10:19:16 +08:00
YunaiV
2144a1103b feat:【ele】【crm】backlog 迁移完成 2025-11-19 10:16:04 +08:00
米山
cd7c11c7d0 fix: run 'pnpm format' update various components and improve layout structure
- Updated demo-preview and preview-group components for better error handling and layout.
- Enhanced drawer and modal components for improved auto-height functionality.
- Refactored layout components including header, footer, sidebar, and tabbar for better responsiveness and usability.
- Adjusted tooltip and help tooltip components for better user guidance.
- Fixed issues in various UI components to ensure consistent styling and functionality across the application.
2025-11-19 10:14:04 +08:00
YunaiV
43f7a12b59 feat:【ele】【crm】backlog 迁移初始化 2025-11-19 09:56:08 +08:00
YunaiV
b3b0ab83f9 feat:【ele】【crm】公海配置的迁移 2025-11-19 09:49:27 +08:00
YunaiV
99cd094cb0 feat:【ele】【crm】statistics 的部分(performance) 2025-11-19 09:42:23 +08:00
milletpeak
fb8f36eeec Merge branch 'main' into milletpeak-fontsize 2025-11-19 09:41:55 +08:00
YunaiV
9dbfe579e2 feat:【ele】【crm】statistics 的部分(除 performance 外) 2025-11-19 09:17:14 +08:00
YunaiV
7baf8d7e06 feat:【ele】【crm】customer 的部分(limitConfig) 2025-11-19 09:01:30 +08:00
YunaiV
63a4e1e901 feat:【ele】【crm】customer 的部分(import-form) 2025-11-19 08:47:17 +08:00
YunaiV
c1b55dccf3 feat:【ele】【crm】customer 的部分(form、list、detail) 2025-11-19 08:38:55 +08:00
YunaiV
9b7bd5d36a feat:【ele】【crm】contact 的全部 2025-11-19 08:32:37 +08:00
YunaiV
07f62cf882 feat:【ele】【crm】business 的全部(list、form、detail) 2025-11-19 08:29:06 +08:00
YunaiV
775fd1d732 feat:【ele】【crm】contact 的迁移初始化 2025-11-19 08:23:18 +08:00
YunaiV
20f0ed8415 feat:【ele】【crm】customer 的迁移初始化 2025-11-19 08:12:39 +08:00
YunaiV
37e6775282 feat:【ele】【crm】business 的迁移部分(list、form、detail) 2025-11-18 22:17:29 +08:00
YunaiV
5690645bd1 feat:【ele】【crm】statistics 的迁移初始化 2025-11-18 21:55:30 +08:00
YunaiV
0fdb6a739a feat:【ele】【crm】business 的迁移完成(status) 2025-11-18 21:42:40 +08:00
YunaiV
67af3f6e80 feat:【ele】【crm】business 的迁移初始化 2025-11-18 21:22:39 +08:00
YunaiV
4dc9ffdb29 feat:【ele】【crm】contract 的迁移完成(config) 2025-11-18 19:52:27 +08:00
YunaiV
666d932968 feat:【ele】【crm】contract 的迁移完成(list、detail、form) 2025-11-18 19:27:31 +08:00
YunaiV
abfbb851cb feat:【ele】【crm】contract 的初始化 2025-11-18 19:08:51 +08:00
xingyu4j
60854e59f1 feat: use vben/utils upload 2025-11-18 17:33:39 +08:00
xingyu4j
ec23e8acf6 feat: import form vben/utils 2025-11-18 17:29:52 +08:00
xingyu4j
b3a1848243 feat: add uploadError locales 2025-11-18 17:24:51 +08:00
xingyu4j
114114fc32 feat: 统一使用 utils 2025-11-18 17:22:12 +08:00
jason
e1ee1f1176 feat: [bpm][antd] review todo 修改 2025-11-18 16:24:36 +08:00
xingyu4j
03a5af3ba3 fix: antd mall diy 切换 2025-11-18 15:54:18 +08:00
xingyu4j
f1d9ffa47d docs: README 2025-11-18 14:07:25 +08:00
xingyu4j
3d4dcddb1e Merge branch 'dev' of https://gitee.com/yudaocode/yudao-ui-admin-vben into dev 2025-11-18 14:02:25 +08:00
xingyu4j
79c6fdc7a2 chore: lock 2025-11-18 13:58:46 +08:00
hw
f1aec24f34 Merge branch 'dev' of https://gitee.com/yudaocode/yudao-ui-admin-vben into reform-mp 2025-11-18 13:45:13 +08:00
hw
9c8316c385 fix: ele改造 2025-11-18 13:44:41 +08:00
YunaiV
07c3cb2f13 feat:【ele】【crm】receivable 完成 2025-11-18 13:13:20 +08:00
xingyu4j
de15aa7b59 chore: remove playground and backend-mock 2025-11-18 11:56:48 +08:00
xingyu4j
40674bf1ad fix: lint 2025-11-18 11:52:27 +08:00
xingyu4j
ec69318078 chore: add tdesign 2025-11-18 11:49:09 +08:00
YunaiV
ffd74a749f feat:【ele】【crm】receivable 迁移的初始化 2025-11-18 10:58:27 +08:00
YunaiV
9680f80735 feat:【antd】【crm】api 请求的注释优化 2025-11-18 10:47:17 +08:00
YunaiV
6d37af629c feat:【antd】【crm】api 请求的注释优化 2025-11-18 09:20:09 +08:00
YunaiV
0b20f69a68 feat:【ele】【crm】clue 迁移 2025-11-18 08:57:22 +08:00
YunaiV
4c37f5f0ac feat:【ele】【crm】product 迁移 2025-11-18 08:35:31 +08:00
YunaiV
de46eb380a feat:【ele】【crm】product/category 迁移 2025-11-17 18:58:04 +08:00
jason
208a72aa8b Merge remote-tracking branch 'yudao/dev' into dev 2025-11-17 17:26:06 +08:00
YunaiV
f24c5f8be9 feat:【antd】【bpm】流程打印的设计 review 2025-11-17 16:53:28 +08:00
xingyu4j
9a4f0f6ab1 feat: Consider multi-line formatting for readability 2025-11-17 14:24:43 +08:00
芋道源码
5568a174af !264 Merge remote-tracking branch 'yudao/dev' into dev
Merge pull request !264 from Jason/dev
2025-11-17 06:00:14 +00:00
YunaiV
f11b7aea69 review:【antd】【mp】代码评审 2025-11-17 13:57:41 +08:00
jason
2b9f869bb2 Merge remote-tracking branch 'yudao/dev' into dev 2025-11-17 13:57:03 +08:00
xingyu4j
bed52983a0 fix: lint 2025-11-17 12:15:14 +08:00
xingyu4j
655ce2c2e8 chore: update node version >=20.12.0 2025-11-17 12:11:43 +08:00
xingyu4j
f841568e5a chore: update vue-tsc 2025-11-17 12:04:30 +08:00
xingyu4j
469697845c fix: sort 2025-11-17 11:21:49 +08:00
xingyu4j
273f3cbaf8 Merge branch 'main' of https://github.com/xingyu4j/vue-vben-admin into deps 2025-11-17 11:21:16 +08:00
xingyu4j
96f671908e chore: update deps 2025-11-17 11:17:47 +08:00
芋道源码
6f0273ab4e !263 feat:【antd】【mp】迁移
Merge pull request !263 from hw/reform-mp
2025-11-17 01:29:13 +00:00
YunaiV
32ffc2e556 feat:【ele】【crm】初始化界面 2025-11-17 09:28:32 +08:00
YunaiV
a273ab2882 feat:【ele/antd】【erp】优化详情界面,隐藏“操作”列 2025-11-16 22:55:34 +08:00
YunaiV
d9f4333e77 feat:【ele】【erp】purchase 的迁移(100%)- order/return 2025-11-16 21:55:32 +08:00
YunaiV
cfda6f4ea0 feat:【ele】【erp】purchase 的迁移(40%)- in 2025-11-16 21:49:36 +08:00
YunaiV
2973e0b70f feat:【ele】【erp】purchase 的迁移(20%)- supplier 2025-11-16 20:27:30 +08:00
YunaiV
e9164912e5 feat:【ele】【erp】home 的迁移(100%) 2025-11-16 20:02:53 +08:00
YunaiV
6fa33f4a62 feat:【ele】【erp】sale 的迁移(100%)- return 2025-11-16 19:53:41 +08:00
YunaiV
94a0c2e581 feat:【ele】【erp】sale 的迁移(30%)- order 2025-11-16 19:10:11 +08:00
YunaiV
6e2e357fed feat:【ele】【erp】sale 的迁移(10%)- 初始化 2025-11-16 19:02:31 +08:00
YunaiV
bb749844fe feat:【ele】【erp】stock 的迁移(100%)- move、out 2025-11-16 18:41:46 +08:00
YunaiV
cb9aaa338c feat:【ele】【erp】stock 的迁移(50%)- in 2025-11-16 18:36:53 +08:00
YunaiV
1810c5dc4a feat:【ele】【erp】stock 的迁移(30%)- check 2025-11-16 18:29:24 +08:00
YunaiV
14016b8d4e feat:【ele】【erp】stock 的迁移(20%)- warehouse 2025-11-16 17:48:44 +08:00
YunaiV
008f7cdbbf feat:【ele】【erp】stock 的迁移(10%) 2025-11-16 16:29:15 +08:00
YunaiV
8d3dd06266 feat:【ele】【erp】product 的迁移 2025-11-16 15:48:39 +08:00
YunaiV
1bc55e8fd0 feat:【ele】【erp】finance/receipt 的迁移 2025-11-16 15:38:22 +08:00
YunaiV
268a2d5504 feat:【ele】【erp】finance/payment 的迁移(80%) 2025-11-16 11:15:49 +08:00
YunaiV
982fe3b964 feat:【ele】【erp】finance/payment 的迁移(50%) 2025-11-16 09:25:43 +08:00
YunaiV
b3b7d2c78b feat:【ele】【erp】finance/account 的迁移 2025-11-16 09:13:09 +08:00
YunaiV
bebe2ea547 feat:【ele】【ai】chat 的迁移(初始化) 2025-11-15 22:15:01 +08:00
jason
aa76dd09e7 Merge remote-tracking branch 'yudao/dev' into dev 2025-11-15 22:02:48 +08:00
jason
22c1d5b2ec feat: [bpm][antd] todo 修改 2025-11-15 22:01:27 +08:00
YunaiV
1aa15ae62a feat:【antd】【ai】chat 的样式 review 修复 2025-11-15 21:56:16 +08:00
jason
ec0518f36a feat: [bpm][antd] 流程打印自定义模板 2025-11-15 21:52:09 +08:00
YunaiV
a5d1ab75f8 feat:【antd】【ai】chat 的样式 review 修复 2025-11-15 21:48:44 +08:00
YunaiV
a15511ee6b feat:【antd】【ai】chat 的样式 review 2025-11-15 21:34:19 +08:00
YunaiV
a35485e618 feat:【antd】【ai】chat “附件列表功能”的迁移 2025-11-15 21:25:14 +08:00
YunaiV
844d4b9b1c feat:【antd】【ai】chat “Thinking 深度思考功能”的迁移 2025-11-15 20:34:36 +08:00
YunaiV
fc9663a100 feat:【antd】【ai】chat “Thinking 深度思考功能”的迁移 2025-11-15 19:46:10 +08:00
YunaiV
71e638188e feat:【antd】【ai】chat “返回异常时空消息删除”的迁移 2025-11-15 19:06:37 +08:00
YunaiV
6dd9e9e699 feat:【antd】【ai】chat 增加联网搜索的迁移 2025-11-15 19:02:21 +08:00
haohao
3bab9bdd11 refactor:【antd】【iot】统一组件文件命名规则,调整导入路径以匹配小写格式 2025-11-15 17:35:20 +08:00
YunaiV
23fd82b31b feat:【ele】【ai】image 全部实现 2025-11-15 15:51:21 +08:00
YunaiV
104be22d0d feat:【ele】【ai】image 的代码评审 2025-11-15 15:31:47 +08:00
YunaiV
636df26e73 feat:【ele】【ai】image 的迁移初始化 2025-11-15 14:50:27 +08:00
YunaiV
5858c435e8 feat:【antd】【ai】image 的代码优化 2025-11-15 13:58:33 +08:00
YunaiV
cc8703ca90 feat:【antd】【ai】chat 的代码优化 2025-11-15 13:50:55 +08:00
YunaiV
7c7a843e94 feat:【antd】【ai】image 的代码优化 2025-11-15 13:50:48 +08:00
haohao
7e6dd0a4df refactor:【antd】【iot】统一组件文件命名规则,调整导入路径以匹配小写格式 2025-11-15 12:03:48 +08:00
YunaiV
51fb4b479e feat:【ele】【ai】工作流的代码迁移 2025-11-15 09:26:36 +08:00
YunaiV
dc68abd4d9 feat:【antd】【ai】工作流的代码优化 2025-11-15 08:54:25 +08:00
YunaiV
02f2e90d43 feat:【ele】【antd】代码的差异同步 2025-11-14 22:23:05 +08:00
YunaiV
1cbd4033b8 feat:【ele】【ai】音乐的迁移 2025-11-14 22:22:43 +08:00
Jin Mao
f09aace765 fix: 更新依赖后的表格显示问题 2025-11-14 21:44:32 +08:00
YunaiV
d056629332 feat:【ele】【ai】知识库的 knowledge 优化实现 2025-11-14 20:51:14 +08:00
YunaiV
6d1f7a7d98 feat:【ele】【ai】知识库的 knowledge 优化实现 2025-11-14 18:25:03 +08:00
YunaiV
5dc6f2d672 feat:【ele】【ai】知识库的 knowledge 优化实现 2025-11-14 18:22:56 +08:00
Copilot
772529e2fb fix: rollback zod-defaults version to 0.1.3 (#6925)
* Initial plan

* fix: downgrade zod-defaults from 0.2.3 to 0.1.3 for Zod v3 compatibility

Co-authored-by: likui628 <90845831+likui628@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: likui628 <90845831+likui628@users.noreply.github.com>
2025-11-14 16:16:45 +08:00
YunaiV
78bd8bee8f feat:【ele】【ai】知识库的 knowledge 初始化 2025-11-14 13:52:11 +08:00
hw
3e1dac41b6 fix: 环境变量复原 2025-11-14 11:23:39 +08:00
hw
48597a9e0b fix: 冲突 2025-11-14 11:18:50 +08:00
xingyu4j
eeff017b9f chore: add tdesign cspell 2025-11-14 10:22:18 +08:00
xingyu4j
22394ebdeb chore: move tdesign-vue-next to workspace 2025-11-14 10:21:48 +08:00
hw
d3cc555030 fix: 环境变量复原 2025-11-14 09:46:55 +08:00
YunaiV
33c066f0f0 feat:【antd】【ai】知识库的 knowledge document 优化(编辑) 2025-11-14 09:43:47 +08:00
YunaiV
132ce52e36 feat:【antd】【ai】知识库的 knowledge segment、document 优化 2025-11-14 09:07:26 +08:00
dependabot[bot]
ffbc9b22a7 chore(deps): bump the non-breaking-changes group across 1 directory with 26 updates (#6914)
Bumps the non-breaking-changes group with 20 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [vue](https://github.com/vuejs/core) | `3.5.23` | `3.5.24` |
| [@clack/prompts](https://github.com/bombshell-dev/clack/tree/HEAD/packages/prompts) | `0.10.1` | `0.11.0` |
| [@iconify/json](https://github.com/iconify/icon-sets) | `2.2.404` | `2.2.406` |
| [@pnpm/workspace.read-manifest](https://github.com/pnpm/pnpm) | `1000.2.5` | `1000.2.6` |
| [@tanstack/vue-query](https://github.com/TanStack/query/tree/HEAD/packages/vue-query) | `5.90.7` | `5.91.0` |
| [@tanstack/vue-store](https://github.com/TanStack/store/tree/HEAD/packages/vue-store) | `0.7.7` | `0.8.0` |
| [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) | `8.46.3` | `8.46.4` |
| [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) | `8.46.3` | `8.46.4` |
| [@vue/shared](https://github.com/vuejs/core/tree/HEAD/packages/shared) | `3.5.23` | `3.5.24` |
| [commitlint-plugin-function-rules](https://github.com/vidavidorra/commitlint-plugin-function-rules) | `4.1.0` | `4.1.1` |
| [eslint-config-turbo](https://github.com/vercel/turborepo/tree/HEAD/packages/eslint-config-turbo) | `2.6.0` | `2.6.1` |
| [lucide-vue-next](https://github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-vue-next) | `0.507.0` | `0.553.0` |
| [prettier-plugin-tailwindcss](https://github.com/tailwindlabs/prettier-plugin-tailwindcss) | `0.6.14` | `0.7.1` |
| [sass](https://github.com/sass/dart-sass) | `1.93.3` | `1.94.0` |
| [typescript](https://github.com/microsoft/TypeScript) | `5.8.2` | `5.9.3` |
| [unplugin-element-plus](https://github.com/element-plus/unplugin-element-plus) | `0.10.0` | `0.11.1` |
| [vxe-pc-ui](https://github.com/x-extends/vxe-pc-ui) | `4.10.16` | `4.10.22` |
| [vxe-table](https://github.com/x-extends/vxe-table) | `4.17.10` | `4.17.14` |
| [zod-defaults](https://github.com/Ced-Sharp/zod-defaults) | `0.1.3` | `0.2.3` |
| [@ast-grep/napi](https://github.com/ast-grep/ast-grep) | `0.37.0` | `0.39.9` |



Updates `vue` from 3.5.23 to 3.5.24
- [Release notes](https://github.com/vuejs/core/releases)
- [Changelog](https://github.com/vuejs/core/blob/main/CHANGELOG.md)
- [Commits](https://github.com/vuejs/core/compare/v3.5.23...v3.5.24)

Updates `@clack/prompts` from 0.10.1 to 0.11.0
- [Release notes](https://github.com/bombshell-dev/clack/releases)
- [Changelog](https://github.com/bombshell-dev/clack/blob/@clack/prompts@0.11.0/packages/prompts/CHANGELOG.md)
- [Commits](https://github.com/bombshell-dev/clack/commits/@clack/prompts@0.11.0/packages/prompts)

Updates `@iconify/json` from 2.2.404 to 2.2.406
- [Commits](https://github.com/iconify/icon-sets/compare/2.2.404...2.2.406)

Updates `@pnpm/workspace.read-manifest` from 1000.2.5 to 1000.2.6
- [Release notes](https://github.com/pnpm/pnpm/releases)
- [Commits](https://github.com/pnpm/pnpm/commits)

Updates `@tanstack/vue-query` from 5.90.7 to 5.91.0
- [Release notes](https://github.com/TanStack/query/releases)
- [Changelog](https://github.com/TanStack/query/blob/main/packages/vue-query/CHANGELOG.md)
- [Commits](https://github.com/TanStack/query/commits/@tanstack/vue-query@5.91.0/packages/vue-query)

Updates `@tanstack/vue-store` from 0.7.7 to 0.8.0
- [Release notes](https://github.com/TanStack/store/releases)
- [Commits](https://github.com/TanStack/store/commits/v0.8.0/packages/vue-store)

Updates `@typescript-eslint/eslint-plugin` from 8.46.3 to 8.46.4
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.46.4/packages/eslint-plugin)

Updates `@typescript-eslint/parser` from 8.46.3 to 8.46.4
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.46.4/packages/parser)

Updates `@vue/shared` from 3.5.23 to 3.5.24
- [Release notes](https://github.com/vuejs/core/releases)
- [Changelog](https://github.com/vuejs/core/blob/main/CHANGELOG.md)
- [Commits](https://github.com/vuejs/core/commits/v3.5.24/packages/shared)

Updates `autoprefixer` from 10.4.21 to 10.4.22
- [Release notes](https://github.com/postcss/autoprefixer/releases)
- [Changelog](https://github.com/postcss/autoprefixer/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/autoprefixer/compare/10.4.21...10.4.22)

Updates `commitlint-plugin-function-rules` from 4.1.0 to 4.1.1
- [Release notes](https://github.com/vidavidorra/commitlint-plugin-function-rules/releases)
- [Changelog](https://github.com/vidavidorra/commitlint-plugin-function-rules/blob/main/CHANGELOG.md)
- [Commits](https://github.com/vidavidorra/commitlint-plugin-function-rules/compare/v4.1.0...v4.1.1)

Updates `eslint-config-turbo` from 2.6.0 to 2.6.1
- [Release notes](https://github.com/vercel/turborepo/releases)
- [Changelog](https://github.com/vercel/turborepo/blob/main/release.md)
- [Commits](https://github.com/vercel/turborepo/commits/v2.6.1/packages/eslint-config-turbo)

Updates `lodash.clonedeep` from 4.5.0 to 
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/commits)

Updates `lodash.get` from 4.4.2 to 
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/commits)

Updates `lodash.isequal` from 4.5.0 to 
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/commits)

Updates `lodash.set` from 4.3.2 to 
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/commits)

Updates `lucide-vue-next` from 0.507.0 to 0.553.0
- [Release notes](https://github.com/lucide-icons/lucide/releases)
- [Commits](https://github.com/lucide-icons/lucide/commits/0.553.0/packages/lucide-vue-next)

Updates `prettier-plugin-tailwindcss` from 0.6.14 to 0.7.1
- [Release notes](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/compare/v0.6.14...v0.7.1)

Updates `sass` from 1.93.3 to 1.94.0
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.93.3...1.94.0)

Updates `typescript` from 5.8.2 to 5.9.3
- [Release notes](https://github.com/microsoft/TypeScript/releases)
- [Changelog](https://github.com/microsoft/TypeScript/blob/main/azure-pipelines.release-publish.yml)
- [Commits](https://github.com/microsoft/TypeScript/compare/v5.8.2...v5.9.3)

Updates `unplugin-element-plus` from 0.10.0 to 0.11.1
- [Release notes](https://github.com/element-plus/unplugin-element-plus/releases)
- [Commits](https://github.com/element-plus/unplugin-element-plus/compare/v0.10.0...v0.11.1)

Updates `vxe-pc-ui` from 4.10.16 to 4.10.22
- [Release notes](https://github.com/x-extends/vxe-pc-ui/releases)
- [Commits](https://github.com/x-extends/vxe-pc-ui/commits)

Updates `vxe-table` from 4.17.10 to 4.17.14
- [Release notes](https://github.com/x-extends/vxe-table/releases)
- [Commits](https://github.com/x-extends/vxe-table/compare/4.17.10...4.17.14)

Updates `zod-defaults` from 0.1.3 to 0.2.3
- [Commits](https://github.com/Ced-Sharp/zod-defaults/commits)

Updates `@ast-grep/napi` from 0.37.0 to 0.39.9
- [Release notes](https://github.com/ast-grep/ast-grep/releases)
- [Changelog](https://github.com/ast-grep/ast-grep/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ast-grep/ast-grep/compare/0.37.0...0.39.9)

Updates `@vue/reactivity` from 3.5.23 to 3.5.24
- [Release notes](https://github.com/vuejs/core/releases)
- [Changelog](https://github.com/vuejs/core/blob/main/CHANGELOG.md)
- [Commits](https://github.com/vuejs/core/commits/v3.5.24/packages/reactivity)

---
updated-dependencies:
- dependency-name: vue
  dependency-version: 3.5.24
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: non-breaking-changes
- dependency-name: "@clack/prompts"
  dependency-version: 0.11.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: non-breaking-changes
- dependency-name: "@iconify/json"
  dependency-version: 2.2.406
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: non-breaking-changes
- dependency-name: "@pnpm/workspace.read-manifest"
  dependency-version: 1000.2.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: non-breaking-changes
- dependency-name: "@tanstack/vue-query"
  dependency-version: 5.91.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: non-breaking-changes
- dependency-name: "@tanstack/vue-store"
  dependency-version: 0.8.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: non-breaking-changes
- dependency-name: "@typescript-eslint/eslint-plugin"
  dependency-version: 8.46.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: non-breaking-changes
- dependency-name: "@typescript-eslint/parser"
  dependency-version: 8.46.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: non-breaking-changes
- dependency-name: "@vue/shared"
  dependency-version: 3.5.24
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: non-breaking-changes
- dependency-name: autoprefixer
  dependency-version: 10.4.22
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: non-breaking-changes
- dependency-name: commitlint-plugin-function-rules
  dependency-version: 4.1.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: non-breaking-changes
- dependency-name: eslint-config-turbo
  dependency-version: 2.6.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: non-breaking-changes
- dependency-name: lodash.clonedeep
  dependency-version: 
  dependency-type: direct:production
  dependency-group: non-breaking-changes
- dependency-name: lodash.get
  dependency-version: 
  dependency-type: direct:production
  dependency-group: non-breaking-changes
- dependency-name: lodash.isequal
  dependency-version: 
  dependency-type: direct:production
  dependency-group: non-breaking-changes
- dependency-name: lodash.set
  dependency-version: 
  dependency-type: direct:production
  dependency-group: non-breaking-changes
- dependency-name: lucide-vue-next
  dependency-version: 0.553.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: non-breaking-changes
- dependency-name: prettier-plugin-tailwindcss
  dependency-version: 0.7.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: non-breaking-changes
- dependency-name: sass
  dependency-version: 1.94.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: non-breaking-changes
- dependency-name: typescript
  dependency-version: 5.9.3
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: non-breaking-changes
- dependency-name: unplugin-element-plus
  dependency-version: 0.11.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: non-breaking-changes
- dependency-name: vxe-pc-ui
  dependency-version: 4.10.22
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: non-breaking-changes
- dependency-name: vxe-table
  dependency-version: 4.17.14
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: non-breaking-changes
- dependency-name: zod-defaults
  dependency-version: 0.2.3
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: non-breaking-changes
- dependency-name: "@ast-grep/napi"
  dependency-version: 0.39.9
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: non-breaking-changes
- dependency-name: "@vue/reactivity"
  dependency-version: 3.5.24
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: non-breaking-changes
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-14 08:05:04 +08:00
YunaiV
4452de0677 feat:【antd】【ai】知识库的 knowledge 优化(retrieval) 2025-11-13 22:27:28 +08:00
YunaiV
26b1ea3888 chore: 合并远程 dev 分支代码 2025-11-13 20:45:00 +08:00
YunaiV
1ec739e62c chore: update pnpm-lock.yaml 2025-11-13 20:41:58 +08:00
YunaiV
2f67bdd410 feat:【antd】【ai】知识库的 knowledge 优化 2025-11-13 20:32:12 +08:00
YunaiV
e092ec737e review:【antd】【mp】material、message 的迁移 v2 2025-11-13 20:31:46 +08:00
xingyu4j
7f84c42bcc feat: use lucide icons 2025-11-13 18:36:35 +08:00
hw
6ae21c978b fix: eslint 2025-11-13 18:35:44 +08:00
hw
cdae277868 fix: ele统一风格 2025-11-13 18:35:10 +08:00
xingyu4j
83a5ca15b5 fix: doc slot 2025-11-13 17:44:44 +08:00
Jin Mao
c3a7562e2c Merge branch 'main' into milletpeak-fontsize 2025-11-13 17:01:42 +08:00
xingyu4j
8a4af8c55b fix: api 2025-11-13 16:57:06 +08:00
xingyu4j
ccab033c4b fix: kefu store 2025-11-13 16:56:52 +08:00
xingyu4j
da0946ebcd fix: api 2025-11-13 16:55:28 +08:00
xingyu4j
100f0a41b6 fix: mp 2025-11-13 16:12:44 +08:00
xingyu4j
62f630fd19 refactor: mp comps 2025-11-13 14:44:25 +08:00
xingyu4j
1ef38bc8b9 refactor: mp comps 2025-11-13 14:44:08 +08:00
xingyu4j
9a53edec8d feat: remove mp modules 2025-11-13 14:14:15 +08:00
xingyu4j
ebd51b0ecb feat: import from components 2025-11-13 14:13:51 +08:00
xingyu4j
b9073ff4bd feat: import form components 2025-11-13 14:12:48 +08:00
xingyu4j
edba53272d chore: deps 2025-11-13 14:12:20 +08:00
xingyu4j
1b5d03879f Merge branch 'dev' of https://gitee.com/yudaocode/yudao-ui-admin-vben into dev 2025-11-13 14:11:01 +08:00
YunaiV
80bb508e78 review:【antd】【mp】material、message 的迁移 v1 2025-11-13 13:57:17 +08:00
xingyu4j
2577c1e4fc Merge branch 'dev' of https://gitee.com/yudaocode/yudao-ui-admin-vben into dev 2025-11-13 13:53:57 +08:00
芋道源码
b3c1dff37d !252 【antd】【mp】消息管理 迁移
Merge pull request !252 from dylanmay/dev
2025-11-13 01:27:31 +00:00
Jin Mao
605e0ea128 chore: 更新依赖 2025-11-13 09:23:12 +08:00
dependabot[bot]
c89a83f980 chore(deps): bump stylelint-config-recommended from 14.0.1 to 17.0.0 (#6901)
Bumps [stylelint-config-recommended](https://github.com/stylelint/stylelint-config-recommended) from 14.0.1 to 17.0.0.
- [Release notes](https://github.com/stylelint/stylelint-config-recommended/releases)
- [Changelog](https://github.com/stylelint/stylelint-config-recommended/blob/main/CHANGELOG.md)
- [Commits](https://github.com/stylelint/stylelint-config-recommended/compare/14.0.1...17.0.0)

---
updated-dependencies:
- dependency-name: stylelint-config-recommended
  dependency-version: 17.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-13 09:17:44 +08:00
Jin Mao
cfad88666b chore: 替换 lodash-es为 es-toolkit 并调整样式引入方式 (#6912) 2025-11-13 08:20:30 +08:00
Jin Mao
f918dc24c6 chore(@vben/utils): 移除冗余的 lodash 依赖 2025-11-13 07:47:48 +08:00
Jin Mao
e898993fe8 chore(@vben/utils): 替换 lodash 工具函数为 es-toolkit 实现 2025-11-13 07:45:10 +08:00
Jin Mao
5cafcb4a01 refactor(shared): 替换 lodash 工具函数为 es-toolkit 兼容版本
- 将 get 和 isEqual 方法从 lodash 替换为 es-toolkit/compat 导出
- 更新 package.json 添加 es-toolkit 依赖
- 注释掉原有的 lodash.get 和 lodash.isequal 导出语句- 锁定 es-toolkit 版本至1.41.0 并更新相关依赖配置
2025-11-13 07:28:52 +08:00
Jin Mao
03154cde88 chore: update depends 2025-11-13 07:16:28 +08:00
dependabot[bot]
a74bf7b63f chore(deps): bump echarts from 5.6.0 to 6.0.0 (#6859)
Bumps [echarts](https://github.com/apache/echarts) from 5.6.0 to 6.0.0.
- [Release notes](https://github.com/apache/echarts/releases)
- [Commits](https://github.com/apache/echarts/compare/5.6.0...6.0.0)

---
updated-dependencies:
- dependency-name: echarts
  dependency-version: 6.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Jin Mao <50581550+jinmao88@users.noreply.github.com>
2025-11-13 07:10:59 +08:00
YunaiV
a0b235134c fix:【antd】【mall】diy-editor 里的 component-container-property.vue 的 label-width 2025-11-13 00:02:11 +08:00
YunaiV
d15ff4bc80 fix:【antd】【mall】diy-editor 里的 mobile 各种修复,不限于 Image 的 preview、Form 的 label-col 的宽度、FormItem 的 prop 属性 2025-11-12 22:55:02 +08:00
米山
0bc7169698 feat: add global font size adjustment 2025-11-12 17:39:07 +08:00
米山
24b6e7a835 feat: add global font size adjustment 2025-11-12 17:38:41 +08:00
hw
7733d0a7f4 fix: todo修复 2025-11-12 16:56:18 +08:00
dylanmay
971b7e28f6 Merge branch 'dev' of https://gitee.com/yudaocode/yudao-ui-admin-vben into dev 2025-11-12 14:32:42 +08:00
dylanmay
5e183ee729 fix: 依赖处理 2025-11-12 14:32:14 +08:00
YunaiV
0263508912 fix:【antd】【mall】diy-editor 里的 carousel、navigation-bar 不支持 :show-input-controls、input-size、show-input 移除 2025-11-12 13:24:41 +08:00
dylanmay
64baf79bb6 Merge branch 'dev' of https://gitee.com/yudaocode/yudao-ui-admin-vben into dev 2025-11-12 12:25:53 +08:00
dylanmay
7d21ea2dcb fix: add vueuse/components 2025-11-12 11:18:14 +08:00
xingyu4j
dad002163b Merge branch 'dev' of https://gitee.com/yudaocode/yudao-ui-admin-vben into dev 2025-11-12 09:58:23 +08:00
YunaiV
d4f9bb20dd feat:【antd】【mall】diy-editor 代码风格统一 & 逐个测试 70% 2025-11-12 09:30:46 +08:00
YunaiV
045ccca2a6 fix:【antd】【mall】diy-editor 的 hot-zone-edit-dialog 不正确 2025-11-12 08:54:34 +08:00
YunaiV
aa425e93a5 fix:【antd】【mall】diy-editor 的 menu-grid、menu-swiper 的 radio 不正确 2025-11-12 08:46:10 +08:00
YunaiV
f3c862faae fix:【antd】【mall】diy-editor 的 navigation-bar 的 radio 不正确 2025-11-12 08:43:37 +08:00
Jin Mao
f59e33682c Merge branch 'main' into main 2025-11-12 04:27:57 +08:00
Jin Mao
d811af37dd Merge branch 'main' into profile 2025-11-12 04:03:27 +08:00
Jin Mao
0e1a7d61f3 Merge branch 'main' into fix-downloader 2025-11-12 02:05:03 +08:00
panda7
573637222d feat: add form handleCollapsedChange event (#6893)
* feat: add form handleCollapsedChange event

* fix: ts lint

* fix: ts error

---------

Co-authored-by: sqchen <chenshiqi@sshlx.com>
2025-11-12 02:03:12 +08:00
shixi
05e9d65251 fix: for tdesign 2025-11-12 01:14:28 +08:00
shixi
0bbb20fee0 feat: sport notification link 2025-11-12 00:55:24 +08:00
shixi
dbc5ea32ae feat: add read and delete for each notification 2025-11-12 00:02:13 +08:00
YunaiV
4a03825313 fix:【antd】【mall】diy-editor 的 carousel 的 radio 不正确 2025-11-11 22:51:35 +08:00
YunaiV
7bd3a31a09 feat:【antd】【mall】diy-editor 代码风格统一 & 逐个测试 60% 2025-11-11 22:20:52 +08:00
YunaiV
4488425cbf feat:【antd】【mall】diy-editor 代码风格统一 & 逐个测试 50% 2025-11-11 19:34:42 +08:00
xingyu4j
16b42afc93 fix: todo 2025-11-11 15:26:52 +08:00
xingyu4j
7b0bb55df0 Merge branch 'dev' of https://gitee.com/yudaocode/yudao-ui-admin-vben into dev 2025-11-11 15:26:08 +08:00
xingyu4j
9d21b0e49a fix: lint 2025-11-11 15:25:44 +08:00
xingyu4j
736d91019e feat: add views 2025-11-11 15:24:41 +08:00
xingyu4j
10f2583e2f fix: bugs 2025-11-11 15:19:46 +08:00
xingyu4j
829d3afe4b fix: some bugs 2025-11-11 15:19:21 +08:00
xingyu4j
ac573416ef fix: lint 2025-11-11 15:08:11 +08:00
xingyu4j
5d0269da99 feat: code format 2025-11-11 13:52:01 +08:00
xingyu4j
15cf8571af feat: router 2025-11-11 13:44:51 +08:00
xingyu4j
af2eb88474 feat: core views 2025-11-11 13:44:33 +08:00
xingyu4j
b6d6edeeeb feat: utils 2025-11-11 13:43:53 +08:00
xingyu4j
9c8faf1db2 feat: infra api 2025-11-11 13:43:31 +08:00
xingyu4j
fd6192766d feat: system api 2025-11-11 13:43:13 +08:00
xingyu4j
b041b8e7d7 feat: auth and route 2025-11-11 13:42:13 +08:00
xingyu4j
21ec8975f8 feat: vxe config 2025-11-11 13:41:41 +08:00
xingyu4j
6b0da7e397 feat: api config 2025-11-11 13:41:14 +08:00
xingyu4j
26918cd56d chore: deps 2025-11-11 13:39:37 +08:00
YunaiV
a275432840 feat:【antd】【mall】diy-editor 代码风格统一 & 逐个测试 40% 2025-11-11 12:53:50 +08:00
YunaiV
6a270e26d8 feat:【antd】【mall】diy-editor 代码风格统一 & 逐个测试 30% 2025-11-11 09:58:36 +08:00
YunaiV
fadad35b20 feat:【antd】【mall】diy-editor 代码风格统一 & 逐个测试 20% 2025-11-10 19:13:25 +08:00
xingyu4j
0319604863 feat: playground add profile 2025-11-10 18:00:50 +08:00
xingyu4j
acf99f2441 feat: tdesign add profile 2025-11-10 18:00:25 +08:00
xingyu4j
cbf2a02877 feat: naive add profile 2025-11-10 17:59:58 +08:00
xingyu4j
226d9bd1ad feat: ele add profile 2025-11-10 17:59:33 +08:00
xingyu4j
48b3d30088 fix: types 2025-11-10 17:54:01 +08:00
xingyu4j
e311cfb8da feat: route add profile 2025-11-10 17:51:10 +08:00
xingyu4j
4347fba80a feat: antdv add profile 2025-11-10 17:50:47 +08:00
xingyu4j
7dc68ed368 feat: add profile comps 2025-11-10 17:49:58 +08:00
haohao
ef5b7e9c07 fix:【antd】【iot】修正导出功能中的时间格式化为更精确的格式 2025-11-10 17:12:25 +08:00
haohao
35dc2960b8 feat:【antd】【iot】添加设备状态和颜色映射功能,优化设备卡片样式 2025-11-10 17:05:35 +08:00
haohao
e12ac0c31d refactor:【antd】【iot】优化设备详情中的自动刷新开关样式 2025-11-10 15:17:13 +08:00
haohao
65d3be03b8 feat:【antd】【iot】将 DataZoom 组件添加到 echarts 集成中 2025-11-10 15:15:57 +08:00
haohao
9129b1eb41 fix:【antd】【iot】修改根据产品 ID 查询物模型列表接口 2025-11-10 15:11:40 +08:00
xingyu4j
488a9ecbde docs: README 2025-11-10 09:52:00 +08:00
xingyu4j
a3356a0a5e Merge branch 'main' of https://github.com/vbenjs/vue-vben-admin into dev 2025-11-10 09:16:13 +08:00
YunaiV
e231a0a948 review:【antd】【bpm】打印功能 2025-11-09 17:36:01 +08:00
芋道源码
b1b7934eb0 !259 流程打印迁移
Merge pull request !259 from Jason/dev
2025-11-09 09:31:59 +00:00
YunaiV
9fc5c7561e review:【antd】【mp】components 组件 2025-11-09 17:30:37 +08:00
YunaiV
229ead48f1 review:【antd】【mp】图文草稿箱 2025-11-09 17:16:51 +08:00
YunaiV
d6cbad72e5 review:【antd】【mp】自动回复优化 2025-11-09 16:55:03 +08:00
YunaiV
f8abee2b63 review:【antd】【mp】菜单优化 2025-11-09 15:31:20 +08:00
Jin Mao
a4aa133db5 Merge branch 'main' into tdesign 2025-11-09 12:04:30 +08:00
Utopia
6bbe523f6f chore: 增强 util-formatDate ts 类型提示 (#6886)
* feat: 为 auth layout 添加 slot: logo, 提升组件的灵活性和可复用性

* feat: 增强 util-formatDate ts 类型提示
2025-11-09 12:00:49 +08:00
Copilot
fef1e35c54 fix: prevent JSONBigInt parsing error on non-string data (#6891)
* Initial plan

* Fix json-bigint serialization error when data is not a string

Co-authored-by: likui628 <90845831+likui628@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: likui628 <90845831+likui628@users.noreply.github.com>
2025-11-09 11:49:38 +08:00
xingyu
20410aeb03 fix: updating Tailwind CSS variables from --radix-* to --reka-* (#6890)
* fix: radix => reka

* chore: add reka cspell

* fix: Composition url
2025-11-09 11:49:01 +08:00
jason
045095922f chore: update pnpm-lock.yaml 2025-11-08 22:44:23 +08:00
jason
c09ff0cfb3 feat: 冲突解决 2025-11-08 22:23:19 +08:00
jason
143c9660da feat: [bpm][antd] 流程打印迁移 2025-11-08 22:13:29 +08:00
xingyu4j
15215b4f4c feat: mp 2025-11-07 19:06:34 +08:00
xingyu4j
31a8d38174 refactor: mp export 2025-11-07 17:58:24 +08:00
xingyu4j
51169116ae refactor: move assets 2025-11-07 17:44:26 +08:00
xingyu4j
0b3c1540d0 refactor: comps 2025-11-07 17:43:13 +08:00
xingyu4j
e94cedb591 fix: icon 2025-11-07 16:24:56 +08:00
xingyu4j
52a00b64ae fix: v-access:code 2025-11-07 15:27:41 +08:00
xingyu4j
85353ead55 fix: v-access:code 2025-11-07 15:26:09 +08:00
xingyu4j
cdcd782162 chore: deps 2025-11-07 15:25:52 +08:00
xingyu4j
288efce3c9 Merge branch 'dev' of https://gitee.com/yudaocode/yudao-ui-admin-vben into dev 2025-11-07 15:18:53 +08:00
xingyu
439906a67f !258 fix: 环境变量复原
Merge pull request !258 from hw/reform-mp
2025-11-07 07:18:41 +00:00
xingyu4j
a3dcb150a3 fix: OAuth 2.0 i18n warn 2025-11-07 15:17:08 +08:00
xingyu4j
2788964c62 chore: add cspell 2025-11-07 15:14:02 +08:00
xingyu4j
d7e585641f fix: use tabs warn 2025-11-07 15:13:34 +08:00
xingyu4j
5f071c20f3 fix: bpmn style 2025-11-07 14:29:18 +08:00
hw
93baa9602d fix: 环境变量复原 2025-11-07 14:12:42 +08:00
xingyu4j
aa13d2a67c fix: bugs 2025-11-07 14:09:03 +08:00
dylanmay
e577b084c7 fix: change table to grid 2025-11-07 13:21:42 +08:00
hw
dcc543cd7f fix: 组件名称修改 css样式使用tindwind 2025-11-07 11:33:32 +08:00
hw
92a1909ad8 fix: code 2025-11-07 10:27:03 +08:00
hw
bd9edc3fee fix: 插件修改为全局 2025-11-07 09:56:20 +08:00
hw
c745304e5f fix: eslint 2025-11-07 09:43:39 +08:00
dylanmay
bdfe23a14a Merge branch 'dev' of https://gitee.com/yudaocode/yudao-ui-admin-vben into dev 2025-11-06 23:34:08 +08:00
dylanmay
33c6ccf654 fix: code style 2025-11-06 23:24:05 +08:00
dylanmay
007bb2dd26 fix: code style 2025-11-06 23:23:25 +08:00
Li Kui
83ea27af3e fix: fix lint 2025-11-06 23:16:23 +08:00
Li Kui
b7bfd69788 fix: fix lint 2025-11-06 23:10:03 +08:00
Li Kui
99d663a6f2 fix: fix typecheck 2025-11-06 23:02:24 +08:00
Li Kui
1af11240a6 chore: add tdesign logo 2025-11-06 22:37:55 +08:00
YunaiV
9248a321fe fix:【ele/antd】【mall】component-container-property.vue 的报错 2025-11-06 22:37:44 +08:00
YunaiV
63e94da3ca feat:【antd/ele】差异化代码的统一 2025-11-06 21:16:28 +08:00
YunaiV
80c31c3f32 feat:【antd/ele】【mall】客服的样式略微优化 2025-11-06 21:03:10 +08:00
xingyu4j
3483dceab3 feat: tailwindcss 2025-11-06 19:13:35 +08:00
xingyu4j
1aaae15706 fix: show full 2025-11-06 18:57:04 +08:00
Li Kui
3e8e8690e3 chore: Merge branch 'main' into tdesign 2025-11-06 17:49:51 +08:00
Li Kui
be843300be chore: update demo routes 2025-11-06 17:44:34 +08:00
xingyu4j
44675a847c Merge branch 'main' of https://github.com/vbenjs/vue-vben-admin into dev 2025-11-06 16:50:09 +08:00
hw
02fa21488c fix: 环境变量修改 2025-11-06 16:44:37 +08:00
Li Kui
dc77721c11 chore: demo i18n 2025-11-06 16:42:25 +08:00
Li Kui
a38d081f17 chore: enable VITE_NITRO_MOCK 2025-11-06 16:37:15 +08:00
xingyu4j
b82397fa5d chore: remove vueuse/components 2025-11-06 16:34:48 +08:00
xingyu4j
3cb140942c refactor: ele kefu 2025-11-06 16:30:36 +08:00
xingyu4j
c405e464a0 refactor: ele kefu 2025-11-06 16:27:18 +08:00
xingyu4j
36addb1380 refactor: kefu 2025-11-06 16:26:49 +08:00
Copilot
1e09fa4642 feat: migrate from Radix Vue to Reka UI (#6870)
* Initial plan

* Update dependencies and imports from radix-vue to reka-ui

Co-authored-by: likui628 <90845831+likui628@users.noreply.github.com>

* Fix type errors after reka-ui migration

Co-authored-by: likui628 <90845831+likui628@users.noreply.github.com>

* Run formatter to fix code style

Co-authored-by: likui628 <90845831+likui628@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: likui628 <90845831+likui628@users.noreply.github.com>
2025-11-06 16:22:24 +08:00
dylanmay
500ce9cf7c fix: code style 2025-11-06 15:36:08 +08:00
Li Kui
bd8ff73f9e fix: fix build error 2025-11-06 15:26:24 +08:00
dylanmay
5269d4c387 fix: code style 2025-11-06 15:25:11 +08:00
Li Kui
57620dc2ea chore: apply coderabbitai suggestions 2025-11-06 15:11:28 +08:00
xingyu4j
af60802840 refactor: kefu 2025-11-06 15:04:27 +08:00
xingyu4j
103f633344 chore: use vueuse 2025-11-06 15:03:50 +08:00
Li Kui
b472fbb72f Merge branch 'main' into tdesign 2025-11-06 14:36:27 +08:00
Copilot
04321b16c1 fix: replace ant-design-vue with tdesign components in web-tdesign app (#6880)
* Initial plan

* fix: replace ant-design-vue with tdesign components

Co-authored-by: likui628 <90845831+likui628@users.noreply.github.com>

* fix: remove trailing comma in package.json

Co-authored-by: likui628 <90845831+likui628@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: likui628 <90845831+likui628@users.noreply.github.com>
2025-11-06 14:35:50 +08:00
xingyu4j
c6732bd658 feat: kefu 2025-11-06 12:44:50 +08:00
xingyu4j
c8e574b6c2 feat: 优化显示效果 2025-11-06 11:28:04 +08:00
xingyu4j
a4cbd5c094 fix: import 2025-11-05 21:06:26 +08:00
xingyu4j
12d55a8c3b fix: bugs 2025-11-05 20:30:42 +08:00
xingyu4j
35733c40eb fix: 切换页面 2025-11-05 20:13:00 +08:00
xingyu4j
e4040520e0 feat: VerticalButtonGroup style 2025-11-05 20:08:46 +08:00
xingyu4j
beec71dbbd fix: import 2025-11-05 19:47:35 +08:00
xingyu4j
0e185d1ed6 fix: style 2025-11-05 19:43:35 +08:00
xingyu4j
4ef521698a fix: style 2025-11-05 19:42:58 +08:00
xingyu4j
d6cd6cf133 fix: style 2025-11-05 19:37:41 +08:00
xingyu4j
89d758b071 feat: style 2025-11-05 19:07:32 +08:00
xingyu4j
56ae9c0230 feat: 优化 diy editor 2025-11-05 18:31:37 +08:00
xingyu4j
f60069d662 feat: icon 2025-11-05 18:27:17 +08:00
xingyu4j
dec939ee30 feat: 优化客服 2025-11-05 18:26:40 +08:00
hw
b897f50420 fix: eslint 2025-11-05 17:02:16 +08:00
hw
6a3e8173e0 feat: 图文草稿箱迁移 2025-11-05 17:01:42 +08:00
xingyu4j
318f142fa7 feat: diy editor style 2025-11-05 15:31:07 +08:00
xingyu4j
109c6226b4 fix: component property 2025-11-05 15:25:18 +08:00
xingyu4j
326e88762c feat: diy editor property 2025-11-05 15:24:20 +08:00
xingyu4j
15835352cc chore: cspell 2025-11-05 14:11:08 +08:00
xingyu4j
57f39fbc90 feat: 优化 diy editor 样式 2025-11-05 14:09:38 +08:00
xingyu
769c56aeff !250 fix: 去掉本地调试地址
Merge pull request !250 from jawe/dev
2025-11-05 02:43:20 +00:00
xingyu
5ecbb1b031 !255 Merge remote-tracking branch 'yudao/dev' into dev
Merge pull request !255 from Jason/dev
2025-11-05 02:41:09 +00:00
jason
ed923a2661 Merge remote-tracking branch 'yudao/dev' into dev 2025-11-05 09:56:47 +08:00
jason
62407c7aa2 feat: [antd][bpm] 流程签名问题修复 2025-11-05 09:52:23 +08:00
YunaiV
db804c2602 feat:【antd】【mall】diy-editor 的 vertical-button-group 迁移 2025-11-05 00:31:10 +08:00
xingyu4j
6ac33e0208 fix: type cell dict props 2025-11-04 20:12:24 +08:00
hw
c59e03073f fix: 环境变量修改 2025-11-04 18:12:50 +08:00
hw
978b9f8cd2 fix: 删除tagsView,使用vben useTabs 2025-11-04 18:07:04 +08:00
xingyu4j
58dc5aefab fix: lint 2025-11-04 17:56:30 +08:00
xingyu4j
689d4cd2a1 fix: lint 2025-11-04 17:50:03 +08:00
xingyu4j
b9b131296b fix: lint 2025-11-04 17:48:30 +08:00
xingyu4j
9082e82d98 fix: lint 2025-11-04 17:47:29 +08:00
dylanmay
c238920588 feat: 素材管理迁移 2025-11-04 17:32:12 +08:00
xingyu4j
df935a8f3b fix: use antdv qrcode 2025-11-04 17:21:50 +08:00
xingyu4j
d507cc6d6b Merge branch 'master' of https://gitee.com/yudaocode/yudao-ui-admin-vben into dev 2025-11-04 17:08:57 +08:00
hw
84795d10cd feat: 自动回复迁移 2025-11-04 16:53:08 +08:00
jawe
f1941bf9ab Merge branch 'dev' of gitee.com:yudaocode/yudao-ui-admin-vben into dev
Signed-off-by: jawe <532159638@qq.com>
2025-11-04 07:19:46 +00:00
jawe
bd7610c90d feat: [mall][kefu] 客服模块迁移至element-plus版 2025-11-04 15:11:14 +08:00
dylanmay
2153b1325c Merge branch 'dev' of https://gitee.com/yudaocode/yudao-ui-admin-vben into dev 2025-11-04 14:38:50 +08:00
dylanmay
c2b0a91ffc feat: 消息迁移 2025-11-04 14:31:32 +08:00
Olexandr88
7268824612 Update README.md (#6828)
Co-authored-by: Jin Mao <50581550+jinmao88@users.noreply.github.com>
2025-11-04 04:34:55 +08:00
dependabot[bot]
23c41a8059 chore(deps): bump @types/node from 12.20.55 to 24.9.2 (#6860)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 12.20.55 to 24.9.2.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 24.9.2
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-04 04:16:59 +08:00
dependabot[bot]
fdc78faa13 chore(deps): bump @vueuse/integrations from 12.8.2 to 14.0.0 (#6861)
Bumps [@vueuse/integrations](https://github.com/vueuse/vueuse/tree/HEAD/packages/integrations) from 12.8.2 to 14.0.0.
- [Release notes](https://github.com/vueuse/vueuse/releases)
- [Commits](https://github.com/vueuse/vueuse/commits/v14.0.0/packages/integrations)

---
updated-dependencies:
- dependency-name: "@vueuse/integrations"
  dependency-version: 14.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-04 04:16:37 +08:00
dependabot[bot]
c8af580866 chore(deps): bump SamKirkland/FTP-Deploy-Action (#6873)
Bumps the non-breaking-changes group with 1 update: [SamKirkland/FTP-Deploy-Action](https://github.com/samkirkland/ftp-deploy-action).


Updates `SamKirkland/FTP-Deploy-Action` from 4.3.5 to 4.3.6
- [Release notes](https://github.com/samkirkland/ftp-deploy-action/releases)
- [Commits](https://github.com/samkirkland/ftp-deploy-action/compare/v4.3.5...v4.3.6)

---
updated-dependencies:
- dependency-name: SamKirkland/FTP-Deploy-Action
  dependency-version: 4.3.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: non-breaking-changes
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-04 04:14:47 +08:00
YunaiV
f32bce424b feat:【antd】【mall】diy-editor 的整体继续迁移 2025-11-04 00:04:07 +08:00
YunaiV
fde4b7852c feat:【antd】【mall】diy-editor 的整体继续迁移 2025-11-03 23:53:31 +08:00
YunaiV
06309e40b8 feat:【antd】【mall】diy-editor 的 config.ts 同步。 2025-11-03 22:53:13 +08:00
Jin Mao
348c97710f Revert "refactor(jwt): 更新 JWT 工具函数实现方式 (#6869)"
This reverts commit a854760d26.
2025-11-03 19:34:45 +08:00
xingyu4j
bd38cf4c7d Merge branch 'dev' of https://gitee.com/yudaocode/yudao-ui-admin-vben into dev 2025-11-03 18:09:01 +08:00
xingyu4j
56cd619e3c fix: todo 2025-11-03 18:08:45 +08:00
xingyu4j
34a8c44f9a feat: 优化sku list 显示效果 2025-11-03 18:05:53 +08:00
jawe
f3b7b4f66f fix: 去掉本地调试地址 2025-11-03 17:10:47 +08:00
jawe
b94f34c67d feat: 使用tailwindcss简化style,统一文件命名 2025-11-03 16:42:13 +08:00
hw
7a5f4b01e2 fix: eslint 2025-11-03 14:04:38 +08:00
hw
3e826de4aa feat: antd菜单模块迁移 2025-11-03 14:04:00 +08:00
YunaiV
f0f738a368 feat:【ele】【mall】diy-editor 的 index.vue 使用 tailwindcss 简化 style 2025-11-03 13:57:52 +08:00
YunaiV
27d47c13f2 feat:【ele】【mall】diy-editor 的 component-container.vue 使用 tailwindcss 简化 style 2025-11-03 13:44:40 +08:00
YunaiV
3b4cdfef82 feat:【ele】【mall】diy-editor 的 component-library.vue 使用 tailwindcss 简化 style 2025-11-03 13:34:55 +08:00
zengmingyong
a854760d26 refactor(jwt): 更新 JWT 工具函数实现方式 (#6869)
refactor(jwt): 更新 JWT 工具函数实现方式

- 将默认导入 jsonwebtoken 改为解构导入 sign 和 verify 方法
2025-11-03 13:08:06 +08:00
Copilot
c7c39047de feat: add theme-aware logo support via optional sourceDark configuration (#6866)
* Initial plan

* Initial exploration and setup

Co-authored-by: aonoa <32682251+aonoa@users.noreply.github.com>

* Add support for separate light and dark theme logos

Co-authored-by: aonoa <32682251+aonoa@users.noreply.github.com>

* Update documentation with dark theme logo configuration

Co-authored-by: aonoa <32682251+aonoa@users.noreply.github.com>

* feat: Add theme-aware logo support for authentication/login page

Co-authored-by: aonoa <32682251+aonoa@users.noreply.github.com>

* revert: .npmrc

Signed-off-by: aonoa <1991849113@qq.com>

---------

Signed-off-by: aonoa <1991849113@qq.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: aonoa <32682251+aonoa@users.noreply.github.com>
Co-authored-by: Li Kui <90845831+likui628@users.noreply.github.com>
Co-authored-by: aonoa <1991849113@qq.com>
2025-11-03 13:07:36 +08:00
hw
8f5c928ab1 fix: 冲突合并 2025-11-03 11:22:11 +08:00
hw
81f85c200e style: 代码风格统一 2025-11-03 11:18:45 +08:00
xingyu
6e10534833 update pipeline-20251103.yml 2025-11-03 02:59:38 +00:00
xingyu
8db8536662 update pipeline-20251103.yml 2025-11-03 02:52:22 +00:00
xingyu
67bb3da219 update pipeline-20251103.yml 2025-11-03 02:31:22 +00:00
xingyu
a7836137ef create pipeline-20251103.yml 2025-11-03 02:22:36 +00:00
YunaiV
a79483a71d Merge branch 'origin/dev' into dev 2025-11-03 09:48:11 +08:00
YunaiV
03d5be1e41 feat:【ele】【mall】diy-editor 的 vertical-button-group 使用 tailwindcss 简化 style 2025-11-03 09:46:54 +08:00
xingyu
e4f64d2786 !247 Merge remote-tracking branch 'yudao/dev' into dev
Merge pull request !247 from Jason/dev
2025-11-03 01:39:01 +00:00
YunaiV
fe2f8182f1 feat:【ele】【mall】diy-editor 的 magic-cube-editor 使用 tailwindcss 简化 style 2025-11-03 09:32:14 +08:00
YunaiV
b4c90b39c9 feat:【ele】【mall】diy-editor 的 floating-action-button 使用 tailwindcss 简化 style 2025-11-03 09:27:17 +08:00
YunaiV
e5ba8ca4f1 feat:【ele】【mall】diy-editor 的 hot-zone-edit-dialog 使用 tailwindcss 简化 style 2025-11-03 09:26:40 +08:00
jason
7d202f5d7d Merge remote-tracking branch 'yudao/dev' into dev 2025-11-03 09:14:09 +08:00
jason
60190fc94f feat: [antd][bpm] bpmn 流程图查看修改 2025-11-03 09:11:49 +08:00
YunaiV
b6920f332a feat:【ele】【mall】diy-editor 的 tab-bar 使用 tailwindcss 简化 style 2025-11-03 08:46:26 +08:00
YunaiV
ff28f089d4 feat:【ele】【mall】diy-editor 的 title-bar 使用 tailwindcss 简化 style 2025-11-03 08:44:27 +08:00
YunaiV
a33907d4ae feat:【ele】【mall】diy-editor 的 tab-bar 使用 tailwindcss 简化 style 2025-11-03 08:42:47 +08:00
YunaiV
19d30980d7 feat:【ele】【mall】diy-editor 的 navigation-bar 使用 tailwindcss 简化 style 2025-11-03 08:41:56 +08:00
YunaiV
0addd0c77b feat:【ele】【mall】diy-editor 的 menu-list 使用 tailwindcss 简化 style 2025-11-03 08:41:18 +08:00
YunaiV
28029becbd feat:【ele】【mall】diy-editor 的 hot-zone-edit-dialog 使用 tailwindcss 简化 style 2025-11-03 08:40:27 +08:00
YunaiV
fe2396f346 feat:【ele】【mall】diy-editor 的 floating-action-button 使用 tailwindcss 简化 style 2025-11-03 08:38:49 +08:00
YunaiV
60219ace92 feat:【ele】【mall】diy-editor 移除 mobile 多余的 style 标签 2025-11-03 08:33:52 +08:00
YunaiV
a92b98aa41 feat:【ele】【mall】diy-editor 对比 vue3 + element-plus 的最新代码,确保迁移的正确性! 2025-11-02 20:31:23 +08:00
YunaiV
dd86598833 fix:【ele】【mall】修复 diy-editor 拖拽后,无法切回“index”首页的问题 2025-11-02 19:59:30 +08:00
YunaiV
b4ed04f695 fix:【ele】【mall】修复 navigation-bar 选中格子后,无法编辑内容、颜色、链接 2025-11-02 19:43:36 +08:00
YunaiV
de39f4683a fix:【ele】【mall】修复 diy-editor 的“组件容器属性”的【外部边距】【内部边距】的间隙不太对 2025-11-02 18:15:08 +08:00
YunaiV
f984cb6dbd fix:【ele】【mall】修复 diy-editor 的“中心:设计区域(ComponentContainer)”宽度不对的问题 2025-11-02 17:22:38 +08:00
YunaiV
39ddf5a1ea feat:【antd】【mall】diy-editor 的 promotion-point 初始化 100% 2025-11-02 17:05:18 +08:00
YunaiV
2683f10bb5 feat:【antd】【mall】diy-editor 的 promotion-seckill 初始化 100% 2025-11-02 16:45:42 +08:00
YunaiV
0ffe7554ea feat:【antd】【mall】diy-editor 的 promotion-seckill 初始化 50% 2025-11-02 16:36:46 +08:00
YunaiV
82bc4e8b70 feat:【antd】【mall】diy-editor 的 promotion-combination 的代码优化 2025-11-02 16:01:44 +08:00
YunaiV
99a4aa993b fix:【ele】【member】会员详情的修改按钮不生效 2025-11-02 15:32:28 +08:00
YunaiV
f683f01efa feat:【antd】【ele】member 的 balance-list.vue、experience-record-list.vue、point-list.vue、sign-list.vue 增强 data.ts 的复用 2025-11-02 15:20:26 +08:00
YunaiV
d7cb4bdab5 review:【antd】【ele】member 增加 brokerage-list.vue 列表 2025-11-02 14:55:21 +08:00
YunaiV
889b97370a review:【antd】【ele】member 增加 address-list、favorite-list 列表 2025-11-02 14:43:01 +08:00
YunaiV
17ccc0a27f review:【antd】【ele】member 增加 coupon-list 列表 2025-11-02 14:30:17 +08:00
YunaiV
603f0d9c0d Merge remote-tracking branch 'origin/dev' into dev 2025-11-02 12:36:46 +08:00
YunaiV
5d61860996 review:【antd】【ele】member 增加 after-sale-list 列表 2025-11-02 12:35:53 +08:00
xingyu4j
c1777ffda0 fix: lints 2025-11-02 12:32:36 +08:00
xingyu4j
2d51c652b2 Merge branch 'dev' of https://gitee.com/yudaocode/yudao-ui-admin-vben into dev 2025-11-02 12:17:35 +08:00
YunaiV
1a3ce89f4b review:【antd】【ele】member 增加 order-list 列表 2025-11-02 12:10:46 +08:00
xingyu4j
adb5e3178b fix: lint 2025-11-02 12:09:34 +08:00
xingyu4j
a675e90328 chore: deps 2025-11-02 12:04:50 +08:00
jason
1dcb9688dd Merge remote-tracking branch 'yudao/dev' into dev 2025-11-02 09:31:26 +08:00
jason
1f767c5090 feat: [antd][bpm] 发起流程问题修复, todo 修改 2025-11-02 09:29:46 +08:00
YunaiV
904cf46ec0 review:【antd】【mall】客服模块 2025-11-02 09:20:25 +08:00
芋道源码
ac98a876b5 !243 feat(@vben/web-antd):迁移客服模块
Merge pull request !243 from jawe/dev
2025-11-02 00:51:59 +00:00
芋道源码
b3bc18096c !246 Merge remote-tracking branch 'yudao/dev' into dev
Merge pull request !246 from Jason/dev
2025-11-02 00:49:39 +00:00
YunaiV
aee9e4ad1f review:【antd】【iot】设备分类、分组的 review 2025-11-02 08:47:58 +08:00
芋道源码
00e587593d !245 feat: 【antd】【iot】启用状态的产品不能删除
Merge pull request !245 from haohaoMT/dev
2025-11-02 00:46:34 +00:00
YunaiV
01e3c8e0f6 feat:【antd】【ele】优惠劵的 select 组件的统一 2025-11-02 08:42:30 +08:00
YunaiV
682a63bc6e feat:【antd】【mall】满减送的建议 2025-11-02 08:20:11 +08:00
jason
40f615d3c5 Merge remote-tracking branch 'yudao/dev' into dev 2025-11-01 22:57:04 +08:00
jason
cbe7797a1c feat: [antd] [bpm] 代码评审 todo 修改 2025-11-01 22:55:45 +08:00
YunaiV
4412d455a3 feat:【antd】【ele】代码风格统一 2025-11-01 22:50:24 +08:00
haohao
cc5477dc48 feat: 【antd】【iot】启用状态的产品不能删除 2025-11-01 21:55:01 +08:00
haohao
66c9398760 fix: 【antd】【iot】修改设备状态字典为 IOT_DEVICE_STATE 2025-11-01 21:53:22 +08:00
YunaiV
d7cea8be39 feat:【mall】video-player 优化 2025-11-01 21:42:23 +08:00
YunaiV
37afa49011 feat:【mall】diy editor 的 user-bard、user-wallet、user-order 优化 2025-11-01 21:38:39 +08:00
YunaiV
a1a037174c feat:【mall】diy editor 的 title-bar 优化 2025-11-01 21:35:28 +08:00
YunaiV
b8f3f74a01 feat:【mall】diy editor 的 tab-bar 优化 2025-11-01 21:29:25 +08:00
YunaiV
149caebaac feat:【mall】diy editor 的 tab-bar 优化 2025-11-01 21:24:50 +08:00
YunaiV
b880043900 feat:【mall】diy editor 的 search-bar 优化 2025-11-01 21:19:05 +08:00
YunaiV
c6d6d1c1e8 feat:【ele】【mall】draggable 优化 2025-11-01 21:18:49 +08:00
YunaiV
b3e1dab487 feat:【ele】【mall】product/spu 的 components 迁移 2025-11-01 21:09:29 +08:00
YunaiV
4bb631fb24 feat:【mall】diy editor 的 promotion-combination 优化 2025-11-01 19:58:34 +08:00
xingyu
e74cf2e237 !241 feat: 【antd】【iot】设备分组代码迁移
Merge pull request !241 from haohao/dev
2025-11-01 06:01:52 +00:00
YunaiV
2e50526922 feat:【mall】diy editor 的 promotion-article 优化 2025-11-01 12:09:10 +08:00
YunaiV
0741ae4b63 feat:【mall】diy editor 的 product-list 优化 2025-11-01 12:02:08 +08:00
YunaiV
43e758023a feat:【ele】【mall】product/spu 的 components 迁移 2025-11-01 11:46:43 +08:00
YunaiV
7f192823d7 review:【antd】【mall】商品发布相关 2025-11-01 11:05:04 +08:00
芋道源码
f2c90ea7a4 !244 mall 商城vue3组件迁移
Merge pull request !244 from puhui999/dev-mall
2025-11-01 02:48:46 +00:00
YunaiV
1a8b9873e0 feat:【mall】diy editor 的 product-card 优化 50% 2025-11-01 10:45:06 +08:00
YunaiV
98e3078784 feat:【mall】diy editor 的 popover 优化 2025-11-01 10:16:40 +08:00
YunaiV
48292b1a98 feat:【mall】diy editor 的 page-config 优化 2025-11-01 10:07:25 +08:00
YunaiV
a7d24de126 feat:【mall】diy editor 的 notice-bar 优化 2025-11-01 09:40:03 +08:00
YunaiV
5e1c7bb54c feat:【mall】diy editor 的 navigation-bar 优化 2025-11-01 09:21:26 +08:00
YunaiV
12968a3d66 feat:【mall】diy editor 的 menu-swiper 优化 2025-11-01 08:47:47 +08:00
YunaiV
27b35ac0cf feat:【mall】diy editor 的 menu-list 优化 2025-11-01 08:42:55 +08:00
YunaiV
356e8071ed feat:【mall】diy editor 的 menu-grid 优化 2025-11-01 08:33:49 +08:00
puhui999
abe2c04171 feat:【mall 商城】sku-list 组件优化(antd) 2025-10-31 23:40:48 +08:00
puhui999
58a0636959 feat:【mall 商城】满减送活动优化(antd) 2025-10-31 23:00:21 +08:00
puhui999
dd37e58a41 feat:【mall 商城】商品橱窗组件(antd) 2025-10-31 22:59:42 +08:00
puhui999
0956c79aa5 feat:【mall 商城】spu sku 选择器优化(antd) 2025-10-31 20:51:25 +08:00
hw
7cc72018ea Merge branch 'reform-menu' of https://gitee.com/huang-wen199982/yudao-ui-admin-vben into reform-menu 2025-10-31 18:10:12 +08:00
hw
20f838adde fix: eslint errors 2025-10-31 18:09:57 +08:00
puhui999
3802a87659 feat:【mall 商城】优惠券选择组件迁移(antd) 2025-10-31 15:48:18 +08:00
puhui999
83d3188477 feat:【mall 商城】秒杀活动表单优化(antd) 2025-10-31 10:44:22 +08:00
Jin Mao
f8a7a0a9a2 chore: lint 2025-10-31 09:11:40 +08:00
Jin Mao
2cb3dcf499 Merge branch 'fork/ming4762/timezone-fix-20251030'
# Conflicts:
#	packages/stores/src/modules/timezone.ts
2025-10-31 09:08:08 +08:00
Jin Mao
b36d32b66d chore(timezone): 添加 $reset 方法并初始化时区存储
- 在时区存储中添加 `$reset` 方法
-修复导入语句引号为双引号
- 优化时区初始化错误处理逻辑- 导出 `$reset` 方法以便外部调用- 确保时区设置与默认选项同步
- 提升代码一致性和可维护性
2025-10-30 23:27:53 +08:00
zhongming4762
639ea96bb9 fix: resolve the issue of logout failure caused by the timezone store 2025-10-30 17:12:45 +08:00
zhongming4762
565be77e96 fix: resolve the issue of logout failure caused by the timezone store 2025-10-30 17:01:49 +08:00
hw
0f3f6c0c20 chore: 更新配置文件和依赖 2025-10-30 16:33:33 +08:00
jawe
f331f46ff9 feat: [mall] kefu 客服模块迁移 代码风格统一 2025-10-30 16:27:44 +08:00
jawe
0ef91c1cad feat(@vben/web-antd):迁移客服模块 2025-10-30 15:39:08 +08:00
Jin Mao
ac6de0324c Merge branch 'fork/ming4762/timezone-20251020' 2025-10-30 00:42:05 +08:00
YunaiV
38df83e281 feat:【mall】diy editor 的 magic-cube-editor 优化 2025-10-30 00:11:56 +08:00
zhongming4762
f46ae023ba feat: increase support for multiple time zones
* 优化实现方法
2025-10-29 20:14:48 +08:00
zhongming4762
212144feca feat: increase support for multiple time zones
* 优化实现方法
2025-10-29 20:10:25 +08:00
zhongming4762
3eed51fd3e feat: increase support for multiple time zones
* 优化实现方法
2025-10-29 20:03:21 +08:00
zhongming4762
4d713db546 feat: increase support for multiple time zones
* 优化实现方法
2025-10-29 19:47:10 +08:00
YunaiV
cb9fc7ad3f feat:【mall】diy editor 的 magic-cube-editor 优化 2025-10-29 13:56:10 +08:00
YunaiV
fa383159ea feat:【mall】diy editor 的 magic-cube 注释 2025-10-29 09:52:01 +08:00
YunaiV
d6faed9d0e feat:【mall】diy editor 的 image-bar 2025-10-28 23:39:52 +08:00
YunaiV
fe7a69f570 feat:【mall】diy editor 的 hot-zone 代码优化(100%)完成商品分类的支持 2025-10-28 23:21:07 +08:00
YunaiV
05dc2c7eb2 feat:【mall】diy editor 的 hot-zone 代码优化(80%)进一步使用 Modal 2025-10-28 22:56:01 +08:00
YunaiV
a171489dbc feat:【mall】diy editor 的 hot-zone 代码优化(70%)使用 Modal 替代 el-dialog 2025-10-28 21:03:18 +08:00
YunaiV
ec29c25271 feat:【mall】diy editor 的 hot-zone 代码优化(70%)使用 Modal 替代 el-dialog 2025-10-28 20:31:12 +08:00
YunaiV
24757bb562 feat:【mall】diy editor 的 app-link-input 代码优化(50%) 2025-10-28 20:22:53 +08:00
YunaiV
4de0050610 feat:【mall】diy editor 的 hot-zone 代码优化(50%) 2025-10-28 19:22:27 +08:00
YunaiV
a4f7a51ba0 feat:【mall】diy editor 的 floating-action-button 组件 2025-10-28 19:08:39 +08:00
YunaiV
328ad78a2c feat:【mall】diy editor 的 divider 组件 2025-10-28 18:49:26 +08:00
YunaiV
11ac616fd1 feat:【mall】diy editor 的 coupon-card 的全部代码 & 增加优惠劵 select 组件 2025-10-28 18:04:37 +08:00
YunaiV
958f64a9c8 feat:【mall】diy editor 的 coupon-card 部分代码的优化 2025-10-28 17:07:08 +08:00
YunaiV
0f3f220d4b feat:【mall】diy editor 的 carousel 统一小写 2025-10-28 15:13:50 +08:00
YunaiV
71fe98723a fix: 解决合并冲突并更新依赖
解决多个组件模块的合并冲突,包括:
- BPM流程实例创建页面
- 基础设施相关模块(API访问日志、错误日志等)
- 商城促销相关组件
- 支付相关模块
- 系统管理模块
- Element Plus组件描述模块
- 依赖包更新

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-28 14:44:29 +08:00
YunaiV
01ffcb3598 feat:【mall】diy editor 解决 property-group 间距不生效的问题 2025-10-28 14:41:03 +08:00
xingyu4j
32d8af5475 fix: lint 2025-10-28 14:29:42 +08:00
xingyu4j
f88713ce28 chore: engines 2025-10-28 14:19:22 +08:00
xingyu4j
2dd3471f98 fix: antdv ele detail 保持一致 2025-10-28 14:17:28 +08:00
xingyu
8e174a8308 !242 fix: 不能打包
Merge pull request !242 from xingyu/dev
2025-10-28 05:40:28 +00:00
xingyu4j
1338637c00 fix: 不能打包 2025-10-28 11:46:56 +08:00
xingyu4j
e29ea7b34e fix: 不能打包 2025-10-28 11:46:33 +08:00
xingyu4j
fbbcca20e7 fix: 不能打包 2025-10-28 11:42:56 +08:00
YunaiV
b5c8197f20 feat:【mall】diy editor 恢复中间,宽度还有点问题 2025-10-28 07:45:27 +08:00
YunaiV
fd58c4c4e4 feat:【mall】diy editor 修复左侧、中间的宽度问题 2025-10-28 07:24:28 +08:00
YunaiV
715551d431 feat:【mall】diy editor 的告警修复 2025-10-27 23:42:43 +08:00
YunaiV
7d55a39635 feat:【mall】diy editor 的 “右侧操作区” 操作按钮的样式优化 2025-10-27 19:11:33 +08:00
YunaiV
b5cd15c28c feat:【mall】diy 优化,使用 useVbenModal 替代 ElModal 组件,弹出预览 2025-10-27 18:57:00 +08:00
YunaiV
b262dc7303 feat:【mall】diy 优化 index.vue 的注释 2025-10-27 12:59:53 +08:00
xingyu
a00c5caf6c !240 Merge remote-tracking branch 'yudao/dev' into dev
Merge pull request !240 from Jason/dev
2025-10-27 02:28:52 +00:00
YunaiV
86c68b5466 feat:【代码优化】减少部分模块的 import * 的 API 2025-10-27 09:34:45 +08:00
YunaiV
d2db16c8c6 feat:【代码优化】减少部分模块的 import * 的 API 2025-10-27 09:13:32 +08:00
YunaiV
b7d32e315b feat:【代码优化】use-dict-select.ts 的 API 导入问题,不在 import * 2025-10-27 08:44:07 +08:00
jason
a325d3585e Merge remote-tracking branch 'yudao/dev' into dev 2025-10-26 23:21:11 +08:00
jason
66dbf16a77 feat: [antd] [bpm] 流程模型排序代码评审修改 2025-10-26 23:19:01 +08:00
jason
2f254d1285 Merge remote-tracking branch 'yudao/dev' into dev 2025-10-26 21:10:27 +08:00
YunaiV
9651ec49a6 feat:对齐 antd、ele 的代码逻辑 2025-10-26 21:10:16 +08:00
YunaiV
b1479c34c5 review:description 组件的实现 2025-10-26 20:47:24 +08:00
YunaiV
e139481973 feat:【全局】融合下 common card 目录的功能 2025-10-26 20:40:45 +08:00
YunaiV
bcf4fc102e feat:【ele】删除冗余的 summary-card.vue 2025-10-26 20:33:53 +08:00
YunaiV
e30c2c5412 feat:【全局】简化 handleStatusChange 类型逻辑的写法! 2025-10-26 20:25:52 +08:00
YunaiV
94e9d9a228 feat:【ele】【ai】manager 相关的迁移 2025-10-26 20:13:39 +08:00
haohao
fb481994bc feat: 【antd】【iot】产品分类代码迁移 2025-10-26 19:04:54 +08:00
haohao
8203f436cd feat: 【antd】【iot】设备分组代码迁移 2025-10-26 18:26:41 +08:00
YunaiV
60e199abf0 feat:【antd】【ai】image/manager 的代码优化 2025-10-26 18:14:08 +08:00
YunaiV
3d4aeb77b5 feat:【antd】【ai】music/manager 的代码优化 2025-10-26 18:11:10 +08:00
YunaiV
02b6ab1886 feat:【antd】【ai】chat/manager 的代码优化 2025-10-26 17:56:47 +08:00
YunaiV
86cae454d1 feat:【ele】【ai】modal 部分的代码迁移 2025-10-26 16:41:03 +08:00
YunaiV
fc6a467e63 feat:【ele】【ai】modal 部分的代码迁移 2025-10-26 16:32:52 +08:00
YunaiV
67952762ed feat:【ele】【ai】modal 部分的代码迁移 2025-10-26 16:32:43 +08:00
YunaiV
e301bee211 feat:【antd】【ai】modal 部分的代码优化 2025-10-26 16:06:45 +08:00
YunaiV
178a0a3bb2 feat:【antd】【ai】modal 部分的代码优化 2025-10-26 16:05:10 +08:00
YunaiV
0bb0c656b8 feat:【ele】【ai】mindmap 的代码迁移 2025-10-26 15:36:52 +08:00
YunaiV
eeed0f182b feat:【ele】【ai】mindmap 的代码迁移 2025-10-26 15:34:53 +08:00
Jin Mao
0cd9f4615c Merge branch 'main' into fix-downloader 2025-10-26 15:28:34 +08:00
Jin Mao
cfbce0d737 chore: fix lint 2025-10-26 15:27:28 +08:00
Jin Mao
1d9cd88dd7 Merge branch 'main' into fix-downloader 2025-10-26 15:16:32 +08:00
YunaiV
4d388bdb04 feat:【antd】【ai】mindmap 的代码优化 2025-10-26 15:16:09 +08:00
Jin Mao
0e62862119 chore: fix lint 2025-10-26 15:01:58 +08:00
Jin Mao
6b6cdef42d chore: 一些调整 2025-10-26 15:00:47 +08:00
Jin Mao
33b7a605c0 chore: 一些调整和兼容性更新 2025-10-26 14:23:37 +08:00
YunaiV
a35350d055 feat:【ele】【ai】write 的代码迁移 2025-10-26 14:16:10 +08:00
YunaiV
98d69fbee9 feat:【ele】【ai】write 的代码迁移 2025-10-26 14:00:30 +08:00
YunaiV
82917f88a5 feat:【antd】【ai】write 的代码优化 2025-10-26 13:56:46 +08:00
YunaiV
19959c79fc feat:【antd】【ai】write/manager 的代码优化 2025-10-26 13:35:39 +08:00
YunaiV
e218be3fdf feat:【antd】【mall】diy-editor 修复 element-plus 组件之路:部分解决 21% 2025-10-26 10:21:38 +08:00
YunaiV
21d03d8bac feat:【antd】【mall】diy-editor 修复 element-plus 组件之路:部分解决 20% 2025-10-26 10:11:36 +08:00
jason
9ed3c6b377 Merge remote-tracking branch 'yudao/dev' into dev 2025-10-26 09:12:17 +08:00
jason
e01fc275e1 feat: [antd]->[bpm] 代码评审修改 20% 2025-10-26 09:10:52 +08:00
YunaiV
289f6e3de4 feat:【antd】【mall】diy-editor 修复 element-plus 组件之路:部分解决 10% 2025-10-26 00:02:51 +08:00
YunaiV
0fb4f0f9eb feat:【antd】【mall】diy-editor 初始化(暂时不可用,保证界面先有。。。)linter 2025-10-25 23:40:03 +08:00
YunaiV
db1b3be27a feat:【antd】【mall】diy-editor 初始化(暂时不可用,保证界面先有。。。) 2025-10-25 23:18:55 +08:00
YunaiV
5e259eb685 feat:【antd】【mall】diy 主页面的迁移 2025-10-25 21:27:37 +08:00
YunaiV
d8f4979a47 feat:【ele】【mall】diy/page 代码优化 2025-10-25 21:02:09 +08:00
jason
adcacf1ff7 Merge remote-tracking branch 'yudao/dev' into dev 2025-10-25 20:35:52 +08:00
YunaiV
900671babd feat:【ele】【mall】diy/page 代码优化 2025-10-25 19:51:04 +08:00
YunaiV
6d3afd8ccf feat:【ele】【mall】diy-editor 调整目录到 promotion 更聚焦 2025-10-25 17:26:32 +08:00
YunaiV
a624307532 feat:【ele】【mall】diy-editor linter 修复 2025-10-25 17:05:13 +08:00
YunaiV
ae345d6fb2 feat:【ele】【mall】将 draggable 迁移到 mall/promotion/components 中,聚焦一点 2025-10-25 16:31:59 +08:00
YunaiV
1af1a9b2d4 feat:【ele】【mall】将 magic-cube-editor 迁移到 mall/promotion/components 中,聚焦一点 2025-10-25 16:23:44 +08:00
YunaiV
d550ef626c feat:【ele】【mall】将 input-with-colour 迁移到 mall/promotion/components 中,聚焦一点 2025-10-25 16:16:02 +08:00
YunaiV
cd14b16213 feat:【ele】【mall】将 color-input 迁移到 mall/promotion/components 中,聚焦一点 2025-10-25 16:04:28 +08:00
YunaiV
3d14d00a23 feat:【ele】【mall】将 color-input 迁移到 mall/promotion/components 中,聚焦一点 2025-10-25 16:04:21 +08:00
YunaiV
2909d1c4fa feat:【ele】【mall】将 app-link-input 迁移到 mall/promotion/components 中,聚焦一点 2025-10-25 15:53:51 +08:00
YunaiV
457add90bd feat:【ele】【mall】将 vertical-button-group 迁移到 mall/promotion/components 中,聚焦一点 2025-10-25 15:30:19 +08:00
YunaiV
870566dc12 feat:【ele】mp/user 的代码迁移 2025-10-25 15:18:40 +08:00
YunaiV
0566014501 feat:【ele】mp/tag 的代码迁移 2025-10-25 15:18:32 +08:00
YunaiV
a3890a120f feat:【ele】mp/tag 的代码迁移 2025-10-25 15:01:31 +08:00
YunaiV
fde9ddf468 feat:【ele】mp/statistics 的代码迁移 2025-10-25 14:44:58 +08:00
YunaiV
82e524076c feat:【antd】mp/statistics 的代码迁移 2025-10-25 14:33:16 +08:00
YunaiV
080b57af07 feat:【ele】mp/account 的代码迁移 2025-10-25 14:24:01 +08:00
YunaiV
402cab05b9 feat:【antd】mp/account 的代码优化 2025-10-25 14:16:10 +08:00
YunaiV
ec48c8859b fix:【ele】文件上传的 bug 2025-10-25 10:56:33 +08:00
YunaiV
c27b33bae8 feat:【antd】【ele】form-create 集成的 todo 处理 2025-10-25 09:59:29 +08:00
YunaiV
e6e891898c feat:【antd】【ele】form-create 集成的 todo 处理 2025-10-25 09:57:24 +08:00
YunaiV
4de08db26d feat:【antd】【ele】form-create 集成的 todo 处理 2025-10-25 09:56:01 +08:00
YunaiV
5e5a50615b feat:【antd】首页项目点击时,可以进行跳转 2025-10-25 09:24:33 +08:00
YunaiV
9a526f83cc feat:【antd】【bpm】修复 bpmn 设计器的高度不对的问题 2025-10-24 22:33:00 +08:00
YunaiV
db57d82799 feat:【antd】【bpm】oa 相关代码优化 2025-10-24 22:22:34 +08:00
YunaiV
d181c2a228 feat:【antd】【bpm】oa 相关代码优化 2025-10-24 22:18:32 +08:00
YunaiV
616dbf3b32 feat:【antd】【bpm】将 simple-model-design 迁移到 bpm components 下。 2025-10-24 21:24:59 +08:00
YunaiV
6f5a5ab3d4 feat:【antd】【bpm】将 bpmn-process-designer 迁移到 bpm components 下。 2025-10-24 20:46:43 +08:00
YunaiV
0046e49ab0 feat:【antd】【bpm】bpm/definition 的优化 2025-10-24 20:11:35 +08:00
YunaiV
9bb554f474 feat:【antd】【bpm】model/index.vue 代码评审 2025-10-24 20:03:30 +08:00
YunaiV
d568ab0fe9 feat:【antd】【bpm】model/form/ 代码评审 2025-10-24 13:57:31 +08:00
YunaiV
bbd32a274e feat:【antd】【bpm】processInstance/detail 代码评审 2025-10-24 00:01:38 +08:00
YunaiV
cbb65ffff3 feat:【antd】【bpm】processInstance/create 代码评审 2025-10-23 23:14:01 +08:00
YunaiV
abf015c444 feat:【antd】满减送活动的 review 2025-10-23 13:02:17 +08:00
YunaiV
319e9dc7bd Merge remote-tracking branch 'origin/dev' into dev
# Conflicts:
#	apps/web-antd/src/views/mall/promotion/point/activity/data.ts
#	apps/web-antd/src/views/mall/promotion/point/activity/index.vue
2025-10-23 12:46:02 +08:00
YunaiV
74bf240f52 feat:【antd】商品积分活动的 review 2025-10-23 12:44:19 +08:00
xingyu4j
8b7780d52d feat: 调整样式 2025-10-23 10:50:46 +08:00
xingyu4j
e73305d440 feat: boolean 类型使用 RadioGroup 解决 select boolean 类型 warn 2025-10-23 10:14:47 +08:00
xingyu4j
7ae3ac66fc fix: lint 2025-10-23 09:51:25 +08:00
xingyu4j
806caf8b48 Merge branch 'dev' of https://gitee.com/yudaocode/yudao-ui-admin-vben into dev 2025-10-23 09:47:08 +08:00
xingyu4j
7324166a4c fix: lint 2025-10-23 09:41:05 +08:00
xingyu4j
dd6d9d8868 Merge branch 'dev' of https://gitee.com/yudaocode/yudao-ui-admin-vben into dev 2025-10-23 09:40:16 +08:00
YunaiV
d14177a4c0 feat: merge remote dev branch changes
Merge IoT-related updates and improvements from remote dev branch

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-23 09:36:19 +08:00
YunaiV
9abaf69df1 feat:【antd】商品积分活动的 review 2025-10-23 09:35:16 +08:00
xingyu
0628280ea5 !238 修复物联网OTA升级页面和接口不可用的问题
Merge pull request !238 from huppygo/dev
2025-10-23 01:34:30 +00:00
YunaiV
ebc7aba637 feat:【antd】mall 发布界面的评审 2025-10-22 23:53:48 +08:00
Administrator
aefcd240e3 修复 2025-10-22 22:08:31 +08:00
zhongming4762
e01803ce9d feat: increase support for multiple time zones 2025-10-22 20:39:00 +08:00
zhongming4762
e3e5755903 feat: increase support for multiple time zones 2025-10-22 20:29:53 +08:00
zhongming4762
61ce53b686 feat: increase support for multiple time zones 2025-10-22 20:23:55 +08:00
zhongming4762
b029f77b6a feat: increase support for multiple time zones 2025-10-22 20:18:25 +08:00
zhongming4762
0a8339a405 feat: increase support for multiple time zones 2025-10-22 19:52:01 +08:00
Administrator
7ea4f836a4 修改物联网OTA升级页面和接口不可用的问题 2025-10-22 18:22:16 +08:00
xingyu4j
1db4c4170b fix: mall 2025-10-22 18:17:21 +08:00
xingyu4j
1f64551a3e fix: cellDictTag => CellDict 2025-10-22 18:07:46 +08:00
xingyu
495a924d56 !236 【mall 商城】promotion【antd】迁移
Merge pull request !236 from puhui999/dev-promotion
2025-10-22 10:06:51 +00:00
xingyu4j
cc937a88f1 feat: mp statistics 2025-10-22 18:03:32 +08:00
puhui999
cec1a58eab feat:【mall 商城】promotion reward【antd】100%: 迁移完成 2025-10-22 17:31:10 +08:00
puhui999
ca508caf61 feat:【mall 商城】promotion point【antd】100%: 迁移完成 2025-10-22 16:52:43 +08:00
xingyu4j
d0b66dbee4 fix: format 2025-10-22 16:35:01 +08:00
puhui999
ae0f3d39a2 feat:【mall 商城】promotion 公共组件【antd】100%: 迁移完成 2025-10-22 16:27:57 +08:00
xingyu4j
02945ef12a feat: mp user 2025-10-22 16:26:07 +08:00
xingyu4j
a23aaa473f feat: mp tag 2025-10-22 16:25:13 +08:00
puhui999
29b845ba05 feat:【mall 商城】SPU 商品选择弹窗组件【antd】100%: 迁移完成 2025-10-22 16:15:14 +08:00
xingyu4j
943ac99805 fix: 打包不成功 2025-10-22 15:41:13 +08:00
xingyu4j
2884ca72f7 fix: erp warn 2025-10-22 15:32:50 +08:00
xingyu4j
66647802af feat: ai code 2025-10-22 14:52:42 +08:00
xingyu4j
7aacec3e69 fix: crm statistics 2025-10-22 12:29:44 +08:00
xingyu4j
fc475c128c feat: mall detail 2025-10-22 10:22:51 +08:00
xingyu4j
9602ab6a1b fix: i18n 2025-10-22 10:18:11 +08:00
YunaiV
b5874bd0cd feat:【antd】mall 发布界面,独立目录 2025-10-22 00:21:00 +08:00
YunaiV
a7b9292b8d feat:【antd】mall 商品列表的优化代码 2025-10-21 23:48:41 +08:00
YunaiV
1286623863 feat:移除“ // 路由”重复注释。 2025-10-21 20:56:53 +08:00
YunaiV
28843fc8fe feat:【ele】bpm processInstance/report/ 的迁移 2025-10-21 19:39:06 +08:00
YunaiV
8721c4de72 chore: merge remote changes
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-21 19:27:55 +08:00
YunaiV
17558993d4 feat:【antd】bpm processInstance/report/ 的迁移 2025-10-21 19:26:06 +08:00
xingyu4j
760c5dde2a feat: 进一步优化显示效果 2025-10-21 18:17:02 +08:00
xingyu4j
20f95bb8ab refactor: spu form 2025-10-21 18:08:51 +08:00
xingyu4j
44e0a527a1 feat: 优化显示效果 2025-10-21 18:00:24 +08:00
xingyu4j
9ab51a137c fix: sku list 2025-10-21 17:55:23 +08:00
xingyu4j
80545f973a fix: lint 2025-10-21 17:45:43 +08:00
xingyu4j
5203b991de feat: add i18n 2025-10-21 17:42:02 +08:00
xingyu
d44ff7006a !235 feat:【mall 商城】商品发布 - 库存价格【antd】100%: 迁移完成
Merge pull request !235 from puhui999/dev-spu
2025-10-21 09:31:07 +00:00
puhui999
65e9aeed7f feat:【mall 商城】SKU 选择弹窗组件【antd】100%: 迁移完成 2025-10-21 17:18:06 +08:00
puhui999
5a4ecd4ad7 Merge branch 'dev' of gitee.com:yudaocode/yudao-ui-admin-vben into dev-spu
Signed-off-by: puhui999 <puhui999@163.com>
2025-10-21 08:53:26 +00:00
puhui999
38d345115c feat:【mall 商城】商品发布 - 库存价格【antd】100%: 迁移完成 2025-10-21 16:49:31 +08:00
puhui999
6bbf878171 feat:【mall 商城】商品发布 - 库存价格【antd】100%: 迁移完成 2025-10-21 16:39:54 +08:00
xingyu4j
985ce257e0 feat: use desc comp 2025-10-21 16:39:35 +08:00
xingyu4j
bb9cb64c64 refactor: refactor naive desc comp 2025-10-21 16:39:15 +08:00
xingyu4j
4959a8f401 fix: desc 2025-10-21 16:38:39 +08:00
xingyu4j
4726238e9a fix: desc 2025-10-21 16:38:24 +08:00
puhui999
93149876e5 feat:【mall 商城】商品发布 - 库存价格【antd】80%: 完善 sku form 逻辑 2025-10-21 16:10:49 +08:00
xingyu4j
d368582a90 feat: ele use desc comp 2025-10-21 15:33:32 +08:00
puhui999
6ea2082e4b feat:【mall 商城】商品发布 - 库存价格【antd】30%: 初始化 2025-10-21 15:18:04 +08:00
xingyu4j
18ef9031ca refactor: refactor ele desc comp 2025-10-21 15:16:32 +08:00
xingyu4j
94628d0c56 feat: use desc comp 2025-10-21 14:41:25 +08:00
xingyu4j
cc4a99c47d feat: desc 支持 嵌套字段 2025-10-21 14:40:20 +08:00
xingyu4j
e5d69952cb fix: 统一代码格式 2025-10-21 14:34:05 +08:00
xingyu4j
7f7f7cda2b fix: color: 'auto' => color: 'inherit' 2025-10-21 13:47:52 +08:00
xingyu4j
14093bec07 feat: 优化 desc 组件的显示效果 2025-10-21 13:42:52 +08:00
YunaiV
f61e58db96 feat:【ele】bpm processInstance/index.vue 的迁移 2025-10-21 13:11:08 +08:00
YunaiV
3f58003341 feat:【ele】bpm processInstance/index.vue 的迁移 2025-10-21 13:10:47 +08:00
YunaiV
b3b3e632ec feat:【antd】bpm processInstance/index.vue 的迁移 2025-10-21 13:06:37 +08:00
YunaiV
f488d7e414 feat:【ele】bpm processInstance/manager 的迁移 2025-10-21 12:52:31 +08:00
YunaiV
1ed485fe3e feat:【antd】bpm processInstance/manager 的迁移 2025-10-21 12:44:03 +08:00
xingyu4j
2d40c0c9f5 Merge branch 'dev' of https://gitee.com/yudaocode/yudao-ui-admin-vben into dev 2025-10-21 12:12:05 +08:00
xingyu4j
bd09ecf2b5 fix: 缺失的字典枚举 2025-10-21 11:41:07 +08:00
xingyu4j
de4ca0a5a4 feat: use new desc comp 2025-10-21 11:40:42 +08:00
xingyu4j
284c47b721 refactor: antdv desc comp 2025-10-21 11:38:02 +08:00
puhui999
1ad4f2681e feat:【mall 商城】商品发布 - 库存价格 - 添加属性【antd】100%: 组件迁移 2025-10-21 11:00:33 +08:00
puhui999
3dc2d96514 feat:【mall 商城】商品属性列表组件【antd】100%: 组件迁移 2025-10-21 10:49:15 +08:00
Jin Mao
2264eaae18 feat: 新增集成tdesign组件的apps 2025-10-21 10:47:39 +08:00
YunaiV
77ba1ee68f feat:【ele】bpm task 的迁移 2025-10-21 09:41:25 +08:00
YunaiV
ad00cf839c feat:简化 ApiSelect 的 api 写法~ 2025-10-21 09:06:17 +08:00
YunaiV
3b4c01cedf feat:【antd】bpm task 的部分迁移 2025-10-20 23:33:52 +08:00
YunaiV
002ac223f0 feat:【ele】bpm processListener 的迁移 2025-10-20 23:12:24 +08:00
YunaiV
412982436a feat:【ele】bpm processListener 的迁移 2025-10-20 23:09:07 +08:00
YunaiV
fe1dccdcaa feat:【ele】bpm processExpression 的迁移 2025-10-20 23:05:35 +08:00
YunaiV
11bc471ef1 feat:【antd】bpm processExpression 的迁移 2025-10-20 23:01:05 +08:00
YunaiV
7f031ee59e feat:【ele】【ant】bpm form 高度不正确的问题 2025-10-20 22:55:27 +08:00
YunaiV
337c695b1d feat:【ele】bpm form 的迁移 100% 已完成 2025-10-20 22:33:55 +08:00
YunaiV
39508453fa feat:【ele】bpm form 的迁移 50% 初始化 2025-10-20 22:22:56 +08:00
YunaiV
f2f1675087 feat:【ele】bpm form 的迁移 50% 初始化 2025-10-20 22:22:49 +08:00
YunaiV
0b39a8ff38 feat:【antd】bpm form 的迁移 2025-10-20 22:06:36 +08:00
YunaiV
fe9928f9bf feat:【antd】bpm group 的迁移 2025-10-20 21:02:59 +08:00
YunaiV
55ea34c740 feat:【antd】bpm group 的迁移 2025-10-20 20:51:01 +08:00
YunaiV
20ac88271e feat:【ele】bpm category 的迁移 2025-10-20 20:27:08 +08:00
YunaiV
2cd4bc127d feat:【antd】bpm category 的代码风格统一 2025-10-20 19:59:32 +08:00
YunaiV
1b869a1e3a feat:使用 router name 进行跳转 2025-10-20 19:24:14 +08:00
YunaiV
fba34d6ceb feat:使用 router name 进行跳转 2025-10-20 19:14:00 +08:00
YunaiV
2b15a1835d fix:router push 无法使用 name 的问题 2025-10-20 19:09:14 +08:00
YunaiV
777ace6913 feat:统一 ele 和 antd 代码风格,移除
```
<style scoped>
:deep(.vxe-toolbar div) {
  z-index: 1;
}
</style>
```
2025-10-20 18:37:18 +08:00
YunaiV
376520253d feat:【mall 商城】交易统计【ele】100% 2025-10-20 18:31:14 +08:00
xingyu4j
03644613f3 feat: 使用 path 进行跳转 2025-10-20 15:42:23 +08:00
xingyu4j
dd70dc0012 fix: router push 2025-10-20 15:36:06 +08:00
xingyu4j
95bda979a1 Merge branch 'dev' of https://gitee.com/yudaocode/yudao-ui-admin-vben into dev 2025-10-20 14:45:04 +08:00
xingyu4j
5ceffa2fe9 feat: 优化 table tab 的显示 2025-10-20 14:44:39 +08:00
xingyu4j
eb61ac3adb fix: handlePickup prompt 2025-10-20 14:13:49 +08:00
YunaiV
b28209afe7 feat:【mall 商城】交易统计【antd】30%:优化 trend-card.vue 的实现 2025-10-20 13:58:34 +08:00
xingyu4j
27eb3e6d21 fix: SummaryCard import 2025-10-20 13:50:59 +08:00
xingyu4j
91dd233727 fix: reload config 2025-10-20 13:49:09 +08:00
YunaiV
7ed34921bc feat:【mall 商城】交易统计【antd】30%:优化 trend-card.vue 的实现 2025-10-20 13:16:41 +08:00
YunaiV
49b2b40210 feat: 2025-10-20 13:08:56 +08:00
YunaiV
72dca61f74 chore: complete merge
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-20 13:00:21 +08:00
xingyu4j
705b16b0d1 fix: sort 2025-10-20 11:35:12 +08:00
xingyu
38664bf047 !234 fix: lint
Merge pull request !234 from xingyu/dev
2025-10-20 02:54:38 +00:00
xingyu4j
496a808b86 fix: lint 2025-10-20 10:49:08 +08:00
xingyu4j
30c7727361 feat: 统一 api 组件的调用方法 2025-10-20 10:41:57 +08:00
xingyu4j
c6ef77694e fix: iot warn 2025-10-20 10:37:23 +08:00
xingyu
948cb916c4 !232 iot产品管理问题修复接口
Merge pull request !232 from huppygo/dev
2025-10-20 01:59:37 +00:00
YunaiV
faa4a9140d feat:【mall 商城】商品统计【ele】100%:迁移完成 2025-10-20 09:51:31 +08:00
YunaiV
12075acefa feat:【mall 商城】交易统计、商品统计【ele】60%:初始化 2025-10-20 09:45:49 +08:00
YunaiV
b11b7582c2 feat:【mall 商城】交易统计、商品统计【antd】30%:迁移完成 2025-10-20 09:39:41 +08:00
YunaiV
3aee960954 feat:【mall 商城】交易统计、商品统计【antd】20%:product-summary-card.vue 完善 2025-10-20 09:29:00 +08:00
YunaiV
b5bc8d24b9 feat:【mall 商城】交易统计、商品统计【antd】15%:product-rank-card.vue 完善 2025-10-19 22:14:49 +08:00
YunaiV
cb717a9d84 feat:【mall 商城】交易统计、商品统计【antd】10%:初始化 2025-10-19 20:57:57 +08:00
YunaiV
6c7af029a2 feat:【mall 商城】会员统计【ele】100% 全部完成 2025-10-19 20:29:18 +08:00
YunaiV
936806bd2d feat:【mall 商城】会员统计【antd】50% 全部完成 2025-10-19 19:42:07 +08:00
YunaiV
b2b43f2d19 feat:【mall 商城】会员统计【antd】45% area-card.vue 优化代码风格 2025-10-19 19:29:45 +08:00
YunaiV
f84a296416 feat:【mall 商城】会员统计【antd】40% area-card.vue 修复界面 2025-10-19 19:22:03 +08:00
YunaiV
05bc69541b feat:summary-card 重构到 common-ui 里! 2025-10-19 19:10:09 +08:00
YunaiV
f6053bd6ca feat:【mall 商城】会员统计【antd】30% summary-card.vue 优化界面 2025-10-19 19:05:41 +08:00
YunaiV
01aef369d7 feat:【mall 商城】会员统计【antd】20% sex-card.vue 完善 2025-10-19 18:47:48 +08:00
YunaiV
fe62992d78 feat:【mall 商城】会员统计【antd】10% 初始化 2025-10-19 18:40:27 +08:00
YunaiV
bd9d8376c2 feat:【mall 商城】商城首页的迁移【ele】100%:评审完成 2025-10-19 16:59:47 +08:00
YunaiV
73208aa304 feat:【mall 商城】商城首页的迁移【ele】60%:初始化 2025-10-19 16:41:58 +08:00
YunaiV
5b3749d535 feat:【mall 商城】商城首页的迁移【antd】55%:member-stat 修复缺陷 2025-10-19 16:21:53 +08:00
YunaiV
79f633bb86 feat:【mall 商城】商城首页的迁移【antd】50%:trade-trend-card 修复缺陷 2025-10-19 16:12:21 +08:00
YunaiV
f6a251243f feat:【mall 商城】商城首页的迁移【antd】45%:terminal-card 修复缺陷 2025-10-19 15:49:53 +08:00
YunaiV
1628ab8cb5 feat:【mall 商城】商城首页的迁移【antd】45%:member-funnel-card.vue 修复缺陷 2025-10-19 15:37:48 +08:00
YunaiV
af61726e0e feat:【mall 商城】商城首页的迁移【antd】40%:member-funnel-card.vue、member-terminal-card.vue 2025-10-19 11:18:40 +08:00
YunaiV
7b8a7efc5b feat:【mall 商城】商城首页的迁移【antd】30%:shortcut-card、operation-data-card.vue 2025-10-19 10:25:04 +08:00
YunaiV
95fffb8af0 feat:【mall 商城】商城首页的迁移【antd】20%:初始化 2025-10-19 10:09:33 +08:00
jason
61b64b21aa Merge remote-tracking branch 'yudao/dev' into dev 2025-10-19 09:34:23 +08:00
zoumingjun
38f91da5af fix: 优化双列布局组件点击展开左侧按钮位置不居中问题 2025-10-18 21:22:58 +08:00
zoumingjun
8edea3aee5 fix: 调整zh-CN/system.json中<"title": "系统管理">配置位置,保持与en-US/system.json中位置一致 2025-10-18 21:20:54 +08:00
zoumingjun
08b6e7713e fix: 修复对话框modal组件方法名错误 2025-10-18 21:13:34 +08:00
zoumingjun
6a89814b83 chore: 优化侧边栏展开折叠图标 2025-10-18 20:59:14 +08:00
zoumingjun
52d3aa9315 fix: 优化Checkbox组件hover样式,Input组件placeholder样式,TabsList组件圆角样式 2025-10-18 20:58:48 +08:00
zoumingjun
4e264c503a fix: 锁屏和解锁密码输入框自动聚焦 2025-10-18 20:55:53 +08:00
zoumingjun
32051e9ca0 fix: 优化左侧和右侧认证面板动画效果 2025-10-18 20:52:27 +08:00
YunaiV
ad6ba25b3e feat:【mall 商城】商城首页的迁移【antd】10%:初始化 2025-10-18 19:47:36 +08:00
zoumingjun
2b0079580b fix: 修复mock-data.ts父id错误 2025-10-18 16:32:23 +08:00
Administrator
cec1cc7590 修复下面的问题 和其他页面中的类似问题
1.apps/web-antd/src/views/iot/device/device/modules/DeviceForm.vue
type 是和方法分离的

2.apps/web-antd/src/views/iot/device/device/modules/detail/DeviceDetailsMessage.vue
const getMessageList = async () => {
方法使用function 不要用const,保持一致

3.apps/web-antd/src/views/iot/device/device/modules/detail/DeviceDetailsMessage.vue
<script setup lang="ts">
文件结构是

4.apps/web-antd/src/views/iot/rule/data/rule/index.vue
handleRefresh 统一命名

Signed-off-by: Administrator <425053404@qq.com>
2025-10-17 18:06:58 +08:00
Administrator
1190121773 iot产品管理问题修复接口 2025-10-17 00:19:43 +08:00
Administrator
54afd4555d iot产品管理问题
1.修复物模型列表无限加载的问题
2.修复物模型管理页面添加,TSL,编辑,删除,功能类型选项功能不用问题
3.修复TSL按钮物模型接口没有的问题
4.修复物模型新增编辑页面的属性不能正常编辑修改问题美化显示
iot设备管理问题
1.修复新增编辑页面缺少字段相关组件
2.修复设备详情中子页面不显示问题
3.修复设备详情子页面物模型数据页面不显示问题
4.修复模拟设备右侧不显示问题 右侧溢出,改为上下分栏

Signed-off-by: Administrator <425053404@qq.com>
2025-10-17 00:13:48 +08:00
jason
be47a4482c Merge remote-tracking branch 'yudao/dev' into dev 2025-10-13 09:22:09 +08:00
jason
4edecbf3fa Merge remote-tracking branch 'yudao/dev' into dev 2025-09-30 09:11:48 +08:00
jason
8637f8a5c0 Merge remote-tracking branch 'yudao/dev' into dev 2025-09-11 09:26:22 +08:00
jason
e43bb989b3 fix: 去掉 console 打印 2025-08-25 10:17:19 +08:00
jason
51471e2344 Merge remote-tracking branch 'yudao/dev' into dev 2025-08-25 09:45:03 +08:00
jason
4f65156a95 fix: [BPM 工作流] 流程表单字段解析调整为使用库解析 2025-08-25 09:42:18 +08:00
lighua
fddfc6d494 fix: 增加对不支持的 HTTP 方法的错误处理 2025-08-21 11:13:02 +08:00
lighua
df655015b1 fix: 优化文件下载器方法 2025-08-08 15:31:31 +08:00
6163 changed files with 612963 additions and 98441 deletions

View File

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 40 KiB

View File

Before

Width:  |  Height:  |  Size: 348 KiB

After

Width:  |  Height:  |  Size: 348 KiB

View File

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

View File

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 46 KiB

View File

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 163 KiB

View File

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 27 KiB

View File

Before

Width:  |  Height:  |  Size: 238 KiB

After

Width:  |  Height:  |  Size: 238 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

View File

Before

Width:  |  Height:  |  Size: 139 KiB

After

Width:  |  Height:  |  Size: 139 KiB

View File

Before

Width:  |  Height:  |  Size: 69 KiB

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

View File

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 216 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

View File

Before

Width:  |  Height:  |  Size: 201 KiB

After

Width:  |  Height:  |  Size: 201 KiB

View File

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 60 KiB

View File

Before

Width:  |  Height:  |  Size: 196 KiB

After

Width:  |  Height:  |  Size: 196 KiB

View File

Before

Width:  |  Height:  |  Size: 495 KiB

After

Width:  |  Height:  |  Size: 495 KiB

View File

Before

Width:  |  Height:  |  Size: 177 KiB

After

Width:  |  Height:  |  Size: 177 KiB

View File

Before

Width:  |  Height:  |  Size: 126 KiB

After

Width:  |  Height:  |  Size: 126 KiB

View File

@@ -9,7 +9,7 @@ runs:
uses: pnpm/action-setup@v4
- name: Install Node.js
uses: actions/setup-node@v4
uses: actions/setup-node@v6
with:
node-version-file: .node-version
cache: 'pnpm'

View File

@@ -1,89 +0,0 @@
## Git Commit Message Convention
> This is adapted from [Angular's commit convention](https://github.com/conventional-changelog/conventional-changelog/tree/master/packages/conventional-changelog-angular).
#### TL;DR:
Messages must be matched by the following regex:
```js
/^(revert: )?(feat|fix|docs|style|refactor|perf|test|workflow|build|ci|chore|types|wip): .{1,50}/;
```
#### Examples
Appears under "Features" header, `dev` subheader:
```
feat(dev): add 'comments' option
```
Appears under "Bug Fixes" header, `dev` subheader, with a link to issue #28:
```
fix(dev): fix dev error
close #28
```
Appears under "Performance Improvements" header, and under "Breaking Changes" with the breaking change explanation:
```
perf(build): remove 'foo' option
BREAKING CHANGE: The 'foo' option has been removed.
```
The following commit and commit `667ecc1` do not appear in the changelog if they are under the same release. If not, the revert commit appears under the "Reverts" header.
```
revert: feat(compiler): add 'comments' option
This reverts commit 667ecc1654a317a13331b17617d973392f415f02.
```
### Full Message Format
A commit message consists of a **header**, **body** and **footer**. The header has a **type**, **scope** and **subject**:
```
<type>(<scope>): <subject>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>
```
The **header** is mandatory and the **scope** of the header is optional.
### Revert
If the commit reverts a previous commit, it should begin with `revert: `, followed by the header of the reverted commit. In the body, it should say: `This reverts commit <hash>.`, where the hash is the SHA of the commit being reverted.
### Type
If the prefix is `feat`, `fix` or `perf`, it will appear in the changelog. However, if there is any [BREAKING CHANGE](#footer), the commit will always appear in the changelog.
Other prefixes are up to your discretion. Suggested prefixes are `docs`, `chore`, `style`, `refactor`, and `test` for non-changelog related tasks.
### Scope
The scope could be anything specifying the place of the commit change. For example `dev`, `build`, `workflow`, `cli` etc...
### Subject
The subject contains a succinct description of the change:
- use the imperative, present tense: "change" not "changed" nor "changes"
- don't capitalize the first letter
- no dot (.) at the end
### Body
Just as in the **subject**, use the imperative, present tense: "change" not "changed" nor "changes". The body should include the motivation for the change and contrast this with previous behavior.
### Footer
The footer should contain any information about **Breaking Changes** and is also the place to reference GitHub issues that this commit **Closes**.
**Breaking Changes** should start with the word `BREAKING CHANGE:` with a space or two newlines. The rest of the commit message is then used for this.

View File

@@ -30,7 +30,7 @@ jobs:
- windows-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@v6
with:
fetch-depth: 0

View File

@@ -25,7 +25,7 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@v6
with:
fetch-depth: 0

View File

@@ -28,12 +28,12 @@ jobs:
timeout-minutes: 20
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Install pnpm
uses: pnpm/action-setup@v4
uses: pnpm/action-setup@v5
with:
run_install: false
@@ -67,7 +67,7 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@v6
with:
fetch-depth: 0
@@ -90,7 +90,7 @@ jobs:
- windows-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@v6
with:
fetch-depth: 0

View File

@@ -57,7 +57,7 @@ jobs:
# your codebase is analyzed, see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages
steps:
- name: Checkout repository
uses: actions/checkout@v4
uses: actions/checkout@v6
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL

View File

@@ -12,7 +12,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@v6
with:
fetch-depth: 0
@@ -30,7 +30,7 @@ jobs:
run: pnpm build:play
- name: Sync Playground files
uses: SamKirkland/FTP-Deploy-Action@v4.3.5
uses: SamKirkland/FTP-Deploy-Action@v4.3.6
with:
server: ${{ secrets.PRO_FTP_HOST }}
username: ${{ secrets.WEB_PLAYGROUND_FTP_ACCOUNT }}
@@ -43,7 +43,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@v6
with:
fetch-depth: 0
@@ -54,7 +54,7 @@ jobs:
run: pnpm build:docs
- name: Sync Docs files
uses: SamKirkland/FTP-Deploy-Action@v4.3.5
uses: SamKirkland/FTP-Deploy-Action@v4.3.6
with:
server: ${{ secrets.PRO_FTP_HOST }}
username: ${{ secrets.WEBSITE_FTP_ACCOUNT }}
@@ -67,7 +67,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@v6
with:
fetch-depth: 0
@@ -85,7 +85,7 @@ jobs:
run: pnpm run build:antd
- name: Sync files
uses: SamKirkland/FTP-Deploy-Action@v4.3.5
uses: SamKirkland/FTP-Deploy-Action@v4.3.6
with:
server: ${{ secrets.PRO_FTP_HOST }}
username: ${{ secrets.WEB_ANTD_FTP_ACCOUNT }}
@@ -98,7 +98,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@v6
with:
fetch-depth: 0
@@ -116,7 +116,7 @@ jobs:
run: pnpm run build:ele
- name: Sync files
uses: SamKirkland/FTP-Deploy-Action@v4.3.5
uses: SamKirkland/FTP-Deploy-Action@v4.3.6
with:
server: ${{ secrets.PRO_FTP_HOST }}
username: ${{ secrets.WEB_ELE_FTP_ACCOUNT }}
@@ -129,7 +129,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@v6
with:
fetch-depth: 0
@@ -147,7 +147,7 @@ jobs:
run: pnpm run build:naive
- name: Sync files
uses: SamKirkland/FTP-Deploy-Action@v4.3.5
uses: SamKirkland/FTP-Deploy-Action@v4.3.6
with:
server: ${{ secrets.PRO_FTP_HOST }}
username: ${{ secrets.WEB_NAIVE_FTP_ACCOUNT }}

View File

@@ -20,6 +20,6 @@ jobs:
if: github.repository == 'vbenjs/vue-vben-admin'
runs-on: ubuntu-latest
steps:
- uses: release-drafter/release-drafter@v6
- uses: release-drafter/release-drafter@v7
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@@ -19,15 +19,15 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [20]
node-version: [22]
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@v6
with:
fetch-depth: 0
# - name: Checkout code
# uses: actions/checkout@v4
# uses: actions/checkout@v6
# with:
# fetch-depth: 0
@@ -58,7 +58,7 @@ jobs:
echo "version=${version}" >> $GITHUB_OUTPUT
echo "major=${major}" >> $GITHUB_OUTPUT
- uses: release-drafter/release-drafter@v6
- uses: release-drafter/release-drafter@v7
with:
version: ${{ steps.version.outputs.version }}
publish: true

9
.gitignore vendored
View File

@@ -22,7 +22,7 @@ yarn.lock
package-lock.json
.VSCodeCounter
**/backend-mock/data
.omx
# local env files
.env.local
.env.*.local
@@ -50,3 +50,10 @@ vite.config.ts.*
*.sw?
.history
.cursor
# AI
.agent
.agents
.claude
.codex
skills-lock.json

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

View File

@@ -1 +1 @@
22.1.0
22.22.0

6
.npmrc
View File

@@ -1,8 +1,8 @@
registry = "https://registry.npmmirror.com"
registry=https://registry.npmmirror.com
public-hoist-pattern[]=lefthook
public-hoist-pattern[]=eslint
public-hoist-pattern[]=prettier
public-hoist-pattern[]=prettier-plugin-tailwindcss
public-hoist-pattern[]=oxfmt
public-hoist-pattern[]=oxlint
public-hoist-pattern[]=stylelint
public-hoist-pattern[]=*postcss*
public-hoist-pattern[]=@commitlint/*

View File

@@ -1,18 +0,0 @@
dist
dev-dist
.local
.output.js
node_modules
.nvmrc
coverage
CODEOWNERS
.nitro
.output
**/*.svg
**/*.sh
public
.npmrc
*-lock.yaml

View File

@@ -1 +0,0 @@
export { default } from '@vben/prettier-config';

View File

@@ -2,3 +2,7 @@ dist
public
__tests__
coverage
.codex
.claude
.agent
.agents

View File

@@ -2,14 +2,18 @@
"recommendations": [
// Vue 3 的语言支持
"Vue.volar",
// 将 ESLint JavaScript 集成到 VS Code 中。
// 将 eslint 集成到 VS Code 中。
"dbaeumer.vscode-eslint",
// 将 oxlint 集成到 VS Code 中。
"oxc.oxc-vscode",
// Visual Studio Code 的官方 Stylelint 扩展
"stylelint.vscode-stylelint",
// 使用 Prettier 的代码格式化程序
"esbenp.prettier-vscode",
// 使用 oxfmt 的代码格式化程序
"oxc.oxc-vscode",
// 支持 dotenv 文件语法
"mikestead.dotenv",
// YAML 语言支持,供 ESLint 校验 pnpm-workspace.yaml 等文件
"redhat.vscode-yaml",
// 源代码的拼写检查器
"streetsidesoftware.code-spell-checker",
// Tailwind CSS 的官方 VS Code 插件

6
.vscode/launch.json vendored
View File

@@ -4,12 +4,12 @@
"configurations": [
{
"type": "chrome",
"name": "vben admin playground dev",
"name": "vben admin antd dev",
"request": "launch",
"url": "http://localhost:5555",
"url": "http://localhost:5999",
"env": { "NODE_ENV": "development" },
"sourceMaps": true,
"webRoot": "${workspaceFolder}/playground"
"webRoot": "${workspaceFolder}/apps/web-antdv-next"
},
{
"type": "chrome",

64
.vscode/settings.json vendored
View File

@@ -1,5 +1,6 @@
{
"tailwindCSS.experimental.configFile": "internal/tailwind-config/src/index.ts",
"tailwindCSS.experimental.configFile": "internal/tailwind-config/src/theme.css",
"tailwindCSS.lint.suggestCanonicalClasses": "ignore",
// workbench
"workbench.list.smoothScrolling": true,
"workbench.startupEditor": "newUntitledFile",
@@ -31,39 +32,51 @@
"editor.autoClosingOvertype": "always",
"editor.autoClosingQuotes": "beforeWhitespace",
"editor.wordSeparators": "`~!@#%^&*()=+[{]}\\|;:'\",.<>/?",
"editor.quickSuggestions": {
"strings": "on"
},
// lint && format
"oxc.enable": true,
"oxc.typeAware": true,
"oxc.configPath": "oxlint.config.ts",
"oxc.fmt.configPath": "oxfmt.config.ts",
"eslint.useFlatConfig": true,
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit",
"source.fixAll.oxc": "explicit",
"source.fixAll.stylelint": "explicit",
"source.organizeImports": "never"
},
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.defaultFormatter": "oxc.oxc-vscode",
"[html]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[css]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[scss]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[javascript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[typescript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[json]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[markdown]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[jsonc]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[vue]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
"editor.defaultFormatter": "oxc.oxc-vscode"
},
// extensions
"extensions.ignoreRecommendations": true,
@@ -79,6 +92,7 @@
"files.insertFinalNewline": true,
"files.simpleDialog.enable": true,
"files.associations": {
"*.css": "tailwindcss",
"*.ejs": "html",
"*.art": "html",
"**/tsconfig.json": "jsonc",
@@ -118,7 +132,7 @@
// search
"search.searchEditor.singleClickBehaviour": "peekDefinition",
"search.followSymlinks": false,
// 使用搜索功能时,将这些文件夹/文件排除在外
// 使用搜索功能时,将这些文件文件排除在外
"search.exclude": {
"**/node_modules": true,
"**/*.log": true,
@@ -159,7 +173,7 @@
"emmet.triggerExpansionOnTab": false,
"errorLens.enabledDiagnosticLevels": ["warning", "error"],
"errorLens.excludeBySource": ["cSpell", "Grammarly", "eslint"],
"errorLens.excludeBySource": ["cSpell", "Grammarly"],
"stylelint.enable": true,
"stylelint.packageManager": "pnpm",
@@ -167,9 +181,10 @@
"stylelint.customSyntax": "postcss-html",
"stylelint.snippet": ["css", "less", "postcss", "scss", "vue"],
"typescript.inlayHints.enumMemberValues.enabled": true,
"typescript.preferences.preferTypeOnlyAutoImports": true,
"typescript.preferences.includePackageJsonAutoImports": "on",
"js/ts.tsdk.path": "node_modules/typescript/lib",
"js/ts.inlayHints.enumMemberValues.enabled": true,
"js/ts.preferences.preferTypeOnlyAutoImports": true,
"js/ts.preferences.includePackageJsonAutoImports": "on",
"eslint.validate": [
"javascript",
@@ -181,7 +196,8 @@
"markdown",
"json",
"jsonc",
"json5"
"json5",
"yaml"
],
"tailwindCSS.experimental.classRegex": [
@@ -189,13 +205,10 @@
],
"github.copilot.enable": {
"*": true,
"markdown": true,
"plaintext": false,
"yaml": false
"*": false
},
"cssVariables.lookupFiles": ["packages/core/base/design/src/**/*.css"],
"cssVariables.lookupFiles": ["packages/@core/base/design/src/**/*.css"],
"i18n-ally.localesPaths": [
"packages/locales/src/langs",
@@ -220,12 +233,9 @@
"*.env": "$(capture).env.*",
"README.md": "README*,CHANGELOG*,LICENSE,CNAME",
"package.json": "pnpm-lock.yaml,pnpm-workspace.yaml,.gitattributes,.gitignore,.gitpod.yml,.npmrc,.browserslistrc,.node-version,.git*,.tazerc.json",
"eslint.config.mjs": ".eslintignore,.prettierignore,.stylelintignore,.commitlintrc.*,.prettierrc.*,stylelint.config.*,.lintstagedrc.mjs,cspell.json,lefthook.yml",
"tailwind.config.mjs": "postcss.*"
"oxlint.config.ts": ".eslintignore,.stylelintignore,.commitlintrc.*,stylelint.config.*,.lintstagedrc.mjs,cspell.json,lefthook.yml,oxfmt.config.*,eslint.config.*"
},
"commentTranslate.hover.enabled": false,
"commentTranslate.multiLineMerge": true,
"vue.server.hybridMode": true,
"typescript.tsdk": "node_modules/typescript/lib",
"oxc.enable": false
"vue.server.hybridMode": true
}

111
README.md
View File

@@ -9,7 +9,7 @@
## 🐶 新手必读
- nodejs > 20.10.0 && pnpm > 10.14.0 (强制使用pnpm)
- nodejs >= v20.19.0(推荐 v22 / v24 && pnpm >= 10.32.1强制使用 pnpm
- 演示地址【Vue3 + element-plus】<http://dashboard-vue3.yudao.iocoder.cn>
- 演示地址【Vue3 + vben5(ant-design-vue)】:<http://dashboard-vben.yudao.iocoder.cn>
- 演示地址【Vue2 + element-ui】<http://dashboard.yudao.iocoder.cn>
@@ -20,12 +20,12 @@
**芋道**,以开发者为中心,打造中国第一流的快速开发平台,全部开源,个人与企业可 100% 免费使用。
- 采用最新 [vue-vben-admin](https://github.com/vbenjs/vue-vben-admin) v5 实现
- 支持 [Ant Design Vue](https://www.antdv.com/) | [Element Plus](https://element-plus.org/zh-CN/) | [Naive UI](https://www.naiveui.com/) 多种免费开源的中后台模版,具备如下特性:
- 采用最新 [vue-vben-admin](https://github.com/vbenjs/vue-vben-admin) v5.7.0 实现
- 支持 [Ant Design Vue](https://www.antdv.com/) | [Element Plus](https://element-plus.org/zh-CN/) | [Naive UI](https://www.naiveui.com/) | [TDesign](https://tdesign.tencent.com/) 多种免费开源的中后台模版,具备如下特性:
![首页](.image/demo/vben.png)
![首页](.gitee/image/demo/vben.png)
- **最新技术栈**:使用 Vue3、Vite6 等前端前沿技术开发
- **最新技术栈**:使用 Vue3、Vite8 等前端前沿技术开发
- **TypeScript**: 应用程序级 JavaScript 的语言
- **主题**: 提供多套主题色彩,可配置自定义主题
- **国际化**:内置完善的国际化方案
@@ -33,32 +33,34 @@
- **组件**:二次封装了多个常用的组件
- **示例**:内置丰富的示例
## 外包项目请联系【非项目需求请勿扫码,非客服,不解答项目问题】
## [外包项目请联系【非项目需求请勿扫码,非客服,不解答项目问题】](https://www.shuduokeji.com?yudao)
![alt 软件定制开发 数舵科技](.image/wx-xingyu.png)
![alt 软件定制开发 数舵科技](.gitee/image/wx-xingyu.png)
## 技术栈
| 框架 | 说明 | 版本 |
| --- | --- | --- |
| [Vue](https://staging-cn.vuejs.org/) | vue框架 | 3.5.17 |
| [Vite](https://cn.vitejs.dev//) | 开发与构建工具 | 7.1.2 |
| [Vue](https://staging-cn.vuejs.org/) | vue框架 | 3.5.30 |
| [Vite](https://cn.vitejs.dev//) | 开发与构建工具 | 8.0.0 |
| [Ant Design Vue](https://www.antdv.com/) | Ant Design Vue | 4.2.6 |
| [Element Plus](https://element-plus.org/zh-CN/) | Element Plus | 2.10.2 |
| [Naive UI](https://www.naiveui.com/) | Naive UI | 2.42.0 |
| [TypeScript](https://www.typescriptlang.org/docs/) | JavaScript 超集 | 5.8.3 |
| [pinia](https://pinia.vuejs.org/) | Vue 存储库替代 vuex5 | 3.0.3 |
| [vueuse](https://vueuse.org/) | 常用工具集 | 13.4.0 |
| [vue-i18n](https://kazupon.github.io/vue-i18n/zh/introduction.html/) | 国际化 | 11.1.7 |
| [vue-router](https://router.vuejs.org/) | Vue 路由 | 4.5.1 |
| [Tailwind CSS](https://tailwindcss.com/) | 原子 CSS | 3.4.17 |
| [Iconify](https://icon-sets.iconify.design/) | 在线图标库 | 2.2.354 |
| [TinyMCE](https://www.tiny.cloud/) | 富文本编辑器 | 6.1.0 |
| [Echarts](https://echarts.apache.org/) | 图表库 | 5.6.0 |
| [axios](https://axios-http.com/) | http客户端 | 1.10.0 |
| [dayjs](https://day.js.org/) | 日期处理库 | 1.11.13 |
| [Element Plus](https://element-plus.org/zh-CN/) | Element Plus | 2.13.5 |
| [Naive UI](https://www.naiveui.com/) | Naive UI | 2.44.1 |
| [TDesign](https://tdesign.tencent.com/) | TDesign | 1.18.5 |
| [TypeScript](https://www.typescriptlang.org/docs/) | JavaScript 超集 | 5.9.3 |
| [pinia](https://pinia.vuejs.org/) | Vue 存储库替代 vuex5 | 3.0.4 |
| [vueuse](https://vueuse.org/) | 常用工具集 | 14.2.1 |
| [vue-i18n](https://kazupon.github.io/vue-i18n/zh/introduction.html/) | 国际化 | 11.3.0 |
| [vue-router](https://router.vuejs.org/) | Vue 路由 | 5.0.3 |
| [Tailwind CSS](https://tailwindcss.com/) | 原子 CSS | 4.2.1 |
| [Iconify](https://iconify.design/) | 图标组件 | 5.0.0 |
| [Iconify](https://icon-sets.iconify.design/) | 在线图标库 | 2.2.449 |
| [TinyMCE](https://www.tiny.cloud/) | 富文本编辑器 | 7.3.0 |
| [Echarts](https://echarts.apache.org/) | 图表库 | 6.0.0 |
| [axios](https://axios-http.com/) | http客户端 | 1.13.6 |
| [dayjs](https://day.js.org/) | 日期处理库 | 1.11.20 |
| [vee-validate](https://vee-validate.logaretm.com/) | 表单验证 | 4.15.1 |
| [zod](https://zod.dev/) | 数据验证 | 3.25.67 |
| [zod](https://zod.dev/) | 数据验证 | 3.25.76 |
## 🔥 后端架构
@@ -66,11 +68,11 @@
① Spring Boot 单体架构:<https://doc.iocoder.cn>
![架构图](/.image/common/ruoyi-vue-pro-architecture.png)
![架构图](/.gitee/image/common/ruoyi-vue-pro-architecture.png)
② Spring Cloud 微服务架构:<https://cloud.iocoder.cn>
![架构图](/.image/common/yudao-cloud-architecture.png)
![架构图](/.gitee/image/common/yudao-cloud-architecture.png)
## 内置功能
@@ -78,11 +80,11 @@
系统内置多种多种业务功能,可以用于快速你的业务系统:
![功能分层](/.image/common/ruoyi-vue-pro-biz.png)
![功能分层](/.gitee/image/common/ruoyi-vue-pro-biz.png)
- 通用模块(必选):系统功能、基础设施
- 通用模块(可选):工作流程、支付系统、数据报表、会员中心
- 业务系统(按需):ERP 系统、CRM 系统、商城系统、微信公众号、AI 大模型
- 业务系统(按需):Mall 电子商城、OA 办公自动化、ERP 企业资源计划系统、WMS 仓库管理系统、CRM 客户关系管理、CMS 内容管理系统、MES 执行制造系统、AI 大模型平台、IoT 物联网系统、IM 即时通讯系统、Mobile 手机移动端、Report 数据大屏
### 系统功能
@@ -108,17 +110,17 @@
| 🚀 | 应用管理 | 管理 SSO 单点登录的应用,支持多种 OAuth2 授权方式 |
| 🚀 | 地区管理 | 展示省份、城市、区镇等城市信息,支持 IP 对应城市 |
![功能图](/.image/common/system-feature.png)
![功能图](/.gitee/image/common/system-feature.png)
### 工作流程
![功能图](/.image/common/bpm-feature.png)
![功能图](/.gitee/image/common/bpm-feature.png)
基于 Flowable 构建,可支持信创(国产)数据库,满足中国特色流程操作:
| BPMN 设计器 | 钉钉/飞书设计器 |
| --- | --- |
| ![工作流设计器](.image/工作流设计器-bpmn.jpg) | ![工作流设计器](.image/工作流设计器-simple.jpg) |
| ![工作流设计器](.gitee/image/工作流设计器-bpmn.jpg) | ![工作流设计器](.gitee/image/工作流设计器-simple.jpg) |
> 历经头部企业生产验证,工作流引擎须标配仿钉钉/飞书 + BPMN 双设计器!!!
>
@@ -184,7 +186,7 @@
| 🚀 | 日志服务 | 轻量级日志中心,查看远程服务器的日志 |
| 🚀 | 单元测试 | 基于 JUnit + Mockito 实现单元测试,保证功能的正确性、代码的质量等 |
![功能图](/.image/common/infra-feature.png)
![功能图](/.gitee/image/common/infra-feature.png)
### 数据报表
@@ -201,6 +203,7 @@
| 🚀 | 数据统计 | 统计公众号的用户增减、累计用户、消息概况、接口分析等数据 |
| 🚀 | 粉丝管理 | 查看已关注、取关的粉丝列表,可对粉丝进行同步、打标签等操作 |
| 🚀 | 消息管理 | 查看粉丝发送的消息列表,可主动回复粉丝消息 |
| 🚀 | 模版消息 | 配置和发送模版消息,用于向粉丝推送通知类消息 |
| 🚀 | 自动回复 | 自动回复粉丝发送的消息,支持关注回复、消息回复、关键字回复 |
| 🚀 | 标签管理 | 对公众号的标签进行创建、查询、修改、删除等操作 |
| 🚀 | 菜单管理 | 自定义公众号的菜单,也可以从公众号同步菜单 |
@@ -212,26 +215,60 @@
演示地址:<https://doc.iocoder.cn/mall-preview/>
![功能图](/.image/common/mall-feature.png)
![功能图](/.gitee/image/common/mall-feature.png)
![功能图](/.image/common/mall-preview.png)
![功能图](/.gitee/image/common/mall-preview.png)
### 会员中心
| | 功能 | 描述 |
| --- | --- | --- |
| 🚀 | 会员管理 | 会员是 C 端的消费者,该功能用于会员的搜索与管理 |
| 🚀 | 会员标签 | 对会员的标签进行创建、查询、修改、删除等操作 |
| 🚀 | 会员等级 | 对会员的等级、成长值进行管理,可用于订单折扣等会员权益 |
| 🚀 | 会员分组 | 对会员进行分组,用于用户画像、内容推送等运营手段 |
| 🚀 | 积分签到 | 回馈给签到、消费等行为的积分,会员可订单抵现、积分兑换等途径消耗 |
### ERP 系统
演示地址:<https://doc.iocoder.cn/erp-preview/>
![功能图](/.image/common/erp-feature.png)
![功能图](/.gitee/image/common/erp-feature.png)
### WMS 系统
演示地址:<https://doc.iocoder.cn/wms-preview/>
![功能图](/.gitee/image/common/wms-feature.png)
![预览图](/.gitee/image/common/wms-preview.png)
### CRM 系统
演示地址:<https://doc.iocoder.cn/crm-preview/>
![功能图](/.image/common/crm-feature.png)
![功能图](/.gitee/image/common/crm-feature.png)
### MES 系统
演示地址:<https://doc.iocoder.cn/mes-preview/>
![功能图](/.gitee/image/common/mes-feature.png)
![功能图](/.gitee/image/common/mes-preview.png)
### AI 大模型
演示地址:<https://doc.iocoder.cn/ai-preview/>
![功能图](/.image/common/ai-feature.png)
![功能图](/.gitee/image/common/ai-feature.png)
![功能图](/.image/common/ai-preview.gif)
![功能图](/.gitee/image/common/ai-preview.gif)
### IoT 物联网
演示地址:<https://doc.iocoder.cn/iot/build>
![功能图](/.gitee/image/common/iot-feature.png)
![预览图](/.gitee/image/common/iot-preview.png)

View File

@@ -1,3 +0,0 @@
PORT=5320
ACCESS_TOKEN_SECRET=access_token_secret
REFRESH_TOKEN_SECRET=refresh_token_secret

View File

@@ -1,15 +0,0 @@
# @vben/backend-mock
## Description
Vben Admin 数据 mock 服务,没有对接任何的数据库,所有数据都是模拟的,用于前端开发时提供数据支持。线上环境不再提供 mock 集成,可自行部署服务或者对接真实数据,由于 `mock.js` 等工具有一些限制,比如上传文件不行、无法模拟复杂的逻辑等,所以这里使用了真实的后端服务来实现。唯一麻烦的是本地需要同时启动后端服务和前端服务,但是这样可以更好的模拟真实环境。该服务不需要手动启动,已经集成在 vite 插件内,随应用一起启用。
## Running the app
```bash
# development
$ pnpm run start
# production mode
$ pnpm run build
```

View File

@@ -1,16 +0,0 @@
import { eventHandler } from 'h3';
import { verifyAccessToken } from '~/utils/jwt-utils';
import { MOCK_CODES } from '~/utils/mock-data';
import { unAuthorizedResponse, useResponseSuccess } from '~/utils/response';
export default eventHandler((event) => {
const userinfo = verifyAccessToken(event);
if (!userinfo) {
return unAuthorizedResponse(event);
}
const codes =
MOCK_CODES.find((item) => item.username === userinfo.username)?.codes ?? [];
return useResponseSuccess(codes);
});

View File

@@ -1,42 +0,0 @@
import { defineEventHandler, readBody, setResponseStatus } from 'h3';
import {
clearRefreshTokenCookie,
setRefreshTokenCookie,
} from '~/utils/cookie-utils';
import { generateAccessToken, generateRefreshToken } from '~/utils/jwt-utils';
import { MOCK_USERS } from '~/utils/mock-data';
import {
forbiddenResponse,
useResponseError,
useResponseSuccess,
} from '~/utils/response';
export default defineEventHandler(async (event) => {
const { password, username } = await readBody(event);
if (!password || !username) {
setResponseStatus(event, 400);
return useResponseError(
'BadRequestException',
'Username and password are required',
);
}
const findUser = MOCK_USERS.find(
(item) => item.username === username && item.password === password,
);
if (!findUser) {
clearRefreshTokenCookie(event);
return forbiddenResponse(event, 'Username or password is incorrect.');
}
const accessToken = generateAccessToken(findUser);
const refreshToken = generateRefreshToken(findUser);
setRefreshTokenCookie(event, refreshToken);
return useResponseSuccess({
...findUser,
accessToken,
});
});

View File

@@ -1,17 +0,0 @@
import { defineEventHandler } from 'h3';
import {
clearRefreshTokenCookie,
getRefreshTokenFromCookie,
} from '~/utils/cookie-utils';
import { useResponseSuccess } from '~/utils/response';
export default defineEventHandler(async (event) => {
const refreshToken = getRefreshTokenFromCookie(event);
if (!refreshToken) {
return useResponseSuccess('');
}
clearRefreshTokenCookie(event);
return useResponseSuccess('');
});

View File

@@ -1,35 +0,0 @@
import { defineEventHandler } from 'h3';
import {
clearRefreshTokenCookie,
getRefreshTokenFromCookie,
setRefreshTokenCookie,
} from '~/utils/cookie-utils';
import { generateAccessToken, verifyRefreshToken } from '~/utils/jwt-utils';
import { MOCK_USERS } from '~/utils/mock-data';
import { forbiddenResponse } from '~/utils/response';
export default defineEventHandler(async (event) => {
const refreshToken = getRefreshTokenFromCookie(event);
if (!refreshToken) {
return forbiddenResponse(event);
}
clearRefreshTokenCookie(event);
const userinfo = verifyRefreshToken(refreshToken);
if (!userinfo) {
return forbiddenResponse(event);
}
const findUser = MOCK_USERS.find(
(item) => item.username === userinfo.username,
);
if (!findUser) {
return forbiddenResponse(event);
}
const accessToken = generateAccessToken(findUser);
setRefreshTokenCookie(event, refreshToken);
return accessToken;
});

View File

@@ -1,32 +0,0 @@
import { eventHandler, setHeader } from 'h3';
import { verifyAccessToken } from '~/utils/jwt-utils';
import { unAuthorizedResponse } from '~/utils/response';
export default eventHandler(async (event) => {
const userinfo = verifyAccessToken(event);
if (!userinfo) {
return unAuthorizedResponse(event);
}
const data = `
{
"code": 0,
"message": "success",
"data": [
{
"id": 123456789012345678901234567890123456789012345678901234567890,
"name": "John Doe",
"age": 30,
"email": "john-doe@demo.com"
},
{
"id": 987654321098765432109876543210987654321098765432109876543210,
"name": "Jane Smith",
"age": 25,
"email": "jane@demo.com"
}
]
}
`;
setHeader(event, 'Content-Type', 'application/json');
return data;
});

View File

@@ -1,15 +0,0 @@
import { eventHandler } from 'h3';
import { verifyAccessToken } from '~/utils/jwt-utils';
import { MOCK_MENUS } from '~/utils/mock-data';
import { unAuthorizedResponse, useResponseSuccess } from '~/utils/response';
export default eventHandler(async (event) => {
const userinfo = verifyAccessToken(event);
if (!userinfo) {
return unAuthorizedResponse(event);
}
const menus =
MOCK_MENUS.find((item) => item.username === userinfo.username)?.menus ?? [];
return useResponseSuccess(menus);
});

View File

@@ -1,8 +0,0 @@
import { eventHandler, getQuery, setResponseStatus } from 'h3';
import { useResponseError } from '~/utils/response';
export default eventHandler((event) => {
const { status } = getQuery(event);
setResponseStatus(event, Number(status));
return useResponseError(`${status}`);
});

View File

@@ -1,16 +0,0 @@
import { eventHandler } from 'h3';
import { verifyAccessToken } from '~/utils/jwt-utils';
import {
sleep,
unAuthorizedResponse,
useResponseSuccess,
} from '~/utils/response';
export default eventHandler(async (event) => {
const userinfo = verifyAccessToken(event);
if (!userinfo) {
return unAuthorizedResponse(event);
}
await sleep(600);
return useResponseSuccess(null);
});

View File

@@ -1,16 +0,0 @@
import { eventHandler } from 'h3';
import { verifyAccessToken } from '~/utils/jwt-utils';
import {
sleep,
unAuthorizedResponse,
useResponseSuccess,
} from '~/utils/response';
export default eventHandler(async (event) => {
const userinfo = verifyAccessToken(event);
if (!userinfo) {
return unAuthorizedResponse(event);
}
await sleep(1000);
return useResponseSuccess(null);
});

View File

@@ -1,16 +0,0 @@
import { eventHandler } from 'h3';
import { verifyAccessToken } from '~/utils/jwt-utils';
import {
sleep,
unAuthorizedResponse,
useResponseSuccess,
} from '~/utils/response';
export default eventHandler(async (event) => {
const userinfo = verifyAccessToken(event);
if (!userinfo) {
return unAuthorizedResponse(event);
}
await sleep(2000);
return useResponseSuccess(null);
});

View File

@@ -1,62 +0,0 @@
import { faker } from '@faker-js/faker';
import { eventHandler } from 'h3';
import { verifyAccessToken } from '~/utils/jwt-utils';
import { unAuthorizedResponse, useResponseSuccess } from '~/utils/response';
const formatterCN = new Intl.DateTimeFormat('zh-CN', {
timeZone: 'Asia/Shanghai',
year: 'numeric',
month: '2-digit',
day: '2-digit',
hour: '2-digit',
minute: '2-digit',
second: '2-digit',
});
function generateMockDataList(count: number) {
const dataList = [];
for (let i = 0; i < count; i++) {
const dataItem: Record<string, any> = {
id: faker.string.uuid(),
pid: 0,
name: faker.commerce.department(),
status: faker.helpers.arrayElement([0, 1]),
createTime: formatterCN.format(
faker.date.between({ from: '2021-01-01', to: '2022-12-31' }),
),
remark: faker.lorem.sentence(),
};
if (faker.datatype.boolean()) {
dataItem.children = Array.from(
{ length: faker.number.int({ min: 1, max: 5 }) },
() => ({
id: faker.string.uuid(),
pid: dataItem.id,
name: faker.commerce.department(),
status: faker.helpers.arrayElement([0, 1]),
createTime: formatterCN.format(
faker.date.between({ from: '2023-01-01', to: '2023-12-31' }),
),
remark: faker.lorem.sentence(),
}),
);
}
dataList.push(dataItem);
}
return dataList;
}
const mockData = generateMockDataList(10);
export default eventHandler(async (event) => {
const userinfo = verifyAccessToken(event);
if (!userinfo) {
return unAuthorizedResponse(event);
}
const listData = structuredClone(mockData);
return useResponseSuccess(listData);
});

View File

@@ -1,13 +0,0 @@
import { eventHandler } from 'h3';
import { verifyAccessToken } from '~/utils/jwt-utils';
import { MOCK_MENU_LIST } from '~/utils/mock-data';
import { unAuthorizedResponse, useResponseSuccess } from '~/utils/response';
export default eventHandler(async (event) => {
const userinfo = verifyAccessToken(event);
if (!userinfo) {
return unAuthorizedResponse(event);
}
return useResponseSuccess(MOCK_MENU_LIST);
});

View File

@@ -1,29 +0,0 @@
import { eventHandler, getQuery } from 'h3';
import { verifyAccessToken } from '~/utils/jwt-utils';
import { MOCK_MENU_LIST } from '~/utils/mock-data';
import { unAuthorizedResponse, useResponseSuccess } from '~/utils/response';
const namesMap: Record<string, any> = {};
function getNames(menus: any[]) {
menus.forEach((menu) => {
namesMap[menu.name] = String(menu.id);
if (menu.children) {
getNames(menu.children);
}
});
}
getNames(MOCK_MENU_LIST);
export default eventHandler(async (event) => {
const userinfo = verifyAccessToken(event);
if (!userinfo) {
return unAuthorizedResponse(event);
}
const { id, name } = getQuery(event);
return (name as string) in namesMap &&
(!id || namesMap[name as string] !== String(id))
? useResponseSuccess(true)
: useResponseSuccess(false);
});

View File

@@ -1,29 +0,0 @@
import { eventHandler, getQuery } from 'h3';
import { verifyAccessToken } from '~/utils/jwt-utils';
import { MOCK_MENU_LIST } from '~/utils/mock-data';
import { unAuthorizedResponse, useResponseSuccess } from '~/utils/response';
const pathMap: Record<string, any> = { '/': 0 };
function getPaths(menus: any[]) {
menus.forEach((menu) => {
pathMap[menu.path] = String(menu.id);
if (menu.children) {
getPaths(menu.children);
}
});
}
getPaths(MOCK_MENU_LIST);
export default eventHandler(async (event) => {
const userinfo = verifyAccessToken(event);
if (!userinfo) {
return unAuthorizedResponse(event);
}
const { id, path } = getQuery(event);
return (path as string) in pathMap &&
(!id || pathMap[path as string] !== String(id))
? useResponseSuccess(true)
: useResponseSuccess(false);
});

View File

@@ -1,84 +0,0 @@
import { faker } from '@faker-js/faker';
import { eventHandler, getQuery } from 'h3';
import { verifyAccessToken } from '~/utils/jwt-utils';
import { getMenuIds, MOCK_MENU_LIST } from '~/utils/mock-data';
import { unAuthorizedResponse, usePageResponseSuccess } from '~/utils/response';
const formatterCN = new Intl.DateTimeFormat('zh-CN', {
timeZone: 'Asia/Shanghai',
year: 'numeric',
month: '2-digit',
day: '2-digit',
hour: '2-digit',
minute: '2-digit',
second: '2-digit',
});
const menuIds = getMenuIds(MOCK_MENU_LIST);
function generateMockDataList(count: number) {
const dataList = [];
for (let i = 0; i < count; i++) {
const dataItem: Record<string, any> = {
id: faker.string.uuid(),
name: faker.commerce.product(),
status: faker.helpers.arrayElement([0, 1]),
createTime: formatterCN.format(
faker.date.between({ from: '2022-01-01', to: '2025-01-01' }),
),
permissions: faker.helpers.arrayElements(menuIds),
remark: faker.lorem.sentence(),
};
dataList.push(dataItem);
}
return dataList;
}
const mockData = generateMockDataList(100);
export default eventHandler(async (event) => {
const userinfo = verifyAccessToken(event);
if (!userinfo) {
return unAuthorizedResponse(event);
}
const {
page = 1,
pageSize = 20,
name,
id,
remark,
startTime,
endTime,
status,
} = getQuery(event);
let listData = structuredClone(mockData);
if (name) {
listData = listData.filter((item) =>
item.name.toLowerCase().includes(String(name).toLowerCase()),
);
}
if (id) {
listData = listData.filter((item) =>
item.id.toLowerCase().includes(String(id).toLowerCase()),
);
}
if (remark) {
listData = listData.filter((item) =>
item.remark?.toLowerCase()?.includes(String(remark).toLowerCase()),
);
}
if (startTime) {
listData = listData.filter((item) => item.createTime >= startTime);
}
if (endTime) {
listData = listData.filter((item) => item.createTime <= endTime);
}
if (['0', '1'].includes(status as string)) {
listData = listData.filter((item) => item.status === Number(status));
}
return usePageResponseSuccess(page as string, pageSize as string, listData);
});

View File

@@ -1,117 +0,0 @@
import { faker } from '@faker-js/faker';
import { eventHandler, getQuery } from 'h3';
import { verifyAccessToken } from '~/utils/jwt-utils';
import {
sleep,
unAuthorizedResponse,
usePageResponseSuccess,
} from '~/utils/response';
function generateMockDataList(count: number) {
const dataList = [];
for (let i = 0; i < count; i++) {
const dataItem = {
id: faker.string.uuid(),
imageUrl: faker.image.avatar(),
imageUrl2: faker.image.avatar(),
open: faker.datatype.boolean(),
status: faker.helpers.arrayElement(['success', 'error', 'warning']),
productName: faker.commerce.productName(),
price: faker.commerce.price(),
currency: faker.finance.currencyCode(),
quantity: faker.number.int({ min: 1, max: 100 }),
available: faker.datatype.boolean(),
category: faker.commerce.department(),
releaseDate: faker.date.past(),
rating: faker.number.float({ min: 1, max: 5 }),
description: faker.commerce.productDescription(),
weight: faker.number.float({ min: 0.1, max: 10 }),
color: faker.color.human(),
inProduction: faker.datatype.boolean(),
tags: Array.from({ length: 3 }, () => faker.commerce.productAdjective()),
};
dataList.push(dataItem);
}
return dataList;
}
const mockData = generateMockDataList(100);
export default eventHandler(async (event) => {
const userinfo = verifyAccessToken(event);
if (!userinfo) {
return unAuthorizedResponse(event);
}
await sleep(600);
const { page, pageSize, sortBy, sortOrder } = getQuery(event);
// 规范化分页参数,处理 string[]
const pageRaw = Array.isArray(page) ? page[0] : page;
const pageSizeRaw = Array.isArray(pageSize) ? pageSize[0] : pageSize;
const pageNumber = Math.max(
1,
Number.parseInt(String(pageRaw ?? '1'), 10) || 1,
);
const pageSizeNumber = Math.min(
100,
Math.max(1, Number.parseInt(String(pageSizeRaw ?? '10'), 10) || 10),
);
const listData = structuredClone(mockData);
// 规范化 query 入参,兼容 string[]
const sortKeyRaw = Array.isArray(sortBy) ? sortBy[0] : sortBy;
const sortOrderRaw = Array.isArray(sortOrder) ? sortOrder[0] : sortOrder;
// 检查 sortBy 是否是 listData 元素的合法属性键
if (
typeof sortKeyRaw === 'string' &&
listData[0] &&
Object.prototype.hasOwnProperty.call(listData[0], sortKeyRaw)
) {
// 定义数组元素的类型
type ItemType = (typeof listData)[0];
const sortKey = sortKeyRaw as keyof ItemType; // 将 sortBy 断言为合法键
const isDesc = sortOrderRaw === 'desc';
listData.sort((a, b) => {
const aValue = a[sortKey] as unknown;
const bValue = b[sortKey] as unknown;
let result = 0;
if (typeof aValue === 'number' && typeof bValue === 'number') {
result = aValue - bValue;
} else if (aValue instanceof Date && bValue instanceof Date) {
result = aValue.getTime() - bValue.getTime();
} else if (typeof aValue === 'boolean' && typeof bValue === 'boolean') {
if (aValue === bValue) {
result = 0;
} else {
result = aValue ? 1 : -1;
}
} else {
const aStr = String(aValue);
const bStr = String(bValue);
const aNum = Number(aStr);
const bNum = Number(bStr);
result =
Number.isFinite(aNum) && Number.isFinite(bNum)
? aNum - bNum
: aStr.localeCompare(bStr, undefined, {
numeric: true,
sensitivity: 'base',
});
}
return isDesc ? -result : result;
});
}
return usePageResponseSuccess(
String(pageNumber),
String(pageSizeNumber),
listData,
);
});

View File

@@ -1,3 +0,0 @@
import { defineEventHandler } from 'h3';
export default defineEventHandler(() => 'Test get handler');

View File

@@ -1,3 +0,0 @@
import { defineEventHandler } from 'h3';
export default defineEventHandler(() => 'Test post handler');

View File

@@ -1,14 +0,0 @@
import { eventHandler } from 'h3';
import { verifyAccessToken } from '~/utils/jwt-utils';
import { unAuthorizedResponse, useResponseSuccess } from '~/utils/response';
export default eventHandler((event) => {
const userinfo = verifyAccessToken(event);
if (!userinfo) {
return unAuthorizedResponse(event);
}
return useResponseSuccess({
url: 'https://unpkg.com/@vbenjs/static-source@0.1.7/source/logo-v1.webp',
});
// return useResponseError("test")
});

View File

@@ -1,11 +0,0 @@
import { eventHandler } from 'h3';
import { verifyAccessToken } from '~/utils/jwt-utils';
import { unAuthorizedResponse, useResponseSuccess } from '~/utils/response';
export default eventHandler((event) => {
const userinfo = verifyAccessToken(event);
if (!userinfo) {
return unAuthorizedResponse(event);
}
return useResponseSuccess(userinfo);
});

View File

@@ -1,7 +0,0 @@
import type { NitroErrorHandler } from 'nitropack';
const errorHandler: NitroErrorHandler = function (error, event) {
event.node.res.end(`[Error Handler] ${error.stack}`);
};
export default errorHandler;

View File

@@ -1,20 +0,0 @@
import { defineEventHandler } from 'h3';
import { forbiddenResponse, sleep } from '~/utils/response';
export default defineEventHandler(async (event) => {
event.node.res.setHeader(
'Access-Control-Allow-Origin',
event.headers.get('Origin') ?? '*',
);
if (event.method === 'OPTIONS') {
event.node.res.statusCode = 204;
event.node.res.statusMessage = 'No Content.';
return 'OK';
} else if (
['DELETE', 'PATCH', 'POST', 'PUT'].includes(event.method) &&
event.path.startsWith('/api/system/')
) {
await sleep(Math.floor(Math.random() * 2000));
return forbiddenResponse(event, '演示环境,禁止修改');
}
});

View File

@@ -1,20 +0,0 @@
import errorHandler from './error';
process.env.COMPATIBILITY_DATE = new Date().toISOString();
export default defineNitroConfig({
devErrorHandler: errorHandler,
errorHandler: '~/error',
routeRules: {
'/api/**': {
cors: true,
headers: {
'Access-Control-Allow-Credentials': 'true',
'Access-Control-Allow-Headers':
'Accept, Authorization, Content-Length, Content-Type, If-Match, If-Modified-Since, If-None-Match, If-Unmodified-Since, X-CSRF-TOKEN, X-Requested-With',
'Access-Control-Allow-Methods': 'GET,HEAD,PUT,PATCH,POST,DELETE',
'Access-Control-Allow-Origin': '*',
'Access-Control-Expose-Headers': '*',
},
},
},
});

View File

@@ -1,21 +0,0 @@
{
"name": "@vben/backend-mock",
"version": "0.0.1",
"description": "",
"private": true,
"license": "MIT",
"author": "",
"scripts": {
"build": "nitro build",
"start": "nitro dev"
},
"dependencies": {
"@faker-js/faker": "catalog:",
"jsonwebtoken": "catalog:",
"nitropack": "catalog:"
},
"devDependencies": {
"@types/jsonwebtoken": "catalog:",
"h3": "catalog:"
}
}

View File

@@ -1,15 +0,0 @@
import { defineEventHandler } from 'h3';
export default defineEventHandler(() => {
return `
<h1>Hello Vben Admin</h1>
<h2>Mock service is starting</h2>
<ul>
<li><a href="/api/user">/api/user/info</a></li>
<li><a href="/api/menu">/api/menu/all</a></li>
<li><a href="/api/auth/codes">/api/auth/codes</a></li>
<li><a href="/api/auth/login">/api/auth/login</a></li>
<li><a href="/api/upload">/api/upload</a></li>
</ul>
`;
});

View File

@@ -1,4 +0,0 @@
{
"extends": "./tsconfig.json",
"exclude": ["node_modules", "test", "dist", "**/*spec.ts"]
}

View File

@@ -1,3 +0,0 @@
{
"extends": "./.nitro/types/tsconfig.json"
}

View File

@@ -1,28 +0,0 @@
import type { EventHandlerRequest, H3Event } from 'h3';
import { deleteCookie, getCookie, setCookie } from 'h3';
export function clearRefreshTokenCookie(event: H3Event<EventHandlerRequest>) {
deleteCookie(event, 'jwt', {
httpOnly: true,
sameSite: 'none',
secure: true,
});
}
export function setRefreshTokenCookie(
event: H3Event<EventHandlerRequest>,
refreshToken: string,
) {
setCookie(event, 'jwt', refreshToken, {
httpOnly: true,
maxAge: 24 * 60 * 60, // unit: seconds
sameSite: 'none',
secure: true,
});
}
export function getRefreshTokenFromCookie(event: H3Event<EventHandlerRequest>) {
const refreshToken = getCookie(event, 'jwt');
return refreshToken;
}

View File

@@ -1,77 +0,0 @@
import type { EventHandlerRequest, H3Event } from 'h3';
import type { UserInfo } from './mock-data';
import { getHeader } from 'h3';
import jwt from 'jsonwebtoken';
import { MOCK_USERS } from './mock-data';
// TODO: Replace with your own secret key
const ACCESS_TOKEN_SECRET = 'access_token_secret';
const REFRESH_TOKEN_SECRET = 'refresh_token_secret';
export interface UserPayload extends UserInfo {
iat: number;
exp: number;
}
export function generateAccessToken(user: UserInfo) {
return jwt.sign(user, ACCESS_TOKEN_SECRET, { expiresIn: '7d' });
}
export function generateRefreshToken(user: UserInfo) {
return jwt.sign(user, REFRESH_TOKEN_SECRET, {
expiresIn: '30d',
});
}
export function verifyAccessToken(
event: H3Event<EventHandlerRequest>,
): null | Omit<UserInfo, 'password'> {
const authHeader = getHeader(event, 'Authorization');
if (!authHeader?.startsWith('Bearer')) {
return null;
}
const tokenParts = authHeader.split(' ');
if (tokenParts.length !== 2) {
return null;
}
const token = tokenParts[1] as string;
try {
const decoded = jwt.verify(
token,
ACCESS_TOKEN_SECRET,
) as unknown as UserPayload;
const username = decoded.username;
const user = MOCK_USERS.find((item) => item.username === username);
if (!user) {
return null;
}
const { password: _pwd, ...userinfo } = user;
return userinfo;
} catch {
return null;
}
}
export function verifyRefreshToken(
token: string,
): null | Omit<UserInfo, 'password'> {
try {
const decoded = jwt.verify(token, REFRESH_TOKEN_SECRET) as UserPayload;
const username = decoded.username;
const user = MOCK_USERS.find(
(item) => item.username === username,
) as UserInfo;
if (!user) {
return null;
}
const { password: _pwd, ...userinfo } = user;
return userinfo;
} catch {
return null;
}
}

View File

@@ -1,390 +0,0 @@
export interface UserInfo {
id: number;
password: string;
realName: string;
roles: string[];
username: string;
homePath?: string;
}
export const MOCK_USERS: UserInfo[] = [
{
id: 0,
password: '123456',
realName: 'Vben',
roles: ['super'],
username: 'vben',
},
{
id: 1,
password: '123456',
realName: 'Admin',
roles: ['admin'],
username: 'admin',
homePath: '/workspace',
},
{
id: 2,
password: '123456',
realName: 'Jack',
roles: ['user'],
username: 'jack',
homePath: '/analytics',
},
];
export const MOCK_CODES = [
// super
{
codes: ['AC_100100', 'AC_100110', 'AC_100120', 'AC_100010'],
username: 'vben',
},
{
// admin
codes: ['AC_100010', 'AC_100020', 'AC_100030'],
username: 'admin',
},
{
// user
codes: ['AC_1000001', 'AC_1000002'],
username: 'jack',
},
];
const dashboardMenus = [
{
meta: {
order: -1,
title: 'page.dashboard.title',
},
name: 'Dashboard',
path: '/dashboard',
redirect: '/analytics',
children: [
{
name: 'Analytics',
path: '/analytics',
component: '/dashboard/analytics/index',
meta: {
affixTab: true,
title: 'page.dashboard.analytics',
},
},
{
name: 'Workspace',
path: '/workspace',
component: '/dashboard/workspace/index',
meta: {
title: 'page.dashboard.workspace',
},
},
],
},
];
const createDemosMenus = (role: 'admin' | 'super' | 'user') => {
const roleWithMenus = {
admin: {
component: '/demos/access/admin-visible',
meta: {
icon: 'mdi:button-cursor',
title: 'demos.access.adminVisible',
},
name: 'AccessAdminVisibleDemo',
path: '/demos/access/admin-visible',
},
super: {
component: '/demos/access/super-visible',
meta: {
icon: 'mdi:button-cursor',
title: 'demos.access.superVisible',
},
name: 'AccessSuperVisibleDemo',
path: '/demos/access/super-visible',
},
user: {
component: '/demos/access/user-visible',
meta: {
icon: 'mdi:button-cursor',
title: 'demos.access.userVisible',
},
name: 'AccessUserVisibleDemo',
path: '/demos/access/user-visible',
},
};
return [
{
meta: {
icon: 'ic:baseline-view-in-ar',
keepAlive: true,
order: 1000,
title: 'demos.title',
},
name: 'Demos',
path: '/demos',
redirect: '/demos/access',
children: [
{
name: 'AccessDemos',
path: '/demosaccess',
meta: {
icon: 'mdi:cloud-key-outline',
title: 'demos.access.backendPermissions',
},
redirect: '/demos/access/page-control',
children: [
{
name: 'AccessPageControlDemo',
path: '/demos/access/page-control',
component: '/demos/access/index',
meta: {
icon: 'mdi:page-previous-outline',
title: 'demos.access.pageAccess',
},
},
{
name: 'AccessButtonControlDemo',
path: '/demos/access/button-control',
component: '/demos/access/button-control',
meta: {
icon: 'mdi:button-cursor',
title: 'demos.access.buttonControl',
},
},
{
name: 'AccessMenuVisible403Demo',
path: '/demos/access/menu-visible-403',
component: '/demos/access/menu-visible-403',
meta: {
authority: ['no-body'],
icon: 'mdi:button-cursor',
menuVisibleWithForbidden: true,
title: 'demos.access.menuVisible403',
},
},
roleWithMenus[role],
],
},
],
},
];
};
export const MOCK_MENUS = [
{
menus: [...dashboardMenus, ...createDemosMenus('super')],
username: 'vben',
},
{
menus: [...dashboardMenus, ...createDemosMenus('admin')],
username: 'admin',
},
{
menus: [...dashboardMenus, ...createDemosMenus('user')],
username: 'jack',
},
];
export const MOCK_MENU_LIST = [
{
id: 1,
name: 'Workspace',
status: 1,
type: 'menu',
icon: 'mdi:dashboard',
path: '/workspace',
component: '/dashboard/workspace/index',
meta: {
icon: 'carbon:workspace',
title: 'page.dashboard.workspace',
affixTab: true,
order: 0,
},
},
{
id: 2,
meta: {
icon: 'carbon:settings',
order: 9997,
title: 'system.title',
badge: 'new',
badgeType: 'normal',
badgeVariants: 'primary',
},
status: 1,
type: 'catalog',
name: 'System',
path: '/system',
children: [
{
id: 201,
pid: 2,
path: '/system/menu',
name: 'SystemMenu',
authCode: 'System:Menu:List',
status: 1,
type: 'menu',
meta: {
icon: 'carbon:menu',
title: 'system.menu.title',
},
component: '/system/menu/list',
children: [
{
id: 20_101,
pid: 201,
name: 'SystemMenuCreate',
status: 1,
type: 'button',
authCode: 'System:Menu:Create',
meta: { title: 'common.create' },
},
{
id: 20_102,
pid: 201,
name: 'SystemMenuEdit',
status: 1,
type: 'button',
authCode: 'System:Menu:Edit',
meta: { title: 'common.edit' },
},
{
id: 20_103,
pid: 201,
name: 'SystemMenuDelete',
status: 1,
type: 'button',
authCode: 'System:Menu:Delete',
meta: { title: 'common.delete' },
},
],
},
{
id: 202,
pid: 2,
path: '/system/dept',
name: 'SystemDept',
status: 1,
type: 'menu',
authCode: 'System:Dept:List',
meta: {
icon: 'carbon:container-services',
title: 'system.dept.title',
},
component: '/system/dept/list',
children: [
{
id: 20_401,
pid: 201,
name: 'SystemDeptCreate',
status: 1,
type: 'button',
authCode: 'System:Dept:Create',
meta: { title: 'common.create' },
},
{
id: 20_402,
pid: 201,
name: 'SystemDeptEdit',
status: 1,
type: 'button',
authCode: 'System:Dept:Edit',
meta: { title: 'common.edit' },
},
{
id: 20_403,
pid: 201,
name: 'SystemDeptDelete',
status: 1,
type: 'button',
authCode: 'System:Dept:Delete',
meta: { title: 'common.delete' },
},
],
},
],
},
{
id: 9,
meta: {
badgeType: 'dot',
order: 9998,
title: 'demos.vben.title',
icon: 'carbon:data-center',
},
name: 'Project',
path: '/vben-admin',
type: 'catalog',
status: 1,
children: [
{
id: 901,
pid: 9,
name: 'VbenDocument',
path: '/vben-admin/document',
component: 'IFrameView',
type: 'embedded',
status: 1,
meta: {
icon: 'carbon:book',
iframeSrc: 'https://doc.vben.pro',
title: 'demos.vben.document',
},
},
{
id: 902,
pid: 9,
name: 'VbenGithub',
path: '/vben-admin/github',
component: 'IFrameView',
type: 'link',
status: 1,
meta: {
icon: 'carbon:logo-github',
link: 'https://github.com/vbenjs/vue-vben-admin',
title: 'Github',
},
},
{
id: 903,
pid: 9,
name: 'VbenAntdv',
path: '/vben-admin/antdv',
component: 'IFrameView',
type: 'link',
status: 0,
meta: {
icon: 'carbon:hexagon-vertical-solid',
badgeType: 'dot',
link: 'https://ant.vben.pro',
title: 'demos.vben.antdv',
},
},
],
},
{
id: 10,
component: '_core/about/index',
type: 'menu',
status: 1,
meta: {
icon: 'lucide:copyright',
order: 9999,
title: 'demos.vben.about',
},
name: 'About',
path: '/about',
},
];
export function getMenuIds(menus: any[]) {
const ids: number[] = [];
menus.forEach((item) => {
ids.push(item.id);
if (item.children && item.children.length > 0) {
ids.push(...getMenuIds(item.children));
}
});
return ids;
}

View File

@@ -1,70 +0,0 @@
import type { EventHandlerRequest, H3Event } from 'h3';
import { setResponseStatus } from 'h3';
export function useResponseSuccess<T = any>(data: T) {
return {
code: 0,
data,
error: null,
message: 'ok',
};
}
export function usePageResponseSuccess<T = any>(
page: number | string,
pageSize: number | string,
list: T[],
{ message = 'ok' } = {},
) {
const pageData = pagination(
Number.parseInt(`${page}`),
Number.parseInt(`${pageSize}`),
list,
);
return {
...useResponseSuccess({
items: pageData,
total: list.length,
}),
message,
};
}
export function useResponseError(message: string, error: any = null) {
return {
code: -1,
data: null,
error,
message,
};
}
export function forbiddenResponse(
event: H3Event<EventHandlerRequest>,
message = 'Forbidden Exception',
) {
setResponseStatus(event, 403);
return useResponseError(message, message);
}
export function unAuthorizedResponse(event: H3Event<EventHandlerRequest>) {
setResponseStatus(event, 401);
return useResponseError('Unauthorized Exception', 'Unauthorized Exception');
}
export function sleep(ms: number) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
export function pagination<T = any>(
pageNo: number,
pageSize: number,
array: T[],
): T[] {
const offset = (pageNo - 1) * Number(pageSize);
return offset + Number(pageSize) >= array.length
? array.slice(offset)
: array.slice(offset, offset + Number(pageSize));
}

View File

@@ -33,3 +33,6 @@ VITE_APP_API_ENCRYPT_REQUEST_KEY = 52549111389893486934626385991395
VITE_APP_API_ENCRYPT_RESPONSE_KEY = 96103715984234343991809655248883
# VITE_APP_API_ENCRYPT_REQUEST_KEY = MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCls2rIpnGdYnLFgz1XU13GbNQ5DloyPpvW00FPGjqn5Z6JpK+kDtVlnkhwR87iRrE5Vf2WNqRX6vzbLSgveIQY8e8oqGCb829myjf1MuI+ZzN4ghf/7tEYhZJGPI9AbfxFqBUzm+kR3/HByAI22GLT96WM26QiMK8n3tIP/yiLswIDAQAB
# VITE_APP_API_ENCRYPT_RESPONSE_KEY = MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAOH8IfIFxL/MR9XIg1UDv5z1fGXQI93E8wrU4iPFovL/sEt9uSgSkjyidC2O7N+m7EKtoN6b1u7cEwXSkwf3kfK0jdWLSQaNpX5YshqXCBzbDfugDaxuyYrNA4/tIMs7mzZAk0APuRXB35Dmupou7Yw7TFW/7QhQmGfzeEKULQvnAgMBAAECgYAw8LqlQGyQoPv5p3gRxEMOCfgL0JzD3XBJKztiRd35RDh40Nx1ejgjW4dPioFwGiVWd2W8cAGHLzALdcQT2KDJh+T/tsd4SPmI6uSBBK6Ff2DkO+kFFcuYvfclQQKqxma5CaZOSqhgenacmgTMFeg2eKlY3symV6JlFNu/IKU42QJBAOhxAK/Eq3e61aYQV2JSguhMR3b8NXJJRroRs/QHEanksJtl+M+2qhkC9nQVXBmBkndnkU/l2tYcHfSBlAyFySMCQQD445tgm/J2b6qMQmuUGQAYDN8FIkHjeKmha+l/fv0igWm8NDlBAem91lNDIPBUzHL1X1+pcts5bjmq99YdOnhtAkAg2J8dN3B3idpZDiQbC8fd5bGPmdI/pSUudAP27uzLEjr2qrE/QPPGdwm2m7IZFJtK7kK1hKio6u48t/bg0iL7AkEAuUUs94h+v702Fnym+jJ2CHEkXvz2US8UDs52nWrZYiM1o1y4tfSHm8H8bv8JCAa9GHyriEawfBraILOmllFdLQJAQSRZy4wmlaG48MhVXodB85X+VZ9krGXZ2TLhz7kz9iuToy53l9jTkESt6L5BfBDCVdIwcXLYgK+8KFdHN5W7HQ==
# 百度地图
VITE_BAIDU_MAP_KEY=Y2aJXiswwPxy6mwFs1z9c7U5gwX9WfUN

View File

@@ -21,3 +21,6 @@ VITE_INJECT_APP_LOADING=true
# 打包后是否生成dist.zip
VITE_ARCHIVER=true
# 验证码的开关
VITE_APP_CAPTCHA_ENABLE=true

View File

@@ -12,16 +12,15 @@
content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=0"
/>
<!-- 由 vite 注入 VITE_APP_TITLE 变量,在 .env 文件内配置 -->
<title><%= VITE_APP_TITLE %></title>
<title>%VITE_APP_TITLE%</title>
<link rel="icon" href="/favicon.ico" />
<script>
var HM_ID = '<%= VITE_APP_BAIDU_CODE %>'
var HM_ID = '<%= VITE_APP_BAIDU_CODE %>';
if (HM_ID) {
var _hmt = _hmt || [];
(function () {
var hm = document.createElement('script');
hm.src =
'https://hm.baidu.com/hm.js?' + HM_ID;
hm.src = 'https://hm.baidu.com/hm.js?' + HM_ID;
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(hm, s);
})();

View File

@@ -1,6 +1,6 @@
{
"name": "@vben/web-antd",
"version": "5.5.9",
"version": "5.7.0",
"homepage": "https://vben.pro",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
"repository": {
@@ -43,9 +43,11 @@
"@vben/styles": "workspace:*",
"@vben/types": "workspace:*",
"@vben/utils": "workspace:*",
"@videojs-player/vue": "catalog:",
"@vueuse/core": "catalog:",
"@vueuse/integrations": "catalog:",
"ant-design-vue": "catalog:",
"benz-amr-recorder": "catalog:",
"bpmn-js": "catalog:",
"bpmn-js-properties-panel": "catalog:",
"bpmn-js-token-simulation": "catalog:",
@@ -58,9 +60,12 @@
"pinia": "catalog:",
"steady-xml": "catalog:",
"tinymce": "catalog:",
"video.js": "catalog:",
"vue": "catalog:",
"vue-dompurify-html": "catalog:",
"vue-router": "catalog:",
"vue3-signature": "catalog:"
"vue3-print-nb": "catalog:",
"vue3-signature": "catalog:",
"vuedraggable": "catalog:"
}
}

View File

@@ -1 +0,0 @@
export { default } from '@vben/tailwind-config/postcss';

View File

@@ -2537,12 +2537,12 @@ interface EditorSelection {
normalize: () => Range;
selectorChanged: (selector: string, callback: (active: boolean, args: {
node: Node;
selector: String;
selector: string;
parents: Node[];
}) => void) => EditorSelection;
selectorChangedWithUnbind: (selector: string, callback: (active: boolean, args: {
node: Node;
selector: String;
selector: string;
parents: Node[];
}) => void) => {
unbind: () => void;
@@ -3217,9 +3217,9 @@ interface Tools {
<T, R>(arr: ArrayLike<T> | null | undefined, cb: ArrayCallback<T, R>): R[];
<T, R>(obj: Record<string, T> | null | undefined, cb: ObjCallback<T, R>): R[];
};
extend: (obj: Object, ext: Object, ...objs: Object[]) => any;
extend: (obj: object, ext: object, ...objs: object[]) => any;
walk: <T extends Record<string, any>>(obj: T, f: WalkCallback<T>, n?: keyof T, scope?: any) => void;
resolve: (path: string, o?: Object) => any;
resolve: (path: string, o?: object) => any;
explode: (s: string | string[], d?: string | RegExp) => string[];
_addCacheSuffix: (url: string) => string;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 495 KiB

View File

@@ -3,28 +3,87 @@
* 可用于 vben-form、vben-modal、vben-drawer 等组件使用,
*/
import type { Component } from 'vue';
/* eslint-disable vue/one-component-per-file */
import type { BaseFormComponentType } from '@vben/common-ui';
import type {
AutoCompleteProps,
ButtonProps,
CascaderProps,
CheckboxGroupProps,
CheckboxProps,
DatePickerProps,
DividerProps,
InputNumberProps,
InputProps,
MentionsProps,
RadioGroupProps,
RadioProps,
RateProps,
SelectProps,
SpaceProps,
SwitchProps,
TextAreaProps,
TimePickerProps,
TreeSelectProps,
UploadChangeParam,
UploadFile,
UploadProps,
} from 'ant-design-vue';
import type { RangePickerProps } from 'ant-design-vue/es/date-picker';
import type { Component, Ref } from 'vue';
import type {
ApiComponentSharedProps,
BaseFormComponentType,
IconPickerProps,
} from '@vben/common-ui';
import type { Sortable } from '@vben/hooks';
import type { Recordable } from '@vben/types';
import { defineAsyncComponent, defineComponent, h, ref } from 'vue';
import {
computed,
defineAsyncComponent,
defineComponent,
h,
nextTick,
onMounted,
onUnmounted,
ref,
render,
unref,
watch,
} from 'vue';
import { ApiComponent, globalShareState, IconPicker } from '@vben/common-ui';
import {
ApiComponent,
globalShareState,
IconPicker,
VCropper,
} from '@vben/common-ui';
import { useSortable } from '@vben/hooks';
import { IconifyIcon } from '@vben/icons';
import { $t } from '@vben/locales';
import { isEmpty } from '@vben/utils';
import { notification } from 'ant-design-vue';
import { message, Modal, notification } from 'ant-design-vue';
import { Tinymce as RichTextarea } from '#/components/tinymce';
import { FileUpload, ImageUpload } from '#/components/upload';
type AdapterUploadProps = UploadProps & {
aspectRatio?: string;
crop?: boolean;
draggable?: boolean;
handleChange?: (event: UploadChangeParam) => void;
maxSize?: number;
onDragSort?: (oldIndex: number, newIndex: number) => void;
onHandleChange?: (event: UploadChangeParam) => void;
};
const AutoComplete = defineAsyncComponent(
() => import('ant-design-vue/es/auto-complete'),
);
const Button = defineAsyncComponent(() => import('ant-design-vue/es/button'));
const Cascader = defineAsyncComponent(
() => import('ant-design-vue/es/cascader'),
);
const Checkbox = defineAsyncComponent(
() => import('ant-design-vue/es/checkbox'),
);
@@ -68,7 +127,14 @@ const TimeRangePicker = defineAsyncComponent(() =>
const TreeSelect = defineAsyncComponent(
() => import('ant-design-vue/es/tree-select'),
);
const Cascader = defineAsyncComponent(
() => import('ant-design-vue/es/cascader'),
);
const Upload = defineAsyncComponent(() => import('ant-design-vue/es/upload'));
const Image = defineAsyncComponent(() => import('ant-design-vue/es/image'));
const PreviewGroup = defineAsyncComponent(() =>
import('ant-design-vue/es/image').then((res) => res.ImagePreviewGroup),
);
const withDefaultPlaceholder = <T extends Component>(
component: T,
@@ -104,12 +170,443 @@ const withDefaultPlaceholder = <T extends Component>(
});
};
const IMAGE_EXTENSIONS = new Set([
'bmp',
'gif',
'jpeg',
'jpg',
'png',
'svg',
'webp',
]);
/**
* 检查是否为图片文件
*/
function isImageFile(file: UploadFile): boolean {
if (file.url) {
try {
const pathname = new URL(file.url, 'http://localhost').pathname;
const ext = pathname.split('.').pop()?.toLowerCase();
return ext ? IMAGE_EXTENSIONS.has(ext) : false;
} catch {
const ext = file.url?.split('.').pop()?.toLowerCase();
return ext ? IMAGE_EXTENSIONS.has(ext) : false;
}
}
if (!file.type) {
const ext = file.name?.split('.').pop()?.toLowerCase();
return ext ? IMAGE_EXTENSIONS.has(ext) : false;
}
return file.type.startsWith('image/');
}
/**
* 创建默认的上传按钮插槽
*/
function createDefaultUploadSlots(listType: string, placeholder: string) {
if (listType === 'picture-card') {
return { default: () => placeholder };
}
return {
default: () =>
h(
Button,
{
icon: h(IconifyIcon, {
icon: 'ant-design:upload-outlined',
class: 'mb-1 size-4',
}),
},
() => placeholder,
),
};
}
/**
* 获取文件的 Base64
*/
function getBase64(file: File): Promise<string> {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.readAsDataURL(file);
reader.addEventListener('load', () => resolve(reader.result as string));
reader.addEventListener('error', reject);
});
}
/**
* 预览图片
*/
async function previewImage(
file: UploadFile,
visible: Ref<boolean>,
fileList: Ref<UploadProps['fileList']>,
) {
// 非图片文件直接打开链接
if (!isImageFile(file)) {
const url = file.url || file.preview;
if (url) {
window.open(url, '_blank');
} else {
message.error($t('ui.formRules.previewWarning'));
}
return;
}
const [ImageComponent, PreviewGroupComponent] = await Promise.all([
Image,
PreviewGroup,
]);
// 过滤图片文件并生成预览
const imageFiles = (unref(fileList) || []).filter((f) => isImageFile(f));
for (const imgFile of imageFiles) {
if (!imgFile.url && !imgFile.preview && imgFile.originFileObj) {
imgFile.preview = await getBase64(imgFile.originFileObj);
}
}
const container = document.createElement('div');
document.body.append(container);
let isUnmounted = false;
const currentIndex = imageFiles.findIndex((f) => f.uid === file.uid);
const PreviewWrapper = {
setup() {
return () => {
if (isUnmounted) return null;
return h(
PreviewGroupComponent,
{
class: 'hidden',
preview: {
visible: visible.value,
current: currentIndex,
onVisibleChange: (value: boolean) => {
visible.value = value;
if (!value) {
setTimeout(() => {
if (!isUnmounted && container) {
isUnmounted = true;
render(null, container);
container.remove();
}
}, 300);
}
},
},
},
() =>
imageFiles.map((imgFile) =>
h(ImageComponent, {
key: imgFile.uid,
src: imgFile.url || imgFile.preview,
}),
),
);
};
},
};
render(h(PreviewWrapper), container);
}
/**
* 图片裁剪操作
*/
function cropImage(file: File, aspectRatio: string | undefined) {
return new Promise<Blob | string | undefined>((resolve, reject) => {
const container = document.createElement('div');
document.body.append(container);
let isUnmounted = false;
let objectUrl: null | string = null;
const open = ref<boolean>(true);
const cropperRef = ref<InstanceType<typeof VCropper> | null>(null);
const closeModal = () => {
open.value = false;
setTimeout(() => {
if (!isUnmounted && container) {
if (objectUrl) {
URL.revokeObjectURL(objectUrl);
}
isUnmounted = true;
render(null, container);
container.remove();
}
}, 300);
};
const CropperWrapper = {
setup() {
return () => {
if (isUnmounted) return null;
if (!objectUrl) {
objectUrl = URL.createObjectURL(file);
}
return h(
Modal,
{
open: open.value,
title: h('div', {}, [
$t('ui.crop.title'),
h(
'span',
{
class: `${aspectRatio ? '' : 'hidden'} ml-2 text-sm text-gray-400 font-normal`,
},
$t('ui.crop.titleTip', [aspectRatio]),
),
]),
centered: true,
width: 548,
keyboard: false,
maskClosable: false,
closable: false,
cancelText: $t('common.cancel'),
okText: $t('ui.crop.confirm'),
destroyOnClose: true,
onOk: async () => {
const cropper = cropperRef.value;
if (!cropper) {
reject(new Error('Cropper not found'));
closeModal();
return;
}
try {
const dataUrl = await cropper.getCropImage();
if (dataUrl) {
resolve(dataUrl);
} else {
reject(new Error($t('ui.crop.errorTip')));
}
} catch {
reject(new Error($t('ui.crop.errorTip')));
} finally {
closeModal();
}
},
onCancel() {
resolve('');
closeModal();
},
},
() =>
h(VCropper, {
ref: (ref: any) => (cropperRef.value = ref),
img: objectUrl as string,
aspectRatio,
}),
);
};
},
};
render(h(CropperWrapper), container);
});
}
/**
* 带预览功能的上传组件
*/
const withPreviewUpload = () => {
return defineComponent({
name: Upload.name,
emits: ['update:modelValue'],
setup(
props: any,
{ attrs, slots, emit }: { attrs: any; emit: any; slots: any },
) {
const previewVisible = ref<boolean>(false);
const placeholder = attrs?.placeholder || $t('ui.placeholder.upload');
const listType = attrs?.listType || attrs?.['list-type'] || 'text';
const fileList = ref<UploadProps['fileList']>(
attrs?.fileList || attrs?.['file-list'] || [],
);
const maxSize = computed(() => attrs?.maxSize ?? attrs?.['max-size']);
const aspectRatio = computed(
() => attrs?.aspectRatio ?? attrs?.['aspect-ratio'],
);
const handleBeforeUpload = async (
file: UploadFile,
originFileList: Array<File>,
) => {
// 文件大小限制
if (maxSize.value && (file.size || 0) / 1024 / 1024 > maxSize.value) {
message.error($t('ui.formRules.sizeLimit', [maxSize.value]));
file.status = 'removed';
return false;
}
// 图片裁剪处理
if (
attrs.crop &&
!attrs.multiple &&
originFileList[0] &&
isImageFile(file)
) {
file.status = 'removed';
const blob = await cropImage(originFileList[0], aspectRatio.value);
if (!blob) {
throw new Error($t('ui.crop.errorTip'));
}
return blob;
}
return attrs.beforeUpload?.(file) ?? true;
};
const handleChange = (event: UploadChangeParam) => {
try {
attrs.handleChange?.(event);
attrs.onHandleChange?.(event);
} catch (error) {
console.error(error);
}
fileList.value = event.fileList.filter(
(file) => file.status !== 'removed',
);
emit(
'update:modelValue',
event.fileList?.length ? fileList.value : undefined,
);
};
const handlePreview = async (file: UploadFile) => {
previewVisible.value = true;
await previewImage(file, previewVisible, fileList);
};
const renderUploadButton = () => {
if (attrs.disabled) return null;
return isEmpty(slots)
? createDefaultUploadSlots(listType, placeholder)
: slots;
};
// 拖拽排序
const draggable = computed(
() => (attrs.draggable ?? false) && !attrs.disabled,
);
const uploadId = `upload-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;
const sortableInstance = ref<null | Sortable>(null);
const styleId = `upload-drag-style-${uploadId}`;
function injectDragStyle() {
if (!document.querySelector(`[id="${styleId}"]`)) {
const style = document.createElement('style');
style.id = styleId;
style.textContent = `
[data-upload-id="${uploadId}"] .ant-upload-list-item { cursor: move; }
[data-upload-id="${uploadId}"] .ant-upload-list-item:hover { box-shadow: 0 2px 8px rgba(0,0,0,0.15); }
`;
document.head.append(style);
}
}
function removeDragStyle() {
document.querySelector(`[id="${styleId}"]`)?.remove();
}
async function initSortable(retryCount = 0) {
if (!draggable.value) return;
injectDragStyle();
await nextTick();
await new Promise((resolve) => setTimeout(resolve, 100));
const container = document.querySelector(
`[data-upload-id="${uploadId}"] .ant-upload-list`,
) as HTMLElement;
if (!container) {
if (retryCount < 5) {
setTimeout(() => initSortable(retryCount + 1), 200);
}
return;
}
const { initializeSortable } = useSortable(container, {
animation: 300,
delay: 400,
delayOnTouchOnly: true,
filter:
'.ant-upload-select, .ant-upload-list-item-error, .ant-upload-list-item-uploading',
onEnd: (evt) => {
const { oldIndex, newIndex } = evt;
if (
oldIndex === undefined ||
newIndex === undefined ||
oldIndex === newIndex
) {
return;
}
const list = [...(fileList.value || [])];
const [movedItem] = list.splice(oldIndex, 1);
if (movedItem) {
list.splice(newIndex, 0, movedItem);
fileList.value = list;
}
attrs.onDragSort?.(oldIndex, newIndex);
emit('update:modelValue', fileList.value);
},
});
sortableInstance.value = await initializeSortable();
}
// 监听表单值变化
watch(
() => attrs.modelValue,
(res) => {
fileList.value = res;
},
);
onMounted(initSortable);
onUnmounted(() => {
sortableInstance.value?.destroy();
removeDragStyle();
});
return () =>
h(
'div',
{ 'data-upload-id': uploadId, class: 'w-full' },
h(
Upload,
{
...props,
...attrs,
fileList: fileList.value,
beforeUpload: handleBeforeUpload,
onChange: handleChange,
onPreview: handlePreview,
},
renderUploadButton() as any,
),
);
},
});
};
// 这里需要自行根据业务组件库进行适配,需要用到的组件都需要在这里类型说明
export type ComponentType =
| 'ApiCascader'
| 'ApiSelect'
| 'ApiTreeSelect'
| 'AutoComplete'
| 'Cascader'
| 'Checkbox'
| 'CheckboxGroup'
| 'DatePicker'
@@ -138,55 +635,68 @@ export type ComponentType =
| 'Upload'
| BaseFormComponentType;
/**
* 与 {@link ComponentType} 中注册的组件名一一对应,便于 Schema 上 `component` + `componentProps` 联动提示
*/
export interface ComponentPropsMap {
ApiCascader: ApiComponentSharedProps & CascaderProps;
ApiSelect: ApiComponentSharedProps & SelectProps;
ApiTreeSelect: ApiComponentSharedProps & TreeSelectProps;
AutoComplete: AutoCompleteProps;
Cascader: CascaderProps;
Checkbox: CheckboxProps;
CheckboxGroup: CheckboxGroupProps;
DatePicker: DatePickerProps;
DefaultButton: ButtonProps;
Divider: DividerProps;
IconPicker: IconPickerProps;
Input: InputProps;
InputNumber: InputNumberProps;
InputPassword: InputProps;
Mentions: MentionsProps;
PrimaryButton: ButtonProps;
Radio: RadioProps;
RadioGroup: RadioGroupProps;
RangePicker: RangePickerProps;
Rate: RateProps;
Select: SelectProps;
Space: SpaceProps;
Switch: SwitchProps;
Textarea: TextAreaProps;
TimePicker: TimePickerProps;
TreeSelect: TreeSelectProps;
Upload: AdapterUploadProps;
}
async function initComponentAdapter() {
const components: Partial<Record<ComponentType, Component>> = {
// 如果你的组件体积比较大,可以使用异步加载
// Button: () =>
// import('xxx').then((res) => res.Button),
ApiCascader: withDefaultPlaceholder(
{
...ApiComponent,
name: 'ApiCascader',
},
'select',
{
component: Cascader,
fieldNames: { label: 'label', value: 'value', children: 'children' },
loadingSlot: 'suffixIcon',
modelPropName: 'value',
optionsPropName: 'treeData',
visibleEvent: 'onVisibleChange',
},
),
ApiSelect: withDefaultPlaceholder(
{
...ApiComponent,
name: 'ApiSelect',
},
'select',
{
component: Select,
loadingSlot: 'suffixIcon',
visibleEvent: 'onDropdownVisibleChange',
modelPropName: 'value',
},
),
ApiTreeSelect: withDefaultPlaceholder(
{
...ApiComponent,
name: 'ApiTreeSelect',
},
'select',
{
component: TreeSelect,
fieldNames: { label: 'label', value: 'value', children: 'children' },
loadingSlot: 'suffixIcon',
modelPropName: 'value',
optionsPropName: 'treeData',
visibleEvent: 'onVisibleChange',
},
),
ApiCascader: withDefaultPlaceholder(ApiComponent, 'select', {
component: Cascader,
fieldNames: { label: 'label', value: 'value', children: 'children' },
loadingSlot: 'suffixIcon',
modelPropName: 'value',
visibleEvent: 'onVisibleChange',
}),
ApiSelect: withDefaultPlaceholder(ApiComponent, 'select', {
component: Select,
loadingSlot: 'suffixIcon',
modelPropName: 'value',
visibleEvent: 'onVisibleChange',
}),
ApiTreeSelect: withDefaultPlaceholder(ApiComponent, 'select', {
component: TreeSelect,
fieldNames: { label: 'label', value: 'value', children: 'children' },
loadingSlot: 'suffixIcon',
modelPropName: 'value',
optionsPropName: 'treeData',
visibleEvent: 'onVisibleChange',
}),
AutoComplete,
Cascader,
Checkbox,
CheckboxGroup,
DatePicker,
@@ -221,6 +731,7 @@ async function initComponentAdapter() {
TimeRangePicker,
TreeSelect: withDefaultPlaceholder(TreeSelect, 'select'),
Upload,
PreviewUpload: withPreviewUpload(),
FileUpload,
ImageUpload,
};

View File

@@ -1,9 +1,9 @@
import type {
VbenFormProps as FormProps,
VbenFormSchema as FormSchema,
VbenFormProps,
} from '@vben/common-ui';
import type { ComponentType } from './component';
import type { ComponentPropsMap, ComponentType } from './component';
import { setupVbenForm, useVbenForm as useForm, z } from '@vben/common-ui';
import { $t } from '@vben/locales';
@@ -61,9 +61,10 @@ async function initSetupVbenForm() {
});
}
const useVbenForm = useForm<ComponentType>;
const useVbenForm = useForm<ComponentType, ComponentPropsMap>;
export { initSetupVbenForm, useVbenForm, z };
export type VbenFormSchema = FormSchema<ComponentType>;
export type { VbenFormProps };
export type VbenFormApi = ReturnType<typeof useVbenForm>[1]; // add by 芋艿:用于 data.ts 表单 schema 内调用 setFieldValue
export type VbenFormSchema = FormSchema<ComponentType, ComponentPropsMap>;
export type VbenFormProps = FormProps<ComponentType, ComponentPropsMap>;

View File

@@ -1,6 +1,8 @@
import type { VxeTableGridOptions } from '@vben/plugins/vxe-table';
import type { Recordable } from '@vben/types';
import type { ComponentPropsMap, ComponentType } from './component';
import { h } from 'vue';
import { IconifyIcon } from '@vben/icons';
@@ -10,12 +12,13 @@ import {
AsyncVxeTable,
createRequiredValidation,
setupVbenVxeTable,
useVbenVxeGrid,
useVbenVxeGrid as useGrid,
} from '@vben/plugins/vxe-table';
import {
erpCountInputFormatter,
erpNumberFormatter,
fenToYuan,
formatFileSize,
formatPast2,
isFunction,
isString,
@@ -83,9 +86,10 @@ setupVbenVxeTable({
// 表格配置项可以用 cellRender: { name: 'CellImage' },
vxeUI.renderer.add('CellImage', {
renderTableDefault(_renderOpts, params) {
renderTableDefault(renderOpts, params) {
const { props } = renderOpts;
const { column, row } = params;
return h(Image, { src: row[column.field] });
return h(Image, { src: row[column.field], ...props });
},
});
@@ -197,7 +201,7 @@ setupVbenVxeTable({
vxeUI.renderer.add('CellOperation', {
renderTableDefault({ attrs, options, props }, { column, row }) {
const defaultProps = { size: 'small', type: 'link', ...props };
let align = 'end';
let align: string;
switch (column.align) {
case 'center': {
align = 'center';
@@ -354,22 +358,20 @@ setupVbenVxeTable({
// add by 星语:文件大小格式化
vxeUI.formats.add('formatFileSize', {
tableCellFormatMethod({ cellValue }, digits = 2) {
if (!cellValue) return '0 B';
const unitArr = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
const index = Math.floor(Math.log(cellValue) / Math.log(1024));
const size = cellValue / 1024 ** index;
const formattedSize = size.toFixed(digits);
return `${formattedSize} ${unitArr[index]}`;
return formatFileSize(cellValue, digits);
},
});
},
useVbenForm,
});
export { createRequiredValidation, useVbenVxeGrid };
export { createRequiredValidation };
export const [VxeTable, VxeColumn] = [AsyncVxeTable, AsyncVxeColumn];
export * from '#/components/table-action';
export const useVbenVxeGrid = <T extends Record<string, any>>(
...rest: Parameters<typeof useGrid<T, ComponentType, ComponentPropsMap>>
) => useGrid<T, ComponentType, ComponentPropsMap>(...rest);
export type * from '@vben/plugins/vxe-table';

View File

@@ -15,7 +15,6 @@ export namespace AiChatConversationApi {
maxTokens: number; // 单条回复的最大 Token 数量
maxContexts: number; // 上下文的最大 Message 数量
createTime?: Date; // 创建时间
// 额外字段
systemMessage?: string; // 角色设定
modelName?: string; // 模型名字
roleAvatar?: string; // 角色头像
@@ -24,52 +23,52 @@ export namespace AiChatConversationApi {
}
}
// 获得【我的】聊天对话
/** 获得【我的】聊天对话 */
export function getChatConversationMy(id: number) {
return requestClient.get<AiChatConversationApi.ChatConversation>(
`/ai/chat/conversation/get-my?id=${id}`,
);
}
// 新增【我的】聊天对话
/** 新增【我的】聊天对话 */
export function createChatConversationMy(
data: AiChatConversationApi.ChatConversation,
) {
return requestClient.post('/ai/chat/conversation/create-my', data);
}
// 更新【我的】聊天对话
/** 更新【我的】聊天对话 */
export function updateChatConversationMy(
data: AiChatConversationApi.ChatConversation,
) {
return requestClient.put(`/ai/chat/conversation/update-my`, data);
}
// 删除【我的】聊天对话
/** 删除【我的】聊天对话 */
export function deleteChatConversationMy(id: number) {
return requestClient.delete(`/ai/chat/conversation/delete-my?id=${id}`);
}
// 删除【我的】所有对话,置顶除外
/** 删除【我的】所有对话,置顶除外 */
export function deleteChatConversationMyByUnpinned() {
return requestClient.delete(`/ai/chat/conversation/delete-by-unpinned`);
}
// 获得【我的】聊天对话列表
/** 获得【我的】聊天对话列表 */
export function getChatConversationMyList() {
return requestClient.get<AiChatConversationApi.ChatConversation[]>(
`/ai/chat/conversation/my-list`,
);
}
// 获得【我的】聊天对话列表
/** 获得【我的】聊天对话列表 */
export function getChatConversationPage(params: any) {
return requestClient.get<
PageResult<AiChatConversationApi.ChatConversation[]>
>(`/ai/chat/conversation/page`, { params });
}
// 管理员删除消息
/** 管理员删除消息 */
export function deleteChatConversationByAdmin(id: number) {
return requestClient.delete(`/ai/chat/conversation/delete-by-admin?id=${id}`);
}

View File

@@ -8,6 +8,7 @@ import { requestClient } from '#/api/request';
const { apiURL } = useAppConfig(import.meta.env, import.meta.env.PROD);
const accessStore = useAccessStore();
export namespace AiChatMessageApi {
export interface ChatMessage {
id: number; // 编号
@@ -18,6 +19,7 @@ export namespace AiChatMessageApi {
model: number; // 模型标志
modelId: number; // 模型编号
content: string; // 聊天内容
reasoningContent?: string; // 推理内容(深度思考)
tokens: number; // 消耗 Token 数量
segmentIds?: number[]; // 段落编号
segments?: {
@@ -26,13 +28,25 @@ export namespace AiChatMessageApi {
documentName: string; // 文档名称
id: number; // 段落编号
}[];
webSearchPages?: WebSearchPage[]; // 联网搜索结果
attachmentUrls?: string[]; // 附件 URL 数组
createTime: Date; // 创建时间
roleAvatar: string; // 角色头像
userAvatar: string; // 用户头像
}
/** 联网搜索页面接口 */
export interface WebSearchPage {
name: string; // 网站名称
icon: string; // 网站图标 URL
title: string; // 页面标题
url: string; // 页面 URL
snippet: string; // 简短描述
summary: string; // 内容摘要
}
}
// 消息列表
/** 消息列表 */
export function getChatMessageListByConversationId(
conversationId: null | number,
) {
@@ -41,15 +55,17 @@ export function getChatMessageListByConversationId(
);
}
// 发送 Stream 消息
/** 发送 Stream 消息 */
export function sendChatMessageStream(
conversationId: number,
content: string,
ctrl: any,
enableContext: boolean,
enableWebSearch: boolean,
onMessage: any,
onError: any,
onClose: any,
attachmentUrls?: string[],
) {
const token = accessStore.accessToken;
return fetchEventSource(`${apiURL}/ai/chat/message/send-stream`, {
@@ -63,6 +79,8 @@ export function sendChatMessageStream(
conversationId,
content,
useContext: enableContext,
useSearch: enableWebSearch,
attachmentUrls: attachmentUrls || [],
}),
onmessage: onMessage,
onerror: onError,
@@ -71,25 +89,27 @@ export function sendChatMessageStream(
});
}
// 删除消息
/** 删除消息 */
export function deleteChatMessage(id: number) {
return requestClient.delete(`/ai/chat/message/delete?id=${id}`);
}
// 删除指定对话的消息
/** 删除指定对话的消息 */
export function deleteByConversationId(conversationId: number) {
return requestClient.delete(
`/ai/chat/message/delete-by-conversation-id?conversationId=${conversationId}`,
);
}
// 获得消息分页
/** 获得消息分页 */
export function getChatMessagePage(params: any) {
return requestClient.get<PageResult<AiChatMessageApi.ChatMessage>>(
'/ai/chat/message/page',
{ params },
);
}
// 管理员删除消息
/** 管理员删除消息 */
export function deleteChatMessageByAdmin(id: number) {
return requestClient.delete(`/ai/chat/message/delete-by-admin?id=${id}`);
}

View File

@@ -3,13 +3,7 @@ import type { PageParam, PageResult } from '@vben/request';
import { requestClient } from '#/api/request';
export namespace AiImageApi {
export interface ImageMidjourneyButtons {
customId: string; // MJ::JOB::upsample::1::85a4b4c1-8835-46c5-a15c-aea34fad1862 动作标识
emoji: string; // 图标 emoji
label: string; // Make Variations 文本
style: number; // 样式: 2Primary、3Green
}
// AI 绘图
/** 绘图 */
export interface Image {
id: number; // 编号
userId: number;
@@ -29,7 +23,14 @@ export namespace AiImageApi {
finishTime: Date; // 完成时间
}
export interface ImageDrawReq {
export interface ImageMidjourneyButtons {
customId: string; // MJ::JOB::upsample::1::85a4b4c1-8835-46c5-a15c-aea34fad1862 动作标识
emoji: string; // 图标 emoji
label: string; // Make Variations 文本
style: number; // 样式: 2Primary、3Green
}
export interface ImageDrawReqVO {
prompt: string; // 提示词
modelId: number; // 模型
style: string; // 图像生成的风格
@@ -38,7 +39,7 @@ export namespace AiImageApi {
options: object; // 绘制参数Map<String, String>
}
export interface ImageMidjourneyImagineReq {
export interface ImageMidjourneyImagineReqVO {
prompt: string; // 提示词
modelId: number; // 模型
base64Array?: string[]; // size不能为空
@@ -53,58 +54,62 @@ export namespace AiImageApi {
}
}
// 获取【我的】绘图分页
/** 获取【我的】绘图分页 */
export function getImagePageMy(params: PageParam) {
return requestClient.get<PageResult<AiImageApi.Image>>('/ai/image/my-page', {
params,
});
}
// 获取【我的】绘图记录
/** 获取【我的】绘图记录 */
export function getImageMy(id: number) {
return requestClient.get<AiImageApi.Image>(`/ai/image/get-my?id=${id}`);
}
// 获取【我的】绘图记录列表
/** 获取【我的】绘图记录列表 */
export function getImageListMyByIds(ids: number[]) {
return requestClient.get<AiImageApi.Image[]>(`/ai/image/my-list-by-ids`, {
params: { ids: ids.join(',') },
});
}
// 生成图片
export function drawImage(data: AiImageApi.ImageDrawReq) {
/** 生成图片 */
export function drawImage(data: AiImageApi.ImageDrawReqVO) {
return requestClient.post(`/ai/image/draw`, data);
}
// 删除【我的】绘画记录
/** 删除【我的】绘画记录 */
export function deleteImageMy(id: number) {
return requestClient.delete(`/ai/image/delete-my?id=${id}`);
}
// ================ midjourney 专属 ================
// 【Midjourney】生成图片
export function midjourneyImagine(data: AiImageApi.ImageMidjourneyImagineReq) {
/** ================ midjourney 专属 ================ */
/** 【Midjourney】生成图片 */
export function midjourneyImagine(
data: AiImageApi.ImageMidjourneyImagineReqVO,
) {
return requestClient.post(`/ai/image/midjourney/imagine`, data);
}
// 【Midjourney】Action 操作(二次生成图片)
/** 【Midjourney】Action 操作(二次生成图片) */
export function midjourneyAction(data: AiImageApi.ImageMidjourneyAction) {
return requestClient.post(`/ai/image/midjourney/action`, data);
}
// ================ 绘图管理 ================
// 查询绘画分页
/** ================ 绘图管理 ================ */
/** 查询绘画分页 */
export function getImagePage(params: any) {
return requestClient.get<AiImageApi.Image[]>(`/ai/image/page`, { params });
}
// 更新绘画发布状态
/** 更新绘画发布状态 */
export function updateImage(data: any) {
return requestClient.put(`/ai/image/update`, data);
}
// 删除绘画
/** 删除绘画 */
export function deleteImage(id: number) {
return requestClient.delete(`/ai/image/delete?id=${id}`);
}

View File

@@ -15,36 +15,39 @@ export namespace AiKnowledgeDocumentApi {
}
}
// 查询知识库文档分页
/** 查询知识库文档分页 */
export function getKnowledgeDocumentPage(params: PageParam) {
return requestClient.get<
PageResult<AiKnowledgeDocumentApi.KnowledgeDocument>
>('/ai/knowledge/document/page', { params });
}
// 查询知识库文档详情
/** 查询知识库文档详情 */
export function getKnowledgeDocument(id: number) {
return requestClient.get(`/ai/knowledge/document/get?id=${id}`);
}
// 新增知识库文档(单个)
/** 新增知识库文档(单个) */
export function createKnowledge(data: any) {
return requestClient.post('/ai/knowledge/document/create', data);
}
// 新增知识库文档(多个)
/** 新增知识库文档(多个) */
export function createKnowledgeDocumentList(data: any) {
return requestClient.post('/ai/knowledge/document/create-list', data);
}
// 修改知识库文档
/** 修改知识库文档 */
export function updateKnowledgeDocument(data: any) {
return requestClient.put('/ai/knowledge/document/update', data);
}
// 修改知识库文档状态
/** 修改知识库文档状态 */
export function updateKnowledgeDocumentStatus(data: any) {
return requestClient.put('/ai/knowledge/document/update-status', data);
}
// 删除知识库文档
/** 删除知识库文档 */
export function deleteKnowledgeDocument(id: number) {
return requestClient.delete(`/ai/knowledge/document/delete?id=${id}`);
}

View File

@@ -13,7 +13,7 @@ export namespace AiKnowledgeKnowledgeApi {
}
}
// 查询知识库分页
/** 查询知识库分页 */
export function getKnowledgePage(params: PageParam) {
return requestClient.get<PageResult<AiKnowledgeKnowledgeApi.Knowledge>>(
'/ai/knowledge/page',
@@ -21,28 +21,29 @@ export function getKnowledgePage(params: PageParam) {
);
}
// 查询知识库详情
/** 查询知识库详情 */
export function getKnowledge(id: number) {
return requestClient.get<AiKnowledgeKnowledgeApi.Knowledge>(
`/ai/knowledge/get?id=${id}`,
);
}
// 新增知识库
/** 新增知识库 */
export function createKnowledge(data: AiKnowledgeKnowledgeApi.Knowledge) {
return requestClient.post('/ai/knowledge/create', data);
}
// 修改知识库
/** 修改知识库 */
export function updateKnowledge(data: AiKnowledgeKnowledgeApi.Knowledge) {
return requestClient.put('/ai/knowledge/update', data);
}
// 删除知识库
/** 删除知识库 */
export function deleteKnowledge(id: number) {
return requestClient.delete(`/ai/knowledge/delete?id=${id}`);
}
// 获取知识库简单列表
/** 获取知识库简单列表 */
export function getSimpleKnowledgeList() {
return requestClient.get<AiKnowledgeKnowledgeApi.Knowledge[]>(
'/ai/knowledge/simple-list',

View File

@@ -3,7 +3,6 @@ import type { PageParam, PageResult } from '@vben/request';
import { requestClient } from '#/api/request';
export namespace AiKnowledgeSegmentApi {
// AI 知识库分段
export interface KnowledgeSegment {
id: number; // 编号
documentId: number; // 文档编号
@@ -18,7 +17,7 @@ export namespace AiKnowledgeSegmentApi {
}
}
// 查询知识库分段分页
/** 查询知识库分段分页 */
export function getKnowledgeSegmentPage(params: PageParam) {
return requestClient.get<PageResult<AiKnowledgeSegmentApi.KnowledgeSegment>>(
'/ai/knowledge/segment/page',
@@ -26,50 +25,55 @@ export function getKnowledgeSegmentPage(params: PageParam) {
);
}
// 查询知识库分段详情
/** 查询知识库分段详情 */
export function getKnowledgeSegment(id: number) {
return requestClient.get<AiKnowledgeSegmentApi.KnowledgeSegment>(
`/ai/knowledge/segment/get?id=${id}`,
);
}
// 新增知识库分段
/** 新增知识库分段 */
export function createKnowledgeSegment(
data: AiKnowledgeSegmentApi.KnowledgeSegment,
) {
return requestClient.post('/ai/knowledge/segment/create', data);
}
// 修改知识库分段
/** 修改知识库分段 */
export function updateKnowledgeSegment(
data: AiKnowledgeSegmentApi.KnowledgeSegment,
) {
return requestClient.put('/ai/knowledge/segment/update', data);
}
// 修改知识库分段状态
export function updateKnowledgeSegmentStatus(data: any) {
return requestClient.put('/ai/knowledge/segment/update-status', data);
/** 修改知识库分段状态 */
export function updateKnowledgeSegmentStatus(id: number, status: number) {
return requestClient.put('/ai/knowledge/segment/update-status', {
id,
status,
});
}
// 删除知识库分段
/** 删除知识库分段 */
export function deleteKnowledgeSegment(id: number) {
return requestClient.delete(`/ai/knowledge/segment/delete?id=${id}`);
}
// 切片内容
/** 切片内容 */
export function splitContent(url: string, segmentMaxTokens: number) {
return requestClient.get('/ai/knowledge/segment/split', {
params: { url, segmentMaxTokens },
});
}
// 获取文档处理列表
/** 获取文档处理列表 */
export function getKnowledgeSegmentProcessList(documentIds: number[]) {
return requestClient.get('/ai/knowledge/segment/get-process-list', {
params: { documentIds: documentIds.join(',') },
});
}
// 搜索知识库分段
/** 搜索知识库分段 */
export function searchKnowledgeSegment(params: any) {
return requestClient.get('/ai/knowledge/segment/search', {
params,

View File

@@ -6,8 +6,8 @@ import { requestClient } from '#/api/request';
const { apiURL } = useAppConfig(import.meta.env, import.meta.env.PROD);
const accessStore = useAccessStore();
export namespace AiMindmapApi {
// AI 思维导图
export interface MindMap {
id: number; // 编号
userId: number; // 用户编号
@@ -18,12 +18,12 @@ export namespace AiMindmapApi {
errorMessage: string; // 错误信息
}
// AI 思维导图生成
export interface AiMindMapGenerateReq {
export interface AiMindMapGenerateReqVO {
prompt: string;
}
}
/** 生成思维导图 Stream */
export function generateMindMap({
data,
onClose,
@@ -32,7 +32,7 @@ export function generateMindMap({
ctrl,
}: {
ctrl: AbortController;
data: AiMindmapApi.AiMindMapGenerateReq;
data: AiMindmapApi.AiMindMapGenerateReqVO;
onClose?: (...args: any[]) => void;
onError?: (...args: any[]) => void;
onMessage?: (res: any) => void;
@@ -53,12 +53,12 @@ export function generateMindMap({
});
}
// 查询思维导图分页
/** 查询思维导图分页 */
export function getMindMapPage(params: any) {
return requestClient.get(`/ai/mind-map/page`, { params });
}
// 删除思维导图
/** 删除思维导图 */
export function deleteMindMap(id: number) {
return requestClient.delete(`/ai/mind-map/delete?id=${id}`);
}

View File

@@ -13,7 +13,7 @@ export namespace AiModelApiKeyApi {
}
}
// 查询 API 密钥分页
/** 查询 API 密钥分页 */
export function getApiKeyPage(params: PageParam) {
return requestClient.get<PageResult<AiModelApiKeyApi.ApiKey>>(
'/ai/api-key/page',
@@ -21,28 +21,29 @@ export function getApiKeyPage(params: PageParam) {
);
}
// 获得 API 密钥列表
/** 获得 API 密钥列表 */
export function getApiKeySimpleList() {
return requestClient.get<AiModelApiKeyApi.ApiKey[]>(
'/ai/api-key/simple-list',
);
}
// 查询 API 密钥详情
/** 查询 API 密钥详情 */
export function getApiKey(id: number) {
return requestClient.get<AiModelApiKeyApi.ApiKey>(`/ai/api-key/get?id=${id}`);
}
// 新增 API 密钥
/** 新增 API 密钥 */
export function createApiKey(data: AiModelApiKeyApi.ApiKey) {
return requestClient.post('/ai/api-key/create', data);
}
// 修改 API 密钥
/** 修改 API 密钥 */
export function updateApiKey(data: AiModelApiKeyApi.ApiKey) {
return requestClient.put('/ai/api-key/update', data);
}
// 删除 API 密钥
/** 删除 API 密钥 */
export function deleteApiKey(id: number) {
return requestClient.delete(`/ai/api-key/delete?id=${id}`);
}

View File

@@ -20,7 +20,7 @@ export namespace AiModelChatRoleApi {
}
// AI 聊天角色 分页请求
export interface ChatRolePageReq {
export interface ChatRolePageReqVO {
name?: string; // 角色名称
category?: string; // 角色类别
publicStatus: boolean; // 是否公开
@@ -29,7 +29,7 @@ export namespace AiModelChatRoleApi {
}
}
// 查询聊天角色分页
/** 查询聊天角色分页 */
export function getChatRolePage(params: PageParam) {
return requestClient.get<PageResult<AiModelChatRoleApi.ChatRole>>(
'/ai/chat-role/page',
@@ -37,49 +37,49 @@ export function getChatRolePage(params: PageParam) {
);
}
// 查询聊天角色详情
/** 查询聊天角色详情 */
export function getChatRole(id: number) {
return requestClient.get<AiModelChatRoleApi.ChatRole>(
`/ai/chat-role/get?id=${id}`,
);
}
// 新增聊天角色
/** 新增聊天角色 */
export function createChatRole(data: AiModelChatRoleApi.ChatRole) {
return requestClient.post('/ai/chat-role/create', data);
}
// 修改聊天角色
/** 修改聊天角色 */
export function updateChatRole(data: AiModelChatRoleApi.ChatRole) {
return requestClient.put('/ai/chat-role/update', data);
}
// 删除聊天角色
/** 删除聊天角色 */
export function deleteChatRole(id: number) {
return requestClient.delete(`/ai/chat-role/delete?id=${id}`);
}
// ======= chat 聊天
// 获取 my role
export function getMyPage(params: AiModelChatRoleApi.ChatRolePageReq) {
/** 获取 my role */
export function getMyPage(params: AiModelChatRoleApi.ChatRolePageReqVO) {
return requestClient.get('/ai/chat-role/my-page', { params });
}
// 获取角色分类
/** 获取角色分类 */
export function getCategoryList() {
return requestClient.get('/ai/chat-role/category-list');
}
// 创建角色
/** 创建角色 */
export function createMy(data: AiModelChatRoleApi.ChatRole) {
return requestClient.post('/ai/chat-role/create-my', data);
}
// 更新角色
/** 更新角色 */
export function updateMy(data: AiModelChatRoleApi.ChatRole) {
return requestClient.put('/ai/chat-role/update', data);
}
// 删除角色 my
/** 删除角色 my */
export function deleteMy(id: number) {
return requestClient.delete(`/ai/chat-role/delete-my?id=${id}`);
}

View File

@@ -18,7 +18,7 @@ export namespace AiModelModelApi {
}
}
// 查询模型分页
/** 查询模型分页 */
export function getModelPage(params: PageParam) {
return requestClient.get<PageResult<AiModelModelApi.Model>>(
'/ai/model/page',
@@ -26,7 +26,7 @@ export function getModelPage(params: PageParam) {
);
}
// 获得模型列表
/** 获得模型列表 */
export function getModelSimpleList(type?: number) {
return requestClient.get<AiModelModelApi.Model[]>('/ai/model/simple-list', {
params: {
@@ -35,21 +35,22 @@ export function getModelSimpleList(type?: number) {
});
}
// 查询模型详情
/** 查询模型详情 */
export function getModel(id: number) {
return requestClient.get<AiModelModelApi.Model>(`/ai/model/get?id=${id}`);
}
// 新增模型
/** 新增模型 */
export function createModel(data: AiModelModelApi.Model) {
return requestClient.post('/ai/model/create', data);
}
// 修改模型
/** 修改模型 */
export function updateModel(data: AiModelModelApi.Model) {
return requestClient.put('/ai/model/update', data);
}
// 删除模型
/** 删除模型 */
export function deleteModel(id: number) {
return requestClient.delete(`/ai/model/delete?id=${id}`);
}

View File

@@ -11,33 +11,34 @@ export namespace AiModelToolApi {
}
}
// 查询工具分页
/** 查询工具分页 */
export function getToolPage(params: PageParam) {
return requestClient.get<PageResult<AiModelToolApi.Tool>>('/ai/tool/page', {
params,
});
}
// 查询工具详情
/** 查询工具详情 */
export function getTool(id: number) {
return requestClient.get<AiModelToolApi.Tool>(`/ai/tool/get?id=${id}`);
}
// 新增工具
/** 新增工具 */
export function createTool(data: AiModelToolApi.Tool) {
return requestClient.post('/ai/tool/create', data);
}
// 修改工具
/** 修改工具 */
export function updateTool(data: AiModelToolApi.Tool) {
return requestClient.put('/ai/tool/update', data);
}
// 删除工具
/** 删除工具 */
export function deleteTool(id: number) {
return requestClient.delete(`/ai/tool/delete?id=${id}`);
}
// 获取工具简单列表
/** 获取工具简单列表 */
export function getToolSimpleList() {
return requestClient.get<AiModelToolApi.Tool[]>('/ai/tool/simple-list');
}

View File

@@ -26,19 +26,19 @@ export namespace AiMusicApi {
}
}
// 查询音乐分页
/** 查询音乐分页 */
export function getMusicPage(params: PageParam) {
return requestClient.get<PageResult<AiMusicApi.Music>>(`/ai/music/page`, {
params,
});
}
// 更新音乐
/** 更新音乐 */
export function updateMusic(data: any) {
return requestClient.put('/ai/music/update', data);
}
// 删除音乐
/** 删除音乐 */
export function deleteMusic(id: number) {
return requestClient.delete(`/ai/music/delete?id=${id}`);
}

View File

@@ -2,28 +2,48 @@ import type { PageParam, PageResult } from '@vben/request';
import { requestClient } from '#/api/request';
export function getWorkflowPage(params: PageParam) {
return requestClient.get<PageResult<any>>('/ai/workflow/page', {
params,
});
export namespace AiWorkflowApi {
/** 工作流 */
export interface Workflow {
id?: number; // 编号
name: string; // 工作流名称
code: string; // 工作流标识
graph: string; // 工作流模型 JSON 数据
remark?: string; // 备注
status: number; // 状态
createTime?: Date; // 创建时间
}
}
export const getWorkflow = (id: number | string) => {
return requestClient.get(`/ai/workflow/get?id=${id}`);
};
/** 查询工作流管理列表 */
export function getWorkflowPage(params: PageParam) {
return requestClient.get<PageResult<AiWorkflowApi.Workflow>>(
'/ai/workflow/page',
{ params },
);
}
export const createWorkflow = (data: any) => {
/** 查询工作流详情 */
export function getWorkflow(id: number) {
return requestClient.get<AiWorkflowApi.Workflow>(`/ai/workflow/get?id=${id}`);
}
/** 新增工作流 */
export function createWorkflow(data: AiWorkflowApi.Workflow) {
return requestClient.post('/ai/workflow/create', data);
};
}
export const updateWorkflow = (data: any) => {
/** 修改工作流 */
export function updateWorkflow(data: AiWorkflowApi.Workflow) {
return requestClient.put('/ai/workflow/update', data);
};
}
export const deleteWorkflow = (id: number | string) => {
/** 删除工作流 */
export function deleteWorkflow(id: number) {
return requestClient.delete(`/ai/workflow/delete?id=${id}`);
};
}
export const testWorkflow = (data: any) => {
/** 测试工作流 */
export function testWorkflow(data: any) {
return requestClient.post('/ai/workflow/test', data);
};
}

Some files were not shown because too many files have changed in this diff Show More