Compare commits

..

1129 Commits

Author SHA1 Message Date
Lei OT 6d5e037f3f fix: 保存发送邮件 字段名称错误 3 months ago
LiaoYijun e5281be550 feat: update favicon.ico 3 months ago
LiaoYijun a7f2e1d5dc 1.5.4 3 months ago
Lei OT 17577d6fb6 fix: indexedDB 版本更新 3 months ago
LiaoYijun 0ec8566344 1.5.3 3 months ago
Lei OT 7e20ca48cf perf: 在线聊天: 会话搜索: 判断是否把当前选中的放顶部显示 3 months ago
LiaoYijun b35b5db436 perf: 隐藏订单操作状态【取消】 3 months ago
LiaoYijun bc5d86d568 feat: 增加 HighlightsTravel 收款
perf: 更新 Logo
3 months ago
Lei OT f3b2093d8b fix: `session.updated` 推送, 排除email 3 months ago
Lei OT 13a8bca806 perf: 订单跟踪: 目录刷新: 页面活跃时 3 months ago
Lei OT f718049de4 Merge remote-tracking branch 'origin/main' 3 months ago
Lei OT 79b9e21c73 perf: 邮箱目录Tree, 虚拟滚动 3 months ago
Lei OT d6724fa0a6 fix: indexDB 初始化 3 months ago
LiaoYijun 22f07f9100 1.5.2 3 months ago
Lei OT 0ca4a7a15a perf: 订单跟踪: 查找订单: 自动展开到`收件箱`下 3 months ago
Lei OT bfdeba11ee fix: 从订单跳转到会话页面,没有新建会话 3 months ago
LiaoYijun 504366b529 1.5.1 3 months ago
LiaoYijun c69acb791d fix: 使用正式环境地址 3 months ago
LiaoYijun f24a40fe6b 1.5.0 3 months ago
Lei OT 84e9ada0e7 style: 3 months ago
Lei OT 6a3da2a537 # 3 months ago
Lei OT 535aa38775 perf: 邮件内容: 图片点击预览 3 months ago
Lei OT 22674fe498 . 3 months ago
Lei OT eabb53e0a9 perf: 邮件列表: 搜索结果 3 months ago
LiaoYijun 9ed85c81b2 perf:优化订单展开、收缩按钮位置 3 months ago
LiaoYijun 6baff26720 doc:prerealse 1.5.0-1 3 months ago
LiaoYijun 0a06f6c16a perf: 精简查找邮件目录数量 3 months ago
LiaoYijun 038db199e9 feat: 删除已读设置,增加未读。删除无用代码 3 months ago
Lei OT 210d3e7263 fix: Listener 数据对象 3 months ago
Lei OT 945f1b3651 perf: 邮箱目录更新 3 months ago
Lei OT 378c864277 perf: email quote, text/plain 3 months ago
Lei OT cbf63c5e86 feat: 查找邮件: 更新 3 months ago
Lei OT 01997b7d23 Merge remote-tracking branch 'origin/main' 3 months ago
LiaoYijun d5a522e88f feat: 增加【查找邮件】界面 3 months ago
Lei OT e0950bb773 style: 3 months ago
Lei OT 74a0e0c14e conf: build chunk 3 months ago
Lei OT 068a02ff64 perf: email quote, text/plain 3 months ago
Lei OT 2abd149655 perf: email 不在在线聊天页面通知 3 months ago
Lei OT 2b344eec43 perf: email quote 3 months ago
LiaoYijun 7365ae08ee perf: 修改 WA 后更新 State 3 months ago
LiaoYijun 5b5ebe896c perf:编辑附加信息初始值 3 months ago
LiaoYijun cd5dbb3be5 feat:增加 WA、附加信息设置 3 months ago
LiaoYijun d0fbf179fd feat: 增加设置 WA 界面 3 months ago
Lei OT 6b32601fc7 style: 固定mail list 的header 3 months ago
Lei OT 403cb4f7c7 perf: 模板 3 months ago
Lei OT c51df7fa03 style: 会话筛选 3 months ago
Lei OT 26b709a7dc Merge branch 'dev/2025a' 3 months ago
Lei OT b29b927b5c # 3 months ago
Lei OT 15acbf4f2f update: antd Modal props 3 months ago
Lei OT 8eccf74c61 style: 3 months ago
Lei OT 6211d275d1 perf: 订单信息: 催信状态 3 months ago
Lei OT 4fb5041179 feat: 历史记录: +渠道搜索 3 months ago
Lei OT 7ec91716a7 style: 格式刷图标 3 months ago
Lei OT 2d7f269a27 perf: 邮件编辑页面: 切换账号 3 months ago
Lei OT 7e84b9cb5a 邮箱默认文件夹 3 months ago
Lei OT f78130544a perf: 邮件详情: 最大化窗口 3 months ago
Lei OT 674b3cc591 邮件查找接口 3 months ago
Lei OT 29cc138b33 # 3 months ago
Lei OT 1977b8b404 perf: 邮件: 编辑草稿 3 months ago
Lei OT aabc409f6d feat: 邮件: 删除; perf: 更新数量 3 months ago
Lei OT d9686b3ef5 # 3 months ago
Lei OT acf2c02063 style: 3 months ago
Lei OT 88958977c4 perf: 邮件目录保持展开的树; style: MailBox title 3 months ago
Lei OT 812bf19c26 feat: 邮箱目录: 数量 3 months ago
Lei OT 3f9cc81b30 Merge remote-tracking branch 'origin/dev/2025a' into dev/2025a 3 months ago
Lei OT 701a6a00c0 perf: 新邮件: 前缀[称呼+订单号] 3 months ago
LiaoYijun f8246c10a3 fix: 试用 Router-Link 跳转在线聊天 3 months ago
LiaoYijun 95d6e7dd92 feat:完成订单新增字段显示 3 months ago
Lei OT ca5dcc0705 Merge remote-tracking branch 'origin/dev/2025a' into dev/2025a 3 months ago
Lei OT 70a7f25b07 feat: 查找邮箱/订单: 订单仅当前账号下 3 months ago
Lei OT b0d72e0f7b Merge remote-tracking branch 'origin/dev/2025a' into dev/2025a 3 months ago
LiaoYijun 890027563c feat: 完成表单信息添加 3 months ago
Lei OT f081aa46e9 perf: 邮件绑定订单: 支持商务订单 3 months ago
Lei OT 696832eba1 # 3 months ago
Lei OT b1db77bbe9 conf: 增加缓存: 附件, 优化图片加载 3 months ago
Lei OT afeef17e28 Merge remote-tracking branch 'origin/dev/2025a' into dev/2025a 3 months ago
Lei OT be07ab175b feat: 查找邮箱/订单 3 months ago
LiaoYijun bf0f85b17a perf: 优化移动端获取当前订单 3 months ago
LiaoYijun 7cd6e1b2aa perf: 在线聊天共用订单信息组件 3 months ago
Lei OT 52e6307769 perf: 邮件详情: 自动标记; 附件处理; 3 months ago
Lei OT 2d4edd6c64 查找订单→邮箱目录 3 months ago
Lei OT 318c2256b3 perf: 编辑会话: 邮箱地址 3 months ago
Lei OT 5471345cf1 fix: email detail btns key 3 months ago
Lei OT f7f9500413 feat: 设为`已处理`后, 更新列表 3 months ago
LiaoYijun 95a1b16085 perf: 调整邮件列表按钮大小、文字 4 months ago
Lei OT e9e409ed0d perf: 订单跟踪: 默认折叠`订单信息` 4 months ago
Lei OT 36f237a14a feat: 新窗口打开邮件详情 4 months ago
Lei OT d18b8fd5e5 perf: 在线聊天: 不显示邮箱地址 4 months ago
Lei OT f9999e7d06 模板接口命名 4 months ago
Lei OT 49fede675e perf: 催信模板标题 4 months ago
Lei OT df4932f325 # 4 months ago
Lei OT 06209430da Merge remote-tracking branch 'origin/dev/2025a' into dev/2025a
# Conflicts:
#	src/hooks/useEmail.js
#	src/views/orders/components/MailBox.jsx
4 months ago
Lei OT db14ce64af feat: 邮件: 打开详情: 设为`已读` 4 months ago
Lei OT 5f657b2618 feat: 数据更新: 广播; 事件; `已读`, `已处理` 不刷新请求, 仅更新缓存 4 months ago
LiaoYijun 06a3e95e1a perf:调整邮件列表样式和代码 4 months ago
LiaoYijun 095a8f3d3b perf: 增加 WA 跳转到在线聊天 4 months ago
LiaoYijun d293e3a1e5 perf: 完成订单状态、催信设置 4 months ago
Lei OT 10e6b56446 feat: 缓存策略: 自动清除7天前的, 每天检查 4 months ago
Lei OT 5d41b44270 Merge remote-tracking branch 'origin/dev/2025a' into dev/2025a 4 months ago
Lei OT 4dd404167b fix: 邮件详情 4 months ago
LiaoYijun 17993f348c perf: 已读、已处理后更新邮件列表 4 months ago
LiaoYijun 645c85a59a feat: 增加设置邮件已读、已处理 4 months ago
LiaoYijun 85c2622213 perf: 删除拨打电话链接 4 months ago
Lei OT cc471d93c8 conf: api v3 地址 4 months ago
Lei OT 05a22161cd feat: 保存草稿: 附件处理 4 months ago
Lei OT aeb0672002 conf: indexedDB version upgrade 4 months ago
Lei OT 1a0328303d perf: 邮件的订单 4 months ago
Lei OT 46fa96694f perf: 模板按钮 4 months ago
Lei OT fdfe4d3083 # 4 months ago
Lei OT e38d136cc4 perf: maillist 缓存 4 months ago
Lei OT 01f0f9bd9d Merge remote-tracking branch 'origin/dev/2025a' into dev/2025a 4 months ago
Lei OT 5ce589654a perf: maillist 缓存 4 months ago
LiaoYijun 7d7334ffe2 perf: 不能通过号码拨打电话 4 months ago
LiaoYijun ad1f934d3b perf: 下线 Vonage Voice,价格没有谈成 4 months ago
Lei OT 8f3fdef2e6 Merge remote-tracking branch 'origin/dev/2025a' into dev/2025a 4 months ago
Lei OT e51581202d 加载模板 4 months ago
LiaoYijun d265f03a6e perf: 调整选中样式、附件图标 4 months ago
LiaoYijun 7a45245437 feat: 增加多选、全选功能 4 months ago
Lei OT 1393bf9899 perf: 邮件详情: 附件的显示 4 months ago
Lei OT be2f85a0da style: 4 months ago
Lei OT 0529cce11b Merge remote-tracking branch 'origin/dev/2025a' into dev/2025a 4 months ago
Lei OT fe3cde0c89 feat: 保存草稿; 4 months ago
LiaoYijun 0b37f1a9a0 perf: 调整手机、WA 样式 4 months ago
Lei OT 01dbcabdd7 perf: 邮箱目录 4 months ago
Lei OT d55d55a3aa Merge remote-tracking branch 'origin/dev/2025a' into dev/2025a 4 months ago
Lei OT 4d4e6fe1d3 style: 邮件详情 4 months ago
Lei OT e113c33fc6 新窗口: 邮件编辑 4 months ago
LiaoYijun dd9e6e9e3a perf:调整表单信息顺序;增加骨架屏 4 months ago
LiaoYijun d733303ec3 fix: 修复合并出错 4 months ago
LiaoYijun e9d7bd1e8f feat:根据订单读取客人、表单信息;去除报价列表 4 months ago
Lei OT ef3e55eefb perf: 邮件详情 4 months ago
Lei OT c4dd6b0147 feat: useEmailList + refresh 4 months ago
Lei OT af5dd4efdc perf: 邮箱目录操作; perf: 邮件详情的附件; 4 months ago
Lei OT 496861bcaa perf: MailBox 参数 4 months ago
Lei OT 1863983d02 Merge remote-tracking branch 'origin/dev/2025a' into dev/2025a 4 months ago
Lei OT f1bc44da07 perf: 待办目录: 处理订单重复 4 months ago
LiaoYijun 12b793d277 feat: 邮件列表增加分页功能 4 months ago
Lei OT fdfd633ecf perf: 待办目录+邮箱目录; `催信` 4 months ago
Lei OT d881778d78 feat: mailbox 缓存清除策略 4 months ago
Lei OT f4f956fd5e Merge remote-tracking branch 'origin/dev/2025a' into dev/2025a 4 months ago
Lei OT c7d72d01f3 perf: 待办目录+邮箱目录 4 months ago
Lei OT a61ed7eb82 perf: 邮箱目录: 查询不需`出发日期` 4 months ago
LiaoYijun 0da3ea58af perf: 增加邮件列表分页,暂时显示第一页 4 months ago
Lei OT 1e9f84665e perf: email list 字段不需要重命名 4 months ago
Lei OT 0860a7054d perf: mailbox 参数 4 months ago
Lei OT c622138c7d style: 4 months ago
Lei OT d9082a1203 Merge remote-tracking branch 'origin/dev/2025a' into dev/2025a 4 months ago
Lei OT 3df24ab6ba perf: 邮箱目录: 保留选中 4 months ago
LiaoYijun 9a7db21d74 perf: 显示邮件总数 4 months ago
LiaoYijun ad142df232 feat: 选择订单,邮件不显示订单号;面包屑和树一致 4 months ago
LiaoYijun 6db05883de perf: 没有团号、国籍时隐藏 4 months ago
Lei OT a6cb136ccf perf: 邮箱目录: 固定的目录不触发事件 4 months ago
Lei OT 716776f96b perf: 计算mailbox 的title 4 months ago
Lei OT 74bd58529e Merge remote-tracking branch 'origin/dev/2025a' into dev/2025a 4 months ago
Lei OT 32fd97ce91 style: 订单跟踪: 订单信息的缩放 4 months ago
LiaoYijun 62615cfb98 perf: 增加高级搜索切换 4 months ago
Lei OT 1286a0c20a Merge remote-tracking branch 'origin/dev/2025a' into dev/2025a
# Conflicts:
#	src/views/orders/components/MailBox.jsx
4 months ago
Lei OT efae99e81e feat: useEmailList hooks 4 months ago
LiaoYijun 05de1791ed perf: 取消高级搜索 Drawer;调整邮件项为两行 4 months ago
Lei OT 1d513ec038 Merge remote-tracking branch 'origin/dev/2025a' into dev/2025a
# Conflicts:
#	src/views/orders/components/MailBox.jsx
4 months ago
LiaoYijun c8ca19954f feat:增加分页按钮及数量 4 months ago
LiaoYijun 9823214e4b perf:增加面包屑;调整邮件单选框位置 4 months ago
Lei OT 2a629df2ed feat: 邮箱文件夹接口; 邮件列表接口 4 months ago
LiaoYijun 3519c4a414 perf:调整邮件列表样式,精简字体大小、行间距 4 months ago
Lei OT 9d31e69db9 feat: 邮箱文件夹接口; 邮件列表接口 4 months ago
Lei OT 9100e4b19d fix: 会话列表时间 4 months ago
Lei OT f3ead963cc fix: 会话列表时间 4 months ago
Lei OT 36068565f9 . 4 months ago
LiaoYijun a778bc475f perf: 整合原来 CustomerProfile 界面;调整批量操作按钮 4 months ago
Lei OT ab3c763238 feat: 邮箱文件夹 4 months ago
Lei OT 6bc5faa3f8 Merge remote-tracking branch 'origin/dev/2025a' into dev/2025a 4 months ago
Lei OT 428524b232 fix: 合并覆盖 4 months ago
LiaoYijun e4fc6f79c0 feat: 独立邮件箱组件 4 months ago
LiaoYijun f4a64f0a03 feat: 独立订单信息组件 4 months ago
LiaoYijun 25722eff77 fix: 解决合并冲突后错误 4 months ago
LiaoYijun 8b6326380d perf:更新催信模板菜单;
feat:增加树节点选择显示
4 months ago
Lei OT b6903c7a9d 邮件文件夹 4 months ago
Lei OT 55e787b97f 邮件相关接口 4 months ago
Lei OT dfb7016240 feat: 订单跟踪: 邮件详情 4 months ago
Lei OT 0505313830 Merge remote-tracking branch 'origin/dev/2025a' into dev/2025a 4 months ago
Lei OT 99862de593 # 4 months ago
Lei OT e88fa38991 feat: 订单跟踪: 邮件详情 4 months ago
Lei OT 04c71b1ff0 邮件详情; `已处理`操作 4 months ago
Lei OT 1ea4dabbc2 Merge remote-tracking branch 'origin/dev/2025a' into dev/2025a 4 months ago
Lei OT 41948fed6f 新窗口: 邮件编辑 4 months ago
LiaoYijun ab36a85b22 perf:删除原有表格和无用代码 4 months ago
LiaoYijun b1efa2f4f3 feat: 增加邮件批量操作工具栏 4 months ago
Lei OT 92e5cab823 perf(前端): 历史记录: 查询`邮件`渠道; 类型 4 months ago
Lei OT ce8494fe26 perf(前端): 在线聊天: 供应商邮件; 4 months ago
Lei OT 63ec5c0a28 perf: 邮件附件预览 4 months ago
Lei OT c51012f88e Merge remote-tracking branch 'origin/dev/2025a' into dev/2025a 4 months ago
Lei OT fc87029d7a perf: 消息发送失败的 错误信息 4 months ago
LiaoYijun 8d7d5e32f4 perf: 删除非必要字段 wlemail 4 months ago
Lei OT 2ac04974a0 perf: 图文集; 支付链接 4 months ago
Lei OT df89722804 perf: 支付链接: 删除通知邮箱 4 months ago
Lei OT 5d73d04009 Merge remote-tracking branch 'origin/dev/2025a' into dev/2025a 4 months ago
Lei OT c021cd162b # 4 months ago
Lei OT ba6e017ffd feat: 编辑器: 清除格式 4 months ago
LiaoYijun b61c2baf9f perf: 删除提醒中心 4 months ago
LiaoYijun 2b6b0f9961 feat: 增加新窗口回复邮件例子 4 months ago
LiaoYijun b6efb24a87 perf: 使用四列布局订单跟踪 4 months ago
LiaoYijun 7449ad9e44 perf: 使用 Layout 布局 4 months ago
Lei OT c2f94e3e81 perf: add Icon: new mail 4 months ago
Lei OT d1fff21159 perf(前端): 语音全局入口 4 months ago
Lei OT 7b0bb05e89 test: 编辑邮件窗口
# Conflicts:
#	src/utils/commons.js
4 months ago
Lei OT 0d9dd3ad8c feat: 编辑器: 格式刷 4 months ago
Lei OT 3e8cda6700 feat: 编辑器: 字号 4 months ago
Lei OT 96daa64eb1 perf: 会话列表 顶部 4 months ago
Lei OT e126dec2ca Merge remote-tracking branch 'origin/dev/2025a' into dev/2025a 4 months ago
LiaoYijun c395ea1e8d perf: Dev 不发送 PageSpy;初步开发订单跟踪 4 months ago
Lei OT 4d3c4979c8 Merge branch 'main' into dev/2025a 4 months ago
Lei OT 1dfd2f28e1 1.4.10 4 months ago
LiaoYijun 1f972f417b perf:更新 router,zustand 小版本 4 months ago
LiaoYijun 1696d13c31 perf: 更新 Antd 小版本 4 months ago
Lei OT 8277a7b8ac style: 邮件详情 4 months ago
Lei OT 5278dc6030 perf(前端): 日志清除策略 4 months ago
Lei OT c61795ea97 perf(前端): 上传日志, 读取最近的websocket记录 4 months ago
Lei OT a7d478b667 perf(前端): 在线聊天: 会话的订单筛选; `已处理`改为`隐藏`; 会话列表每页100; 不操作`邮件`; 默认折叠`订单信息`; 隐藏供应商邮件; 隐藏报价历史; 在线聊天只能看订单信息 4 months ago
Lei OT 569039c311 style: 4 months ago
Lei OT 769fa76831 perf(WAI): outbound Status 4 months ago
Lei OT d7f1af1d49 style: 4 months ago
Lei OT 5446b7ca07 perf: 邮件列表: 无分页 5 months ago
Lei OT 4640801a53 fix: 推送错误,不提示了 5 months ago
Lei OT 0b4e02cfe1 1.4.9 5 months ago
Lei OT 2dd356ab3b fix: 推送错误 5 months ago
Lei OT 868a6441c9 feat: 邮件列表; 在线 5 months ago
Lei OT 75132e14eb feat: 邮件列表 5 months ago
Lei OT 98d885400f perf: 邮件列表组件 5 months ago
Lei OT 29a605cc11 test: # 5 months ago
Lei OT 54dac8e4ed 1.4.8 5 months ago
Ycc dcf86595fc Merge branch 'main' of github.com:hainatravel/global-sales 5 months ago
Ycc affd439f99 删除打印信息 5 months ago
hainatravel b7fb0264f3
Merge pull request #1 from hainatravel/master
已回复数据统计
5 months ago
Ycc 86ae19598a 已回复数据统计 5 months ago
Lei OT 081815fb69 perf(前端): 供应商平台的邮件正文, 处理换行 5 months ago
Lei OT 50109ab629 perf: 供应商邮件 5 months ago
Lei OT 96d0d2bdc0 perf(前端): 邮件正文 5 months ago
Lei OT 6ce6ae1492 revert: 不要处理 html 格式的文本邮件 5 months ago
Lei OT 15874bf229 perf(前端): 邮件详情 5 months ago
Lei OT b7fa9490a7 perf: 邮件绑定订单. 绑定到其他人订单 5 months ago
Lei OT c9b44f233d perf(前端): 供应商平台的邮件正文, 处理换行 5 months ago
Lei OT 35ac6c6c48 perf(前端): 邮件详情: 记住窗口位置 5 months ago
Lei OT 056d075a7c perf(前端): 邮件正文 5 months ago
Lei OT 4a9ea4311b style: 供应商邮件 5 months ago
Lei OT 099edef821 style: 5 months ago
Lei OT 9933fa7460 perf(前端): 邮件正文 5 months ago
Lei OT 888cc8214a perf(前端): 模板消息, 查看头部大图 5 months ago
Lei OT 00384ca10c perf: 语音通话 tip 5 months ago
Lei OT 8722903143 Merge remote-tracking branch 'origin/main' 5 months ago
Lei OT 815ba6ac68 style: 5 months ago
Ycc 1207e8e8b8 显示错误内容 5 months ago
Lei OT 83b25ca524 1.4.7 5 months ago
Lei OT a4f467ef0c fix: 抄送的 replyAll 5 months ago
Lei OT 3278dec31d style: 5 months ago
Lei OT 85000e35f5 fix: conf 5 months ago
Lei OT e7ae4ea264 1.4.6 5 months ago
Lei OT 1d085285b5 Merge remote-tracking branch 'origin/main' 5 months ago
Ycc b06b8e7f90 1v1统计 5 months ago
Lei OT c2f478f6d4 perf: 模板+支持: 换头图, 发券码, 复制码, 按钮url参数和显示; 新模板排序 5 months ago
Lei OT 51d474bbe5 feat: 会话 更新 推送 5 months ago
Lei OT 69dff17e29 conf: 5 months ago
Lei OT 9d7cd401d5 feat: vonage 语音 测试账户 5 months ago
Lei OT 6abf31325a test: 会话消息推送 5 months ago
Lei OT 3d04a0d376 1.4.5 5 months ago
Lei OT 18af62a843 feat: 会话信息推送 5 months ago
Lei OT f41cd0d058 Merge remote-tracking branch 'origin/main' 5 months ago
YCC 4a7ce7424d 更新会话链接 5 months ago
Lei OT 6861eee665 fix: indexDB 5 months ago
Lei OT 7f4e805367 1.4.4 5 months ago
LiaoYijun f5499e1e76 perf: 悬浮按钮桌面和移动端使用不同样式 5 months ago
Lei OT edc1569a8c Merge remote-tracking branch 'origin/main' 5 months ago
Lei OT 5ddc7f966e perf: 消息状态图标 5 months ago
Lei OT b16a2c4c8c # 5 months ago
Ycc fa52d9db7c 添加消息状态 5 months ago
Lei OT 07e1819743 1.4.3 5 months ago
Lei OT 512e8581e3 Merge remote-tracking branch 'origin/客户运营' 5 months ago
Ycc 78eddb5ce5 显示消息状态 5 months ago
Lei OT 461ed80ecb perf: 新模板排序 5 months ago
Lei OT 8de6599ab0 1.4.2 6 months ago
Lei OT 679fc3888b Merge remote-tracking branch 'origin/客户运营'
# Conflicts:
#	src/stores/AuthStore.js
6 months ago
Lei OT 4d04d9b84c fix: indexDB 6 months ago
Ycc 30201094d9 增加排序 6 months ago
Ycc ac81fb3987 更新会话链接 6 months ago
Lei OT bda195b657 1.4.1 6 months ago
Lei OT 5e74e833d0 fix: test auth 6 months ago
Lei OT 8332e5dcd4 1.4.0 6 months ago
Lei OT fbccb2ebe3 Merge remote-tracking branch 'origin/客户运营' 6 months ago
Lei OT e3fadb6d4e perf: 模板提示; 获取登录账户的名字 6 months ago
Ycc 5b0799ff03 设置默认值 6 months ago
Lei OT eacc0b7d31 style: 6 months ago
Ycc f999855166 新建客运模块 6 months ago
Lei OT d491b62d72 1.3.12 6 months ago
Ycc a49460571c 添加客户运营模块 6 months ago
Lei OT 45b01d6bc5 Merge remote-tracking branch 'origin/main' 6 months ago
Lei OT 58dca13d3d feat(前端): 会话列表: `今日` 6 months ago
LiaoYijun 28ffb63da3 doc: 增加查找掉线 WA 6 months ago
Lei OT 89a7b03084 fix: 上传前端日志 6 months ago
Lei OT a80b2138c6 fix: 编辑WhatsApp号码, 处理空格 6 months ago
Lei OT d04dad5363 perf(前端): postmail ordertype 默认传统订单; 6 months ago
Lei OT 8b9b60afd6 1.3.11 6 months ago
Lei OT 4dd1824b5b perf(前端): postmail ordertype 默认传统订单; 对发件`回复全部` 6 months ago
Lei OT ebae7d272c fix(前端): template消息显示 type值不区分大小写 7 months ago
Lei OT 49059be11b Merge remote-tracking branch 'origin/main' 7 months ago
Lei OT bb364e5cac feat(WAI): 设置号码托管; 托管账号, 单个会话 7 months ago
LiaoYijun b5e9c324bc perf: 增加忽略日志 7 months ago
Lei OT fd805dced8 docs: dump sql 7 months ago
Lei OT 0a6ed3e5a9 Merge remote-tracking branch 'origin/main' 7 months ago
Lei OT da5970a5b8 . 7 months ago
Lei OT 4d878d0dc3 docs: WABA 发送模板 7 months ago
Lei OT 3d5b8dba73 feat(WAI): 托管号码给trip planner Agent 7 months ago
LiaoYijun 38e61ed4d1 feat: 屏蔽 WA @newsletter 消息 7 months ago
Lei OT 51d867d3a5 feat(WAI): 设置WhatsApp离线 7 months ago
LiaoYijun e87bf7536d feat: 屏蔽 WA @newsletter 消息 7 months ago
Lei OT 5e347c0dd6 1.3.10 7 months ago
LiaoYijun cbe751bb80 perf: 客运商业号名字:Customer Relation Specialist 7 months ago
Lei OT 2cb8c2ae35 style: 移动端反馈按钮,不要遮挡发送 7 months ago
Lei OT b5259edd1c perf(前端): 移动端支付链接 7 months ago
Lei OT 07653ef024 Merge remote-tracking branch 'origin/main' 7 months ago
LiaoYijun 841a8c725f perf: 增加客运商业号 7 months ago
Lei OT b872eb9752 perf(前端): Email纯文本, 不限制字数 7 months ago
Lei OT c10319e8d5 perf(前端): 模板排序 7 months ago
Lei OT a8156f33ed fix: 会话绑定订单后, 获取订单信息 7 months ago
Lei OT 1187f6fdc0 perf: 从订单详情创建WhatsApp会话, 填充订单号; 没有WhatsApp允许添加 7 months ago
Lei OT 1692f70428 1.3.9 7 months ago
Lei OT 8e13c4042c feat(前端): 放大供应商邮件区域, +搜索, 上下分栏 7 months ago
Lei OT afe159a728 perf(前端): 设置订单的催信状态 7 months ago
Lei OT 9e6e24eecf perf(WAI): 号码去掉`+` 7 months ago
Lei OT ac8f12e216 style: 7 months ago
Lei OT 426a9e2bec 1.3.8 7 months ago
Lei OT 22db64e6f7 perf(前端): 邮件详情需显示抄送; 回复抄送 7 months ago
Lei OT 6b40736ef5 fix(前端): 编辑当前会话的联系人信息, 更新会话列表 7 months ago
Lei OT da75804b51 style: 7 months ago
Lei OT 2df96ad269 perf(前端): 支付链接: 币种与HT功能一致 7 months ago
Lei OT 3b0b9707c6 perf: Web界面,系统更新要更明显 7 months ago
LiaoYijun 8f49f7f060 fix: isLidUser 未导入 7 months ago
LiaoYijun d44c7bd65b 1.3.7 7 months ago
Lei OT 413b554f68 perf(WAI): 不更新写入session id; 部分字段getter 8 months ago
Lei OT 6c881e1ede perf: 不支持的消息类型 改为 `对方删除消息` 8 months ago
LiaoYijun 0bd166e9ed 1.3.6 8 months ago
Lei OT 0f47860be0 perf: 隐藏会话保持和邮件管理器一致【已处理】 8 months ago
LiaoYijun fa7c5967f5 1.3.5 8 months ago
Lei OT 586991eff5 conf: 邮件附件地址 8 months ago
LiaoYijun 7b86b1b7cc Merge branch 'main' of github.com:hainatravel/global-sales 8 months ago
LiaoYijun 96123dafc6 doc: 更新 WA 统计 SQL 8 months ago
Lei OT 47099fbdf8 style: 引用消息 8 months ago
Lei OT 806e2600b1 Merge remote-tracking branch 'origin/main' 8 months ago
Lei OT e59ef9e062 style: 字体: 删除Segoe UI 8 months ago
LiaoYijun 21ea42f630 perf: 统一判断是否是群消息 8 months ago
LiaoYijun 6ac00b2977 perf: baileys-server 已迁移到 wai-server 8 months ago
LiaoYijun c45f32822f 1.3.4 8 months ago
Lei OT 8bcf028d85 fix(前端): 临时的会话数据: channels 8 months ago
Lei OT 04afcc1cd1 style: 标记接收到的消息的对象 9 months ago
Lei OT 7aac5e76e0 perf(前端): 未分配: 读取未分配会话消息. 9 months ago
LiaoYijun 756cd7935f Merge branch 'main' of github.com:hainatravel/global-sales 9 months ago
LiaoYijun 119c7d0739 perf: WA-log 不加 channelId, QR 事件名字更改 9 months ago
Lei OT 2eb591acf5 perf(前端): 历史记录: 使用msgtime 分页 9 months ago
LiaoYijun 5408ad1d04 1.3.3 9 months ago
Lei OT 9e9dc3d551 style: 超长的引用, 溢出; 气泡宽度 9 months ago
Lei OT 68c19a62fd perf(前端): 无邮箱地址配置 9 months ago
Lei OT 3fe605c562 perf(前端): 接收消息推送, 更新会话列表 9 months ago
Lei OT 01b5991ba0 perf(前端): 消息窗口: 加载更多之后的滚动条位置 9 months ago
Lei OT cdfbea60aa perf(wai): 消息状态`error`, webhook +`errorMessage` 9 months ago
Lei OT dd3c087e24 perf(前端): 131031的错误提示 9 months ago
Lei OT 5c023c8b45 perf(前端): 发出的消息, 无状态则显示为`等待` 9 months ago
LiaoYijun 11e876ef5a 1.3.2 9 months ago
LiaoYijun 5d9a2e08cd perf: 联系人状态更新消息不处理 9 months ago
LiaoYijun 9547dab815 Merge branch 'main' of github.com:hainatravel/global-sales 9 months ago
LiaoYijun 05fbb6f369 fix: 修复发消息状态无法获取 9 months ago
Lei OT 44a1cd69c9 style: 群会话, 不能使用商业号 9 months ago
Lei OT bd5cd24918 perf(前端): 不显示群id 9 months ago
LiaoYijun e1164e0067 Merge branch 'main' of github.com:hainatravel/global-sales 9 months ago
LiaoYijun 045c4dedb1 perf: 删除不用的测试代码 9 months ago
Lei OT 920c33f16b Merge remote-tracking branch 'origin/main' 9 months ago
Lei OT 13d3bc1376 feat(前端): WhatsApp使用模板消息, 输入发送未纯文本 9 months ago
Lei OT 1eba78da8c fix(前端): 接收的消息更新, 无状态 9 months ago
LiaoYijun 463f19ae8b 1.3.1 9 months ago
Lei OT 9eee7d04ea fix(wai): webhook status 9 months ago
Lei OT 21100fc032 Merge remote-tracking branch 'origin/main' 9 months ago
Lei OT 56afea4d75 fix(前端): 会话过期提示: 仅使用WABA渠道计算 9 months ago
LiaoYijun a1ed0df17c fix: 修改群发判断方法 9 months ago
LiaoYijun 0b26c9472f Merge branch 'main' of github.com:hainatravel/global-sales 9 months ago
LiaoYijun f5de6e8b2d perf: 增加客人群发消息处理 9 months ago
Lei OT 8b84d3aaca fix(wai): 消息状态 9 months ago
Lei OT 4399a48ead perf(wai): 无法解析的内容不发生WhatsApp Server 9 months ago
Lei OT 75b41d73c6 fix(wai): deliver 在sent 之前触发 9 months ago
LiaoYijun 8267f1f442 doc: 没有扫码登录的顾问 9 months ago
LiaoYijun 5f04656ac0 doc: 增加国际部 WA 查询 9 months ago
Lei OT ac08255e51 Merge remote-tracking branch 'origin/main' 9 months ago
Lei OT e4ecab76d8 perf(wai): 使用队列处理消息事件 9 months ago
LiaoYijun 7323918217 Merge branch 'main' of github.com:hainatravel/global-sales 9 months ago
LiaoYijun 900225b789 doc: 增加查找没扫码登录的顾问 9 months ago
Lei OT 1cd09cdfdd style: 发送文件类消息不loading了 9 months ago
Lei OT 07b2dabbed style: Email弹窗 9 months ago
Lei OT 289d9877b4 revert: feat: 设为静音 9 months ago
Lei OT 0bc4d4b662 perf(wai): request log 9 months ago
Lei OT c53c286a6c fix(前端): location对象取值 9 months ago
Lei OT b1b44a52dd perf(前端): 推送的消息, 生成会话显示名称 9 months ago
Lei OT 0a5ed806c1 conf(wai): webhook 重发间隔 5s, 20s, 5m, 30m, 1h, 2h, 4h, 24h 9 months ago
Lei OT c2f8cdb65b conf(wai): webhook 重发 9 months ago
Lei OT f38728e432 Merge remote-tracking branch 'origin/main' 9 months ago
Lei OT 08498e1280 feat(前端): 标记 已读/未读 9 months ago
LiaoYijun 801de4cb96 perf: 图片和文本消息统一状态处理 9 months ago
Lei OT d39d5f4da0 feat(前端): 设为静音 9 months ago
Lei OT dd8adbf207 perf(前端): 会话列表: 分页 50 9 months ago
Lei OT 50321f6015 perf(wai): 读取已存的时间字段 → webhook 9 months ago
Lei OT 83e4ae8075 perf(wai): 重启把上一次在线的重新登录 9 months ago
Lei OT 83408b0efb perf(wai): 数据不要被空值覆盖 9 months ago
Lei OT a7c941a5da perf(前端): 历史记录: 显示会话信息 9 months ago
Lei OT 1f716e08f4 perf(前端): 会话编辑: 保留原WhatsAppId 9 months ago
Lei OT f8d2ec6b64 perf(前端): 群会话 9 months ago
Lei OT 93e63529f4 Merge remote-tracking branch 'origin/main' 9 months ago
Lei OT 950de6573f perf(前端): 会话列表显示渠道图标 9 months ago
LiaoYijun 866e7e0959 1.3.0 9 months ago
LiaoYijun 8c3d5b4d90 Merge branch 'main' of github.com:hainatravel/global-sales 9 months ago
LiaoYijun d544e845df perf: 群图片消息加上组名;图片接收状态加上空值 9 months ago
Lei OT c0d70f810d perf(前端): 图片消息在引用/最近 的显示 9 months ago
Lei OT 9bef019d09 fix(wai): 引用的消息 9 months ago
Lei OT b6d96607a2 perf(wai): 避免重复存文件 9 months ago
Lei OT 6372e27d58 fix(wai): 多媒体消息, 存储内容 9 months ago
Lei OT 59f3fea840 fix(wai): 多媒体消息, 存储内容 9 months ago
Lei OT e2948a54cc fix(wai): 多媒体消息, 存储内容 9 months ago
Lei OT 7b91848326 perf(wai): filePath 9 months ago
Lei OT d9e27adc57 Merge remote-tracking branch 'origin/main' 9 months ago
Lei OT c90724f9eb Revert "perf(前端): 其他客户端同步的消息, 不提示未读"
This reverts commit 39d1946440.
9 months ago
LiaoYijun d1e328f209 perf: 优化消息处理逻辑,增加接收图片事件触发 9 months ago
Lei OT d60b1502ee Revert "perf(前端): 邮件: 取消定时收件"
This reverts commit 3e5599b155.
9 months ago
LiaoYijun 9e7f8ceb2f doc: 删除不用的注释 9 months ago
Lei OT d6613e40f1 Merge remote-tracking branch 'origin/main' 9 months ago
Lei OT 94e370d209 wai: todo 9 months ago
LiaoYijun a9bbf68323 Merge branch 'main' of github.com:hainatravel/global-sales 9 months ago
LiaoYijun d418e5c860 feat: 增加获取群名字并缓存 9 months ago
Lei OT 4ca8bf359b perf(wai): message id 9 months ago
Lei OT e974f91fe5 perf(前端): 邮件: 邮件开头: 客人名字, 订单号 9 months ago
LiaoYijun b2aa2440b3 Merge branch 'main' of github.com:hainatravel/global-sales 9 months ago
LiaoYijun 449a0355a4 perf: 图片增加 Caption; 9 months ago
Lei OT 7b31600ffb Merge remote-tracking branch 'origin/main' 9 months ago
Lei OT 39d1946440 perf(前端): 其他客户端同步的消息, 不提示未读 9 months ago
Lei OT 5c813c53ae 删除废弃的api 9 months ago
Lei OT 277864bcc6 feat(wai): 存储多媒体消息的文件 9 months ago
LiaoYijun f008392f8b perf: 图片 sha256 转为 base64 字符串 9 months ago
LiaoYijun 4504e4910b Merge branch 'main' of github.com:hainatravel/global-sales 9 months ago
LiaoYijun 7849e188a8 perf: WA 图片消息下载图片到临时目录 9 months ago
Lei OT 3e5599b155 perf(前端): 邮件: 取消定时收件 9 months ago
LiaoYijun 8b9fcb47e0 Merge branch 'main' of github.com:hainatravel/global-sales 9 months ago
LiaoYijun 7925da2bd7 perf: logout 异步删除验证目录;统一 Baileys 发消息接口 9 months ago
Lei OT 4a1284579d perf(wai): 服务启动: 启动所有账户连接 9 months ago
Lei OT ad6f28ef85 perf(wai): 消息发送事件名称 9 months ago
Lei OT eceec840d6 . 9 months ago
Lei OT a49936dabc perf(wai): 用户wai活动日志 9 months ago
lyt 3158595b30 conf(wai): eslint 9 months ago
Lei OT 086683f782 perf: 请求登录qrcode: 已连接 9 months ago
Lei OT 75fddcf3f8 conf(wai): 日志 9 months ago
Lei OT 7dc14871f1 perf: 请求登录qrcode; 全局提示状态 9 months ago
Lei OT d05709eae4 # 9 months ago
Lei OT 31808bcefc perf(wai): webhook msg类型 9 months ago
Lei OT 997f5a3174 perf(wai): message id + `to` 9 months ago
LiaoYijun 7c9ea1e671 perf: 更新 socket.browser 9 months ago
LiaoYijun fa6dfe2700 perf: 删除不用的 console,调整 WA AUTH 目录 9 months ago
LiaoYijun f9bd3141d5 perf: Emitter+Handler 处理发消息 9 months ago
LiaoYijun c1d3f14f42 1.3.0-beta.1 9 months ago
LiaoYijun dfa8d27f95 perf: WA 号码只能保留数字 9 months ago
LiaoYijun 4200895ee2 perf:WA 日志存到 logs 目录;删除不用的配置文件 9 months ago
LiaoYijun 12a3ac3589 perf: 使用 NodeCache 替换 Map 保存 externalId 9 months ago
LiaoYijun 5a973ea114 feat: 使用个人 WA 权限根据是否有服务器地址判断;Web 端收定时件时间改为两分钟;优化收件和小虫子大小、位置 9 months ago
Lei OT d5763ba820 fix(wai): 读取数据库数据发webhook 9 months ago
Lei OT 703e028a5d fix(前端): 最近消息 9 months ago
LiaoYijun b8768c32d0 1.3.0-beta.0 9 months ago
LiaoYijun f37fd7fe1b doc: 增加 preminor 例子 9 months ago
LiaoYijun 9562192494 perf: WA 服务端地址从接口获取;增加 WA API VER 前缀; 9 months ago
LiaoYijun 17f5d275bc doc: 增加 pm2 启动注意 9 months ago
Lei OT ddc2b35ac4 perf(前端): 不清理未读 9 months ago
Lei OT 4db2172795 style: 历史记录: 区分渠道信息 9 months ago
Lei OT a2b9f84271 Merge remote-tracking branch 'origin/main' 9 months ago
Lei OT b04d5cfa06 perf(前端): wai 发文件 9 months ago
Lei OT e6f7af245f perf(前端): wai 发消息 9 months ago
Lei OT 37e952c7f0 perf(WAI): 日志 9 months ago
Lei OT 7363ebcb9a feat(WAI): 按类型发消息 9 months ago
Jimmy ec8b65b6cc perf: 删除自测功能;删除监听事件;增加 TODO 9 months ago
Lei OT 8c5db33155 Merge remote-tracking branch 'origin/main'
# Conflicts:
#	src/channel/bubbleMsgUtils.js
9 months ago
Lei OT 37d2f9b1af fix(前端): 二维码的推送解析 9 months ago
LiaoYijun 96c0b2613a fix: 解决获取二维码解析错误 9 months ago
Lei OT 43cae1723c feat(WAI): creds update事件 的格式 9 months ago
Lei OT b802532c50 perf(前端): wai 发消息 9 months ago
Lei OT 2d2eee7704 Merge remote-tracking branch 'origin/main' 9 months ago
Lei OT e7d1d4be70 perf(前端): 会话列表 9 months ago
Lei OT 7d0fbb96d1 perf(前端): wai 二维码扫码; 9 months ago
Jimmy adf35291e2 perf: 修改 emitter 发文本消息名字 9 months ago
Jimmy dacb49f273 perf: 忽略没有状态的更新;增加 emitter 发送图片 9 months ago
Lei OT 34d7e06007 feat(WAI): 推送登录状态 9 months ago
Lei OT 6c28b0cacc feat(WAI): 推送二维码 9 months ago
Jimmy 92e84e4ad0 perf: 使用 emitter 请求发消息 9 months ago
Lei OT 724d3df6dc Merge remote-tracking branch 'origin/main' 9 months ago
Lei OT 75a1818929 conf: eslint 9 months ago
Jimmy 45e12909be feat: 增加 creds:update 事件 9 months ago
Jimmy ad3bae2eab perf: emmiter+externalId 9 months ago
Jimmy b954ab6ac3 Merge branch 'main' of github.com:hainatravel/global-sales 9 months ago
Jimmy 3bb78fea32 perf: 去掉 promise, 使用 emitter 发消息。 9 months ago
Lei OT 8c6e2df266 perf(前端): wai 历史记录 9 months ago
Lei OT 3fecbc8122 Merge remote-tracking branch 'origin/main' 9 months ago
Lei OT 7a1e11a752 前端 9 months ago
Jimmy a3e68df317 perf: 使用 emitter 发消息 9 months ago
Lei OT 87b53da7e7 Merge remote-tracking branch 'origin/main' 9 months ago
Lei OT d67ab1f573 perf(前端): wai解析 9 months ago
Jimmy 397c24db74 perf: 同步 no-promise 版本 9 months ago
Jimmy c71679b099 feat: 本地测试 WA 9 months ago
Jimmy f9ced872f3 减少 WhatsApp 一层属性 9 months ago
Jimmy 68ebd591c6 perf: 增加 no promise 版 9 months ago
Lei OT 44caaf40fd perf(前端): waba提示 9 months ago
Lei OT 4d71f3b59d 前端 9 months ago
Lei OT 83f05f90e7 前端 9 months ago
Lei OT 1e88be0988 conf: eslint 9 months ago
Lei OT e144c00b6f 不管saved 事件 9 months ago
Lei OT 396c6a6c28 前端 `wai` 9 months ago
Lei OT 608d4ab774 前端解析 `wai` 9 months ago
Lei OT 7317616cd4 区分 inbound outbound 的messageId 9 months ago
Lei OT 449d482adb . 9 months ago
Lei OT e3d8ee2991 跳过一次 pending/saved 事件 9 months ago
Lei OT 56dc5a365d 区分 inbound outbound 的messageId 9 months ago
Lei OT ab64fda1ea Merge remote-tracking branch 'origin/main' 9 months ago
Lei OT a12920048c perf: 前端的渠道类型: `wai` 9 months ago
LiaoYijun 23d1a1baac Merge branch 'main' of github.com:hainatravel/global-sales 9 months ago
LiaoYijun 285b3b3ee0 perf: 删除测试代码;在线状态发送消息;增加定时测试代码; 9 months ago
Lei OT 606be58147 # 9 months ago
Lei OT b62f1317f2 消息事件:` failed` 9 months ago
Lei OT 03975bf0f0 # 9 months ago
Lei OT c331a04a02 消息事件:` pending` , `saved` 9 months ago
Lei OT a1a73d2cf5 Merge remote-tracking branch 'origin/main' 9 months ago
Lei OT b71892b117 消息事件:` pending` , `saved` 9 months ago
LiaoYijun dc599d7ad3 perf: 正式环境使用正式 Webhook 地址; 9 months ago
LiaoYijun 7da8586cbc perf: 在消息更新时也加上 externalId 9 months ago
Lei OT d7cd08aaa4 Merge remote-tracking branch 'origin/main' 9 months ago
Lei OT 622a730ac3 Merge remote-tracking branch 'origin/main' 9 months ago
Lei OT 433cedb7e5 发送保存消息 9 months ago
LiaoYijun ae9217b833 perf: 增加发送消息成功和失败事件通知 9 months ago
LiaoYijun 789ab4a8b2 perf: 增加 WASocket 超时设置 9 months ago
LiaoYijun 4293718988 perf: 发送消息支持 externalId 9 months ago
LiaoYijun 5e6cd6b9e6 perf: 删除重复发消息;注释下载图片 9 months ago
LiaoYijun 8c670d1174 perf: 链接事件增加 channelId 9 months ago
Lei OT 0bf953ab3a 保存消息, webhook 需要actionId 9 months ago
Lei OT d0fe6bd1b9 Merge remote-tracking branch 'origin/main' 9 months ago
LiaoYijun 25cd0047ab perf: 删除无用json 9 months ago
Lei OT 891db24af7 保存消息, webhook 9 months ago
LiaoYijun 499c720810 perf: 增加消息来源;增加 WA 服务器地址; 9 months ago
Lei OT 5bd8122c50 发送消息, 同步的结果; 测试服务: externalId为负 9 months ago
Lei OT 644c3f4496 发送消息, 同步的结果; 测试服务: externalId为负 9 months ago
Lei OT ba95206a7e 发送消息, webhook 9 months ago
Lei OT 9b4b7d666d 修改路径 9 months ago
Lei OT a638b7a315 Merge remote-tracking branch 'origin/main' 9 months ago
Lei OT 25d52e75e7 发送消息, webhook 9 months ago
LiaoYijun 91ed37a7e9 perf: 独立储存 store 文件 9 months ago
LiaoYijun 03127e3910 perf: 二维码失效后退出 WA 9 months ago
LiaoYijun 526363ff2d 1.2.3 9 months ago
LiaoYijun 34eb530d0a perf: 备注服务器地址;增加三位主管 WA 权限;延长模拟扫码成功时间;增加 info 转存日志;取消 WA 自动重连;增加 WA 本地测试;增加事件来源 9 months ago
Lei OT 8427c542ab wai: webhook 不重试 9 months ago
Lei OT 4046207872 sendText 格式 9 months ago
Lei OT 91ca645c41 fix: 样式丢失 9 months ago
LiaoYijun a5c2557c77 1.2.2 9 months ago
LiaoYijun 51f46f9da1 perf: 使用 await 处理消息发送;模拟扫码登录成功 9 months ago
Lei OT e3b4eda48d Merge remote-tracking branch 'origin/main' 9 months ago
Lei OT 17bc472b58 启动后再登出 9 months ago
LiaoYijun 817dc7f22c fix:解决自测消息死循环 9 months ago
Lei OT 3c918f411e todo: externalId 9 months ago
Lei OT 8485aa5910 todo: service 9 months ago
Lei OT 04294aea95 删除一个中间件: forward 9 months ago
Lei OT a03e6ae114 服务启动, 登出所有账号连接 9 months ago
Lei OT 2025cc4bb6 +models: webhook_logs, outbound_messages 9 months ago
Lei OT a47c9a1461 删除一个open事件 9 months ago
LiaoYijun c3a08d8ddd Merge branch 'main' of github.com:hainatravel/global-sales 9 months ago
LiaoYijun 09369e9031 perf: 使用网前 IP 测试;增加 pm2 安装; 9 months ago
Lei OT 23cc6787d8 style: chat window 9 months ago
Lei OT 2b58263211 Merge remote-tracking branch 'origin/main' 9 months ago
Lei OT 0b0bd8bcfe webhook 字段 9 months ago
LiaoYijun 81e63430c6 Merge branch 'main' of github.com:hainatravel/global-sales 9 months ago
LiaoYijun 46142b8a4b perf: 增加发送消息错误捕获;webhook 重试一次 9 months ago
Lei OT cb69f181c1 Merge remote-tracking branch 'origin/main' 9 months ago
Lei OT 3f4576799e feat: /channels/ 所有连接 9 months ago
LiaoYijun 81bb209b54 perf: 完善 msg.stauts 格式;增加 WA 消息同步处理 9 months ago
Lei OT 448693d304 sendMessage: 不等待 9 months ago
Lei OT 2abdc6ccaf perf: 上传最近 1 小时的日志, 直接upload 所有日志: 413 Payload Too Large 9 months ago
Lei OT bec63bbfc2 每次重新扫码; 9 months ago
Lei OT 913b88dc38 webhook 字段 9 months ago
Lei OT e7af89e945 conf: webhook whatsapp_qqs 9 months ago
Lei OT 47549ee986 docs: dump mysql 9 months ago
Lei OT 96c7b8da54 conf: production 9 months ago
LiaoYijun d983b2254b feat: 增加消息类型 conversation.type 9 months ago
LiaoYijun 32d197121f fix: 无法获取 QRCode 9 months ago
Lei OT fdc7539864 当前登录连接; 是否本机; 9 months ago
Lei OT 0e8cf01f2c 删除测试路由 9 months ago
Lei OT f505575f6a 修改API 路由: `/api/v1` 9 months ago
Lei OT d166e9d2fa Merge remote-tracking branch 'origin/main' 9 months ago
Lei OT 3df7ff4b80 连接事件 9 months ago
Lei OT 3fb6f10cd9 修改API 路由: `/api/v1` 9 months ago
LiaoYijun 07a78f7dee perf: 增加获取 WA 二维码 Action 9 months ago
Lei OT db46025929 todo: 路由转发; 删除opi_sn 字段; 删除测试路由 9 months ago
LiaoYijun 7fc40dc8e0 Merge branch 'main' of github.com:hainatravel/global-sales 9 months ago
LiaoYijun a772d9f978 perf: 增加 direction;使用 Baileys Utils;捕获消息发送错误,防止 WA 实例退出 9 months ago
Lei OT 9aa9a574af 修改wai-server API 路由: `/wai-server/v1` 9 months ago
Lei OT ed1e7ce2a0 修改wai-server API 路由: `/wai-server/v1` 9 months ago
Lei OT 65511e1036 Merge remote-tracking branch 'origin/main' 9 months ago
Lei OT 3c70cecc14 Merge remote-tracking branch 'origin/main' 9 months ago
Lei OT 394b3b568d connection写数据库; 请求日志; +支持multi-form; whatsapp connection event; 9 months ago
LiaoYijun d06eee3c1c feat: WA 二维码更新请求方式;WA 可以保存;修改 WA 消息格式; 9 months ago
LiaoYijun db041577dc perf: 更新测试代码,用来处理疑难杂症 9 months ago
Lei OT b041a819e0 Merge remote-tracking branch 'origin/main' 9 months ago
Lei OT fb32273d41 perf: 个人WhatsApp消息气泡 9 months ago
LiaoYijun 8f6d7e15a7 perf: 增加群联系人更新;模拟 macOS; 9 months ago
LiaoYijun 24cb081232 perf: 增加 WA messages.update 处理 9 months ago
LiaoYijun 2bfd4896da perf: baileys_auth_info 独立目录;群消息使用 participant 9 months ago
Lei OT 3d299afcc5 WhatsApp发送消息 9 months ago
Lei OT 4d4e21b16c webhooksource 9 months ago
Lei OT 587b0a328c Merge remote-tracking branch 'origin/main' 9 months ago
Lei OT 8e6179558b webhook event data body 9 months ago
LiaoYijun 1cddc89488 perf: 使用全局 Emitter 9 months ago
Lei OT bda1e1c7ed emit webhook 9 months ago
Lei OT c5f413f543 emit webhook 9 months ago
Lei OT 8300b5f957 Merge remote-tracking branch 'origin/main' 9 months ago
Lei OT bcac67771f conf: WhatsApp权限 9 months ago
LiaoYijun d6757954cb feat: 增加接收消息、发送消息事件 9 months ago
LiaoYijun d3b39a7fbd feat: 增加请求二维码功能;有权限才能使用;
fix: 接收图片保存出错
9 months ago
LiaoYijun e924508b1d fix: 解决 WA 扫码后无法发消息 9 months ago
LiaoYijun ccfaf25c0a perf: 迁移 Baileys 单独问题 9 months ago
LiaoYijun f2623eff8a 1.2.1 9 months ago
LiaoYijun 7bbc018b56 Merge branch 'main' of github.com:hainatravel/global-sales 9 months ago
LiaoYijun b734016aa7 perf: 开放邮件功能给所有人 9 months ago
Lei OT 5f93c43e2d conf: server 9 months ago
Lei OT 5977ec2351 测试: qrcode, send text 9 months ago
Lei OT aacfae32be perf: 历史记录: 显示邮件消息 9 months ago
LiaoYijun 501557c87d 1.2.1-beta.11 9 months ago
LiaoYijun e0367960cf fix: 暂时取消 hooks 9 months ago
LiaoYijun 45f9b86cc5 feat: 集成 Baileys 和 HTTP 框架; 暂时去掉eslint 9 months ago
Lei OT 4c485016c6 wai-server 开发配置 9 months ago
Lei OT 0ec9233e85 订单切换了清空 9 months ago
Lei OT 1cb938fd0d perf: 历史记录: 修改参数 9 months ago
Lei OT 151a220dee Merge remote-tracking branch 'origin/main' 9 months ago
Lei OT e58ebd4cf0 perf: 会话没有WhatsApp号码的提示 9 months ago
LiaoYijun e4bae796c7 feat: WA 收到图片消息下载图片 9 months ago
Lei OT 6319b7de5b perf: 消息气泡显示的名称; fix: 引用消息的waba账户检测 9 months ago
Lei OT 7ef3b6fbe5 +`ws`; 修改模拟的配置 9 months ago
Lei OT ad3c732125 Merge remote-tracking branch 'origin/main' 9 months ago
Lei OT f94a34beb0 创建路由; 模拟websocket连接 9 months ago
Lei OT bc0ffbc2c4 perf: 会话列表更新时, 保证当前会话显示在页面上 9 months ago
LiaoYijun a44821e09d perf: 精简不需要的代码,增加 WA 版本信息 9 months ago
LiaoYijun 92294b1e4e perf: 完善发送图片消息 9 months ago
Lei OT d6a35fb7f8 1.2.1-beta.10 9 months ago
Lei OT ec480735c1 fix: 会话coli sn null 时,发送失败. 异常`"Exception": "Could not convert variant of type (Null) into type (String)"` 9 months ago
Lei OT b81ee33b9e 调整日志上传 9 months ago
LiaoYijun b9a5446b92 1.2.1-beta.9 10 months ago
LiaoYijun ac07ceedcc feat: 完成 WA 发送图片;解决刷新要重新登录; 10 months ago
Lei OT 80d4934960 1.2.1-beta.8 10 months ago
Lei OT d65e3de4db fix: 发送消息之后, 切换会话, 消息列表没有清除 10 months ago
Lei OT 73cb185524 Merge remote-tracking branch 'origin/main' 10 months ago
Lei OT 0a39d0c115 # 10 months ago
Lei OT e28fb81290 增加报错自动上传日志 10 months ago
LiaoYijun 948072547d 1.2.1-beta.7 10 months ago
LiaoYijun e12b57b537 Merge branch 'main' of github.com:hainatravel/global-sales 10 months ago
LiaoYijun b6e823ce23 feat: 封装 WA 对象和方法 10 months ago
Lei OT 70a3c83a6e fix: 不在页面上的会话收到新消息 10 months ago
LiaoYijun 365343b71b 1.2.1-beta.6 10 months ago
LiaoYijun b2e71b7ea4 perf: 增加李一帆邮件权限 10 months ago
LiaoYijun c4f16ef61a perf: 增加王昌小使用邮件权限 10 months ago
Lei OT e5bf096907 1.2.1-beta.5 10 months ago
Lei OT 86a7d76409 fix: 重复请求订单的会话 10 months ago
Lei OT 2c38a86d3c test: 调整上传日志的通知 10 months ago
Lei OT 99e9f66883 fix: 清空未读的角标 10 months ago
Lei OT cb7d05f20d fix: 在线聊天页面 re-render 10 months ago
Lei OT 8ef2b7c25c pref: 新加标签: autoFocus 10 months ago
Lei OT 6f62c57ab6 1.2.1-beta.4 10 months ago
Lei OT adb75f4998 Merge remote-tracking branch 'origin/main' 10 months ago
Lei OT 1ced6878dd fix: 清空currentConversation, 用useShadow避免re-render取到旧的值 10 months ago
LiaoYijun 77da173f99 feat: 增加个人 WA 框架开发例子 10 months ago
Lei OT da4af792cd fix: 增加一个getorderconversation loading; 清空orderdetail 10 months ago
Lei OT 9b72216f61 Merge remote-tracking branch 'origin/main' 10 months ago
LiaoYijun 1d30dc38e9 Merge branch 'main' of github.com:hainatravel/global-sales 10 months ago
LiaoYijun 4c6c4f27d6 fix: 移动端暂时不用钉钉免登 10 months ago
Lei OT 050e5858b0 conf: env development 10 months ago
Lei OT 8a17767a28 requestHandler 需要在最后面 test: mock user controller 10 months ago
Lei OT 70e2b7e32e Merge remote-tracking branch 'origin/main' 10 months ago
Lei OT b7c0642351 feat: WhatsApp Individual server 10 months ago
LiaoYijun 35330bee51 1.2.1-beta.3 10 months ago
LiaoYijun 43f07b1392 feat: 增加 WA 二维码生成 10 months ago
Lei OT 068576a1c6 Merge remote-tracking branch 'origin/main' 10 months ago
LiaoYijun 44b543f1ac feat: 增加订单号文本格式 10 months ago
Lei OT 73f7e00265 perf: 发送的waba消息: 显示商业号名称 10 months ago
Lei OT fb9be9569f perf: 模板free_style_2, 更新到跟进模板 10 months ago
Lei OT f5f5e6b1d5 perf: 模板搜索 10 months ago
Lei OT 75d998a6fe perf: 邮件类型 10 months ago
Lei OT 5eedb098df style: 编辑器: 表格: 颜色弹窗和操作窗口的层级 10 months ago
LiaoYijun 727dc04daa 1.2.1-beta.2 10 months ago
LiaoYijun 60b7316c3b Revert "1.2.1"
This reverts commit 7e57222a7e.
10 months ago
LiaoYijun 7e57222a7e 1.2.1 10 months ago
LiaoYijun 927f3696a4 fix: API URL 修改 10 months ago
Lei OT 071935b1bf 1.2.1-beta.1 10 months ago
Lei OT 74dfa45b14 兼容一下1.0的会话列表 10 months ago
Lei OT 547870b62c 1.2.2-beta.0 10 months ago
Lei OT ef9c1767e8 conf: 各API更新为生产环境地址 10 months ago
Lei OT b6fd3b78a3 fix: 新建/编辑会话: 更新列表 10 months ago
LiaoYijun f2a8911d02 perf: 钉钉验证使用正式地址 10 months ago
Lei OT 9c7067fcd3 1.2.1-beta.0 10 months ago
Lei OT f22e32ebcd perf: 会话缺少WhatsApp号码的提示 10 months ago
Lei OT b1efe7f02d fix: pagespy上传日志 10 months ago
Lei OT a4b911c742 fix: 邮件没有引用原文时仍生成引用 10 months ago
Lei OT 4f5f3f3256 fix: 回复没有订单id的邮件, 使用当前会话order id 10 months ago
Lei OT c686b78328 fix: 邮件气泡: 点击回复时丢失id 10 months ago
Lei OT a1197cb584 压缩邮件的html 10 months ago
Lei OT 149b15f0f8 Merge remote-tracking branch 'origin/main' 10 months ago
Lei OT 9584d783f4 perf: 编辑器工具栏吸顶; fix: 邮件消息通过返回结果更新coli id, 从详情回复的邮件缺少coli id; 回复邮件含有引用时编辑器导入导致原文格式丢失 10 months ago
LiaoYijun dbec0732e1 perf: 删除无效注释,调整收件时间,准备上线 10 months ago
Lei OT 7132d7b76a 邮件html解析 10 months ago
Lei OT 72deb04451 取消page spy 参数, 使用缓存的1.8.5版本, 可以上传日志 10 months ago
Lei OT d402faaae2 chore: pagespy 离线 10 months ago
Lei OT 4b6bd11130 Merge remote-tracking branch 'origin/main' 10 months ago
Lei OT 34a1b0fd86 feat: 获取顾问签名, 加载到编辑器 10 months ago
LiaoYijun a3eb4e845b perf: 删除不用的代码; 10 months ago
Lei OT 29aca91b48 revert: 邮件先不给修改绑定 10 months ago
Lei OT 76544f7c1a perf: 邮件修改绑定 10 months ago
Lei OT fc22cf038d chore: pagespy 离线日志读取 indexedDB 10 months ago
Lei OT 949ea81b82 fix: 报价信邮件: 等待获取草稿 10 months ago
Lei OT 92c5b63430 perf: 模板输入: free style 多行输入; 输入信息保留 10 months ago
Lei OT b387f02337 fix: 会话列表: 刷新后, 当前会话的消息被清空, 当前不在第一页时 10 months ago
Lei OT 251f39af7d Merge remote-tracking branch 'origin/main' 10 months ago
Lei OT c44efafefb perf: 纯文本邮件: 引用回复格式优化 10 months ago
LiaoYijun d4428ddb7b perf: 标签弹窗改为 BL,不会挡住会话内容 10 months ago
Lei OT c20bb9a6ee perf: 更新模板显示 10 months ago
Lei OT 30b78a4132 perf: 更新模板显示 10 months ago
Lei OT e993f4195a perf: 更新模板的排序 10 months ago
Lei OT 9166a12215 Merge remote-tracking branch 'origin/main' 10 months ago
Lei OT 85568b99c3 feat: 邮件绑定订单 10 months ago
Lei OT ebf831992e page spy 离线模式 10 months ago
LiaoYijun 89e365d89a feat: 增加批量导入邮件消息 10 months ago
Lei OT 844e4f0e0e perf: WABA模板 10 months ago
Lei OT f039bbeff2 fix: 邮件详情: 纯文本和HTML的渲染 10 months ago
Lei OT ac172c633b revert: requestAnimationFrame 代替 setInternal 10 months ago
Lei OT 11531598b0 conf: 10 months ago
Lei OT 3a3eec3665 邮件取消邮件地址autolink 10 months ago
Lei OT 6205520872 Merge remote-tracking branch 'origin/main' 10 months ago
Lei OT f52664b19c conf: page-spy 日志大小 10 months ago
LiaoYijun 12b460ef0a Merge branch 'main' of github.com:hainatravel/global-sales 10 months ago
LiaoYijun ef4ec7a611 perf: 调整导入邮件消息权限 10 months ago
Lei OT 655cb94945 conf: page-spy 日志大小 10 months ago
Lei OT 7dfdcd02e6 fix: 默认的WABA号码 10 months ago
Lei OT f194ee9efe perf: HTML邮件模板; meta, container , front 10 months ago
Lei OT b1c018534b fix: 回复邮件, 重复渲染 10 months ago
Lei OT f0ac38fe1b 退出登录就不收件了 10 months ago
Lei OT 3100a3c768 fix: web worker 在构建版本报错 10 months ago
Lei OT 2f3b594012 Merge remote-tracking branch 'origin/main' 10 months ago
Lei OT 69903ff464 perf: requestAnimationFrame 代替 setInternal , 性能问题 10 months ago
LiaoYijun cbebd167ea Merge branch 'main' of github.com:hainatravel/global-sales
# Conflicts:
#	src/views/Conversations/Online/order/CustomerProfile.jsx   resolved by theirs version
10 months ago
LiaoYijun d430a55903 perf: 去掉全部订单选项;统一导航名字 10 months ago
Lei OT ab3e95e006 perf: 更新会话的订单; 10 months ago
Lei OT 6700f4baf2 fix: 发送邮件: 气泡显示coli id 10 months ago
Lei OT 4295af8e47 Merge remote-tracking branch 'origin/main' 10 months ago
Lei OT dc44de646e perf: 定时收件: 后台线程中执行 10 months ago
LiaoYijun 105d8161f6 Merge branch 'main' of github.com:hainatravel/global-sales 10 months ago
LiaoYijun 7717a11697 perf: 订单信息增加特殊要求和外联备注 10 months ago
Lei OT bda44fa74a perf: 会话属性信息的emoji的提示 10 months ago
Lei OT c9be1d860a perf: 邮件弹窗的尺寸和位置; `详情`, `写邮件` 10 months ago
LiaoYijun b8eeb66464 Merge branch 'main' of github.com:hainatravel/global-sales 10 months ago
LiaoYijun 92c3222e79 perf: 调整邮件窗口大小,这样可以同时查看订单信息;客人订单增加【全部】选项 10 months ago
Lei OT 889d665b3d # 10 months ago
Lei OT 036e1f7220 更新未读数量 10 months ago
Lei OT 9411e848b3 conf: workbox 缓存文件大小 10 months ago
Lei OT 6f199a33d1 # 10 months ago
Lei OT cf39a66be8 test: 前端日志 用IndexedDB; 解决主线程卡 10 months ago
Lei OT 7e80dc84eb test: 测试版 邮件开放账户 10 months ago
LiaoYijun 5cd652e1be fix: 邮件服务端使用正式地址 10 months ago
LiaoYijun 584bacb6c3 Merge branch 'main' of github.com:hainatravel/global-sales 10 months ago
LiaoYijun d06d32b868 perf: 定时收件限定人员;导入邮件消息增加提示 10 months ago
Lei OT 971d92cfa6 perf: websocket 使用console.log日志 10 months ago
Lei OT b5693182da fix: LexicalEditor在form中使用 10 months ago
Lei OT 4845ac0a82 feat: 报价信生成邮件 10 months ago
Lei OT 7233af3e4d perf: WhatsApp营销消息风控 13049 10 months ago
Lei OT 84f2c0d638 Merge remote-tracking branch 'origin/main' 10 months ago
Lei OT 2bed070ddd style: 图文集滚动 10 months ago
LiaoYijun a9727bccd7 Merge branch 'main' of github.com:hainatravel/global-sales 10 months ago
LiaoYijun 597483b970 feat: 增加导入订单邮件消息 10 months ago
Lei OT 3d23a04de4 fix: 转发邮件: 发件人 10 months ago
Lei OT 4074b0f023 perf: 转发邮件: 不推气泡到当前会话窗口; fix: 未读清零 10 months ago
Lei OT bb9e4956ec style: 邮件详情 10 months ago
Lei OT e85bdc5964 # 10 months ago
Lei OT bc6e79c092 fix: 失败邮件重新编辑, 发件人错误 10 months ago
Lei OT a8defecb2f perf: 模板按照`类别`, `语种` 分类显示 10 months ago
Lei OT 0fb7c9cf90 style: string to color, Tag 10 months ago
Lei OT d0f96892da perf: WhatsApp消息, 显示title 10 months ago
Lei OT 6a3d32dfda feat: 切换客人订单: 更新订单和消息窗口 10 months ago
Lei OT bda5abe8aa perf: 附件预览 10 months ago
Lei OT ad6b7b87c5 style: 消息窗口顶部 10 months ago
Lei OT b13569a2ac fix: 消息记录解析 10 months ago
Lei OT b03bc0a208 perf: 附件预览 10 months ago
Lei OT f9145b6c3a 消息id 10 months ago
Lei OT eb7075633b fix: 切换之后引用消息的id 10 months ago
Lei OT 915d956e1b fix: 消息气泡, 渠道类型显示 10 months ago
Lei OT c5aaa4ec0e perf: 回复按钮 10 months ago
Lei OT 2f4d619ace perf: 提示WhatsApp商业号切换 10 months ago
Lei OT 5ecea03566 perf: 主动收件的提示 10 months ago
Lei OT b8497f155c perf: 收件结果提示: 邮件地址使用`from` 10 months ago
Lei OT 17b1a8a524 fix: 消息气泡, 渠道类型显示 10 months ago
Lei OT d87de856be perf: WhatsApp消息显示接收的对象
todo: 引用消息时账户处理
10 months ago
Lei OT 1af713fa45 Merge remote-tracking branch 'origin/main' 10 months ago
Lei OT a7f1e46868 perf: WhatsApp消息显示接收的对象
todo: 引用消息时账户处理
10 months ago
Jimmy Liow 64c5c4a1d5 Merge branch 'main' of github.com:hainatravel/global-sales 10 months ago
Jimmy Liow 254940116a feat: 增加查找客人历史订单 10 months ago
Lei OT 3e568b87b7 style: 消息窗口顶部, 兼容移动端样式 10 months ago
Lei OT c827192b2e 删除移动端的语音通话入口 10 months ago
Lei OT ff8542daa0 fix: 会话筛选: 重置后触发两次 10 months ago
Lei OT 332dce179b perf: 输入 10 months ago
Lei OT 54c67d5428 feat: 附件上传前预览 10 months ago
Lei OT 7ec40fb669 feat: 附件上传前预览 10 months ago
Lei OT a9724d0982 todo: 切换会话的订单 10 months ago
Lei OT 68e46c8ba7 perf: 显示商业号账户 10 months ago
Lei OT 0562a74c28 # 10 months ago
Lei OT e73839c1d0 feat: 邮件快捷回复, 切换全文填充草稿 10 months ago
Lei OT 6ab9bdc70f perf: 渲染纯文本邮件中的换行 10 months ago
Lei OT 6796d90ce6 feat: 输入区域的小工具栏 10 months ago
Lei OT 283718c4c7 feat: 邮件快速回复, 纯文本, 无附件, 无引用 10 months ago
Lei OT 92d54d7a27 feat: 邮件快速回复, 纯文本, 无附件, 无引用 10 months ago
Lei OT 615f7b332f fix: 从订单页面进入会话页面. 10 months ago
Lei OT 70259d222e test: 邮件服务跨域, 先用测试地址 10 months ago
Jimmy Liow fcf4939200 Merge branch 'main' of github.com:hainatravel/global-sales
# Conflicts:
#	src/config.js   resolved by main version
10 months ago
Jimmy Liow fc99e38540 perf: 邮件服务使用正式地址;修改PageSpy项目名; 10 months ago
Lei OT cdf5aa428a # 10 months ago
Lei OT 88b6280627 feat: 打开供应商邮件 10 months ago
Lei OT d705fa7e22 # 10 months ago
Lei OT de7133f7cd Merge remote-tracking branch 'origin/main' 10 months ago
Lei OT 9bda8945da perf: 新建会话: 加到列表顶部, 置顶的下面 10 months ago
Jimmy Liow a9f2db4591 fix: 修改pagespy标题,方便查看版本 10 months ago
Jimmy Liow 8b6d41e8d0 Merge branch 'main' of github.com:hainatravel/global-sales 10 months ago
Lei OT ee60c4fff4 # 10 months ago
Lei OT 0e0bd33117 fix: 发送邮件: 没有订单是null->'' 10 months ago
Lei OT 1273f2dd4b perf: 订单没有WhatsApp号码, 请求订单会话, 需要用邮箱创建 10 months ago
Jimmy Liow 09ad843f95 feat: 通知顾问已上传日志 10 months ago
Lei OT b9f0e076fc # 10 months ago
Lei OT 3b62175075 perf: 订单没有WhatsApp号码, 请求订单会话, 需要用邮箱创建 10 months ago
Lei OT 6f863a95d2 Merge remote-tracking branch 'origin/main' 10 months ago
Lei OT cc9cf7e160 perf: 订单没有WhatsApp号码, 请求订单会话, 需要用邮箱创建 10 months ago
Lei OT 2ab3ccbe25 Merge remote-tracking branch 'origin/main' 10 months ago
Lei OT f4f9da4a23 perf: 订单没有WhatsApp号码, 请求订单会话, 需要用邮箱创建 10 months ago
Jimmy Liow 7dccfbb7d7 perf: pagespy 增加系统版本号显示 10 months ago
Jimmy Liow a06a6213b0 perf: 增加邮件附件公网地址 10 months ago
Lei OT 82cc84dcac perf: 推送的新会话, 增加下一页按钮 10 months ago
Lei OT 4c262c5a6d # 10 months ago
Lei OT a01c81978a Merge remote-tracking branch 'origin/main' 10 months ago
Lei OT d2e40e44c6 perf: 邮件的订单id 10 months ago
Jimmy Liow aaa4299c57 perf: 供应商邮件取消订单号; 支付链接改为文本形式 10 months ago
Lei OT 99757878a9 fix: 邮件详情: 时间 10 months ago
Lei OT 38e3120d47 Merge remote-tracking branch 'origin/main' 10 months ago
Lei OT 078325c87a perf: 切换商业号: 发送内容; 消息上显示 10 months ago
Jimmy Liow 4d04914a08 fix: 商业号设置成功后更新到 store, storage 10 months ago
Lei OT e9f3f27252 style: 10 months ago
Jimmy Liow 1c6d6a16ef feat: 供应商邮件列表增加分页 10 months ago
Jimmy Liow 86ba6da2b7 Merge branch 'main' of github.com:hainatravel/global-sales 10 months ago
Lei OT 227b90bfa6 fix: 邮件消息(socket): 显示订单号 10 months ago
Lei OT 1218dcd81d fix: 会话列表: 没有时间的会话 10 months ago
Lei OT 48ebe3a775 fix: sender name 10 months ago
Lei OT bb968b8a36 fix: msg time; sender name 10 months ago
Jimmy Liow c1e620181f fix: 解决新增图文没有顾问SN 10 months ago
Lei OT 8f5fc6551d perf: 新建会话: 手机和邮箱填一个 10 months ago
Lei OT bcce3336c3 perf: 邮件编辑器: 默认最大化; 默认显示抄送 10 months ago
Lei OT 4f5ef1448d # 10 months ago
Lei OT c21a6ab168 Merge remote-tracking branch 'origin/main' 10 months ago
Lei OT c564f40c41 perf: 邮件详情的 状态, 时间等 10 months ago
Jimmy Liow 4d72b6c0a0 fix: 供应商邮件为空时报错 10 months ago
Jimmy Liow d748a91c5d Merge branch 'main' of github.com:hainatravel/global-sales 10 months ago
Jimmy Liow 6bb3eda0e8 fix: 删除接收供应商邮件 Hardcode 10 months ago
Lei OT 0ab01a4bfa test: 测试, 每小时推送更新! 10 months ago
Lei OT 53cf713912 fix: email 推送事件, 缺少msg_source 10 months ago
Lei OT 7663a03a6d test: 删除测试账号; 登录信息存 localStorage 10 months ago
Lei OT 30e3b8dca6 Merge remote-tracking branch 'origin/main' 10 months ago
Lei OT 5bae5e45cb fix: 构建的chat list item 10 months ago
Jimmy Liow 4a4ceb7375 Merge branch 'main' of github.com:hainatravel/global-sales 10 months ago
Jimmy Liow 7ed84a894d 1.2.0-alpha.0 10 months ago
Jimmy Liow 9dc6889eb0 doc: 增加预发布小版本命令 10 months ago
Jimmy Liow f3c904be81 feat: 增加供应商邮件 10 months ago
Lei OT 393deffe46 # 10 months ago
Lei OT b16e7119e0 build: 删除依赖 10 months ago
Lei OT 3215581f14 perf: channels logo 10 months ago
Lei OT 3c6c41d0be perf: 会话列表: 置顶, 分页 10 months ago
Lei OT 38f0f18efe perf: 会话列表: 置顶, 分页 10 months ago
Lei OT 9bf9d400c7 # 10 months ago
Lei OT 0109c93d90 todo: 邮件绑定订单 10 months ago
Lei OT 0dea233af6 fix: 新邮件: 收件人从会话读取 10 months ago
Jimmy Liow 37adbdb075 Merge branch 'main' of github.com:hainatravel/global-sales 10 months ago
Jimmy Liow a6054af60f perf:删除不用的视图 10 months ago
Lei OT f280007a31 # 10 months ago
Lei OT 6b8ca67331 fix: 新增会话: 成功获取列表没有获取到 10 months ago
Lei OT c13832fb95 style: inline img 10 months ago
Lei OT 33ff492056 Merge remote-tracking branch 'origin/main' 10 months ago
Lei OT 8b8c56b775 todo: 统一处理会话item的记录结构 10 months ago
Jimmy Liow e0e4e7c767 Merge branch 'main' of github.com:hainatravel/global-sales 10 months ago
Lei OT 502ed894f4 build: 更新依赖 有依赖冲突 ` npm install --legacy-peer-deps` 10 months ago
Lei OT dc60dab969 perf: 编辑器: 表格宽度调整 10 months ago
Jimmy Liow 2f63ea6ec2 feat: 增加供应商邮件界面;增加供应商、订单和邮件关系 10 months ago
Lei OT 7b0309aa07 perf: 附件: 禁止指定格式 10 months ago
Lei OT d8afaa788f fix: 会话列表: 显示其他客户端发送的消息 10 months ago
Lei OT 8914f1be3d feat: 编辑器: 图片上传到 WAFileUpload, 正文使用链接 10 months ago
Lei OT 25764e2b83 perf: 编辑器: 扩展HTML样式 10 months ago
Lei OT 367a8ea5d1 fix: 没有订单时的新邮件按钮 10 months ago
Lei OT 0ff80b63cc fix: 联系人编辑 loading 10 months ago
Lei OT 6ec1648a99 fix: 新消息产生的会话, 数据结构构建 10 months ago
Lei OT f47f56fc6d perf: 编辑联系人会话: 名称和备注的长度 10 months ago
Lei OT af8fb09244 ExtendedTextNode 10 months ago
Lei OT 546aa729b9 Merge remote-tracking branch 'origin/main' 10 months ago
Lei OT 5ca3c881dd fix: 回复发送邮件: 气泡重复 10 months ago
Jimmy Liow cf196eccc0 Merge branch 'main' of github.com:hainatravel/global-sales 10 months ago
Jimmy Liow 4a27fc5657 feat: 增加定时收取邮件 10 months ago
Lei OT 120c09c28b fix: 转发/回复: 发件人地址 10 months ago
Lei OT f880a2617c perf: 邮件详情的地址处理 10 months ago
Lei OT 78c4822fa5 fix: 转发/回复: 发件人地址 10 months ago
Lei OT 7c1b60b2bc feat: 支付链接入口 10 months ago
Lei OT 5c1fe805ea fix: 邮件编辑: 保留的to需要更新 10 months ago
Lei OT 1b118ef283 perf: 发送接收消息, 更新到会话列表的最后消息 10 months ago
Lei OT 2929e343c3 fix: 邮件编辑: 保留的cid需要更新 10 months ago
Lei OT 2f29f013d7 perf: 回复邮件: 显示加载邮件详情的状态 10 months ago
Lei OT b66094e893 perf: 清除未读改为会话参数 10 months ago
Lei OT 7d3cd1c085 fix: 仅邮件渠道, 其他渠道没有值的显示问题 10 months ago
Lei OT 0dcae48a5c Merge remote-tracking branch 'origin/main' 10 months ago
Lei OT 7412f0e297 fix: 仅邮件渠道, qita 渠道没有值 10 months ago
Jimmy Liow e6756e5da0 feat: 增加生成支付Drawer;支付表单默认当前订单和顾问;图文新增或保存是当前用户 10 months ago
Lei OT 0f883df097 Merge remote-tracking branch 'origin/main' 11 months ago
Lei OT 19472ca1e1 perf: 新邮件: 自动填充收件地址 11 months ago
Jimmy Liow 620d2b8e4c fix: 删除语音通话导航; 11 months ago
Lei OT 0790bd3c1f fix: 回复邮件: 弹出两个气泡 11 months ago
Lei OT 9e5d9e8844 Merge remote-tracking branch 'origin/main' 11 months ago
Lei OT 98c879d9d8 todo: 表格 11 months ago
Jimmy Liow 0408771a5c perf: 生成付款按钮使用当前顾问SN;增加测试付款生成导航;解决钉钉免登安神汤Code; 11 months ago
Lei OT ef66e3bd30 perf: 发送邮件: 需要和发送WA一样,先产生消息,再异步更新状态 11 months ago
Lei OT cf0ac2e089 perf: 回复邮件: 收发地址处理尖括号 11 months ago
Lei OT 7f68dd5b55 feat: 邮件详情显示附件 11 months ago
Lei OT 41a4ef8d5d fix: 新建会话: 邮件地址填充 11 months ago
Lei OT 625a2e81e0 Merge remote-tracking branch 'origin/main'
# Conflicts:
#	src/views/Conversations/Online/ConversationsList.jsx
11 months ago
Lei OT 806d065a23 # 11 months ago
Lei OT 50b4698a9a perf: 主动收件: 放到浮动按钮, 修改参数 11 months ago
Jimmy Liow 46d81721ec perf: 更新 TODO 11 months ago
Jimmy Liow 10b51274a2 perf: 根据参数生成付款按钮、链接 11 months ago
Jimmy Liow 379c64dade Merge commit '36fbaddf318a3d3582454bdfc898f512cbcfbd2d'
# Conflicts:
#	package.json   resolved by main version
#	src/hooks/useConversation.js   resolved by main version
11 months ago
Jimmy Liow 36fbaddf31 feat: 可以修改 clientId 请求 authCode 11 months ago
Jimmy Liow ecf39d3da1 1.1.6-0 11 months ago
Jimmy Liow 3cdd7759d1 feat: 增加钉钉免登调试 auth-code 11 months ago
Jimmy Liow 53fa7a7f92 feat: 调用生成支付按钮,调整 HTML 预览 11 months ago
Jimmy Liow 59d73f69b8 feat: 增加获取顾问主要邮箱;增加立即收件按钮;修改商业号、邮件输入框;生成支付页面使用主要邮箱; 11 months ago
Jimmy Liow 15bbe0024f perf: 完成生成支付按钮、链接界面 11 months ago
Jimmy Liow fd0e4a2d86 feat: 增加生成付款按钮、链接界面 11 months ago
Jimmy Liow a9fa022758 feat: 完成删除图文功能 11 months ago
Jimmy Liow 9ad361e49a perf: 销毁弹出的确认窗 11 months ago
Jimmy Liow e53d7bb780 perf: 删除不用的 hook 11 months ago
Jimmy Liow 24c5a8f04a fix: 解决无法清楚编辑器文本 11 months ago
Jimmy Liow a61f8c438f Merge branch 'main' of github.com:hainatravel/global-sales 11 months ago
Jimmy Liow 3caa2f1ed8 fix: 更新邮箱配置;编辑会话显示客人邮箱 11 months ago
Lei OT d830de3c1f todo: email detail 需要补充字段 11 months ago
Lei OT fb6fc2d288 test: auth 11 months ago
Lei OT 1655854594 test: auth 11 months ago
Lei OT ad3189eb9d fix: waba 模板消息, 发送后没有推到消息窗口 11 months ago
Lei OT f5026e07e4 perf: 主动收邮件 11 months ago
Lei OT afdca2c164 perf: 邮件详情 11 months ago
Lei OT 4e30169eda # 11 months ago
Lei OT 7efe675fa4 test: auth 11 months ago
Lei OT b262d88f64 fix: 切换邮箱地址 11 months ago
Lei OT c0a830f47e test: 发送邮件不生成气泡 11 months ago
Lei OT 8216df2659 test: 删除发送邮件的 debug 11 months ago
Lei OT 2401a64fc8 test: 11 months ago
Lei OT fb1d9e7d78 feat: 主动收邮件: 结果提示 11 months ago
Lei OT 0a238044fc fix: 复制图文集粘贴成了`code` 11 months ago
Lei OT 159c5d8ad3 conf: test 11 months ago
Lei OT 5e85bb3ef8 Merge remote-tracking branch 'origin/main' 11 months ago
Lei OT caf6efcbf8 perf: editor input 属性类型 11 months ago
Lei OT 118acc6671 feat: 主动收邮件: 结果提示 11 months ago
Jimmy Liow 087e472dfa perf: 测试地址使用 144;图文保存成功后关闭;出错提示 11 months ago
Jimmy Liow 42879ed09d perf: 删除调试代码,合并 onChange 判断 11 months ago
Lei OT f9364d21df feat: 重发 11 months ago
Lei OT 24a3fd878c perf: editor input 更新 11 months ago
Lei OT c8f6fa886f Merge remote-tracking branch 'origin/main' 11 months ago
Lei OT 3884ecb5da perf: 切换邮箱 11 months ago
Jimmy Liow 0a353a2263 feat: 完成图文集新增 11 months ago
Jimmy Liow 7a0bcf8f81 feat: 使用window.getSelection().addRange(range) 方式复制 HTML;测试设置商业号身份 11 months ago
Lei OT 52b62f5b1f feat: 重发接口 11 months ago
Jimmy Liow 5903993f79 feat: 完成图文集新增 11 months ago
Lei OT bc1b120de0 fix: 请求参数 11 months ago
Lei OT b58162ee85 perf: 邮件附件: 支持多选 11 months ago
Lei OT c5ae7066f6 perf: 请求,统一处理errcode 11 months ago
Lei OT 09125b32ac feat: 主动收邮件 11 months ago
Lei OT c52db468d3 feat: 重发邮件 11 months ago
Jimmy Liow eac43e49c0 feat: 使用window.getSelection().addRange(range) 方式复制 HTML;测试设置商业号身份 11 months ago
Lei OT 332e36baac feat: 读取邮件账户的mat_sn. 使用关联订单的账户 11 months ago
Lei OT 090c6c3927 # todo/review/fix: 11 months ago
Lei OT 2fc8879bcd feat: 读取登录账户的配置: whatsAppBusiness. 获取次商业号的模板 11 months ago
Lei OT d5e4c7ff99 feat: 邮箱地址切换; 默认值 11 months ago
Lei OT 8eab29e879 fix: 创建会话 11 months ago
Lei OT 1b7e4ff0ac Merge remote-tracking branch 'origin/main' 11 months ago
Jimmy Liow 42bdec064d feat: 增加图文集保存、新增方法 11 months ago
Lei OT 2e5eb6bec4 fix: 创建会话, 没有user ID 11 months ago
Lei OT 2c1fd18770 1.1.5 11 months ago
Lei OT 1ef696cb19 fix: 创建会话, 没有user ID 11 months ago
Lei OT c7a4da7485 fix: WABA 消息类型缺少内容对象 11 months ago
Lei OT 4c44b8fad3 Merge remote-tracking branch 'origin/main' 11 months ago
Lei OT 1246657f24 todo: 邮件重发 11 months ago
Lei OT 98408f246a feat: 邮件: +图文集功能 11 months ago
Jimmy Liow 5d6715bd29 fix: 使用 dangerouslySetInnerHTML 显示 HTML 11 months ago
Lei OT f1f3b9039f Merge remote-tracking branch 'origin/main' 11 months ago
Lei OT 70890dfb43 feat: 邮件窗口: 保留会话ID; 11 months ago
Jimmy Liow 128fb346b3 feat: 根据所有者、类型获取图文集和内容。 11 months ago
Lei OT 5f7eb960bf Merge remote-tracking branch 'origin/main' 11 months ago
Lei OT c472fd6f62 test: dev config 11 months ago
Lei OT d1c1b7df6f feat: 获取邮件详情, 查看与回复 11 months ago
Lei OT b682202d0c feat: 解析渲染: email.updated; email.inbound.received 11 months ago
Lei OT 0aef1342a9 feat: email dropdown 11 months ago
Lei OT 921cb2e7b9 feat: 会话列表搜索和分页 11 months ago
Lei OT 0a28fa4457 perf: 解析消息 11 months ago
Lei OT 7411763eab todo: 解析Email message对象 11 months ago
Lei OT 00f75f8308 todo: 会话列表: 筛选参数; 分页 11 months ago
Lei OT 65d0943cfd todo: 重发 更新状态failed为accepted 11 months ago
Jimmy Liow bfe9c79bd9 feat: 获取图文集所有者、类型数据;调整 Lexical Editor z-index 在 Drawer 下使用 11 months ago
Jimmy Liow 55c9a18699 feat: 顾问邮箱加上 mat_sn;图文集使用 Drawer 展示; 11 months ago
Jimmy Liow bb96b04cd7 feat: 顾问邮箱列表增加默认、备用属性 11 months ago
Jimmy Liow 85c089cf70 feat: 增加调试登录功能;调整商业号、个人 WA 设置 11 months ago
Lei OT 76fc8f936d test: region code to flag 11 months ago
Lei OT 43d2dec880 fix: 最近消息: 未返回引用context 对象 11 months ago
Lei OT bb4a9e5215 conf: 调整格式 11 months ago
Lei OT eb8d59b2e8 perf: 当前会话: 使用会话ID, 11 months ago
Lei OT ff9f3e9118 默认显示渠道waba 11 months ago
Lei OT 27208be5d4 todo: Email消息, 没有发送时间 11 months ago
Lei OT c233a36f7f feat: 会话列表: 最近消息 11 months ago
Lei OT 2d48792902 feat: 解析Email气泡; 获取详情 11 months ago
Jimmy Liow 2383b1f3af Merge commit 'b20ee4c46be869dc41345534659f9456ebdcc4af' 11 months ago
Jimmy Liow 164d09fc6d 1.1.4 11 months ago
Jimmy Liow b20ee4c46b feat: 增加钉钉authcode调试页面 11 months ago
Jimmy Liow e37a454fcf feat: 图文集增加操作按钮 11 months ago
Lei OT 1cc49126ee feat: 保存发送邮件 11 months ago
Lei OT 42d3247a92 perf: 渠道切换的文字 11 months ago
Lei OT 7a4a8df4a0 feat: 解析Email气泡; 获取详情; 回复 11 months ago
Jimmy Liow 5ec4720c1e fix: 解决 Ant Modal 使用 Lexical Editor 11 months ago
Jimmy Liow 378da335d0 fix:解决 EditorInput 默认显示 [object] 11 months ago
Lei OT fbbe573768 test: Email发送, 气泡 # 文件名调整 11 months ago
Lei OT 4668d0782c test: 邮件详情 11 months ago
Jimmy Liow a0b30071c0 feat: 封装 LexicalEditorInput 11 months ago
Jimmy Liow 78266378ff feat: DefaultValuePlugin 默认值只用初始化一次;OnChangePlugin 可以忽略选择文本更新 11 months ago
Lei OT 66806e57ec test: 保存邮件发送 11 months ago
Lei OT 4e391b5c81 feat: 打开邮件详情 11 months ago
Lei OT d9c3721c2d test: API 地址 11 months ago
Lei OT b3f50ecb90 Merge remote-tracking branch 'origin/main'
# Conflicts:
#	src/components/LexicalEditor/Index.jsx
11 months ago
Lei OT ea03f28794 修改字段名字 11 months ago
Lei OT 7879cf638d feat: 筛选会话 11 months ago
Jimmy Liow cd23011d10 feat: 增加 EditorRefPlugin;使用 Lexical Editor 编辑图文 11 months ago
Lei OT da74174ebf feat: 会话设置标签 11 months ago
Lei OT 3a56ed87c7 feat: 添加/编辑会话 11 months ago
Lei OT 8cfd8ccc1a feat: 会话列表: 渠道ICON; 获取顾问的标签 11 months ago
Lei OT 2aedb1b6c0 feat: Image Node; Resizer 11 months ago
Lei OT 30b9814181 Merge remote-tracking branch 'origin/main' 11 months ago
Lei OT 484ec25dae style: font 11 months ago
Jimmy Liow e4d1508047 Merge branch 'main' of github.com:hainatravel/global-sales 11 months ago
Jimmy Liow 4713d8bb95 test:调整图文集管理路由;增加类别-详细样式 11 months ago
Lei OT 14b4d53ae0 Merge remote-tracking branch 'origin/main' 11 months ago
Lei OT 5b575ee08e feat: 显示WhatsApp; WABA仅在配置页切换 todo: 图文集等功能 11 months ago
Jimmy Liow affd9c603c test: 开发图文集界面 12 months ago
Lei OT 217a8fb884 style: 移动端 12 months ago
Lei OT 8d80e794bd test: Email
# Conflicts:
#	package.json
#	src/utils/pagespy.js
#	src/views/MobileApp.jsx
12 months ago
Jimmy Liow be4e8f7a0a feat: 开发模式提示设置 local storage 12 months ago
Jimmy Liow 273c655c88 perf: 删除无效引用 12 months ago
Jimmy Liow 3a6fc53d19 feat: 个人设置增加商业号身份、邮箱地址、个人 WhatsApp 12 months ago
Jimmy Liow e5a48f9ac2 feat: 使用 FloatButton 上传 PageSpy 日志 12 months ago
Jimmy Liow 7c3572bd3f feat: 使用 state 区分验证方式 12 months ago
Jimmy Liow df69497e08 feat: 获取钉钉免登授权登录系统 1 year ago
Jimmy Liow 307dc32d37 feat: 更新 React, Router, Ant Design 版本;判断是否是钉钉环境 1 year ago
Jimmy Liow ace4b1c57a feat: 增加 dingtalk-jsapi 1 year ago
Jimmy Liow 0d39573c9d perf: 删除不用的销售管理界面 1 year ago
Jimmy Liow 417a4a6840 perf: 增加 cmd 集合;
doc: 更新界面原型
1 year ago
Jimmy Liow e960274860 perf: 开发模式不加载 PageSpy,优化 main.js 代码 1 year ago
Jimmy Liow e908b5cfe0 perf: 增加 Prettier 及配置 1 year ago
Jimmy Liow 342bdb176e peft: 删除无用构建命令;更新邮件服务端架构 1 year ago
Jimmy Liow 033325dcac perf: 更新系统架构 1 year ago
Jimmy Liow a1233d1a1c 更新界面原型 1 year ago
Jimmy Liow 2aeee9f395 细化界面原型 1 year ago
Jimmy Liow f596de0bba Merge branch 'main' of github.com:hainatravel/global-sales 1 year ago
Jimmy Liow d3b4cb6ded 完成2.0界面原型初稿 1 year ago
Lei OT c613522b3c 1.1.3 1 year ago
Lei OT 60bf6bd976 perf: 文件附加信息完全显示 1 year ago
Lei OT 133d4a4393 1.1.2 1 year ago
Lei OT 4e325790bc perf: 新建会话不自动关联订单
老客人推荐WA号码不需要关联订单
1 year ago
Jimmy Liow 61b35cebc9 1.1.1 1 year ago
Jimmy Liow e5b76b15cb feat: 增加打包命令 1 year ago
Lei OT 2c8795ed3e perf: 调整 WA 模板消息位置 1 year ago
Jimmy Liow aa5e6b3308 1.1.0 1 year ago
Jimmy Liow b79db4e269 fix: 顾问无法绑定会话和订单;登陆后替换路由 1 year ago
Jimmy Liow aab88427e9 Merge branch 'main' of github.com:hainatravel/global-sales 1 year ago
YCC 7253c03960 更新语音通话回调地址 1 year ago
Jimmy Liow c9e78a4551 Merge branch 'main' of github.com:hainatravel/global-sales 1 year ago
Lei OT c3274bd31e 页面报错时, 上传日志 1 year ago
Lei OT 21d03528f5 fix(history): opisn 为空 1 year ago
Jimmy Liow b746f903c1 1.0.32 1 year ago
Lei OT 6f62aaf5b3 fix: 上传图片, 后缀名小写; 解决oss查看image/jpeg时mime type识别为application/octet-stream 1 year ago
Lei OT 201c8f61fa Merge remote-tracking branch 'origin/main' 1 year ago
Lei OT 7f50aeb0d3 fix: 从store读取当前会话信息 1 year ago
YCC d51b1283f4 Merge branch 'main' of github.com:hainatravel/global-sales 1 year ago
YCC acb135f5f1 vonage的服务端程序,独立运行 1 year ago
Jimmy Liow 8d7a983c40 1.0.31 1 year ago
Jimmy Liow 1fd2a13a40 Merge branch 'main' of github.com:hainatravel/global-sales 1 year ago
YCC 01b8c2770e 用于输入电话号码的控件 1 year ago
YCC a1ae7a1615 Merge branch 'main' of github.com:hainatravel/global-sales 1 year ago
YCC 6ecfee2415 语音通话功能 1 year ago
Lei OT ec2cfbbf6c perf: 修改发送失败提示. FORBIDDEN 1 year ago
Lei OT 0a658f5b3b fix: 语音 格式 属性 1 year ago
Jimmy Liow 68bc911848 1.0.30 1 year ago
Lei OT 3b27d9afcb fix: 语音 格式 mime_type 1 year ago
Lei OT c2a2270e8f fix(history): opisn 为空 1 year ago
Jimmy Liow 1ade07095f 1.0.29 1 year ago
Lei OT 88cedb3a8c feat: 订单信息: 号码点击打开新建会话; 1 year ago
Lei OT 015c31f3da perf: 图片加载失败的提示 1 year ago
Lei OT 5185b0ae73 perf: 修改 INTERNAL_SERVER_ERROR 的提示 1 year ago
Lei OT ae99af8b8f 页面报错时, 上传日志 1 year ago
Lei OT cf64a7c406 conf: workbox动态缓存资源 1 year ago
Lei OT eeb8c8afae perf: 模板: 头部参数 1 year ago
Lei OT 4dcb2cee28 perf: WhatsApp号码规则: UK 1 year ago
Lei OT dc0c03cb12 perf: 修改号码错误的提示 1 year ago
Lei OT 2263d16c42 conf: workbox动态缓存资源 1 year ago
Jimmy Liow b52fe4d094 1.0.28 1 year ago
Jimmy Liow 0d95b7041d Merge branch 'main' of github.com:hainatravel/global-sales 1 year ago
Lei OT ff86837d6c Merge remote-tracking branch 'origin/main' 1 year ago
Jimmy Liow 55d20f59f9 1.0.27 1 year ago
Jimmy Liow cc378a454e 解决 PageSpy 登陆后无法初始化 1 year ago
Lei OT 25b2be45bd 会话过期提示 1 year ago
Jimmy Liow aa19f3ae21 1.0.26 1 year ago
Lei OT 6be3d9c05e test: 页面不管理会话过期时间, 日志查看状态 1 year ago
Lei OT 27a0b79fbb Merge remote-tracking branch 'origin/main' 1 year ago
Lei OT eb5b2a06de test: 新消息: 更新会话列表: 修改判断; console 1 year ago
Jimmy Liow d0032fde00 1.0.25 1 year ago
Jimmy Liow 25112a255a Merge branch 'main' of github.com:hainatravel/global-sales 1 year ago
Lei OT ede92014c1 test: 新消息: 更新会话列表: 修改判断; console 1 year ago
Jimmy Liow bda3fc08f4 1.0.24 1 year ago
Lei OT b381fdce6b test: 新消息: 更新会话时间: 修改判断; console 1 year ago
Lei OT 313d3406dd 会话合并: 仅转移发送的消息到接收会话 1 year ago
Lei OT 395715f68f perf: 巴西号码规则: 删除国家地区码后面的9 1 year ago

@ -7,7 +7,7 @@ module.exports = {
'plugin:react/jsx-runtime',
'plugin:react-hooks/recommended',
],
ignorePatterns: ['dist', '.eslintrc.cjs'],
ignorePatterns: ['node_modules/*', 'dist', '.eslintrc.cjs'],
parserOptions: { ecmaVersion: 'latest', sourceType: 'module' },
settings: { react: { version: '18.2' } },
plugins: ['react-refresh'],

13
.gitignore vendored

@ -13,7 +13,9 @@ dist-ssr
*.local
distTest
dev-dist
tmp
tmp
schema*
.gitkeep
# Editor directories and files
.vscode/*
@ -28,3 +30,12 @@ tmp
/package-lock.json
**/LexicalEditor0
*.zip
.env.*
vonage-client*
**/test
*.bak

@ -0,0 +1,18 @@
{
"singleQuote": true,
"trailingComma": "all",
"printWidth": 200,
"tabWidth": 2,
"useTabs": false,
"semi": false,
"quoteProps": "as-needed",
"jsxSingleQuote": true,
"bracketSpacing": true,
"jsxBracketSameLine": true,
"singleAttributePerLine": false,
"arrowParens": "always",
"requirePragma": false,
"insertPragma": false,
"proseWrap": "preserve",
"htmlWhitespaceSensitivity": "ignore"
}

@ -1,21 +1,46 @@
# Global sales
聊天式销售平台
销售平台通过邮件、WhatsApp Business Account、WhatsApp 和客人沟通。
## 开发设置
所有命令都在 cmd 目录,
1. 安装组件npm install
2. 运行开发环境npm run dev 或者 start.bat
3. 打包代码npm run build 或者 build.bat
2. 运行开发环境dev.bat
3. 打包代码build.bat
## 版本设置
遵循 [Semantic Versioning 2.0.0](http://semver.org/lang/zh-CN/) 语义化版本规范。
## 更新版本
修订版本号:日常 bugfix 更新。(如果有紧急的 bugfix则任何时候都可发布
次版本号:有新特性的向下兼容的版本。
主版本号:含有破坏性更新和新特性。
v1.0.0 -> v1.0.1
npm version patch
npm version [<newversion> | major | minor | patch | premajor | preminor | prepatch | prerelease | from-git]
v1.0.0 -> v1.1.0
npm version minor
npm version preminor --preid alpha --no-git-tag-version
npm version preminor --preid beta --no-git-tag-version
1.2.0 -> 1.3.0-beta.0
npm version premajor --no-git-tag-version
1.0.0 -> 2.0.0-0
npm version prerelease --no-git-tag-version
2.0.0-0 -> 2.0.0-1 -> 2.0.0-2 ..n -> 2.0.0-n
npm version patch --no-git-tag-version
2.0.0-n -> 2.0.0
## 相关文档
[聊天式销售平台需求文档](https://www.kdocs.cn/l/calaUjgmCmDA?from=docs&reqtype=kdocs&startTime=1703645330177&createDirect=true&newFile=true)
## vonage语音视频
安装模块 npm i @vonage/client-sdk
## 本机测试账号
GLOBAL_SALES_LOGIN_USER
{"userId":"383","userIdStr":"383,609","emailList":[{"opi_sn":383,"mat_sn":760,"email":"lyj@asiahighlights.com","default":false,"backup":false},{"opi_sn":383,"mat_sn":759,"email":"lyj@chinahighlights.com","default":false,"backup":false},{"opi_sn":383,"mat_sn":758,"email":"lyj@hainatravel.com","default":false,"backup":false},{"opi_sn":383,"mat_sn":761,"email":"lyj@chinahighlights.net","default":true,"backup":false}],"username":"廖一军","avatarUrl":"https://static-legacy.dingtalk.com/media/lALPBDDrhXr716HNAoDNAoA_640_640.png","mobile":"+86-18777396951","email":"lyj@hainatravel.com","whatsAppBusiness":"8617458471254","openId":"iioljiPmZ4RPoOYpkFiSn7IKAiEiE","accountList":[{"OPI_SN":383,"OPI_Code":"LYJ","OPI_NameCN":"廖一军","OPI_DEI_SN":7,"OPI_NameEN":"Jimmy Liow"},{"OPI_SN":609,"OPI_Code":"LYJAH","OPI_NameCN":"廖一军ah","OPI_DEI_SN":28,"OPI_NameEN":"Jimmy Liow"}]}

@ -0,0 +1 @@
npm run build

@ -0,0 +1 @@
npm version patch

@ -0,0 +1 @@
npm version prerelease

@ -0,0 +1,83 @@
## 发送template 消息
### 模板原文
```json
{
"wabaId": "190290134156880",
"name": "order_updated_specialist_assigned_sharon",
"language": "en",
"messageSendTtlSeconds": -1,
"components": [
{
"type": "BODY",
"text": "Hi {{customer_name}}, this is {{your_name1}} your trip advisor. \nHow are you? {{free_style}} \nKindest regards, {{your_name2}}. ",
"example": {
"body_text": [
[
"Mike",
"Coco",
"I'm following up on your itinerary",
"Coco2"
]
]
}
}
],
"category": "UTILITY",
"status": "APPROVED",
"qualityRating": "UNKNOWN",
"reason": "NONE",
"createTime": "2024-12-11T08:31:11.290Z",
"updateTime": "2024-12-11T08:31:34.610Z",
"statusUpdateEvent": "APPROVED"
}
```
### 发送模板消息, 数据结构
```json
{
"action": "message", // 固定值
"actionId": "190.3c8322de-68df-4f9e-be8e-d92e7a13b7d7", // .uuid()
"renderId": "190.3c8322de-68df-4f9e-be8e-d92e7a13b7d7", // 忽略
"externalId": 190, // 留空
"to": "8613557032060",
"from": "+8617607730395",
"msgtype": "template", // 固定值
"msgcontent": {
"name": "order_updated_specialist_assigned_sharon", // 模板名称. 从原文
"language": {
"code": "en" // 语言. 从原文
},
"components": [ // 没有参数的组件, 建议不传. 组件顺序也会报错
{
"type": "body",
"parameters": [ // 模板参数. 按 当前 `type` 中的参数顺序排列
{
"type": "text",
"text": "test OT 22" // 参数值: 不能换行, 连续空格<4
},
{
"type": "text",
"text": "yoyo"
},
{
"type": "text",
"text": "111"
},
{
"type": "text",
"text": "yoyo"
}
],
"text": "Hi test OT 22, this is yoyo your trip advisor. \nHow are you? 111 \nKindest regards, yoyo. " // 拼接一个完整内容
}
]
},
"opi_sn": "404", // 发送人 ID
"coli_sn": 1082591,
"conversationid": 190 // 忽略
}
```

Binary file not shown.

@ -1,3 +1,10 @@
## 查找出掉线的 WhatsApp
select *
from whatsapp_individual.connections
where status IN ('offline')
and wa_id not in ('8618777396951', '8613557032060','8613317835586')
and wa_id <> 'null'
//
SELECT group_concat(opi_sn separator ',') as 'sn_list' FROM (
SELECT
@ -116,3 +123,60 @@ WHERE tos = '5534999923993' AND opi_sn = 587;
* end
* ---------------------------------------------------------
*/
/**
WhatsApp
*/
select * from whatsapp_user
##where wau_opi_sn in (252, 261,264,265,330,360,376,413,421,453,605,620) ## 国际部
where wau_opi_sn in (495, 143, 370, 114, 513, 514, 517, 522, 550, 587,354, 414, 599, 606, 639, 648, 654, 662, 674, 676,391, 451, 476, 501, 512, 525, 528, 585, 586, 644) ## GH
-- 查找每个服务器在线的 WA 数量
select connect_name, count(*)
from whatsapp_individual.connections
where status IN ('open')
group by connect_name
set SESSION group_concat_max_len=4294967295;
-- 查找已经配置 WAI 服务的顾问
select group_concat(wau_whatsapp separator ''',''') as 'sn_list'
from sale_system.whatsapp_user
where wau_wai_server is not null
## 查找在线的 WhatsApp
SELECT group_concat(sesson_id separator ''',''') as 'sesson_list'
FROM whatsapp_individual.connections
where status = 'open'
-- 查找掉线的顾问
select group_concat(sesson_id separator ''',''') as 'sesson_list' from whatsapp_individual.connections
where status IN ('offline')
and wa_id not in ('8618777396951', '8613557032060','8613317835586')
## 查找 GH 没有扫码登录的顾问
select group_concat(wau_opi_sn separator ',') as 'sn_list'
from whatsapp_user
where wau_whatsapp not in ('8613317835586','8617607732272','8613978392676','8618378304803','8617607730629','8619107833371','8619107835971','8617607731491','8615080129281','8617607737720','8618777396951','8618078444860','8615778462307','8617774702925','8615078398450','8619178340224','8617607731153','8617607735120','8617607737646','8618877388203','8615778493040','8613617733956','8618290167273','8617776515283','8617607736381','8613557032060','8613667839691','8618378388403','8613635132972','8617607734598','8617607732512','8615878340720')
and wau_opi_sn in (495, 143, 370, 114, 513, 514, 517, 522, 550, 587,354, 414, 599, 606, 639, 648, 654, 662, 674, 676,391, 451, 476, 501, 512, 525, 528, 585, 586, 644)
-- 查找使用 WhatsApp 顾问信息
SELECT
OPI_SN, OPI_Code,OPI_Name,OPI_DEI_SN,OPI_FirstName,OPI_RealName, DeleteFlag
FROM
dbo.OperatorInfo WHERE
OPI_SN in (143,476,528,391)
--OPI_SN in (495, 143, 370, 114, 513, 514, 517, 522, 550, 587)
SELECT OPI_RealName + '(' + CAST(OPI_SN AS VARCHAR(100)) + ')',OPI_SN
FROM
dbo.OperatorInfo
where
--DeleteFlag = 0 and
OPI_SN in (79,85,114,119,135,143,155,162,178,210,216,222,225,252,261,264,265,273,293,296,311,330,343,347,348,354,360,370,376,387,391,412,413,414,421,441,444,451,453,456,466,468,476,495,497,501,509,512,513,514,517,519,522,525,527,528,539,550,573,585,586,587,592,599,600,605,606,611,617,620,639,644,648,654,656,659,662,663,674,676,690,691)
and OPI_RealName in ('兰芬','孙俊垚','王继伟','曾君','潘宏宇','郑美珍','张丽娟','张倩倩','赵泽菲','王影','陆力影','吕燕珍','何秋云','沈慧香')

File diff suppressed because it is too large Load Diff

@ -1,43 +1,46 @@
{
"name": "global-sales",
"private": true,
"version": "1.0.23",
"version": "1.5.4",
"type": "module",
"scripts": {
"dev": "vite",
"build": "vite build",
"publish": "npm version patch && npm run build",
"lint": "eslint . --ext js,jsx --report-unused-disable-directives --max-warnings 0",
"preview": "vite preview"
},
"dependencies": {
"antd": "^5.14.0",
"countries-and-timezones": "^3.6.0",
"crypto-js": "^4.2.0",
"dayjs": "^1.11.10",
"emoji-picker-react": "^4.8.0",
"react": "^18.2.0",
"react-chat-elements": "^12.0.11",
"react-dom": "^18.2.0",
"react-router-dom": "^6.21.1",
"@dckj/react-better-modal": "^0.1.2",
"@lexical/react": "^0.20.0",
"@vonage/client-sdk": "^2.0.0",
"antd": "^5.25.2",
"dayjs": "^1.11.13",
"dingtalk-jsapi": "^3.0.41",
"emoji-picker-react": "^4.12.0",
"lexical": "^0.20.0",
"react": "^18.3.1",
"react-chat-elements": "^12.0.17",
"react-dom": "^18.3.1",
"react-router-dom": "^6.30.1",
"rxjs": "^7.8.1",
"uuid": "^9.0.1",
"vite-plugin-pwa": "^0.19.6",
"zustand": "^4.5.0"
"zustand": "^4.5.7"
},
"devDependencies": {
"@types/react": "^18.2.15",
"@types/react-dom": "^18.2.7",
"@vitejs/plugin-react": "^4.2.1",
"autoprefixer": "^10.4.17",
"@types/react": "^18.3.12",
"@types/react-dom": "^18.3.1",
"@vitejs/plugin-react": "^4.3.3",
"autoprefixer": "^10.4.20",
"eslint": "^8.45.0",
"eslint-plugin-react": "^7.32.2",
"eslint-plugin-react": "^7.37.2",
"eslint-plugin-react-hooks": "^4.6.0",
"eslint-plugin-react-refresh": "^0.4.3",
"postcss": "^8.4.33",
"tailwindcss": "^3.4.1",
"eslint-plugin-react-refresh": "^0.4.14",
"postcss": "^8.4.49",
"tailwindcss": "^3.4.15",
"vite": "^4.5.1",
"vite-plugin-css-modules": "^0.0.1",
"vite-plugin-pwa": "^0.21.0",
"vite-plugin-svgr": "^4.3.0",
"vite-plugin-windicss": "^1.9.3",
"windicss": "^3.5.6"
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.8 KiB

After

Width:  |  Height:  |  Size: 8.5 KiB

@ -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="1721878224733" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5115" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M926.47619 355.644952V780.190476a73.142857 73.142857 0 0 1-73.142857 73.142857H170.666667a73.142857 73.142857 0 0 1-73.142857-73.142857V355.644952l304.103619 257.828572a170.666667 170.666667 0 0 0 220.745142 0L926.47619 355.644952zM853.333333 170.666667a74.044952 74.044952 0 0 1 26.087619 4.778666 72.704 72.704 0 0 1 30.622477 22.186667 73.508571 73.508571 0 0 1 10.678857 17.67619c3.169524 7.509333 5.12 15.652571 5.607619 24.210286L926.47619 243.809524v24.380952L559.469714 581.241905a73.142857 73.142857 0 0 1-91.306666 2.901333l-3.632762-2.925714L97.52381 268.190476v-24.380952a72.899048 72.899048 0 0 1 40.155428-65.292191A72.97219 72.97219 0 0 1 170.666667 170.666667h682.666666z" p-id="5116" fill="#7162AD"></path></svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

@ -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="1721877281911" class="icon" viewBox="0 0 1036 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2369" xmlns:xlink="http://www.w3.org/1999/xlink" width="202.34375" height="200"><path d="M759.466667 827.733333H98.133333c-55.466667 0-98.133333-42.666667-98.133333-98.133333V328.533333c0-55.466667 42.666667-98.133333 98.133333-98.133333h827.733334c55.466667 0 98.133333 42.666667 98.133333 98.133333v234.666667c0 12.8-8.533333 21.333333-21.333333 21.333333s-21.333333-8.533333-21.333334-21.333333V328.533333c0-29.866667-25.6-55.466667-55.466666-55.466666H98.133333C68.266667 273.066667 42.666667 298.666667 42.666667 328.533333V725.333333c0 29.866667 25.6 55.466667 55.466666 55.466667h661.333334c12.8 0 21.333333 8.533333 21.333333 21.333333s-8.533333 25.6-21.333333 25.6z" fill="#7162AD" p-id="2370"></path><path d="M917.333333 827.733333H823.466667c-12.8 0-21.333333-8.533333-21.333334-21.333333s8.533333-21.333333 21.333334-21.333333h93.866666c34.133333 0 64-29.866667 64-64v-85.333334c0-12.8 8.533333-21.333333 21.333334-21.333333s21.333333 8.533333 21.333333 21.333333v85.333334c0 55.466667-46.933333 106.666667-106.666667 106.666666z" fill="#A495FC" p-id="2371"></path><path d="M512 554.666667c-12.8 0-29.866667-4.266667-42.666667-8.533334L17.066667 358.4c-12.8-4.266667-17.066667-17.066667-12.8-29.866667 4.266667-12.8 17.066667-17.066667 29.866666-12.8l456.533334 187.733334c17.066667 8.533333 34.133333 8.533333 51.2 0l448-187.733334c12.8-4.266667 21.333333 0 29.866666 12.8 4.266667 12.8 0 21.333333-12.8 29.866667l-448 187.733333c-21.333333 8.533333-34.133333 8.533333-46.933333 8.533334z" fill="#7162AD" p-id="2372"></path></svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

@ -0,0 +1,5 @@
OpenMoji
https://openmoji.org
Licensed under Attribution-ShareAlike 4.0 International
https://creativecommons.org/licenses/by-sa/4.0/

@ -0,0 +1,5 @@
Bootstrap Icons
https://icons.getbootstrap.com
Licensed under MIT license
https://github.com/twbs/icons/blob/main/LICENSE.md

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-arrow-clockwise" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M8 3a5 5 0 1 0 4.546 2.914.5.5 0 0 1 .908-.417A6 6 0 1 1 8 2v1z"/>
<path d="M8 4.466V.534a.25.25 0 0 1 .41-.192l2.36 1.966c.12.1.12.284 0 .384L8.41 4.658A.25.25 0 0 1 8 4.466z"/>
</svg>

After

Width:  |  Height:  |  Size: 352 B

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-arrow-counterclockwise" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M8 3a5 5 0 1 1-4.546 2.914.5.5 0 0 0-.908-.417A6 6 0 1 0 8 2v1z"/>
<path d="M8 4.466V.534a.25.25 0 0 0-.41-.192L5.23 2.308a.25.25 0 0 0 0 .384l2.36 1.966A.25.25 0 0 0 8 4.466z"/>
</svg>

After

Width:  |  Height:  |  Size: 359 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M8 19.9967V14.9967H10V19.9967H19V12.9967H5V19.9967H8ZM4 10.9967H20V7.9967H14V3.9967H10V7.9967H4V10.9967ZM3 20.9967V12.9967H2V6.9967C2 6.44442 2.44772 5.9967 3 5.9967H8V2.9967C8 2.44442 8.44772 1.9967 9 1.9967H15C15.5523 1.9967 16 2.44442 16 2.9967V5.9967H21C21.5523 5.9967 22 6.44442 22 6.9967V12.9967H21V20.9967C21 21.549 20.5523 21.9967 20 21.9967H4C3.44772 21.9967 3 21.549 3 20.9967Z"></path></svg>

After

Width:  |  Height:  |  Size: 491 B

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-chat-square-quote" viewBox="0 0 16 16">
<path d="M14 1a1 1 0 0 1 1 1v8a1 1 0 0 1-1 1h-2.5a2 2 0 0 0-1.6.8L8 14.333 6.1 11.8a2 2 0 0 0-1.6-.8H2a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1h12zM2 0a2 2 0 0 0-2 2v8a2 2 0 0 0 2 2h2.5a1 1 0 0 1 .8.4l1.9 2.533a1 1 0 0 0 1.6 0l1.9-2.533a1 1 0 0 1 .8-.4H14a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2z"/>
<path d="M7.066 4.76A1.665 1.665 0 0 0 4 5.668a1.667 1.667 0 0 0 2.561 1.406c-.131.389-.375.804-.777 1.22a.417.417 0 1 0 .6.58c1.486-1.54 1.293-3.214.682-4.112zm4 0A1.665 1.665 0 0 0 8 5.668a1.667 1.667 0 0 0 2.561 1.406c-.131.389-.375.804-.777 1.22a.417.417 0 1 0 .6.58c1.486-1.54 1.293-3.214.682-4.112z"/>
</svg>

After

Width:  |  Height:  |  Size: 735 B

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-chevron-down" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z"/>
</svg>

After

Width:  |  Height:  |  Size: 290 B

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-code" viewBox="0 0 16 16">
<path d="M5.854 4.854a.5.5 0 1 0-.708-.708l-3.5 3.5a.5.5 0 0 0 0 .708l3.5 3.5a.5.5 0 0 0 .708-.708L2.707 8l3.147-3.146zm4.292 0a.5.5 0 0 1 .708-.708l3.5 3.5a.5.5 0 0 1 0 .708l-3.5 3.5a.5.5 0 0 1-.708-.708L13.293 8l-3.147-3.146z"/>
</svg>

After

Width:  |  Height:  |  Size: 362 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M8.58564 8.85449L3.63589 13.8042L8.83021 18.9985L9.99985 18.9978V18.9966H11.1714L14.9496 15.2184L8.58564 8.85449ZM9.99985 7.44027L16.3638 13.8042L19.1922 10.9758L12.8283 4.61185L9.99985 7.44027ZM13.9999 18.9966H20.9999V20.9966H11.9999L8.00229 20.9991L1.51457 14.5113C1.12405 14.1208 1.12405 13.4877 1.51457 13.0971L12.1212 2.49053C12.5117 2.1 13.1449 2.1 13.5354 2.49053L21.3136 10.2687C21.7041 10.6592 21.7041 11.2924 21.3136 11.6829L13.9999 18.9966Z"></path></svg>

After

Width:  |  Height:  |  Size: 555 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-file-break"><path d="M0 10.5a.5.5 0 0 1 .5-.5h15a.5.5 0 0 1 0 1H.5a.5.5 0 0 1-.5-.5zM12 0H4a2 2 0 0 0-2 2v7h1V2a1 1 0 0 1 1-1h8a1 1 0 0 1 1 1v7h1V2a2 2 0 0 0-2-2zm2 12h-1v2a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1v-2H2v2a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2v-2z"/></svg>

After

Width:  |  Height:  |  Size: 348 B

@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-journal-code" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M8.646 5.646a.5.5 0 0 1 .708 0l2 2a.5.5 0 0 1 0 .708l-2 2a.5.5 0 0 1-.708-.708L10.293 8 8.646 6.354a.5.5 0 0 1 0-.708zm-1.292 0a.5.5 0 0 0-.708 0l-2 2a.5.5 0 0 0 0 .708l2 2a.5.5 0 0 0 .708-.708L5.707 8l1.647-1.646a.5.5 0 0 0 0-.708z"/>
<path d="M3 0h10a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2v-1h1v1a1 1 0 0 0 1 1h10a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1H3a1 1 0 0 0-1 1v1H1V2a2 2 0 0 1 2-2z"/>
<path d="M1 5v-.5a.5.5 0 0 1 1 0V5h.5a.5.5 0 0 1 0 1h-2a.5.5 0 0 1 0-1H1zm0 3v-.5a.5.5 0 0 1 1 0V8h.5a.5.5 0 0 1 0 1h-2a.5.5 0 0 1 0-1H1zm0 3v-.5a.5.5 0 0 1 1 0v.5h.5a.5.5 0 0 1 0 1h-2a.5.5 0 0 1 0-1H1z"/>
</svg>

After

Width:  |  Height:  |  Size: 772 B

@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-journal-text" viewBox="0 0 16 16">
<path d="M5 10.5a.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 0 1h-2a.5.5 0 0 1-.5-.5zm0-2a.5.5 0 0 1 .5-.5h5a.5.5 0 0 1 0 1h-5a.5.5 0 0 1-.5-.5zm0-2a.5.5 0 0 1 .5-.5h5a.5.5 0 0 1 0 1h-5a.5.5 0 0 1-.5-.5zm0-2a.5.5 0 0 1 .5-.5h5a.5.5 0 0 1 0 1h-5a.5.5 0 0 1-.5-.5z"/>
<path d="M3 0h10a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2v-1h1v1a1 1 0 0 0 1 1h10a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1H3a1 1 0 0 0-1 1v1H1V2a2 2 0 0 1 2-2z"/>
<path d="M1 5v-.5a.5.5 0 0 1 1 0V5h.5a.5.5 0 0 1 0 1h-2a.5.5 0 0 1 0-1H1zm0 3v-.5a.5.5 0 0 1 1 0V8h.5a.5.5 0 0 1 0 1h-2a.5.5 0 0 1 0-1H1zm0 3v-.5a.5.5 0 0 1 1 0v.5h.5a.5.5 0 0 1 0 1h-2a.5.5 0 0 1 0-1H1z"/>
</svg>

After

Width:  |  Height:  |  Size: 759 B

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-justify" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2 12.5a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5zm0-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5zm0-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5zm0-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5z"/>
</svg>

After

Width:  |  Height:  |  Size: 414 B

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-link" viewBox="0 0 16 16">
<path d="M6.354 5.5H4a3 3 0 0 0 0 6h3a3 3 0 0 0 2.83-4H9c-.086 0-.17.01-.25.031A2 2 0 0 1 7 10.5H4a2 2 0 1 1 0-4h1.535c.218-.376.495-.714.82-1z"/>
<path d="M9 5.5a3 3 0 0 0-2.83 4h1.098A2 2 0 0 1 9 6.5h3a2 2 0 1 1 0 4h-1.535a4.02 4.02 0 0 1-.82 1H12a3 3 0 1 0 0-6H9z"/>
</svg>

After

Width:  |  Height:  |  Size: 403 B

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-list-ol" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M5 11.5a.5.5 0 0 1 .5-.5h9a.5.5 0 0 1 0 1h-9a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h9a.5.5 0 0 1 0 1h-9a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h9a.5.5 0 0 1 0 1h-9a.5.5 0 0 1-.5-.5z"/>
<path d="M1.713 11.865v-.474H2c.217 0 .363-.137.363-.317 0-.185-.158-.31-.361-.31-.223 0-.367.152-.373.31h-.59c.016-.467.373-.787.986-.787.588-.002.954.291.957.703a.595.595 0 0 1-.492.594v.033a.615.615 0 0 1 .569.631c.003.533-.502.8-1.051.8-.656 0-1-.37-1.008-.794h.582c.008.178.186.306.422.309.254 0 .424-.145.422-.35-.002-.195-.155-.348-.414-.348h-.3zm-.004-4.699h-.604v-.035c0-.408.295-.844.958-.844.583 0 .96.326.96.756 0 .389-.257.617-.476.848l-.537.572v.03h1.054V9H1.143v-.395l.957-.99c.138-.142.293-.304.293-.508 0-.18-.147-.32-.342-.32a.33.33 0 0 0-.342.338v.041zM2.564 5h-.635V2.924h-.031l-.598.42v-.567l.629-.443h.635V5z"/>
</svg>

After

Width:  |  Height:  |  Size: 983 B

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-list-ul" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M5 11.5a.5.5 0 0 1 .5-.5h9a.5.5 0 0 1 0 1h-9a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h9a.5.5 0 0 1 0 1h-9a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h9a.5.5 0 0 1 0 1h-9a.5.5 0 0 1-.5-.5zm-3 1a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm0 4a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm0 4a1 1 0 1 0 0-2 1 1 0 0 0 0 2z"/>
</svg>

After

Width:  |  Height:  |  Size: 447 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M5 4.9967V7.9967H19V4.9967H5ZM4 2.9967H20C20.5523 2.9967 21 3.44442 21 3.9967V8.9967C21 9.54899 20.5523 9.9967 20 9.9967H4C3.44772 9.9967 3 9.54899 3 8.9967V3.9967C3 3.44442 3.44772 2.9967 4 2.9967ZM6 11.9967H12C12.5523 11.9967 13 12.4444 13 12.9967V15.9967H14V21.9967H10V15.9967H11V13.9967H5C4.44772 13.9967 4 13.549 4 12.9967V10.9967H6V11.9967ZM17.7322 13.7289L19.5 11.9612L21.2678 13.7289C22.2441 14.7052 22.2441 16.2882 21.2678 17.2645C20.2915 18.2408 18.7085 18.2408 17.7322 17.2645C16.7559 16.2882 16.7559 14.7052 17.7322 13.7289Z"></path></svg>

After

Width:  |  Height:  |  Size: 640 B

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-pencil-fill" viewBox="0 0 16 16">
<path d="M12.854.146a.5.5 0 0 0-.707 0L10.5 1.793 14.207 5.5l1.647-1.646a.5.5 0 0 0 0-.708l-3-3zm.646 6.061L9.793 2.5 3.293 9H3.5a.5.5 0 0 1 .5.5v.5h.5a.5.5 0 0 1 .5.5v.5h.5a.5.5 0 0 1 .5.5v.5h.5a.5.5 0 0 1 .5.5v.207l6.5-6.5zm-7.468 7.468A.5.5 0 0 1 6 13.5V13h-.5a.5.5 0 0 1-.5-.5V12h-.5a.5.5 0 0 1-.5-.5V11h-.5a.5.5 0 0 1-.5-.5V10h-.5a.499.499 0 0 1-.175-.032l-.179.178a.5.5 0 0 0-.11.168l-2 5a.5.5 0 0 0 .65.65l5-2a.5.5 0 0 0 .168-.11l.178-.178z"/>
</svg>

After

Width:  |  Height:  |  Size: 589 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-plus"><path d="M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z"/></svg>

After

Width:  |  Height:  |  Size: 223 B

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-text-center" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M4 12.5a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5zm-2-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5zm2-3a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5zm-2-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5z"/>
</svg>

After

Width:  |  Height:  |  Size: 416 B

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-text-left" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2 12.5a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5zm0-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5zm0-3a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5zm0-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5z"/>
</svg>

After

Width:  |  Height:  |  Size: 412 B

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-text-paragraph" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2 12.5a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5zm0-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5zm0-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5zm4-3a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5z"/>
</svg>

After

Width:  |  Height:  |  Size: 417 B

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-text-right" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M6 12.5a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5zm-4-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5zm4-3a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5zm-4-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5z"/>
</svg>

After

Width:  |  Height:  |  Size: 415 B

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-type-bold" viewBox="0 0 16 16">
<path d="M8.21 13c2.106 0 3.412-1.087 3.412-2.823 0-1.306-.984-2.283-2.324-2.386v-.055a2.176 2.176 0 0 0 1.852-2.14c0-1.51-1.162-2.46-3.014-2.46H3.843V13H8.21zM5.908 4.674h1.696c.963 0 1.517.451 1.517 1.244 0 .834-.629 1.32-1.73 1.32H5.908V4.673zm0 6.788V8.598h1.73c1.217 0 1.88.492 1.88 1.415 0 .943-.643 1.449-1.832 1.449H5.907z"/>
</svg>

After

Width:  |  Height:  |  Size: 470 B

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-type-h1" viewBox="0 0 16 16">
<path d="M8.637 13V3.669H7.379V7.62H2.758V3.67H1.5V13h1.258V8.728h4.62V13h1.259zm5.329 0V3.669h-1.244L10.5 5.316v1.265l2.16-1.565h.062V13h1.244z"/>
</svg>

After

Width:  |  Height:  |  Size: 282 B

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-type-h2" viewBox="0 0 16 16">
<path d="M7.638 13V3.669H6.38V7.62H1.759V3.67H.5V13h1.258V8.728h4.62V13h1.259zm3.022-6.733v-.048c0-.889.63-1.668 1.716-1.668.957 0 1.675.608 1.675 1.572 0 .855-.554 1.504-1.067 2.085l-3.513 3.999V13H15.5v-1.094h-4.245v-.075l2.481-2.844c.875-.998 1.586-1.784 1.586-2.953 0-1.463-1.155-2.556-2.919-2.556-1.941 0-2.966 1.326-2.966 2.74v.049h1.223z"/>
</svg>

After

Width:  |  Height:  |  Size: 482 B

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-type-h3" viewBox="0 0 16 16">
<path d="M7.637 13V3.669H6.379V7.62H1.758V3.67H.5V13h1.258V8.728h4.62V13h1.259zm3.625-4.272h1.018c1.142 0 1.935.67 1.949 1.674.013 1.005-.78 1.737-2.01 1.73-1.08-.007-1.853-.588-1.935-1.32H9.108c.069 1.327 1.224 2.386 3.083 2.386 1.935 0 3.343-1.155 3.309-2.789-.027-1.51-1.251-2.16-2.037-2.249v-.068c.704-.123 1.764-.91 1.723-2.229-.035-1.353-1.176-2.4-2.954-2.385-1.873.006-2.857 1.162-2.898 2.358h1.196c.062-.69.711-1.299 1.696-1.299.998 0 1.695.622 1.695 1.525.007.922-.718 1.592-1.695 1.592h-.964v1.074z"/>
</svg>

After

Width:  |  Height:  |  Size: 646 B

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-type-italic" viewBox="0 0 16 16">
<path d="M7.991 11.674 9.53 4.455c.123-.595.246-.71 1.347-.807l.11-.52H7.211l-.11.52c1.06.096 1.128.212 1.005.807L6.57 11.674c-.123.595-.246.71-1.346.806l-.11.52h3.774l.11-.52c-1.06-.095-1.129-.211-1.006-.806z"/>
</svg>

After

Width:  |  Height:  |  Size: 351 B

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-type-strikethrough" viewBox="0 0 16 16">
<path d="M6.333 5.686c0 .31.083.581.27.814H5.166a2.776 2.776 0 0 1-.099-.76c0-1.627 1.436-2.768 3.48-2.768 1.969 0 3.39 1.175 3.445 2.85h-1.23c-.11-1.08-.964-1.743-2.25-1.743-1.23 0-2.18.602-2.18 1.607zm2.194 7.478c-2.153 0-3.589-1.107-3.705-2.81h1.23c.144 1.06 1.129 1.703 2.544 1.703 1.34 0 2.31-.705 2.31-1.675 0-.827-.547-1.374-1.914-1.675L8.046 8.5H1v-1h14v1h-3.504c.468.437.675.994.675 1.697 0 1.826-1.436 2.967-3.644 2.967z"/>
</svg>

After

Width:  |  Height:  |  Size: 579 B

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-type-underline" viewBox="0 0 16 16">
<path d="M5.313 3.136h-1.23V9.54c0 2.105 1.47 3.623 3.917 3.623s3.917-1.518 3.917-3.623V3.136h-1.23v6.323c0 1.49-.978 2.57-2.687 2.57-1.709 0-2.687-1.08-2.687-2.57V3.136zM12.5 15h-9v-1h9v1z"/>
</svg>

After

Width:  |  Height:  |  Size: 334 B

@ -0,0 +1 @@
<svg class="prefix__icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="32" height="32"><path d="M513.554 814.327h-.124a307.518 307.518 0 01-156.195-42.549l-11.211-6.638-116.136 30.331 31.002-112.71-7.291-11.547a303.616 303.616 0 01-46.928-162.533c.071-168.395 137.728-305.382 307.006-305.382a305.54 305.54 0 01216.947 89.565 302.822 302.822 0 0189.794 216.064c-.07 168.395-137.71 305.4-306.864 305.4zM774.727 249.01c-69.72-69.456-162.446-107.75-261.173-107.768-203.53 0-369.135 164.83-369.223 367.405a365.462 365.462 0 0049.293 183.702l-52.383 190.41 195.726-51.093a370.353 370.353 0 00176.428 44.72h.159c203.476 0 369.116-164.846 369.205-367.44.035-98.162-38.33-190.499-108.05-259.954z" fill="#25D366"/><path d="M379.339 686.963c-4.184-2.437-8.263-4.555-8.263-17.814.106-65.713.212-217.689 0-273.885-.106-35.399-4.837-58.297 26.43-58.297 84.568 0 208.155-15.678 236.933 53.53 29.025 69.968-17.938 103.883-28.249 121.891 70.48 19.51 74.346 175.952-76.305 175.952-32.239 0-77.577.106-130.119.212-12.359 0-17.832 0-20.427-1.59zm65.236-57.344h76.5c32.574-.106 61.581-15.042 60.822-47.069-.53-30.102-20.833-40.06-49.1-42.814-26.764.318-57.484.318-88.222.318v89.565zm0-150.07c56.62-.758 78.442 2.208 109.391-5.42 21.275-11.864 30.508-56.072.106-71.008-21.062-10.4-83.597-6.886-109.497-5.827v82.238z" fill="#25D366"/></svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

@ -0,0 +1 @@
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg"><path d="M16.065 29.045h-.005a13.27 13.27 0 01-6.74-1.836l-.484-.287-5.012 1.31 1.338-4.865-.315-.498a13.102 13.102 0 01-2.025-7.014C2.825 8.588 8.766 2.676 16.071 2.676a13.185 13.185 0 019.362 3.866 13.068 13.068 0 013.875 9.324c-.003 7.267-5.943 13.18-13.243 13.18zM27.336 4.65A15.868 15.868 0 0016.066 0C7.281-.002.135 7.111.131 15.853a15.771 15.771 0 002.127 7.927l-2.26 8.217 8.446-2.205a15.982 15.982 0 007.614 1.93h.006c8.781 0 15.93-7.114 15.933-15.856a15.724 15.724 0 00-4.663-11.219z" fill="#25D366"/><path d="M10.273 23.549c-.18-.105-.356-.197-.356-.769.004-2.836.009-9.394 0-11.82-.005-1.527-.209-2.515 1.14-2.515 3.65 0 8.983-.677 10.225 2.31 1.253 3.02-.774 4.483-1.219 5.26 3.042.842 3.208 7.593-3.293 7.593-1.391 0-3.348.005-5.615.01-.533 0-.77 0-.882-.07zm2.816-2.475h3.301c1.406-.004 2.657-.649 2.625-2.031-.023-1.3-.9-1.729-2.12-1.848-1.154.014-2.48.014-3.806.014v3.865zm0-6.476c2.443-.033 3.385.095 4.72-.234.918-.512 1.317-2.42.005-3.064-.909-.45-3.608-.297-4.725-.252v3.55z" fill="#25D366"/></svg>

@ -0,0 +1,33 @@
<?xml version='1.0' encoding='UTF-8'?>
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g transform="translate(0, 0)">
<g transform="matrix(1.3809472322464, 0, 0, 1.3809472322464, 0, 0)">
<g transform="translate(0, 0)">
<g transform="matrix(0.827589750289917, 0, 0, 0.827589750289917, 0, 0)">
<g class="prefix__icon" transform="translate(-5.3347, -5.3347)">
<g transform="matrix(1.20832681655884, 0, 0, 1.20832681655884, 0, 0)">
<g transform="matrix(0.03125, 0, 0, 0.03125, 0, 0)">
<path d="M513.554, 814.327L513.43, 814.327A307.518 307.518 0 0 1 357.235, 771.778L346.024, 765.14L229.888, 795.471L260.89, 682.761L253.599, 671.214A303.616 303.616 0 0 1 206.671, 508.681C206.742, 340.286 344.399, 203.299 513.677, 203.299A305.54 305.54 0 0 1 730.624, 292.864A302.822 302.822 0 0 1 820.418, 508.928C820.348, 677.323 682.708, 814.328 513.554, 814.328zM774.727, 249.01C705.007, 179.554 612.281, 141.26 513.554, 141.242C310.024, 141.242 144.419, 306.072 144.331, 508.647A365.462 365.462 0 0 0 193.624, 692.349L141.241, 882.759L336.967, 831.666A370.353 370.353 0 0 0 513.395, 876.386L513.554, 876.386C717.03, 876.386 882.67, 711.54 882.759, 508.946C882.794, 410.784 844.429, 318.447 774.709, 248.992z" fill="#25D366" />
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<g transform="translate(-2.67028807954262E-07, -8.39233399219097E-07)">
<g transform="matrix(1.3809472322464, 0, 0, 1.3809472322464, 0, 0)">
<g transform="translate(1.33514403977131E-07, 1.71661376668908E-07)">
<g transform="matrix(0.827589750289917, 0, 0, 0.827589750289917, 0, 0)">
<g class="prefix__icon" transform="translate(-5.33470045776367, -5.33470049591064)">
<g transform="matrix(1.20832681655884, 0, 0, 1.20832681655884, 0, 0)">
<g transform="matrix(0.03125, 0, 0, 0.03125, 0, 0)">
<path d="M379.339, 686.963C375.155, 684.526 371.076, 682.408 371.076, 669.149C371.182, 603.436 371.288, 451.46 371.076, 395.264C370.97, 359.865 366.239, 336.967 397.506, 336.967C482.074, 336.967 605.661, 321.289 634.439, 390.497C663.464, 460.465 616.501, 494.38 606.19, 512.388C676.67, 531.898 680.536, 688.34 529.885, 688.34C497.646, 688.34 452.308, 688.446 399.766, 688.552C387.407, 688.552 381.934, 688.552 379.339, 686.962zM444.575, 629.619L521.075, 629.619C553.649, 629.513 582.656, 614.577 581.897, 582.55C581.367, 552.448 561.064, 542.49 532.797, 539.736C506.033, 540.054 475.313, 540.054 444.575, 540.054L444.575, 629.619zM444.575, 479.549C501.195, 478.791 523.017, 481.757 553.966, 474.129C575.241, 462.265 584.474, 418.057 554.072, 403.121C533.01, 392.721 470.475, 396.235 444.575, 397.294L444.575, 479.532z" fill="#25D366" />
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

@ -1,55 +1,161 @@
import { groupBy, pick, sortArrayByOrder } from '@/utils/commons';
import { groupBy, isNotEmpty, pick, sortArrayByOrder, sortBy } from '@/utils/commons';
import { fetchJSON, postJSON, postForm } from '@/utils/request'
import { parseRenderMessageList } from '@/channel/whatsappUtils';
import { parseRenderMessageList } from '@/channel/bubbleMsgUtils';
import { API_HOST } from '@/config';
import { isEmpty } from '@/utils/commons';
import dayjs from 'dayjs';
export const fetchTemplates = async () => {
const data = await fetchJSON(`${API_HOST}/listtemplates`);
/**
* @param {object} params { waba }
*/
export const fetchTemplates = async (params) => {
const data = await fetchJSON(`${API_HOST}/listtemplates`, params);
const topName = [
'agent_intro_with_update_v1',
'online_inquiry_received',
'say_hello_again',
'order_updated_specialist_assigned_christy',
'order_resumed_specialist_followup_schedule_sharon',
'travel_service_update_v2',
'travel_service_update_v1',
'order_updated_specialist_assigned_sharon',
'first_message_for_not_reply',
// 'free_style_3',
// 'free_style_4',
];
// shouwcase
const scNames = ['trip_planner_showcase', 'showcase_different', 'order_status_updated'];
// 客运
const crNames = [
'notification_of_next_trip_planning',
// 'notification_of_following_up_by_cr_v3',
'notification_of_one_day_before_ending_the_trip_by_cr_v2',
'one_day_after_payment_by_yuni',
'notification_of_status_changed',
'notification_of_one_day_before_ending_the_trip_by_cr','one_day_after_payment_by_customer_relations',
'one_day_before_ending_the_trip_contacted_by_yuni','one_day_before_ending_the_trip_first_time_by_yuni',
'post_booking_confirmation_welcome',
];
const crNamesOmit = [
'birthday_greetings_by_marketing','one_day_before_ending_the_trip_by_marketing',
'introduce_the_voucher_one_day_before_ending_the_trip_by_marketing',
'birthday_greetings_by_customer_relations_0',
'post_trip_voucher_issued',
'account_updated_order_ref',
'post_trip_account_updated_from_cr',
'post_trip_account_updated',
'account_update_birthday',
'post_trip_birthday_reward',
'birthday_greetings_by_customer_relations_2',
'birthday_greetings_by_customer_relations_1',
'notification_of_account_updated_by_cr',
'birthday_greetings_by_customer_relations',
'one_day_before_ending_the_trip_by_customer_relations',
]
const canUseTemplates = (data?.result?.items || [])
.filter((_t) => _t.status === 'APPROVED')
.map((ele) => ({ ...ele, components_origin: ele.components, components: groupBy(ele.components, (_c) => _c.type.toLowerCase()) }));
const topName = ['say_hello_from_trip_advisor', 'free_style_7', 'free_style_2', 'free_style_1', 'free_style_3', 'free_style_4'];
const top = sortArrayByOrder( canUseTemplates.filter((_t) => topName.includes(_t.name)), 'name', topName);
const raw = canUseTemplates.filter((_t) => !topName.includes(_t.name));
return [...top, ...raw];
.filter((_t) => _t.status === 'APPROVED' && !['say_hello_from_trip_advisor', 'free_style_7', 'free_style_1', 'free_style_2'].includes(_t.name))
.map((ele, i) => ({
...ele,
components_origin: ele.components,
components: groupBy(ele.components, (_c) => _c.type.toLowerCase()),
key: ele.name,
// displayName: ele.name.startsWith('order_updated') ? templatesDisplayNameMap['order_updated']+`_${i}` : templatesDisplayNameMap?.[ele.name] || ele.name,
displayName: templatesDisplayNameMap?.[ele.name] || (ele.name.startsWith('order_updated') ? templatesDisplayNameMap['order_updated']+`_${i}` : ele.name),
displayLanguage: crNamesOmit.includes(ele.name) ? '客运-' : (crNames.includes(ele.name) || ele.name.includes('by_cr')) ? ele.language + '-客运' : scNames.includes(ele.name) ? ele.language + '-示例' : ele.language,
}))
const top2Name = topName.concat(canUseTemplates.filter(_t => _t.name.startsWith('order_updated')).map(_tem => _tem.name));
const top = sortArrayByOrder( canUseTemplates.filter((_t) => top2Name.includes(_t.name)), 'name', topName);
const second = canUseTemplates.filter(_t => _t.name.includes('free_style'));
const secondS = second.sort(sortBy('name'));
const raw = canUseTemplates.filter((_t) => !top2Name.includes(_t.name) && !_t.name.includes('free_style'));
// 剩下的排序
const rawS = sortArrayByOrder(raw, 'name', [...crNames, ...scNames, ...crNamesOmit ]);
return [...top, ...secondS, ...rawS];
};
/**
* 上面的模板名称bak
* order_updated_specialist_assigned_sharon : free_style_7
* order_updated_specialist_assigned_christy : free_style_1
* online_inquiry_received: say_hello_from_trip_advisor
* order_resumed_specialist_followup_schedule_sharon: free_style_2
*/
const templatesDisplayNameMap = {
'order_updated_specialist_assigned_sharon': 'specialist_followup',
'order_updated_specialist_assigned_christy': 'specialist_followup_1',
'online_inquiry_received': 'online_inquiry_received/say_hello',
'order_resumed_specialist_followup_schedule_sharon': 'order_resumed/specialist_followup',
'order_updated': 'specialist_followup',
'agent_intro_with_update_v1': 'quick_update_v1',
};
export const CONVERSATION_PAGE_SIZE = 100;
/**
*
* @param {object} params { opisn }
*/
export const fetchConversationsList = async (params) => {
const { errcode, result: data } = await fetchJSON(`${API_HOST}/getconversations`, params);
const defaultParams = {
opisn: '',
pagesize: CONVERSATION_PAGE_SIZE,
lastpagetime: '',
tags: '',
olabel: '',
keyword: '',
ostate: '',
intour: '',
session_enable: 1,
lastactivetime: '',
top_state: '',
}
const combinedFilterStr = Object.values(pick(params, ['keyword', 'tags', 'olabel', 'intour', 'ostate'])).join('')
if (isNotEmpty(combinedFilterStr) || params.session_enable === 0) {
params.lastactivetime = '';
}
const { errcode, result: data } = await fetchJSON(`${API_HOST}/getconversations`, { ...defaultParams, ...params })
if (errcode !== 0) return [];
const list = (data || []).map((ele) => ({ ...ele, customer_name: `${ele.whatsapp_name || ''}`.trim(), whatsapp_name: `${ele.whatsapp_name || ''}`.trim() }));
const list = (data || []).map((ele) => ({
...ele,
customer_name: `${ele.whatsapp_name || ''}`.trim(),
whatsapp_name: `${ele.whatsapp_name || ''}`.trim(),
show_default: ele.conversation_memo || ele.whatsapp_name || ele?.channels?.whatsapp_phone_number || ele?.channels?.phone_number || ele?.channels?.email || '',
// coli_id: ele.COLI_ID,
top_state: ele.top_state || 0,
}))
return list;
};
/**
*
* @param {object} params { opisn, whatsappid, colisn }
* @param {object} params { opisn, whatsappid, colisn, email }
* * opisn, colisn : 用于查询
* * whatsappid: 用于创建会话
* * whatsappid, email: 用于创建会话
*/
export const fetchOrderConversationsList = async (params) => {
const { errcode, result: data } = await fetchJSON(`${API_HOST}/getorderconversation`, params);
if (errcode !== 0) return [];
const list = data.map((ele) => ({ ...ele, customer_name: `${ele.whatsapp_name || ''}`.trim(), whatsapp_name: `${ele.whatsapp_name || ''}`.trim() }));
const list = data.map((ele) => ({
...ele,
customer_name: `${ele.whatsapp_name || ''}`.trim(),
whatsapp_name: `${ele.whatsapp_name || ''}`.trim(),
show_default: ele.conversation_memo || ele.whatsapp_name || ele?.channels?.whatsapp_phone_number || ele?.channels?.phone_number || ele?.channels?.email || '',
}))
return list;
};
export const MESSAGE_PAGE_SIZE = 50;
/**
*
* @param {object} params { opisn, whatsappid, lasttime, pagesize }
* @param {object} params { coli_sn, opisn, whatsappid, conversationid, lasttime, pagesize }
*/
export const fetchMessages = async (params) => {
const defaultParams = {
opisn: '',
whatsappid: '',
// opisn: '',
// whatsappid: '',
coli_sn: '',
conversationid: '',
lasttime: '',
pagesize: MESSAGE_PAGE_SIZE,
};
@ -69,7 +175,8 @@ export const fetchConversationItemClose = async (body) => {
/**
* @param {object} body { phone_number, name }
*/
export const postNewConversationItem = async (body) => {
export const postNewOrEditConversationItem = async (body) => {
body.whatsapp_phone_number = `${body.whatsapp_phone_number || ''}`.trim();
const formData = new FormData();
Object.keys(body).forEach(function (key) {
formData.append(key, body[key]);
@ -83,11 +190,24 @@ export const postNewConversationItem = async (body) => {
...resultItem,
customer_name: `${resultItem.whatsapp_name || ''}`.trim(),
whatsapp_name: `${resultItem.whatsapp_name || ''}`.trim(),
// channels: {},
// tags: [],
// last_message: {},
top_state: 0,
// conversation_memo: resultItem.session_memo,
};
};
/**
* @param {object} params { opisn, whatsappid }
* @param {object} params { conversationid, coli_sn }
*/
export const postEditConversationItemColiAction = async (params) => {
const { errcode, result } = await fetchJSON(`${API_HOST}/update_conversation_orderid`, params);
return errcode !== 0 ? {} : result;
};
/**
* @param {object} params { opisn, conversationid }
*/
export const fetchCleanUnreadMsgCount = async (params) => {
const { errcode, result } = await fetchJSON(`${API_HOST}/clean_unread_msg_count`, params);
@ -103,12 +223,19 @@ export const fetchConversationItemUnread = async (body) => {
const { errcode, result } = await fetchJSON(`${API_HOST}/set_state_unread`, body);
return errcode !== 0 ? {} : result;
};
/**
* 设置置顶
* @param {object} body { conversationid, top_state }
*/
export const fetchConversationItemTop = async (body) => {
const { errcode, result } = await fetchJSON(`${API_HOST}/set_top_conversation`, body);
return errcode !== 0 ? {} : result;
};
/**
* ------------------------------------------------------------------------------------------------
* 历史记录
*/
export const CONVERSATION_PAGE_SIZE = 20;
/**
* @param {object} params { search, from_date, end_date, whatsapp_id, opisn, coli_id, msg_type }
* @todo msg_type
@ -125,9 +252,11 @@ export const fetchConversationsSearch = async (params) => {
whatsapp_name: `${ele.whatsapp_name || ''}`.trim(),
opi_sn: ele.OPI_SN || ele.opi_sn || 0,
OPI_Name: `${ele.OPI_Name || ele.opi_name || ''}`.trim(),
dateText: dayjs((ele.lasttime || ele.lasttime)).format('MM-DD HH:mm'),
opi_name: `${ele.OPI_Name || ele.opi_name || ''}`.trim(),
dateText: dayjs((ele.lasttime)).format('MM-DD HH:mm'),
matchMsgList: parseRenderMessageList((ele.msglist_AsJOSN || [])), // .reverse()),
coli_id: '',
show_default: ele.session_memo || ele.whatsapp_name || ele?.whatsapp_phone_number || ele?.guest_email || '',
}));
return list;
};
@ -138,14 +267,15 @@ export const fetchConversationsSearch = async (params) => {
*/
export const fetchMessagesHistory = async (params) => {
const defaultParams = {
opisn: '',
whatsappid: '',
// opisn: '',
// whatsappid: '',
conversationid: '',
lasttime: '2024-01-01T00:00:00',
pagesize: MESSAGE_PAGE_SIZE,
pagedir: 'next',
};
const _params = pick(params, Object.keys(defaultParams));
if (isEmpty(_params.opisn) || isEmpty(_params.whatsappid)) {
if (isEmpty(_params.conversationid)) {
return [];
}
const { errcode, result } = await fetchJSON(`${API_HOST}/get_item_messages`, {...defaultParams, ..._params});
@ -189,3 +319,36 @@ export const postAssignConversation = async (params) => {
const { errcode, result } = await fetchJSON(`${API_HOST}/assign_conversation`, params);
return errcode !== 0 ? {} : result;
}
/**
* ------------------------------------------------------------------------------------------------
*
*/
/**
* 顾问的自定义标签
* @param {object} params { opisn, }
*/
export const fetchTags = async (params) => {
const { errcode, result } = await fetchJSON(`${API_HOST}/get_opi_tags`, params);
return errcode !== 0 ? [] : result.map(ele => ({ label: ele.tag_label, key: ele.tag_key, value: ele.tag_key, }));
}
/**
* 会话设置标签
* @param {object} body { opisn, conversationid, tag_label, tag_id }
*/
export const postConversationTags = async (body) => {
const formData = new FormData();
Object.keys(body).forEach(function (key) {
formData.append(key, body[key]);
});
const { errcode, result } = await postForm(`${API_HOST}/set_conversation_tags_add`, formData);
return errcode !== 0 ? {} : result[0];
}
/**
* 会话删除标签
* @param {object} params { opisn, conversationid, tag_id }
*/
export const deleteConversationTags = async (params) => {
const { errcode, result } = await fetchJSON(`${API_HOST}/set_conversation_tags_del`, params);
return errcode !== 0 ? {} : result;
}

@ -0,0 +1,491 @@
import { fetchJSON, postForm, postJSON } from '@/utils/request';
import { API_HOST, API_HOST_V3, DATE_FORMAT, DATEEND_FORMAT, DATETIME_FORMAT, EMAIL_HOST, EMAIL_HOST_v3 } from '@/config';
import { buildTree, groupBy, isEmpty, objectMapper, omitEmpty, uniqWith } from '@/utils/commons';
import { readIndexDB, writeIndexDB } from '@/utils/indexedDB';
import dayjs from 'dayjs';
import { internalEventEmitter } from '@/utils/EventEmitterService';
export const parseHTMLString = (html, needText = false) => {
const parser = new DOMParser()
const doc = parser.parseFromString(html, 'text/html')
let bodyContent = doc.body.innerHTML
// bodyContent = bodyContent.replace(/<img/g, '<img onerror="this.onerror=null;this.src=\'https://hiana-crm.oss-accelerate.aliyuncs.com/WAMedia/afe412d4-3acf-4e79-a623-048aeb4d696a.png\';"')
const bodyText = (doc.body.innerText);
return needText ? { html, bodyContent, bodyText } : bodyContent
}
export const EMAIL_CHANNEL_NAME = 'mailbox_changes';
let emailChangesChannel = null;
export function getEmailChangesChannel() {
if (!emailChangesChannel) {
emailChangesChannel = new BroadcastChannel(EMAIL_CHANNEL_NAME)
}
return emailChangesChannel
}
// 通知邮件列表数据更新
const notifyMailboxUpdate = (payload) => {
const notificationPayload = payload
// - 多个tab
const channel = getEmailChangesChannel()
channel.postMessage(notificationPayload)
// - 当前tab
internalEventEmitter.emit(EMAIL_CHANNEL_NAME, notificationPayload)
}
/**
* 获取顾问签名
* @param {object} { opi_sn }
*/
export const getSalesSignatureAction = async (params) => {
try {
const { result } = await fetchJSON(`${EMAIL_HOST}/email_sign`, params)
const { SignContent: html } = result
const bodyContent = parseHTMLString(html);
return bodyContent;
} catch (error) {
return '';
}
};
/**
* 发送邮件
*/
export const postSendEmail = async (body) => {
const { attaList=[], atta, content, ...bodyData } = body;
bodyData.ordertype = 227001;
const formData = new FormData();
Object.keys(bodyData).forEach(function (key) {
formData.append(key, bodyData[key]);
});
attaList.forEach(function (item) {
formData.append('attachment', item);
});
const { result } = await postForm(`${EMAIL_HOST}/sendmail`, formData);
return result;
};
/**
* 重发邮件
* @param {object} { mai_sn }
*/
export const postResendEmailAction = async (body) => {
const { attaList, atta, content, ...bodyData } = body;
const formData = new FormData();
Object.keys(bodyData).forEach(function (key) {
formData.append(key, bodyData[key]);
});
return await postForm(`${EMAIL_HOST}/email_resend`, formData);
};
const encodeEmailInfo = (info) => {
const encodeQuote = (str = '') => str.replace(/"/g, ''); //.replace(/</g,'&lt;').replace(/>/g,'&gt;')
const CSsClean = encodeQuote(info.MAI_CS).includes(',') ? encodeQuote(info.MAI_CS).split(',') : encodeQuote(info.MAI_CS).split(';');
const tosClean = (encodeQuote(info.MAI_To).includes(',') ? encodeQuote(info.MAI_To).split(',') : encodeQuote(info.MAI_To).split(';')).concat(CSsClean).filter(s => s);
const replyTo = info.MAI_Direction === 1 ? info.MAI_To : info.MAI_From;
const replyToAll = (tosClean.length > 1) ?
(info.MAI_Direction === 1 ? tosClean.join(',') : [...tosClean, info.MAI_From].join(','))
: (info.MAI_Direction === 1 ? info.MAI_To : info.MAI_From)
return {
...info,
MAI_From: encodeQuote(info.MAI_From),
MAI_To: encodeQuote(info.MAI_To),
tos: [...new Set(tosClean)],
replyToAll,
replyTo,
}
};
/**
* 邮件详情
* @param {object} { mai_sn }
*/
export const getEmailDetailAction = async (params) => {
// const cacheKey = params.mai_sn;
// const readCache = await readIndexDB(cacheKey, 'mailinfo', 'mailbox');
// if (!isEmpty(readCache)) { // todo: 除了草稿
// return readCache.data;
// }
const { result } = await fetchJSON(`${EMAIL_HOST}/getmail`, params);
let mailType = result.MailInfo?.[0]?.MAI_ContentType || '';
mailType = mailType === '' && (result.MailContent||'').includes('<html') ? 'text/html' : mailType;
const emailInfo = encodeEmailInfo(result.MailInfo?.[0] || {});
const isFromHub = emailInfo.MAI_From.includes('info@chinahighlights.net');
const delLinefeed = mailType === 'text/html' ? (result.MailContent||'').includes('<html') ? true : false : true;
const cleanContent = (result.MailContent || '').replace(/\r\n/g, delLinefeed ? '' : (isFromHub ? '<br>' : ''));
const { html, bodyContent, bodyText } = mailType === 'text/html' ? parseHTMLString(cleanContent, true) : { html: '', bodyContent: '', bodyText: '' };
const attachments = (isEmpty(result?.AttachList) ? [] : result.AttachList).filter(ele => isEmpty(ele.ATI_ContentID) || ele.ATI_ContentID == '0');
const insideAttachments = (isEmpty(result?.AttachList) ? [] : result.AttachList).filter(ele => !isEmpty(ele.ATI_ContentID) && ele.ATI_ContentID != '0');
const ret = {
info: { ...encodeEmailInfo(result.MailInfo?.[0] || {}), mailType },
content: mailType === 'text/html' ? html : result.MailContent || '',
abstract: bodyText || result.MailContent || '',
attachments,
insideAttachments,
AttachList: isEmpty(result?.AttachList) ? [] : result.AttachList,
}
// writeIndexDB([{key: cacheKey, data: ret}], 'mailinfo', 'mailbox')
return ret;
}
export const getEmailOrderAction = async ({ colisn }) => {
const { errcode, result } = await fetchJSON(`${API_HOST}/getorderinfo`, { colisn })
return errcode === 0 ? { ...result[0], customerDetail: result[0].contact[0] } : {}
}
/**
* 主动收邮件, 单个账户
* @param {object} { opi_sn, }
*/
export const getEmailFetchAction = async (params) => {
const { opi_sn, } = params
const { result } = await fetchJSON(`${EMAIL_HOST}/email_fetch`, {
opi_sn,
})
return result
};
/**
* 报价信邮件草稿
* @param {object} { sfi_sn, coli_sn, lgc }
*/
export const getEmailQuotationDraftAction = async (params) => {
const { result } = await fetchJSON(`${EMAIL_HOST}/QuotationLetter`, params)
return { subject: (result.Subject || ''), content: parseHTMLString((result.MailContent || '').replace(/\r\n/g, '')) }
}
/**
* 单个邮件绑定订单
* @param {object} { conversationid, mai_sn, coli_sn, coli_id, sourcetype }
*/
export const fetchEmailBindOrderAction = async (params) => {
const { errcode, result } = await fetchJSON(`${API_HOST}/mailinfo_bindorder`, params)
return errcode === 0 ? true : false;
}
const todoTypes = {
// 1新订单2WhatsApp未读消息3需一催4需二催5需三催6未处理邮件入境提醒coli_ordertype=7余款提醒coli_ordertype=8
1: '新订单',
2: '未读WhatsApp',
3: '一催',
4: '二催',
5: '三催',
6: '老邮件',
7: '入境提醒',
8: '余款提醒',
}
/**
* 顾问的邮箱目录
* @param {object} params { opi_sn, year, by_start_date, by_success, important, if_want_book, if_thinking }
* @param {boolean} retOrder 是否直接返回订单列表 -- 忽略
*/
export const getEmailDirAction = async (params = { opi_sn: '' }, retOrder=false) => {
const defaultParams = { opi_sn: 0, year: dayjs().year(), by_start_date: -1, by_success: -1, important: -1, if_want_book: -1, if_thinking: -1 }
const { errcode, result } = await fetchJSON(`${API_HOST_V3}/email_dir`, { ...defaultParams, ...params })
const mailboxSort = result //.sort(sortBy('MDR_Order'));
let tree = buildTree(mailboxSort, { key: 'VKey', parent: 'VParent', name: 'VName', iconIndex: 'ImageIndex', rootKeys: [1], ignoreKeys: [-227001, -227002] })
tree = tree.filter((ele) => ele.key !== 1)
const retTree = errcode === 0 ? tree : [];
const orderList = groupBy(result, row => `${row.IsTrue}`)?.['0'] || [];
return retOrder !== false ? orderList : { [`${params.opi_sn}`]: retTree }
};
export const getMailboxCountAction = async (params = { opi_sn: '' }, update = true) => {
const defaultParams = {
opi_sn: 0,
// date1: dayjs().subtract(1, 'year').startOf('year').format(DATE_FORMAT),
date1: dayjs().subtract(180, 'days').format(DATE_FORMAT),
date2: dayjs().format(DATEEND_FORMAT)
}
const { errcode, result } = await fetchJSON(`${API_HOST_V3}/dir_count`, {...defaultParams, ...params})
const ret = errcode !== 0 ? { [`${params.opi_sn}`]: {} } : { [`${params.opi_sn}`]: result }
// 更新数量
if (update !== false) {
const readCacheDir = (await readIndexDB(Number(params.opi_sn), 'dirs', 'mailbox')) || {};
const mailboxDir = isEmpty(readCacheDir) ? [] : readCacheDir.tree.filter(node => node?._raw?.IsTrue === 1);
const _MapDir = new Map(mailboxDir.map((obj) => [obj.key, obj]))
Object.keys(result).map(dirKey => {
_MapDir.set(Number(dirKey), {..._MapDir.get(Number(dirKey)), count: result[dirKey]});
})
const _newToUpdate = Array.from(_MapDir.values());
const _MapRoot = new Map((readCacheDir?.tree || []).map((obj) => [obj.key, obj]))
_newToUpdate.forEach((row) => {
_MapRoot.set(row.key, row)
})
const _newRoot = Array.from(_MapRoot.values())
writeIndexDB([{ ...readCacheDir, key: Number(params.opi_sn), tree: _newRoot }], 'dirs', 'mailbox')
notifyMailboxUpdate({ type: 'dirs', key: Number(params.opi_sn) })
}
return ret;
};
export const getTodoOrdersAction = async (params) => {
const opi_arr = params.opisn.split(',')
const defaultStickyTree = opi_arr.reduce(
(a, ele) => ({
...a,
[ele]: [
{
key: ele + '-today',
title: '今日任务',
getMails: false,
iconIndex: 'star',
children: [],
COLI_SN: 0,
},
{
key: ele + '-todo',
title: '待办任务',
getMails: false,
iconIndex: 'calendar',
children: [],
COLI_SN: 0,
},
// {
// key: ele.OPI_DEI_SN + '-reminder',
// title: '催信',
// getMails: false,iconIndex: 'reminder',
// icon: <BellTwoTone />,
// children: [], COLI_SN: 0,
// },
],
}),
{},
)
const { errcode, result } = await fetchJSON(`${API_HOST}/getwlorder`, params)
// 订单重复时, 取后一个状态, 因此翻转两次
const _result_unique = uniqWith(result.reverse(), (a, b) => a.COLI_SN === b.COLI_SN).reverse();
const orderList = errcode === 0 ? _result_unique : []
const byOPI = groupBy(orderList, 'OPI_SN')
const byState = Object.keys(byOPI).reduce((acc, key) => {
const sticky = groupBy(byOPI[key], (ele) => ([1, 6].includes(ele.coli_ordertype) ? 0 : [2, 3, 4, 5].includes(ele.coli_ordertype) ? 1 : 2))
const treeNode = [
{
key: key + '-today',
title: '今日任务',
getMails: false,
iconIndex: 'star',
_raw: { COLI_SN: 0, IsTrue: 0 },
children: (sticky[0] || []).map((o) => ({
key: `today-${o.COLI_SN}`,
title: `(${todoTypes[o.coli_ordertype] || o.COLI_State}) ${o.COLI_ID}`,
iconIndex: 13,
parent: key + '-today',
parentTitle: '今日任务',
parentIconIndex: 'star',
_raw: { ...o, VKey: o.COLI_SN, VName: o.COLI_ID, VParent: key + '-today', IsTrue: 0, ApplyDate: '', OrderSourceType: 227001, parent: key + '-today' },
})),
},
{
key: key + '-todo',
title: '待办任务',
getMails: false,
iconIndex: 'calendar',
_raw: { COLI_SN: 0, IsTrue: 0 },
children: (sticky[2] || []).map((o) => ({
key: `todo-${o.COLI_SN}`,
title: `(${todoTypes[o.coli_ordertype] || o.COLI_State}) ${o.COLI_ID}`,
iconIndex: 13,
parent: key + '-todo',
parentTitle: '待办任务',
parentIconIndex: 'calendar',
_raw: { ...o, VKey: o.COLI_SN, VName: o.COLI_ID, VParent: key + '-todo', IsTrue: 0, ApplyDate: '', OrderSourceType: 227001, parent: key + '-todo' },
})),
},
...(!isEmpty(sticky[1] || [])
? [
{
key: key + '-reminder',
title: '催信',
getMails: false,
iconIndex: 'reminder',
_raw: { COLI_SN: 0, IsTrue: 0 },
children: (sticky[1] || []).map((o) => ({
key: `reminder-${o.COLI_SN}`,
title: `(${todoTypes[o.coli_ordertype] || o.COLI_State}) ${o.COLI_ID}`,
iconIndex: 13,
parent: key + '-reminder',
parentTitle: '催信',
parentIconIndex: 'reminder',
_raw: { ...o, VKey: o.COLI_SN, VName: o.COLI_ID, VParent: key + '-reminder', IsTrue: 0, ApplyDate: '', OrderSourceType: 227001, parent: key + '-reminder' },
})),
},
]
: []),
]
return { ...acc, [key]: treeNode }
}, defaultStickyTree)
return errcode === 0 ? byState : defaultStickyTree
};
/**
* 获取待办目录和邮箱目录
* @param {object} params { opi_sn, userIdStr }
* @param {number} params.opi_sn
* @param {string} params.userIdStr - 用户ID字符串默认为空
*/
export const getRootMailboxDirAction = async ({ opi_sn = 0, userIdStr = '' } = {}) => {
const [stickyTree, ...mailboxDir] = await Promise.all([
getTodoOrdersAction({ opisn: userIdStr || String(opi_sn), otype: 'today' }),
...(userIdStr.split(',').map(_opi => getEmailDirAction({ opi_sn: _opi }))),
])
const mailBoxCount = await Promise.all(userIdStr.split(',').map(_opi => getMailboxCountAction({ opi_sn: _opi }, false)));
const mailboxDirCountByOPI = mailBoxCount.reduce((a, c) => ({ ...a, ...c, }), {})
const mailboxDirByOPI = mailboxDir.reduce((a, c) => ({ ...a, ...(Object.keys(c).reduce((a, opi) => ({...a, [opi]: c[`${opi}`].map((dir) => ({ ...dir, count: mailboxDirCountByOPI[opi][`${dir.key}`] })) }), {} )) }), {})
const rootTree = Object.keys(stickyTree).map((opi) => ({ key: Number(opi), tree: [...stickyTree[opi], ...(mailboxDirByOPI?.[opi] || [])], treeTimestamp: Date.now() }))
writeIndexDB(rootTree, 'dirs', 'mailbox')
const _mapped = groupBy(rootTree, 'key')
return _mapped[opi_sn]?.[0]?.tree || []
}
/**
* 获取邮件列表
* @usage 邮件目录下的邮件列表
* @usage 订单的邮件列表
*/
export const queryEmailListAction = async ({ opi_sn = '', pagesize = 10, last_id = '', node = {}, } = {}) => {
const _params = {
vkey: 0,
vparent: 0,
order_source_type: 0,
// mai_senddate1: dayjs().subtract(1, 'year').startOf('year').format(DATE_FORMAT),
mai_senddate1: dayjs().subtract(180, 'days').format(DATE_FORMAT),
mai_senddate2: dayjs().format(DATEEND_FORMAT),
...omitEmpty({
...node,
opi_sn,
}),
}
_params.mai_senddate1 = dayjs(_params.mai_senddate1).format(DATE_FORMAT)
const cacheKey = isEmpty(_params.coli_sn) ? `dir-${node.vkey}` : `order-${node.vkey}`;
const { errcode, result } = await fetchJSON(`${API_HOST_V3}/mail_list`, _params)
const ret = errcode === 0 ? result : []
if (!isEmpty(ret)) {
const listids = [...new Set(ret.map(ele => ele.MAI_SN))];
writeIndexDB([{key: cacheKey, data: listids}], 'maillist', 'mailbox')
writeIndexDB(ret.map(ele => ({ data: {...ele, listKey: cacheKey }, key: ele.MAI_SN})), 'listrow', 'mailbox')
}
return ret;
}
export const searchEmailListAction = async ({opi_sn = '', mailboxtype = 'ALL', sender = '', receiver = '', subject = '', content=''}={}) => {
const formData = new FormData()
formData.append('opi_sn', opi_sn)
formData.append('mailboxtype', mailboxtype)
formData.append('sender', sender)
formData.append('receiver', receiver)
formData.append('subject', subject)
// formData.append('content', content)
const { errcode, result } = await postForm(`${API_HOST_V3}/mail_search`, formData)
const ret = errcode === 0 ? result : []
notifyMailboxUpdate({ type: 'maillist-search-result', query: [sender, receiver, subject].filter(s => s).join(' '), data: ret.map(ele => ({...ele, key: ele.MAI_SN, showFolder: true })) })
return ret;
}
const removeFromCurrentList = async (params) => {
const readRow0 = await readIndexDB(params.mai_sn_list[0], 'listrow', 'mailbox')
const listKey = readRow0?.data?.listKey || ''
if (listKey) {
const readCache = await readIndexDB(listKey, 'maillist', 'mailbox')
const updatedMailList = readCache.data.filter((mai_sn) => !params.mai_sn_list.includes(mai_sn))
writeIndexDB([{ key: listKey, data: updatedMailList }], 'maillist', 'mailbox')
notifyMailboxUpdate({ type: 'listrow', listKey, affectKeys: params.mai_sn_list })
}
}
const updateEmailKeyMap = { read: 'MOI_ReadState' };
const updateEmailKeyFun = {
read: async (params) => {
const readCache = await readIndexDB(params.mai_sn_list, 'listrow', 'mailbox')
const updateField = Object.keys(params.set).reduce((a, c) => ({ ...a, [updateEmailKeyMap[c]]: params.set[c] }), {})
writeIndexDB(
params.mai_sn_list.map((ele) => ({ data: { ...(readCache.get(ele)?.data || {}), ...updateField }, key: ele })),
'listrow',
'mailbox',
)
// 通知邮件列表数据更新
const listKey = readCache.get(params.mai_sn_list[0])?.data?.listKey || '';
const notificationPayload = { type: 'listrow', listKey, affectKeys: params.mai_sn_list }
notifyMailboxUpdate(notificationPayload)
},
processed: removeFromCurrentList,
delete: removeFromCurrentList
}
/**
* 更新邮件属性
*/
export const updateEmailAction = async (params = { opi_sn: 0, mai_sn_list: [], set: {} }) => {
if (isEmpty(params.mai_sn_list)) {
throw new Error('没有需要更新的邮件');
}
const { errcode, result } = await postJSON(`${API_HOST_V3}/mail_update`, params)
if (errcode === 0 ) {
for (const [key, value] of Object.entries(params.set)) {
const updateFun = updateEmailKeyFun[key] || (() => {});
updateFun(params)
}
}
getMailboxCountAction({ opi_sn: params.opi_sn });
return errcode === 0 ? result : {}
}
/**
* 获取邮件模板
* @param {object} params - Parameters for the email template request.
* @param {number} [params.coli_sn] - Customer order line item serial number.
* @param {number} [params.lgc] - Language code.
* @param {number} [params.opi_sn] - Order product item serial number.
* @param {string} [params.remind_type] - Type of reminder.
* @param {number} [params.remind_index] - Index of the reminder.
*/
export const getReminderEmailTemplateAction = async (params = { coli_sn: 0, lgc: 1, opi_sn: 0, remind_type: '', remind_index: 0 }) => {
const { errcode, result } = await fetchJSON(`${API_HOST_V3}/reminder_letter`, params)
const { html, bodyContent, bodyText } = parseHTMLString(result?.MailContent, true) ;
return errcode === 0 ? {...result, bodyContent }: {}
}
/**
* 保存邮件草稿
* @param {object} body - The body of the email.
* @param {boolean} [isDraft=false] - Whether the email is a draft.
*/
export const saveEmailDraftOrSendAction = async (body, isDraft = false) => {
const url = isDraft !== false ? `${API_HOST_V3}/email_draft_save` : `${EMAIL_HOST_v3}/sendmail`;
const { attaList=[], atta, content, ...bodyData } = body;
bodyData.ordertype = 227001;
const formData = new FormData();
Object.keys(bodyData).forEach(function (key) {
formData.append(key, bodyData[key] || '');
});
// 附件只传新增的
attaList.filter(ele => !ele.fullPath).forEach(function (item) {
formData.append('attachment', item);
});
const { errcode, result } = await postForm(url, formData);
return errcode === 0 ? (result || {}) : {}
};
/**
* 删除邮件附件
*/
export const deleteEmailAttachmentAction = async (ati_sn_list) => {
const { errcode, result } = await postJSON(`${API_HOST_V3}/mail_attachment_delete`, { ati_sn_list })
return errcode === 0 ? result : {}
};
export const queryHTOrderListAction = async (params) => {
const { errcode, result } = await fetchJSON(`${API_HOST}/query_order`, params)
return errcode !== 0 ? [] : result
}
export const queryOPIOrderAction = async (params) => {
const { errcode, result } = await fetchJSON(`${API_HOST}/getdvancedwlorder`, params)
return errcode !== 0 ? [] : result
};

@ -0,0 +1,25 @@
import { fetchJSON, postForm, postJSON } from '@/utils/request'
import { usingStorage } from '@/utils/usingStorage'
const WAI_SERVER_KEY = 'G-STR:WAI_SERVER'
const WAI_API_VER = '/api/v1'
export const postSendMsg = async (body) => {
const { waiServer } = usingStorage(WAI_SERVER_KEY)
// const { attaList = [], atta, content, ...bodyData } = body
// const formData = new FormData()
// Object.keys(bodyData).forEach(function (key) {
// formData.append(key, bodyData[key])
// })
// attaList.forEach(function (item) {
// formData.append('attachment', item)
// })
const { result } = await postJSON(`${waiServer}${WAI_API_VER}/messages/send`, body)
return result
}
export const fetchQRCode = (phone) => {
const { waiServer } = usingStorage(WAI_SERVER_KEY)
return fetchJSON(`${waiServer}${WAI_API_VER}/channels/qrcode`, { phone })
}

@ -1,6 +1,6 @@
.logo {
float: left;
height: 68px;
height: 60px;
margin: 0 6px 0 0;
background: rgba(255, 255, 255, 0.3);
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M22 20V7L20 3H4L2 7.00353V20C2 20.5523 2.44772 21 3 21H21C21.5523 21 22 20.5523 22 20ZM4 9H20V19H4V9ZM5.236 5H18.764L19.764 7H4.237L5.236 5ZM15 11H9V13H15V11Z"></path></svg>

After

Width:  |  Height:  |  Size: 262 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="32" height="32" fill="currentColor"><path d="M3 10H21V20.0044C21 20.5543 20.5551 21 20.0066 21H3.9934C3.44476 21 3 20.5552 3 20.0044V10ZM9 12V14H15V12H9ZM2 3.99981C2 3.44763 2.45531 3 2.9918 3H21.0082C21.556 3 22 3.44372 22 3.99981V8H2V3.99981Z"></path></svg>

After

Width:  |  Height:  |  Size: 326 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="32" height="32" fill="currentColor"><path d="M3 10H2V4.00293C2 3.44903 2.45531 3 2.9918 3H21.0082C21.556 3 22 3.43788 22 4.00293V10H21V20.0015C21 20.553 20.5551 21 20.0066 21H3.9934C3.44476 21 3 20.5525 3 20.0015V10ZM19 10H5V19H19V10ZM4 5V8H20V5H4ZM9 12H15V14H9V12Z"></path></svg>

After

Width:  |  Height:  |  Size: 347 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="32" height="32" fill="currentColor"><path d="M20.997 2.9918L20.9998 21.0082C20.9998 21.5447 20.5552 22 20.0066 22H3.9934C3.44495 22 3 21.556 3 21.0082V2.9918C3 2.45531 3.44468 2 3.99322 2H20.0036C20.5519 2 20.9969 2.44405 20.997 2.9918ZM9 13V9C9 8.44772 9.44772 8 10 8C10.5523 8 11 8.44772 11 9V13C11 13.5523 11.4477 14 12 14C12.5523 14 13 13.5523 13 13V9C13 7.34315 11.6569 6 10 6C8.34315 6 7 7.34315 7 9V13C7 15.7614 9.23858 18 12 18C14.7614 18 17 15.7614 17 13V8H15V13C15 14.6569 13.6569 16 12 16C10.3431 16 9 14.6569 9 13Z"></path></svg>

After

Width:  |  Height:  |  Size: 608 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="32" height="32" fill="currentColor"><path d="M14 13.5V8C14 5.79086 12.2091 4 10 4C7.79086 4 6 5.79086 6 8V13.5C6 17.0899 8.91015 20 12.5 20C16.0899 20 19 17.0899 19 13.5V4H21V13.5C21 18.1944 17.1944 22 12.5 22C7.80558 22 4 18.1944 4 13.5V8C4 4.68629 6.68629 2 10 2C13.3137 2 16 4.68629 16 8V13.5C16 15.433 14.433 17 12.5 17C10.567 17 9 15.433 9 13.5V8H11V13.5C11 14.3284 11.6716 15 12.5 15C13.3284 15 14 14.3284 14 13.5Z"></path></svg>

After

Width:  |  Height:  |  Size: 502 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M13.9999 18.9966H20.9999V20.9966H11.9999L8.00229 20.9991L1.51457 14.5113C1.12405 14.1208 1.12405 13.4877 1.51457 13.0971L12.1212 2.49053C12.5117 2.1 13.1449 2.1 13.5354 2.49053L21.3136 10.2687C21.7041 10.6592 21.7041 11.2924 21.3136 11.6829L13.9999 18.9966ZM15.6567 14.5113L19.1922 10.9758L12.8283 4.61185L9.29275 8.14738L15.6567 14.5113Z"></path></svg>

After

Width:  |  Height:  |  Size: 442 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M8.58564 8.85449L3.63589 13.8042L8.83021 18.9985L9.99985 18.9978V18.9966H11.1714L14.9496 15.2184L8.58564 8.85449ZM9.99985 7.44027L16.3638 13.8042L19.1922 10.9758L12.8283 4.61185L9.99985 7.44027ZM13.9999 18.9966H20.9999V20.9966H11.9999L8.00229 20.9991L1.51457 14.5113C1.12405 14.1208 1.12405 13.4877 1.51457 13.0971L12.1212 2.49053C12.5117 2.1 13.1449 2.1 13.5354 2.49053L21.3136 10.2687C21.7041 10.6592 21.7041 11.2924 21.3136 11.6829L13.9999 18.9966Z"></path></svg>

After

Width:  |  Height:  |  Size: 555 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="32" height="32" fill="currentColor"><path d="M2 3H21.1384C21.4146 3 21.6385 3.22386 21.6385 3.5C21.6385 3.58701 21.6157 3.67252 21.5725 3.74807L18 10L21.5725 16.2519C21.7095 16.4917 21.6262 16.7971 21.3865 16.9341C21.3109 16.9773 21.2254 17 21.1384 17H4V22H2V3Z"></path></svg>

After

Width:  |  Height:  |  Size: 343 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="32" height="32" fill="currentColor"><path d="M21.1384 3C21.4146 3 21.6385 3.22386 21.6385 3.5C21.6385 3.58701 21.6157 3.67252 21.5725 3.74807L18 10L21.5725 16.2519C21.7095 16.4917 21.6262 16.7971 21.3865 16.9341C21.3109 16.9773 21.2254 17 21.1384 17H4V22H2V3H21.1384ZM18.5536 5H4V15H18.5536L15.6965 10L18.5536 5Z"></path></svg>

After

Width:  |  Height:  |  Size: 394 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M12.6512 14.0654L11.6047 20H9.57389L10.9247 12.339L3.51465 4.92892L4.92886 3.51471L20.4852 19.0711L19.071 20.4853L12.6512 14.0654ZM11.7727 7.53009L12.0425 5.99999H10.2426L8.24257 3.99999H19.9999V5.99999H14.0733L13.4991 9.25652L11.7727 7.53009Z"></path></svg>

After

Width:  |  Height:  |  Size: 347 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M5 3C4.5313 3 4.12549 3.32553 4.02381 3.78307L2.02381 12.7831C2.00799 12.8543 2 12.927 2 13V20C2 20.5523 2.44772 21 3 21H21C21.5523 21 22 20.5523 22 20V13C22 12.927 21.992 12.8543 21.9762 12.7831L19.9762 3.78307C19.8745 3.32553 19.4687 3 19 3H5ZM19.7534 12H15C15 13.6569 13.6569 15 12 15C10.3431 15 9 13.6569 9 12H4.24662L5.80217 5H18.1978L19.7534 12Z"></path></svg>

After

Width:  |  Height:  |  Size: 455 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M4.02381 3.78307C4.12549 3.32553 4.5313 3 5 3H19C19.4687 3 19.8745 3.32553 19.9762 3.78307L21.9762 12.7831C21.992 12.8543 22 12.927 22 13V20C22 20.5523 21.5523 21 21 21H3C2.44772 21 2 20.5523 2 20V13C2 12.927 2.00799 12.8543 2.02381 12.7831L4.02381 3.78307ZM5.80217 5L4.24662 12H9C9 13.6569 10.3431 15 12 15C13.6569 15 15 13.6569 15 12H19.7534L18.1978 5H5.80217ZM16.584 14C15.8124 15.7659 14.0503 17 12 17C9.94968 17 8.1876 15.7659 7.41604 14H4V19H20V14H16.584Z"></path></svg>

After

Width:  |  Height:  |  Size: 565 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M22 13.3414C21.3744 13.1203 20.7013 13 20 13C16.6863 13 14 15.6863 14 19C14 19.7013 14.1203 20.3744 14.3414 21H3C2.44772 21 2 20.5523 2 20V4C2 3.44772 2.44772 3 3 3H21C21.5523 3 22 3.44772 22 4V13.3414ZM12.0606 11.6829L5.64722 6.2377L4.35278 7.7623L12.0731 14.3171L19.6544 7.75616L18.3456 6.24384L12.0606 11.6829ZM21 18H24V20H21V23H19V20H16V18H19V15H21V18Z"></path></svg>

After

Width:  |  Height:  |  Size: 460 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M22 13H20V7.23792L12.0718 14.338L4 7.21594V19H14V21H3C2.44772 21 2 20.5523 2 20V4C2 3.44772 2.44772 3 3 3H21C21.5523 3 22 3.44772 22 4V13ZM4.51146 5L12.0619 11.662L19.501 5H4.51146ZM21 18H24V20H21V23H19V20H16V18H19V15H21V18Z"></path></svg>

After

Width:  |  Height:  |  Size: 328 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M22 13.3414C21.3744 13.1203 20.7013 13 20 13C16.6863 13 14 15.6863 14 19C14 19.7013 14.1203 20.3744 14.3414 21H3C2.44772 21 2 20.5523 2 20V4C2 3.44772 2.44772 3 3 3H21C21.5523 3 22 3.44772 22 4V13.3414ZM12.0606 11.6829L5.64722 6.2377L4.35278 7.7623L12.0731 14.3171L19.6544 7.75616L18.3456 6.24384L12.0606 11.6829ZM19 22L15.4645 18.4645L16.8787 17.0503L19 19.1716L22.5355 15.636L23.9497 17.0503L19 22Z"></path></svg>

After

Width:  |  Height:  |  Size: 504 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M22 14H20V7.23792L12.0718 14.338L4 7.21594V19H14V21H3C2.44772 21 2 20.5523 2 20V4C2 3.44772 2.44772 3 3 3H21C21.5523 3 22 3.44772 22 4V14ZM4.51146 5L12.0619 11.662L19.501 5H4.51146ZM19 22L15.4645 18.4645L16.8787 17.0503L19 19.1716L22.5355 15.636L23.9497 17.0503L19 22Z"></path></svg>

After

Width:  |  Height:  |  Size: 372 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M20 7.23792L12.0718 14.338L4 7.21594V19H13V21H3C2.44772 21 2 20.5523 2 20V4C2 3.44772 2.44772 3 3 3H21C21.5523 3 22 3.44772 22 4V12H20V7.23792ZM19.501 5H4.51146L12.0619 11.662L19.501 5ZM20 18H23L19 22L15 18H18V14H20V18Z"></path></svg>

After

Width:  |  Height:  |  Size: 323 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="32" height="32" fill="currentColor"><path d="M3 3H21C21.5523 3 22 3.44772 22 4V20C22 20.5523 21.5523 21 21 21H3C2.44772 21 2 20.5523 2 20V4C2 3.44772 2.44772 3 3 3ZM20 7.23792L12.0718 14.338L4 7.21594V19H20V7.23792ZM4.51146 5L12.0619 11.662L19.501 5H4.51146Z"></path></svg>

After

Width:  |  Height:  |  Size: 340 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="32" height="32" fill="currentColor"><path d="M2.24283 6.85435L11.4895 1.3086C11.8062 1.11865 12.2019 1.11872 12.5185 1.30878L21.7573 6.85433C21.9079 6.9447 22 7.10743 22 7.28303V20C22 20.5523 21.5523 21 21 21H3C2.44772 21 2 20.5523 2 20V7.28315C2 7.10748 2.09218 6.94471 2.24283 6.85435ZM4 8.13261V19H20V8.13214L12.0037 3.33237L4 8.13261ZM12.0597 13.6983L17.3556 9.23532L18.6444 10.7647L12.074 16.3017L5.36401 10.7717L6.63599 9.2283L12.0597 13.6983Z"></path></svg>

After

Width:  |  Height:  |  Size: 531 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M2 5.5V3.9934C2 3.44476 2.45531 3 2.9918 3H21.0082C21.556 3 22 3.44495 22 3.9934V20.0066C22 20.5552 21.5447 21 21.0082 21H2.9918C2.44405 21 2 20.5551 2 20.0066V19H20V7.3L12 14.5L2 5.5ZM0 10H5V12H0V10ZM0 15H8V17H0V15Z"></path></svg>

After

Width:  |  Height:  |  Size: 320 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M21 3C21.5523 3 22 3.44772 22 4V20.0066C22 20.5552 21.5447 21 21.0082 21H2.9918C2.44405 21 2 20.5551 2 20.0066V19H20V7.3L12 14.5L2 5.5V4C2 3.44772 2.44772 3 3 3H21ZM8 15V17H0V15H8ZM5 10V12H0V10H5ZM19.5659 5H4.43414L12 11.8093L19.5659 5Z"></path></svg>

After

Width:  |  Height:  |  Size: 340 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M18.8032 8.4928C19.4663 8.81764 20.2118 9 21 9C21.3425 9 21.6769 8.96557 22 8.89998V20C22 20.5523 21.5523 21 21 21H3C2.44772 21 2 20.5523 2 20V4C2 3.44772 2.44772 3 3 3H16.1C16.0344 3.32311 16 3.65753 16 4C16 5.23672 16.449 6.36857 17.1929 7.24142L12.0606 11.6829L5.64722 6.2377L4.35278 7.7623L12.0731 14.3171L18.8032 8.4928ZM21 7C19.3431 7 18 5.65685 18 4C18 2.34315 19.3431 1 21 1C22.6569 1 24 2.34315 24 4C24 5.65685 22.6569 7 21 7Z"></path></svg>

After

Width:  |  Height:  |  Size: 539 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M16.1 3C16.0344 3.32311 16 3.65753 16 4C16 4.34247 16.0344 4.67689 16.1 5H4.51146L12.0619 11.662L17.1098 7.14141C17.5363 7.66888 18.0679 8.10787 18.6728 8.42652L12.0718 14.338L4 7.21594V19H20V8.89998C20.3231 8.96557 20.6575 9 21 9C21.3425 9 21.6769 8.96557 22 8.89998V20C22 20.5523 21.5523 21 21 21H3C2.44772 21 2 20.5523 2 20V4C2 3.44772 2.44772 3 3 3H16.1ZM21 1C22.6569 1 24 2.34315 24 4C24 5.65685 22.6569 7 21 7C19.3431 7 18 5.65685 18 4C18 2.34315 19.3431 1 21 1Z"></path></svg>

After

Width:  |  Height:  |  Size: 572 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M5 4.9967V7.9967H19V4.9967H5ZM4 2.9967H20C20.5523 2.9967 21 3.44442 21 3.9967V8.9967C21 9.54899 20.5523 9.9967 20 9.9967H4C3.44772 9.9967 3 9.54899 3 8.9967V3.9967C3 3.44442 3.44772 2.9967 4 2.9967ZM6 11.9967H12C12.5523 11.9967 13 12.4444 13 12.9967V15.9967H14V21.9967H10V15.9967H11V13.9967H5C4.44772 13.9967 4 13.549 4 12.9967V10.9967H6V11.9967ZM17.7322 13.7289L19.5 11.9612L21.2678 13.7289C22.2441 14.7052 22.2441 16.2882 21.2678 17.2645C20.2915 18.2408 18.7085 18.2408 17.7322 17.2645C16.7559 16.2882 16.7559 14.7052 17.7322 13.7289Z"></path></svg>

After

Width:  |  Height:  |  Size: 640 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="32" height="32" fill="currentColor"><path d="M10.9042 2.10025L20.8037 3.51446L22.2179 13.414L13.0255 22.6063C12.635 22.9969 12.0019 22.9969 11.6113 22.6063L1.71184 12.7069C1.32131 12.3163 1.32131 11.6832 1.71184 11.2926L10.9042 2.10025ZM13.7327 10.5855C14.5137 11.3666 15.78 11.3666 16.5611 10.5855C17.3421 9.80448 17.3421 8.53815 16.5611 7.7571C15.78 6.97606 14.5137 6.97606 13.7327 7.7571C12.9516 8.53815 12.9516 9.80448 13.7327 10.5855Z"></path></svg>

After

Width:  |  Height:  |  Size: 521 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="32" height="32" fill="currentColor"><path d="M10.9042 2.10025L20.8037 3.51446L22.2179 13.414L13.0255 22.6063C12.635 22.9969 12.0019 22.9969 11.6113 22.6063L1.71184 12.7069C1.32131 12.3163 1.32131 11.6832 1.71184 11.2926L10.9042 2.10025ZM11.6113 4.22157L3.83316 11.9997L12.3184 20.485L20.0966 12.7069L19.036 5.28223L11.6113 4.22157ZM13.7327 10.5855C12.9516 9.80448 12.9516 8.53815 13.7327 7.7571C14.5137 6.97606 15.78 6.97606 16.5611 7.7571C17.3421 8.53815 17.3421 9.80448 16.5611 10.5855C15.78 11.3666 14.5137 11.3666 13.7327 10.5855Z"></path></svg>

After

Width:  |  Height:  |  Size: 616 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M21 1.99669C6 1.99669 4 15.9967 3 21.9967C3.66667 21.9967 4.33275 21.9967 4.99824 21.9967C5.66421 18.6636 7.33146 16.8303 10 16.4967C14 15.9967 17 12.4967 18 9.49669L16.5 8.49669C16.8333 8.16336 17.1667 7.83002 17.5 7.49669C18.5 6.49669 19.5042 4.99669 21 1.99669Z"></path></svg>

After

Width:  |  Height:  |  Size: 368 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M6.93912 14.0328C6.7072 14.6563 6.51032 15.2331 6.33421 15.8155C7.29345 15.1189 8.43544 14.6767 9.75193 14.5121C12.2652 14.198 14.4976 12.5385 15.6279 10.4537L14.1721 8.99888L15.5848 7.58417C15.9185 7.25004 16.2521 6.91614 16.5858 6.58248C17.0151 6.15312 17.5 5.35849 18.0129 4.2149C12.4197 5.08182 8.99484 8.50647 6.93912 14.0328ZM17 8.99739L18 9.99669C17 12.9967 14 15.9967 10 16.4967C7.33146 16.8303 5.66421 18.6636 4.99824 21.9967H3C4 15.9967 6 1.99669 21 1.99669C20.0009 4.99402 19.0018 6.99313 18.0027 7.99402C17.6662 8.33049 17.3331 8.66382 17 8.99739Z"></path></svg>

After

Width:  |  Height:  |  Size: 663 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="32" height="32" fill="currentColor"><path d="M14 4.5V9C19.5228 9 24 13.4772 24 19C24 19.2727 23.9891 19.5428 23.9677 19.81C22.5055 17.0364 19.6381 15.119 16.313 15.0053L16 15H13.9999L14 19.5L6 12L14 4.5ZM8 4.5V7.237L2.92 12L7.999 16.761L8 19.5L0 12L8 4.5Z"></path></svg>

After

Width:  |  Height:  |  Size: 337 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="32" height="32" fill="currentColor"><path d="M14 4.5V9C19.5228 9 24 13.4772 24 19C24 19.2727 23.9891 19.5428 23.9677 19.81C22.5055 17.0364 19.6381 15.119 16.313 15.0053L16 15H13.9999L14 19.5L6 12L14 4.5ZM8 4.5V7.237L2.92 12L7.999 16.761L8 19.5L0 12L8 4.5ZM12 9.11646L8.92423 12L11.9999 14.8834L11.9999 13L16.0341 13.0003L16.3814 13.0065C17.6657 13.0504 18.9053 13.3165 20.0568 13.7734C18.5898 12.0749 16.4204 11 14 11H12V9.11646Z"></path></svg>

After

Width:  |  Height:  |  Size: 511 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="32" height="32" fill="currentColor"><path d="M11 20L1 12L11 4V9C16.5228 9 21 13.4772 21 19C21 19.2729 20.9891 19.5433 20.9676 19.8107C19.4605 16.9502 16.458 15 13 15H11V20Z"></path></svg>

After

Width:  |  Height:  |  Size: 254 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" height="1em" width="1em" fill="currentColor"><path d="M11 20L1 12L11 4V9C16.5228 9 21 13.4772 21 19C21 19.2727 20.9891 19.5428 20.9677 19.81C19.5055 17.0364 16.6381 15.119 13.313 15.0053L13 15H10.9999L11 20ZM8.99986 13H10.9999L13.0341 13.0003L13.3814 13.0065C14.6657 13.0504 15.9053 13.3165 17.0568 13.7734C15.5898 12.0749 13.4204 11 11 11H9V8.16125L4.20156 12L8.99992 15.8387L8.99986 13Z"></path></svg>

After

Width:  |  Height:  |  Size: 465 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M22 12C22 17.5228 17.5229 22 12 22C6.4772 22 2 17.5228 2 12C2 6.47715 6.4772 2 12 2V4C7.5817 4 4 7.58172 4 12C4 16.4183 7.5817 20 12 20C16.4183 20 20 16.4183 20 12C20 9.53614 18.8862 7.33243 17.1346 5.86492L15 8V2L21 2L18.5535 4.44656C20.6649 6.28002 22 8.9841 22 12Z"></path></svg>

After

Width:  |  Height:  |  Size: 371 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M22 12C22 17.5228 17.5229 22 12 22C6.4772 22 2 17.5228 2 12C2 6.47715 6.4772 2 12 2V4C7.5817 4 4 7.58172 4 12C4 16.4183 7.5817 20 12 20C16.4183 20 20 16.4183 20 12C20 9.25022 18.6127 6.82447 16.4998 5.38451L16.5 8H14.5V2L20.5 2V4L18.0008 3.99989C20.4293 5.82434 22 8.72873 22 12Z"></path></svg>

After

Width:  |  Height:  |  Size: 383 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12C22 17.5228 17.5228 22 12 22ZM16.8201 17.0761C18.1628 15.8007 19 13.9981 19 12C19 8.13401 15.866 5 12 5C8.13401 5 5 8.13401 5 12C5 15.866 8.13401 19 12 19C13.0609 19 14.0666 18.764 14.9676 18.3417L13.9928 16.5871C13.3823 16.8527 12.7083 17 12 17C9.23858 17 7 14.7614 7 12C7 9.23858 9.23858 7 12 7C14.7614 7 17 9.23858 17 12H14L16.8201 17.0761Z"></path></svg>

After

Width:  |  Height:  |  Size: 531 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M18.5374 19.5674C16.7844 21.0831 14.4993 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12C22 14.1361 21.3302 16.1158 20.1892 17.7406L17 12H20C20 7.58172 16.4183 4 12 4C7.58172 4 4 7.58172 4 12C4 16.4183 7.58172 20 12 20C14.1502 20 16.1022 19.1517 17.5398 17.7716L18.5374 19.5674Z"></path></svg>

After

Width:  |  Height:  |  Size: 421 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M1.94619 9.31543C1.42365 9.14125 1.41953 8.86022 1.95694 8.68108L21.0431 2.31901C21.5716 2.14285 21.8747 2.43866 21.7266 2.95694L16.2734 22.0432C16.1224 22.5716 15.8178 22.59 15.5945 22.0876L12 14L18 6.00005L10 12L1.94619 9.31543Z"></path></svg>

After

Width:  |  Height:  |  Size: 334 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M21.7267 2.95694L16.2734 22.0432C16.1225 22.5716 15.7979 22.5956 15.5563 22.1126L11 13L1.9229 9.36919C1.41322 9.16532 1.41953 8.86022 1.95695 8.68108L21.0432 2.31901C21.5716 2.14285 21.8747 2.43866 21.7267 2.95694ZM19.0353 5.09647L6.81221 9.17085L12.4488 11.4255L15.4895 17.5068L19.0353 5.09647Z"></path></svg>

After

Width:  |  Height:  |  Size: 399 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" fill="currentColor"><path d="M13 14H11C7.54202 14 4.53953 15.9502 3.03239 18.8107C3.01093 18.5433 3 18.2729 3 18C3 12.4772 7.47715 8 13 8V3L23 11L13 19V14Z"></path></svg>

After

Width:  |  Height:  |  Size: 253 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" fill="currentColor"><path d="M13 14H11C7.54202 14 4.53953 15.9502 3.03239 18.8107C3.01093 18.5433 3 18.2729 3 18C3 12.4772 7.47715 8 13 8V2.5L23.5 11L13 19.5V14ZM11 12H15V15.3078L20.3214 11L15 6.69224V10H13C10.5795 10 8.41011 11.0749 6.94312 12.7735C8.20873 12.2714 9.58041 12 11 12Z"></path></svg>

After

Width:  |  Height:  |  Size: 381 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M13 6V21H11V6H5V4H19V6H13Z"></path></svg>

After

Width:  |  Height:  |  Size: 130 B

File diff suppressed because it is too large Load Diff

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

Loading…
Cancel
Save