申勤物业管理系统

wdq 4be4324d5f 侧栏分组与台账续标体验优化,并同步 README 变更记录。 пре 3 часа
public 4be4324d5f 侧栏分组与台账续标体验优化,并同步 README 变更记录。 пре 3 часа
src 4be4324d5f 侧栏分组与台账续标体验优化,并同步 README 变更记录。 пре 3 часа
word 4be4324d5f 侧栏分组与台账续标体验优化,并同步 README 变更记录。 пре 3 часа
.gitignore 4be4324d5f 侧栏分组与台账续标体验优化,并同步 README 变更记录。 пре 3 часа
API进度查询接口对接文档.md 97363135d5 优化投续标指挥页标书制作:对接生成进度、完善上传生成门槛与刷新误回退 пре 1 недеља
README.md 4be4324d5f 侧栏分组与台账续标体验优化,并同步 README 变更记录。 пре 3 часа
favicon.ico 82ca27e5e5 换新logo图标和git提交配置修改 пре 2 недеља
favicon2.ico 82ca27e5e5 换新logo图标和git提交配置修改 пре 2 недеља
index.html 35a22e4c15 申勤物业系统初始版 пре 2 месеци
package-lock.json 9482749d90 增加项目详情中查看地图,AI生成技术标接口调用及下载标书功能 пре 3 недеља
package.json 9482749d90 增加项目详情中查看地图,AI生成技术标接口调用及下载标书功能 пре 3 недеља
tsconfig.json a0554101d3 TS配置项问题修复 пре 2 недеља
tsconfig.node.json a0554101d3 TS配置项问题修复 пре 2 недеља
vite.config.ts 352c208714 测试harness功能;修改vite配置文件 пре 2 недеља

README.md

sq_manage

申勤物业数字化平台 — 面向物业项目全生命周期的管理后台:合同到期预警、项目台账、市场部(续标 / 招标监测 / 标书 / 开标中标),集成外部「空间一张图」iframe,并在台账/建项中使用 Mapbox 面要素编辑。侧栏按「首页 / 项目中心 / 市场部 / 其他部门」分组(未落地模块可占位)。


技术栈

分类 技术 版本
框架 Vue 3 ^3.4
语言 TypeScript ^5.3
构建 Vite ^5.1
路由 Vue Router ^4.3
状态管理 Pinia ^2.1
UI 组件库 Element Plus ^2.6
网络请求 Axios ^1.6
地图 Mapbox GL ^3.27
地图标注 Mapbox GL Draw ^1.5
地理空间分析 @turf/turf ^7.3
图表 ECharts ^5.5
工具库 moment.js / qs / markdown-it / vue-clipboard3 / wellknown

环境要求

  • Node.js >= 18.0
  • npm >= 9.0

快速开始

安装依赖

npm install

开发模式

npm run dev

开发服务器启动后访问 http://localhost:5173(Vite 默认端口)。所有 /api 前缀的请求会被代理到后端服务。

生产构建

npm run build

执行 vue-tsc 类型检查后,Vite 将项目编译到 dist/ 目录。

预览构建产物

npm run preview

配置说明

运行时配置(关键)

项目使用运行时注入的方式加载配置,避免构建时硬编码。配置文件位于 public/static/config/config.js,会在 HTML 入口处被加载,并将配置挂载到 window.CONFIG

前端通过 src/utils/config.ts 读取 window.CONFIG,支持读取失败时的默认值兜底。

window.CONFIG 包含以下字段:

字段 说明
OAUTH_URL 认证中心服务地址(登录/改密等)
DMS_URL 文档管理服务地址(内容 CRUD、文件上传)
SQ_URL 申勤业务服务地址(统计、招标生成等)
ONEMAP_URL 一张图服务地址
FILEPATH 文件访问基路径
COLUMNIDARR DMS 栏目 ID 数组
MODELIDARR DMS 模型 ID 数组
TASKLIST 任务配置列表
MAPBOX_ACCESS_TOKEN Mapbox 访问令牌
MAPBOX_TILES_NORMAL 普通地图瓦片 URL
MAPBOX_TILES_BLUE 蓝色风格地图瓦片 URL
MAPBOX_TILES_YXT 杨浦特地图瓦片 URL

部署注意:上线前必须修改 public/static/config/config.js 中的服务地址与 Mapbox Token 为实际生产值。

Vite 开发代理

vite.config.ts 中配置了开发代理:

/api → http://121.43.55.7:10081(路径前缀 /api 会被去掉)

如需代理到本地或其他后端,修改 server.proxy 中的 target 即可。


目录结构

下列为当前源码树(可读性整理后)。AGENTS.mdharness/ 默认不入库(见 .gitignore),仅本地 Agent 工作流使用。

sq_manage/
├── index.html                          # HTML 入口;注入 public 配置与 Vite 入口
├── package.json                        # 依赖与脚本(dev / build / preview)
├── package-lock.json                   # 依赖锁定
├── vite.config.ts                      # ⭐ Vite:别名 @、base、/api 开发代理
├── tsconfig.json                       # 应用 TS 配置
├── tsconfig.node.json                  # Node/Vite 侧 TS 配置
├── README.md                           # 本说明
├── API进度查询接口对接文档.md           # AI 标书生成进度接口说明
├── .gitignore                          # Git 忽略规则(含 AGENTS.md、harness/、系统操作流程.md)
│
├── public/                             # 不经打包的静态资源
│   ├── favicon.ico / favicon2.ico
│   └── static/
│       ├── config/config.js            # ⭐ 运行时配置(OAUTH/DMS/SQ、栏目 ID、Mapbox)
│       ├── image/logo.png              # 品牌 Logo
│       ├── data/                       # 静态示例数据(sq.md、index.html 等)
│       └── plugins/createAuth.js       # 登录加密依赖(encrypt 调用)
│
├── src/
│   ├── main.ts                         # 应用启动:Pinia、Router、Element Plus
│   ├── App.vue                         # 根组件(router-view)
│   ├── env.d.ts                        # Vite / Vue SFC 环境类型
│   │
│   ├── api/
│   │   └── common.ts                   # ⭐ 全部后端接口唯一出口(OAUTH / DMS / SQ)
│   │
│   ├── constants/
│   │   ├── dmsColumns.ts               # COLUMN / MODEL 语义别名(读 CONFIG 数组下标)
│   │   └── renewalSteps.ts             # 投续标指挥页 7 步静态定义
│   │
│   ├── composables/                    # 可复用业务逻辑(非 UI)
│   │   ├── useAdminArea.ts             # 区划 / 在管项目树加载(列表页共用)
│   │   ├── useNavigateToRenewalDetail.ts # 写 sessionStorage 并跳转指挥页
│   │   ├── renewal/
│   │   │   ├── useRenewalStage.ts      # 指挥页阶段 / 进度回写
│   │   │   ├── useRenewalTasks.ts      # 任务清单门禁与文案
│   │   │   ├── useBidGenerate.ts       # AI 标书生成 / 进度 / 下载门禁
│   │   │   └── useRenewalUploads.ts    # 指挥页四类文件上传
│   │   └── tenderpool/
│   │       └── useMonitorAddProject.ts # 招标监测「投标/续标」创建投续标
│   │
│   ├── components/
│   │   ├── bidResult/                  # 开标与中标相关
│   │   │   ├── addContent.vue          # 中标登记弹窗(编排层)
│   │   │   ├── addContent/
│   │   │   │   └── AddContentForm.vue  # 中标登记表单字段区
│   │   │   ├── addProject.vue          # 中标后新建在管项目(编排层)
│   │   │   ├── WonBidProjectForm.vue   # 建项表单字段
│   │   │   ├── ProjectMapSection.vue   # 建项地图 / 面要素区
│   │   │   ├── list/
│   │   │   │   ├── BidResultTabs.vue   # Tab +「中标登记」按钮
│   │   │   │   ├── BidMonitorList.vue  # 监控中投标列表
│   │   │   │   └── BidResultHistoryList.vue # 结果/历史列表
│   │   │   └── dialogs/
│   │   │       ├── DialogFileUpload.vue    # 文件上传对话框壳
│   │   │       └── DialogPushConfirm.vue   # 推送确认对话框
│   │   ├── ledger/                     # 项目台账详情拆分
│   │   │   ├── ProjectDetailHeader.vue # 详情头栏
│   │   │   ├── ProjectDetailInfo.vue   # 合同/字段信息区
│   │   │   └── ProjectDetailMap.vue    # 详情地图区
│   │   ├── map/
│   │   │   ├── MapDraw.vue             # Mapbox 绘制(建项/面要素)
│   │   │   └── ProMap.vue              # 项目详情等场景的地图展示
│   │   ├── person/
│   │   │   └── Table.vue               # 人员信息表格(地图弹层等)
│   │   ├── renewal/                    # 续标 / 续签列表与指挥页 UI
│   │   │   ├── BidRenewal.vue          # 投续标列表(编排层)
│   │   │   ├── Renew.vue               # 续签标列表
│   │   │   ├── list/                   # 投续标列表子组件
│   │   │   │   ├── BidRenewalFilters.vue
│   │   │   │   ├── BidRenewalCardList.vue
│   │   │   │   └── BidRenewalAddDialog.vue
│   │   │   ├── expire/                 # 投续标指挥页展示组件
│   │   │   │   ├── RenewalHeaderBar.vue
│   │   │   │   ├── RenewalStepper.vue
│   │   │   │   ├── TaskChecklistPanel.vue
│   │   │   │   ├── ProjectInfoSide.vue
│   │   │   │   ├── ZbInfoSide.vue
│   │   │   │   └── dialogs/            # 指挥页各类 Dialog 壳
│   │   │   │       ├── DialogZbMatch.vue      # 招标匹配/公告
│   │   │   │       ├── DialogKbjk.vue         # 开标监控登记
│   │   │   │       ├── DialogBidSubmit.vue    # 投标提交登记
│   │   │   │       ├── DialogBidFiles.vue     # 标书相关文件
│   │   │   │       └── DialogFinishBid.vue    # 中标确认
│   │   │   └── xq/                     # 续签详情 UI
│   │   │       ├── XqHeaderBar.vue
│   │   │       ├── XqMainPanel.vue
│   │   │       ├── XqSidePanel.vue
│   │   │       └── dialogs/DialogXqRegister.vue
│   │   ├── tenderpool/                 # 招标监测
│   │   │   ├── Monitor.vue             # 监测 Tab(编排层)
│   │   │   ├── Intention.vue           # 意向 Tab
│   │   │   ├── Notice.vue              # 公告相关(备用/未强依赖)
│   │   │   └── monitor/
│   │   │       ├── MonitorFilters.vue
│   │   │       ├── MonitorCardList.vue
│   │   │       └── MonitorDetailDrawer.vue
│   │   └── view/
│   │       └── GeoJsonEditor.vue       # GeoJSON 可视化编辑(jsoneditor)
│   │
│   ├── layouts/
│   │   └── MainLayout.vue              # 主壳:分组侧栏(首页/项目中心/市场部等)+ 顶栏 + 内容区
│   │
│   ├── router/
│   │   └── index.ts                    # ⭐ Hash 路由表
│   │
│   ├── stores/
│   │   └── user.ts                     # Pinia:登录态 / token / 登出
│   │
│   ├── styles/
│   │   ├── variables.css               # 主题 CSS 变量(teal 主色等)
│   │   └── element-theme-green.css     # Element Plus 主题覆盖
│   │
│   ├── types/
│   │   ├── window.d.ts                 # window.CONFIG 等全局类型
│   │   ├── md.d.ts                     # markdown 资源声明
│   │   └── renewal.ts                  # 续标步骤 / 任务 / 表单松散类型
│   │
│   ├── utils/
│   │   ├── config.ts                   # 读取 window.CONFIG(含兜底)
│   │   ├── request.ts                  # Axios + token 拦截 / 无效 token 踢登录
│   │   ├── encrypt.ts                  # 登录密码加密(依赖 createAuth)
│   │   ├── util.ts                     # 金额/UUID/下载/GeoJSON→WKT、项目标书→参考标书路径校验等
│   │   ├── displayUser.ts              # 登录名 → 展示名映射
│   │   ├── renewalMath.ts              # 合同剩余天数 / 档位样式计算
│   │   └── tree.ts                     # 在管项目列表 → 树节点
│   │
│   └── views/                          # 路由页面(编排层为主)
│       ├── login/Login.vue             # 登录页
│       ├── home/Dashboard.vue          # 工作台(统计 / 待办 / 近期项目)
│       ├── map/OneMap.vue              # 空间一张图(外部系统 iframe + 自动登录桥)
│       ├── ledger/
│       │   ├── Projects.vue            # 项目台账列表
│       │   └── ProjectDetail.vue       # 项目台账详情(编排层)
│       ├── market/Market.vue           # 市场拓展入口(模块卡片导航)
│       ├── bidPreparation/
│       │   ├── Renewal.vue             # 标书编制:投续标 / 续签 Tab 容器
│       │   ├── RenewalDetail.vue       # 续标简化详情
│       │   ├── RenewalExpireDetail.vue # ⭐ 投续标 7 步指挥页(核心)
│       │   ├── renewal-expire-detail.css # 指挥页 scoped 样式(外置)
│       │   └── RenewalXQDetail.vue     # 续签详情指挥页
│       ├── bidMonitor/
│       │   └── TenderPool.vue          # 招标监测页(监测 / 意向 Tab)
│       └── bidResult/
│           └── BidResult.vue           # 开标与中标页(编排层)
│
├── word/                               # 产品规格与 Demo 说明(非运行代码)
│   ├── 申勤物业数字化平台 · 市场续标 Demo 规格说明.md
│   ├── 结构与流程.md
│   └── …
│
├── harness/                            # 本地 Agent 工件(通常不入库)
│   ├── feature_list.json               # 功能状态唯一事实来源
│   ├── progress.md                     # 会话进度
│   ├── session-handoff.md              # 会话交接
│   ├── init.ps1 / init.sh              # 安装依赖 + npm run build
│   ├── clean-state-checklist.md
│   ├── evaluator-rubric.md
│   ├── quality-document.md
│   └── backup/                         # 历史备份(如指挥页 origin)
│
└── AGENTS.md                           # Agent 根指令 / 项目地图(通常不入库)

阅读提示

路径约定 说明
COLUMN.* / MODEL.* 业务代码请用 src/constants/dmsColumns.ts,勿直接写 CONFIG.COLUMNIDARR[n]
views/* 路由级页面;大业务多拆到 components/* + composables/*
sessionStorage 跨页临时态(如 dmsId / progres / projectName),改跳转逻辑时先核对现有键名

业务模块

模块 路由 说明
登录 / 用户登录,token 存储到 localStorage
首页 /#/dashboard 经营总览(统计 / 待办 / 近期项目);侧栏无子目录直达
项目库 /#/projects 项目中心 · 在管项目列表与详情(详情内含 Mapbox)
项目分布 /#/onemap 项目中心 · 外部「空间一张图」iframe
市场拓展入口 /#/market 卡片导航(侧栏默认不展示,路由保留)
标书编制 /#/renewal 市场部 · 投续标 / 续签;指挥页 /#/renewal-expire-detail/:id
招标监测 /#/tender-pool 市场部 · 招标公告监测、意向、转投续标
开标与中标 /#/bid-result 市场部 · 开标监控、中标登记、推送与建项

侧栏另含运营 / 人事 / 采购 / 财务等分组占位(路由待落地)。


认证流程

项目采用基于 Token 的认证机制,核心逻辑在 src/utils/request.tssrc/stores/user.ts

  1. 登录时调用 api.login(),成功后 token 存入 localStorage
  2. Axios 请求拦截器自动从 localStorage 读取 token,附加到请求头 token 字段
  3. 响应拦截器检测到 无效token 或 401/403 状态码时,自动清除本地登录态并跳转回登录页

API 概览

后端接口统一由 src/api/common.ts 导出,按服务归属分为三类:

服务 前缀 用途
OAUTH CONFIG.OAUTH_URL 登录、修改密码
DMS CONFIG.DMS_URL 栏目查询、内容 CRUD、文件上传、审核
SQ CONFIG.SQ_URL 统计、历史合作方、招标生成、标书生成进度查询

常用 SQ 能力说明:

接口方法 路径 说明
getGenerateTender POST /tender/generate 发起 AI 标书生成(投续标 ID)
getTenderProgress GET /tender/api/v1/jobs/{txbId}/progress 查询标书生成步骤进度

对接说明见仓库根目录 API进度查询接口对接文档.md

所有请求走 /api 代理前缀,开发时由 Vite 转发到后端。


开发注意

  • 路径别名@src/(在 vite.config.tstsconfig.json 中均已配置)
  • 构建产物路径:Vite base 设为 ./,产物可直接部署到任意子路径
  • Token 过期:后端返回 无效token 或 HTTP 401/403 时,前端会自动清理登录态并跳转登录页
  • 文件上传uploadFile 接口使用 multipart/form-data,需传 FormData
  • AI Agent 开发:项目已集成 Harness 工程文件,Agent 工作前请阅读根目录 AGENTS.md,通过 harness/init.ps1(PowerShell)或 bash harness/init.sh(Git Bash/WSL)一键完成依赖安装与基线验证

License

Internal use only.

提交版本记录

  • 2023-07-10 1、 初始版本,包含基础功能 2、 登录流程,添加 token 过期检测 3、 首页看板图表,添加项目统计 4、 项目台账模块,添加项目详情页 5、 市场信息模块,添加竞争对手信息 6、 续标管理模块,添加续标到期详情页 7、 招标池模块,添加开标监控 8、 投标结果模块,添加投标结果录入与展示 9、 登录页,添加登录失败提示

  • 2023-07-17 1、 优化登录页,添加登录失败提示 2、 优化项目台账模块,添加项目详情页的项目统计 3、 优化市场信息模块,添加竞争对手详情页 4、 优化续标管理模块,添加续标详情页的项目统计 5、 优化招标池模块,添加开标监控页的项目统计 6、 优化投标结果模块,添加投标结果详情页的项目统计

  • 2023-08-04 1、 增加Mapbox引擎,展示物业项目空间分布,支持 GeoJSON 绘制 2、 增加JSONEDIT功能,用于编辑项目空间分布的 GeoJSON 数据 3、 优化项目台账模块,添加项目详情页的项目统计 4、 优化市场信息模块,添加竞争对手详情页 5、 优化续标管理模块,添加续标详情页的项目统计 6、 优化招标池模块,添加开标监控页的项目统计 7、 优化投标结果模块,添加中标流程功能,包含中标确认、中标结果展示、中标项目详情

  • 2023-08-11 1、 优化Mapbox引擎,展示物业项目空间分布,支持 GeoJSON 绘制 2、 优化JSONEDIT功能,用于编辑项目空间分布的 GeoJSON 数据 3、 优化市场信息模块,添加竞争对手详情页 4、 优化续标管理模块,添加续标详情页的项目统计 5、 优化招标池模块,添加开标监控页的项目统计 6、 优化投标结果模块,添加投标结果详情页的项目统计

  • 2023-08-28 1、 优化接口调用AI生成标书功能,支持文件上传 2、 优化判断标书文件格式是否正确,仅支持 .docx 格式 3、 优化匹配招标公告功能,根据项目信息自动匹配相关招标 4、 优化检测标书是否中标功能,根据项目信息自动检测标书是否中标, 5、 优化确认中标功能,手动确认中标并生成新的项目

  • 2023-09-01 1、 增加AI Agent 开发,项目已集成 Harness 工程文件 2、 修改项目布局和Logo图标

  • 2026-09-10 1、 优化投续标指挥页「标书制作」:任务4完成后可上传资料;行内「生成标书」+ 招标/采购/参考/澄清四类上传 2、 任务5更名为「招标公告与需求拆解」;待确认前须具备招标文件、采购需求与有效参考标书(docx) 3、 对接标书生成进度查询接口 getTenderProgress,获取标书按 c_ai_sczt(完成/失败/生成中)分流处理 4、 生成中刷新页面不再误回退到「生成标书」;失败仅在主动「获取标书」或进度失败时回退并清空状态 5、 续标创建时,在管项目历史标书为 docx 则写入投续标参考标书字段 c_ckbs 6、 修复投标结果页组件导入路径大小写,保证 Windows 下 vue-tsc 构建通过 7、 增加项目详情页的地图展示,支持点击面展示相关信息,如有员工可查看员工相关数据

  • 2026-09-16 1、使用AI整理代码,增加代码可读性 2、从项目台账中进入续签或续标时,增加确认提示

  • 2026-09-17 1、项目台账列表页面,显示增加过期数据,过期数据放在最后面显示 2、续签标列表查询功能,根据项目名称查询接口修改 3、空间一张图加载loading状态颜色调整, 与本项目其他loading状态颜色一致

  • 2026-09-20 1、侧栏对齐流程协同页:首页(无子目录)、项目中心、市场部及运营/人事/采购/财务等分组;未落地子项占位、菜单区内滚动 2、台账「距到期」多选筛选;确认中标建项表单精简字段;统一页面字体继承 3、项目详情:已有续签/续标流程时,预警条改为「进入续签/续标流程」直达入口 4、标书编制:列表首屏与级联数据并行加载;修复新增弹窗区县→项目横向级联 5、续标/投标创建投续标时,将所选在管项目的项目标书(.docx)写入参考标书 c_ckbs 6、注册驻地/补充协议栏目 ID;本地手册 系统操作流程.md 纳入 .gitignore