904 Commits
Author SHA1 Message Date
YunaiV 4b2785bd41 【版本发布】2.3.0 发布~ 2024-10-07 15:14:21 +08:00
YunaiV 7b1b9084c7 【依赖升级】element-plus from 2.8.0 to 2.8.4
【打包优化】移除 --max_old_space_size=8192 内存配置,不会出现内存溢出
2024-10-07 15:12:52 +08:00
YunaiV 4105636741 【功能修复】工作流:暂时切回老的审批详情,预计 V2.4.0 会切到新的审批界面 2024-10-06 16:54:45 +08:00
芋道源码 d136128650 !559 余额权限修改
Merge pull request !559 from 骄傲的熊/master
2024-10-06 08:52:17 +00:00
骄傲的熊 1d9532ca5a 余额权限修改 2024-10-04 23:18:02 +08:00
芋道源码 b94235adf3 !452 BPM 的草稿 PR(非 BPM 开发成员,不用关注)
Merge pull request !452 from 芋道源码/feature/bpm
2024-10-04 09:46:09 +00:00
YunaiV 619491b4d0 【代码评审】工作流:新审批界面 2024-10-04 16:16:33 +08:00
YunaiV dd4c4817e4 【功能修复】工作流:新建的流程,部分数据的 NPE 问题 2024-10-04 11:47:45 +08:00
YunaiV 926eb70fe5 【功能优化】工作流:流程模型的定义,增加谁可以发起、谁可以管理的字段 CRUD 2024-10-03 20:05:18 +08:00
YunaiV dc0e947334 【功能优化】工作流:模型定义的列表,进行一定的简化,为后续把流程分类、流程定义融合在一个 vue 界面做准备。这样,和钉钉的界面更容易统一! 2024-10-03 17:13:13 +08:00
YunaiV 28f768f3b2 Merge branch 'master' of https://gitee.com/yudaocode/yudao-ui-admin-vue3 into feature/bpm 2024-10-03 11:28:45 +08:00
jason 145eabbf42 【工作流】- 新审批界面按钮权限 2024-10-02 16:23:55 +08:00
YunaiV 2d245d1fe7 【功能优化】积木报表:使用 refreshToken 认证,解决无法刷新访问令牌的问题 2024-10-02 14:15:13 +08:00
YunaiV 86c33e1f68 【功能优化】WebSocket 使用 refreshToken 认证,解决无法刷新访问令牌的问题 2024-10-02 14:11:02 +08:00
jason 2d16816f3f 【工作流】- 对接新获取表单字段权限接口 2024-10-02 09:49:07 +08:00
jason 27d24cd02d 【工作流】- 流程实例新界面修改 2024-10-01 23:35:11 +08:00
YunaiV 40512afb49 【错别字修改】优惠卷 => 优惠劵 2024-10-01 20:42:59 +08:00
芋道源码 53d1cb8fff !542 IOT client 同步
Merge pull request !542 from 芋道源码/feature/iot
2024-10-01 11:29:46 +00:00
YunaiV 6d641177b8 【代码评审】IoT:产品、设备、物模型的代码 2024-10-01 19:29:24 +08:00
芋道源码 9394a7cd60 !556 处理vite-plugin-top-level-await打包报错
Merge pull request !556 from OlyLis/master
2024-10-01 11:08:32 +00:00
YunaiV f84c10cdea 【功能修改】商城:限时折扣,多乘以了 100 优惠金额 2024-10-01 10:45:56 +08:00
YunaiV 79c3ba090f 【功能修改】工作流:流程实例列表,使用 processDefinitionKey 检索 2024-09-30 19:45:41 +08:00
安浩浩 4b2800f723 【修改功能】 IOT 物模型新增功能优化 2024-09-30 12:19:55 +08:00
YunaiV 887936ccf0 Merge branch 'dev' of https://gitee.com/yudaocode/yudao-ui-admin-vue3 2024-09-30 09:05:53 +08:00
安浩浩 81a710c02d 【新增功能】 IOT 产品管理,物模型新增 2024-09-29 21:58:03 +08:00
cherishsince 4a2eddbd3b 【增加】dataset 创建数据清洗页面 (30%) 2024-09-29 18:04:06 +08:00
cherishsince 3f6e3c4168 【增加】dataset 创建选择数据源页面 2024-09-29 17:09:51 +08:00
cherishsince f36b01575f 【增加】dataset 列表页面 2024-09-29 17:09:37 +08:00
芋道源码 95bb19dc0b !558 【功能完善】商城: 完善积分商城装修
Merge pull request !558 from puhui999/dev-crm
2024-09-28 12:42:20 +00:00
芋道源码 fd907ddf3b !557 【功能优化】商城相关优化
Merge pull request !557 from 卢越/master
2024-09-28 12:33:48 +00:00
puhui999 d9f4336717 【功能完善】商城: 完善积分商城装修 2024-09-28 14:02:13 +08:00
puhui999 a132f07d04 【功能完善】商城: 完善积分商城装修 2024-09-28 13:40:51 +08:00
puhui999 1f8e419f78 【代码优化】商城: 完善积分商城 2024-09-28 10:00:46 +08:00
卢越 4204c31442 【功能修复】商城:底部导航栏装修,切换页面后图标变成默认的问题 2024-09-27 19:41:44 +08:00
卢越 cf4ed96f28 【功能优化】商城:客服页面优化 2024-09-26 16:04:52 +08:00
卢越 db98b376ff 【功能优化】商城:客服页面优化 2024-09-26 15:37:12 +08:00
YunaiV 7a6c69495d Merge branch 'master' of https://gitee.com/yudaocode/yudao-ui-admin-vue3 into dev 2024-09-25 09:26:41 +08:00
YunaiV 989e30810a 【功能修复】商城:diy 店铺装修的 fen2yuan 地址不正确 2024-09-25 09:01:44 +08:00
安浩浩 0e3ebbd2b8 【优化功能】 IOT 产品管理,Topic 类列表展示问题 2024-09-24 23:18:42 +08:00
YunaiV 26b025aca0 【代码优化】全局:移除 VITE_UPLOAD_URL 环境变量,使用 getUploadUrl 方法替代 2024-09-24 20:54:12 +08:00
YunaiV 74e04279c2 【功能优化】支付:查询支付订单时,增加 sync 主动轮询,解决支付宝、微信存在延迟的问题 2024-09-24 09:05:08 +08:00
安浩浩 6aaf611291 【新增】 IOT 产品管理,Topic 类列表 2024-09-23 23:34:21 +08:00
duxz 96593dac52 fix: 处理vite-plugin-top-level-await打包报错问题
Error: [vite-plugin-top-level-await] missing field `ctxt`
2024-09-23 14:50:56 +08:00
YunaiV da45ee034c 【代码评审】商城:积分商品的管理 2024-09-23 09:17:58 +08:00
芋道源码 4872f18dc6 !555 【新增】商城: 积分商城
Merge pull request !555 from puhui999/dev-crm
2024-09-23 01:07:39 +00:00
puhui999 a45c8e6d2d Merge remote-tracking branch 'yudao/dev' into dev-crm 2024-09-22 23:29:41 +08:00
puhui999 360cce10c7 【新增】商城: 积分商城 2024-09-22 23:29:22 +08:00
安浩浩 93a0789e34 【新增】 IOT 设备管理,设备详情 2024-09-22 15:42:20 +08:00
安浩浩 63a0e5dc3d 【优化】 IOT 设备管理 2024-09-22 13:17:12 +08:00
jason 4680a7dcfd 仿钉钉流程设计器, 条件节点修改 2024-09-21 11:01:56 +08:00
安浩浩 b69a784e86 【新增】 IOT 设备管理 2024-09-21 09:15:27 +08:00
jason 4a2a7b760a 【问题修复】仿钉钉设计器,条件节点,表单字段不显示 2024-09-20 22:11:19 +08:00
YunaiV 0db57da901 【功能修复】CRM:合同的成员不支持修改的问题 2024-09-17 18:51:11 +08:00
YunaiV 8f231bc296 【修复】修复菜单的路由地址为链接时不带参数的问题 2024-09-17 15:44:09 +08:00
芋道源码 859f25fee3 !550 【修复】修复菜单的路由地址为链接时不带参数的问题
Merge pull request !550 from kuxiao/master
2024-09-17 07:42:20 +00:00
YunaiV fe33517ef0 【优化】全局:rvest.vs-code-prettier-eslint 转成 esbenp.prettier-vscode 2024-09-15 21:10:00 +08:00
YunaiV f7217a5c83 【功能修复】商城:修复满减送批量合并的错误部分 2024-09-15 21:06:21 +08:00
芋道源码 1a8c04d763 !553 批量优化或修改BUG
Merge pull request !553 from 痴货/develop-mall
2024-09-15 12:58:14 +00:00
芋道源码 8dafe26b2b !552 【代码优化】商城: 限时折扣
Merge pull request !552 from puhui999/dev-crm
2024-09-15 12:54:05 +00:00
痴货 f069f809c2 Merge remote-tracking branch 'refs/remotes/update/dev' into develop-mall 2024-09-15 20:40:30 +08:00
YunaiV 8a225e66b7 【功能修复】商城:满减送的条件类型的满足价格不对的问题 2024-09-15 20:22:34 +08:00
痴货 f086b9c32b 修复指定发放优惠券显示 2024-09-15 16:37:35 +08:00
痴货 fc0de84d78 装修页面获取优惠券只获取直接领取的 2024-09-15 16:36:05 +08:00
痴货 c697824b09 修改添加商品商品简介、修改装修主页商品价格显示 2024-09-15 16:33:55 +08:00
痴货 456f3d210a 【功能优化】优化限时满减的金额数据库保存为分 2024-09-15 16:31:23 +08:00
痴货 4d25dda7fd 【优化】满减送列表页面添加活动范围字段、修改状态为COMMON_STATUS 2024-09-15 16:27:12 +08:00
puhui999 370851ac37 【代码优化】商城: 限时折扣 2024-09-15 14:06:35 +08:00
痴货 fbed29100f 【BUG】满减满足多少元需要元转分 2024-09-14 20:30:16 +08:00
痴货 870a1c44e8 【添加】列表添加优惠类型字段 2024-09-14 20:29:38 +08:00
DESKTOP-ELFHO53\zqx d8fb70628d 【修复】修复菜单的路由地址为链接时不带参数的问题 2024-09-13 13:59:15 +08:00
YunaiV 48e78c38c8 【功能优化】框架:UploadImgs 的 zIndex 9999999,避免遮挡问题 2024-09-12 19:51:49 +08:00
YunaiV 0974ece199 【功能优化】公众号:未配置公众号账号的情况下,自动跳转账号管理的菜单 2024-09-12 09:42:47 +08:00
YunaiV 9d0e77b624 【功能修复】商城:指定发卷、新人卷,支持无限发放的兜底 2024-09-11 20:55:38 +08:00
YunaiV 8d116599b1 Merge remote-tracking branch 'origin/dev' into dev 2024-09-11 12:30:45 +08:00
YunaiV e1502d15a2 【缺陷修复】商城:去掉 Number(params.propertyId) 的 Number,解决对雪花算法的兼容性 2024-09-11 12:30:36 +08:00
芋道源码 823530bbc9 !547 【代码优化】商城: 满减活动范围支持分类多选
Merge pull request !547 from puhui999/dev-crm
2024-09-10 13:09:06 +00:00
芋道源码 7577fc45c4 !548 fix: 修复字典选择器数据类型不生效问题
Merge pull request !548 from OlyLis/master
2024-09-10 13:07:38 +00:00
YunaiV cb6e716ce2 【代码优化】注册的逻辑实现 2024-09-10 21:04:46 +08:00
YunaiV b1e3337cb4 Merge branch 'dev' of https://gitee.com/scholarli/yudao-ui-admin-vue3 into dev
# Conflicts:
#	src/views/Login/components/RegisterForm.vue
2024-09-10 20:58:40 +08:00
duxz 65e1c7385f fix: 修复字典选择器数据类型不生效问题 2024-09-10 15:32:44 +08:00
puhui999 1a0ff0215d 【代码优化】商城: 满减活动范围支持分类多选 2024-09-10 15:11:57 +08:00
芋道源码 0e2000550a !546 【代码优化】商城: 满减送活动
Merge pull request !546 from puhui999/dev-crm
2024-09-10 04:52:07 +00:00
puhui999 4fcc33ec60 【代码优化】商城: 满减活动增加关闭操作 2024-09-10 12:25:14 +08:00
scholar b2dd170884 实现注册功能 2024-09-10 11:35:49 +08:00
YunaiV 5a3ae2ab7a 【代码优化】商城: 限时折扣活动新增 spu 保存 fix 2024-09-09 09:37:39 +08:00
YunaiV f07c74d83c Merge remote-tracking branch 'origin/dev' into dev 2024-09-09 09:30:56 +08:00
芋道源码 1bd853bb32 !545 【代码优化】商城: 限时折扣活动
Merge pull request !545 from puhui999/dev-crm
2024-09-09 01:30:21 +00:00
YunaiV 6f47069df8 【功能优化】商城:秒杀装修重构 2024-09-09 09:20:42 +08:00
芋道源码 5ccca7ffa7 !543 【功能优化】商城:秒杀装修重构
Merge pull request !543 from 卢越/master
2024-09-09 00:15:30 +00:00
puhui999 cb34733318 Merge remote-tracking branch 'yudao/dev' into dev-crm 2024-09-08 22:43:57 +08:00
puhui999 ed54cfe519 【代码优化】商城: 限时折扣活动新增 spu 保存 fix 2024-09-08 22:40:47 +08:00
puhui999 7bb482a829 【代码优化】商城: 限时折扣活动 sku 自动计算对应的满减/折扣 2024-09-08 22:29:35 +08:00
puhui999 2e207ddef9 【代码优化】商城: spu 详情价格回显错误 fix 2024-09-08 21:19:48 +08:00
YunaiV 90656ddb51 【功能修复】商城:店铺装修时,“悬浮按钮”默认不选中 2024-09-08 19:13:32 +08:00
芋道源码 9c6b5eb600 !544 【修复】修复路由二级路径VITE_BASE_PATH支持
Merge pull request !544 from 半栈幼儿员/hotfix/router
2024-09-08 10:43:41 +00:00
preschooler 25dff95fed 🐞 fix:修复路由二级路径 2024-09-08 14:26:22 +08:00
卢越 d5f1e50495 【功能优化】商城:秒杀装修重构 2024-09-08 11:15:53 +08:00
YunaiV 85c0da5aec Merge remote-tracking branch 'origin/feature/iot' into feature/iot
# Conflicts:
#	src/components/DictTag/src/DictTag.vue
2024-09-07 20:43:47 +08:00
YunaiV daddf79683 Merge branch 'master' of https://gitee.com/yudaocode/yudao-ui-admin-vue3 into feature/iot
# Conflicts:
#	src/router/modules/remaining.ts
2024-09-07 20:43:14 +08:00
安浩浩 e6d83c1bd0 修改:IOT 产品管理 发布产品和产品详情 2024-09-07 19:40:53 +08:00
YunaiV 3c34602483 【功能修复】商城:店铺装修时,“悬浮按钮”默认不选中 2024-09-07 19:14:34 +08:00
YunaiV ef56489d46 【功能修复】商城:发送商品显示不全问题和打包后客服聊天表情缺失问题 2024-09-07 19:04:07 +08:00
芋道源码 d12c4dc258 !541 【功能修复】商城:发送商品显示不全问题和打包后客服聊天表情缺失问题
Merge pull request !541 from Lcp/pr
2024-09-07 11:02:19 +00:00
Lcp 9faad6424e 【功能修复】商城:发送商品显示不全问题和打包后客服聊天表情缺失问题 2024-09-07 17:26:15 +08:00
YunaiV fb19dd2476 Merge branch 'master' of https://gitee.com/yudaocode/yudao-ui-admin-vue3 into feature/bpm
# Conflicts:
#	src/views/bpm/model/ModelForm.vue
#	src/views/bpm/model/index.vue
2024-09-07 16:56:02 +08:00
YunaiV e5ec820127 Merge remote-tracking branch 'origin/master' 2024-09-07 16:54:20 +08:00
YunaiV 3e55015d77 Merge branch 'dev' of https://gitee.com/yudaocode/yudao-ui-admin-vue3
# Conflicts:
#	src/components/DiyEditor/components/mobile/PromotionCombination/index.vue
#	src/views/ai/mindmap/manager/index.vue
2024-09-07 16:53:40 +08:00
安浩浩 e5de6a5cbd 修改:IOT 产品管理 修改禁用字段 2024-09-07 16:38:36 +08:00
芋道源码 beaf533a14 !540 【功能修复】修复新创建用户未上传头像时,头像不显示的bug。 修复布局配置中标签页图标key错误的bug
Merge pull request !540 from kuxiao/pass20240907
2024-09-07 08:15:14 +00:00
zqx 307743b7d0 【功能修复】修复新创建用户未上传头像时,头像不显示的bug。
【功能修复】修复布局配置中标签页图标key错误的bug
2024-09-07 15:38:39 +08:00
安浩浩 4aea2eaed5 新增:IOT 产品管理 2024-09-07 09:46:52 +08:00
芋道源码 b5c4da073a !539 【功能修复】修复拼团装修的价格显示
Merge pull request !539 from 卢越/master
2024-09-06 14:32:34 +00:00
卢越 3dc02f7282 【功能修复】修复拼团的价格显示 2024-09-06 22:23:15 +08:00
YunaiV 7d60b5a619 【代码优化】商城:拼团装修重构 2024-09-06 20:55:08 +08:00
芋道源码 a2091df2df !537 【功能优化】拼团装修重构
Merge pull request !537 from 卢越/master
2024-09-06 12:39:44 +00:00
scholar 2205526a79 优化代码实现。 2024-09-06 16:14:59 +08:00
YunaiV fd6fd9e520 【代码优化】SYSTEM:快速开关菜单的按钮 2024-09-06 09:20:32 +08:00
芋道源码 15ed1cf5c2 Merge pull request #54 from DevDengChao/feat/menu-status-switch
feat: 新增快速开关菜单的按钮
2024-09-06 09:15:27 +08:00
芋道源码 d7e0b771ef Merge pull request #84 from GoldenZqqq/bpm-optimization
工作流审批页面样式优化
2024-09-06 09:13:13 +08:00
芋道源码 52f804e204 Merge pull request #81 from ion1ze/master
bugfix: 移动端浅色模式下标题语言颜色异常
2024-09-06 09:12:07 +08:00
芋道源码 7ba29c97aa !535 feat: ✨ add closeOnPressEscape to ElMessageBox
Merge pull request !535 from AhJindeg/hotfix/handleAuthorized
2024-09-05 12:10:23 +00:00
卢越 4f941df55c 【代码优化】代码格式化 2024-09-05 15:15:19 +08:00
卢越 4870231b61 【代码优化】代码格式化 2024-09-05 12:46:58 +08:00
卢越 40fe63a3fb 【代码优化】拼团活动和SPU详情分开查询 2024-09-05 10:55:57 +08:00
卢越 03356576b3 【功能优化】拼团组件默认为单列大图 2024-09-04 23:08:01 +08:00
卢越 10c95406d8 【代码优化】接口地址修正 2024-09-04 22:58:16 +08:00
卢越 757f10cbe6 【功能优化】现在每次点击装修组件都刷新右侧属性窗口 2024-09-04 17:40:10 +08:00
卢越 19789fabf5 【代码优化】拼团卡片组件名 2024-09-04 10:39:57 +08:00
卢越 c486dfd87a 【功能优化】重构拼团装修(仍需优化) 2024-09-03 15:52:38 +08:00
YunaiV c4fda86747 【功能修复】商城:店铺装修的价格展示,没有 / 100 在管理后台的预览时 2024-09-03 15:31:15 +08:00
AhJindeg f750e3b41b feat: ✨ add closeOnPressEscape to ElMessageBox 2024-09-03 09:28:17 +08:00
GoldenZqqq 428f976034 chore: 删除多余添加的元素类 2024-09-03 09:06:19 +08:00
芋道源码 8362665f2b !533 fix: delete href.includes('login?redirect=')
Merge pull request !533 from AhJindeg/hotfix/handleAuthorized
2024-09-02 14:45:09 +00:00
YunaiV 18880c71db Merge branch 'master' of https://gitee.com/yudaocode/yudao-ui-admin-vue3 2024-09-02 22:31:00 +08:00
芋道源码 a2b378b131 !534 【代码优化】商城: 满减送活动
Merge pull request !534 from puhui999/dev-crm
2024-09-02 14:30:47 +00:00
puhui999 dcc1a3e9d5 【代码优化】商城: 满减送活动 2024-09-02 17:21:10 +08:00
puhui999 9329978f6d 【代码优化】】商城: 满减送活动提示弱化一点 2024-09-02 17:05:01 +08:00
puhui999 9aa7706722 【代码优化】】商城: 满减送活动 2024-09-02 16:53:55 +08:00
GoldenZqqq a9623e3001 feat: 审批记录时间线抽取为单独组件;时间线整体样式优化、展示逻辑TODO 2024-09-02 11:34:03 +08:00
AhJindeg 8547b28d63 fix: 🐞 delete href.includes('login?redirect=') 2024-09-02 10:42:41 +08:00
GoldenZqqq 7151695103 fix: 修复进入审核页面后跳转至其他页面报错 2024-09-02 09:54:46 +08:00
GoldenZqqq fb68dc2bfa feat: 优化操作按钮组件命名;操作按钮固定在整个页面下方逻辑完成 2024-09-02 09:35:37 +08:00
YunaiV 0ceba5a441 【功能修复】商城:发送优惠劵的权限标识是 promotion:coupon:send 2024-09-01 09:42:01 +08:00
芋道源码 5502911333 !532 【修复】暗黑主题下沉浸标签预选内容颜色
Merge pull request !532 from 半栈幼儿员/hotfix/tagsview
2024-09-01 01:31:42 +00:00
芋道源码 632dea08c0 !518 【修复】修复el-input、el-select、el-date-picker宽度(先等等、全局影响)
Merge pull request !518 from 半栈幼儿员/hotfix/input-width
2024-08-31 10:38:01 +00:00
preschooler 8c0380506c 🐞 fix:修复el-input、el-select、el-date-picker宽度 2024-08-31 17:39:48 +08:00
YunaiV 395c9c3dca 【优化】添加全局box-sizing: border-box;(先等等、全局影响) 2024-08-31 09:35:29 +08:00
YunaiV 24270f4e9d Merge branch 'hotfix/box-sizing' of https://gitee.com/preschooler/platform-admin-ui 2024-08-31 09:26:44 +08:00
YunaiV 8cb59315da 【代码优化】商城:优惠劵的描述字段新增 2024-08-31 09:13:05 +08:00
YunaiV 15bd591c1b 【代码优化】商城:优惠劵的描述字段新增 2024-08-31 09:07:18 +08:00
YunaiV 7414a044a6 【代码评审】工作流:审批详情的优化 2024-08-30 23:02:57 +08:00
YunaiV 612fa4ab92 Merge branch 'master' of https://github.com/yudaocode/yudao-ui-admin-vue3 2024-08-30 22:36:37 +08:00
芋道源码 324217a8bb Merge pull request #82 from GoldenZqqq/perf/bpm-optimization
feat: 将工作流状态svg放到同一文件夹下;将工作流审批页面操作栏抽取为单独组件
2024-08-30 22:34:31 +08:00
preschooler b67ed77030 🐞 fix:暗黑主题下沉浸标签预选内容颜色 2024-08-27 11:23:05 +08:00
YunaiV a13e8b77c9 Merge branch 'master' of https://gitee.com/yudaocode/yudao-ui-admin-vue3 into dev 2024-08-27 09:00:11 +08:00
芋道源码 0112e7203e !530 【功能优化】商城优惠券新增描述字段
Merge pull request !530 from 卢越/master
2024-08-27 00:59:41 +00:00
卢越 beb7f60bc5 【功能优化】商城优惠券新增描述字段 2024-08-27 06:18:07 +08:00
YunaiV c4f7aa760b 【代码评审】商城:限时折扣活动 2024-08-26 22:09:56 +08:00
YunaiV af1bec2a8c Merge remote-tracking branch 'origin/dev' into dev 2024-08-26 21:58:24 +08:00
YunaiV c3b210d2b5 Merge branch 'master' of https://gitee.com/yudaocode/yudao-ui-admin-vue3 into dev 2024-08-26 21:58:12 +08:00
芋道源码 2434911064 !529 【修改】修改限时折扣的一些问题
Merge pull request !529 from 痴货/dev
2024-08-26 13:57:35 +00:00
芋道源码 35c1551fad !528 【代码优化】商城: 完善代码评审提到的问题
Merge pull request !528 from puhui999/dev-crm
2024-08-26 10:49:01 +00:00
YunaiV 898593696c 【功能新增】工作流:BPM Model 增加 type 标记是 BPMN 设计器,还是 SIMPLE 钉钉设计器 2024-08-26 18:38:24 +08:00
痴货 a06a50967e 【修改】修改限时折扣:①【优化】商品允许选择多个;②【优化】选择后的 SKU,需要后面加个【删除】按钮;③【bug】展示的金额,貌似不对,大了 100 倍;④【优化】“优惠类型”,是每个 SKU 可以自定义已设置的 2024-08-26 17:45:33 +08:00
puhui999 e1ccf52389 【代码优化】】商城: 完善代码评审提到的问题 2024-08-26 16:30:35 +08:00
YunaiV ce0f6edba6 【功能简化】工作流:移除“导入”流程的功能,原生 bpmn 设计器,已经提供导入 2024-08-26 13:07:33 +08:00
GoldenZqqq 927196c5d1 feat: 将工作流状态svg放到同一文件夹下;将工作流审批页面操作栏抽取为单独组件 2024-08-26 10:58:50 +08:00
芋道源码 1911ed9934 !527 【功能优化】商城客服聊天相关优化
Merge pull request !527 from 卢越/master
2024-08-25 11:20:17 +00:00
卢越 075cf0c160 【功能优化】商城客服适配黑暗模式,点击卡片进入订单或者商品详情页 2024-08-25 19:08:33 +08:00
卢越 dd4dbb0a5c 【功能修复】商城客服聊天列表无法删除的问题 2024-08-25 19:07:10 +08:00
preschooler ca3e47f673 🐞 fix:删除scrollbar__view高度限制 2024-08-25 16:49:26 +08:00
YunaiV b99700455c 【功能修复】report 缺少 ContentWrap 报错 2024-08-25 10:41:40 +08:00
YunaiV 216d8c00b2 【功能修复】report 缺少 ContentWrap 报错 2024-08-25 10:36:55 +08:00
芋道源码 c832af77e8 !526 【页面优化】商城装修小组件适配黑暗模式
Merge pull request !526 from 卢越/master
2024-08-24 10:39:07 +00:00
YunaiV 8f748edd96 【代码优化】工作流:调整多人审批的文案 2024-08-24 18:08:10 +08:00
卢越 295976407b 【页面优化】商城装修右侧操作区适配黑暗模式 2024-08-24 17:32:54 +08:00
卢越 69dc5c1a23 【页面优化】商城装修小组件适配黑暗模式 2024-08-24 17:09:26 +08:00
爱摸鱼的阿恒 de5cda9ef4 bugfix: 移动端浅色模式下标题语言颜色异常 2024-08-24 11:38:19 +08:00
YunaiV c32e03b002 【代码评审】工作流:审批详情的优化 2024-08-23 20:23:23 +08:00
YunaiV f1ffd6e6b8 Merge branch 'master' of https://github.com/yudaocode/yudao-ui-admin-vue3 2024-08-23 20:19:16 +08:00
芋道源码 535921b0d0 Merge pull request #80 from GoldenZqqq/Refactor_Bpm
重构工作流审批页面
2024-08-23 20:18:57 +08:00
芋道源码 fd9d6e5818 !517 【修复】修复标签栏高度(被box-sizing和scrollbar__view的height: 99%干扰)
Merge pull request !517 from 半栈幼儿员/hotfix/tags-view
2024-08-23 11:29:31 +00:00
芋道源码 6cd826d56d !509 【优化】优化权限选择框
Merge pull request !509 from 半栈幼儿员/hotfix/permission-form
2024-08-23 11:27:12 +00:00
芋道源码 c820b5a574 !510 【修复】修复时间格式错误
Merge pull request !510 from 半栈幼儿员/hotfix/date-format
2024-08-23 11:25:53 +00:00
芋道源码 24e1e2f26c !519 【优化】优化垂直菜单可用宽度
Merge pull request !519 from 半栈幼儿员/hotfix/menu
2024-08-23 11:23:33 +00:00
芋道源码 be2ca75ef0 !513 【修复】修复top布局模式下主容器高度计算方式、工具栏多出1px、页脚多出1px
Merge pull request !513 from 半栈幼儿员/hotfix/layout
2024-08-23 11:21:29 +00:00
芋道源码 21621fd2d2 !508 【优化】优化iframe布局
Merge pull request !508 from 半栈幼儿员/hotfix/iframe
2024-08-23 11:16:05 +00:00
芋道源码 5bf1de5481 !522 fix: Fixed the clearable invalid issue of IconSelect component for MenuForm page
Merge pull request !522 from AhJindeg/hotfix/IconSelect
2024-08-23 11:13:43 +00:00
芋道源码 7ff082a930 !524 【页面优化】适配订单详情和售后详情的黑暗模式
Merge pull request !524 from 卢越/master
2024-08-23 11:12:25 +00:00
YunaiV 3eeb55749d 【代码评审】商城:满减送活动的实现 2024-08-23 19:08:06 +08:00
芋道源码 f2f39c3a91 !525 【新增】MALL: 满减送活动赠送优惠券(100%)
Merge pull request !525 from puhui999/dev-crm
2024-08-23 10:29:29 +00:00
YunaiV a02712ca95 【代码评审】商城:满减送活动的实现 2024-08-23 18:28:37 +08:00
puhui999 d81ca6e8e3 【代码优化】】MALL: 修复满减送活动规则优惠券回显逻辑 2024-08-23 17:18:11 +08:00
puhui999 e9510f50f8 Merge remote-tracking branch 'yudao/dev' into dev-crm 2024-08-23 17:02:16 +08:00
puhui999 299fec7bdd 【代码优化】上传组件 TODO fix 2024-08-23 17:01:23 +08:00
puhui999 f996d00e92 【新增】MALL: 满减送活动赠送优惠券(100%) 2024-08-23 16:57:36 +08:00
卢越 dd841c2c06 【页面优化】订单售后详情适配黑暗模式 2024-08-23 16:36:43 +08:00
puhui999 a08684089d 【新增】MALL: 满减送活动赠送优惠券(80%) 2024-08-23 16:22:46 +08:00
AhJindeg d407bc3c41 fix: 🐞 Fixed the clearable invalid issue of IconSelect component for MenuForm page
- 修复 MenuForm 页面 IconSelect 组件可清除无效问题
2024-08-23 10:32:45 +08:00
preschooler 8150b9b139 🐞 fix:修复时间格式错误 2024-08-23 10:01:07 +08:00
GoldenZqqq f5c093b3d8 feat: 底部操作栏固定fixed在el-card底部 2024-08-23 09:44:38 +08:00
YunaiV 814f9ba9c6 Merge branch 'master' of https://gitee.com/yudaocode/yudao-ui-admin-vue3 into dev
# Conflicts:
#	src/views/mall/promotion/rewardActivity/RewardForm.vue
2024-08-23 09:08:16 +08:00
芋道源码 f11df67441 !521 商城满减送活动 TODO 完善
Merge pull request !521 from puhui999/dev-crm
2024-08-23 01:06:52 +00:00
芋道源码 0f420bf39b !516 【页面优化】优化商城部分页面的黑暗模式适配问题
Merge pull request !516 from 卢越/master
2024-08-23 01:04:42 +00:00
芋道源码 31150eaa76 !512 【优化】规范style位置
Merge pull request !512 from 半栈幼儿员/hotfix/login
2024-08-23 01:01:30 +00:00
芋道源码 800ebf174f !511 【优化】el-radio的label属性修改为value以兼容下个版本
Merge pull request !511 from 半栈幼儿员/hotfix/el-radio
2024-08-23 01:00:10 +00:00
芋道源码 484826a5ad !520 【优化】el-checkbox的label属性修改为value以兼容下个版本
Merge pull request !520 from 半栈幼儿员/hotfix/el-checkbox
2024-08-23 00:57:53 +00:00
jason e75f954495 代码优化, bug 修复 2024-08-22 23:23:06 +08:00
puhui999 10cb91ad59 【新增】MALL: 满减送活动赠送优惠券(50%) 2024-08-22 18:19:54 +08:00
puhui999 25b23881b0 【代码优化】MALL: 满减送活动范围重构 2024-08-22 17:25:10 +08:00
GoldenZqqq e294520cf9 fix: 兼容dark模式文字颜色显示不清问题 2024-08-22 17:21:30 +08:00
GoldenZqqq 287421df7a fix: 工作流审批页面根据当前任务状态动态展示右上角图标;优化是否展示操作按钮栏逻辑、修复报错 2024-08-22 17:01:15 +08:00
puhui999 45fc9957af 【代码优化】MALL: 满减送表单重构 2024-08-22 16:39:52 +08:00
GoldenZqqq 9e695c0e69 fix: 时间显示格式修复;popover内通过按钮颜色与外部保持一致 2024-08-22 15:52:03 +08:00
preschooler 70efcadc72 🎈 perf:el-checkbox的label属性修改为value以兼容下个版本 2024-08-22 15:49:28 +08:00
GoldenZqqq 8b35ee53a8 feat: 删除测试数据、工作流审批页面右侧时间线使用接口返回的真实数据 2024-08-22 15:33:39 +08:00
GoldenZqqq 5968fc5fbf feat: 审批通过/拒绝以popover的形式来填写审批意见等信息并进行二次确认 2024-08-22 15:00:17 +08:00
preschooler 64168a9f39 🎈 perf:优化垂直菜单可用宽度 2024-08-22 14:31:53 +08:00
GoldenZqqq 38e2063f1f feat: 工作流审批页面下方按钮样式风格调整以及整体数据逻辑变更 2024-08-22 13:35:33 +08:00
preschooler ca6b61f553 🎈 perf:优化图标选择弹窗宽度 2024-08-22 13:31:44 +08:00
puhui999 c45a5228e1 【代码优化】MALL: 会员修改余额 2024-08-22 11:27:51 +08:00
preschooler 8c28b8d2d9 🐞 fix:修复top布局模式下主容器高度计算方式、cutMenu布局模式下tagsview位置计算方式、工具栏多出1px、页脚多出1px 2024-08-22 10:32:28 +08:00
GoldenZqqq 4bddfbf95d feat: 审批页面头部添加编号、流程名、发起人等信息展示 2024-08-22 10:02:40 +08:00
卢越 f61f0fa2e8 【页面优化】优化商城相关页面的黑暗模式适配问题,临时优化客服的页面 2024-08-22 09:47:17 +08:00
preschooler 5fad001468 🐞 fix:添加全局box-sizing: border-box;,此模式在布局中最为合理,且总会有组件全局修改box-sizing导致中途影响布局(如:进入流程模型页面导致标签栏高度、主容器宽度问题);可能轻微影响某些布局,发现后修复即可。 2024-08-22 01:49:01 +08:00
preschooler 8283c5d5ec 🌈 style:规范style位置 2024-08-22 01:47:32 +08:00
preschooler 5cdfed5741 🐞 fix:修复标签栏高度(被box-sizing和scrollbar__view的height: 99%干扰) 2024-08-22 01:31:01 +08:00
preschooler de7a9a484c 🎈 perf:el-radio的label属性修改为value以兼容下个版本 2024-08-22 01:18:36 +08:00
preschooler 98a95e6e88 🎈 perf:优化权限选择框 2024-08-22 01:07:27 +08:00
preschooler 6586ba43a8 🎈 perf:优化iframe布局 2024-08-22 00:45:15 +08:00
芋道源码 323e6197b1 !507 回退 'Pull Request !505 : 【修复】el-input、el-select、el-date-picker宽度;el-radio的label属性兼容下个版本;优化iframe布局'
Merge pull request !507 from 芋道源码/revert-merge-505-master
2024-08-21 13:41:46 +00:00
芋道源码 1d07068806 回退 'Pull Request !505 : 【修复】el-input、el-select、el-date-picker宽度;el-radio的label属性兼容下个版本;优化iframe布局' 2024-08-21 13:41:32 +00:00
芋道源码 ce5d8d3780 !505 【修复】el-input、el-select、el-date-picker宽度;el-radio的label属性兼容下个版本;优化iframe布局
Merge pull request !505 from 半栈幼儿员/hotfix
2024-08-21 13:36:17 +00:00
jason eb79ee1b77 仿钉钉流程设计器- 新增发起人节点,去掉开始节点 2024-08-21 21:00:38 +08:00
GoldenZqqq d22a2933b6 feat: 样式优化 2024-08-21 16:57:59 +08:00
preschooler 273ae198a6 🐞 fix:修复邮件模块搜索栏元素宽度 2024-08-21 16:36:29 +08:00
preschooler a4d19cc085 🎈 perf:优化图标选择弹窗宽度 2024-08-21 16:36:19 +08:00
preschooler 1c9d40fc54 🎈 perf:优化权限选择框 2024-08-21 16:36:12 +08:00
preschooler edc50b6f00 🐞 fix:修复时间格式错误 2024-08-21 16:36:07 +08:00
GoldenZqqq b47c8f0ba0 refactor: 工作流审批页面布局与样式重构 2024-08-21 15:03:17 +08:00
preschooler eb9a9257de 🎈 perf:优化iframe布局 2024-08-21 13:46:43 +08:00
preschooler 65f1863327 🐞 fix:修复表单中el-date-picker宽度 2024-08-20 22:40:22 +08:00
preschooler d3dc508171 🐞 fix:修复搜索工具栏中el-input、el-select、el-date-picker宽度 2024-08-20 22:40:17 +08:00
preschooler dea9ef8cd1 🎈 perf:el-radio的label属性修改为value以兼容下个版本 2024-08-20 22:40:13 +08:00
preschooler 30605fba76 🌈 style:微调 2024-08-20 22:40:06 +08:00
YunaiV 5dc11f844d 【代码评审】会员:会员详情的 TODO 2024-08-19 22:15:00 +08:00
芋道源码 eecfb90ab6 !504 完善一些 MALL TODO
Merge pull request !504 from puhui999/dev-crm
2024-08-19 11:37:38 +00:00
puhui999 43ad93cd20 【代码优化】MALL: 会员修改余额 2024-08-19 18:04:46 +08:00
puhui999 ffdd3325dd 【代码优化】分支合并 2024-08-19 16:38:15 +08:00
芋道源码 fc5e37dd21 Merge pull request #78 from GoldenZqqq/Feature_MemberDetail
会员详情-余额tab页面开发
2024-08-19 13:07:35 +08:00
puhui999 231bdd1dd0 【新增】MALL: 会员列表增加修改余额操作 2024-08-19 11:54:29 +08:00
puhui999 b9c2d311ba 【新增】MALL: 会员详情增加售后管理界面 2024-08-19 10:50:10 +08:00
puhui999 ab7064037b 【新增】MALL: 会员详情增加钱包流水界面 2024-08-19 10:23:08 +08:00
puhui999 8bbfaf2aeb Merge remote-tracking branch 'refs/remotes/yudao/dev' into dev-crm 2024-08-19 09:59:32 +08:00
puhui999 b931fbc500 【代码优化】MALL: 活动商品价格展示分转元 2024-08-19 09:59:02 +08:00
GoldenZqqqq 687c96bb0e feat: 会员详情-余额tab页面初始化;将查询会员账户信息接口调用逻辑抽取到父组件,方便余额tab页面使用 2024-08-18 21:42:00 +08:00
芋道源码 e2754b3ede !496 更新element-plus依赖,修复Bug
Merge pull request !496 from kuxiao/master
2024-08-18 09:36:32 +00:00
芋道源码 0791a8aedb !499 【新增】标签页沉浸式效果
Merge pull request !499 from 半栈幼儿员/preschooler
2024-08-18 09:34:36 +00:00
YunaiV 7108cde060 【功能优化】支付:支付应用,增加 appKey 标识,用于不同接入方的标识 2024-08-18 15:51:12 +08:00
YunaiV e01883d58b 【功能优化】商城:支持阿里接口内容加密,同时修复支付宝渠道配置前端校验不生效的问题 #IAKCU4 2024-08-18 15:33:59 +08:00
芋道源码 a9e52b4e98 !498 【功能优化】支持支付宝接口内容加密,及修复支付宝渠道配置前端校验失效问题
Merge pull request !498 from zhaoyu/master
2024-08-18 05:53:48 +00:00
YunaiV 254d1e0322 【功能新增】商城:售后分页查询,支持 userId 过滤 2024-08-18 13:02:21 +08:00
芋道源码 3d56931268 Merge pull request #77 from GoldenZqqq/Feature_MemberDetail
会员详情-收货管理、余额模块页面补充
2024-08-18 11:55:57 +08:00
jason eb7e9397f5 仿钉钉流程设计器- 新增审批类型 2024-08-17 22:49:04 +08:00
jason 996fe3329c Merge branch 'feature/bpm' of https://gitee.com/yudaocode/yudao-ui-admin-vue3 into feature/bpm 2024-08-17 20:41:01 +08:00
YunaiV 9d9f7ad7f7 【代码评审】工作流:连续多级部门负责人的实现 2024-08-17 20:37:01 +08:00
jason 92ee6d639d 仿钉钉流程设计器- 连续多级部门负责人支持选多个部门 2024-08-17 18:48:05 +08:00
YunaiV 8b3c294e5c 【功能新增】工作流:支持审批人为空时,根据配置进行自动通过、自动拒绝、指定人审批的配置 2024-08-17 17:03:58 +08:00
jason 6b31a32a2d Merge branch 'feature/bpm' of https://gitee.com/yudaocode/yudao-ui-admin-vue3 into feature/bpm 2024-08-17 13:18:49 +08:00
jason ab9ce936a3 仿钉钉流程设计器- 删除第1版,新增连续多级部分负责人策略 2024-08-17 12:19:13 +08:00
YunaiV 0ce9ececc6 【代码重构】将审批超时的 action 统一换成 handlerType,保持一致 2024-08-17 12:09:47 +08:00
YunaiV 2dae231afc 【功能新增】审批节点的审批人与发起人相同时,对应的处理类型的配置 2024-08-17 10:18:50 +08:00
preschooler db75640167 Merge branch 'master' of gitee.com:yudaocode/yudao-ui-admin-vue3 into preschooler 2024-08-16 22:52:30 +08:00
YunaiV 13b630b9ce 【功能修复】修复装修页面的拼团价格和秒杀价格 2024-08-16 20:39:25 +08:00
芋道源码 df90c46a5b !501 【功能修复】商城店铺装修的拼团价格和秒杀价格
Merge pull request !501 from 卢越/master
2024-08-16 12:38:29 +00:00
芋道源码 aadf1373fc !500 update src/views/mall/product/spu/form/ProductAttributes.vue.
Merge pull request !500 from 口口口/N/A
2024-08-16 12:33:16 +00:00
卢越 4130b2fec5 【功能修复】修复装修页面的拼团价格和秒杀价格 2024-08-16 14:42:43 +08:00
卢越 3b445d031f 【功能修复】修复装修页面的拼团价格和秒杀价格 2024-08-16 13:49:08 +08:00
黄兆琦 61fb71c010 chore: 增加TODO注释 2024-08-16 09:15:59 +08:00
口口口 3f57039f4d update src/views/mall/product/spu/form/ProductAttributes.vue.
添加商品属性问题

Signed-off-by: 口口口 <17975121@qq.com>
2024-08-16 00:56:00 +00:00
preschooler bd88d29340 ✨ feat:新怎标签页沉浸式效果,默认未开启 2024-08-15 22:47:17 +08:00
preschool 16c919ce02 🎈 perf:避免表单值被后续函数修改导致页面异常 2024-08-15 22:46:37 +08:00
tb 6afcfdd50c 【功能优化】支持阿里接口内容加密,同时修复支付宝渠道配置前端校验不生效的问题 #IAKCU4 2024-08-15 22:02:31 +08:00
黄兆琦 bcfb98cb37 feat: 初始化会员详情-售后管理页面 2024-08-15 16:28:35 +08:00
芋道源码 d3f38c690e !495 优化stylelint、优化登录页、等等
Merge pull request !495 from 半栈幼儿员/master
2024-08-14 16:05:44 +00:00
YunaiV 2dc738a6e7 【功能优化】添加商品属性时允许选择已有的属性值,点击「选择」后,获取 value 列表 2024-08-14 21:54:21 +08:00
zqx 4925273c0b 更新element-plus依赖,修复Bug 2024-08-14 19:09:59 +08:00
preschool 8c2ecbd7aa 🎈 perf:优化标签栏图标取值 2024-08-14 17:31:26 +08:00
preschool c40ca1333d Merge branch 'master' of gitee.com:yudaocode/yudao-ui-admin-vue3 2024-08-14 15:32:45 +08:00
preschool cc1d2b194d 🎈 perf:优化动态路由在首次加载时未匹配导致警告、路由不存在时保留错误路径 2024-08-14 15:26:52 +08:00
YunaiV 521ae46cba 【功能优化】添加商品属性时允许选择已有的属性值,点击「选择」后,获取 value 列表 2024-08-14 13:06:23 +08:00
芋道源码 879870ee26 Merge pull request #75 from GoldenZqqq/GoldenZqqq/Bug-Fix
添加商品属性项重复选择校验
2024-08-14 12:54:45 +08:00
黄兆琦 9475ded922 fix: 商品属性值添加暂时恢复name同名校验 2024-08-14 09:41:05 +08:00
黄兆琦 0e9fde1f8a fix: 添加商品属性值时增加校验,如果是已存在的属性发出警告且不提交 2024-08-14 08:57:19 +08:00
YunaiV bcb4fc3034 【功能优化】添加商品属性时允许选择已有的属性值 2024-08-14 00:43:34 +08:00
芋道源码 e7c9ca0c5b Merge pull request #71 from GoldenZqqq/GoldenZqqq/issue47
【功能优化】添加商品属性时允许选择已有的属性值
2024-08-13 22:57:32 +08:00
YunaiV aaa5e146f1 【代码优化】DictTag 的 render 方法的命名,属性的命名 2024-08-13 22:56:58 +08:00
芋道源码 f45c255073 Merge pull request #72 from Mister-Kin/master
fix: failed to render for Boolean type of DictTag
2024-08-13 22:55:58 +08:00
芋道源码 3a1224a2ec Merge pull request #73 from GoldenZqqq/GoldenZqqq/Fix-DictTag
修复使用dictTag组件会出现位置偏移问题
2024-08-13 22:53:49 +08:00
preschool 5a21c0e8ca 🎈 perf:el-tag传入空字符串type导致警告 2024-08-13 17:15:38 +08:00
preschool 1a4c717584 🎈 perf:优化登录窗口高度、登录页入场动画、登录页暗黑模式下分割线和二维码背景色 2024-08-13 16:31:45 +08:00
preschool c49641d988 🎈 perf:移除stylelint已弃用的规则、开启保存时自动stylelint格式化、移除tsconfig报错内容 2024-08-13 13:46:09 +08:00
黄兆琦 2937f3c174 feat: 使用id来对商品属性值重复添加操作进行校验 2024-08-13 13:09:22 +08:00
黄兆琦 82bf084920 fix: DictTag组件根元素改为行内flex布局 2024-08-13 11:24:10 +08:00
Mr. Kin 14192991d9 fix: failed to render for Boolean type of DictTag 2024-08-13 10:28:55 +08:00
黄兆琦 24e69ecf36 chore: 添加TODO注释;以更优雅的方式跳出循环 2024-08-13 10:11:09 +08:00
黄兆琦 372e2215f0 【功能优化】添加商品属性时允许选择已有的属性值
Fixes #47
2024-08-12 16:14:52 +08:00
YunaiV fd13eb7f8f 【代码评审】工作流:快搭部分的 code review 2024-08-11 00:48:07 +08:00
YunaiV 5376eb4051 Merge branch 'master' of https://gitee.com/yudaocode/yudao-ui-admin-vue3 into feature/bpm 2024-08-10 19:30:50 +08:00
YunaiV a7c37fa295 【功能修复】绘图作品,一直打开的问题 2024-08-10 19:13:02 +08:00
YunaiV 38c485b2bc 【功能新增】AI 大模型:支持思维导图的管理 2024-08-10 19:07:24 +08:00
芋道源码 ab110f915c !493 fix: 思维导图管理预览会报错
Merge pull request !493 from hhhero/master
2024-08-10 10:56:11 +00:00
hhhero 5f970864a1 fix: 思维导图管理预览会报错 2024-08-10 18:41:21 +08:00
YunaiV b2bdcdcf9c 【功能新增】AI 大模型:支持思维导图的管理 2024-08-10 18:10:47 +08:00
YunaiV 7c73b800fa 【功能新增】AI 大模型:支持思维导图的管理 2024-08-10 17:39:38 +08:00
YunaiV 5ba69ba707 Merge branch 'master' of https://github.com/yudaocode/yudao-ui-admin-vue3 2024-08-08 23:47:54 +08:00
YunaiV de9ec95099 【代码优化】DictTag 的 render 方法的命名,属性的命名 2024-08-08 23:47:23 +08:00
YunaiV f7d31d5c99 Merge branch 'master' of https://github.com/GoldenZqqq/yudao-ui-admin-vue3
# Conflicts:
#	src/components/DictTag/src/DictTag.vue
2024-08-08 23:42:02 +08:00
YunaiV 53cef8b475 【代码优化】echarts 独立 chunk 打包 2024-08-08 09:35:20 +08:00
YunaiV fb08357e8f Merge branch 'master' of https://gitee.com/yudaocode/yudao-ui-admin-vue3 into dev
# Conflicts:
#	src/views/ai/mindmap/index/components/Right.vue
#	src/views/ai/mindmap/index/index.vue
2024-08-08 08:55:34 +08:00
芋道源码 485e3fa466 !489 [代码优化]AI: 思维导图代码优化
Merge pull request !489 from hhhero/dev
2024-08-08 00:54:40 +00:00
芋道源码 270f41428f !490 【代码优化】嵌套循环,item命名重复
Merge pull request !490 from 最后的梦想/N/A
2024-08-08 00:51:31 +00:00
芋道源码 1c60204350 !491 [修复]菜单: 默认布局为top时,二级菜单鼠标悬停背景色为黑色,如何修改和一级菜单悬停色保持一致
Merge pull request !491 from hhhero/fix/menu-item-hover-bg
2024-08-07 16:13:27 +00:00
GoldenZqqqq b5eb9e73a7 feat: DictTag组件增加props支持自定义每个tag之间的间隔,默认为5px 2024-08-04 12:14:01 +08:00
GoldenZqqqq 6edd64f13b feat: DictTag组件加字符串分隔符props,更灵活定义split字符串的分隔符 2024-08-04 02:05:16 +08:00
hhhero a6e1e5ffe3 fix: 一级以下菜单悬停色跟一级菜单悬停色保持一致 2024-08-04 00:45:46 +08:00
芋道源码 1d047d8cb2 Merge pull request #69 from gitkmw/master
修复运营模块数据不实时更新的问题
2024-08-03 19:11:00 +08:00
allen e1cf0e4456 修复运营模块数据不实时更新的问题 2024-08-03 17:11:29 +08:00
YunaiV 1b036e84d1 V2.2.0 版本发布 2024-08-02 22:55:21 +08:00
YunaiV 900d275055 【代码优化】AI:music 的路径修改 2024-08-02 21:17:35 +08:00
YunaiV 2ff21aa65e 【代码优化】AI:image 作品中心的代码 2024-08-02 21:17:35 +08:00
YunaiV 108dcccafe 【代码评审】AI:code review 思维导图的逻辑 2024-08-02 21:17:35 +08:00
YunaiV a805ceb534 【代码优化】AI:markdown 组件,增加相关的注释 2024-08-02 21:17:35 +08:00
cherishsince cb02377706 【删除】marked 2024-08-02 21:17:34 +08:00
cherishsince bead947284 【优化】marked 替换成 markdown-it 2024-08-02 21:17:06 +08:00
hhhero fa59b3c16a [新增]AI: 思维导图 2024-08-02 21:17:06 +08:00
最后的梦想 3b9d115c59 【代码优化】嵌套循环,item命名重复
Signed-off-by: 最后的梦想 <1971063665@qq.com>
2024-08-02 02:45:52 +00:00
hhhero 8d4c9e9c16 [代码优化]AI: 思维导图 2024-07-30 23:47:40 +08:00
YunaiV ed36d2bfb4 【代码优化】AI:music 的路径修改 2024-07-30 09:23:21 +08:00
YunaiV d5d783af25 【代码优化】AI:image 作品中心的代码 2024-07-30 00:00:44 +08:00
芋道源码 fde37b0410 !488 axios请求拦截错误处理中Promise.reject(error)未返回
Merge pull request !488 from perterHUAN/fix
2024-07-29 14:12:47 +00:00
YunaiV 1fe40b61a0 【代码评审】AI:code review 思维导图的逻辑 2024-07-29 22:07:31 +08:00
YunaiV 86880b48f7 Merge remote-tracking branch 'origin/dev' into dev 2024-07-29 21:37:05 +08:00
YunaiV e54fdc8d3f 【代码优化】AI:markdown 组件,增加相关的注释 2024-07-29 21:27:39 +08:00
YunaiV 07adf4c68b 【代码优化】AI:markdown 组件,增加相关的注释 2024-07-29 21:24:03 +08:00
芋道源码 e6f2a62c15 !487 【功能优化】修复商城装修页面拖动组件时会异常选择所有文字的问题
Merge pull request !487 from zhaoyu/master
2024-07-29 11:47:03 +00:00
YunaiV df8b1fbc0d 【功能优化】MALL:商品新增时,增加 keepalive 缓存 2024-07-28 19:29:14 +08:00
YunaiV 36b5db16dd 【功能优化】MALL:商品分类界面,增加【查看商品】按钮 2024-07-28 14:54:52 +08:00
YunaiV 8bbe9ad424 【功能优化】PAY:回调内容过长,折行展示 2024-07-28 14:39:36 +08:00
YunaiV 3fec45b5b4 【功能优化】INFRA:测试文件上传时,使用 confirm 替代 message 作为提示,避免文件地址过长的问题 2024-07-28 12:11:27 +08:00
YunaiV 8caf19a193 【功能优化】全局:接入 V2 版本操作日志 2024-07-28 11:30:40 +08:00
桓宪柱 05a6c4f288 axios请求拦截错误处理中Promise.reject(error)未返回 2024-07-28 11:08:13 +08:00
YunaiV d88707b306 【功能优化】全局:接入 V2 版本操作日志 2024-07-27 18:48:50 +08:00
tb 8f31bd73cd 【功能优化】修复商城装修页面拖动组件时会异常选择所有文字的问题 2024-07-27 17:20:30 +08:00
YunaiV 9e44a6cf0f 【功能修复】全局:锁定后,返回登录界面后,无法登录成功(回报 stack 溢出) 2024-07-26 22:58:39 +08:00
jason 7cb68da5b0 仿钉钉流程设计器- 复杂表单字段解析 2024-07-26 21:17:17 +08:00
黄兆琦 c015b2e881 fix: 修复vue/return-in-computed-property报错 2024-07-26 11:12:43 +08:00
黄兆琦 251a98df5c feat: DictTag组件兼容传入多个字典值展示多个标签的情况 2024-07-26 10:32:13 +08:00
YunaiV 188b4033ba 【功能优化】PAY:微信支付使用 certSerialNo 替代 privateCertContent 2024-07-25 23:46:07 +08:00
hhhero a4a376b18d Merge remote-tracking branch 'yudao-ui-admin-vue3/dev' into dev
# Conflicts:
#	package.json
2024-07-25 20:42:26 +08:00
cherishsince 677767fd83 【删除】marked 2024-07-24 21:10:26 +08:00
cherishsince 8c5aaa8801 【优化】marked 替换成 markdown-it 2024-07-24 21:10:09 +08:00
YunaiV 145226deed 【功能优化】全局:message 提示最多 5 个,https://t.zsxq.com/CIVnc 2024-07-23 23:35:11 +08:00
jason 3a5c93fa84 仿钉钉流程设计器- 代码优化 2024-07-23 22:39:06 +08:00
YunaiV f5d445be1d 【代码评审】UploadFile 增加修改建议 2024-07-23 21:14:48 +08:00
YunaiV e21114c0b5 【代码优化】websocket 连接示例,增加 autoReconnect = true 重连 2024-07-22 23:10:54 +08:00
YunaiV cfb3e4a5ff 【代码修复】修复短信的 status 筛选宽度样式不对的问题 2024-07-22 22:50:25 +08:00
YunaiV 162b93bc1d 【代码优化】全局:允许 .local 提交到 git 上 2024-07-22 22:11:07 +08:00
YunaiV 0763f33351 【代码代码】PAY:移除对 member 的依赖 2024-07-21 11:13:16 +08:00
YunaiV 0704672ad3 【功能优化】全局:DictTag 的 default 情况下,使用 info 替代,避免浏览器 warning 警告 2024-07-21 10:59:50 +08:00
YunaiV 8ed2afb712 【功能新增】全局:富文本编辑器,支持视频文件的上传 2024-07-21 10:44:15 +08:00
YunaiV 5d91131eb7 【缺陷修复】BPM:流程重新发起时,禁用业务表单的情况,避免报错 2024-07-20 20:05:42 +08:00
YunaiV 46da7e2876 【缺陷修复】BPM:流程设计器中,选择表达式时,不生效的情况 2024-07-20 19:35:23 +08:00
芋道源码 4a829c7525 !486 AI 大模型的草稿提交(code review 代码)
Merge pull request !486 from 芋道源码/dev
2024-07-20 11:13:35 +00:00
YunaiV 4d3c5b7eff 【代码评审】AI:绘图、音乐相关的代码 2024-07-20 19:12:35 +08:00
jason 2c11228f55 仿钉钉流程设计- bug 修复 2024-07-20 14:50:05 +08:00
cherishsince fcf948e781 【增加】画廊增加 search 2024-07-19 15:45:18 +08:00
xiaohong bd643f9376 feat: 音乐卡片新增播放和暂停按钮 2024-07-19 13:57:32 +08:00
xiaohong b7f06ec698 Merge branch 'dev' of https://gitee.com/yudaocode/yudao-ui-admin-vue3 into dev 2024-07-19 13:23:34 +08:00
xiaohong 7f7c508bb2 feat: 完善AI音频播放 2024-07-19 13:23:21 +08:00
YunaiV 638035249e 【代码评审】MALL:客服聊天 2024-07-19 13:13:19 +08:00
xiaohong bfddd674c1 Merge branch 'dev' of https://gitee.com/yudaocode/yudao-ui-admin-vue3 into dev 2024-07-19 10:14:58 +08:00
hhhero 33b0b5ceb3 [新增]AI: 思维导图 2024-07-19 01:53:38 +08:00
YunaiV e8a0eb08d6 【代码优化】MALL:客服聊天 2024-07-17 20:15:41 +08:00
芋道源码 4abd246d96 !483 完善 mall 客服
Merge pull request !483 from puhui999/dev-crm
2024-07-17 12:08:28 +00:00
puhui999 d072098038 【优化】修复客服消息列表加载 bug 2024-07-17 18:40:01 +08:00
puhui999 1ad5de57f9 Merge remote-tracking branch 'refs/remotes/yudao/dev' into dev-crm 2024-07-17 18:04:01 +08:00
puhui999 eeb76bb4c2 【新增】客服会话所属会员足迹展示组件 2024-07-17 18:03:34 +08:00
puhui999 fe48f87f37 【重构】客服抽离封装消息组件,移除冗余封装 2024-07-17 17:22:19 +08:00
puhui999 f0ba8ff0af 【新增】客服会话所属会员足迹展示组件 2024-07-17 16:43:20 +08:00
puhui999 14cb120519 【优化】客服订单卡片样式优化 2024-07-17 16:41:41 +08:00
puhui999 34542cae4b 【优化】客服订单卡片样式优化 2024-07-17 15:17:58 +08:00
cherishsince ccf21dd4d4 【优化】优化画廊样式 2024-07-17 13:49:06 +08:00
puhui999 416df14b8c 【优化】客服重构消息列表加载逻辑 2024-07-17 11:25:26 +08:00
芋道源码 21c7c17e8f !479 AI 大模型的草稿提交(code review 代码)
Merge pull request !479 from 芋道源码/dev
2024-07-17 00:52:23 +00:00
YunaiV a854e96343 【代码优化】AI:绘图画廊 2024-07-17 08:50:06 +08:00
YunaiV b1752f39b6 Merge branch 'dev' of https://gitee.com/yudaocode/yudao-ui-admin-vue3 into dev 2024-07-17 08:48:28 +08:00
cherishsince 9b647cc19e Merge remote-tracking branch 'origin/dev' into dev 2024-07-16 18:02:58 +08:00
cherishsince 922b0c4e63 【增加】画廊页面,临时提交 2024-07-16 18:02:48 +08:00
xiaohong 10f6a2b158 Merge branch 'dev' of https://gitee.com/yudaocode/yudao-ui-admin-vue3 into dev 2024-07-16 17:36:53 +08:00
xiaohong 806888cce8 feat: 新增音频播放器 2024-07-16 17:36:46 +08:00
YunaiV 4d44440070 【代码评审】AI:写作优化 2024-07-16 13:56:56 +08:00
芋道源码 35b2708ca6 !482 [代码优化]AI: 写作页面样式调整,目录更名writer => write,写作管理更改
Merge pull request !482 from hhhero/dev
2024-07-16 04:55:39 +00:00
hhhero c4ee9581d0 [代码优化]AI: 目录更名writer => write,写作管理调整 2024-07-14 23:55:12 +08:00
hhhero 0a48b523b9 Merge remote-tracking branch 'yudao-ui-admin-vue3/dev' into dev
# Conflicts:
#	src/api/ai/writer/index.ts
2024-07-14 23:25:55 +08:00
hhhero 1f22e0b88d [新增]AI: 写作管理 2024-07-14 23:22:10 +08:00
jason 538ad86b03 仿钉钉流程设计器- 操作按钮设置 2024-07-13 15:00:25 +08:00
hhhero d266b99e9e [代码优化]AI: 回显写作类型切换之前的数据 2024-07-13 08:51:25 +08:00
YunaiV 69940e2780 【代码评审】AI:绘图 other 优化 2024-07-13 00:06:27 +08:00
芋道源码 369860a055 !481 【修复】恢复 websocket path
Merge pull request !481 from puhui999/dev-crm
2024-07-12 11:56:41 +00:00
puhui999 ae0bca1774 【修复】恢复 websocket path 2024-07-12 18:06:22 +08:00
cherishsince d14ba2ed9e 【增加】ChatGlm 对接 Image 2024-07-12 16:30:33 +08:00
hhhero bb17651915 [代码优化]AI: 写作更改样式 2024-07-12 01:39:53 +08:00
cherishsince dd76cc581c 【增加】ai image 增加千帆模型 2024-07-11 16:54:06 +08:00
芋道源码 b9178c88aa !469 AI 大模型的草稿提交(code review 代码)
Merge pull request !469 from 芋道源码/dev
2024-07-11 01:38:07 +00:00
YunaiV 933628050b 【功能优化】全局:优化 Markdown 组件的代码 2024-07-11 09:36:56 +08:00
YunaiV 925d356e41 【功能注释】AI:临时注释 AI 音乐的菜单,开发中... 2024-07-11 09:29:15 +08:00
YunaiV 12c0f36bb8 【功能修复】全局:AppView min-h 导致有小方块问题,换回 h 2024-07-11 08:51:58 +08:00
YunaiV b98f1220ac 【代码新增】AI:写作管理节点 2024-07-11 08:48:08 +08:00
芋道源码 392603c811 !478 完善 mall 客服
Merge pull request !478 from puhui999/dev-crm
2024-07-11 00:41:35 +00:00
YunaiV e655b4d6ef 【代码新增】AI:写作管理节点 2024-07-10 23:01:13 +08:00
cherishsince c76b622722 【增加】ai image 对接通义参数 2024-07-10 21:35:45 +08:00
cherishsince 51c6bfe42c 【解决todo】合并 scss 2024-07-10 21:03:02 +08:00
puhui999 60d4175396 【修复】mall 客服会话消息少时触顶不加载bug 2024-07-10 21:02:10 +08:00
cherishsince 20054b28c3 【增加】ai 作图 other模块,临时提交 2024-07-10 18:50:34 +08:00
puhui999 79b6b87721 【修复】mall 客服会话消息页面高度不一致导致的滚动功能精度失效 2024-07-10 18:09:04 +08:00
puhui999 b6cd12a300 【优化】mall 客服会话置顶排序,右键菜单适配折叠菜单产生的位置偏移 2024-07-10 17:05:46 +08:00
puhui999 993d070560 【优化】mall 客服触顶自动加载下一页数据 2024-07-10 15:53:48 +08:00
puhui999 fa0892980d 【优化】mall 客服加载历史消息时页面保持在当前正在查看的消息位置 2024-07-10 15:40:37 +08:00
puhui999 32d6ac0183 【优化】根据代码评审优化 mall 客服 2024-07-10 14:34:12 +08:00
YunaiV ece1533436 【代码评审】写作:生成部分 2024-07-10 12:49:54 +08:00
芋道源码 e53786e8bd !477 [代码优化]AI: 写作添加注释,增加可读性,调整代码,方便后续调整,添加预览header,调整生成内容区域布局,将右边铺满
Merge pull request !477 from hhhero/dev
2024-07-10 01:34:43 +00:00
YunaiV 908b3c212c Merge remote-tracking branch 'origin/dev' into dev 2024-07-10 09:30:12 +08:00
YunaiV ec61670b75 【代码评审】Mall:客服的会话列表 2024-07-10 09:30:03 +08:00
cherishsince 21ade9b9ac 【解决todo】role 角色表单,规则改为 formRules 2024-07-10 09:12:11 +08:00
hhhero a68ae29f3a Merge remote-tracking branch 'yudao-ui-admin-vue3/dev' into dev
# Conflicts:
#	src/views/ai/utils/constants.ts
2024-07-10 00:15:07 +08:00
hhhero 9e628ba59d [代码优化]AI: 写作添加预览header,调整生成内容区域布局,将右边铺满 2024-07-10 00:11:00 +08:00
hhhero 5730707be9 [代码优化]AI: 写作添加注释,增加可读性,调整代码,方便后续调整 2024-07-10 00:09:39 +08:00
YunaiV 6550983413 【代码评审】Mall:客服的会话列表 2024-07-10 00:02:39 +08:00
芋道源码 0051264142 !476 完善 mall 客服,新增商品、订单消息
Merge pull request !476 from puhui999/dev-crm
2024-07-09 14:17:21 +00:00
YunaiV ba8681e3c7 【代码优化】AI:绘图 index.vue 代码梳理 80%(Dall3.vue) 2024-07-09 21:37:46 +08:00
YunaiV e881b9cefd 【代码优化】AI:绘图 index.vue 代码梳理 70%(Dall3.vue) 2024-07-09 21:06:57 +08:00
YunaiV 7706e46bfa 【代码优化】AI:绘图 index.vue 代码梳理 65%(Dall3.vue) 2024-07-09 20:41:22 +08:00
cherishsince 75af4f07c0 【解决todo】isUser 修改为 computed 2024-07-09 20:14:15 +08:00
cherishsince 9e3f228a61 【todo备注】@芋艿,这个地方 unocss 那个地方有使用,可以先参考一下 2024-07-09 19:55:03 +08:00
cherishsince d6c016e3ea 【解决todo】角色仓库,覆盖 element ui css 2024-07-09 17:54:45 +08:00
cherishsince dbacc0c371 【解决todo】添加角色 icon 修改为为 Icon 组件 2024-07-09 17:52:43 +08:00
cherishsince 4cfc785667 【解决todo】角色列表 icon 修改为为 Icon 组件 2024-07-09 17:51:08 +08:00
cherishsince 5734faa5fc 【todo】keydown.shift.enter 修改为@芋艿 2024-07-09 17:42:30 +08:00
cherishsince 326fc3d03f 【解决todo】el-button icon 改为 Icon 使用 iconfy 资源 2024-07-09 17:41:58 +08:00
puhui999 93006504ce 【新增】mall 客服订单消息 2024-07-09 17:24:33 +08:00
cherishsince cb68ef5fa7 【解决todo】ai-layout 100%高宽问题,只能通过 position: absolute 来特殊处理 2024-07-09 17:17:45 +08:00
cherishsince b4b9015869 【解决todo】对话中不能清楚 chat 消息 2024-07-09 17:14:38 +08:00
cherishsince 2204876076 【解决todo】对话中不允许切换(自动stop stream 删除) 2024-07-09 17:05:07 +08:00
puhui999 ebc995ac4c 【优化】mall 客服商品消息 2024-07-09 17:00:58 +08:00
puhui999 9dfb869a4b 【新增】mall 客服商品消息 2024-07-09 16:14:51 +08:00
YunaiV 61bf6fb85b 【代码优化】AI:绘图 index.vue 代码梳理 60%(StableDiffusion.vue) 2024-07-09 13:55:07 +08:00
YunaiV ac46a37638 【代码优化】AI:绘图 index.vue 代码梳理 50%(ImageDetail.vue) 2024-07-09 09:13:10 +08:00
YunaiV 749e44081e 【代码优化】AI:绘图 index.vue 代码梳理 40%(ImageCard) 2024-07-09 08:39:37 +08:00
芋道源码 5162191340 !474 【优化】spu:新增商品属性属性值为空校验。【新增】mall 客服消息下拉加载,有新消息提醒
Merge pull request !474 from puhui999/dev-crm
2024-07-08 16:08:33 +00:00
YunaiV 82b53b9b03 【代码优化】AI:绘图 index.vue 代码梳理 30%(ImageList) 2024-07-09 00:00:53 +08:00
YunaiV 80d87b8e99 【代码优化】AI:绘图 index.vue 代码梳理 20% 2024-07-08 23:29:27 +08:00
YunaiV 6224602152 【代码优化】AI:聊天对话 index.vue 代码梳理 80%(message 部分) 2024-07-08 21:12:49 +08:00
puhui999 848bc60612 【新增】mall 客服消息下拉加载,有新消息提醒 2024-07-08 17:53:56 +08:00
YunaiV 1a6afa3263 【代码优化】AI:聊天对话 index.vue 代码梳理 40%(message 部分) 2024-07-08 13:00:24 +08:00
YunaiV 2b0789112f 【代码评审】AI:写作相关的建议 2024-07-08 12:39:49 +08:00
puhui999 e9bb9403b4 【优化】spu:新增商品属性属性值为空校验 2024-07-08 12:00:34 +08:00
芋道源码 96a499a815 !473 [新增]AI写作
Merge pull request !473 from hhhero/dev
2024-07-08 00:51:30 +00:00
hhhero f72e4f47f4 [新增]完善AI写作 2024-07-08 00:41:20 +08:00
YunaiV 44f322bb35 【代码优化】AI:聊天对话 index.vue 代码梳理 30% 2024-07-07 22:11:40 +08:00
YunaiV 1064bbe570 【代码优化】AI:聊天对话 index.vue 代码梳理 20% 2024-07-07 20:30:44 +08:00
hhhero 1afdbe651e Merge remote-tracking branch 'yudao/dev' into dev 2024-07-07 18:15:00 +08:00
hhhero 18e87cf967 [新增]ai写作页面完成 2024-07-07 18:14:03 +08:00
YunaiV f3777f6334 【代码优化】AI:将对话、聊天挪到 index 目录下,更模块化 2024-07-07 17:22:16 +08:00
YunaiV 4acd379d50 Merge branch 'master' of https://gitee.com/yudaocode/yudao-ui-admin-vue3 into dev 2024-07-07 17:10:18 +08:00
芋道源码 8a73fbe775 !465 fix: update axios interceptors response
Merge pull request !465 from AhJindeg/hotfix/response
2024-07-07 03:35:31 +00:00
芋道源码 38fe69fbd4 !464 fix: add result field to JobLogDetail el-descriptions-item
Merge pull request !464 from AhJindeg/hotfix/JobLogDetail
2024-07-07 03:34:23 +00:00
芋道源码 f341ba4d3c !463 update src/components/bpmnProcessDesigner/package/penal/flow-condition/FlowCondition.vue.
Merge pull request !463 from 最后的梦想/N/A
2024-07-07 03:33:07 +00:00
芋道源码 21c9cba67b !466 fix: 修复会员和售后退款中订和单明细查询传递参数错误
Merge pull request !466 from OnPeaceOfMind/dev
2024-07-07 03:31:33 +00:00
芋道源码 3938a78db2 !472 fix: 修复CRM合同详情中团队成员未展示权限编辑的问题
Merge pull request !472 from downeyin/downey
2024-07-07 03:30:19 +00:00
YunaiV 2871961582 docs: update README 2024-07-07 11:23:27 +08:00
YunaiV a9ca98036c Merge branch 'master' of https://github.com/yudaocode/yudao-ui-admin-vue3 2024-07-07 11:22:26 +08:00
YunaiV 6f86ea96da 【代码优化】AI:接入更多 AI 大模型 2024-07-07 11:22:02 +08:00
芋道源码 922b9edfcb Merge pull request #60 from selicens/develop-readme
docs: update README
2024-07-07 11:21:33 +08:00
芋道源码 c825216063 Merge pull request #63 from geekymv/fix-leave-status
修改OA请假示例审批结果字段
2024-07-07 11:19:19 +08:00
downeyin f70c8dcee2 fix: 修复CRM合同详情中团队成员未展示权限编辑的问题 2024-07-06 23:31:59 +08:00
芋道源码 8d73d741d4 !471 mall 客服会话相关
Merge pull request !471 from puhui999/dev-crm
2024-07-06 01:05:00 +00:00
puhui999 d3c596dcaf Merge remote-tracking branch 'refs/remotes/yudao/dev' into dev-crm 2024-07-05 18:01:40 +08:00
puhui999 334c0241a9 【新增】:mall 客服会话右键菜单实现会话相关操作 2024-07-05 18:00:59 +08:00
geekymv db3b8285d1 修改OA请假审批结果字段 2024-07-05 17:54:05 +08:00
puhui999 9ab367e4f4 【新增】:mall 客服会话未读消息展示和消息已读处理 2024-07-05 16:36:52 +08:00
cherishsince 5fd8177791 【修改todo】Loading组件 改为 @芋艿 2024-07-05 09:39:14 +08:00
cherishsince fda50ff291 【解决todo】drawIn 没用啦 2024-07-05 09:36:34 +08:00
cherishsince f147f05aeb 【解决todo】增加重新生成按钮 2024-07-05 09:35:33 +08:00
cherishsince 53de30c698 【优化】ImageVO 增加 finishTime 2024-07-05 09:16:38 +08:00
cherishsince afcb7e76b7 【解决todo】图片下载抽离到 download 2024-07-05 09:16:13 +08:00
cherishsince 557dc7d5d9 【修改todo】图片生产逻辑 @芋艿 2024-07-05 09:14:56 +08:00
cherishsince 8cc40626d6 【解决todo】sd 调整 sampler类型 2024-07-05 09:10:22 +08:00
cherishsince ca64760dd0 Merge remote-tracking branch 'origin/dev' into dev 2024-07-05 09:09:49 +08:00
cherishsince cd2f049619 【解决todo】使用 finishTime 2024-07-05 09:09:38 +08:00
YunaiV c09af1cbe1 【代码优化】AI:对话 deleteChatConversationMyByUnpinned 接口 2024-07-04 23:40:03 +08:00
芋道源码 cabfc5ccc0 !470 【新增】:mall 客服选择并发送图片信息
Merge pull request !470 from puhui999/dev-crm
2024-07-04 13:55:32 +00:00
puhui999 2b329d33e4 【新增】:mall 客服接入 websocket 实现消息实时拉取 2024-07-04 17:00:50 +08:00
puhui999 893cd5d8f5 【优化】:mall 客服优化消息样式,增加消息时间段显示 2024-07-04 16:23:11 +08:00
cherishsince edaf30a32b 【解决todo】资源图片修改为自己的 2024-07-04 16:17:00 +08:00
cherishsince b6ff9ede11 【解决todo】handle命名 2024-07-04 16:01:08 +08:00
puhui999 e89b274e3f 【优化】:mall 客服消息组件抽离 2024-07-04 15:41:15 +08:00
puhui999 e45cade877 【新增】:mall 客服选择并发送图片信息 2024-07-04 15:28:34 +08:00
cherishsince bb34c2b75c 【增加】openai 重新生成 2024-07-04 15:01:19 +08:00
cherishsince 39facc2f49 【增加】midjourney 重新生成 2024-07-04 11:52:04 +08:00
cherishsince 807e9272a5 【增加】stable-diffusion 增加重新生成 2024-07-04 11:18:36 +08:00
cherishsince d974124918 【优化】中文判断 2024-07-04 11:10:59 +08:00
cherishsince 8f6e6fdb54 【优化】hasChinese 抽离 utils 2024-07-04 09:51:39 +08:00
cherishsince ed786b2db6 【增加】image 增加重新生成操作(值已经完成切换,还不能完全填充值) 2024-07-03 22:04:59 +08:00
cherishsince 5c560e2fbe 【增加】mj 增加参考图 2024-07-03 20:21:08 +08:00
cherishsince 0e755acf52 【sd】增加中文判断 2024-07-03 20:17:33 +08:00
cherishsince 16d53bbf4b Revert "【sd】增加中文判断"
This reverts commit 47636a8a87a3f4b4d4e1bd36ca05eb65b9a66167.
2024-07-03 20:17:33 +08:00
cherishsince 9c43594010 【sd】增加中文判断 2024-07-03 20:17:33 +08:00
puhui999 b0b62eb250 【优化】:mall 客服表情包存放到本地使用 2024-07-03 17:51:58 +08:00
YunaiV 33cf98e306 【代码优化】AI:增加枚举类 2024-07-03 13:52:00 +08:00
YunaiV 8da1c04b55 【代码评审】MALL:review 客服逻辑 2024-07-02 20:49:40 +08:00
芋道源码 8d759b2a0b !468 【新增】:mall 客服
Merge pull request !468 from puhui999/dev-crm
2024-07-02 12:40:46 +00:00
puhui999 00619ca6db 【新增】:mall 客服图片消息显示 2024-07-02 17:31:26 +08:00
puhui999 91c262fb24 【新增】:mall 客服使用轮训模拟 websocket 2024-07-02 17:10:53 +08:00
puhui999 9c05ff35db 【新增】:mall 客服实现 emoji 表情选择和消息发送 2024-07-02 16:45:32 +08:00
puhui999 1abfec766e Merge remote-tracking branch 'refs/remotes/yudao/dev' into dev-crm 2024-07-01 17:17:47 +08:00
puhui999 3d5cb15eae 【新增】:mall 客服消息样式设计 2024-07-01 17:16:48 +08:00
puhui999 7a6f5c2db8 【新增】:mall 客服消息样式设计 2024-07-01 17:11:47 +08:00
puhui999 d3b4063b94 【新增】:mall 客服消息样式设计 2024-07-01 16:15:27 +08:00
puhui999 d3614cbbac 【新增】:mall 客服初始化 2024-07-01 11:36:07 +08:00
cherishsince f19e8c4d0a 【修改todo】增加 sd 各种参数 2024-06-30 16:10:45 +08:00
YunaiV f98f794f77 【代码优化】AI:音乐、图片的更新状态的接口调整 2024-06-29 09:47:11 +08:00
YunaiV 68c573d902 【代码评审】AI:图片 SD 的接入 2024-06-28 23:03:55 +08:00
YunaiV d800143a88 【代码优化】AI:图片轮询实现 2024-06-28 21:18:21 +08:00
cherishsince 9983dc5bb9 【解决todo】如果有生成中的图片,轮询改成 get 接口去轮询,不基于 page 轮询 2024-06-28 17:15:00 +08:00
cherishsince 906169f9be Merge remote-tracking branch 'origin/dev' into dev
# Conflicts:
#	src/views/ai/image/ImageTask.vue
2024-06-28 16:45:21 +08:00
cherishsince 6f9cb4f8f2 【解决todo】如果有生成中的图片,轮询改成 get 接口去轮询,不基于 page 轮询 2024-06-28 16:41:12 +08:00
YunaiV c0e51bd7aa 【功能新增】AI:音乐管理 100% 2024-06-28 09:49:17 +08:00
xiaohong e3c46cab53 feat: 调整ai music 页面文件结构 2024-06-28 09:26:58 +08:00
YunaiV 440ad58a77 Merge remote-tracking branch 'origin/dev' into dev 2024-06-27 23:08:55 +08:00
YunaiV 8d33476472 【功能新增】AI:音乐管理 50% 2024-06-27 23:08:50 +08:00
xiaohong 75d0be9742 feat: 将视频列表改成单排 2024-06-27 22:31:49 +08:00
cherishsince 8daf9bb347 Merge remote-tracking branch 'origin/dev' into dev
# Conflicts:
#	src/views/ai/image/ImageTask.vue
2024-06-27 18:12:21 +08:00
cherishsince 14c9e33b60 【解决todo】get 轮训,临时提交 2024-06-27 18:11:22 +08:00
罗婷(luot1) 2da5cc34a8 Merge branch 'dev' of https://gitee.com/yudaocode/yudao-ui-admin-vue3 into dev 2024-06-27 17:50:54 +08:00
罗婷(luot1) 9516e7184f feat: 新增AI music相关页面以及组件,调整了APPview页面min-height为height,注释了登录时dict接口获取,在contentWrap组件新增了bodystyle属性 2024-06-27 17:50:48 +08:00
jason fae712b9d4 仿钉钉流程设计- 表单字段权限设置 2024-06-27 09:32:38 +08:00
YunaiV 39d3995ea0 【功能新增】AI:图片管理 2024-06-26 23:18:39 +08:00
OnPeaceOfMind 6e7812a11b fix: 🐞 修复会员和售后退款中订和单明细查询传递参数错误
Signed-off-by: OnPeaceOfMind <onpeaceofmind@qq.com>
2024-06-26 11:44:07 +00:00
YunaiV 36dc3c0b5c 【代码调整】AI:MJ 二次 Action 的接口修改 2024-06-26 12:38:21 +08:00
AhJindeg ef9ed50533 fix: 🐞 update axios interceptors response 2024-06-25 11:30:24 +08:00
AhJindeg bd4f2b8b7c fix: 🐞 add result field to JobLogDetail el-descriptions-item 2024-06-25 11:21:16 +08:00
最后的梦想 d66664b3d4 update src/components/bpmnProcessDesigner/package/penal/flow-condition/FlowCondition.vue.
修复:流程设计器bpmn流转条件-流转类型选择默认流转路径,未正确显示/

Signed-off-by: 最后的梦想 <1971063665@qq.com>
2024-06-24 01:53:12 +00:00
YunaiV 6ad29c6a39 Merge branch 'master' of https://gitee.com/yudaocode/yudao-ui-admin-vue3 into feature/bpm 2024-06-23 11:29:30 +08:00
YunaiV 64a691a3c7 Merge branch 'dev' of https://gitee.com/yudaocode/yudao-ui-admin-vue3 into feature/bpm 2024-06-23 11:29:23 +08:00
芋道源码 7fe8b8b7a9 !456 fix: #I9TIYS
Merge pull request !456 from ms_think/dev
2024-06-22 06:56:02 +00:00
芋道源码 a0ecfed693 !461 【轻量级 PR】 /mp/open/ -> /admin-api/mp/open/
Merge pull request !461 from 21克的爱情/master
2024-06-22 06:54:13 +00:00
芋道源码 ca7077caf6 !459 fix: 流程详情的表单不显示数据问题
Merge pull request !459 from OlyLis/master
2024-06-22 06:52:26 +00:00
芋道源码 1bbed80e2e !457 修复:解决操作日志无法搜索操作人的问题
Merge pull request !457 from 杨宇庆/N/A
2024-06-22 06:50:06 +00:00
芋道源码 0895f9ffcb !455 fix: fix calculation method of isLocal
Merge pull request !455 from AhJindeg/hotfix/icon
2024-06-22 06:49:33 +00:00
芋道源码 210c4d4024 !453 fix: Add StringDictDataType type by imitating getIntDictOptions
Merge pull request !453 from AhJindeg/hotfix/dict
2024-06-22 06:47:26 +00:00
芋道源码 2cd98a438f !462 update src/api/mall/promotion/seckill/seckillConfig.ts.
Merge pull request !462 from 21克的爱情/N/A
2024-06-22 06:46:12 +00:00
cherishsince 33366efe11 【增加】StableDiffusion 2024-06-21 15:26:08 +08:00
jason 88356c7b2a 仿钉钉设计器- 节点增加校验逻辑 2024-06-21 09:59:16 +08:00
21克的爱情 1a04b7b9e7 update src/api/mall/promotion/seckill/seckillConfig.ts.
Signed-off-by: 21克的爱情 <raohong07@163.com>
2024-06-20 14:58:32 +00:00
21克的爱情 8eee46d85c /mp/open/ -> /admin-api/mp/open/
Signed-off-by: 21克的爱情 <raohong07@163.com>
2024-06-20 07:13:35 +00:00
jason ea1e51a655 仿钉钉设计器- 审批节点配置结构调整 2024-06-19 23:54:46 +08:00
jason 58fc91b810 仿钉钉设计器-字段权限顺序调整 2024-06-19 20:39:16 +08:00
cherishsince 918f35f824 【优化】element 转换 LoadingOptionsResolved 2024-06-19 10:44:48 +08:00
cherishsince bd80a6f34f 【增加】image task 增加分页 2024-06-19 10:41:33 +08:00
cherishsince 63f0a2058d 【优化】删除 image task 分页,改为 top 前多少数据 2024-06-18 17:18:55 +08:00
cherishsince dc31aeb24e 【优化】处理 image card 抽屉不显示问题 2024-06-18 16:58:23 +08:00
cherishsince 19c752e81d 【优化】调整内边距,让imag card 滚动底部有一些距离 2024-06-18 14:53:51 +08:00
cherishsince 05ba908a7f 【增加】增加 loading 2024-06-18 14:35:42 +08:00
cherishsince 8db7c7d92b 【增加】image task 增加滚动分页 2024-06-18 14:31:14 +08:00
cherishsince 990093c0cb 【优化】生成内容按钮增加 二次确认 2024-06-18 11:28:01 +08:00
cherishsince 27d7fe48c6 【增加】NIJI 增加版本控制 2024-06-18 11:02:41 +08:00
cherishsince 79819aed19 【增加】midjourney button 操作二次确认 2024-06-18 10:06:14 +08:00
jason 5ee0a7b946 仿钉钉流程设计器- 简化审批拒绝逻辑 2024-06-18 00:06:52 +08:00
芋道源码 3f3faaca9b Merge pull request #56 from DevDengChao/feat/extract-default-login-info
提取默认登录使用的租户与账号密码, 规避潜在的账户泄露问题
2024-06-15 18:18:37 +08:00
jason d5a7ae1865 仿钉钉流程设计器- 简化多人审批方式 2024-06-14 11:10:25 +08:00
duxz 490c4bde02 fix: 修复表单数据没有显示的问题 2024-06-13 10:04:38 +08:00
jason cab9553235 仿钉钉流程设计器 -会签按通过比例 2024-06-13 08:24:54 +08:00
杨宇庆 7f034724a9 修复:解决操作日志无法搜索操作人的问题
Signed-off-by: 杨宇庆 <hiyyq@qq.com>
2024-06-07 11:05:42 +00:00
YunaiV efcf64ed7d 【代码评审】AI:绘制功能的测试和 review 2024-06-06 20:17:40 +08:00
jason 632bcb9944 仿钉钉流程设计器- 通过只需一人,拒绝需要全员 2024-06-06 10:05:34 +08:00
cherishsince 4adc5677a0 【增加】增加 action 操作 2024-06-05 16:41:21 +08:00
cherishsince 1b070e720d 【优化】canvas 下载图片 2024-06-05 13:57:02 +08:00
cherishsince 520244eea9 【增加】Image 列表组件取消挂在 销毁定时刷 2024-06-05 13:54:36 +08:00
ZhouWei e83df37616 docs: update README 2024-06-05 12:44:50 +08:00
cherishsince c96f3cea61 【优化】增加 image mj 按钮回调 2024-06-05 09:51:33 +08:00
cherishsince 29e1426a79 【增加】Image midjourney 增加 click 事件 2024-06-04 17:38:07 +08:00
cherishsince 1be7713f56 【增加】Image midjourney 增加操作按钮 2024-06-04 17:37:52 +08:00
cherishsince 5876fdca10 【解决todo】 方法注释命名 2024-06-03 10:18:03 +08:00
cherishsince 8e821445c2 【优化】调整 ai Image 方法注释 2024-06-03 10:16:56 +08:00
cherishsince 9bd8d8e9cb 【增加】midjourney 增加版本号设置 2024-06-03 09:41:56 +08:00
jason e8d06c314e 仿钉钉流程设计器- 新增并行分支 2024-06-02 18:18:55 +08:00
YunaiV 3c4327e4dd 【代码评审】AI:绘制功能的测试和 review 2024-06-01 16:49:42 +08:00
YunaiV 1eacbe62d6 Merge remote-tracking branch 'origin/dev' into dev 2024-06-01 15:55:25 +08:00
YunaiV a2474c9c43 【修复】AI:对话管理不展示的问题 2024-06-01 15:55:19 +08:00
cherishsince cc9e11859d 【增加】midjourney 增加 width 和 height 2024-05-31 14:02:35 +08:00
jason 94cdb2ed29 仿钉钉流程设计器- 后端结构调整 2024-05-31 09:00:25 +08:00
ms_think f60b308dec 修改 点击 开启/关闭 按钮, 弹窗点击取消,列表页状态已更改 2024-05-30 09:01:22 +00:00
cherishsince 616fe2c3c1 【优化】midjourney 模型默认选中一个模型 2024-05-30 16:30:39 +08:00
cherishsince d1be8991b3 【增加】midjourney 提交任务回调 onDrawStart 、onDrawComplete 2024-05-30 16:26:12 +08:00
cherishsince 82fbb5e024 【优化】midjourney 提交,支持 nijj 切换 2024-05-30 16:25:31 +08:00
cherishsince 15a3e80d62 【midjourney】删除热词 2024-05-30 16:22:35 +08:00
cherishsince 6726a7c562 【优化】处理 size 改为 width 和 height 2024-05-30 16:16:56 +08:00
cherishsince 8a8cb159a4 【增加】Image card 组件增加异常展示 2024-05-30 16:14:50 +08:00
cherishsince 87ffd38dcd 【优化】调整 image 列表刷新时间 2024-05-30 16:12:42 +08:00
cherishsince 8f2c6ab0db 【增加】增加 midjourney 请求 2024-05-30 16:12:24 +08:00
AhJindeg cc39be8207 fix: 🐞 fix calculation method of isLocal 2024-05-30 14:48:12 +08:00
cherishsince b82391da0a 【解决todo】调整接口命名、和接口返回值 2024-05-29 18:07:54 +08:00
AhJindeg a9082d8b6f fix: 🐞 Add StringDictDataType type by imitating getIntDictOptions 2024-05-29 15:18:58 +08:00
cherishsince ecc924301d 【增加】AI Image 热词设置提示词 2024-05-28 15:13:32 +08:00
cherishsince 11ec263a64 【优化】处理抽屉中 绘画中的图片不能展示加载状态 2024-05-28 15:03:12 +08:00
cherishsince bbf7956f6d 【增加】Image 抽屉增加图片尺寸展示 2024-05-28 14:49:15 +08:00
cherishsince b0f26f64f7 【优化】调整 AI Image 抽屉展示卡片内容,和样式 2024-05-28 14:40:43 +08:00
cherishsince bd09ecf688 【调整】Image card 组件内容溢出问题 2024-05-28 14:30:03 +08:00
cherishsince a6ec43fd46 【增加】Image task 增加抽屉详细信息切换 2024-05-28 14:29:46 +08:00
cherishsince 0a9882e909 【增加】Ai Image 抽屉显示详细信息 2024-05-28 14:29:18 +08:00
cherishsince c8d26db4b4 【修改】AI Image 列表自动刷新改为5秒 2024-05-28 11:37:15 +08:00
cherishsince fdeedcfe7b 【增加】Image card 增加图片下载 2024-05-28 11:35:02 +08:00
cherishsince 2211618ada 【增加】AI Image 列表增加删除 2024-05-28 10:37:44 +08:00
cherishsince c87713f040 【增加】Dall 生成中 按钮控制 2024-05-28 10:27:57 +08:00
cherishsince 91fc46691e 【优化】优化 Image Card 加载中 2024-05-28 10:27:33 +08:00
cherishsince ad10328b73 【增加】AI Image 列表增加状态切换 2024-05-28 10:04:44 +08:00
cherishsince 0b8301cc1c 【增加】Ai Image 列表增加自动刷新 2024-05-28 09:51:58 +08:00
jason b768632b0c 仿钉钉流程设计器- 后端接口调整 2024-05-27 21:20:18 +08:00
cherishsince f74e8e6689 【增加】AI Image 增加生成中 ref 2024-05-27 18:17:37 +08:00
cherishsince 805745f384 【增加】Image 列表增加滚动。 2024-05-27 17:43:03 +08:00
cherishsince 824fb4d5ec 【增加】Image AI 监听 dall 生成完成,刷新图片列表 2024-05-27 17:35:50 +08:00
cherishsince d74677abd0 【增加】Image Task 公开刷新列表方法 2024-05-27 17:35:18 +08:00
cherishsince df5c3be7fa 【增加】dall 增加 onDrawComplete 回调 2024-05-27 17:34:59 +08:00
cherishsince cc60edf8d3 【调整】AI Image 任务列表,调整 card 间距 2024-05-27 17:20:03 +08:00
cherishsince d1e0270bee 【增加】增加 picUrl 2024-05-27 17:14:23 +08:00
cherishsince 5353531e8b 【增加】Image task 增加关联接口调用 2024-05-27 17:14:03 +08:00
cherishsince 9cad4d6054 【增加】AI Image 增加获取 image list 接口 2024-05-27 17:01:04 +08:00
cherishsince d9ebb61dc1 【增加】AI Image 增加 dall 绘画 2024-05-27 15:28:53 +08:00
cherishsince 2ae7838aeb 【增加】Dall 增加 style 选择 2024-05-27 14:40:10 +08:00
cherishsince fd4ef4b172 【优化】调整 image card 尺寸 2024-05-27 10:47:43 +08:00
cherishsince 959ee90810 【优化】修改 Image Task Card 按键类型 2024-05-26 21:56:10 +08:00
cherishsince cb7c5b7458 【优化】Image 抽屉,使用 Card 组件 2024-05-26 21:53:26 +08:00
cherishsince c06dd8e273 【优化】Image Task 使用 card 组件 2024-05-26 21:51:42 +08:00
cherishsince 4542337f4f 【增加】增加 Image Task Card 组件 2024-05-26 21:50:59 +08:00
cherishsince 376ec1a61c 【增加】image list 接口 mock 2024-05-26 21:50:46 +08:00
cherishsince 51e28065ee 【增加】ImageDetail mock 2024-05-26 21:18:23 +08:00
cherishsince 3d5879ecb8 【增加】AI Image 增加 detail vo 定义 2024-05-26 21:05:53 +08:00
cherishsince 61418a1a1b 【增加】AI image 增加 Image Task 2024-05-26 21:00:00 +08:00
cherishsince 9c8d10b70c 【增加】AI image 增加图片详情,抽屉 2024-05-26 20:59:42 +08:00
cherishsince 131e071b2d 【增加】Ai Image task 任务列表 2024-05-26 20:47:29 +08:00
cherishsince bfa396b127 【优化】替换 midjourney 模型图片 2024-05-26 20:22:36 +08:00
cherishsince ffa691c4ee 【优化】修改模型名称 2024-05-26 20:08:43 +08:00
jason 0e7dbbb04d 仿钉钉流程设计器- 审批节点配置新增拒绝处理方式 2024-05-26 11:02:04 +08:00
cherishsince 86f3ae2301 【优化】AI image dall3 调整模型显示的名字 2024-05-25 21:20:43 +08:00
cherishsince 12e87cc0f2 【增加】Ai Image midjourney 增加,提示词、模型、尺寸 2024-05-25 21:18:43 +08:00
cherishsince f156ba1877 【增加】AI Image 增加model 配置切换 2024-05-25 21:12:36 +08:00
cherishsince 60de1b9737 【增加】Dall3 增加图片生成 (function 待实现) 2024-05-25 21:06:58 +08:00
cherishsince 5232a2bf3f 【增加】Dall3 增加图片尺寸选择 2024-05-25 21:01:34 +08:00
cherishsince 9460c264eb 【增加】DALL3 增加提示词、随机热词、模型选择 ui 2024-05-25 16:21:23 +08:00
cherishsince df6cca0731 【优化】调整 Ai Image 配置区域样式 2024-05-25 16:21:00 +08:00
cherishsince e801ea949b 【创建】dall3 和 midjourney 页面 2024-05-25 15:36:41 +08:00
cherishsince 3d5bef78b3 【增加】AI Image 框架 2024-05-25 15:36:21 +08:00
cherishsince a46185e4dd 【升级】升级 element-plus 2.6.1 -> 2.7.0(需要 segmented 组件) 2024-05-25 15:35:56 +08:00
YunaiV cdf0a1137d 【优化】AI:对话的 user、role 头像从前端获取 2024-05-25 11:49:23 +08:00
YunaiV 46eb89695d 【代码评审】AI:review 聊天对话的实现 2024-05-25 10:54:04 +08:00
YunaiV 4c259cd60f 【新增】AI:对话管理 100% 2024-05-25 08:59:56 +08:00
YunaiV d172d3db73 【新增】AI:对话管理 50% 2024-05-25 00:08:40 +08:00
YunaiV ca40047f0b 【新增】AI:新建对话时,不使用默认角色 2024-05-24 20:58:31 +08:00
YunaiV ac18d871ca Merge branch 'dev' of https://gitee.com/yudaocode/yudao-ui-admin-vue3 into dev
# Conflicts:
#	src/views/ai/chat/index.vue
2024-05-24 20:54:10 +08:00
cherishsince 24c459557d 【解决todo】 清空输入框 2024-05-24 16:50:55 +08:00
cherishsince 63693f7a83 【解决todo】chat 默认选中对话 2024-05-24 16:42:27 +08:00
cherishsince 09c03abf51 【优化】AI 对话增加回答中,不能删除 2024-05-24 16:11:16 +08:00
YunaiV 8764c6c471 【新增】AI:新建对话时,不使用默认角色 2024-05-24 15:39:05 +08:00
cherishsince 8fb54dbb7c 【解决todo】Chat 对话默认选中第一个 2024-05-24 10:39:12 +08:00
cherishsince bebf1e7ae3 【解决todo】Chat 聊天,新建对话清空输入框 2024-05-24 10:35:11 +08:00
cherishsince 03c6a6ce59 【解决todo】Chat message 增加刷新和编辑 2024-05-24 10:32:08 +08:00
jason 142b0f7203 仿钉钉流程设计器- 审批节点超时处理 2024-05-23 22:43:22 +08:00
cherishsince f1beb488ce 【解决todo】AI chat 标题后显示对话数量 2024-05-22 17:17:43 +08:00
cherishsince 89deddb9e0 【解决todo】AI 删除对话,不默认选中 2024-05-22 17:08:13 +08:00
cherishsince e7403ba2a4 【增加】AI chat 增加 new chat 2024-05-22 17:07:54 +08:00
cherishsince aa93172c1d 【解决todo】AI Chat 增加 useContext 控制 2024-05-22 15:14:17 +08:00
cherishsince 689d92dc66 【解决todo】AI 对话修改,避免切换对话 2024-05-22 11:23:06 +08:00
cherishsince fa4081d669 【优化】AI stream 优化,添加的临时role 头像对不上问题 2024-05-22 11:08:22 +08:00
cherishsince 4466c5b4ec 【解决todo】AI Chat stream 增加默认头像 2024-05-22 10:58:54 +08:00
cherishsince 431ae7b01b 【解决todo】AI Chat 转换用户头像、role头像 2024-05-22 10:30:00 +08:00
cherishsince 561d60bccd 【解决todo】AI Chat 增加清理 message 2024-05-22 09:57:46 +08:00
cherishsince d603f1edd0 【优化】AI 对话中,不允许切换对话 2024-05-21 22:44:37 +08:00
cherishsince 8f2b81bb79 【优化】AI 切换对话,先回调成功再切换 2024-05-21 22:44:15 +08:00
cherishsince 63638ce4a1 【优化】try mkardown 组件异常,因为 stream 模型可能返回的信息不全 2024-05-21 22:43:50 +08:00
cherishsince a96a2ec9ec 【优化】AI chat 默认选中对话,刷新增加加载中显示 2024-05-21 22:21:45 +08:00
cherishsince a431867f41 【优化】AI chat 发送按钮独立方法 2024-05-21 22:18:03 +08:00
cherishsince 32c6818ee8 【解决todo】AI 角色仓库,使用角色不创建对话问题 2024-05-21 22:07:56 +08:00
cherishsince f6698c0286 【解决todo】AI chat 输入框增加 shift + 回车 换行 2024-05-21 22:05:56 +08:00
cherishsince 2d7bf84593 【解决todo】AI 对话显示隐藏效果 2024-05-21 21:50:28 +08:00
cherishsince a8cf6b6f29 【解决todo】AI 角色仓库,公开仓库不显示 创建角色按钮 2024-05-21 21:19:49 +08:00
cherishsince 15b8ea5a0d 【优化】AI 角色仓库,分类间距 2024-05-21 18:21:29 +08:00
cherishsince c06de8095e 【解决todo】AI 角色仓库,增加全部分类筛选 2024-05-21 18:20:45 +08:00
cherishsince 0803e33d1d 【解决todo】AI Chat 头部模型按钮,如果模型名字过长,会把其他按钮挤出屏幕 2024-05-21 17:52:21 +08:00
DevDengChao d883b860ac refactor: 提取默认登录使用的租户与账号密码, 规避潜在的账户泄露问题 2024-05-21 17:44:37 +08:00
cherishsince 88c7dc52be 【优化】AI chat 对话宽 margin 调整,让回到底部按钮有更多空间 2024-05-21 17:30:48 +08:00
cherishsince 5aa8261b7b 【优化】AI 对话,如果删除的是选中的对话,需要重新选中 2024-05-21 17:28:02 +08:00
cherishsince da75b1758f 【解决todo】AI 对话过多,会超出窗口问题 2024-05-21 17:07:37 +08:00
cherishsince 7237da9764 【bug】解决 AI chat stream 返回 content === '' 会结束对话问题 2024-05-21 16:40:38 +08:00
cherishsince 3634fca835 【解决todo】AI 更新对话标题,chat 窗口也更新 title 2024-05-21 16:38:09 +08:00
cherishsince 24ead9f09b 【优化】AI 对话,处理id 为空,对话不存在情况 2024-05-21 16:21:14 +08:00
cherishsince 15e7a260bf 【解决todo】Ai Chat 增加回到顶部 2024-05-21 16:09:33 +08:00
cherishsince e3bc50e4fc 【解决todo】AI chat 增加回到底部 2024-05-21 16:05:44 +08:00
cherishsince 6a03b7637e 【解决todo】AI 对话增加加载中。 2024-05-21 14:24:21 +08:00
cherishsince 8b0d598d8a 【解决todo】AI 对话前后,增加加载中页面 2024-05-21 13:56:11 +08:00
cherishsince 8ca3d26cbb 【优化】AI Chat 复制按钮和删除按钮间距 2024-05-21 12:07:53 +08:00
cherishsince e896e5bb27 【解决todo】AI chat 头部修改模型,不更新问题 2024-05-21 11:46:30 +08:00
cherishsince 939e3790ee 【解决todo】角色仓库,公共仓库不显示更多操作 2024-05-21 11:40:15 +08:00
cherishsince 8c81a9fc19 【已解决todo】AI 对话 删除、编辑 不切换对话 2024-05-21 11:37:44 +08:00
cherishsince 5c15b7f503 【解决todo】处理 AI 对话排序 2024-05-21 11:33:28 +08:00
cherishsince f164225bbe 【解决todo】 ai 对话列表间距 2024-05-21 10:33:21 +08:00
cherishsince 61fa0f65ab 【优化】优化 AI 角色仓库 Card 底部预留空间 2024-05-21 10:15:46 +08:00
cherishsince ac436ae186 【解决todo】AI 角色仓库,搜索改为右侧所搜 2024-05-21 10:13:30 +08:00
cherishsince 5871464681 【todo】AI Chat 已删除 Message 组件中的复制、删除文字 2024-05-21 10:10:14 +08:00
cherishsince 138cf760b2 【todo】AI 角色仓库,调整 card 大小 2024-05-21 09:52:02 +08:00
cherishsince cb64b940a5 【todo】解决 AI 对话 置顶、编辑 按钮,hover效果 2024-05-21 09:45:39 +08:00
jason 03433278be Merge branch 'feature/bpm' of https://gitee.com/yudaocode/yudao-ui-admin-vue3 into feature/bpm 2024-05-20 21:34:19 +08:00
jason f42c6d8375 仿钉钉流程设计器- 审批人设置新增发起人自己策略 2024-05-20 21:32:12 +08:00
DevDengChao afe28d83c9 feat: 新增快速开关菜单的按钮 2024-05-20 11:02:34 +08:00
YunaiV 5ac92cf362 Merge branch 'master' of https://gitee.com/yudaocode/yudao-ui-admin-vue3 into feature/bpm 2024-05-19 10:54:11 +08:00
cherishsince 264cad5301 Merge remote-tracking branch 'origin/dev' into dev 2024-05-18 22:03:00 +08:00
cherishsince 7de0b075cb 【优化】处理btn全局样式问题 2024-05-18 22:02:52 +08:00
芋道源码 e04a8eeea9 !449 fix:恢复 form-create [select、radio、checkbox] 组件
Merge pull request !449 from puhui999/dev-crm
2024-05-18 13:28:04 +00:00
YunaiV c2b439c463 【新增】AI:聊天角色的温度、token 数的 input-number 组件 2024-05-18 19:50:40 +08:00
cherishsince de754a6a6e Merge remote-tracking branch 'origin/dev' into dev 2024-05-18 00:02:23 +08:00
cherishsince 8bea8ce623 【优化】AI 切换按钮,并排按钮 2024-05-18 00:02:15 +08:00
cherishsince a33c0887b0 【优化】AI 聊天处理双滚动条问题 2024-05-17 23:57:59 +08:00
cherishsince 559cd48c4f 【优化】Ai 对话 Message 非 user 类型显示到左边 2024-05-17 23:48:18 +08:00
cherishsince 07241b5efb 【处理】全局滚动条问题 2024-05-17 23:47:53 +08:00
cherishsince 2be1411179 【优化】解决全局有滚动条问题 2024-05-17 23:45:50 +08:00
cherishsince b9460d2028 【优化】解决全局有滚动条问题 2024-05-17 23:44:11 +08:00
cherishsince 959731609f 【优化】AI 聊天卡顿问题 2024-05-17 23:27:13 +08:00
cherishsince d8dcc911b5 【增加】AI 对话增加置顶,和取消置顶 2024-05-17 22:58:44 +08:00
cherishsince 1c8bdc7e7e 【优化】AI 对话,编辑、删除 改为 button icon 2024-05-17 22:53:07 +08:00
cherishsince 7acc2fcb1b 【增加】AI 对话增加搜索 2024-05-17 22:44:04 +08:00
cherishsince 2b38e62c85 【优化】临时提交 2024-05-17 18:25:34 +08:00
cherishsince 0569dd1a26 【优化】AI 发送消息的input,不能滚动 2024-05-17 18:12:01 +08:00
cherishsince 43a41290a0 【优化】Chat 字体滚动,如果stream结束,开始加速 2024-05-17 18:08:57 +08:00
cherishsince a3c5d253b3 【优化】Chat 字体滚动,如果stream结束,开始加速 2024-05-17 18:07:54 +08:00
cherishsince 055abf62cd 【增加】AI Chat 增加回答字体滚动效果 2024-05-17 18:01:06 +08:00
cherishsince ca2b7202e6 【调整】AI 对话调整,提示词发送 2024-05-17 17:21:30 +08:00
cherishsince b6c654f039 【优化】调整markdown 样式 2024-05-17 17:14:28 +08:00
cherishsince 60fdbfb838 【优化】修改 Chat 提示词 2024-05-17 17:12:07 +08:00
cherishsince f6f786f1b6 【增加】AI 聊天发送,判断是否存在对话 2024-05-17 17:11:23 +08:00
cherishsince 1a1e53ae70 【增加】默认选中一个对话 2024-05-17 17:08:09 +08:00
cherishsince fc31528367 【增加】AI Chat 应道页面 2024-05-17 17:07:57 +08:00
cherishsince 48b3b08f0a 【优化】删除没用的 console 2024-05-17 16:13:42 +08:00
cherishsince cfdceca9f3 【优化】AI 抽离代码后,代码复制失效问题 2024-05-17 16:12:32 +08:00
cherishsince 0fef28e4a5 【优化】角色仓库底部留空 2024-05-17 16:05:21 +08:00
cherishsince efaf9ea96c 【优化】AI 对话角色抽屉,弹出比例 2024-05-17 16:03:13 +08:00
cherishsince 68762e73a2 【优化】处理 AI 角色搜索换行问题 2024-05-17 16:00:00 +08:00
cherishsince d5ffc80ea5 【增加】Ai 角色搜索,重置分页,不然会搜索不到 2024-05-17 15:35:13 +08:00
cherishsince 0d44b6cb37 【增加滚动分页】 2024-05-17 15:30:50 +08:00
cherishsince da65de038e 【优化】调整角色分页大小 2024-05-17 10:30:05 +08:00
cherishsince 80746d20fd 【增加】对话增加排序 2024-05-16 23:49:03 +08:00
cherishsince c3884c5dfd 【增加】AI Chat 抽离 Message 2024-05-16 23:39:31 +08:00
cherishsince 222a841226 【增加】AI 对话删除,重置 Chat 聊天 2024-05-16 23:21:31 +08:00
cherishsince 934d5e7ca8 【优化】修改对话Id类型 2024-05-16 23:21:02 +08:00
cherishsince dbca077f31 【优化】修改对话Id类型 2024-05-16 23:20:58 +08:00
cherishsince 7ab9aa77b8 【增加】Chat 对话增加更新选中 2024-05-16 23:20:44 +08:00
cherishsince 6fc5f8c685 【优化】AI 对话创建对话切换对话问题 2024-05-16 22:46:49 +08:00
cherishsince 1a681c2063 【优化】AI 对话,切换的id问题 2024-05-16 20:34:19 +08:00
cherishsince 58d3d1ed9a 【优化】删除没有的import 2024-05-16 20:08:32 +08:00
cherishsince 22081cbd48 【优化】AI 切换对话,动态切换 chat 标题 2024-05-16 19:43:51 +08:00
cherishsince b7d5ce4bc5 【优化】AI Chat 预设角色调整 2024-05-16 19:43:18 +08:00
cherishsince e0b38f5804 【优化】AI Chat 对话自动滚动 2024-05-16 18:34:19 +08:00
cherishsince 482ce62370 【优化】Ai 对话解耦 2024-05-16 18:29:42 +08:00
puhui999 bc8948eecf Merge remote-tracking branch 'refs/remotes/yudao/dev' into dev-crm 2024-05-16 17:05:54 +08:00
puhui999 a9994970fc fix:恢复 form-create [select、radio、checkbox] 组件 2024-05-16 17:05:00 +08:00
cherishsince 91593d5d40 【优化】AI Chat 抽离 Markdown 渲染 2024-05-16 16:04:21 +08:00
cherishsince ac9e5846c4 【增加】AI Chat 增加代码高亮(highlight)、实时渲染组件 2024-05-16 16:03:34 +08:00
cherishsince 9c370f729a 【优化】增加对话,切换message 2024-05-16 15:09:20 +08:00
cherishsince 36beffe140 【增加】清空 Chat 对话 2024-05-16 12:09:39 +08:00
cherishsince f21991f4fc 【增加】AI 对话增加 GROUP 分组 2024-05-16 11:28:31 +08:00
cherishsince ad02983098 【增加】AI ts 增加更新时间 2024-05-16 11:28:04 +08:00
cherishsince 25d346c201 【增加】AI Chat 角色仓库调用 2024-05-16 09:34:53 +08:00
cherishsince 1a56021e75 【优化】兼容 AI chat 调用 2024-05-16 09:34:30 +08:00
cherishsince da66aead54 【增加】增加对话切换 2024-05-16 00:28:24 +08:00
cherishsince f14032d69d 【增加】AI 配置 Chat角色 2024-05-16 00:18:29 +08:00
cherishsince 9658af7c04 【增加】AI 角色调整 2024-05-15 23:57:58 +08:00
cherishsince 490b11aa3a 【增加】AI 角色使用 2024-05-15 23:57:41 +08:00
cherishsince e7643c0343 【优化】调整事件触发范围 2024-05-15 23:12:53 +08:00
cherishsince 5c02e79105 Merge remote-tracking branch 'origin/dev' into dev 2024-05-15 23:11:49 +08:00
cherishsince b2c15ab2cb 【增加】AI 角色定制 2024-05-15 23:11:40 +08:00
YunaiV 4d3c5ef7c1 【新增】AI:流式发送消息的微调,统一成单接口 2024-05-15 23:06:27 +08:00
YunaiV 83b9332125 【新增】AI:聊天对话的删除功能 2024-05-15 20:32:58 +08:00
YunaiV 3d83f4928a 【新增】AI:聊天对话的更新模型 2024-05-15 19:45:19 +08:00
cherishsince c06bc71020 【增加】增加仓库搜索 2024-05-15 18:31:07 +08:00
cherishsince 3e0da37e16 【增加】增加仓库分类 2024-05-15 18:16:00 +08:00
cherishsince 986f50c6da 【增加】角色仓库 和 公开角色仓库 2024-05-15 16:55:37 +08:00
cherishsince 76903f6868 【增加】Header 组件 2024-05-15 16:31:14 +08:00
YunaiV bd5262e21d 【新增】AI:聊天更新的窗口 2024-05-15 13:00:31 +08:00
YunaiV ebd593bf92 【新增】AI:聊天对话的更新标题 2024-05-15 08:59:30 +08:00
YunaiV 67ece2ac5c 【新增】AI:对话接入聊天会话列表 2024-05-15 00:00:03 +08:00
YunaiV 051a610e56 【新增】AI:格式化 chat 对话的代码 2024-05-14 23:55:23 +08:00
cherishsince 3d15eadb5d 【优化】聊天 markdown 段落调整 2024-05-14 18:02:07 +08:00
cherishsince 175f9d58ad 【增加】拉去对话信息,选中切换的模型 2024-05-14 17:58:06 +08:00
cherishsince 8d907a76bf 【增加】增加输入法输入、普通输入监听 避免回车误触发送 2024-05-14 17:17:26 +08:00
cherishsince cea5b8b138 【增加】chat 增加 modal 切换 2024-05-14 15:32:30 +08:00
cherishsince 27569a746e 【增加】对话 modal 拉取 2024-05-14 13:43:56 +08:00
cherishsince 20b7403a6a Merge remote-tracking branch 'origin/dev' into dev 2024-05-13 23:22:50 +08:00
cherishsince 6c1298f7ef 【优化】采用 marked 重写 md 渲染,增加 code 复制功能 2024-05-13 23:22:42 +08:00
YunaiV df60cb617f Merge remote-tracking branch 'origin/dev' into dev 2024-05-13 21:46:39 +08:00
YunaiV c16bcef5a6 【新增】AI:聊天角色管理(80%) 2024-05-13 21:46:32 +08:00
cherishsince ffc134d26c Merge remote-tracking branch 'origin/dev' into dev 2024-05-13 21:39:53 +08:00
cherishsince 5ec08e9758 【增加】markdown-it 渲染、增加 highlight 高亮 2024-05-13 21:38:18 +08:00
jason 4f24141689 仿钉钉流程设计器- 条件规则问题修复 2024-05-13 20:54:14 +08:00
YunaiV 9e99807bd0 【新增】AI:聊天角色管理(50%) 2024-05-13 20:46:45 +08:00
cherishsince 10beee84fb 【增加】消息增加 marked 渲染 markdown 2024-05-13 18:26:28 +08:00
cherishsince 7f25419caf 【优化】处理空的对话,消息靠左问题 2024-05-13 17:52:39 +08:00
cherishsince b0de27a721 【增加】增加发送 stream 中可以进行取消 2024-05-13 17:49:18 +08:00
jason e1fc9039b2 仿钉钉流程设计器- bug 修复 2024-05-13 09:32:32 +08:00
jason 6cf69f04ab 仿钉钉流程设计器- 条件节点,新增条件规则配置 2024-05-13 09:13:23 +08:00
cherishsince c1b9baf8b6 【增加】stream 聊天进行中删除,调用 stream 控制器中断 2024-05-12 22:22:34 +08:00
cherishsince 151076a79e 【增加】增加 chat stream 功能(删除、复制、滚动删除、发送消息自动到最下面) 2024-05-12 19:02:45 +08:00
cherishsince b116d82376 【增加】增加 chat 聊天列表、删除、复制到粘贴板 2024-05-12 14:28:27 +08:00
芋道源码 be978f2e9f Merge pull request #53 from DevDengChao/fix/wx-pay-channels
fix: 修复无法配置微信原生支付与网站支付的问题
2024-05-11 23:26:30 +08:00
芋道源码 663c8b3824 Merge pull request #42 from JJBoy1995/fix-bug
【修复】商城管理首页统计数据显示问题
2024-05-11 23:25:05 +08:00
芋道源码 05e6c2c2df Merge pull request #50 from DevDengChao/fix/demo-order-return-url
fix: 修复实例订单完成支付后跳转到 404 页面的问题
2024-05-11 23:23:45 +08:00
芋道源码 057a980982 Merge pull request #45 from DevDengChao/fix/submit-product-property-by-enter
fix: 修复填写商品属性后按回车键导致页面刷新的问题
2024-05-11 22:34:23 +08:00
YunaiV 73e8516024 【代码评审】CRM:优化员工业绩统计的实现 2024-05-11 22:30:44 +08:00
YunaiV 8ba6095b1b Merge branch 'dev' of https://gitee.com/scholarli/yudao-ui-admin-vue3 into dev
# Conflicts:
#	src/views/crm/statistics/performance/components/ContractCountPerformance.vue
#	src/views/crm/statistics/performance/components/ContractPricePerformance.vue
#	src/views/crm/statistics/performance/components/ReceivablePricePerformance.vue
#	src/views/crm/statistics/performance/index.vue
2024-05-11 22:22:27 +08:00
YunaiV 43dcefdcf0 Merge branch 'master' of https://gitee.com/yudaocode/yudao-ui-admin-vue3 into dev 2024-05-11 22:20:19 +08:00
芋道源码 93bee8c82c !445 解决部门管理页面中,重置按钮失效问题
Merge pull request !445 from 刘岩Tony/N/A
2024-05-11 13:59:08 +00:00
芋道源码 0385d4dbb3 !442 update src/views/Login/SocialLogin.vue.
Merge pull request !442 from 天痕/N/A
2024-05-11 13:58:56 +00:00
芋道源码 aefee5211a !443 update src/views/Login/SocialLogin.vue.
Merge pull request !443 from 天痕/N/A
2024-05-11 13:57:12 +00:00
YunaiV dd2c4b6b3c 【新增】AI:API 模型管理(完善) 2024-05-11 19:46:33 +08:00
scholar f01dc0a539 优化代码实现。 2024-05-11 11:26:47 +08:00
DevDengChao 7883e3161d fix: 修复微信原生支付与网站支付无法配置的问题 2024-05-11 11:00:00 +08:00
DevDengChao 0275cb6dd7 fix: 修复 el-upload 组件提示 http-request 属性报错的问题 2024-05-11 10:59:59 +08:00
DevDengChao e1d2305ddd fix: 补充缺失的微信 Native 支付与 WAP 支付枚举 2024-05-11 10:59:59 +08:00
cherishsince b19d56ad02 【优化】调整 right 对话 头像距离问题 2024-05-10 23:38:44 +08:00
cherishsince 0887c46f14 Merge remote-tracking branch 'origin/dev' into dev 2024-05-10 23:36:05 +08:00
cherishsince 9d322c3a94 【添加】调整ui 增加 chat对话和发送 2024-05-10 23:35:47 +08:00
YunaiV 1776217f1c 【新增】AI:API 模型管理 2024-05-10 22:48:33 +08:00
DevDengChao 79f011fe17 fix: 修复实例订单完成支付后跳转到 404 页面的问题 2024-05-10 10:24:57 +08:00
芋道源码 f5474840b3 !444 oa请假,修复列表展示的状态字段取值错误
Merge pull request !444 from syubun/master
2024-05-10 00:40:49 +00:00
芋道源码 be13eb1d0d !446 form-create: 优化 select options 解析,增加 el 表达式解析、自定义函数解析
Merge pull request !446 from puhui999/dev-crm
2024-05-10 00:31:00 +00:00
YunaiV 02fe7e31d0 【新增】AI:API 密钥管理 2024-05-09 23:02:57 +08:00
cherishsince 5525bc2257 【优化】优化 ai chat 主框架布局 2024-05-09 22:13:23 +08:00
puhui999 cb82578b27 Merge remote-tracking branch 'refs/remotes/yudao/dev' into dev-crm
# Conflicts:
#	src/components/FormCreate/src/components/useApiSelect.tsx
2024-05-09 18:04:17 +08:00
puhui999 24f2c49e0b form-create: 完善 select 远程搜索 2024-05-09 18:02:57 +08:00
puhui999 9cde488577 form-create: 完善 select 远程搜索 2024-05-09 17:30:49 +08:00
DevDengChao 1ce3343578 fix: 修复填写商品属性后按回车键导致页面刷新的问题 2024-05-09 15:02:45 +08:00
puhui999 40fe87920b form-create: 优化 select option 选项解析,增加 el 表达式解析、自定义函数解析 (data: any)=>{ label: string; value: any } 2024-05-09 14:35:57 +08:00
JJBoy 1cf286b057 【修复】商城管理首页统计数据显示问题
(cherry picked from commit 78dd2fa38a2d040c1c97d70cababc4f9265ac705)
2024-05-08 21:16:09 +08:00
jason 672db903f3 仿钉钉流程设计器- 审批节点,抄送节点增加表单字段权限配置 2024-05-08 20:04:25 +08:00
syubun e8f1b411ba 修改流程流转类型判断错误的问题 2024-05-08 15:13:51 +08:00
刘岩Tony 742456dd87 解决部门管理页面中,重置按钮失效问题
部门名称中的prop属性值写错了,会导致重置按钮不生效,已做相应更改

Signed-off-by: 刘岩Tony <345006662@qq.com>
2024-05-08 06:14:01 +00:00
syubun 657ad506a4 oa请假,修复列表展示的状态字段取值错误 2024-05-08 09:44:47 +08:00
jason 22af2dc2d9 仿钉钉流程设计器- 优化节点配置 2024-05-07 23:44:01 +08:00
YunaiV 6c1798097c Merge branch 'dev' of https://gitee.com/yudaocode/yudao-ui-admin-vue3 2024-05-07 22:20:42 +08:00
YunaiV 8454d1d3e5 Merge branch 'master' of https://gitee.com/yudaocode/yudao-ui-admin-vue3 2024-05-07 22:20:32 +08:00
芋道源码 9e25686c7c Merge pull request #39 from DevDengChao/fix/local-dev
fix: 修复由于 .env.local-dev 重命名导致的构建指令异常
2024-05-07 22:19:50 +08:00
YunaiV 760bab7d29 【修复】全局:id=0导致sqlserver的insert失败 2024-05-07 22:18:43 +08:00
YunaiV 3976e49e35 【新增】AI:新增 chat 对话界面(草稿状态) 2024-05-07 21:59:47 +08:00
天痕 7092e24098 update src/views/Login/SocialLogin.vue.
这里应该取反

Signed-off-by: 天痕 <614891294@qq.com>
2024-05-07 09:10:43 +00:00
天痕 eeae01e661 update src/views/Login/SocialLogin.vue.
这里已经是布尔值了,不用在判断为布尔值

Signed-off-by: 天痕 <614891294@qq.com>
2024-05-07 09:08:28 +00:00
DevDengChao ccd56f2dda fix: 修复由于 .env.local-dev 重命名导致的构建指令异常 2024-05-07 15:31:01 +08:00
YunaiV 9402b29684 Merge branch 'master' of https://gitee.com/yudaocode/yudao-ui-admin-vue3 into dev 2024-05-07 09:13:25 +08:00
芋道源码 e8e1467f27 !441 fix: id=0导致sqlserver的insert失败
Merge pull request !441 from dhb52/dev
2024-05-07 01:10:01 +00:00
dhb52 0fb70607d9 fix: id=0导致sqlserver的insert失败 2024-05-06 23:28:33 +08:00
芋道源码 a60826529b !440 fix: id=0导致sqlserver新增菜单失败
Merge pull request !440 from dhb52/N/A
2024-05-06 14:53:17 +00:00
芋道源码 99f8fa8253 !439 商品统计计数显示成价格了 update src/views/mall/statistics/product/components/ProductSummary.vue.
Merge pull request !439 from 山野羡民/N/A
2024-05-06 14:52:40 +00:00
YunaiV 0222eef6b5 【优化】全局:动态表单的注释、error log 打印 2024-05-06 22:51:26 +08:00
dhb52 c350fc466e fix: id=0导致sqlserver新增菜单失败
Signed-off-by: dhb52 <dhb52@126.com>
2024-05-06 14:43:52 +00:00
芋道源码 41cbabcf88 !435 form-create:字典选择器分离,重新封装 api 选择器。扩展字体图标。
Merge pull request !435 from puhui999/dev-crm
2024-05-06 14:41:02 +00:00
山野羡民 2101731f0b update src/views/mall/statistics/product/components/ProductSummary.vue.
商品统计计数显示有问题,数量显示成价格了

Signed-off-by: 山野羡民 <liyujiang_tk@yeah.net>
2024-05-06 01:55:15 +00:00
puhui999 bcf2f7a5dc Merge remote-tracking branch 'refs/remotes/yudao/dev' into dev-crm 2024-05-06 02:12:39 +08:00
puhui999 9f704fb8ff form-create: 字体图标扩展 2024-05-06 02:12:09 +08:00
puhui999 7c158af3cc form-create: 字典选择器分离,重新封装 api 选择器 2024-05-06 01:24:25 +08:00
scholar 449d1191ff fix同比环比数据计算的bug。 2024-05-04 22:28:37 +08:00
puhui999 c77526e8c5 form-create: 封装通用选择器 hook 2024-05-01 20:42:53 +08:00
puhui999 1434d7ddad Merge remote-tracking branch 'refs/remotes/yudao/dev' into dev-crm 2024-05-01 20:30:57 +08:00
puhui999 b4d85b782e form-create: 封装通用选择器 hook 2024-05-01 19:53:35 +08:00
puhui999 c1c21d826d form-create: 封装通用选择器 hook 2024-05-01 17:29:13 +08:00
puhui999 51e6887bde Merge remote-tracking branch 'refs/remotes/yudao/dev' into dev-crm 2024-05-01 14:52:16 +08:00
puhui999 1f1ac1f246 使用 tsx 封装 form-create 通用选择组件 2024-04-30 14:15:44 +08:00
jason e8193a0aa0 仿钉钉流程设计器- 完善条件分支节点 2024-04-30 00:10:17 +08:00
puhui999 21483448b9 Merge remote-tracking branch 'refs/remotes/yudao/dev' into dev-crm 2024-04-30 00:07:37 +08:00
puhui999 769b63d9ca form-create:移除自带的下拉选择器组件,使用 currencySelectRule 替代 2024-04-30 00:07:25 +08:00
jason 9a2dcf2004 仿钉钉流程设计器- 新增条件分支节点 2024-04-29 09:06:03 +08:00
jason 0d8d043250 仿钉钉流程设计器-修复一些问题 2024-04-28 21:53:34 +08:00
jason ee895d0752 仿钉钉流程设计器-抄送节点改造. 2024-04-27 22:17:04 +08:00
jason 676ed6bd44 仿钉钉流程设计器-前端审批人节点改造. 2024-04-27 10:45:53 +08:00
jason 931417928f 仿钉钉流程设计器-前端重构 2024-04-27 00:35:18 +08:00
jason 2589fbe560 code review 修改 2024-04-18 15:56:49 +08:00
jason 12548b0af2 Merge branch 'feature/bpm' of https://gitee.com/yudaocode/yudao-ui-admin-vue3 into feature/bpm 2024-04-14 10:29:06 +08:00
jason cfc0003388 仿钉钉设计流程:增加字段权限设置 2024-04-14 10:26:42 +08:00
YunaiV 4b2ff9f614 bpm:code review 钉钉流程设计器 2024-04-08 22:51:24 +08:00
jason 11b7cf32ca 仿钉钉设计流程:增加包容分支 2024-04-07 22:31:56 +08:00
jason 32d2eb11f0 仿钉钉设计流程:增加并行分支 2024-04-07 15:53:21 +08:00
jason 556cac8138 仿钉钉设计流程:获取保存的模型 2024-04-05 22:54:40 +08:00
jason f79c29d168 仿钉钉设计流程:增加抄送人节点 2024-04-05 13:04:12 +08:00
jason 4f839136c7 仿钉钉设计流程:增加发起人、条件分支节点 2024-04-02 20:56:51 +08:00
jason 253d707131 仿钉钉设计流程-30%: 获取仿钉钉流程模型数据结构 2024-03-29 19:56:45 +08:00
jason 627b822f15 仿钉钉设计流程后端接入-10% 2024-03-27 09:27:14 +08:00
jason cf28e42a26 Merge branch 'feature/bpm' of https://gitee.com/yudaocode/yudao-ui-admin-vue3 into feature/bpm 2024-03-24 20:40:59 +08:00
jason 4c4d13cdd0 改造审批设置. 整合系统中的任务的候选人策略 2024-03-24 20:35:53 +08:00
526 changed files with 34415 additions and 10103 deletions

No files matched your search

+5
View File
@@ -18,3 +18,8 @@ VITE_APP_DOCALERT_ENABLE=true
# 百度统计
VITE_APP_BAIDU_CODE = a1ff8825baa73c3a78eb96aa40325abc
# 默认账户密码
VITE_APP_DEFAULT_LOGIN_TENANT = 芋道源码
VITE_APP_DEFAULT_LOGIN_USERNAME = admin
VITE_APP_DEFAULT_LOGIN_PASSWORD = admin123
-2
View File
@@ -8,8 +8,6 @@ VITE_BASE_URL='http://api-dashboard.yudao.iocoder.cn'
# 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持S3服务
VITE_UPLOAD_TYPE=server
# 上传路径
VITE_UPLOAD_URL='http://api-dashboard.yudao.iocoder.cn/admin-api/infra/file/upload'
# 接口地址
VITE_API_URL=/admin-api
-2
View File
@@ -8,8 +8,6 @@ VITE_BASE_URL='http://localhost:48080'
# 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持 S3 服务
VITE_UPLOAD_TYPE=server
# 上传路径
VITE_UPLOAD_URL='http://localhost:48080/admin-api/infra/file/upload'
# 接口地址
VITE_API_URL=/admin-api
-2
View File
@@ -8,8 +8,6 @@ VITE_BASE_URL='http://localhost:48080'
# 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持S3服务
VITE_UPLOAD_TYPE=server
# 上传路径
VITE_UPLOAD_URL='http://localhost:48080/admin-api/infra/file/upload'
# 接口地址
VITE_API_URL=/admin-api
-2
View File
@@ -8,8 +8,6 @@ VITE_BASE_URL='http://api-dashboard.yudao.iocoder.cn'
# 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持S3服务
VITE_UPLOAD_TYPE=server
# 上传路径
VITE_UPLOAD_URL='http://api-dashboard.yudao.iocoder.cn/admin-api/infra/file/upload'
# 接口地址
VITE_API_URL=/admin-api
-2
View File
@@ -8,8 +8,6 @@ VITE_BASE_URL='http://localhost:48080'
# 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持S3服务
VITE_UPLOAD_TYPE=server
# 上传路径
VITE_UPLOAD_URL='http://localhost:48080/admin-api/infra/file/upload'
# 接口地址
VITE_API_URL=/admin-api
-1
View File
@@ -2,7 +2,6 @@ node_modules
.DS_Store
dist
dist-ssr
*.local
/dist*
pnpm-debug
auto-*.d.ts
Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 348 KiB

+3 -2
View File
@@ -83,10 +83,11 @@
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit"
"source.fixAll.eslint": "explicit",
"source.fixAll.stylelint": "explicit"
},
"[vue]": {
"editor.defaultFormatter": "rvest.vs-code-prettier-eslint"
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"i18n-ally.localesPaths": ["src/locales"],
"i18n-ally.keystyle": "nested",
+16 -19
View File
@@ -54,17 +54,16 @@
推荐 VS Code 开发,配合插件如下:
| 插件名 | 功能 |
|-------------------------------|--------------------------|
| TypeScript Vue Plugin (Volar) | 用于 TypeScript 的 Vue 插件 |
| Vue Language Features (Volar) | Vue3.0 语法支持 |
| unocss | unocss for vscode |
| Iconify IntelliSense | Iconify 预览和搜索 |
| i18n Ally | 国际化智能提示 |
| Stylelint | Css 格式化 |
| Prettier | 代码格式化 |
| ESLint | 脚本代码检查 |
| DotENV | env 文件高亮 |
| 插件名 | 功能 |
|-------------------------------|---------------------|
| Vue - Official | Vue 与 TypeScript 支持 |
| unocss | unocss for vscode |
| Iconify IntelliSense | Iconify 预览和搜索 |
| i18n Ally | 国际化智能提示 |
| Stylelint | Css 格式化 |
| Prettier | 代码格式化 |
| ESLint | 脚本代码检查 |
| DotENV | env 文件高亮 |
## 🔥 后端架构
@@ -192,26 +191,24 @@ ps:核心功能已经实现,正在对接微信小程序中...
### 商城系统
演示地址:<https://doc.iocoder.cn/mall-preview/>
![功能图](/.image/common/mall-feature.png)
![功能图](/.image/common/mall-preview.png)
_前端基于 crmeb uniapp 经过授权重构,优化代码实现,接入芋道快速开发平台_
演示地址:<https://doc.iocoder.cn/mall-preview/>
### ERP 系统
![功能图](/.image/common/erp-feature.png)
演示地址:<https://doc.iocoder.cn/erp-preview/>
![功能图](/.image/common/erp-feature.png)
### CRM 系统
![功能图](/.image/common/crm-feature.png)
演示地址:<https://doc.iocoder.cn/crm-preview/>
![功能图](/.image/common/crm-feature.png)
## 🐷 演示图
### 系统功能
+11 -1
View File
@@ -27,6 +27,12 @@ const include = [
'echarts-wordcloud',
'@wangeditor/editor',
'@wangeditor/editor-for-vue',
'@microsoft/fetch-event-source',
'markdown-it',
'markmap-view',
'markmap-lib',
'markmap-toolbar',
'highlight.js',
'element-plus',
'element-plus/es',
'element-plus/es/locale/lang/zh-cn',
@@ -104,7 +110,11 @@ const include = [
'element-plus/es/components/collapse/style/css',
'element-plus/es/components/collapse-item/style/css',
'element-plus/es/components/button-group/style/css',
'element-plus/es/components/text/style/css'
'element-plus/es/components/text/style/css',
'element-plus/es/components/segmented/style/css',
'@element-plus/icons-vue',
'element-plus/es/components/footer/style/css',
'element-plus/es/components/empty/style/css'
]
const exclude = ['@iconify/json']
+17 -11
View File
@@ -1,22 +1,22 @@
{
"name": "yudao-ui-admin-vue3",
"version": "2.1.0-snapshot",
"version": "2.3.0-snapshot",
"description": "基于vue3、vite4、element-plus、typesScript",
"author": "xingyu",
"private": false,
"scripts": {
"i": "pnpm install",
"dev": "vite",
"dev": "vite --mode env.local",
"dev-server": "vite --mode dev",
"ts:check": "vue-tsc --noEmit",
"build:local": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build",
"build:dev": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode local-dev",
"build:test": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode test",
"build:stage": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode stage",
"build:prod": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode prod",
"build:local": "node ./node_modules/vite/bin/vite.js build",
"build:dev": "node ./node_modules/vite/bin/vite.js build --mode dev",
"build:test": "node ./node_modules/vite/bin/vite.js build --mode test",
"build:stage": "node ./node_modules/vite/bin/vite.js build --mode stage",
"build:prod": "node ./node_modules/vite/bin/vite.js build --mode prod",
"serve:dev": "vite preview --mode dev",
"serve:prod": "vite preview --mode prod",
"preview": "pnpm build:local-dev && vite preview",
"preview": "pnpm build:local && vite preview",
"clean": "npx rimraf node_modules",
"clean:cache": "npx rimraf node_modules/.cache",
"lint:eslint": "eslint --fix --ext .js,.ts,.vue ./src",
@@ -29,6 +29,7 @@
"@form-create/designer": "^3.1.3",
"@form-create/element-ui": "^3.1.24",
"@iconify/iconify": "^3.1.1",
"@microsoft/fetch-event-source": "^2.0.1",
"@videojs-player/vue": "^1.0.0",
"@vueuse/core": "^10.9.0",
"@wangeditor/editor": "^5.1.23",
@@ -46,11 +47,16 @@
"driver.js": "^1.3.1",
"echarts": "^5.5.0",
"echarts-wordcloud": "^2.1.0",
"element-plus": "2.6.1",
"element-plus": "2.8.4",
"fast-xml-parser": "^4.3.2",
"highlight.js": "^11.9.0",
"jsencrypt": "^3.3.2",
"lodash-es": "^4.17.21",
"markdown-it": "^14.1.0",
"markmap-common": "^0.16.0",
"markmap-lib": "^0.16.1",
"markmap-toolbar": "^0.17.0",
"markmap-view": "^0.16.0",
"min-dash": "^4.1.1",
"mitt": "^3.0.1",
"nprogress": "^0.2.0",
@@ -83,8 +89,8 @@
"@types/qs": "^6.9.12",
"@typescript-eslint/eslint-plugin": "^7.1.0",
"@typescript-eslint/parser": "^7.1.0",
"@unocss/transformer-variant-group": "^0.58.5",
"@unocss/eslint-config": "^0.57.4",
"@unocss/transformer-variant-group": "^0.58.5",
"@vitejs/plugin-legacy": "^5.3.1",
"@vitejs/plugin-vue": "^5.0.4",
"@vitejs/plugin-vue-jsx": "^3.1.0",
@@ -124,7 +130,7 @@
"vite-plugin-progress": "^0.0.7",
"vite-plugin-purge-icons": "^0.10.0",
"vite-plugin-svg-icons": "^2.0.1",
"vite-plugin-top-level-await": "^1.3.1",
"vite-plugin-top-level-await": "^1.4.4",
"vue-eslint-parser": "^9.3.2",
"vue-tsc": "^1.8.27"
},
+7355 -5349
View File
File diff suppressed because it is too large. Load diff
+65
View File
@@ -0,0 +1,65 @@
import request from '@/config/axios'
// AI 聊天对话 VO
export interface ChatConversationVO {
id: number // ID 编号
userId: number // 用户编号
title: string // 对话标题
pinned: boolean // 是否置顶
roleId: number // 角色编号
modelId: number // 模型编号
model: string // 模型标志
temperature: number // 温度参数
maxTokens: number // 单条回复的最大 Token 数量
maxContexts: number // 上下文的最大 Message 数量
createTime?: Date // 创建时间
// 额外字段
systemMessage?: string // 角色设定
modelName?: string // 模型名字
roleAvatar?: string // 角色头像
modelMaxTokens?: string // 模型的单条回复的最大 Token 数量
modelMaxContexts?: string // 模型的上下文的最大 Message 数量
}
// AI 聊天对话 API
export const ChatConversationApi = {
// 获得【我的】聊天对话
getChatConversationMy: async (id: number) => {
return await request.get({ url: `/ai/chat/conversation/get-my?id=${id}` })
},
// 新增【我的】聊天对话
createChatConversationMy: async (data?: ChatConversationVO) => {
return await request.post({ url: `/ai/chat/conversation/create-my`, data })
},
// 更新【我的】聊天对话
updateChatConversationMy: async (data: ChatConversationVO) => {
return await request.put({ url: `/ai/chat/conversation/update-my`, data })
},
// 删除【我的】聊天对话
deleteChatConversationMy: async (id: string) => {
return await request.delete({ url: `/ai/chat/conversation/delete-my?id=${id}` })
},
// 删除【我的】所有对话,置顶除外
deleteChatConversationMyByUnpinned: async () => {
return await request.delete({ url: `/ai/chat/conversation/delete-by-unpinned` })
},
// 获得【我的】聊天对话列表
getChatConversationMyList: async () => {
return await request.get({ url: `/ai/chat/conversation/my-list` })
},
// 获得对话分页
getChatConversationPage: async (params: any) => {
return await request.get({ url: `/ai/chat/conversation/page`, params })
},
// 管理员删除消息
deleteChatConversationByAdmin: async (id: number) => {
return await request.delete({ url: `/ai/chat/conversation/delete-by-admin?id=${id}` })
}
}
+83
View File
@@ -0,0 +1,83 @@
import request from '@/config/axios'
import { fetchEventSource } from '@microsoft/fetch-event-source'
import { getAccessToken } from '@/utils/auth'
import { config } from '@/config/axios/config'
// 聊天VO
export interface ChatMessageVO {
id: number // 编号
conversationId: number // 对话编号
type: string // 消息类型
userId: string // 用户编号
roleId: string // 角色编号
model: number // 模型标志
modelId: number // 模型编号
content: string // 聊天内容
tokens: number // 消耗 Token 数量
createTime: Date // 创建时间
roleAvatar: string // 角色头像
userAvatar: string // 创建时间
}
// AI chat 聊天
export const ChatMessageApi = {
// 消息列表
getChatMessageListByConversationId: async (conversationId: number | null) => {
return await request.get({
url: `/ai/chat/message/list-by-conversation-id?conversationId=${conversationId}`
})
},
// 发送 Stream 消息
// 为什么不用 axios 呢?因为它不支持 SSE 调用
sendChatMessageStream: async (
conversationId: number,
content: string,
ctrl,
enableContext: boolean,
onMessage,
onError,
onClose
) => {
const token = getAccessToken()
return fetchEventSource(`${config.base_url}/ai/chat/message/send-stream`, {
method: 'post',
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${token}`
},
openWhenHidden: true,
body: JSON.stringify({
conversationId,
content,
useContext: enableContext
}),
onmessage: onMessage,
onerror: onError,
onclose: onClose,
signal: ctrl.signal
})
},
// 删除消息
deleteChatMessage: async (id: string) => {
return await request.delete({ url: `/ai/chat/message/delete?id=${id}` })
},
// 删除指定对话的消息
deleteByConversationId: async (conversationId: number) => {
return await request.delete({
url: `/ai/chat/message/delete-by-conversation-id?conversationId=${conversationId}`
})
},
// 获得消息分页
getChatMessagePage: async (params: any) => {
return await request.get({ url: '/ai/chat/message/page', params })
},
// 管理员删除消息
deleteChatMessageByAdmin: async (id: number) => {
return await request.delete({ url: `/ai/chat/message/delete-by-admin?id=${id}` })
}
}
+103
View File
@@ -0,0 +1,103 @@
import request from '@/config/axios'
// AI 绘图 VO
export interface ImageVO {
id: number // 编号
platform: string // 平台
model: string // 模型
prompt: string // 提示词
width: number // 图片宽度
height: number // 图片高度
status: number // 状态
publicStatus: boolean // 公开状态
picUrl: string // 任务地址
errorMessage: string // 错误信息
options: any // 配置 Map<string, string>
taskId: number // 任务编号
buttons: ImageMidjourneyButtonsVO[] // mj 操作按钮
createTime: Date // 创建时间
finishTime: Date // 完成时间
}
export interface ImageDrawReqVO {
platform: string // 平台
prompt: string // 提示词
model: string // 模型
style: string // 图像生成的风格
width: string // 图片宽度
height: string // 图片高度
options: object // 绘制参数,Map<String, String>
}
export interface ImageMidjourneyImagineReqVO {
prompt: string // 提示词
model: string // 模型 mj nijj
base64Array: string[] // size不能为空
width: string // 图片宽度
height: string // 图片高度
version: string // 版本
}
export interface ImageMidjourneyActionVO {
id: number // 图片编号
customId: string // MJ::JOB::upsample::1::85a4b4c1-8835-46c5-a15c-aea34fad1862 动作标识
}
export interface ImageMidjourneyButtonsVO {
customId: string // MJ::JOB::upsample::1::85a4b4c1-8835-46c5-a15c-aea34fad1862 动作标识
emoji: string // 图标 emoji
label: string // Make Variations 文本
style: number // 样式: 2(Primary)、3(Green)
}
// AI 图片 API
export const ImageApi = {
// 获取【我的】绘图分页
getImagePageMy: async (params: any) => {
return await request.get({ url: `/ai/image/my-page`, params })
},
// 获取【我的】绘图记录
getImageMy: async (id: number) => {
return await request.get({ url: `/ai/image/get-my?id=${id}` })
},
// 获取【我的】绘图记录列表
getImageListMyByIds: async (ids: number[]) => {
return await request.get({ url: `/ai/image/my-list-by-ids`, params: { ids: ids.join(',') } })
},
// 生成图片
drawImage: async (data: ImageDrawReqVO) => {
return await request.post({ url: `/ai/image/draw`, data })
},
// 删除【我的】绘画记录
deleteImageMy: async (id: number) => {
return await request.delete({ url: `/ai/image/delete-my?id=${id}` })
},
// ================ midjourney 专属 ================
// 【Midjourney】生成图片
midjourneyImagine: async (data: ImageMidjourneyImagineReqVO) => {
return await request.post({ url: `/ai/image/midjourney/imagine`, data })
},
// 【Midjourney】Action 操作(二次生成图片)
midjourneyAction: async (data: ImageMidjourneyActionVO) => {
return await request.post({ url: `/ai/image/midjourney/action`, data })
},
// ================ 绘图管理 ================
// 查询绘画分页
getImagePage: async (params: any) => {
return await request.get({ url: `/ai/image/page`, params })
},
// 更新绘画发布状态
updateImage: async (data: any) => {
return await request.put({ url: '/ai/image/update', data })
},
// 删除绘画
deleteImage: async (id: number) => {
return await request.delete({ url: `/ai/image/delete?id=` + id })
}
}
+60
View File
@@ -0,0 +1,60 @@
import { getAccessToken } from '@/utils/auth'
import { fetchEventSource } from '@microsoft/fetch-event-source'
import { config } from '@/config/axios/config'
import request from '@/config/axios' // AI 思维导图 VO
// AI 思维导图 VO
export interface MindMapVO {
id: number // 编号
userId: number // 用户编号
prompt: string // 生成内容提示
generatedContent: string // 生成的思维导图内容
platform: string // 平台
model: string // 模型
errorMessage: string // 错误信息
}
// AI 思维导图生成 VO
export interface AiMindMapGenerateReqVO {
prompt: string
}
export const AiMindMapApi = {
generateMindMap: ({
data,
onClose,
onMessage,
onError,
ctrl
}: {
data: AiMindMapGenerateReqVO
onMessage?: (res: any) => void
onError?: (...args: any[]) => void
onClose?: (...args: any[]) => void
ctrl: AbortController
}) => {
const token = getAccessToken()
return fetchEventSource(`${config.base_url}/ai/mind-map/generate-stream`, {
method: 'post',
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${token}`
},
openWhenHidden: true,
body: JSON.stringify(data),
onmessage: onMessage,
onerror: onError,
onclose: onClose,
signal: ctrl.signal
})
},
// 查询思维导图分页
getMindMapPage: async (params: any) => {
return await request.get({ url: `/ai/mind-map/page`, params })
},
// 删除思维导图
deleteMindMap: async (id: number) => {
return await request.delete({ url: `/ai/mind-map/delete?id=` + id })
}
}
+44
View File
@@ -0,0 +1,44 @@
import request from '@/config/axios'
// AI API 密钥 VO
export interface ApiKeyVO {
id: number // 编号
name: string // 名称
apiKey: string // 密钥
platform: string // 平台
url: string // 自定义 API 地址
status: number // 状态
}
// AI API 密钥 API
export const ApiKeyApi = {
// 查询 API 密钥分页
getApiKeyPage: async (params: any) => {
return await request.get({ url: `/ai/api-key/page`, params })
},
// 获得 API 密钥列表
getApiKeySimpleList: async () => {
return await request.get({ url: `/ai/api-key/simple-list` })
},
// 查询 API 密钥详情
getApiKey: async (id: number) => {
return await request.get({ url: `/ai/api-key/get?id=` + id })
},
// 新增 API 密钥
createApiKey: async (data: ApiKeyVO) => {
return await request.post({ url: `/ai/api-key/create`, data })
},
// 修改 API 密钥
updateApiKey: async (data: ApiKeyVO) => {
return await request.put({ url: `/ai/api-key/update`, data })
},
// 删除 API 密钥
deleteApiKey: async (id: number) => {
return await request.delete({ url: `/ai/api-key/delete?id=` + id })
}
}
+53
View File
@@ -0,0 +1,53 @@
import request from '@/config/axios'
// AI 聊天模型 VO
export interface ChatModelVO {
id: number // 编号
keyId: number // API 秘钥编号
name: string // 模型名字
model: string // 模型标识
platform: string // 模型平台
sort: number // 排序
status: number // 状态
temperature: number // 温度参数
maxTokens: number // 单条回复的最大 Token 数量
maxContexts: number // 上下文的最大 Message 数量
}
// AI 聊天模型 API
export const ChatModelApi = {
// 查询聊天模型分页
getChatModelPage: async (params: any) => {
return await request.get({ url: `/ai/chat-model/page`, params })
},
// 获得聊天模型列表
getChatModelSimpleList: async (status?: number) => {
return await request.get({
url: `/ai/chat-model/simple-list`,
params: {
status
}
})
},
// 查询聊天模型详情
getChatModel: async (id: number) => {
return await request.get({ url: `/ai/chat-model/get?id=` + id })
},
// 新增聊天模型
createChatModel: async (data: ChatModelVO) => {
return await request.post({ url: `/ai/chat-model/create`, data })
},
// 修改聊天模型
updateChatModel: async (data: ChatModelVO) => {
return await request.put({ url: `/ai/chat-model/update`, data })
},
// 删除聊天模型
deleteChatModel: async (id: number) => {
return await request.delete({ url: `/ai/chat-model/delete?id=` + id })
}
}
+80
View File
@@ -0,0 +1,80 @@
import request from '@/config/axios'
// AI 聊天角色 VO
export interface ChatRoleVO {
id: number // 角色编号
modelId: number // 模型编号
name: string // 角色名称
avatar: string // 角色头像
category: string // 角色类别
sort: number // 角色排序
description: string // 角色描述
systemMessage: string // 角色设定
welcomeMessage: string // 角色设定
publicStatus: boolean // 是否公开
status: number // 状态
}
// AI 聊天角色 分页请求 vo
export interface ChatRolePageReqVO {
name?: string // 角色名称
category?: string // 角色类别
publicStatus: boolean // 是否公开
pageNo: number // 是否公开
pageSize: number // 是否公开
}
// AI 聊天角色 API
export const ChatRoleApi = {
// 查询聊天角色分页
getChatRolePage: async (params: any) => {
return await request.get({ url: `/ai/chat-role/page`, params })
},
// 查询聊天角色详情
getChatRole: async (id: number) => {
return await request.get({ url: `/ai/chat-role/get?id=` + id })
},
// 新增聊天角色
createChatRole: async (data: ChatRoleVO) => {
return await request.post({ url: `/ai/chat-role/create`, data })
},
// 修改聊天角色
updateChatRole: async (data: ChatRoleVO) => {
return await request.put({ url: `/ai/chat-role/update`, data })
},
// 删除聊天角色
deleteChatRole: async (id: number) => {
return await request.delete({ url: `/ai/chat-role/delete?id=` + id })
},
// ======= chat 聊天
// 获取 my role
getMyPage: async (params: ChatRolePageReqVO) => {
return await request.get({ url: `/ai/chat-role/my-page`, params})
},
// 获取角色分类
getCategoryList: async () => {
return await request.get({ url: `/ai/chat-role/category-list`})
},
// 创建角色
createMy: async (data: ChatRoleVO) => {
return await request.post({ url: `/ai/chat-role/create-my`, data})
},
// 更新角色
updateMy: async (data: ChatRoleVO) => {
return await request.put({ url: `/ai/chat-role/update-my`, data})
},
// 删除角色 my
deleteMy: async (id: number) => {
return await request.delete({ url: `/ai/chat-role/delete-my?id=` + id })
},
}
+41
View File
@@ -0,0 +1,41 @@
import request from '@/config/axios'
// AI 音乐 VO
export interface MusicVO {
id: number // 编号
userId: number // 用户编号
title: string // 音乐名称
lyric: string // 歌词
imageUrl: string // 图片地址
audioUrl: string // 音频地址
videoUrl: string // 视频地址
status: number // 音乐状态
gptDescriptionPrompt: string // 描述词
prompt: string // 提示词
platform: string // 模型平台
model: string // 模型
generateMode: number // 生成模式
tags: string // 音乐风格标签
duration: number // 音乐时长
publicStatus: boolean // 是否发布
taskId: string // 任务id
errorMessage: string // 错误信息
}
// AI 音乐 API
export const MusicApi = {
// 查询音乐分页
getMusicPage: async (params: any) => {
return await request.get({ url: `/ai/music/page`, params })
},
// 更新音乐
updateMusic: async (data: any) => {
return await request.put({ url: '/ai/music/update', data })
},
// 删除音乐
deleteMusic: async (id: number) => {
return await request.delete({ url: `/ai/music/delete?id=` + id })
}
}
+85
View File
@@ -0,0 +1,85 @@
import { fetchEventSource } from '@microsoft/fetch-event-source'
import { getAccessToken } from '@/utils/auth'
import { config } from '@/config/axios/config'
import { AiWriteTypeEnum } from '@/views/ai/utils/constants'
import request from '@/config/axios'
export interface WriteVO {
type: AiWriteTypeEnum.WRITING | AiWriteTypeEnum.REPLY // 1:撰写 2:回复
prompt: string // 写作内容提示 1。撰写 2回复
originalContent: string // 原文
length: number // 长度
format: number // 格式
tone: number // 语气
language: number // 语言
userId?: number // 用户编号
platform?: string // 平台
model?: string // 模型
generatedContent?: string // 生成的内容
errorMessage?: string // 错误信息
createTime?: Date // 创建时间
}
export interface AiWritePageReqVO extends PageParam {
userId?: number // 用户编号
type?: AiWriteTypeEnum // 写作类型
platform?: string // 平台
createTime?: [string, string] // 创建时间
}
export interface AiWriteRespVo {
id: number
userId: number
type: number
platform: string
model: string
prompt: string
generatedContent: string
originalContent: string
length: number
format: number
tone: number
language: number
errorMessage: string
createTime: string
}
export const WriteApi = {
writeStream: ({
data,
onClose,
onMessage,
onError,
ctrl
}: {
data: WriteVO
onMessage?: (res: any) => void
onError?: (...args: any[]) => void
onClose?: (...args: any[]) => void
ctrl: AbortController
}) => {
const token = getAccessToken()
return fetchEventSource(`${config.base_url}/ai/write/generate-stream`, {
method: 'post',
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${token}`
},
openWhenHidden: true,
body: JSON.stringify(data),
onmessage: onMessage,
onerror: onError,
onclose: onClose,
signal: ctrl.signal
})
},
// 获取写作列表
getWritePage: (params: AiWritePageReqVO) => {
return request.get<PageResult<AiWriteRespVo[]>>({ url: `/ai/write/page`, params })
},
// 删除写作
deleteWrite(id: number) {
return request.delete({ url: `/ai/write/delete`, params: { id } })
}
}
+1 -1
View File
@@ -1,6 +1,6 @@
import request from '@/config/axios'
export const getProcessDefinition = async (id: number, key: string) => {
export const getProcessDefinition = async (id?: string, key?: string) => {
return await request.get({
url: '/bpm/process-definition/get',
params: { id, key }
+6 -1
View File
@@ -5,6 +5,7 @@ export type ProcessDefinitionVO = {
version: number
deploymentTIme: string
suspensionState: number
formType?: number
}
export type ModelVO = {
@@ -29,7 +30,7 @@ export const getModelPage = async (params) => {
return await request.get({ url: '/bpm/model/page', params })
}
export const getModel = async (id: number) => {
export const getModel = async (id: string) => {
return await request.get({ url: '/bpm/model/get?id=' + id })
}
@@ -37,6 +38,10 @@ export const updateModel = async (data: ModelVO) => {
return await request.put({ url: '/bpm/model/update', data: data })
}
export const updateModelBpmn = async (data: ModelVO) => {
return await request.put({ url: '/bpm/model/update-bpmn', data: data })
}
// 任务状态修改
export const updateModelState = async (id: number, state: number) => {
const data = {
+40 -9
View File
@@ -1,5 +1,6 @@
import request from '@/config/axios'
import { ProcessDefinitionVO } from '@/api/bpm/model'
import { NodeType } from '@/components/SimpleProcessDesignerV2/src/consts'
export type Task = {
id: string
name: string
@@ -18,17 +19,36 @@ export type ProcessInstanceVO = {
businessKey: string
createTime: string
endTime: string
processDefinition?: ProcessDefinitionVO
}
export type ProcessInstanceCopyVO = {
type: number
taskName: string
taskKey: string
processInstanceName: string
processInstanceKey: string
startUserId: string
options: string[]
// 用户信息
export type User = {
id: number,
nickname: string,
avatar: string
}
// 审批任务信息
export type ApprovalTaskInfo = {
id: number,
ownerUser: User,
assigneeUser: User,
status: number,
reason: string
}
// 审批节点信息
export type ApprovalNodeInfo = {
id : number
name: string
nodeType: NodeType
status: number
startTime?: Date
endTime?: Date
candidateUserList?: User[]
tasks: ApprovalTaskInfo[]
}
export const getProcessInstanceMyPage = async (params: any) => {
@@ -66,3 +86,14 @@ export const getProcessInstance = async (id: string) => {
export const getProcessInstanceCopyPage = async (params: any) => {
return await request.get({ url: '/bpm/process-instance/copy/page', params })
}
// 获取审批详情
export const getApprovalDetail = async (processInstanceId?:string, processDefinitionId?:string) => {
const param = processInstanceId ? '?processInstanceId='+ processInstanceId : '?processDefinitionId='+ processDefinitionId
return await request.get({ url: 'bpm/process-instance/get-approval-detail'+ param })
}
// 获取表单字段权限
export const getFormFieldsPermission = async (params: any) => {
return await request.get({ url: '/bpm/process-instance/get-form-fields-permission', params })
}
+15
View File
@@ -0,0 +1,15 @@
import request from '@/config/axios'
export const updateBpmSimpleModel = async (data) => {
return await request.post({
url: '/bpm/model/simple/update',
data: data
})
}
export const getBpmSimpleModel = async (id) => {
return await request.get({
url: '/bpm/model/simple/get?id=' + id
})
}
+46
View File
@@ -1,5 +1,51 @@
import request from '@/config/axios'
/**
* 任务状态枚举
*/
export enum TaskStatusEnum {
/**
* 未开始
*/
NOT_START = -1,
/**
* 待审批
*/
WAIT = 0,
/**
* 审批中
*/
RUNNING = 1,
/**
* 审批通过
*/
APPROVE = 2,
/**
* 审批不通过
*/
REJECT = 3,
/**
* 已取消
*/
CANCEL = 4,
/**
* 已退回
*/
RETURN = 5,
/**
* 委派中
*/
DELEGATE = 6,
/**
* 审批通过中
*/
APPROVING = 7,
}
export type TaskVO = {
id: number
}
+2 -2
View File
@@ -13,8 +13,8 @@ export interface ProductCategoryVO {
// ERP 产品分类 API
export const ProductCategoryApi = {
// 查询产品分类列表
getProductCategoryList: async (params) => {
return await request.get({ url: `/erp/product-category/list`, params })
getProductCategoryList: async () => {
return await request.get({ url: `/erp/product-category/list` })
},
// 查询产品分类精简列表
+2 -2
View File
@@ -7,8 +7,8 @@ export interface Demo02CategoryVO {
}
// 查询示例分类列表
export const getDemo02CategoryList = async (params) => {
return await request.get({ url: `/infra/demo02-category/list`, params })
export const getDemo02CategoryList = async () => {
return await request.get({ url: `/infra/demo02-category/list` })
}
// 查询示例分类详情
+1
View File
@@ -12,6 +12,7 @@ export interface JobLogVO {
duration: string
status: number
createTime: string
result: string
}
// 任务日志列表
+74
View File
@@ -0,0 +1,74 @@
import request from '@/config/axios'
// IoT 设备 VO
export interface DeviceVO {
id: number // 设备 ID,主键,自增
deviceKey: string // 设备唯一标识符
deviceName: string // 设备名称
productId: number // 产品编号
productKey: string // 产品标识
deviceType: number // 设备类型
nickname: string // 设备备注名称
gatewayId: number // 网关设备 ID
status: number // 设备状态
statusLastUpdateTime: Date // 设备状态最后更新时间
lastOnlineTime: Date // 最后上线时间
lastOfflineTime: Date // 最后离线时间
activeTime: Date // 设备激活时间
createTime: Date // 创建时间
ip: string // 设备的 IP 地址
firmwareVersion: string // 设备的固件版本
deviceSecret: string // 设备密钥,用于设备认证,需安全存储
mqttClientId: string // MQTT 客户端 ID
mqttUsername: string // MQTT 用户名
mqttPassword: string // MQTT 密码
authType: string // 认证类型
latitude: number // 设备位置的纬度
longitude: number // 设备位置的经度
areaId: number // 地区编码
address: string // 设备详细地址
serialNumber: string // 设备序列号
}
export interface DeviceUpdateStatusVO {
id: number // 设备 ID,主键,自增
status: number // 设备状态
}
// 设备 API
export const DeviceApi = {
// 查询设备分页
getDevicePage: async (params: any) => {
return await request.get({ url: `/iot/device/page`, params })
},
// 查询设备详情
getDevice: async (id: number) => {
return await request.get({ url: `/iot/device/get?id=` + id })
},
// 新增设备
createDevice: async (data: DeviceVO) => {
return await request.post({ url: `/iot/device/create`, data })
},
// 修改设备
updateDevice: async (data: DeviceVO) => {
return await request.put({ url: `/iot/device/update`, data })
},
// 修改设备状态
updateDeviceStatus: async (data: DeviceUpdateStatusVO) => {
return await request.put({ url: `/iot/device/update-status`, data })
},
// 删除设备
deleteDevice: async (id: number) => {
return await request.delete({ url: `/iot/device/delete?id=` + id })
},
// 获取设备数量
getDeviceCount: async (productId: number) => {
return await request.get({ url: `/iot/device/count?productId=` + productId })
}
}
+62
View File
@@ -0,0 +1,62 @@
import request from '@/config/axios'
// IoT 产品 VO
export interface ProductVO {
id: number // 产品编号
name: string // 产品名称
productKey: string // 产品标识
protocolId: number // 协议编号
categoryId: number // 产品所属品类标识符
description: string // 产品描述
validateType: number // 数据校验级别
status: number // 产品状态
deviceType: number // 设备类型
netType: number // 联网方式
protocolType: number // 接入网关协议
dataFormat: number // 数据格式
deviceCount: number // 设备数量
createTime: Date // 创建时间
}
// IoT 产品 API
export const ProductApi = {
// 查询产品分页
getProductPage: async (params: any) => {
return await request.get({ url: `/iot/product/page`, params })
},
// 查询产品详情
getProduct: async (id: number) => {
return await request.get({ url: `/iot/product/get?id=` + id })
},
// 新增产品
createProduct: async (data: ProductVO) => {
return await request.post({ url: `/iot/product/create`, data })
},
// 修改产品
updateProduct: async (data: ProductVO) => {
return await request.put({ url: `/iot/product/update`, data })
},
// 删除产品
deleteProduct: async (id: number) => {
return await request.delete({ url: `/iot/product/delete?id=` + id })
},
// 导出产品 Excel
exportProduct: async (params) => {
return await request.download({ url: `/iot/product/export-excel`, params })
},
// 更新产品状态
updateProductStatus: async (id: number, status: number) => {
return await request.put({ url: `/iot/product/update-status?id=` + id + `&status=` + status })
},
// 查询产品(精简)列表
getSimpleProductList() {
return request.get({ url: '/iot/product/list-all-simple' })
}
}
+55
View File
@@ -0,0 +1,55 @@
import request from '@/config/axios'
// IoT 产品物模型 VO
export interface ThinkModelFunctionVO {
id: number // 物模型功能编号
identifier: string // 功能标识
name: string // 功能名称
description: string // 功能描述
productId: number // 产品编号
productKey: string // 产品标识
type: number // 功能类型
property: string // 属性
event: string // 事件
service: string // 服务
}
// IoT 产品物模型 API
export const ThinkModelFunctionApi = {
// 查询产品物模型分页
getThinkModelFunctionPage: async (params: any) => {
return await request.get({ url: `/iot/think-model-function/page`, params })
},
// 获得产品物模型
getThinkModelFunctionListByProductId: async (params: any) => {
return await request.get({
url: `/iot/think-model-function/list-by-product-id`,
params
})
},
// 查询产品物模型详情
getThinkModelFunction: async (id: number) => {
return await request.get({ url: `/iot/think-model-function/get?id=` + id })
},
// 新增产品物模型
createThinkModelFunction: async (data: ThinkModelFunctionVO) => {
return await request.post({ url: `/iot/think-model-function/create`, data })
},
// 修改产品物模型
updateThinkModelFunction: async (data: ThinkModelFunctionVO) => {
return await request.put({ url: `/iot/think-model-function/update`, data })
},
// 删除产品物模型
deleteThinkModelFunction: async (id: number) => {
return await request.delete({ url: `/iot/think-model-function/delete?id=` + id })
},
// 导出产品物模型 Excel
exportThinkModelFunction: async (params) => {
return await request.download({ url: `/iot/think-model-function/export-excel`, params })
}
}
+6 -1
View File
@@ -1,6 +1,6 @@
import request from '@/config/axios'
import { getRefreshToken } from '@/utils/auth'
import type { UserLoginVO } from './types'
import type { RegisterVO, UserLoginVO } from './types'
export interface SmsCodeVO {
mobile: string
@@ -17,6 +17,11 @@ export const login = (data: UserLoginVO) => {
return request.post({ url: '/system/auth/login', data })
}
// 注册
export const register = (data: RegisterVO) => {
return request.post({ url: '/system/auth/register', data })
}
// 刷新访问令牌
export const refreshToken = () => {
return request.post({ url: '/system/auth/refresh-token?refreshToken=' + getRefreshToken() })
+7
View File
@@ -29,3 +29,10 @@ export type UserVO = {
loginIp: string
loginDate: string
}
export type RegisterVO = {
tenantName: string
username: string
password: string
captchaVerification: string
}
+10
View File
@@ -0,0 +1,10 @@
import request from '@/config/axios'
/**
* 获得商品浏览记录分页
*
* @param params 请求参数
*/
export const getBrowseHistoryPage = (params: any) => {
return request.get({ url: '/product/browse-history/page', params })
}
+10 -14
View File
@@ -24,20 +24,6 @@ export interface PropertyValueVO {
remark?: string
}
/**
* 商品属性值的明细
*/
export interface PropertyValueDetailVO {
/** 属性项的编号 */
propertyId: number // 属性的编号
/** 属性的名称 */
propertyName: string
/** 属性值的编号 */
valueId: number
/** 属性值的名称 */
valueName: string
}
// ------------------------ 属性项 -------------------
// 创建属性项
@@ -65,6 +51,11 @@ export const getPropertyPage = (params: PageParam) => {
return request.get({ url: '/product/property/page', params })
}
// 获得属性项精简列表
export const getPropertySimpleList = (): Promise<PropertyVO[]> => {
return request.get({ url: '/product/property/simple-list' })
}
// ------------------------ 属性值 -------------------
// 获得属性值分页
@@ -91,3 +82,8 @@ export const updatePropertyValue = (data: PropertyValueVO) => {
export const deletePropertyValue = (id: number) => {
return request.delete({ url: `/product/property/value/delete?id=${id}` })
}
// 获得属性值精简列表
export const getPropertyValueSimpleList = (propertyId: number): Promise<PropertyValueVO[]> => {
return request.get({ url: '/product/property/value/simple-list', params: { propertyId } })
}
+2
View File
@@ -50,6 +50,8 @@ export interface Spu {
giveIntegral?: number // 赠送积分
virtualSalesCount?: number // 虚拟销量
price?: number // 商品价格
combinationPrice?: number // 商品拼团价格
seckillPrice?: number // 商品秒杀价格
salesCount?: number // 商品销量
marketPrice?: number // 市场价
costPrice?: number // 成本价
@@ -16,6 +16,7 @@ export interface CombinationActivityVO {
virtualGroup?: number
status?: number
limitDuration?: number
combinationPrice?: number
products: CombinationProductVO[]
}
@@ -36,7 +37,7 @@ export interface SpuExtension extends Spu {
}
// 查询拼团活动列表
export const getCombinationActivityPage = async (params) => {
export const getCombinationActivityPage = async (params: any) => {
return await request.get({ url: '/promotion/combination-activity/page', params })
}
@@ -45,6 +46,11 @@ export const getCombinationActivity = async (id: number) => {
return await request.get({ url: '/promotion/combination-activity/get?id=' + id })
}
// 获得拼团活动列表,基于活动编号数组
export const getCombinationActivityListByIds = (ids: number[]) => {
return request.get({ url: `/promotion/combination-activity/list-by-ids?ids=${ids}` })
}
// 新增拼团活动
export const createCombinationActivity = async (data: CombinationActivityVO) => {
return await request.post({ url: '/promotion/combination-activity/create', data })
@@ -74,7 +74,7 @@ export function getCouponTemplatePage(params: PageParam) {
}
// 获得优惠劵模板分页
export function getCouponTemplateList(ids: number[]) {
export function getCouponTemplateList(ids: number[]): Promise<CouponTemplateVO[]> {
return request.get({
url: `/promotion/coupon-template/list?ids=${ids}`
})
@@ -0,0 +1,35 @@
import request from '@/config/axios'
export interface KeFuConversationRespVO {
id: number // 编号
userId: number // 会话所属用户
userAvatar: string // 会话所属用户头像
userNickname: string // 会话所属用户昵称
lastMessageTime: Date // 最后聊天时间
lastMessageContent: string // 最后聊天内容
lastMessageContentType: number // 最后发送的消息类型
adminPinned: boolean // 管理端置顶
userDeleted: boolean // 用户是否可见
adminDeleted: boolean // 管理员是否可见
adminUnreadMessageCount: number // 管理员未读消息数
createTime?: string // 创建时间
}
// 客服会话 API
export const KeFuConversationApi = {
// 获得客服会话列表
getConversationList: async () => {
return await request.get({ url: '/promotion/kefu-conversation/list' })
},
// 客服会话置顶
updateConversationPinned: async (data: any) => {
return await request.put({
url: '/promotion/kefu-conversation/update-conversation-pinned',
data
})
},
// 删除客服会话
deleteConversation: async (id: number) => {
return await request.delete({ url: `/promotion/kefu-conversation/delete?id=${id}`})
}
}
@@ -0,0 +1,36 @@
import request from '@/config/axios'
export interface KeFuMessageRespVO {
id: number // 编号
conversationId: number // 会话编号
senderId: number // 发送人编号
senderAvatar: string // 发送人头像
senderType: number // 发送人类型
receiverId: number // 接收人编号
receiverType: number // 接收人类型
contentType: number // 消息类型
content: string // 消息
readStatus: boolean // 是否已读
createTime: Date // 创建时间
}
// 客服会话 API
export const KeFuMessageApi = {
// 发送客服消息
sendKeFuMessage: async (data: any) => {
return await request.post({
url: '/promotion/kefu-message/send',
data
})
},
// 更新客服消息已读状态
updateKeFuMessageReadStatus: async (conversationId: number) => {
return await request.put({
url: '/promotion/kefu-message/update-read-status?conversationId=' + conversationId
})
},
// 获得消息分页数据
getKeFuMessagePage: async (params: any) => {
return await request.get({ url: '/promotion/kefu-message/page', params })
}
}
+91
View File
@@ -0,0 +1,91 @@
import request from '@/config/axios'
import { Sku, Spu } from '@/api/mall/product/spu' // 积分商城活动 VO
// 积分商城活动 VO
export interface PointActivityVO {
id: number // 积分商城活动编号
spuId: number // 积分商城活动商品
status: number // 活动状态
stock: number // 积分商城活动库存
totalStock: number // 积分商城活动总库存
remark?: string // 备注
sort: number // 排序
createTime: string // 创建时间
products: PointProductVO[] // 积分商城商品
// ========== 商品字段 ==========
spuName: string // 商品名称
picUrl: string // 商品主图
marketPrice: number // 商品市场价,单位:分
//======================= 显示所需兑换积分最少的 sku 信息 =======================
point: number // 兑换积分
price: number // 兑换金额,单位:分
}
// 秒杀活动所需属性
export interface PointProductVO {
id?: number // 积分商城商品编号
activityId?: number // 积分商城活动 id
spuId?: number // 商品 SPU 编号
skuId: number // 商品 SKU 编号
count: number // 可兑换数量
point: number // 兑换积分
price: number // 兑换金额,单位:分
stock: number // 积分商城商品库存
activityStatus?: number // 积分商城商品状态
}
// 扩展 Sku 配置
export type SkuExtension = Sku & {
productConfig: PointProductVO
}
export interface SpuExtension extends Spu {
skus: SkuExtension[] // 重写类型
}
export interface SpuExtension0 extends Spu {
pointStock: number // 积分商城活动库存
pointTotalStock: number // 积分商城活动总库存
point: number // 兑换积分
pointPrice: number // 兑换金额,单位:分
}
// 积分商城活动 API
export const PointActivityApi = {
// 查询积分商城活动分页
getPointActivityPage: async (params: any) => {
return await request.get({ url: `/promotion/point-activity/page`, params })
},
// 查询积分商城活动详情
getPointActivity: async (id: number) => {
return await request.get({ url: `/promotion/point-activity/get?id=` + id })
},
// 查询积分商城活动列表,基于活动编号数组
getPointActivityListByIds: async (ids: number[]) => {
return request.get({ url: `/promotion/point-activity/list-by-ids?ids=${ids}` })
},
// 新增积分商城活动
createPointActivity: async (data: PointActivityVO) => {
return await request.post({ url: `/promotion/point-activity/create`, data })
},
// 修改积分商城活动
updatePointActivity: async (data: PointActivityVO) => {
return await request.put({ url: `/promotion/point-activity/update`, data })
},
// 删除积分商城活动
deletePointActivity: async (id: number) => {
return await request.delete({ url: `/promotion/point-activity/delete?id=` + id })
},
// 关闭秒杀活动
closePointActivity: async (id: number) => {
return await request.put({ url: '/promotion/point-activity/close?id=' + id })
}
}
+21 -11
View File
@@ -1,34 +1,39 @@
import request from '@/config/axios'
export interface DiscountActivityVO {
export interface RewardActivityVO {
id?: number
name?: string
startTime?: Date
endTime?: Date
startAndEndTime?: Date[] // 只前端使用
remark?: string
conditionType?: number
productScope?: number
rules: RewardRule[]
// 如下仅用于表单,不提交
productScopeValues?: number[] // 商品范围:值为品类编号列表、商品编号列表
productCategoryIds?: number[]
productSpuIds?: number[]
rules?: DiscountProductVO[]
}
// 优惠规则
export interface DiscountProductVO {
limit: number
discountPrice: number
freeDelivery: boolean
export interface RewardRule {
limit?: number
discountPrice?: number
freeDelivery?: boolean
point: number
couponIds: number[]
couponCounts: number[]
giveCouponTemplateCounts?: {
[key: number]: number
}
}
// 新增满减送活动
export const createRewardActivity = async (data: DiscountActivityVO) => {
export const createRewardActivity = async (data: RewardActivityVO) => {
return await request.post({ url: '/promotion/reward-activity/create', data })
}
// 更新满减送活动
export const updateRewardActivity = async (data: DiscountActivityVO) => {
export const updateRewardActivity = async (data: RewardActivityVO) => {
return await request.put({ url: '/promotion/reward-activity/update', data })
}
@@ -42,7 +47,12 @@ export const getReward = async (id: number) => {
return await request.get({ url: '/promotion/reward-activity/get?id=' + id })
}
// 删除限时折扣活动
// 删除满减送活动
export const deleteRewardActivity = async (id: number) => {
return await request.delete({ url: '/promotion/reward-activity/delete?id=' + id })
}
// 关闭满减送活动
export const closeRewardActivity = async (id: number) => {
return await request.put({ url: '/promotion/reward-activity/close?id=' + id })
}
@@ -18,12 +18,14 @@ export interface SeckillActivityVO {
singleLimitCount?: number
stock?: number
totalStock?: number
seckillPrice?: number
products?: SeckillProductVO[]
}
// 秒杀活动所需属性
export interface SeckillProductVO {
skuId: number
spuId: number
seckillPrice: number
stock: number
}
@@ -42,6 +44,11 @@ export const getSeckillActivityPage = async (params) => {
return await request.get({ url: '/promotion/seckill-activity/page', params })
}
// 查询秒杀活动列表,基于活动编号数组
export const getSeckillActivityListByIds = (ids: number[]) => {
return request.get({ url: `/promotion/seckill-activity/list-by-ids?ids=${ids}` })
}
// 查询秒杀活动详情
export const getSeckillActivity = async (id: number) => {
return await request.get({ url: '/promotion/seckill-activity/get?id=' + id })
@@ -19,7 +19,7 @@ export const SeckillConfigApi = {
// 查询秒杀时段列表
getSimpleSeckillConfigList: async () => {
return await request.get({ url: `/promotion/seckill-config/simple-list` })
return await request.get({ url: `/promotion/seckill-config/list` })
},
// 查询秒杀时段详情
+1 -1
View File
@@ -141,7 +141,7 @@ export const getExpressTrackList = async (id: number | null) => {
}
export interface DeliveryVO {
id: number // 订单编号
id?: number // 订单编号
logisticsId: number | null // 物流公司编号
logisticsNo: string // 物流编号
}
-5
View File
@@ -46,8 +46,3 @@ export const updateUserLevel = async (data: any) => {
export const updateUserPoint = async (data: any) => {
return await request.put({ url: `/member/user/update-point`, data })
}
// 修改会员用户余额
export const updateUserBalance = async (data: any) => {
return await request.put({ url: `/member/user/update-balance`, data })
}
+1
View File
@@ -2,6 +2,7 @@ import request from '@/config/axios'
export interface AppVO {
id: number
appKey: string
name: string
status: number
remark: string
+8 -2
View File
@@ -84,8 +84,14 @@ export const getOrderPage = async (params: OrderPageReqVO) => {
}
// 查询详情支付订单
export const getOrder = async (id: number) => {
return await request.get({ url: '/pay/order/get?id=' + id })
export const getOrder = async (id: number, sync?: boolean) => {
return await request.get({
url: '/pay/order/get',
params: {
id,
sync
}
})
}
// 获得支付订单的明细
+8 -2
View File
@@ -4,6 +4,7 @@ import request from '@/config/axios'
export interface PayWalletUserReqVO {
userId: number
}
/** 钱包 VO */
export interface WalletVO {
id: number
@@ -20,7 +21,12 @@ export const getWallet = async (params: PayWalletUserReqVO) => {
return await request.get<WalletVO>({ url: `/pay/wallet/get`, params })
}
// 查询会员钱包列表
export const getWalletPage = async (params) => {
/** 查询会员钱包列表 */
export const getWalletPage = async (params: any) => {
return await request.get({ url: `/pay/wallet/page`, params })
}
/** 修改会员钱包余额 */
export const updateWalletBalance = async (data: any) => {
return await request.put({ url: `/pay/wallet/update-balance`, data })
}
+1
View File
@@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1715606039621" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4256" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M878.250667 981.333333H375.338667a104.661333 104.661333 0 0 1-104.661334-104.661333V375.338667a104.661333 104.661333 0 0 1 104.661334-104.661334h502.912a104.661333 104.661333 0 0 1 104.661333 104.661334v502.912C981.333333 934.485333 934.485333 981.333333 878.250667 981.333333zM375.338667 364.373333a10.666667 10.666667 0 0 0-10.922667 10.965334v502.912c0 6.229333 4.693333 10.922667 10.922667 10.922666h502.912a10.666667 10.666667 0 0 0 10.922666-10.922666V375.338667a10.666667 10.666667 0 0 0-10.922666-10.922667H375.338667z" fill="#ffffff" p-id="4257"></path><path d="M192.597333 753.322667H147.328A104.661333 104.661333 0 0 1 42.666667 648.661333V147.328A104.661333 104.661333 0 0 1 147.328 42.666667H650.24a104.661333 104.661333 0 0 1 104.618667 104.661333v49.962667c0 26.538667-20.309333 46.848-46.848 46.848a46.037333 46.037333 0 0 1-46.848-46.848V147.328a10.666667 10.666667 0 0 0-10.922667-10.965333H147.328a10.666667 10.666667 0 0 0-10.965333 10.965333V650.24c0 6.229333 4.693333 10.922667 10.965333 10.922667h45.269333c26.538667 0 46.848 20.309333 46.848 46.848 0 26.538667-21.845333 45.312-46.848 45.312z" fill="#ffffff" p-id="4258"></path></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

+1
View File
@@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1715352878351" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1499" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M624.5 786.3c92.9 0 168.2-75.3 168.2-168.2V309c0-92.4-75.3-168.2-168.2-168.2H303.6c-92.4 0-168.2 75.3-168.2 168.2v309.1c0 92.4 75.3 168.2 168.2 168.2h320.9zM178.2 618.1V309c0-69.4 56.1-125.5 125.5-125.5h320.9c69.4 0 125.5 56.1 125.5 125.5v309.1c0 69.4-56.1 125.5-125.5 125.5h-321c-69.4 0-125.4-56.1-125.4-125.5z" p-id="1500" fill="#8a8a8a"></path><path d="M849.8 295.1v361.5c0 102.7-83.6 186.3-186.3 186.3H279.1v42.7h384.4c126.3 0 229.1-102.8 229.1-229.1V295.1h-42.8zM307.9 361.8h312.3c11.8 0 21.4-9.6 21.4-21.4 0-11.8-9.6-21.4-21.4-21.4H307.9c-11.8 0-21.4 9.6-21.4 21.4 0 11.9 9.6 21.4 21.4 21.4zM307.9 484.6h312.3c11.8 0 21.4-9.6 21.4-21.4 0-11.8-9.6-21.4-21.4-21.4H307.9c-11.8 0-21.4 9.6-21.4 21.4 0 11.9 9.6 21.4 21.4 21.4z" p-id="1501" fill="#8a8a8a"></path><path d="M620.2 607.4c11.8 0 21.4-9.6 21.4-21.4 0-11.8-9.6-21.4-21.4-21.4H307.9c-11.8 0-21.4 9.6-21.4 21.4 0 11.8 9.6 21.4 21.4 21.4h312.3z" p-id="1502" fill="#8a8a8a"></path></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

+1
View File
@@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1715354120346" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3256" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M907.1 263.7H118.9c-9.1 0-16.4-7.3-16.4-16.4s7.3-16.4 16.4-16.4H907c9.1 0 16.4 7.3 16.4 16.4s-7.3 16.4-16.3 16.4z" fill="#8a8a8a" p-id="3257"></path><path d="M772.5 928.3H257.4c-27.7 0-50.2-22.5-50.2-50.2V247.2c0-9.1 7.3-16.4 16.4-16.4H801c12.1 0 21.9 9.8 21.9 21.9v625.2c0 27.8-22.6 50.4-50.4 50.4zM240 263.7v614.4c0 9.6 7.8 17.4 17.4 17.4h515.2c9.7 0 17.5-7.9 17.5-17.5V263.7H240zM657.4 131.1H368.6c-9.1 0-16.4-7.3-16.4-16.4s7.3-16.4 16.4-16.4h288.7c9.1 0 16.4 7.3 16.4 16.4s-7.3 16.4-16.3 16.4z" fill="#8a8a8a" p-id="3258"></path><path d="M416 754.5c-9.1 0-16.4-7.3-16.4-16.4V517.8c0-9.1 7.3-16.4 16.4-16.4s16.4 7.3 16.4 16.4V738c0.1 9.1-7.3 16.5-16.4 16.5z" fill="#8a8a8a" p-id="3259"></path><path d="M416 465.2c-9.1 0-16.4-7.3-16.4-16.4v-59.4c0-9.1 7.3-16.4 16.4-16.4s16.4 7.3 16.4 16.4v59.4c0.1 9.1-7.3 16.4-16.4 16.4zM604.9 754.5c-9.1 0-16.4-7.3-16.4-16.4v-67.2c0-9.1 7.3-16.4 16.4-16.4s16.4 7.3 16.4 16.4V738c0 9.1-7.3 16.5-16.4 16.5z" fill="#8a8a8a" opacity=".4" p-id="3260"></path><path d="M604.9 619.1c-9.1 0-16.4-7.3-16.4-16.4V389.4c0-9.1 7.3-16.4 16.4-16.4s16.4 7.3 16.4 16.4v213.3c0 9.1-7.3 16.4-16.4 16.4z" fill="#8a8a8a" p-id="3261"></path></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

+1
View File
@@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1716345268026" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5622" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M956.408445 419.226665a250.670939 250.670939 0 0 0-22.425219-209.609236A263.163526 263.163526 0 0 0 652.490412 85.715535 259.784384 259.784384 0 0 0 457.728923 0.008192a261.422756 261.422756 0 0 0-249.44216 178.582564 258.453206 258.453206 0 0 0-172.848261 123.901894c-57.03583 96.868753-44.031251 219.132275 32.153053 302.279661a250.670939 250.670939 0 0 0 22.32282 209.609237 263.163526 263.163526 0 0 0 281.595213 123.901893A259.067596 259.067596 0 0 0 566.271077 1023.990784a260.60357 260.60357 0 0 0 249.339762-178.889759 258.453206 258.453206 0 0 0 172.848261-123.901893c57.445423-96.868753 44.13365-218.82508-32.050655-302.074865zM566.578272 957.124721c-45.362429 0-89.496079-15.666934-124.516283-44.543243 1.638372-0.921584 4.198329-2.150363 6.143895-3.481541l206.537289-117.757998a32.35785 32.35785 0 0 0 16.895713-29.081105V474.82892l87.243317 49.97035c1.023983 0.307195 1.638372 1.228779 1.638372 2.252762v238.075953c0 105.8798-86.936122 191.689541-193.942303 191.996736zM148.588578 781.102113a189.846373 189.846373 0 0 1-23.346803-128.612213c1.535974 1.023983 4.09593 2.559956 6.143895 3.48154L337.922959 773.729439c10.444622 6.143896 23.346803 6.143896 34.098621 0l252.30931-143.664758v99.531108c0 1.023983-0.307195 1.945567-1.331177 2.559956l-208.892449 118.986778a196.297463 196.297463 0 0 1-265.518686-70.04041zM94.112704 335.97688c22.630015-39.013737 58.367008-68.81163 101.16948-84.171369V494.591784c0 11.7758 6.45109 22.93721 16.793315 28.978707l252.30931 143.767156L377.141493 716.796006a3.174346 3.174346 0 0 1-2.867152 0.307195l-208.892448-118.986777A190.870355 190.870355 0 0 1 94.215102 335.874482z m717.607001 164.861198L559.410394 357.070922 646.653711 307.20297a3.174346 3.174346 0 0 1 2.969549-0.307195l208.892449 118.986777a190.358364 190.358364 0 0 1 70.961994 262.139544 194.556693 194.556693 0 0 1-101.16948 84.171369V529.407192a31.538664 31.538664 0 0 0-16.588518-28.671513z m87.03852-129.329002c-1.74077-1.023983-4.300727-2.559956-6.246294-3.48154l-206.639687-117.757999a34.09862 34.09862 0 0 0-33.996222 0L399.566711 393.934295v-99.531108c0-1.023983 0.307195-1.945567 1.331178-2.559956l208.892449-119.089176a195.990268 195.990268 0 0 1 265.518686 70.450003c22.732414 38.706542 31.129071 84.171369 23.346803 128.305018zM352.258716 548.862861l-87.243317-49.560757a2.457558 2.457558 0 0 1-1.638372-2.252762V258.870991c0-105.8798 87.243317-191.996736 194.556692-191.689541a194.556693 194.556693 0 0 1 124.209089 44.543243c-1.638372 0.921584-4.198329 2.252762-6.143896 3.48154l-206.639687 117.757999a31.948257 31.948257 0 0 0-16.793315 29.081105l-0.307194 286.715126z m47.307995-100.759887L512 384.001664l112.535687 63.998912v127.997824l-112.228492 63.998912-112.535687-63.998912-0.307195-127.997824z" p-id="5623" fill="#707070"></path></svg>

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

Binary file not shown.
+1
View File
@@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1724304256588" class="icon" viewBox="0 0 1300 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1272" xmlns:xlink="http://www.w3.org/1999/xlink" width="253.90625" height="200"><path d="M784.058182 99.258182l10.938182 18.385454-21.294546-2.56-14.196363 16.058182-4.072728-21.061818-19.781818-8.494545 18.734546-10.472728 2.094545-21.294545 15.709091 14.545454 20.945454-4.654545-9.076363 19.549091zM1067.287273 642.443636l-18.501818 10.821819 2.56-21.294546-16.058182-14.196364 21.061818-4.072727 8.494545-19.665454 10.472728 18.734545 21.294545 1.978182-14.661818 15.709091 4.770909 20.945454-19.432727-8.96z" fill="#2196F3" p-id="1273"></path><path d="M1067.287273 642.443636l-18.501818 10.821819 2.56-21.294546-16.058182-14.196364 21.061818-4.072727 8.494545-19.665454 10.472728 18.734545 21.294545 1.978182-14.661818 15.709091 4.770909 20.945454-19.432727-8.96zM571.927273 100.072727l-17.454546-12.567272 20.596364-6.167273 6.516364-20.48 12.218181 17.570909 21.410909-0.116364-12.916363 17.105455 6.749091 20.363636-20.247273-6.981818-17.338182 12.683636 0.465455-21.410909zM991.418182 784.407273l-21.178182 3.490909 10.123636-18.967273-9.774545-18.967273 21.061818 3.723637 15.127273-15.243637 2.909091 21.294546 19.2 9.658182-19.316364 9.309091-3.258182 21.178181-14.894545-15.476363zM427.985455 156.741818L407.272727 151.505455l16.872728-13.265455-1.396364-21.410909 17.803636 11.985454 20.014546-7.912727-5.934546 20.596364 13.730909 16.523636-21.410909 0.814546-11.52 18.152727-7.447272-20.247273zM854.225455 896.465455l-20.712728-5.352728 16.872728-13.265454-1.396364-21.294546 17.803636 11.869091 20.014546-7.912727-5.934546 20.712727 13.730909 16.523637-21.527272 0.814545-11.403637 18.036364-7.447272-20.130909zM562.501818 923.694545l10.821818 18.385455-21.294545-2.56-14.196364 16.058182-4.072727-21.061818-19.665455-8.494546 18.734546-10.356363 1.978182-21.41091 15.709091 14.661819 20.945454-4.770909-8.96 19.54909zM242.734545 420.770909l-18.385454 10.938182 2.56-21.294546-16.058182-14.196363 21.061818-4.189091 8.494546-19.665455 10.356363 18.734546 21.410909 2.094545-14.545454 15.709091 4.654545 20.945455-19.549091-9.076364z" fill="#2196F3" p-id="1274"></path><path d="M242.734545 420.770909l-18.385454 10.938182 2.56-21.294546-16.058182-14.196363 21.061818-4.189091 8.494546-19.665455 10.356363 18.734546 21.410909 2.094545-14.545454 15.709091 4.654545 20.945455-19.549091-9.076364zM700.858182 943.941818l-17.454546-12.450909 20.48-6.283636 6.516364-20.48 12.334545 17.687272 21.41091-0.116363-12.916364 17.105454 6.632727 20.363637-20.247273-7.098182-17.221818 12.683636 0.465455-21.410909zM303.592727 278.807273l-21.178182 3.490909 10.123637-18.967273-9.890909-18.967273 21.178182 3.723637 15.010909-15.243637 2.909091 21.294546 19.2 9.541818-19.316364 9.425455-3.258182 21.178181-14.778182-15.476363z" fill="#2196F3" p-id="1275"></path><path d="M407.272727 90.647273a486.632727 486.632727 0 0 1 504.552728 11.636363l25.018181-14.429091A512 512 0 0 0 139.636364 546.909091l25.018181-14.429091A486.981818 486.981818 0 0 1 407.272727 90.647273zM893.323636 933.352727a486.749091 486.749091 0 0 1-504.669091-11.636363l-24.901818 14.429091A512 512 0 0 0 1161.192727 477.090909l-24.901818 13.963636a486.981818 486.981818 0 0 1-242.967273 442.298182z" fill="#2196F3" p-id="1276"></path><path d="M814.545455 795.927273a327.447273 327.447273 0 0 1-258.21091 29.556363l-29.78909 17.105455A353.163636 353.163636 0 0 0 998.865455 570.181818l-29.789091 17.105455A326.865455 326.865455 0 0 1 814.545455 795.927273zM486.865455 228.072727A327.447273 327.447273 0 0 1 744.727273 198.516364l29.789091-17.105455A353.163636 353.163636 0 0 0 302.545455 453.818182l29.78909-17.105455A326.865455 326.865455 0 0 1 486.865455 228.072727zM1288.378182 374.690909a53.294545 53.294545 0 0 1-14.429091 11.636364L229.469091 989.090909a53.876364 53.876364 0 0 1-73.425455-19.665454L7.214545 710.632727a53.527273 53.527273 0 0 1 19.781819-73.309091L1071.476364 34.909091a53.876364 53.876364 0 0 1 73.425454 19.665454l148.829091 258.327273a53.061818 53.061818 0 0 1 5.352727 40.727273 55.272727 55.272727 0 0 1-10.705454 21.061818zM32.232727 665.716364A28.043636 28.043636 0 0 0 29.323636 698.181818l148.829091 257.978182a28.392727 28.392727 0 0 0 38.516364 10.356364l1044.48-601.949091a28.16 28.16 0 0 0 10.356364-38.516364L1122.676364 67.84a28.276364 28.276364 0 0 0-38.4-10.356364L39.68 659.432727a27.810909 27.810909 0 0 0-7.447273 6.283637z" fill="#2196F3" p-id="1277"></path><path d="M477.090909 500.945455l22.109091 38.283636-15.36 8.843636-13.963636-24.436363-151.272728 87.621818 14.545455 25.134545-15.243636 8.843637-23.272728-39.330909L377.949091 558.545455c-6.050909-4.887273-11.636364-8.843636-15.825455-11.636364l14.894546-12.450909c3.956364 3.141818 9.658182 8.145455 17.105454 14.894545zM459.869091 698.181818l-48.407273 28.043637 7.44727Line truncated

After

Width:  |  Height:  |  Size: 7.4 KiB

+1
View File
@@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1724316565416" class="icon" viewBox="0 0 1300 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1339" xmlns:xlink="http://www.w3.org/1999/xlink" width="253.90625" height="200"><path d="M784.058182 99.258182l10.938182 18.385454-21.294546-2.56-14.196363 16.058182-4.072728-21.061818-19.781818-8.494545 18.734546-10.472728 2.094545-21.294545 15.709091 14.545454 20.945454-4.654545-9.076363 19.549091zM1067.287273 642.443636l-18.501818 10.821819 2.56-21.294546-16.058182-14.196364 21.061818-4.072727 8.494545-19.665454 10.472728 18.734545 21.294545 1.978182-14.661818 15.709091 4.770909 20.945454-19.432727-8.96z" fill="#13C463" p-id="1340"></path><path d="M1067.287273 642.443636l-18.501818 10.821819 2.56-21.294546-16.058182-14.196364 21.061818-4.072727 8.494545-19.665454 10.472728 18.734545 21.294545 1.978182-14.661818 15.709091 4.770909 20.945454-19.432727-8.96zM571.927273 100.072727l-17.454546-12.567272 20.596364-6.167273 6.516364-20.48 12.218181 17.570909 21.410909-0.116364-12.916363 17.105455 6.749091 20.363636-20.247273-6.981818-17.338182 12.683636 0.465455-21.410909zM991.418182 784.407273l-21.178182 3.490909 10.123636-18.967273-9.774545-18.967273 21.061818 3.723637 15.127273-15.243637 2.909091 21.294546 19.2 9.658182-19.316364 9.309091-3.258182 21.178181-14.894545-15.476363zM427.985455 156.741818L407.272727 151.505455l16.872728-13.265455-1.396364-21.410909 17.803636 11.985454 20.014546-7.912727-5.934546 20.596364 13.730909 16.523636-21.410909 0.814546-11.52 18.152727-7.447272-20.247273zM854.225455 896.465455l-20.712728-5.352728 16.872728-13.265454-1.396364-21.294546 17.803636 11.869091 20.014546-7.912727-5.934546 20.712727 13.730909 16.523637-21.527272 0.814545-11.403637 18.036364-7.447272-20.130909zM562.501818 923.694545l10.821818 18.385455-21.294545-2.56-14.196364 16.058182-4.072727-21.061818-19.665455-8.494546 18.734546-10.356363 1.978182-21.41091 15.709091 14.661819 20.945454-4.770909-8.96 19.54909zM242.734545 420.770909l-18.385454 10.938182 2.56-21.294546-16.058182-14.196363 21.061818-4.189091 8.494546-19.665455 10.356363 18.734546 21.410909 2.094545-14.545454 15.709091 4.654545 20.945455-19.549091-9.076364z" fill="#13C463" p-id="1341"></path><path d="M242.734545 420.770909l-18.385454 10.938182 2.56-21.294546-16.058182-14.196363 21.061818-4.189091 8.494546-19.665455 10.356363 18.734546 21.410909 2.094545-14.545454 15.709091 4.654545 20.945455-19.549091-9.076364zM700.858182 943.941818l-17.454546-12.450909 20.48-6.283636 6.516364-20.48 12.334545 17.687272 21.41091-0.116363-12.916364 17.105454 6.632727 20.363637-20.247273-7.098182-17.221818 12.683636 0.465455-21.410909zM303.592727 278.807273l-21.178182 3.490909 10.123637-18.967273-9.890909-18.967273 21.178182 3.723637 15.010909-15.243637 2.909091 21.294546 19.2 9.541818-19.316364 9.425455-3.258182 21.178181-14.778182-15.476363z" fill="#13C463" p-id="1342"></path><path d="M407.272727 90.647273a486.632727 486.632727 0 0 1 504.552728 11.636363l25.018181-14.429091A512 512 0 0 0 139.636364 546.909091l25.018181-14.429091A486.981818 486.981818 0 0 1 407.272727 90.647273zM893.323636 933.352727a486.749091 486.749091 0 0 1-504.669091-11.636363l-24.901818 14.429091A512 512 0 0 0 1161.192727 477.090909l-24.901818 13.963636a486.981818 486.981818 0 0 1-242.967273 442.298182z" fill="#13C463" p-id="1343"></path><path d="M814.545455 795.927273a327.447273 327.447273 0 0 1-258.21091 29.556363l-29.78909 17.105455A353.163636 353.163636 0 0 0 998.865455 570.181818l-29.789091 17.105455A326.865455 326.865455 0 0 1 814.545455 795.927273zM486.865455 228.072727A327.447273 327.447273 0 0 1 744.727273 198.516364l29.789091-17.105455A353.163636 353.163636 0 0 0 302.545455 453.818182l29.78909-17.105455A326.865455 326.865455 0 0 1 486.865455 228.072727zM1288.378182 374.690909a53.294545 53.294545 0 0 1-14.429091 11.636364L229.469091 989.090909a53.876364 53.876364 0 0 1-73.425455-19.665454L7.214545 710.632727a53.527273 53.527273 0 0 1 19.781819-73.309091L1071.476364 34.909091a53.876364 53.876364 0 0 1 73.425454 19.665454l148.829091 258.327273a53.061818 53.061818 0 0 1 5.352727 40.727273 55.272727 55.272727 0 0 1-10.705454 21.061818zM32.232727 665.716364A28.043636 28.043636 0 0 0 29.323636 698.181818l148.829091 257.978182a28.392727 28.392727 0 0 0 38.516364 10.356364l1044.48-601.949091a28.16 28.16 0 0 0 10.356364-38.516364L1122.676364 67.84a28.276364 28.276364 0 0 0-38.4-10.356364L39.68 659.432727a27.810909 27.810909 0 0 0-7.447273 6.283637z" fill="#13C463" p-id="1344"></path><path d="M356.770909 569.250909l22.341818 38.749091-15.476363 8.727273L349.090909 592.64l-153.483636 88.785455 14.778182 25.483636-15.476364 8.96-23.272727-39.912727L256 627.2c-6.283636-4.887273-11.636364-8.843636-16.174545-11.636364L256 602.647273c3.956364 3.141818 9.774545 8.261818 17.338182 15.127272z m-17.338182 199.447273l-49.221818 28.392727 7.563636 13.149091-15.47Line truncated

After

Width:  |  Height:  |  Size: 10 KiB

+1
View File
@@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1724316570161" class="icon" viewBox="0 0 1185 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1505" xmlns:xlink="http://www.w3.org/1999/xlink" width="231.4453125" height="200"><path d="M414.276535 230.004913l-2.443086-31.647244 26.446614 17.351559 29.437984-11.852598-8.143622 30.31685 20.423559 24.221229-31.623055 1.475527-16.722646 26.801386-11.239811-29.760504-30.663559-7.522772zM581.664252 176.902047l13.884472-28.542992 14.206993 28.220473 31.42148 4.321763-22.350614 22.092599 5.684409 31.123149-28.180157-14.513385-27.897953 14.819779 5.28126-31.066709-22.76989-21.689448zM896.507969 672.735748l17.754708 26.398236-31.494047-2.064126-19.560819 24.705008-7.95011-30.502299-29.575055-11.02211 26.744945-16.771024 1.104629-31.526299 24.414741 20.197795 30.268472-8.619338zM777.030551 801.961323l2.112504 31.647244-26.446614-17.682142-29.413795 11.546205 8.466141-30.308787-20.092976-24.221229 31.606929-1.153008 17.045166-26.793323 10.86085 29.704063 30.647433 7.837229zM609.312252 853.451591l-14.198929 28.518803-14.110236-28.542992-31.405355-4.636221 22.673134-22.084535-5.36189-31.12315 27.833449 14.835906 28.188221-14.803654-5.28126 31.066709 22.76989 22.060346zM298.435528 354.828094l-17.448315-26.390173 31.485984 2.394709 19.875275-24.753386 7.611465 30.865134 29.583118 11.288189-27.011024 16.779087-1.419086 31.526299-24.084158-20.504189-30.518425 8.280693zM962.56 91.53915a43.636913 43.636913 0 0 1 59.375874 15.601889l138.627024 236.753638c12.175118 20.447748 5.12 47.208819-15.609953 59.375874L229.13411 938.185575a43.636913 43.636913 0 0 1-59.375874-15.60189L31.12315 685.773606a43.636913 43.636913 0 0 1 15.601889-59.319433z m25.672567 24.108346a13.594205 13.594205 0 0 0-10.441575 1.548095L61.625449 652.054173a13.586142 13.586142 0 0 0-4.853921 18.83515l138.643149 236.793953a13.586142 13.586142 0 0 0 18.843213 4.837795l915.818834-534.915024a13.957039 13.957039 0 0 0 5.160315-18.778708l-138.602834-236.78589a13.594205 13.594205 0 0 0-8.401638-6.393953z" fill="#F5222D" p-id="1506"></path><path d="M395.981606 172.338394c123.670173-72.349228 271.11811-69.462677 388.394331-5.12l29.623433-17.335433a414.574866 414.574866 0 0 0-112.107842-47.071748 429.991307 429.991307 0 0 0-162.009701-10.498016 412.792945 412.792945 0 0 0-158.80063 54.707401 417.856504 417.856504 0 0 0-125.363402 111.922394A426.282331 426.282331 0 0 0 185.206929 405.004094a417.348535 417.348535 0 0 0-13.529701 120.977134l29.623433-17.335433c1.386835-133.958551 70.688252-263.958173 194.672882-336.307401z m397.666772 679.484472c-123.670173 72.365354-271.110047 69.462677-388.394331 5.128063l-29.623433 17.335433a414.679685 414.679685 0 0 0 112.075591 47.087874 429.991307 429.991307 0 0 0 162.009701 10.498016 412.744567 412.744567 0 0 0 158.808692-54.707402 423.145827 423.145827 0 0 0 209.105638-378.976756l-29.623433 17.335434c-1.072378 133.974677-70.712441 263.95011-194.350362 336.307401h-0.008063z" fill="#F5222D" p-id="1507"></path><path d="M478.377323 313.110173a226.271748 226.271748 0 0 1 109.979212-31.219905l45.668788-26.761071c-58.634079-9.13537-118.316346 2.314079-170.612914 32.735748a258.693039 258.693039 0 0 0-111.91433 132.71685l45.67685-26.761071a230.359685 230.359685 0 0 1 81.097575-80.589606l0.104819-0.120945z m232.568945 397.674835a226.328189 226.328189 0 0 1-109.979213 31.227968l-45.668787 26.753008c58.634079 9.13537 118.316346-2.314079 170.612913-32.735748a258.709165 258.709165 0 0 0 111.914331-132.71685l-45.676851 26.761071a225.215496 225.215496 0 0 1-81.097574 80.597669l-0.104819 0.112882zM188.57726 706.938961l-10.062614-17.424126 109.938897-63.471874 9.578835 16.585574 17.093543-9.869102-18.770645-32.509984-63.689575 36.767244c-4.047622-3.918614-7.804976-7.337323-11.272063-10.24l-16.859717 13.747401c3.249386 2.144756 6.595528 4.458835 9.869103 7.038993l-62.173733 35.896441 19.254426 33.348535 17.093543-9.869102zM317.44 781.142677l-19.060913-33.017953 32.679307-18.867401 4.741039 8.216189 17.093543-9.869103-48.474708-83.959937-49.772851 28.736504-7.933984-13.747401-17.432189 10.062614 7.933984 13.747402-49.264882 28.446236 48.764977 84.459842 17.093543-9.869102-5.031307-8.708032 32.171339-18.585196 19.060913 33.017952 17.432189-10.062614z m-12.505701-97.126803l-32.679307 18.867402-8.321008-14.41663 32.679307-18.867402 8.321008 14.41663z m-50.111496 28.930016l-32.171338 18.577134-8.321008-14.41663 32.171338-18.577134 8.321008 14.41663z m16.932284 29.325102l-32.171339 18.577134-8.127496-14.077984 32.171339-18.577134 8.127496 14.077984z m50.111496-28.930016l-32.679307 18.867402-8.127496-14.077984 32.679307-18.867402 8.127496 14.077984z m95.828661 7.684032c11.062425-6.38589 13.368441-15.537386 6.692284-27.099717l-25.05978-43.411149c3.55578-4.289512 7.014803-8.740283 10.48189-13.199118l-9.482079-16.424315c-3.467087 4.458835-6.92611 8.917669-10.48189 13.199118l-17.803086-30.832882 14.755275-8.Line truncated

After

Width:  |  Height:  |  Size: 11 KiB

+1
View File
@@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1724297262365" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1396" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M707.91 103c16.28 0 29.522 13.007 29.897 29.195l0.009 0.706v111.878a29.96 29.96 0 0 1-0.898 7.3l171.177-0.001c16.28 0 29.522 13.007 29.897 29.195l0.008 0.706v637.12c0 16.278-13.01 29.518-29.2 29.893l-0.705 0.008H270.884c-16.28 0-29.522-13.007-29.897-29.195l-0.008-0.706V787.274c0-16.514 13.389-29.9 29.905-29.9 16.28 0 29.522 13.007 29.897 29.194l0.008 0.706v101.924h577.4V311.88h-577.4v88.787c0 16.278-13.009 29.518-29.2 29.893l-0.705 0.008c-16.28 0-29.522-13.008-29.897-29.195l-0.008-0.706V281.979c0-16.278 13.009-29.518 29.2-29.893l0.705-0.008h408.019a29.916 29.916 0 0 1-0.89-6.593l-0.008-0.706v-81.978H132.808v407.113h385.787L408.223 456.982c-11.36-11.624-11.329-30.143-0.066-41.729l0.554-0.555c11.625-11.358 30.147-11.327 41.734-0.066l0.555 0.554 161.028 164.762c11.244 11.504 11.344 29.793 0.362 41.42l-0.55 0.565-161.027 161.849c-11.648 11.707-30.583 11.757-42.292 0.11-11.524-11.461-11.754-29.979-0.657-41.723l0.546-0.563 111.319-111.89H102.905c-16.28 0-29.522-13.007-29.897-29.195l-0.008-0.705V132.9c0-16.278 13.01-29.518 29.2-29.893l0.705-0.008H707.91z" p-id="1397"></path></svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

+8
View File
@@ -5,6 +5,7 @@ export interface AppLinkGroup {
// 链接列表
links: AppLink[]
}
// APP 链接
export interface AppLink {
// 链接名称
@@ -21,6 +22,8 @@ export const enum APP_LINK_TYPE_ENUM {
ACTIVITY_COMBINATION,
// 秒杀活动
ACTIVITY_SECKILL,
// 积分商城活动
ACTIVITY_POINT,
// 文章详情
ARTICLE_DETAIL,
// 优惠券详情
@@ -130,6 +133,11 @@ export const APP_LINK_GROUP_LIST = [
path: '/pages/activity/seckill/list',
type: APP_LINK_TYPE_ENUM.ACTIVITY_SECKILL
},
{
name: '积分商城活动',
path: '/pages/activity/point/list',
type: APP_LINK_TYPE_ENUM.ACTIVITY_POINT
},
{
name: '签到中心',
path: '/pages/app/sign'
@@ -54,7 +54,7 @@ const currentLocale = computed(() => localeStore.currentLocale)
<ElConfigProvider
:namespace="variables.elNamespace"
:locale="currentLocale.elLocale"
:message="{ max: 1 }"
:message="{ max: 5 }"
:size="size"
>
<slot></slot>
@@ -10,12 +10,13 @@ const prefixCls = getPrefixCls('content-wrap')
defineProps({
title: propTypes.string.def(''),
message: propTypes.string.def('')
message: propTypes.string.def(''),
bodyStyle: propTypes.object.def({ padding: '10px' })
})
</script>
<template>
<ElCard :class="[prefixCls, 'mb-15px']" shadow="never">
<ElCard :body-style="bodyStyle" :class="[prefixCls, 'mb-15px']" shadow="never">
<template v-if="title" #header>
<div class="flex items-center">
<span class="text-16px font-700">{{ title }}</span>
@@ -30,8 +31,6 @@ defineProps({
</div>
</div>
</template>
<div>
<slot></slot>
</div>
<slot></slot>
</ElCard>
</template>
+33 -33
View File
@@ -548,10 +548,10 @@ const inputChange = () => {
<el-form>
<el-form-item label="类型">
<el-radio-group v-model="cronValue.second.type">
<el-radio-button label="0">任意值</el-radio-button>
<el-radio-button label="1">范围</el-radio-button>
<el-radio-button label="2">间隔</el-radio-button>
<el-radio-button label="3">指定</el-radio-button>
<el-radio-button value="0">任意值</el-radio-button>
<el-radio-button value="1">范围</el-radio-button>
<el-radio-button value="2">间隔</el-radio-button>
<el-radio-button value="3">指定</el-radio-button>
</el-radio-group>
</el-form-item>
<el-form-item v-if="cronValue.second.type == '1'" label="范围">
@@ -607,10 +607,10 @@ const inputChange = () => {
<el-form>
<el-form-item label="类型">
<el-radio-group v-model="cronValue.minute.type">
<el-radio-button label="0">任意值</el-radio-button>
<el-radio-button label="1">范围</el-radio-button>
<el-radio-button label="2">间隔</el-radio-button>
<el-radio-button label="3">指定</el-radio-button>
<el-radio-button value="0">任意值</el-radio-button>
<el-radio-button value="1">范围</el-radio-button>
<el-radio-button value="2">间隔</el-radio-button>
<el-radio-button value="3">指定</el-radio-button>
</el-radio-group>
</el-form-item>
<el-form-item v-if="cronValue.minute.type == '1'" label="范围">
@@ -666,10 +666,10 @@ const inputChange = () => {
<el-form>
<el-form-item label="类型">
<el-radio-group v-model="cronValue.hour.type">
<el-radio-button label="0">任意值</el-radio-button>
<el-radio-button label="1">范围</el-radio-button>
<el-radio-button label="2">间隔</el-radio-button>
<el-radio-button label="3">指定</el-radio-button>
<el-radio-button value="0">任意值</el-radio-button>
<el-radio-button value="1">范围</el-radio-button>
<el-radio-button value="2">间隔</el-radio-button>
<el-radio-button value="3">指定</el-radio-button>
</el-radio-group>
</el-form-item>
<el-form-item v-if="cronValue.hour.type == '1'" label="范围">
@@ -725,12 +725,12 @@ const inputChange = () => {
<el-form>
<el-form-item label="类型">
<el-radio-group v-model="cronValue.day.type">
<el-radio-button label="0">任意值</el-radio-button>
<el-radio-button label="1">范围</el-radio-button>
<el-radio-button label="2">间隔</el-radio-button>
<el-radio-button label="3">指定</el-radio-button>
<el-radio-button label="4">本月最后一天</el-radio-button>
<el-radio-button label="5">不指定</el-radio-button>
<el-radio-button value="0">任意值</el-radio-button>
<el-radio-button value="1">范围</el-radio-button>
<el-radio-button value="2">间隔</el-radio-button>
<el-radio-button value="3">指定</el-radio-button>
<el-radio-button value="4">本月最后一天</el-radio-button>
<el-radio-button value="5">不指定</el-radio-button>
</el-radio-group>
</el-form-item>
<el-form-item v-if="cronValue.day.type == '1'" label="范围">
@@ -786,10 +786,10 @@ const inputChange = () => {
<el-form>
<el-form-item label="类型">
<el-radio-group v-model="cronValue.month.type">
<el-radio-button label="0">任意值</el-radio-button>
<el-radio-button label="1">范围</el-radio-button>
<el-radio-button label="2">间隔</el-radio-button>
<el-radio-button label="3">指定</el-radio-button>
<el-radio-button value="0">任意值</el-radio-button>
<el-radio-button value="1">范围</el-radio-button>
<el-radio-button value="2">间隔</el-radio-button>
<el-radio-button value="3">指定</el-radio-button>
</el-radio-group>
</el-form-item>
<el-form-item v-if="cronValue.month.type == '1'" label="范围">
@@ -846,12 +846,12 @@ const inputChange = () => {
<el-form>
<el-form-item label="类型">
<el-radio-group v-model="cronValue.week.type">
<el-radio-button label="0">任意值</el-radio-button>
<el-radio-button label="1">范围</el-radio-button>
<el-radio-button label="2">间隔</el-radio-button>
<el-radio-button label="3">指定</el-radio-button>
<el-radio-button label="4">本月最后一周</el-radio-button>
<el-radio-button label="5">不指定</el-radio-button>
<el-radio-button value="0">任意值</el-radio-button>
<el-radio-button value="1">范围</el-radio-button>
<el-radio-button value="2">间隔</el-radio-button>
<el-radio-button value="3">指定</el-radio-button>
<el-radio-button value="4">本月最后一周</el-radio-button>
<el-radio-button value="5">不指定</el-radio-button>
</el-radio-group>
</el-form-item>
<el-form-item v-if="cronValue.week.type == '1'" label="范围">
@@ -925,11 +925,11 @@ const inputChange = () => {
<el-form>
<el-form-item label="类型">
<el-radio-group v-model="cronValue.year.type">
<el-radio-button label="-1">忽略</el-radio-button>
<el-radio-button label="0">任意值</el-radio-button>
<el-radio-button label="1">范围</el-radio-button>
<el-radio-button label="2">间隔</el-radio-button>
<el-radio-button label="3">指定</el-radio-button>
<el-radio-button value="-1">忽略</el-radio-button>
<el-radio-button value="0">任意值</el-radio-button>
<el-radio-button value="1">范围</el-radio-button>
<el-radio-button value="2">间隔</el-radio-button>
<el-radio-button value="3">指定</el-radio-button>
</el-radio-group>
</el-form-item>
<el-form-item v-if="cronValue.year.type == '1'" label="范围">
-3
View File
@@ -1,3 +0,0 @@
import DictSelect from './src/DictSelect.vue'
export { DictSelect }
@@ -1,46 +0,0 @@
<!-- 数据字典 Select 选择器 -->
<template>
<el-select class="w-1/1" v-bind="attrs">
<template v-if="valueType === 'int'">
<el-option
v-for="(dict, index) in getIntDictOptions(dictType)"
:key="index"
:label="dict.label"
:value="dict.value"
/>
</template>
<template v-if="valueType === 'str'">
<el-option
v-for="(dict, index) in getStrDictOptions(dictType)"
:key="index"
:label="dict.label"
:value="dict.value"
/>
</template>
<template v-if="valueType === 'bool'">
<el-option
v-for="(dict, index) in getBoolDictOptions(dictType)"
:key="index"
:label="dict.label"
:value="dict.value"
/>
</template>
</el-select>
</template>
<script lang="ts" setup>
import { getBoolDictOptions, getIntDictOptions, getStrDictOptions } from '@/utils/dict'
// 接受父组件参数
interface Props {
dictType: string // 字典类型
valueType: string // 字典值类型
}
withDefaults(defineProps<Props>(), {
dictType: '',
valueType: 'str'
})
const attrs = useAttrs()
defineOptions({ name: 'DictSelect' })
</script>
+60 -30
View File
@@ -1,8 +1,9 @@
<script lang="tsx">
import { defineComponent, PropType, ref } from 'vue'
import { computed, defineComponent, PropType } from 'vue'
import { isHexColor } from '@/utils/color'
import { ElTag } from 'element-plus'
import { DictDataType, getDictOptions } from '@/utils/dict'
import { isArray, isBoolean, isNumber, isString } from '@/utils/is'
export default defineComponent({
name: 'DictTag',
@@ -12,49 +13,78 @@ export default defineComponent({
required: true
},
value: {
type: [String, Number, Boolean] as PropType<string | number | boolean>,
type: [String, Number, Boolean, Array],
required: true
},
// 字符串分隔符 只有当 props.value 传入值为字符串时有效
separator: {
type: String as PropType<string>,
default: ','
},
// 每个 tag 之间的间隔,默认为 5px,参考的 el-row 的 gutter
gutter: {
type: String as PropType<string>,
default: '5px'
}
},
setup(props) {
const dictData = ref<DictDataType>()
const getDictObj = (dictType: string, value: string) => {
const dictOptions = getDictOptions(dictType)
dictOptions.forEach((dict: DictDataType) => {
if (dict.value === value) {
if (dict.colorType + '' === 'primary' || dict.colorType + '' === 'default') {
dict.colorType = ''
}
dictData.value = dict
}
})
}
const rederDictTag = () => {
const valueArr: any = computed(() => {
// 1. 是 Number 类型和 Boolean 类型的情况
if (isNumber(props.value) || isBoolean(props.value)) {
return [String(props.value)]
}
// 2. 是字符串(进一步判断是否有包含分隔符号 -> props.sepSymbol )
else if (isString(props.value)) {
return props.value.split(props.separator)
}
// 3. 数组
else if (isArray(props.value)) {
return props.value.map(String)
}
return []
})
const renderDictTag = () => {
if (!props.type) {
return null
}
// 解决自定义字典标签值为零时标签不渲染的问题
if (props.value === undefined || props.value === null) {
if (props.value === undefined || props.value === null || props.value === '') {
return null
}
getDictObj(props.type, props.value.toString())
// 添加标签的文字颜色为白色,解决自定义背景颜色时标签文字看不清的问题
const dictOptions = getDictOptions(props.type)
return (
<ElTag
style={dictData.value?.cssClass ? 'color: #fff' : ''}
type={dictData.value?.colorType}
color={
dictData.value?.cssClass && isHexColor(dictData.value?.cssClass)
? dictData.value?.cssClass
: ''
}
disableTransitions={true}
<div
class="dict-tag"
style={{
display: 'inline-flex',
gap: props.gutter,
justifyContent: 'center',
alignItems: 'center'
}}
>
{dictData.value?.label}
</ElTag>
{dictOptions.map((dict: DictDataType) => {
if (valueArr.value.includes(dict.value)) {
if (dict.colorType + '' === 'primary' || dict.colorType + '' === 'default') {
dict.colorType = ''
}
return (
// 添加标签的文字颜色为白色,解决自定义背景颜色时标签文字看不清的问题
<ElTag
style={dict?.cssClass ? 'color: #fff' : ''}
type={dict?.colorType || null}
color={dict?.cssClass && isHexColor(dict?.cssClass) ? dict?.cssClass : ''}
disableTransitions={true}
>
{dict?.label}
</ElTag>
)
}
})}
</div>
)
}
return () => rederDictTag()
return () => renderDictTag()
}
})
</script>
@@ -165,6 +165,7 @@ $toolbar-position: -55px;
width: 80px;
height: 25px;
font-size: 12px;
color: #6a6a6a;
line-height: 25px;
text-align: center;
background: #fff;
@@ -11,8 +11,8 @@
<el-form :model="formData" label-width="80px">
<el-form-item label="组件背景" prop="bgType">
<el-radio-group v-model="formData.bgType">
<el-radio label="color">纯色</el-radio>
<el-radio label="img">图片</el-radio>
<el-radio value="color">纯色</el-radio>
<el-radio value="img">图片</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="选择颜色" prop="bgColor" v-if="formData.bgType === 'color'">
@@ -95,6 +95,7 @@ const handleCloneComponent = (component: DiyComponent<any>) => {
.editor-left {
z-index: 1;
flex-shrink: 0;
user-select: none;
box-shadow: 8px 0 8px -8px rgb(0 0 0 / 12%);
:deep(.el-collapse) {
@@ -5,12 +5,12 @@
<el-form-item label="样式" prop="type">
<el-radio-group v-model="formData.type">
<el-tooltip class="item" content="默认" placement="bottom">
<el-radio-button label="default">
<el-radio-button value="default">
<Icon icon="system-uicons:carousel" />
</el-radio-button>
</el-tooltip>
<el-tooltip class="item" content="卡片" placement="bottom">
<el-radio-button label="card">
<el-radio-button value="card">
<Icon icon="ic:round-view-carousel" />
</el-radio-button>
</el-tooltip>
@@ -18,8 +18,8 @@
</el-form-item>
<el-form-item label="指示器" prop="indicator">
<el-radio-group v-model="formData.indicator">
<el-radio label="dot">小圆点</el-radio>
<el-radio label="number">数字</el-radio>
<el-radio value="dot">小圆点</el-radio>
<el-radio value="number">数字</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="是否轮播" prop="autoplay">
@@ -43,8 +43,8 @@
<template #default="{ element }">
<el-form-item label="类型" prop="type" class="m-b-8px!" label-width="40px">
<el-radio-group v-model="element.type">
<el-radio label="img">图片</el-radio>
<el-radio label="video">视频</el-radio>
<el-radio value="img">图片</el-radio>
<el-radio value="video">视频</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item
@@ -26,17 +26,17 @@
<el-form-item label="列数" prop="type">
<el-radio-group v-model="formData.columns">
<el-tooltip class="item" content="一列" placement="bottom">
<el-radio-button :label="1">
<el-radio-button :value="1">
<Icon icon="fluent:text-column-one-24-filled" />
</el-radio-button>
</el-tooltip>
<el-tooltip class="item" content="二列" placement="bottom">
<el-radio-button :label="2">
<el-radio-button :value="2">
<Icon icon="fluent:text-column-two-24-filled" />
</el-radio-button>
</el-tooltip>
<el-tooltip class="item" content="三列" placement="bottom">
<el-radio-button :label="3">
<el-radio-button :value="3">
<Icon icon="fluent:text-column-three-24-filled" />
</el-radio-button>
</el-tooltip>
@@ -11,7 +11,7 @@
:key="index"
:content="item.text"
>
<el-radio-button :label="item.type">
<el-radio-button :value="item.type">
<Icon :icon="item.icon" />
</el-radio-button>
</el-tooltip>
@@ -24,12 +24,12 @@
<el-form-item label="左右边距" prop="paddingType">
<el-radio-group v-model="formData!.paddingType">
<el-tooltip content="无边距" placement="top">
<el-radio-button label="none">
<el-radio-button value="none">
<Icon icon="tabler:box-padding" />
</el-radio-button>
</el-tooltip>
<el-tooltip content="左右留边" placement="top">
<el-radio-button label="horizontal">
<el-radio-button value="horizontal">
<Icon icon="vaadin:padding" />
</el-radio-button>
</el-tooltip>
@@ -44,7 +44,7 @@ defineOptions({ name: 'FloatingActionButton' })
defineProps<{ property: FloatingActionButtonProperty }>()
// 是否展开
const expanded = ref(true)
const expanded = ref(false)
// 处理展开/折叠
const handleToggleFab = () => {
expanded.value = !expanded.value
@@ -3,8 +3,8 @@
<el-card header="按钮配置" class="property-group" shadow="never">
<el-form-item label="展开方向" prop="direction">
<el-radio-group v-model="formData.direction">
<el-radio label="vertical">垂直</el-radio>
<el-radio label="horizontal">水平</el-radio>
<el-radio value="vertical">垂直</el-radio>
<el-radio value="horizontal">水平</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="显示文字" prop="showText">
@@ -4,8 +4,8 @@
<el-form label-width="80px" :model="formData" class="m-t-8px">
<el-form-item label="每行数量" prop="column">
<el-radio-group v-model="formData.column">
<el-radio :label="3">3个</el-radio>
<el-radio :label="4">4个</el-radio>
<el-radio :value="3">3个</el-radio>
<el-radio :value="4">4个</el-radio>
</el-radio-group>
</el-form-item>
@@ -4,21 +4,21 @@
<el-form label-width="80px" :model="formData" class="m-t-8px">
<el-form-item label="布局" prop="layout">
<el-radio-group v-model="formData.layout">
<el-radio label="iconText">图标+文字</el-radio>
<el-radio label="icon">仅图标</el-radio>
<el-radio value="iconText">图标+文字</el-radio>
<el-radio value="icon">仅图标</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="行数" prop="row">
<el-radio-group v-model="formData.row">
<el-radio :label="1">1行</el-radio>
<el-radio :label="2">2行</el-radio>
<el-radio :value="1">1行</el-radio>
<el-radio :value="2">2行</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="列数" prop="column">
<el-radio-group v-model="formData.column">
<el-radio :label="3">3列</el-radio>
<el-radio :label="4">4列</el-radio>
<el-radio :label="5">5列</el-radio>
<el-radio :value="3">3列</el-radio>
<el-radio :value="4">4列</el-radio>
<el-radio :value="5">5列</el-radio>
</el-radio-group>
</el-form-item>
@@ -14,9 +14,9 @@
<template v-if="selectedHotAreaIndex === cellIndex">
<el-form-item label="类型" :prop="`cell[${cellIndex}].type`">
<el-radio-group v-model="cell.type">
<el-radio label="text">文字</el-radio>
<el-radio label="image">图片</el-radio>
<el-radio label="search">搜索框</el-radio>
<el-radio value="text">文字</el-radio>
<el-radio value="image">图片</el-radio>
<el-radio value="search">搜索框</el-radio>
</el-radio-group>
</el-form-item>
<!-- 1. 文字 -->
@@ -2,27 +2,27 @@
<el-form label-width="80px" :model="formData" :rules="rules">
<el-form-item label="样式" prop="styleType">
<el-radio-group v-model="formData!.styleType">
<el-radio label="normal">标准</el-radio>
<el-radio value="normal">标准</el-radio>
<el-tooltip
content="沉侵式头部仅支持微信小程序、APP,建议页面第一个组件为图片展示类组件"
placement="top"
>
<el-radio label="inner">沉浸式</el-radio>
<el-radio value="inner">沉浸式</el-radio>
</el-tooltip>
</el-radio-group>
</el-form-item>
<el-form-item label="常驻显示" prop="alwaysShow" v-if="formData.styleType === 'inner'">
<el-radio-group v-model="formData!.alwaysShow">
<el-radio :label="false">关闭</el-radio>
<el-radio :value="false">关闭</el-radio>
<el-tooltip content="常驻显示关闭后,头部小组件将在页面滑动时淡入" placement="top">
<el-radio :label="true">开启</el-radio>
<el-radio :value="true">开启</el-radio>
</el-tooltip>
</el-radio-group>
</el-form-item>
<el-form-item label="背景类型" prop="bgType">
<el-radio-group v-model="formData.bgType">
<el-radio label="color">纯色</el-radio>
<el-radio label="img">图片</el-radio>
<el-radio value="color">纯色</el-radio>
<el-radio value="img">图片</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="背景颜色" prop="bgColor" v-if="formData.bgType === 'color'">
@@ -11,10 +11,10 @@
<el-form-item label="显示次数" :prop="`list[${index}].showType`">
<el-radio-group v-model="element.showType">
<el-tooltip content="只显示一次,下次打开时不显示" placement="bottom">
<el-radio label="once">一次</el-radio>
<el-radio value="once">一次</el-radio>
</el-tooltip>
<el-tooltip content="每次打开时都会显示" placement="bottom">
<el-radio label="always">不限</el-radio>
<el-radio value="always">不限</el-radio>
</el-tooltip>
</el-radio-group>
</el-form-item>
@@ -67,15 +67,15 @@
class="text-16px"
:style="{ color: property.fields.price.color }"
>
¥{{ spu.price }}
¥{{ fenToYuan(spu.price as any) }}
</span>
<!-- 市场价 -->
<span
v-if="property.fields.marketPrice.show && spu.marketPrice"
class="ml-4px text-10px line-through"
:style="{ color: property.fields.marketPrice.color }"
>¥{{ spu.marketPrice }}</span
>
>¥{{ fenToYuan(spu.marketPrice) }}
</span>
</div>
<div class="text-12px">
<!-- 销量 -->
@@ -117,6 +117,7 @@
<script setup lang="ts">
import { ProductCardProperty } from './config'
import * as ProductSpuApi from '@/api/mall/product/spu'
import { fenToYuan } from '../../../../../utils'
/** 商品卡片 */
defineOptions({ name: 'ProductCard' })
@@ -8,17 +8,17 @@
<el-form-item label="布局" prop="type">
<el-radio-group v-model="formData.layoutType">
<el-tooltip class="item" content="单列大图" placement="bottom">
<el-radio-button label="oneColBigImg">
<el-radio-button value="oneColBigImg">
<Icon icon="fluent:text-column-one-24-filled" />
</el-radio-button>
</el-tooltip>
<el-tooltip class="item" content="单列小图" placement="bottom">
<el-radio-button label="oneColSmallImg">
<el-radio-button value="oneColSmallImg">
<Icon icon="fluent:text-column-two-left-24-filled" />
</el-radio-button>
</el-tooltip>
<el-tooltip class="item" content="双列" placement="bottom">
<el-radio-button label="twoCol">
<el-radio-button value="twoCol">
<Icon icon="fluent:text-column-two-24-filled" />
</el-radio-button>
</el-tooltip>
@@ -74,8 +74,8 @@
<el-card header="按钮" class="property-group" shadow="never">
<el-form-item label="按钮类型" prop="btnBuy.type">
<el-radio-group v-model="formData.btnBuy.type">
<el-radio-button label="text">文字</el-radio-button>
<el-radio-button label="img">图片</el-radio-button>
<el-radio-button value="text">文字</el-radio-button>
<el-radio-button value="img">图片</el-radio-button>
</el-radio-group>
</el-form-item>
<template v-if="formData.btnBuy.type === 'text'">
@@ -54,7 +54,7 @@
class="text-12px"
:style="{ color: property.fields.price.color }"
>
¥{{ spu.price }}
¥{{ fenToYuan(spu.price) }}
</span>
</div>
</div>
@@ -65,6 +65,7 @@
<script setup lang="ts">
import { ProductListProperty } from './config'
import * as ProductSpuApi from '@/api/mall/product/spu'
import { fenToYuan } from '@/utils'
/** 商品栏 */
defineOptions({ name: 'ProductList' })
@@ -8,17 +8,17 @@
<el-form-item label="布局" prop="type">
<el-radio-group v-model="formData.layoutType">
<el-tooltip class="item" content="双列" placement="bottom">
<el-radio-button label="twoCol">
<el-radio-button value="twoCol">
<Icon icon="fluent:text-column-two-24-filled" />
</el-radio-button>
</el-tooltip>
<el-tooltip class="item" content="三列" placement="bottom">
<el-radio-button label="threeCol">
<el-radio-button value="threeCol">
<Icon icon="fluent:text-column-three-24-filled" />
</el-radio-button>
</el-tooltip>
<el-tooltip class="item" content="水平滑动" placement="bottom">
<el-radio-button label="horizSwiper">
<el-radio-button value="horizSwiper">
<Icon icon="system-uicons:carousel" />
</el-radio-button>
</el-tooltip>
@@ -3,13 +3,21 @@ import { ComponentStyle, DiyComponent } from '@/components/DiyEditor/util'
/** 拼团属性 */
export interface PromotionCombinationProperty {
// 布局类型:单列 | 三列
layoutType: 'oneCol' | 'threeCol'
layoutType: 'oneColBigImg' | 'oneColSmallImg' | 'twoCol'
// 商品字段
fields: {
// 商品名称
name: PromotionCombinationFieldProperty
// 商品简介
introduction: PromotionCombinationFieldProperty
// 商品价格
price: PromotionCombinationFieldProperty
// 市场价
marketPrice: PromotionCombinationFieldProperty
// 商品销量
salesCount: PromotionCombinationFieldProperty
// 商品库存
stock: PromotionCombinationFieldProperty
}
// 角标
badge: {
@@ -18,6 +26,19 @@ export interface PromotionCombinationProperty {
// 角标图片
imgUrl: string
}
// 按钮
btnBuy: {
// 类型:文字 | 图片
type: 'text' | 'img'
// 文字
text: string
// 文字按钮:背景渐变起始颜色
bgBeginColor: string
// 文字按钮:背景渐变结束颜色
bgEndColor: string
// 图片按钮:图片地址
imgUrl: string
}
// 上圆角
borderRadiusTop: number
// 下圆角
@@ -25,7 +46,7 @@ export interface PromotionCombinationProperty {
// 间距
space: number
// 拼团活动编号
activityId: number
activityIds: number[]
// 组件样式
style: ComponentStyle
}
@@ -44,12 +65,23 @@ export const component = {
name: '拼团',
icon: 'mdi:account-group',
property: {
layoutType: 'oneCol',
layoutType: 'oneColBigImg',
fields: {
name: { show: true, color: '#000' },
price: { show: true, color: '#ff3000' }
introduction: { show: true, color: '#999' },
price: { show: true, color: '#ff3000' },
marketPrice: { show: true, color: '#c4c4c4' },
salesCount: { show: true, color: '#c4c4c4' },
stock: { show: false, color: '#c4c4c4' }
},
badge: { show: false, imgUrl: '' },
btnBuy: {
type: 'text',
text: '去拼团',
bgBeginColor: '#FF6000',
bgEndColor: '#FE832A',
imgUrl: ''
},
borderRadiusTop: 8,
borderRadiusBottom: 8,
space: 8,
@@ -1,125 +1,201 @@
<template>
<el-scrollbar class="z-1 min-h-30px" wrap-class="w-full" ref="containerRef">
<!-- 商品网格 -->
<div :class="`box-content min-h-30px w-full flex flex-row flex-wrap`" ref="containerRef">
<div
class="grid overflow-x-auto"
class="relative box-content flex flex-row flex-wrap overflow-hidden bg-white"
:style="{
gridGap: `${property.space}px`,
gridTemplateColumns,
width: scrollbarWidth
...calculateSpace(index),
...calculateWidth(),
borderTopLeftRadius: `${property.borderRadiusTop}px`,
borderTopRightRadius: `${property.borderRadiusTop}px`,
borderBottomLeftRadius: `${property.borderRadiusBottom}px`,
borderBottomRightRadius: `${property.borderRadiusBottom}px`
}"
v-for="(spu, index) in spuList"
:key="index"
>
<!-- 商品 -->
<!-- 角标 -->
<div v-if="property.badge.show" class="absolute left-0 top-0 z-1 items-center justify-center">
<el-image fit="cover" :src="property.badge.imgUrl" class="h-26px w-38px" />
</div>
<!-- 商品封面图 -->
<div
class="relative box-content flex flex-row flex-wrap overflow-hidden bg-white"
:style="{
borderTopLeftRadius: `${property.borderRadiusTop}px`,
borderTopRightRadius: `${property.borderRadiusTop}px`,
borderBottomLeftRadius: `${property.borderRadiusBottom}px`,
borderBottomRightRadius: `${property.borderRadiusBottom}px`
}"
v-for="(spu, index) in spuList"
:key="index"
:class="[
'h-140px',
{
'w-full': property.layoutType !== 'oneColSmallImg',
'w-140px': property.layoutType === 'oneColSmallImg'
}
]"
>
<!-- 角标 -->
<div
v-if="property.badge.show"
class="absolute left-0 top-0 z-1 items-center justify-center"
>
<el-image fit="cover" :src="property.badge.imgUrl" class="h-26px w-38px" />
</div>
<!-- 商品封面图 -->
<el-image fit="cover" :src="spu.picUrl" :style="{ width: imageSize, height: imageSize }" />
<el-image fit="cover" class="h-full w-full" :src="spu.picUrl" />
</div>
<div
:class="[
' flex flex-col gap-8px p-8px box-border',
{
'w-full': property.layoutType !== 'oneColSmallImg',
'w-[calc(100%-140px-16px)]': property.layoutType === 'oneColSmallImg'
}
]"
>
<!-- 商品名称 -->
<div
v-if="property.fields.name.show"
:class="[
'flex flex-col gap-8px p-8px box-border',
'text-14px ',
{
'w-[calc(100%-64px)]': columns === 2,
'w-full': columns === 3
truncate: property.layoutType !== 'oneColSmallImg',
'overflow-ellipsis line-clamp-2': property.layoutType === 'oneColSmallImg'
}
]"
:style="{ color: property.fields.name.color }"
>
<!-- 商品名称 -->
<div
v-if="property.fields.name.show"
class="truncate text-12px"
:style="{ color: property.fields.name.color }"
{{ spu.name }}
</div>
<!-- 商品简介 -->
<div
v-if="property.fields.introduction.show"
class="truncate text-12px"
:style="{ color: property.fields.introduction.color }"
>
{{ spu.introduction }}
</div>
<div>
<!-- 价格 -->
<span
v-if="property.fields.price.show"
class="text-16px"
:style="{ color: property.fields.price.color }"
>
{{ spu.name }}
</div>
<div>
<!-- 商品价格 -->
<span
v-if="property.fields.price.show"
class="text-12px"
:style="{ color: property.fields.price.color }"
>
¥{{ spu.price }}
</span>
</div>
¥{{ fenToYuan(spu.price || Infinity) }}
</span>
<!-- 市场价 -->
<span
v-if="property.fields.marketPrice.show && spu.marketPrice"
class="ml-4px text-10px line-through"
:style="{ color: property.fields.marketPrice.color }"
>¥{{ fenToYuan(spu.marketPrice) }}</span
>
</div>
<div class="text-12px">
<!-- 销量 -->
<span
v-if="property.fields.salesCount.show"
:style="{ color: property.fields.salesCount.color }"
>
已售{{ (spu.salesCount || 0) + (spu.virtualSalesCount || 0) }}件
</span>
<!-- 库存 -->
<span v-if="property.fields.stock.show" :style="{ color: property.fields.stock.color }">
库存{{ spu.stock || 0 }}
</span>
</div>
</div>
<!-- 购买按钮 -->
<div class="absolute bottom-8px right-8px">
<!-- 文字按钮 -->
<span
v-if="property.btnBuy.type === 'text'"
class="rounded-full p-x-12px p-y-4px text-12px text-white"
:style="{
background: `linear-gradient(to right, ${property.btnBuy.bgBeginColor}, ${property.btnBuy.bgEndColor}`
}"
>
{{ property.btnBuy.text }}
</span>
<!-- 图片按钮 -->
<el-image
v-else
class="h-28px w-28px rounded-full"
fit="cover"
:src="property.btnBuy.imgUrl"
/>
</div>
</div>
</el-scrollbar>
</div>
</template>
<script setup lang="ts">
import { PromotionCombinationProperty } from './config'
import * as ProductSpuApi from '@/api/mall/product/spu'
import * as CombinationActivityApi from '@/api/mall/promotion/combination/combinationActivity'
import { fenToYuan } from '@/utils'
/** 拼团 */
/** 拼团卡片 */
defineOptions({ name: 'PromotionCombination' })
// 定义属性
const props = defineProps<{ property: PromotionCombinationProperty }>()
// 商品列表
const spuList = ref<ProductSpuApi.Spu[]>([])
const spuIdList = ref<number[]>([])
const combinationActivityList = ref<CombinationActivityApi.CombinationActivityVO[]>([])
watch(
() => props.property.activityId,
() => props.property.activityIds,
async () => {
if (!props.property.activityId) return
const activity = await CombinationActivityApi.getCombinationActivity(props.property.activityId)
if (!activity?.spuId) return
spuList.value = [await ProductSpuApi.getSpu(activity.spuId)]
try {
// 新添加的拼团组件,是没有活动ID的
const activityIds = props.property.activityIds
// 检查活动ID的有效性
if (Array.isArray(activityIds) && activityIds.length > 0) {
// 获取拼团活动详情列表
combinationActivityList.value =
await CombinationActivityApi.getCombinationActivityListByIds(activityIds)
// 获取拼团活动的 SPU 详情列表
spuList.value = []
spuIdList.value = combinationActivityList.value
.map((activity) => activity.spuId)
.filter((spuId): spuId is number => typeof spuId === 'number')
if (spuIdList.value.length > 0) {
spuList.value = await ProductSpuApi.getSpuDetailList(spuIdList.value)
}
// 更新 SPU 的最低价格
combinationActivityList.value.forEach((activity) => {
// 匹配spuId
const spu = spuList.value.find((spu) => spu.id === activity.spuId)
if (spu) {
// 赋值活动价格,哪个最便宜就赋值哪个
spu.price = Math.min(activity.combinationPrice || Infinity, spu.price || Infinity)
}
})
}
} catch (error) {
console.error('获取拼团活动细节或 SPU 细节时出错:', error)
}
},
{
immediate: true,
deep: true
}
)
// 手机宽度
const phoneWidth = ref(375)
/**
* 计算商品的间距
* @param index 商品索引
*/
const calculateSpace = (index: number) => {
// 商品的列数
const columns = props.property.layoutType === 'twoCol' ? 2 : 1
// 第一列没有左边距
const marginLeft = index % columns === 0 ? '0' : props.property.space + 'px'
// 第一行没有上边距
const marginTop = index < columns ? '0' : props.property.space + 'px'
return { marginLeft, marginTop }
}
// 容器
const containerRef = ref()
// 商品的列数
const columns = ref(2)
// 滚动条宽度
const scrollbarWidth = ref('100%')
// 商品图大小
const imageSize = ref('0')
// 商品网络列数
const gridTemplateColumns = ref('')
// 计算布局参数
watch(
() => [props.property, phoneWidth, spuList.value.length],
() => {
// 计算列数
columns.value = props.property.layoutType === 'oneCol' ? 1 : 3
// 每列的宽度为:(总宽度 - 间距 * (列数 - 1))/ 列数
const productWidth =
(phoneWidth.value - props.property.space * (columns.value - 1)) / columns.value
// 商品图布局:2列时,左右布局 3列时,上下布局
imageSize.value = columns.value === 2 ? '64px' : `${productWidth}px`
// 指定列数
gridTemplateColumns.value = `repeat(${columns.value}, auto)`
// 不滚动
scrollbarWidth.value = '100%'
},
{ immediate: true, deep: true }
)
onMounted(() => {
// 提取手机宽度
phoneWidth.value = containerRef.value?.wrapRef?.offsetWidth || 375
})
// 计算商品的宽度
const calculateWidth = () => {
let width = '100%'
// 双列时每列的宽度为:(总宽度 - 间距)/ 2
if (props.property.layoutType === 'twoCol') {
width = `${(containerRef.value.offsetWidth - props.property.space) / 2}px`
}
return { width }
}
</script>
<style scoped lang="scss"></style>
@@ -2,30 +2,31 @@
<ComponentContainerProperty v-model="formData.style">
<el-form label-width="80px" :model="formData">
<el-card header="拼团活动" class="property-group" shadow="never">
<el-form-item label="拼团活动" prop="activityId">
<el-select v-model="formData.activityId">
<el-option
v-for="activity in activityList"
:key="activity.id"
:label="activity.name"
:value="activity.id"
/>
</el-select>
</el-form-item>
<CombinationShowcase v-model="formData.activityIds" />
</el-card>
<el-card header="商品样式" class="property-group" shadow="never">
<el-form-item label="布局" prop="type">
<el-radio-group v-model="formData.layoutType">
<el-tooltip class="item" content="单列" placement="bottom">
<el-radio-button label="oneCol">
<el-tooltip class="item" content="单列大图" placement="bottom">
<el-radio-button value="oneColBigImg">
<Icon icon="fluent:text-column-one-24-filled" />
</el-radio-button>
</el-tooltip>
<el-tooltip class="item" content="三列" placement="bottom">
<el-radio-button label="threeCol">
<Icon icon="fluent:text-column-three-24-filled" />
<el-tooltip class="item" content="单列小图" placement="bottom">
<el-radio-button value="oneColSmallImg">
<Icon icon="fluent:text-column-two-left-24-filled" />
</el-radio-button>
</el-tooltip>
<el-tooltip class="item" content="双列" placement="bottom">
<el-radio-button value="twoCol">
<Icon icon="fluent:text-column-two-24-filled" />
</el-radio-button>
</el-tooltip>
<!--<el-tooltip class="item" content="三列" placement="bottom">
<el-radio-button value="threeCol">
<Icon icon="fluent:text-column-three-24-filled" />
</el-radio-button>
</el-tooltip>-->
</el-radio-group>
</el-form-item>
<el-form-item label="商品名称" prop="fields.name.show">
@@ -34,12 +35,36 @@
<el-checkbox v-model="formData.fields.name.show" />
</div>
</el-form-item>
<el-form-item label="商品简介" prop="fields.introduction.show">
<div class="flex gap-8px">
<ColorInput v-model="formData.fields.introduction.color" />
<el-checkbox v-model="formData.fields.introduction.show" />
</div>
</el-form-item>
<el-form-item label="商品价格" prop="fields.price.show">
<div class="flex gap-8px">
<ColorInput v-model="formData.fields.price.color" />
<el-checkbox v-model="formData.fields.price.show" />
</div>
</el-form-item>
<el-form-item label="市场价" prop="fields.marketPrice.show">
<div class="flex gap-8px">
<ColorInput v-model="formData.fields.marketPrice.color" />
<el-checkbox v-model="formData.fields.marketPrice.show" />
</div>
</el-form-item>
<el-form-item label="商品销量" prop="fields.salesCount.show">
<div class="flex gap-8px">
<ColorInput v-model="formData.fields.salesCount.color" />
<el-checkbox v-model="formData.fields.salesCount.show" />
</div>
</el-form-item>
<el-form-item label="商品库存" prop="fields.stock.show">
<div class="flex gap-8px">
<ColorInput v-model="formData.fields.stock.color" />
<el-checkbox v-model="formData.fields.stock.show" />
</div>
</el-form-item>
</el-card>
<el-card header="角标" class="property-group" shadow="never">
<el-form-item label="角标" prop="badge.show">
@@ -47,10 +72,36 @@
</el-form-item>
<el-form-item label="角标" prop="badge.imgUrl" v-if="formData.badge.show">
<UploadImg v-model="formData.badge.imgUrl" height="44px" width="72px">
<template #tip> 建议尺寸:36 * 22 </template>
<template #tip> 建议尺寸:36 * 22</template>
</UploadImg>
</el-form-item>
</el-card>
<el-card header="按钮" class="property-group" shadow="never">
<el-form-item label="按钮类型" prop="btnBuy.type">
<el-radio-group v-model="formData.btnBuy.type">
<el-radio-button value="text">文字</el-radio-button>
<el-radio-button value="img">图片</el-radio-button>
</el-radio-group>
</el-form-item>
<template v-if="formData.btnBuy.type === 'text'">
<el-form-item label="按钮文字" prop="btnBuy.text">
<el-input v-model="formData.btnBuy.text" />
</el-form-item>
<el-form-item label="左侧背景" prop="btnBuy.bgBeginColor">
<ColorInput v-model="formData.btnBuy.bgBeginColor" />
</el-form-item>
<el-form-item label="右侧背景" prop="btnBuy.bgEndColor">
<ColorInput v-model="formData.btnBuy.bgEndColor" />
</el-form-item>
</template>
<template v-else>
<el-form-item label="图片" prop="btnBuy.imgUrl">
<UploadImg v-model="formData.btnBuy.imgUrl" height="56px" width="56px">
<template #tip> 建议尺寸:56 * 56</template>
</UploadImg>
</el-form-item>
</template>
</el-card>
<el-card header="商品样式" class="property-group" shadow="never">
<el-form-item label="上圆角" prop="borderRadiusTop">
<el-slider
@@ -92,6 +143,7 @@ import { PromotionCombinationProperty } from './config'
import { usePropertyForm } from '@/components/DiyEditor/util'
import * as CombinationActivityApi from '@/api/mall/promotion/combination/combinationActivity'
import { CommonStatusEnum } from '@/utils/constants'
import CombinationShowcase from '@/views/mall/promotion/combination/components/CombinationShowcase.vue'
// 拼团属性面板
defineOptions({ name: 'PromotionCombinationProperty' })
@@ -100,7 +152,7 @@ const props = defineProps<{ modelValue: PromotionCombinationProperty }>()
const emit = defineEmits(['update:modelValue'])
const { formData } = usePropertyForm(props.modelValue, emit)
// 活动列表
const activityList = ref<CombinationActivityApi.CombinationActivityVO>([])
const activityList = ref<CombinationActivityApi.CombinationActivityVO[]>([])
onMounted(async () => {
const { list } = await CombinationActivityApi.getCombinationActivityPage({
status: CommonStatusEnum.ENABLE
@@ -0,0 +1,96 @@
import {ComponentStyle, DiyComponent} from '@/components/DiyEditor/util'
/** 积分商城属性 */
export interface PromotionPointProperty {
// 布局类型:单列 | 三列
layoutType: 'oneColBigImg' | 'oneColSmallImg' | 'twoCol'
// 商品字段
fields: {
// 商品名称
name: PromotionPointFieldProperty
// 商品简介
introduction: PromotionPointFieldProperty
// 商品价格
price: PromotionPointFieldProperty
// 市场价
marketPrice: PromotionPointFieldProperty
// 商品销量
salesCount: PromotionPointFieldProperty
// 商品库存
stock: PromotionPointFieldProperty
}
// 角标
badge: {
// 是否显示
show: boolean
// 角标图片
imgUrl: string
}
// 按钮
btnBuy: {
// 类型:文字 | 图片
type: 'text' | 'img'
// 文字
text: string
// 文字按钮:背景渐变起始颜色
bgBeginColor: string
// 文字按钮:背景渐变结束颜色
bgEndColor: string
// 图片按钮:图片地址
imgUrl: string
}
// 上圆角
borderRadiusTop: number
// 下圆角
borderRadiusBottom: number
// 间距
space: number
// 秒杀活动编号
activityIds: number[]
// 组件样式
style: ComponentStyle
}
// 商品字段
export interface PromotionPointFieldProperty {
// 是否显示
show: boolean
// 颜色
color: string
}
// 定义组件
export const component = {
id: 'PromotionPoint',
name: '积分商城',
icon: 'ep:present',
property: {
layoutType: 'oneColBigImg',
fields: {
name: { show: true, color: '#000' },
introduction: { show: true, color: '#999' },
price: { show: true, color: '#ff3000' },
marketPrice: { show: true, color: '#c4c4c4' },
salesCount: { show: true, color: '#c4c4c4' },
stock: { show: false, color: '#c4c4c4' }
},
badge: { show: false, imgUrl: '' },
btnBuy: {
type: 'text',
text: '立即兑换',
bgBeginColor: '#FF6000',
bgEndColor: '#FE832A',
imgUrl: ''
},
borderRadiusTop: 8,
borderRadiusBottom: 8,
space: 8,
style: {
bgType: 'color',
bgColor: '',
marginLeft: 8,
marginRight: 8,
marginBottom: 8
} as ComponentStyle
}
} as DiyComponent<PromotionPointProperty>
@@ -0,0 +1,202 @@
<template>
<div ref="containerRef" :class="`box-content min-h-30px w-full flex flex-row flex-wrap`">
<div
v-for="(spu, index) in spuList"
:key="index"
:style="{
...calculateSpace(index),
...calculateWidth(),
borderTopLeftRadius: `${property.borderRadiusTop}px`,
borderTopRightRadius: `${property.borderRadiusTop}px`,
borderBottomLeftRadius: `${property.borderRadiusBottom}px`,
borderBottomRightRadius: `${property.borderRadiusBottom}px`
}"
class="relative box-content flex flex-row flex-wrap overflow-hidden bg-white"
>
<!-- 角标 -->
<div v-if="property.badge.show" class="absolute left-0 top-0 z-1 items-center justify-center">
<el-image :src="property.badge.imgUrl" class="h-26px w-38px" fit="cover" />
</div>
<!-- 商品封面图 -->
<div
:class="[
'h-140px',
{
'w-full': property.layoutType !== 'oneColSmallImg',
'w-140px': property.layoutType === 'oneColSmallImg'
}
]"
>
<el-image :src="spu.picUrl" class="h-full w-full" fit="cover" />
</div>
<div
:class="[
' flex flex-col gap-8px p-8px box-border',
{
'w-full': property.layoutType !== 'oneColSmallImg',
'w-[calc(100%-140px-16px)]': property.layoutType === 'oneColSmallImg'
}
]"
>
<!-- 商品名称 -->
<div
v-if="property.fields.name.show"
:class="[
'text-14px ',
{
truncate: property.layoutType !== 'oneColSmallImg',
'overflow-ellipsis line-clamp-2': property.layoutType === 'oneColSmallImg'
}
]"
:style="{ color: property.fields.name.color }"
>
{{ spu.name }}
</div>
<!-- 商品简介 -->
<div
v-if="property.fields.introduction.show"
:style="{ color: property.fields.introduction.color }"
class="truncate text-12px"
>
{{ spu.introduction }}
</div>
<div>
<!-- 积分 -->
<span
v-if="property.fields.price.show"
:style="{ color: property.fields.price.color }"
class="text-16px"
>
{{ spu.point }}积分
{{ !spu.pointPrice || spu.pointPrice === 0 ? '' : `+${fenToYuan(spu.pointPrice)}元` }}
</span>
<!-- 市场价 -->
<span
v-if="property.fields.marketPrice.show && spu.marketPrice"
:style="{ color: property.fields.marketPrice.color }"
class="ml-4px text-10px line-through"
>
¥{{ fenToYuan(spu.marketPrice) }}
</span>
</div>
<div class="text-12px">
<!-- 销量 -->
<span
v-if="property.fields.salesCount.show"
:style="{ color: property.fields.salesCount.color }"
>
已兑{{ (spu.pointTotalStock || 0) - (spu.pointStock || 0) }}件
</span>
<!-- 库存 -->
<span v-if="property.fields.stock.show" :style="{ color: property.fields.stock.color }">
库存{{ spu.pointTotalStock || 0 }}
</span>
</div>
</div>
<!-- 购买按钮 -->
<div class="absolute bottom-8px right-8px">
<!-- 文字按钮 -->
<span
v-if="property.btnBuy.type === 'text'"
:style="{
background: `linear-gradient(to right, ${property.btnBuy.bgBeginColor}, ${property.btnBuy.bgEndColor}`
}"
class="rounded-full p-x-12px p-y-4px text-12px text-white"
>
{{ property.btnBuy.text }}
</span>
<!-- 图片按钮 -->
<el-image
v-else
:src="property.btnBuy.imgUrl"
class="h-28px w-28px rounded-full"
fit="cover"
/>
</div>
</div>
</div>
</template>
<script lang="ts" setup>
import { PromotionPointProperty } from './config'
import * as ProductSpuApi from '@/api/mall/product/spu'
import { PointActivityApi, PointActivityVO, SpuExtension0 } from '@/api/mall/promotion/point'
import { fenToYuan } from '@/utils'
/** 积分商城卡片 */
defineOptions({ name: 'PromotionPoint' })
// 定义属性
const props = defineProps<{ property: PromotionPointProperty }>()
// 商品列表
const spuList = ref<SpuExtension0[]>([])
const spuIdList = ref<number[]>([])
const pointActivityList = ref<PointActivityVO[]>([])
watch(
() => props.property.activityIds,
async () => {
try {
// 新添加的积分商城组件,是没有活动ID的
const activityIds = props.property.activityIds
// 检查活动ID的有效性
if (Array.isArray(activityIds) && activityIds.length > 0) {
// 获取积分商城活动详情列表
pointActivityList.value = await PointActivityApi.getPointActivityListByIds(activityIds)
// 获取积分商城活动的 SPU 详情列表
spuList.value = []
spuIdList.value = pointActivityList.value.map((activity) => activity.spuId)
if (spuIdList.value.length > 0) {
spuList.value = await ProductSpuApi.getSpuDetailList(spuIdList.value)
}
// 更新 SPU 的最低兑换积分和所需兑换金额
pointActivityList.value.forEach((activity) => {
// 匹配spuId
const spu = spuList.value.find((spu) => spu.id === activity.spuId)
if (spu) {
spu.pointStock = activity.stock
spu.pointTotalStock = activity.totalStock
spu.point = activity.point
spu.pointPrice = activity.price
}
})
}
} catch (error) {
console.error('获取积分商城活动细节或 SPU 细节时出错:', error)
}
},
{
immediate: true,
deep: true
}
)
/**
* 计算商品的间距
* @param index 商品索引
*/
const calculateSpace = (index: number) => {
// 商品的列数
const columns = props.property.layoutType === 'twoCol' ? 2 : 1
// 第一列没有左边距
const marginLeft = index % columns === 0 ? '0' : props.property.space + 'px'
// 第一行没有上边距
const marginTop = index < columns ? '0' : props.property.space + 'px'
return { marginLeft, marginTop }
}
// 容器
const containerRef = ref()
// 计算商品的宽度
const calculateWidth = () => {
let width = '100%'
// 双列时每列的宽度为:(总宽度 - 间距)/ 2
if (props.property.layoutType === 'twoCol') {
width = `${(containerRef.value.offsetWidth - props.property.space) / 2}px`
}
return { width }
}
</script>
<style lang="scss" scoped></style>
@@ -0,0 +1,154 @@
<template>
<ComponentContainerProperty v-model="formData.style">
<el-form :model="formData" label-width="80px">
<el-card class="property-group" header="积分商城活动" shadow="never">
<PointShowcase v-model="formData.activityIds" />
</el-card>
<el-card class="property-group" header="商品样式" shadow="never">
<el-form-item label="布局" prop="type">
<el-radio-group v-model="formData.layoutType">
<el-tooltip class="item" content="单列大图" placement="bottom">
<el-radio-button value="oneColBigImg">
<Icon icon="fluent:text-column-one-24-filled" />
</el-radio-button>
</el-tooltip>
<el-tooltip class="item" content="单列小图" placement="bottom">
<el-radio-button value="oneColSmallImg">
<Icon icon="fluent:text-column-two-left-24-filled" />
</el-radio-button>
</el-tooltip>
<el-tooltip class="item" content="双列" placement="bottom">
<el-radio-button value="twoCol">
<Icon icon="fluent:text-column-two-24-filled" />
</el-radio-button>
</el-tooltip>
<!--<el-tooltip class="item" content="三列" placement="bottom">
<el-radio-button value="threeCol">
<Icon icon="fluent:text-column-three-24-filled" />
</el-radio-button>
</el-tooltip>-->
</el-radio-group>
</el-form-item>
<el-form-item label="商品名称" prop="fields.name.show">
<div class="flex gap-8px">
<ColorInput v-model="formData.fields.name.color" />
<el-checkbox v-model="formData.fields.name.show" />
</div>
</el-form-item>
<el-form-item label="商品简介" prop="fields.introduction.show">
<div class="flex gap-8px">
<ColorInput v-model="formData.fields.introduction.color" />
<el-checkbox v-model="formData.fields.introduction.show" />
</div>
</el-form-item>
<el-form-item label="商品价格" prop="fields.price.show">
<div class="flex gap-8px">
<ColorInput v-model="formData.fields.price.color" />
<el-checkbox v-model="formData.fields.price.show" />
</div>
</el-form-item>
<el-form-item label="市场价" prop="fields.marketPrice.show">
<div class="flex gap-8px">
<ColorInput v-model="formData.fields.marketPrice.color" />
<el-checkbox v-model="formData.fields.marketPrice.show" />
</div>
</el-form-item>
<el-form-item label="商品销量" prop="fields.salesCount.show">
<div class="flex gap-8px">
<ColorInput v-model="formData.fields.salesCount.color" />
<el-checkbox v-model="formData.fields.salesCount.show" />
</div>
</el-form-item>
<el-form-item label="商品库存" prop="fields.stock.show">
<div class="flex gap-8px">
<ColorInput v-model="formData.fields.stock.color" />
<el-checkbox v-model="formData.fields.stock.show" />
</div>
</el-form-item>
</el-card>
<el-card class="property-group" header="角标" shadow="never">
<el-form-item label="角标" prop="badge.show">
<el-switch v-model="formData.badge.show" />
</el-form-item>
<el-form-item v-if="formData.badge.show" label="角标" prop="badge.imgUrl">
<UploadImg v-model="formData.badge.imgUrl" height="44px" width="72px">
<template #tip> 建议尺寸:36 * 22</template>
</UploadImg>
</el-form-item>
</el-card>
<el-card class="property-group" header="按钮" shadow="never">
<el-form-item label="按钮类型" prop="btnBuy.type">
<el-radio-group v-model="formData.btnBuy.type">
<el-radio-button value="text">文字</el-radio-button>
<el-radio-button value="img">图片</el-radio-button>
</el-radio-group>
</el-form-item>
<template v-if="formData.btnBuy.type === 'text'">
<el-form-item label="按钮文字" prop="btnBuy.text">
<el-input v-model="formData.btnBuy.text" />
</el-form-item>
<el-form-item label="左侧背景" prop="btnBuy.bgBeginColor">
<ColorInput v-model="formData.btnBuy.bgBeginColor" />
</el-form-item>
<el-form-item label="右侧背景" prop="btnBuy.bgEndColor">
<ColorInput v-model="formData.btnBuy.bgEndColor" />
</el-form-item>
</template>
<template v-else>
<el-form-item label="图片" prop="btnBuy.imgUrl">
<UploadImg v-model="formData.btnBuy.imgUrl" height="56px" width="56px">
<template #tip> 建议尺寸:56 * 56</template>
</UploadImg>
</el-form-item>
</template>
</el-card>
<el-card class="property-group" header="商品样式" shadow="never">
<el-form-item label="上圆角" prop="borderRadiusTop">
<el-slider
v-model="formData.borderRadiusTop"
:max="100"
:min="0"
:show-input-controls="false"
input-size="small"
show-input
/>
</el-form-item>
<el-form-item label="下圆角" prop="borderRadiusBottom">
<el-slider
v-model="formData.borderRadiusBottom"
:max="100"
:min="0"
:show-input-controls="false"
input-size="small"
show-input
/>
</el-form-item>
<el-form-item label="间隔" prop="space">
<el-slider
v-model="formData.space"
:max="100"
:min="0"
:show-input-controls="false"
input-size="small"
show-input
/>
</el-form-item>
</el-card>
</el-form>
</ComponentContainerProperty>
</template>
<script lang="ts" setup>
import { PromotionPointProperty } from './config'
import { usePropertyForm } from '@/components/DiyEditor/util'
import PointShowcase from '@/views/mall/promotion/point/components/PointShowcase.vue'
// 秒杀属性面板
defineOptions({ name: 'PromotionPointProperty' })
const props = defineProps<{ modelValue: PromotionPointProperty }>()
const emit = defineEmits(['update:modelValue'])
const { formData } = usePropertyForm(props.modelValue, emit)
</script>
<style lang="scss" scoped></style>
@@ -3,13 +3,21 @@ import { ComponentStyle, DiyComponent } from '@/components/DiyEditor/util'
/** 秒杀属性 */
export interface PromotionSeckillProperty {
// 布局类型:单列 | 三列
layoutType: 'oneCol' | 'threeCol'
layoutType: 'oneColBigImg' | 'oneColSmallImg' | 'twoCol'
// 商品字段
fields: {
// 商品名称
name: PromotionSeckillFieldProperty
// 商品简介
introduction: PromotionSeckillFieldProperty
// 商品价格
price: PromotionSeckillFieldProperty
// 市场价
marketPrice: PromotionSeckillFieldProperty
// 商品销量
salesCount: PromotionSeckillFieldProperty
// 商品库存
stock: PromotionSeckillFieldProperty
}
// 角标
badge: {
@@ -18,6 +26,19 @@ export interface PromotionSeckillProperty {
// 角标图片
imgUrl: string
}
// 按钮
btnBuy: {
// 类型:文字 | 图片
type: 'text' | 'img'
// 文字
text: string
// 文字按钮:背景渐变起始颜色
bgBeginColor: string
// 文字按钮:背景渐变结束颜色
bgEndColor: string
// 图片按钮:图片地址
imgUrl: string
}
// 上圆角
borderRadiusTop: number
// 下圆角
@@ -25,10 +46,11 @@ export interface PromotionSeckillProperty {
// 间距
space: number
// 秒杀活动编号
activityId: number
activityIds: number[]
// 组件样式
style: ComponentStyle
}
// 商品字段
export interface PromotionSeckillFieldProperty {
// 是否显示
@@ -43,13 +65,23 @@ export const component = {
name: '秒杀',
icon: 'mdi:calendar-time',
property: {
activityId: undefined,
layoutType: 'oneCol',
layoutType: 'oneColBigImg',
fields: {
name: { show: true, color: '#000' },
price: { show: true, color: '#ff3000' }
introduction: { show: true, color: '#999' },
price: { show: true, color: '#ff3000' },
marketPrice: { show: true, color: '#c4c4c4' },
salesCount: { show: true, color: '#c4c4c4' },
stock: { show: false, color: '#c4c4c4' }
},
badge: { show: false, imgUrl: '' },
btnBuy: {
type: 'text',
text: '立即秒杀',
bgBeginColor: '#FF6000',
bgEndColor: '#FE832A',
imgUrl: ''
},
borderRadiusTop: 8,
borderRadiusBottom: 8,
space: 8,
@@ -1,125 +1,201 @@
<template>
<el-scrollbar class="z-1 min-h-30px" wrap-class="w-full" ref="containerRef">
<!-- 商品网格 -->
<div :class="`box-content min-h-30px w-full flex flex-row flex-wrap`" ref="containerRef">
<div
class="grid overflow-x-auto"
class="relative box-content flex flex-row flex-wrap overflow-hidden bg-white"
:style="{
gridGap: `${property.space}px`,
gridTemplateColumns,
width: scrollbarWidth
...calculateSpace(index),
...calculateWidth(),
borderTopLeftRadius: `${property.borderRadiusTop}px`,
borderTopRightRadius: `${property.borderRadiusTop}px`,
borderBottomLeftRadius: `${property.borderRadiusBottom}px`,
borderBottomRightRadius: `${property.borderRadiusBottom}px`
}"
v-for="(spu, index) in spuList"
:key="index"
>
<!-- 商品 -->
<!-- 角标 -->
<div v-if="property.badge.show" class="absolute left-0 top-0 z-1 items-center justify-center">
<el-image fit="cover" :src="property.badge.imgUrl" class="h-26px w-38px" />
</div>
<!-- 商品封面图 -->
<div
class="relative box-content flex flex-row flex-wrap overflow-hidden bg-white"
:style="{
borderTopLeftRadius: `${property.borderRadiusTop}px`,
borderTopRightRadius: `${property.borderRadiusTop}px`,
borderBottomLeftRadius: `${property.borderRadiusBottom}px`,
borderBottomRightRadius: `${property.borderRadiusBottom}px`
}"
v-for="(spu, index) in spuList"
:key="index"
:class="[
'h-140px',
{
'w-full': property.layoutType !== 'oneColSmallImg',
'w-140px': property.layoutType === 'oneColSmallImg'
}
]"
>
<!-- 角标 -->
<div
v-if="property.badge.show"
class="absolute left-0 top-0 z-1 items-center justify-center"
>
<el-image fit="cover" :src="property.badge.imgUrl" class="h-26px w-38px" />
</div>
<!-- 商品封面图 -->
<el-image fit="cover" :src="spu.picUrl" :style="{ width: imageSize, height: imageSize }" />
<el-image fit="cover" class="h-full w-full" :src="spu.picUrl" />
</div>
<div
:class="[
' flex flex-col gap-8px p-8px box-border',
{
'w-full': property.layoutType !== 'oneColSmallImg',
'w-[calc(100%-140px-16px)]': property.layoutType === 'oneColSmallImg'
}
]"
>
<!-- 商品名称 -->
<div
v-if="property.fields.name.show"
:class="[
'flex flex-col gap-8px p-8px box-border',
'text-14px ',
{
'w-[calc(100%-64px)]': columns === 2,
'w-full': columns === 3
truncate: property.layoutType !== 'oneColSmallImg',
'overflow-ellipsis line-clamp-2': property.layoutType === 'oneColSmallImg'
}
]"
:style="{ color: property.fields.name.color }"
>
<!-- 商品名称 -->
<div
v-if="property.fields.name.show"
class="truncate text-12px"
:style="{ color: property.fields.name.color }"
{{ spu.name }}
</div>
<!-- 商品简介 -->
<div
v-if="property.fields.introduction.show"
class="truncate text-12px"
:style="{ color: property.fields.introduction.color }"
>
{{ spu.introduction }}
</div>
<div>
<!-- 价格 -->
<span
v-if="property.fields.price.show"
class="text-16px"
:style="{ color: property.fields.price.color }"
>
{{ spu.name }}
</div>
<div>
<!-- 商品价格 -->
<span
v-if="property.fields.price.show"
class="text-12px"
:style="{ color: property.fields.price.color }"
>
¥{{ spu.price }}
</span>
</div>
¥{{ fenToYuan(spu.price || Infinity) }}
</span>
<!-- 市场价 -->
<span
v-if="property.fields.marketPrice.show && spu.marketPrice"
class="ml-4px text-10px line-through"
:style="{ color: property.fields.marketPrice.color }"
>¥{{ fenToYuan(spu.marketPrice) }}</span
>
</div>
<div class="text-12px">
<!-- 销量 -->
<span
v-if="property.fields.salesCount.show"
:style="{ color: property.fields.salesCount.color }"
>
已售{{ (spu.salesCount || 0) + (spu.virtualSalesCount || 0) }}件
</span>
<!-- 库存 -->
<span v-if="property.fields.stock.show" :style="{ color: property.fields.stock.color }">
库存{{ spu.stock || 0 }}
</span>
</div>
</div>
<!-- 购买按钮 -->
<div class="absolute bottom-8px right-8px">
<!-- 文字按钮 -->
<span
v-if="property.btnBuy.type === 'text'"
class="rounded-full p-x-12px p-y-4px text-12px text-white"
:style="{
background: `linear-gradient(to right, ${property.btnBuy.bgBeginColor}, ${property.btnBuy.bgEndColor}`
}"
>
{{ property.btnBuy.text }}
</span>
<!-- 图片按钮 -->
<el-image
v-else
class="h-28px w-28px rounded-full"
fit="cover"
:src="property.btnBuy.imgUrl"
/>
</div>
</div>
</el-scrollbar>
</div>
</template>
<script setup lang="ts">
import { PromotionSeckillProperty } from './config'
import * as ProductSpuApi from '@/api/mall/product/spu'
import * as SeckillActivityApi from '@/api/mall/promotion/seckill/seckillActivity'
import { fenToYuan } from '@/utils'
/** 秒杀 */
/** 秒杀卡片 */
defineOptions({ name: 'PromotionSeckill' })
// 定义属性
const props = defineProps<{ property: PromotionSeckillProperty }>()
// 商品列表
const spuList = ref<ProductSpuApi.Spu[]>([])
const spuIdList = ref<number[]>([])
const seckillActivityList = ref<SeckillActivityApi.SeckillActivityVO[]>([])
watch(
() => props.property.activityId,
() => props.property.activityIds,
async () => {
if (!props.property.activityId) return
const activity = await SeckillActivityApi.getSeckillActivity(props.property.activityId)
if (!activity?.spuId) return
spuList.value = [await ProductSpuApi.getSpu(activity.spuId)]
try {
// 新添加的秒杀组件,是没有活动ID的
const activityIds = props.property.activityIds
// 检查活动ID的有效性
if (Array.isArray(activityIds) && activityIds.length > 0) {
// 获取秒杀活动详情列表
seckillActivityList.value =
await SeckillActivityApi.getSeckillActivityListByIds(activityIds)
// 获取秒杀活动的 SPU 详情列表
spuList.value = []
spuIdList.value = seckillActivityList.value
.map((activity) => activity.spuId)
.filter((spuId): spuId is number => typeof spuId === 'number')
if (spuIdList.value.length > 0) {
spuList.value = await ProductSpuApi.getSpuDetailList(spuIdList.value)
}
// 更新 SPU 的最低价格
seckillActivityList.value.forEach((activity) => {
// 匹配spuId
const spu = spuList.value.find((spu) => spu.id === activity.spuId)
if (spu) {
// 赋值活动价格,哪个最便宜就赋值哪个
spu.price = Math.min(activity.seckillPrice || Infinity, spu.price || Infinity)
}
})
}
} catch (error) {
console.error('获取秒杀活动细节或 SPU 细节时出错:', error)
}
},
{
immediate: true,
deep: true
}
)
// 手机宽度
const phoneWidth = ref(375)
/**
* 计算商品的间距
* @param index 商品索引
*/
const calculateSpace = (index: number) => {
// 商品的列数
const columns = props.property.layoutType === 'twoCol' ? 2 : 1
// 第一列没有左边距
const marginLeft = index % columns === 0 ? '0' : props.property.space + 'px'
// 第一行没有上边距
const marginTop = index < columns ? '0' : props.property.space + 'px'
return { marginLeft, marginTop }
}
// 容器
const containerRef = ref()
// 商品的列数
const columns = ref(2)
// 滚动条宽度
const scrollbarWidth = ref('100%')
// 商品图大小
const imageSize = ref('0')
// 商品网络列数
const gridTemplateColumns = ref('')
// 计算布局参数
watch(
() => [props.property, phoneWidth, spuList.value.length],
() => {
// 计算列数
columns.value = props.property.layoutType === 'oneCol' ? 1 : 3
// 每列的宽度为:(总宽度 - 间距 * (列数 - 1))/ 列数
const productWidth =
(phoneWidth.value - props.property.space * (columns.value - 1)) / columns.value
// 商品图布局:2列时,左右布局 3列时,上下布局
imageSize.value = columns.value === 2 ? '64px' : `${productWidth}px`
// 指定列数
gridTemplateColumns.value = `repeat(${columns.value}, auto)`
// 不滚动
scrollbarWidth.value = '100%'
},
{ immediate: true, deep: true }
)
onMounted(() => {
// 提取手机宽度
phoneWidth.value = containerRef.value?.wrapRef?.offsetWidth || 375
})
// 计算商品的宽度
const calculateWidth = () => {
let width = '100%'
// 双列时每列的宽度为:(总宽度 - 间距)/ 2
if (props.property.layoutType === 'twoCol') {
width = `${(containerRef.value.offsetWidth - props.property.space) / 2}px`
}
return { width }
}
</script>
<style scoped lang="scss"></style>
@@ -2,30 +2,31 @@
<ComponentContainerProperty v-model="formData.style">
<el-form label-width="80px" :model="formData">
<el-card header="秒杀活动" class="property-group" shadow="never">
<el-form-item label="秒杀活动" prop="activityId">
<el-select v-model="formData.activityId">
<el-option
v-for="activity in activityList"
:key="activity.id"
:label="activity.name"
:value="activity.id"
/>
</el-select>
</el-form-item>
<SeckillShowcase v-model="formData.activityIds" />
</el-card>
<el-card header="商品样式" class="property-group" shadow="never">
<el-form-item label="布局" prop="type">
<el-radio-group v-model="formData.layoutType">
<el-tooltip class="item" content="单列" placement="bottom">
<el-radio-button label="oneCol">
<el-tooltip class="item" content="单列大图" placement="bottom">
<el-radio-button value="oneColBigImg">
<Icon icon="fluent:text-column-one-24-filled" />
</el-radio-button>
</el-tooltip>
<el-tooltip class="item" content="三列" placement="bottom">
<el-radio-button label="threeCol">
<Icon icon="fluent:text-column-three-24-filled" />
<el-tooltip class="item" content="单列小图" placement="bottom">
<el-radio-button value="oneColSmallImg">
<Icon icon="fluent:text-column-two-left-24-filled" />
</el-radio-button>
</el-tooltip>
<el-tooltip class="item" content="双列" placement="bottom">
<el-radio-button value="twoCol">
<Icon icon="fluent:text-column-two-24-filled" />
</el-radio-button>
</el-tooltip>
<!--<el-tooltip class="item" content="三列" placement="bottom">
<el-radio-button value="threeCol">
<Icon icon="fluent:text-column-three-24-filled" />
</el-radio-button>
</el-tooltip>-->
</el-radio-group>
</el-form-item>
<el-form-item label="商品名称" prop="fields.name.show">
@@ -34,12 +35,36 @@
<el-checkbox v-model="formData.fields.name.show" />
</div>
</el-form-item>
<el-form-item label="商品简介" prop="fields.introduction.show">
<div class="flex gap-8px">
<ColorInput v-model="formData.fields.introduction.color" />
<el-checkbox v-model="formData.fields.introduction.show" />
</div>
</el-form-item>
<el-form-item label="商品价格" prop="fields.price.show">
<div class="flex gap-8px">
<ColorInput v-model="formData.fields.price.color" />
<el-checkbox v-model="formData.fields.price.show" />
</div>
</el-form-item>
<el-form-item label="市场价" prop="fields.marketPrice.show">
<div class="flex gap-8px">
<ColorInput v-model="formData.fields.marketPrice.color" />
<el-checkbox v-model="formData.fields.marketPrice.show" />
</div>
</el-form-item>
<el-form-item label="商品销量" prop="fields.salesCount.show">
<div class="flex gap-8px">
<ColorInput v-model="formData.fields.salesCount.color" />
<el-checkbox v-model="formData.fields.salesCount.show" />
</div>
</el-form-item>
<el-form-item label="商品库存" prop="fields.stock.show">
<div class="flex gap-8px">
<ColorInput v-model="formData.fields.stock.color" />
<el-checkbox v-model="formData.fields.stock.show" />
</div>
</el-form-item>
</el-card>
<el-card header="角标" class="property-group" shadow="never">
<el-form-item label="角标" prop="badge.show">
@@ -47,10 +72,36 @@
</el-form-item>
<el-form-item label="角标" prop="badge.imgUrl" v-if="formData.badge.show">
<UploadImg v-model="formData.badge.imgUrl" height="44px" width="72px">
<template #tip> 建议尺寸:36 * 22 </template>
<template #tip> 建议尺寸:36 * 22</template>
</UploadImg>
</el-form-item>
</el-card>
<el-card header="按钮" class="property-group" shadow="never">
<el-form-item label="按钮类型" prop="btnBuy.type">
<el-radio-group v-model="formData.btnBuy.type">
<el-radio-button value="text">文字</el-radio-button>
<el-radio-button value="img">图片</el-radio-button>
</el-radio-group>
</el-form-item>
<template v-if="formData.btnBuy.type === 'text'">
<el-form-item label="按钮文字" prop="btnBuy.text">
<el-input v-model="formData.btnBuy.text" />
</el-form-item>
<el-form-item label="左侧背景" prop="btnBuy.bgBeginColor">
<ColorInput v-model="formData.btnBuy.bgBeginColor" />
</el-form-item>
<el-form-item label="右侧背景" prop="btnBuy.bgEndColor">
<ColorInput v-model="formData.btnBuy.bgEndColor" />
</el-form-item>
</template>
<template v-else>
<el-form-item label="图片" prop="btnBuy.imgUrl">
<UploadImg v-model="formData.btnBuy.imgUrl" height="56px" width="56px">
<template #tip> 建议尺寸:56 * 56</template>
</UploadImg>
</el-form-item>
</template>
</el-card>
<el-card header="商品样式" class="property-group" shadow="never">
<el-form-item label="上圆角" prop="borderRadiusTop">
<el-slider
@@ -92,6 +143,7 @@ import { PromotionSeckillProperty } from './config'
import { usePropertyForm } from '@/components/DiyEditor/util'
import * as SeckillActivityApi from '@/api/mall/promotion/seckill/seckillActivity'
import { CommonStatusEnum } from '@/utils/constants'
import SeckillShowcase from '@/views/mall/promotion/seckill/components/SeckillShowcase.vue'
// 秒杀属性面板
defineOptions({ name: 'PromotionSeckillProperty' })
@@ -100,7 +152,7 @@ const props = defineProps<{ modelValue: PromotionSeckillProperty }>()
const emit = defineEmits(['update:modelValue'])
const { formData } = usePropertyForm(props.modelValue, emit)
// 活动列表
const activityList = ref<SeckillActivityApi.SeckillActivityVO>([])
const activityList = ref<SeckillActivityApi.SeckillActivityVO[]>([])
onMounted(async () => {
const { list } = await SeckillActivityApi.getSeckillActivityPage({
status: CommonStatusEnum.ENABLE
@@ -13,12 +13,12 @@
<el-form-item label="框体样式">
<el-radio-group v-model="formData!.borderRadius">
<el-tooltip content="方形" placement="top">
<el-radio-button :label="0">
<el-radio-button :value="0">
<Icon icon="tabler:input-search" />
</el-radio-button>
</el-tooltip>
<el-tooltip content="圆形" placement="top">
<el-radio-button :label="10">
<el-radio-button :value="10">
<Icon icon="iconoir:input-search" />
</el-radio-button>
</el-tooltip>
@@ -30,12 +30,12 @@
<el-form-item label="文本位置" prop="placeholderPosition">
<el-radio-group v-model="formData!.placeholderPosition">
<el-tooltip content="居左" placement="top">
<el-radio-button label="left">
<el-radio-button value="left">
<Icon icon="ant-design:align-left-outlined" />
</el-radio-button>
</el-tooltip>
<el-tooltip content="居中" placement="top">
<el-radio-button label="center">
<el-radio-button value="center">
<Icon icon="ant-design:align-center-outlined" />
</el-radio-button>
</el-tooltip>
@@ -27,8 +27,8 @@
</el-form-item>
<el-form-item label="导航背景">
<el-radio-group v-model="formData!.style.bgType">
<el-radio-button label="color">纯色</el-radio-button>
<el-radio-button label="img">图片</el-radio-button>
<el-radio-button value="color">纯色</el-radio-button>
<el-radio-button value="img">图片</el-radio-button>
</el-radio-group>
</el-form-item>
<el-form-item label="选择颜色" v-if="formData!.style.bgType === 'color'">
@@ -79,7 +79,7 @@
</template>
<script setup lang="ts">
import { TabBarProperty, THEME_LIST } from './config'
import { TabBarProperty, component, THEME_LIST } from './config'
import { usePropertyForm } from '@/components/DiyEditor/util'
// 底部导航栏
defineOptions({ name: 'TabBarProperty' })
@@ -88,6 +88,9 @@ const props = defineProps<{ modelValue: TabBarProperty }>()
const emit = defineEmits(['update:modelValue'])
const { formData } = usePropertyForm(props.modelValue, emit)
// 将数据库的值更新到右侧属性栏
component.property.items = formData.value.items
// 要的主题
const handleThemeChange = () => {
const theme = THEME_LIST.find((theme) => theme.id === formData.value.theme)
Loaded 100 of 526 files, more files were not shown because too many files have changed in this diff. Show more