# zmp_main_code **Repository Path**: goodzhuye/zmp_main_code ## Basic Information - **Project Name**: zmp_main_code - **Description**: 集合前后端+手机端所有代码 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-05-07 - **Last Updated**: 2026-05-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 项目完成记录 说明:本文件按时间倒序记录,新增条目请放最上面。 ## 2026-04-20 万店掌巡店报表详情同步 - 万店掌同步链路新增 `open.shopweb.liveCheck.statisticsDetailPageForCustomer` 分页抓取与落库,沿用“昨日 / 近7天 / 本月到昨日”三个时间窗口任务。 - 新增独立明细表 `wdz_live_check_statistics_detail`,保存问题明细、检查项、图片/整改图片 JSON 与原始返回,避免污染原有巡店任务详情表。 - 同步汇总文案新增“巡店报表明细”数量,单元测试补充客户端请求与去重键生成校验。 ## 2026-04-07 任务模板更新自动过滤闭店门店 - `TaskTemplateService.Update` 在门店模式下保存模板前,若提交的 `storeIds` 里夹带闭店门店,会自动剔除闭店门店 ID 后再落库,不再直接因闭店门店报错。 - `TaskTemplateService.Add` 继续保留原有闭店校验,新增模板时命中闭店门店仍会直接拦截,避免把脏配置写进去。 - `Admin.NET.Test` 的 UI 基类去掉了写死 `localhost:8888` 和假 token,新增 `ADMIN_UI_TEST_BASE_URL / ADMIN_UI_TEST_ACCOUNT / ADMIN_UI_TEST_PASSWORD` 环境变量,默认走 `/api/goview/sys/login` 取 token 后再打开页面,并统一改为 `ChromeDriver` 使用谷歌浏览器,适配 nginx 代理地址测试。 ## 2026-04-03 门店月度损益表未完成门店导出 - `storeProfitLossMonthly` 列表页新增“未完成门店”按钮,支持按当前页签类型和月份弹出独立对话框查看未完成门店。 - 新增独立组件 `Web/src/views/shop_operation/storeProfitLossMonthly/component/unfinishedStoreDialog.vue`,可查询并导出未完成门店清单。 ## 2026-04-03 PC 首页部件加载修复 - `Web/src/views/home/index.vue` 去掉首页对 `widgets/index.vue` 的二次异步加载,改为随首页路由一并加载,规避开发环境偶发 `Failed to fetch dynamically imported module` 导致首页白屏。 - `Web/src/views/home/widgets/index.vue` 恢复首页布局“编辑/保存”按钮的可见性与切换状态,自定义布局入口重新可用。 ## 2026-04-03 门店全生命周期共享库租户隔离 - `StoreProjectSite`、`StoreStageTask`、`StoreTaskFileLink`、`StoreTaskLog`、`StoreProjectStageData`、`StoreStageConfig`、`StoreStageTemplate` 及其节点/任务定义实体统一接入 `tenant_id`,共享库场景下改为按行级租户隔离。 - `/api/storeProjectSite/page` 及关联生命周期查询现在通过实体租户过滤生效,列表统计 `dynamicList` 也随当前租户过滤,不再扫全库。 - 门店项目新增/编辑链路、模板新增/克隆链路、阶段配置导入/新增链路补充显式 `TenantId` 赋值,避免批量导入、批量插入时写出空租户数据。 - 新增 `doc/sql/20260403_store_lifecycle_tenant_id_pgsql.sql`,为生命周期核心表补充 `tenant_id` 字段、回填历史数据,并把模板编码唯一键调整为 `tenant_id + template_code`。 ## 2026-04-02 外部工具出入库任务控制台 - `ExternalToolsMovTrx` 模块从脚手架 CRUD 改为外部任务控制台,前端页面支持触发执行、取消任务、最近执行记录、单次详情、健康检查和日志查看。 - 财务金蝶出入库任务改为固定 3 个文件地址配置:汇总文件、工具文件、明细文件;配置保存为数据库中的全局共享最近一次记录。 - 财务金蝶出入库任务页面的 3 个文件地址输入框改为单文件上传控件,上传后仅保留最近一次文件地址;触发第三方时相对地址优先按当前站点请求域名补全。 - 财务金蝶出入库任务新增 3 个“提交文件名”字段,上传时记录原始文件名并持久化;第三方 JSON 的 `filename` 改用该名称,不再使用 `/upload/...` 的随机文件名。 - 财务金蝶出入库任务页布局收敛为“任务配置 + 运行概览 + 最近日志”,不再直接展示最近执行记录和单次详情;最近日志出现“三个步骤执行完成”时,页面会将本次任务识别为已结束并停止轮询。 - 后端新增第三方 pipeline 代理能力,统一处理文件相对路径转绝对 URL、第三方鉴权、错误返回和运行状态查询。 - 新增 `doc/sql/20260402_external_tools_mov_trx_pipeline_config_pgsql.sql`,为 `external_tools_mov_trx` 增加 3 个文件地址与执行参数字段。 - 新增 `doc/sql/20260402_external_tools_mov_trx_pipeline_file_name_pgsql.sql`,为 `external_tools_mov_trx` 增加 3 个提交文件名字段。 ## 2026-04-02 任务模板周期规则重构 - 任务模板周期配置升级为 `scheduleConfig v2`,拆成两层:`trigger` 负责“什么时候生成任务实例”,`executionWindow` 负责“任务实例允许在什么时间范围内执行完成”。 - `trigger` 支持每天多个触发时点、每周按周几+多个时点触发、每月按几号/月末+多个时点触发;`executionWindow` 支持基于“周期开始/cycleStart”或“周期结束/cycleEnd”配置偏移天数和具体时刻。 - 历史模板保持兼容:后端双读 `v1/v2`;旧版 `每天/每24小时` 继续兼容原 `executeTime`,旧版 `每周/每月` 按整周/整月执行窗口兜底解释;前端再次保存时统一升级写回 `v2`。 - 循环任务生成新增触发上下文:任务 `extra_data` 记录 `ScheduleVersion`、`TriggerKey`、`TriggerTime`、`TriggerLabel`、`CycleStartDate`、`CycleEndDate`,用于多触发场景去重和追溯;手工“立即生成任务”走 `isManualTrigger=true` 单独补发当前批次。 - `JobGenerateRecurringTasks` 现按触发点窗口扫描模板,建议外部调度改为“每 5 分钟执行一次”;如果外部仍然只在每天凌晨跑一次,那“每天几次 / 每周几点 / 每月几点”的规则不会真正生效。 ## 2026-04-02 任务模板门店闭店校验 - `TaskTemplateService` 新增门店模式闭店校验:保存模板时按 `StoreBase.OrgId == 配置门店ID` 检查,命中 `StoreBase.Status = 130` 的闭店门店直接拦截。 - 任务模板生成门店任务时增加同规则兜底,历史配置里已经闭店的门店会被跳过,不再继续生成任务。 - 任务模板门店配置规则补充说明:门店模式不能只认 `sys_org`,还必须检查 `StoreBase` 里的闭店状态。 - 任务模板门店配置新增 `assigneesConfig.isAllStores` 标记;开启后不再固化当前门店ID列表,生成任务时实时按 `StoreBase` 抽取全部营业中门店,自动兼容新门店和移除/闭店门店。 - 指定门店模式继续保留;仅在 `isAllStores = false` 时按 `storeIds` 固定发送。 ## 2026-04-01 任务列表时间筛选默认范围调整 - `WorkWeixin/taskList` 任务实例页“开始时间”默认范围由“当月”改为“近3个月”,实际取值为“上个月月初到下个月月底”。 - 任务实例页开始时间、结束时间日期范围选择器新增快捷项:`近3个月`、`上个月`、`当月`、`下个月`。 ## 2026-04-01 门店月度损益表门店实际收入口径修复 - 修复 `StoreProfitLossMonthlyService` 在“门店实际”(`DataType=3`)场景仍错误套用预估营业额的问题。 - 门店实际的“营业净收入”改为汇总 `StatShopAchievedTbl.TotalIncome`,对齐门店当月实际营业额。 - 门店实际的“营业收入”改为汇总 `StatShopAchievedTbl.OriginalIncome`,并据此反推“销售折扣”。 - 门店实际的“堂食来客数”“堂食客单价”“营业净收入-堂食/外卖/其他”改为按 `StatShopAchievedTbl` 对应月份数据自动回填,不再沿用上月客单价或手填拆分。 - 门店实际编辑弹窗隐藏“营业净收入-堂食/外卖/其他占比”输入项,提交时不再校验这三项占比合计 100%。 ## 2026-03-31 薪福通同步超时兜底 - `ApiXftUtil` 为薪福通 SDK 调用补充超时/取消重试、耗时日志和更明确的异常信息,专门兜底 `A task was canceled` 这类烂异常。 - 组织/员工/岗位同步分页从 `1000` 下调到 `200`,减少单次请求体积,降低薪福通接口超时概率。 - 组织/员工/岗位/角色同步在接口失败时直接中止,不再误打印“同步完成,共处理 0 条记录”。 ## 2026-03-31 手机端股东认领接口脱敏 - `/api/storeShareholder/claimablePage` 新增终端识别;检测到 `APP + UniAppH5` 访问时,返回手机端精简字段。 - 手机端返回仅保留认领页实际使用的股东姓名、联系方式、推荐信息等字段,不再暴露身份证、银行卡、投资明细、创建修改人等敏感数据。 ## 2026-03-31 PC 股东保存判重 - `/api/storeShareholder/add`、`/api/storeShareholder/update` 保存股东信息时补充统一判重。 - 录入了身份证时按身份证唯一校验;未录入身份证时按股东姓名唯一校验;修改时自动排除当前记录。 ## 2026-03-31 手机端股东认领推荐人手机 - `uni-app` 股东认领弹窗在备注输入框下方新增“推荐人手机”输入框,提示文案为“请填写推荐人手机号,如不清楚可留空”,字段非必填。 - 手机端认领接口补充可选 `recommenderPhone` 参数,提交时有值才写入推荐人手机号,不再默认覆盖为当前登录人手机号。 ## 2026-03-31 手机端股东认领弹窗文案 - `uni-app` 股东认领弹窗在备注输入框上方补充显示电话号码,优先展示联系人手机号列表。 - 认领备注占位文案和空校验提示统一改为 `(请输入股东来源:如林红推荐)`。 ## 2026-03-30 手机端股东认领页 - `uni-app` 新增股东认领页面,按当前账号可见门店展示“外部且未认领”的股东,并支持按门店筛选。 - 点击“认领”后弹出备注输入框,备注必填,提交时自动绑定当前操作者并写入认领时间。 - 后端新增手机端待认领分页接口与认领接口,并补充 `store_shareholder.claim_user_id`、`claimed_time` PGSQL 迁移脚本。 - 工作台增加“股东认领”入口兜底配置,避免手机端漏配菜单时没有入口。 - 补充 `sys_menu` 手机端 `AppConfig` 配置脚本;已有“股东管理”菜单时会直接开启手机端入口,避免 H5 页面代码已上线但工作台菜单不显示。 ## 2026-03-30 Excel 导入临时文件并发修复 - 修复 `CommonUtil.ImportExcelDataAsync` 依赖临时文件路径导致的导入问题,改为直接从上传流解析 Excel。 - 同时规避 OSS/Minio 场景下“文件已上传到对象存储,但本地路径不存在”以及 PGSQL/Npgsql `A command is already in progress` 两类报错。 ## 2026-03-30 股东导入唯一键规则调整 - 股东导入改为优先按身份证匹配,只有未填写身份证时才按姓名匹配,避免同名不同人被误合并。 - 导入文件内同名多身份证、同身份证多姓名、系统内同名身份证冲突等场景会直接标记失败,并在错误信息列写明具体原因。 - `doc/xls/股东信息.xls` 表头已对齐股东导入模板字段,可直接作为导入源文件使用;最终是否成功仍取决于门店、内部人员及历史数据匹配结果。 ## 2026-03-20 移动端任务阶段数据查询修复 - uni-app 任务详情页、编辑页获取阶段快照时改为对齐 PC 端查询规则。 - 1100 申请阶段不再携带 `node_id/node_code`,避免误查节点快照导致无数据。 - 其它阶段查询阶段快照时仅携带 `node_code`,规避 `node_id` 过滤过严导致的空结果。 - uni-app `1200` 工程评估详情页在快照为空时改为展示默认模板内容,不再整块空白。 - uni-app 门店详情生命周期子任务列表补充状态小图标,已完成/进行中状态更直观,并优化卡片层次与按钮尺寸。 - uni-app 节点任务未绑定阶段页面时,任务详情页和编辑页不再显示“阶段数据”空卡片。 - 门店列表 `stage_code` 改为返回一级主阶段名称,不再直接返回当前二级阶段名称。 - uni-app 首页“我的任务”点击改为优先按 `taskId` 直达节点任务详情,避免误拿门店ID导致详情加载失败。 - 首页“我的任务”补充门店类型、数据来源、选址门店名称,并复用 `Stage1100ApplyFormModel` 解析申请阶段快照 JSON。 - uni-app 首页“我的任务”卡片改为仅展示一个门店名称,并优化点击态、箭头与信息层次。 - uni-app 节点任务详情页改为优先按 `taskId` 调用 `taskDetailById`,避免带了 `storeId` 时误走项目详情接口导致查不到对应节点任务。 - uni-app 首页“我的任务”补充可直开详情的 `taskData`,点击时改为优先透传整包节点任务数据,避免详情页首屏因任务接口空结果而打不开。 ## 2026-02-13 门店订货物料导出 - 企微门店订货物料新增导出按钮,导出当前筛选全部数据。 - 导出列改为固定 12 列并输出物料分类中文名。 - 导出数据来自分页结果映射,字段对齐列表用量与库存信息。 - 导出按钮在无数据时禁用,避免导出空文件。 - 导出请求不带物料分类,后端导出也强制忽略物料分类筛选。 ## 2026-02-13 门店地图 - 门店管理新增“门店地图”选项卡,省/市/门店三级聚合展示。 - 门店地图支持点击下钻与门店明细弹窗展示。 - 门店地图接口新增缓存(默认 5 分钟)并受当前筛选条件影响。 - 门店地图前端改用 vue-tianditu 组件加载,统一由组件加载天地图脚本。 ## 2026-02-10 API 构建 NuGet 源修复 - NuGet 镜像源调整为华为云,修复阿里云 404 导致的 NU1301 还原失败。 ## 2026-02-05 PC 任务执行提交 - 任务列表编辑弹窗新增“执行提交”面板,支持文本/数字/选项/附件执行项录入。 - 执行提交前端校验必填与附件数量,并接入 `/taskExecution/submitExecution` 接口。 - 附件上传统一走 PublicDiy 上传,提交时自动转换为附件 payload。 - 任务列表“提交”按钮仅在任务状态为待执行/执行中或管理员可见。 ## 2026-02-04 任务列表权限与人员任务名称 - 人员模式任务列表支持按执行人读取任务(TaskAssignee 执行人兜底过滤)。 - 任务模板生成人员任务时使用用户真实姓名填充。 - 任务列表管理员账号可查看全部任务,不再受门店/执行人过滤限制。 - 任务详情支持移除指派人,并允许后端清空指派人信息。 - 任务模板列表操作列收拢复制/删除到“更多”,新增单个模板启用/停用按钮。 ## 2026-02-04 任务模板复制 - 任务模板列表新增“复制”按钮,载入模板详情并以“ - 副本”命名新模板。 - 复制模式下默认可编辑并走新增流程,便于快速调整保存。 ## 2026-02-03 API 构建 NuGet 源调整 - 新增 `Admin.NET/NuGet.Config` 并开启 `restoreIgnoreFailedSources`。 - 移除 404 的镜像源,避免还原阶段 NU1301 阻断。 - 还原阶段屏蔽 NuGet 漏洞审计警告(NU1901-NU1904),避免 `dotnet watch` 反复报警。 ## 2026-02-03 企微跳转 open_stack 规则 - 企微消息跳转改为后端规则生成 open_stack 链路,不再使用 WorkWeiWinRouteMap 配置。 - H5/PC 统一通过 open_stack 生成多级跳转路径,兜底回首页。 ## 2026-02-03 项目新增企微提醒修复 - 门店选址项目新增时,消息入队使用任务插入后的 Id,避免 bizId=0 导致未入队。 ## 2026-02-02 门店阶段配置角色校验 - 角色配置表格变更同步表单字段,提交不再误报“角色需要配置”。 ## 2026-02-02 通知公告企微队列推送 - 公告发布后写入企微消息队列(work_wei_xin_msg_send_tbl,IsSend=-1),通过调度任务统一发送,避免并发重复。 - 企微消息新增业务幂等字段 BizType/BizId,并提供 PGSQL 迁移语句(手动执行)。 - 新增业务跳转接口(BizRedirect),按设备识别跳转 H5/PC,识别失败给选择页并写入 Cookie(自动识别也会写入)。 - WorkWechat 配置新增 H5/PC 跳转地址,公告点击 URL 可按配置替换。 ## 2026-01-31 任务执行附件提交修复 - TaskExecution 实体 `attachments` 字段标记为 jsonb + IsJson,避免提交附件时报 Npgsql TextHandler/JArray 写入错误。 - 任务执行提交接口可正常写入附件 JSON 数组,前端提交不再报错。 ## 2026-01-31 通知公告接收人员明细弹窗 - 通知公告列表接收/已读/未读人数改为可点击,弹窗展示姓名、部门、职位。 - 新增接收人员分页接口,支持按已读/未读筛选。 ## 2026-01-31 通知公告接收人解析抽取 - 通知公告接收人解析抽为通用服务,支持部门/用户/职位/角色范围解析并去重。 - 通知公告范围与解析方法补充说明注释,便于复用与维护。 ## 2026-01-29 预估排班人员关联表独立 - 预估排班人员管理改为使用独立关联表 `store_staff_schedule_user`,不再写入 `sys_user_ext_org`。 - PGSQL 迁移脚本:`doc/sql/20260129_store_staff_schedule_user_pgsql.sql`。 ## 2026-01-29 门店进销存月汇总同步 - 新增门店进销存月汇总同步任务,按门店拉取 MT 月表并写入 PG 单表。 - 新增 `stat_shop_stock_in_out_summary_tbl` 实体,唯一键 `org_id + goods_code + date_num`。 - PGSQL 建表语句由任务输出提供(需手动执行)。 ## 2026-01-28 用户手动锁定 - 用户管理新增“手动锁定”开关,锁定后禁止登录并强制下线。 - 登录逻辑新增手动锁定校验,账号/手机号/企微登录统一拦截。 - 企微登录返回明确的账号冻结/手动锁定提示。 - PGSQL 迁移脚本:`doc/sql/20260128_sys_user_manual_lock_pgsql.sql`。 ## 2026-01-27 通知公告可见范围 - 通知公告可见范围支持部门/用户/职位,发布按范围生成接收人。 - 通用人员选择器加入职位列表与选择区,支持输出职位范围。 - PGSQL 迁移脚本:`doc/sql/20260127_sys_notice_scope_pgsql.sql`。 ## 2026-01-27 职位管理分页与在职人员弹窗 - 职位列表改为服务端分页查询,避免一次性加载导致卡顿。 - 职位列表新增在职人数计数字段,展示总人数但不再加载人员明细集合。 - 人员明细改为点击弹窗,仅展示在职人员账号并支持分页查看。 ## 2026-01-27 通知公告下架与查询区布局 - 通知公告新增撤回(下架)接口,发布会清空撤回时间,用户侧仅展示已发布公告并过滤未发布。 - 通知公告改为租户隔离,发布仅推送同租户用户,H5 改用接收列表展示商户内公告。 - H5 通知公告支持详情查看、未读红点与已读回写,公告增加接收/已读统计并在管理端详情展示。 - PC 首页部件新增公告卡片,支持查看公告详情弹窗与未读提示。 - 通知公告列表增加“下架”操作,并让“查询/重置/新增”按钮同排展示。 - 通知公告查询区改为单行不换行布局,保证搜索条件与按钮同排。 - 文件库查询区改为单行不换行布局,保持搜索条件与操作按钮同排。 - Vite 预构建加入 wangeditor 依赖,避免开发环境动态模块加载异常。 ## 2026-01-26 用户管理人员明细弹窗 - 系统用户列表账号/姓名改为弹出人员详情对话框展示。 - 新增人员详情弹窗组件,分区展示基础/联系/档案/登录信息。 ## 2026-01-24 在线用户最后访问 & 登录日志 - `sys_online_user` 新增 `last_access_time` 并在 SignalR 心跳触发更新,在线用户列表新增“最后访问”列。 - 在线用户清理任务改为按最后访问时间超时清理(默认 30 分钟),同步回填登录日志离线时间与类型。 - 新增用户登录日志表 `sys_user_login_log`(登录/离线时间、离线类型、终端来源等)。 - PGSQL 迁移脚本:`doc/sql/20260124_sys_online_user_last_access_login_log_pgsql.sql`。 ## 2026-01-23 在线用户终端/来源识别 - 在线用户记录新增登录终端(LoginMode)与来源(ClientSource),token 默认写入后台Web/PC,企微H5登录写入 uni-app H5/APP。 - 在线用户列表新增终端/来源列与筛选/排序,支持按登录时间等排序。 - uni-app H5 接入 SignalR 在线用户通道,token 变更时自动重连。 - PGSQL 迁移脚本:`doc/sql/20260123_sys_online_user_client_source_pgsql.sql`。 ## 2026-01-22 薪福通员工扩展 & 岗位同步 - 新增 `sys_user_xft_ext` 扩展表,记录薪福通员工扩展字段(证件/地址/国籍/业务分组等),员工同步时写入并按 `user_id` 维护。 - 员工同步补齐 `SysUser.Address`(联系地址四段拼接)与 `IdCardNum`,并将 `individualEmail` 等仅落扩展表。 - 新增岗位同步任务,拉取岗位接口写入 `SysPos`,记录 `orderNumber/sequenceNumber/remark` 等扩展字段(对齐职位接口文档字段)。 - `SysPos` 增加薪福通岗位排序号/流水号/备注字段,PGSQL 脚本:`doc/sql/20260122_sys_pos_xft_position_fields_pgsql.sql`(`orderNumber` 按 STRING 存储)。 - 新增薪福通字段说明枚举:`XftCertificateTypeEnum`、`XftHouseholdTypeEnum`。 - 调度任务补齐 `JobSyncPositionAsync`,测试接口追加岗位接口查询输出(不写库)。 - 员工同步 `posCode` 优先匹配 `sys_pos`(`XftPosCode/Code`),用于回填 `SysUser.PosId`。 - 新增扩展表 PGSQL 脚本:`doc/sql/20260122_sys_user_xft_ext_pgsql.sql`。 - 若登录后访问 `/api/sysAuth/userInfo` 报 `xft_pos_id` 不存在,请先执行 `doc/sql/20260121_sys_pos_xft_columns_pgsql.sql`。 ## 2026-01-21 薪福通职位同步 - `SysPos` 增加薪福通外部映射字段(岗位/职位 id 与 code),员工同步可落库并绑定 `SysUser.PosId`。 - 员工 DTO 补充 `posName/jobName` 预留字段,职位匹配优先按外部 id/code,其次按名称字符串匹配。 - 新增职位字段测试方法(按姓名查员工并打印职位相关字段 + 原始 `staffBasicInfo`),不写库。 - PGSQL 迁移脚本:`doc/sql/20260121_sys_pos_xft_columns_pgsql.sql` 增加 `sys_pos` 薪福通岗位/职位字段。 ## 2026-01-20 预估排班人员范围修正 - 门店人员管理与排班详情默认拉取门店及下级组织人员,覆盖子组织范围。 - 保存人员管理时按门店组织树识别基础人员,避免子组织人员被误判为扩展人员。 ## 2026-01-20 预估排班汇总列表优化 - 汇总列表表头列支持排序(服务端排序)。 - 修复默认排序触发 `sort-change` 导致的重复请求。 - 汇总列表新增导出功能,按列表第二行表头导出本页数据。 - 汇总列表底部新增符合筛选条件的汇总行,按分页前数据汇总展示。 - 汇总列表月份范围筛选参数统一格式,避免筛选失效。 - 汇总行改为后端分页接口汇总并追加到列表末尾,前端不再二次请求。 - 修复汇总行SQL语法错误(分页/汇总查询)。 - 分页查询改为实体分页后映射输出,规避 year_month 字段映射字典缺失报错。 - YearMonth 输出改为字符串并显式 SqlFunc.ToString,规避 yearmonth 映射缺失。 - 预估排班汇总表 `year_month` 改为 int(YYYYMM),PG 迁移脚本:`doc/sql/20260120_store_estimated_schedule_wage_year_month_int_pgsql.sql`。 - 预估排班明细(DIY) 汇总读取适配 `year_month` int,避免 integer/text 比较报错。 ## 2026-01-19 预估排班汇总列表 - 新增预估排班计划表汇总列表页,支持门店多选与月份范围筛选,点击行跳转对应明细。 - 预估排班表分页接口增加门店多选与月份范围过滤(兼容 YYYY-MM / YYYYMM)。 - 汇总列表新增“新增”按钮与门店名称点击查看明细,后端分页接口按可见门店范围过滤。 - 汇总列表移除周营业额/周工资明细列,行点击不再打开明细,仅保留门店名称与操作区查看。 - 汇总列表表头第一行标题改为居中展示。 - 汇总列表表头第二行标题改为居中展示。 - 汇总列表创建/更新时间合并为同一列,单元格内换行显示。 - 汇总列表时间列格式统一到分钟级并收敛行距,减少列宽跳动。 - 汇总列表基础信息列固定,横向滚动时门店名称与月份保持不动。 - 汇总列表新增未填写预估金额天数列,并支持点击查看未填写日期明细。 ## 2026-01-16 文件库列表公开/私有选项卡 - 文件库列表新增“公开/私有”选项卡并展示数量,列表接口同步返回公开/私有统计用于前端展示与筛选。 - 文件库筛选区布局调整:输入区与操作按钮同一行展示。 - 预估排班计划表状态显示:公改为休、请改为假(仅前端展示)。 - 预估排班计划表新增“人员管理”弹窗与入口,支持新增跨组织人员、编辑技能/工资并保存门店扩展人员配置(不新增路由)。 - 预估排班计划表“人员管理”改为门店级独立组件,按门店维护人员技能/工资与扩展人员(`sys_user_ext_org` + `sys_user_schedule_profile`)。 - 排班页无月度数据时优先读取门店人员管理清单,且支持从该清单新增/移除当月人员。 - 排班明细表头新增单行汇总(人员总数/班次汇总总数/状态合计),自动统计排/休/假/支/离等列。 - 排班明细表头汇总补齐实际工资与满勤工资合计。 - 排班人员名称与移除按钮改为分行展示,避免同一行拥挤。 - 排班下拉新增“删除”选项,选择后自动清空该班次。 - 排班明细表头新增周次行并按实际周范围合并列。 - 周营业额/周工资独立表移除,合并进排班表头并与周次对齐显示。 - 排班明细表头调整技能列占位与行跨,保证前厅/后厨岗位技能与数据列对齐。 - 排班班次选项修正为“休/假”展示并补齐前后端状态映射,确保班次保存可落库。 - 排班保存改为按人员头表重建班次记录,避免班次表未写入的问题。 - 排班班次写入改为显式插入并忽略Id,确保使用数据库序列生成记录。 - 排班头表/档案保存改为常规插入/更新,避免 BulkCopy 在部分环境未落库的问题。 - 预估排班计划表新增“预估营业额管理”按钮,弹出营收日历与统计页面一致。 - 预估排班计划表“新增人员”按钮移动至“姓名”列标题内,统一在列内操作。 - 预估排班计划表支持点击上午/下午行高亮,切换行时自动还原上一行。 - 预估排班计划表新增自动保存(排班调整/人员增删/汇总输入节流保存,减少并发请求)。 - 预估排班计划表“预估净收营业额”改为当月每日营业额合计只读展示。 - 预估排班计划表汇总行补充 SY/SF/SC/SW/SS/KX/KZ/KQ/KC 编号标识。 - 预估排班计划表汇总区压缩为 3 行展示,仅保留区域分摊工资输入;行动计划按(上月工资-本月参考工资)提示红色/无,上月人数/工资改为读取上月记录并按 0 值决定是否可输入。 - 修复预估排班详情读取上月记录时因 tenant_id 列不存在导致的查询报错,改为按需字段选择避免引用租户列。 - 预估排班计划表上月人数/工资改为草稿输入,避免自动保存误提交导致输入框消失。 - 预估排班计划表汇总行补充日薪资列合计(汇总所有人员日薪资)。 - 预估排班计划表工具栏新增列表最大化/还原按钮,支持全屏查看。 - 预估排班计划表汇总区数值支持点击查看计算来源明细。 - 预估排班计划表周/日汇总与合计行数值支持点击查看来源明细。 ## 2026-01-13 企微 OAuth 回调地址拼接修正 - `SysOAuthService.SignIn(WorkWeixin)` 构建 `callbackUrl` 改用 `Uri/UriBuilder` 基于 Referer 的 `Authority` 生成,避免 `urlApi` 非 `/` 结尾或携带路径/Hash 时拼接出错。 ## 2026-01-13 门店证件管理(数据权限/提醒收件人) - 证件列表按“数据角色组(门店×证件类型)”过滤(组并集);`data_role_group_store.store_id=0` 表示全部门店,`data_role_group_dimension.dimension_value='*'` 表示全部类型。 - 到期提醒收件人改为:数据角色组命中用户 + 门店 `org_id` 直属人员(含扩展机构),不再使用 `store_license.alert_role_id`。 - PostgreSQL 脚本:`doc/sql/20260113_data_role_group_pgsql.sql`、`doc/sql/20260113_license_type_dict_pgsql.sql`。 - PC 通用人员选择器:新增 `publicDiy/orgUserPickerOrgs`、`publicDiy/orgUserPickerUserPage`(分页搜索),`OrgUserPickerDialog.vue` 与数据角色组成员选择统一复用该弹窗,避免按钮权限 403。 ## 2026-01-12 部署脚本(手机端 H5) - `deploy.js` 前端发布新增 uni-app H5:先执行 `npm run version:sync` 更新版本,再执行 `npm run build:h5`,并通过 SSH/SFTP 上传到 `/root/docker/web/h5_web`。 ## 2026-01-12 手机端首页文件管理 - uni-app 首页新增“文件管理”卡片:可见文件夹树浏览 + 文件分页加载 + 图片预览/视频弹窗预览 + 下载记录(对齐 Web `welcome.vue` 的 `getVisibleFolderTree/getFilesByFolder/recordDownload`)。 - Web 首页“文件下载”组件目录化:文件夹与文件合并同一列表展示,操作按钮改为图标按钮避免挤压换行。 ## 2026-01-03 门店证件管理(版本库管理) - 门店证件列表新增“历史版本”抽屉,支持查看并下载各版本文件。 - 后端新增 `storeLicense/fileVersions` 接口,并在证件新增/更新(证件文件变更)时自动写入版本记录(落表 `file_library`)。 ## 2025-12-30 企微门店订货物料(在途货量/排序/公式修正) - 企微订货物料列表新增“在途货量”输入列,并纳入“实际订货量=预估明日订货量-本日库存-在途货量”的计算与公式展示。 - 一键保存接口同时保存“本日库存量/在途货量”,并按当前预估明日订货量计算“实际订货量”写入 `actual_order_qty`。 - 后端实体新增 `InTransitQty`/`ActualOrderQty` 字段并在分页输出中回显。 - PostgreSQL 迁移脚本:执行 `doc/sql/20251229_store_order_material_in_transit_qty_pgsql.sql` 新增 `store_order_material.in_transit_qty`。 - PostgreSQL 迁移脚本:执行 `doc/sql/20251230_store_order_material_actual_order_qty_pgsql.sql` 新增 `store_order_material.actual_order_qty`。 - “上月理论用量/千元用量”两列支持点击表头排序(后端服务端排序)。 ## 2025-12-24 部署脚本(SSH 后端重启容器) - 发布后端且 `enableSshUpload=true` 时,SSH 上传成功后自动重启容器:`net_api -> docker restart zmp_api`,`net_api_dev -> docker restart zmp_api_dev`。 ## 2025-12-09 部署脚本 - 新增 node 版 `deploy.js`(依赖 `basic-ftp`),读取 `AutoDeploy/config.ini` 配置,后端通过 FTP,前端同步到 `\\10.10.10.10\docker\www\web_pc`。 - 运行前在仓库根目录 `npm install` 拉取依赖,执行示例:`node deploy.js --target all` 或 `node deploy.js --target backend --ftp-target zmp_api`。 ## 2025-11-14 文件库文件夹改造 - 后端新增 `file_library_folder` 表及 `folder_id` 字段,支持按顶级部门划分的无限级文件夹,并开放新增、重命名、删除 API。 - 文件上传/编辑流程可以指定文件夹或根目录,未选择文件夹时必须明确顶级部门,保证权限与列表筛选一致。 - 前端文件库页面增加左侧文件夹树及管理操作,右侧列表根据选中的顶级部门/文件夹加载数据,编辑弹窗支持树形选择文件夹。