weicw1996 81ef9317c7 feat(tender): 忘记密码与修改密码页(10 套模板通用)
密码找回(材料审核制,见 ADR 0008)
- app/pages/forgot-password.vue:两个页签——「提交申请」(企业名称 + 纳税人识别号 + 新密码 + 确认
  + 授权委托书,复用 POST /api/tender/upload,并照 HjcEnterpriseForm 做 5M 校验)与「查询进度」
  (双要素查询,展示状态与时间、驳回原因)。提交后自动把条件带到查询页签。文案纪律:
  「已通过」≠「已重置」。

修改密码(登录态,双因子)
- app/pages/change-password.vue:旧密码 + 短信验证码(60s 倒计时,照 register.vue)+ 新密码 +
  确认;成功后清本机凭据并显示「去登录」面板。

BFF 与封装
- server/api/tender/password/{apply.post,status.get,sms.post,change.put}.ts:四条都照
  register.post.ts 的透传范式(modulesApiBase + TenantId(header 与 query 都带)+ 原样返回
  ApiResult,HTTP 恒 200)。前两条**匿名**(与 sms/upload 一致,不读 cookie);后两条需登录态,
  从 cookie hjc_token 或 Authorization 头取 token 拼 Bearer。
- app/composables/useHjcPassword.ts:四条请求单独成一支,不塞进 useHjcAuth——找回的两条是匿名的、
  不做 401 跳转;修改密码的两条经 handleAuthCode 处理登录态。

接线
- app/pages/login.vue:加「忘记密码?」入口。
- app/components/HjcUserBar.vue:已登录菜单加「修改密码」。

落点说明:新页面直接放 app/pages/*.vue——静态段路由优先于 app/pages/[slug].vue 的动态段,故不必
动 useTemplate.ts / templates/index.ts,与 login.vue、register.vue 完全同款做法,10 套模板自动可用。

验证:针对本次文件 npx eslint 0 error;pnpm run build 成功且四条新 BFF 都出现在产物里。
未验:未起 mp-java 做端到端(见 .scratch/hjc-password/issues/06)。
2026-09-17 02:35:45 +08:00

通用企业官网程序

基于 Nuxt 4 + Vue 3 + TypeScript 的企业官网纯前端展示系统。

项目定位

  • 本项目仅包含官网前台展示代码
  • 不含后端管理端,所有数据通过调用 SaaS 后端 API 获取
  • 支持多模板切换、多租户、独立域名绑定、订阅过期校验

目录结构

website/
├── app/                    # 应用代码
│   ├── components/         # 公共组件
│   ├── composables/        # 组合式函数
│   ├── layouts/            # 布局
│   ├── pages/              # 页面路由
│   ├── templates/          # 模板集合
│   ├── types/              # TS 类型
│   ├── utils/              # 工具函数
│   └── assets/             # 样式资源
├── server/                 # Nuxt Server
│   ├── api/                # API 代理
│   ├── middleware/         # 中间件
│   └── utils/              # 服务端工具
├── scripts/                # 脚本
└── templates/cloud-website # 模板预览图

安装依赖

npm install

本地开发

npm run dev

默认访问:http://localhost:3000

模板系统

模板存放在 app/templates/ 目录下,每个模板独立目录,包含:

  • config.ts:模板配置
  • components/:模板私有组件(Header、Footer 等)
  • pages/:模板页面组件
  • theme.css:模板主题变量

当前已实现:

  • template-01:科技蓝企业模板(完整)
  • template-02 ~ template-04:占位模板,后续根据设计稿实现

环境变量

复制 .env.example.env,按需修改:

NUXT_PUBLIC_TENANT_ID=10398
NUXT_PUBLIC_APP_ID=website
NUXT_PUBLIC_TEMPLATE_ID=template-01
NUXT_PUBLIC_SERVER_API_BASE=https://server.websoft.top/api
NUXT_PUBLIC_MODULES_API_BASE=https://cms-api.websoft.top/api
NUXT_PUBLIC_APP_API_BASE=https://cms-api.websoft.top
NUXT_PUBLIC_BASE_DOMAIN=shoplnk.cn

接口说明

本项目通过 server/api/ 代理转发 SaaS 后端接口,前端不直接调用后端地址。

核心接口:

  • GET /api/site/info:站点信息
  • GET /api/page/all:页面列表
  • GET /api/page/detail?slug=xxx:页面详情
  • GET /api/article/list:文章列表
  • GET /api/product/list:产品列表
  • GET /api/case/list:案例列表
  • GET /api/subscription/status:订阅状态
  • GET /api/sitemap.xml:动态站点地图
  • GET /api/robots.txtrobots 文件
  • POST /api/form/submit:表单提交

部署

npm run build
npm run preview

生产环境建议使用 Nginx 反向代理,配置泛域名 *.shoplnk.cn 指向 Nuxt 服务。

注意事项

  • 模板组件为动态导入,新增模板后需在 app/templates/index.ts 注册
  • 域名绑定查询接口 /cms/cms-website/resolveDomain 需 SaaS 后端实现
  • 订阅状态接口 /api/app/subscription/check 需 SaaS 后端实现
S
Description
汇聚采网站
Readme 22 MiB
Languages
Vue 73.3%
TypeScript 18.6%
HTML 5.6%
CSS 1.2%
JavaScript 0.9%
Other 0.4%