liu
2026-09-29 7a6351a1fa5fc6e67b55c475bcd253d6d3e5d68f
分支
用户 liu <2021943741@qq.com>
星期二, 九月 29, 2026 13:48 +0800
提交者 liu <2021943741@qq.com>
星期二, 九月 29, 2026 13:48 +0800
提交7a6351a1fa5fc6e67b55c475bcd253d6d3e5d68f
目录 35b6611d892b94b287807b9ef3386171b472ef92 目录 | zip | gz
上一版本 07aab8bb335132d5dc56f2b000301457079e8539 查看 | 对比
feat(wxcp): 新增企业微信模块页面与扫码登录入口

一、活动管理
- 列表:按标题/状态/推送状态检索,行内可编辑、发布、推送、看二维码与统计
- 新建/编辑:标题、地点、活动时间、报名窗口、名额上限(0 表示不限)
- 推送弹窗:选择推送范围后调用推送接口,失败时把企业微信返回的原因直接展示
- 二维码弹窗:以 Blob 方式取回图片(img 标签带不了认证头),支持下载与复制报名链接
- 统计弹窗:有效报名、未签到、已签到、已取消、报名进度、签到率,
以及按部门 / 按日期 / 按来源三组分布;不限名额时不显示进度条
- 报名记录:检索、签到、取消报名,并可查看成员提交的参与说明与上传的图片附件

二、通知管理
- 列表、新建/编辑、发布、推送、撤回
- 推送弹窗复用同一套推送范围选择器

三、推送范围选择器(components/push-scope-picker.vue)
- 支持全员 / 指定部门 / 指定成员三种范围
- 部门与成员数据实时取自企业微信通讯录,做了「按需加载 + 只加载一次」的缓存,
避免每次打开弹窗都打企业微信接口(通讯录接口有频率限制)
- 切换范围时清空已选目标,防止把成员账号当成部门 ID 提交

四、登录入口
- 登录页新增「企业微信登录」按钮,复用现有微信图标
- 点击后取授权地址并整页跳转到企业微信扫码页
- redirectUri 用 location.origin 拼接,并预先 encode 一次 type 参数
(配合 social-login 页的 getUrlValue 使用,否则回跳后 type 会丢失)

五、其他
- 根 package.json 补声明 axios(vite.config.ts 的 optimizeDeps.include 需要它,
但根从未声明,会导致 Vite 依赖预构建失败、dev server 崩溃)
- pnpm-lock.yaml 随之更新;其中 @lezer/highlight、style-mod、typed-array-byte-offset
三个传递依赖被 pnpm 顺带做了补丁级升级,与本次功能无关

Co-Authored-By: Claude <noreply@anthropic.com>
已修改3个文件
已添加16个文件
2579 ■■■■■ 文件已修改
package.json 1 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
pnpm-lock.yaml 44 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
src/api/wxcp/activity.ts 254 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
src/api/wxcp/member.ts 58 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
src/api/wxcp/notice.ts 94 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
src/views/_core/authentication/login.vue 58 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
src/views/wxcp/activity/data.ts 240 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
src/views/wxcp/activity/index.vue 266 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
src/views/wxcp/activity/modules/form.vue 116 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
src/views/wxcp/activity/modules/push-modal.vue 105 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
src/views/wxcp/activity/modules/qrcode-modal.vue 148 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
src/views/wxcp/activity/modules/signup-list.vue 242 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
src/views/wxcp/activity/modules/stats-modal.vue 163 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
src/views/wxcp/components/push-scope-picker.vue 172 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
src/views/wxcp/data.ts 80 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
src/views/wxcp/notice/data.ts 118 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
src/views/wxcp/notice/index.vue 204 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
src/views/wxcp/notice/modules/form.vue 116 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
src/views/wxcp/notice/modules/push-modal.vue 100 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史