61 Commits

Author SHA1 Message Date
danaisuiyuan
ede01c06d2 docs: add ops and merchandise status repair guides 2026-05-27 13:00:32 +08:00
danaisuiyuan
9b4020d44f fix(points): prevent stale integral balance updates
Use atomic integral updates during balance payment so older user snapshots cannot overwrite newer self-bonus rewards.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-19 08:57:13 +08:00
danaisuiyuan
8c3ff509fc merge: 合并远程 czleilei240 部署配置并统一 leilei 环境域名
整合 monorepo 侧 Docker 部署改动,冲突处保留 czleilei240 合同 PDF、API 域名与抢购跳转地址。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-18 10:55:57 +08:00
danaisuiyuan
93d6a58a2b feat(czleilei240): 配置池州雷蕾商贸积分商城环境
新增 czleilei240 Spring profile、合同 PDF 与部署文档,并将前后端域名、合同落库前缀和后台 API 地址切换到 leilei 环境。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-18 10:54:24 +08:00
danaisuiyuan
cef4398a5a feat(deploy): configure czleilei240 integral shop
Add czleilei240 runtime profiles, frontend domains, contract paths, and Docker deployment updates so the integral shop can run against the Leilei environment.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-17 19:13:01 +08:00
danaisuiyuan
fb76270882 feat(deploy): 完整 Docker 部署方案 — 寄卖商城 + 积分商城
新增两步独立 Docker 部署方案(czleilei240 环境):

步骤一 寄卖商城(integral-resell)
- step1-integral/docker-compose.yml:redis(Alpine自建) + houtai(webman PHP8) + h5(Nginx)
- houtai.Dockerfile:PHP 8.0 + 阿里云镜像源 + webman.bin entrypoint
- h5.Dockerfile:Nginx + configs.js 环境变量动态重写
- redis.Dockerfile:Alpine + apk 构建,绕过 DockerHub 镜像源问题
- 宿主机 bind-mount:/www/wwwroot/leileiadmin.czchunfang.com(FTP可直接更新程序)

步骤二 积分商城(single-shop-22)
- step2-single-shop/docker-compose.yml:redis + admin-api + front-api + admin-web + h5
- Java Dockerfiles:OpenJDK 17 + --add-opens Spring Boot 2.2.6 兼容

公共配置
- nginx/:四个域名宝塔 Nginx 反代配置(HTTP→HTTPS 301、SSL 终止)
- scripts/:sync-to-server.sh / deploy-step1.sh / remote-up.sh
- DOCKER_DEPLOY.md:完整部署文档

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-17 17:24:08 +08:00
danaisuiyuan
a89825e23c docs(dashboard): 从 shjjy153 合并 dashboard 相关文档
补充 docs/dashboard/ 目录,包含:
- dashboard-frontend-dev-spec.md
- dashboard-frontend-technical-architecture.md
- boss-dashboard-development-guide.md
- crmeb-front-mysql-remote-connections.md

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-16 19:30:13 +08:00
danaisuiyuan
ccb70ca10e Merge branch 'sxsy80' into czleilei240 2026-05-16 18:36:18 +08:00
danaisuiyuan
ee32ecc995 feat(dashboard-frontend): 新增 dashboard 前端目录与构建产物
- 引入 dashboard-frontend/dist 静态资源占位(Vite 产物:assets + favicon + index.html + mockServiceWorker.js)
- .gitignore 排除 dashboard-frontend/node_modules 及日志,避免误入库(~304MB)
- src 暂留占位待后续接入

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-16 18:31:47 +08:00
danaisuiyuan
fd4255d982 docs(xsj33): 迁移说明移入 docs/
与其他迁移文档(byjyw149/czrt6/sxsy80 等)同位,便于统一索引

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-16 18:31:26 +08:00
danaisuiyuan
9a4a5f2339 feat(dashboard): archive daily report from page data
Generate the standalone daily report HTML from the dashboard data already loaded in the H5 page, keeping the archived page visually aligned with the mobile dashboard.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-11 13:21:35 +08:00
danaisuiyuan
403ffe0fde feat(dashboard): add boss dashboard H5 and APIs
Implement the mobile dashboard frontend, admin overview APIs, report archive export, and local dev proxy so the boss dashboard can run against real backend data while preserving MSW demos.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-11 13:07:55 +08:00
danaisuiyuan
693c66c258 fix(integral): 防止个人奖金重复生成积分
将个人奖金转积分流程改为先写唯一流水再加积分,并用 wa_selfbonus_logid 唯一索引兜底多入口并发场景;同时补充历史重复数据修复与索引落地 SQL 脚本。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-11 13:07:55 +08:00
danaisuiyuan
cf2918cfe2 chore(adminend): 开发环境改用本地 VUE_APP_BASE_API
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-11 09:30:26 +08:00
danaisuiyuan
e2d52ba4cc docs(czrt6): 0511 迁移说明写入 16 位用户 uid/id 范围
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-11 09:25:03 +08:00
danaisuiyuan
d8ad6cde20 feat(integral-external): 新增寄卖外部免认证三件套页面 2026-05-02 06:13:41 +08:00
danaisuiyuan
49900919c6 chore(admin): 恢复 crmeb-admin application-byjyw149.yml
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-02 04:30:02 +08:00
danaisuiyuan
5cbca4ba76 revert(env,uniapp): 保留 sxsy80 业务合并,恢复 byjyw149 环境与合同 PDF
- 恢复 admin/front application.yml、admin 端 env、WaUserController 合同模板与域名
- 恢复 single_uniapp22miao 中与域名/签约相关的页面与 config
- 移除合并中新增的多客户 profile 与 sxsy80/czcf82 合同 PDF 资源

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-02 04:26:38 +08:00
apple
f43950eabf fix(integral-external): 外部用户列表用户 ID 筛选默认可空
Replace el-input-number (min clamped to 1) with text uidStr and only
send uid when a valid positive integer is entered.

Made-with: Cursor
2026-04-27 13:44:24 +08:00
apple
708bf9af48 feat(sxsy80): 外部用户 UID 筛选与积分明细展示
User list API accepts uid; admin external pages tighten filters and
integral log maps self-bonus rows via wa_selfbonus_log for display.

Made-with: Cursor
2026-04-27 13:30:05 +08:00
apple
5c4450c417 docs(sxsy80): 迁移文档、清理脚本与 wa_merchandise 提取工具
补充数据迁移说明与 cleanup SQL;增加从 dump 提取保留 id 与生成 INSERT 的脚本及产物。

Made-with: Cursor
2026-04-27 12:13:19 +08:00
apple
901bf6f500 docs(czrt6): 池州瑞棠数据迁移说明、dump 与可执行 SQL
新增从 dump 生成的 INSERT 脚本、按主键预删后执行的 pymysql 运行器,并在文档中记录执行方式与结果摘要。

Made-with: Cursor
2026-04-27 12:13:12 +08:00
apple
e7ffbbf302 docs(sxsy80): 补充文档、合同资源与数据清理脚本
- 更新前后端 sign_contract_sxsy80.pdf
- 增加 com-sxsy80 说明、数据迁移与 SQL/执行脚本
- 增加 com-xsj33 数据迁移说明与 docs 下合同源文件

Made-with: Cursor
2026-04-26 16:50:36 +08:00
apple
3c6ec4ed73 feat(sxsy80): 太原树英商贸环境与域名配置
- 新增 application-sxsy80.yml(前后端),MySQL/Redis 指向 106.14.132.80,imagePath 与 sync shop_14
- 默认 profile 切换为 sxsy80
- 合同 PDF 与落库域名 https://sxsy.cichude.com
- uni-app:积分域 sxsy-jf、抢购跳转 sxsy、静态合同路径
- backend-adminend:VUE_APP_BASE_API 指向 sxsy-jf
- 分支 sxsy80 基于 origin/czcf82

Made-with: Cursor
2026-04-26 16:37:46 +08:00
danaisuiyuan
eb349ffa74 chore(czcf82): Spring profiles, migration docs, and shop URLs
Add per-shop application YAML, company data migration notes and SQL
supplements, and point admin, API, and uni-app at czcf82 endpoints.

Made-with: Cursor
2026-04-26 15:55:22 +08:00
danaisuiyuan
18b74a131a chore(czcf82): add contract assets and environment info docs
Add czcf82 contract PDF assets for backend and uniapp, and include company environment reference docs needed for deployment handoff.

Made-with: Cursor
2026-04-17 13:04:14 +08:00
danaisuiyuan
43d652aa42 feat(czrt6): switch runtime domains and profile to czrt6
Update admin/frontend profiles, contract template paths, and H5/integral routing domains to point the deployed environment from byjyw149 to czrt6.

Made-with: Cursor
2026-04-17 12:26:19 +08:00
danaisuiyuan
58d6446a22 chore(docs): remove legacy root-level project docs
Clean up obsolete root-level migration and company info markdown files now that documentation is being reorganized under docs.

Made-with: Cursor
2026-04-17 10:14:19 +08:00
danaisuiyuan
770b0bcb62 chore(byjyw149): switch admin endpoints and profile settings
Align byjyw149 environment settings by updating admin frontend API endpoints, activating the byjyw149 Spring profile, and documenting the corresponding company deployment notes.

Made-with: Cursor
2026-04-17 10:11:22 +08:00
danaisuiyuan
5ae826d532 Merge remote-tracking branch 'origin/czc231' into byjyw149 2026-04-17 09:11:00 +08:00
danaisuiyuan
70ccfef0d2 chore(byjyw149): add czrt6 handoff assets and clean obsolete files
Add czrt6 company handoff docs/assets and remove stale logs/config artifacts so the branch state matches current tenant delivery materials.

Made-with: Cursor
2026-04-17 09:05:55 +08:00
danaisuiyuan
29381814ff feat(byjyw149): switch project config to jinyawen environment
Align backend profile, contract template/domain, and uniapp mall/jump/pdf paths for the byjyw149 tenant so deployment matches the new company environment and avoids cross-tenant URLs.

Made-with: Cursor
2026-04-17 09:04:47 +08:00
apple
cd136df685 chore: update admin env, application profiles, and migration notes
Made-with: Cursor
2026-04-10 11:20:38 +08:00
apple
60a06f3692 Merge branch 'feature/marketing-integral-log' into czc231
Restore backend-adminend/src/api/integral.js (integralListApi) after modify/delete conflict with czc231.

Made-with: Cursor
2026-04-09 16:01:43 +08:00
apple
f8ba25e7d5 feat(integral-external): order/user list, integral log, wa selfBonus
- Fix ExternalIntegral order list (no double restPage); default 普通订单; UI columns for useIntegral and buyer uid/nickname/phone; enrich StoreOrderDetailResponse and admin query select.
- External user list: UserResponse.selfBonus and fillWaSelfBonus from wa_users.id=uid.
- Integral log: AdminIntegralSearchRequest nickName/phone; findAdminList filters and ordering; integralExternal API sends page/limit as query params.
- Integral detail page: linkType Chinese mapping including selfbonus; update docs/newpage.md.
- Dashboard grid menu entries for integral-external routes.

Made-with: Cursor
2026-04-09 15:10:16 +08:00
apple
c6d15d8094 docs: 数据迁移说明 — 统一为「数据清理」并补充日志表规则
- company-data-imgration.md:self/share/coupon 日志保留范围说明;去掉过时分支任务句
- company-czc231-data-imgration.md:章节标题与鹏然文档对齐

Made-with: Cursor
2026-04-05 12:46:04 +08:00
apple
75b5339540 docs: 宝应晨召春商贸数据迁移与清理说明(czc231)
- 规范日志表表述;补充 wa_order / wa_merchandise 与库字段对应说明

Made-with: Cursor
2026-04-05 12:31:01 +08:00
apple
f5e8652539 feat(czc231): 宝应晨召春商贸环境
- 新增 application-czc231.yml(front/admin),指向 8.136.120.231
- 默认 profile=czc231;合同 PDF sign_contract_chenzhaochun,域名 chenzhaochun.com
- uniapp / 后台 Vue / deploy.conf 同步文档域名与目录
- h5/static/configs.js:寄卖与积分 URL(sn_id、appStr 需部署时填写)
- 已在库内 wa_options.system_config 写入标题实体与 deploy 段落(远程库)

Made-with: Cursor
2026-04-05 11:11:01 +08:00
apple
129fa20810 docs: 鹏然项目说明与数据迁移记录
- company-info.md:环境与 hapr191 配置要点
- company-data-imgration.md:库清理规则与保留用户范围

Made-with: Cursor
2026-04-05 09:54:43 +08:00
apple
945ca2d3d0 feat(hapr191): 淮安鹏然商贸环境配置
- 新增 application-hapr191.yml(front/admin),imagePath/DB/Redis 指向 114.55.232.191
- 默认 spring.profiles.active=hapr191
- 合同 PDF 模板 sign_contract_pengran,落库域名 https://hapengran.com/
- uniapp:jf.hapengran.com、抢购/个人中心跳转 hapengran.com
- deploy.conf 增加 hapr191 段;后台 Vue API 指向 jfadmin.hapengran.com

Made-with: Cursor
2026-04-04 16:09:42 +08:00
scott
ee0886b800 feat: 新增积分外部页面(免认证三页 + 配套基础设施)
前端:
- 新增 EmptyLayout 空壳布局(无侧边栏/导航)
- 新增 requestNoAuth Axios 实例(不注入 token)
- 新增 integralExternal 路由模块(/integral-external/*)
- permission.js 加入 whiteListPrefixes 前缀白名单跳过登录
- 新增 phoneDesensitize 手机号脱敏过滤器
- 新增三个免认证页面:
  · 积分订单页(/integral-external/order)
  · 用户积分页(/integral-external/user,手机号脱敏)
  · 用户积分明细子页(/integral-external/user/integral-detail)

后端:
- 新增 ExternalIntegralController(无 @PreAuthorize)
  · GET  /api/external/integral/order/list
  · GET  /api/external/integral/user/list
  · POST /api/external/integral/log/list
- WebSecurityConfig 加入 /api/external/integral/** permitAll

文档与工具:
- 新增 coding plan、schedule、测试报告
- 新增 start-backend.sh / start-frontend.sh 本地启动脚本
- 新增 .mvn/wrapper/maven-wrapper.properties

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-31 10:41:30 +08:00
apple
5abbf5bc18 fix(uniapp): 积分页 H5 跳转改为 jjy.uj345.com
Made-with: Cursor
2026-03-25 08:43:30 +08:00
apple
67f44e9c35 fix(uniapp): 签约页跳转域名改为 jjy.uj345.com
Made-with: Cursor
2026-03-23 11:58:21 +08:00
apple
25409f26ce fix(front): WaUser 合同地址改为 jjy.uj345.com(shjjy153)
Made-with: Cursor
2026-03-23 11:57:38 +08:00
scott
fe9e1916fa feat: 重构营销模块积分日志页面
- 优化搜索区域:支持用户昵称、用户ID、时间范围筛选
- 新增表格字段:ID、用户ID、昵称、来源/用途、积分变化、变化后积分、关联类型、状态、备注、日期
- 积分变化带颜色标识:增加(绿色+)、扣减(红色-)
- 状态标签彩色区分:订单创建/冻结期/完成/失效
- 关联类型中文映射:订单/签到/系统
- 使用已有的 integralListApi 接口
- 参考用户详情页积分明细样式
2026-03-20 15:53:48 +08:00
scott
09946536aa feat: 添加积分日志页面
- 新增积分日志列表页面 src/views/user/integral/index.vue
- 新增积分相关 API src/api/integral.js
- 在路由中添加积分日志菜单
2026-03-20 10:56:53 +08:00
apple
ebd4619d65 feat: 拆分 admin 部署脚本,支持单独部署 API 或 Vue 前端
Made-with: Cursor
2026-03-19 17:24:15 +08:00
scott
6d3b50cebc docs: 添加 OpenClaw 多 Agent 配置方案 v2/v3
v2 基于原始需求优化(精简 Skills、通信协议、部署审批、版本锁定)。
v3 基于本机实际环境检查修正(路径、Agent 数量、Skills 可用性等)。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-19 12:51:37 +08:00
apple
a2db220f19 shjjy153: 新增分支对比文档 compare-shjjy153-shccd159.md,更新 config/app.js
Made-with: Cursor
2026-03-19 09:48:06 +08:00
apple
40c05afb3e main: 完善 README 架构与目录说明,移除重复 frontend(使用 backend-adminend)
Made-with: Cursor
2026-03-18 12:40:56 +08:00
apple
0f02cb7eba shjjy153: 新增 deploy-front-shjjy153.sh,更新配置
Made-with: Cursor
2026-03-18 12:21:14 +08:00
apple
d5439323db shccd159: 新增 deploy-front-shccd159.sh,更新 DEPLOY.md
Made-with: Cursor
2026-03-18 11:52:23 +08:00
apple
d8fc82d2e4 shccd159: 更新 deploy.conf
Made-with: Cursor
2026-03-18 10:51:46 +08:00
apple
7366ab1200 shccd159: 配置与页面更新
Made-with: Cursor
2026-03-18 10:38:36 +08:00
apple
a14566122b Merge main into shccd159,保留 shccd159 配置(jjy/ccd 域名)
Made-with: Cursor
2026-03-18 10:35:08 +08:00
apple
e8563e4fda 从 shccd159 合并 backend-adminend 子项目到 main
Made-with: Cursor
2026-03-16 11:32:11 +08:00
apple
e87b823d31 chore: 更新 shccd159 配置与 application.yml
Made-with: Cursor
2026-03-16 10:26:31 +08:00
apple
4b0afb3951 refactor: frontend 重命名为 backend-adminend,新增 shccd159/shjjy153 配置
- frontend 目录迁移至 backend-adminend(管理后台前端)
- 新增 application-shccd159.yml、application-shjjy153.yml
- 更新 deploy.conf、DEPLOY.md、application.yml

Made-with: Cursor
2026-03-16 09:33:54 +08:00
panchengyong
0cd7ebe202 feat: 完成 shjjy153 分支 jjy 项目配置切换和签名功能优化 2026-03-15 12:12:37 +08:00
panchengyong
6b131e07ab feat: 更新签名页面和合同文件 2026-03-14 20:31:27 +08:00
panchengyong
d83d6d66fd feat: 添加 shccd159 分支配置文件和合同 PDF 文件 2026-03-14 19:18:05 +08:00
982 changed files with 33532 additions and 676 deletions

18
.gitignore vendored
View File

@@ -15,7 +15,25 @@ frontend/yarn.lock
# Backend
backend/target/
backend/**/target/
backend/**/logs/
backend/**/*.log
backend/.idea/
backend/crmebimage/
# Dashboard frontend
dashboard-frontend/node_modules/
dashboard-frontend/npm-debug.log*
dashboard-frontend/**/*.log
# 独立子仓库(各自有独立 git不纳入根 repo
integral-resell/
single-shop-22/
MER-2.2_2601/
db/
# 敏感运行时配置(不入库)
deploy/docker/scripts/server.env
deploy/docker/step1-integral/.env
deploy/docker/step1-integral/houtai.env
deploy/docker/step2-single-shop/.env

469
DOCKER_DEPLOY.md Normal file
View File

@@ -0,0 +1,469 @@
# Docker 部署方案(寄卖商城 + 积分商城前后端)
> 本方案覆盖:
> - **integral-resell积分商城**Webman PHP 后端二进制 + H5 静态站
> - **single-shop-22寄卖商城**CRMEB Spring Boot 双 jar 后端 + Vue 管理后台 + uni-app H5
> - **Redis**:每个子栈独立容器(两套互不干扰)
>
> 不包含:`MER-2.2_2601` 多商户、Kafka 同步、MySQL使用 **阿里云 RDS for MySQL**)。
---
## 两步独立部署(推荐)
`czleilei240` 分支开始,两个商城**各自独立**部署,互不依赖。
| | 步骤一 寄卖商城 | 步骤二 积分商城 |
|---|---|---|
| 项目 | `integral-resell` | `single-shop-22` |
| 目录 | `deploy/docker/step1-integral/` | `deploy/docker/step2-single-shop/` |
| 服务 | redis · integral-houtai · integral-h5 | redis · single-admin-api · single-front-api · single-admin-web · single-h5 |
| 宿主机端口 | `18080` | `18081`(管理后台) `18082`(H5) |
| compose name | `resell-czleilei240` | `jifenmall-czleilei240` |
| 详细说明 | [README](deploy/docker/step1-integral/README.md) | [README](deploy/docker/step2-single-shop/README.md) |
### 步骤一 — 寄卖商城integral-resell
```bash
cd deploy/docker/step1-integral
cp .env.example .env && cp houtai.env.example houtai.env
# 填写 .env 中的 REDIS_PASSWORD
# 填写 houtai.env 中的 DB_PASSWORD 和 REDIS_PASSWORD两者须一致
docker compose --env-file .env up -d --build
```
### 步骤二 — 积分商城single-shop-22
```bash
cd deploy/docker/step2-single-shop
cp .env.example .env
# 填写 RDS_PASSWORD、REDIS_PASSWORD
docker compose --env-file .env up -d --build
# Java 首次构建约 10-20 分钟,可用 logs -f 观察进度
```
> 下方章节描述的是历史上合并部署时的 `docker-compose.yml``deploy/docker/docker-compose.yml`),供参考。两步拆分方案已取代合并方案。
---
## 一、架构总览
```mermaid
flowchart LR
user((用户)) -->|H5/管理后台| EdgeLB[(阿里云 SLB / Nginx)]
subgraph Host [Docker 主机]
direction TB
subgraph integralStack [积分商城]
integral_h5[integral-h5\nNginx :80]
integral_houtai[integral-houtai\nwebman.bin :8787]
end
subgraph singleStack [寄卖商城]
single_admin_web[single-admin-web\nNginx :80]
single_h5[single-h5\nNginx :80]
single_admin_api[single-admin-api\nminiao-admin :30032]
single_front_api[single-front-api\nminiao-front :30031]
end
redis[(redis :6379)]
end
EdgeLB -- jf-h5.* --> single_h5
EdgeLB -- jfadmin.* --> single_admin_web
EdgeLB -- admin.* --> integral_h5
integral_h5 -- /api/ --> integral_houtai
single_admin_web -- /api/ --> single_admin_api
single_h5 -- /api/ --> single_front_api
integral_houtai --> redis
single_admin_api --> redis
single_front_api --> redis
integral_houtai --> RDS[(阿里云 RDS MySQL)]
single_admin_api --> RDS
single_front_api --> RDS
```
### 服务清单
| 服务 | 镜像构建来源 | 容器内端口 | 默认宿主机端口 | 说明 |
|------|--------------|------------|----------------|------|
| `redis` | 官方 `redis:6.2-alpine` | 6379 | 6379 (可不暴露) | 持久化 AOF挂卷 `redis-data` |
| `integral-houtai` | `integral-resell/houtai/` | 8787 | (不暴露) | Webman 静态 ELF同容器写 `runtime/``public/upload/` |
| `integral-h5` | `integral-resell/h5/` | 80 | 18080 | 服务静态站;`/api/` 反代到 `integral-houtai`;启动时根据 env 重写 `static/configs.js` |
| `single-admin-api` | `single-shop-22/backend/crmeb-admin` | 30032 | (不暴露) | 多阶段 Maven 构建出 `miao-admin-2.2.jar` |
| `single-front-api` | `single-shop-22/backend/crmeb-front` | 30031 | (不暴露) | 多阶段 Maven 构建出 `miao-front-2.2.jar` |
| `single-admin-web` | `single-shop-22/backend-adminend` | 80 | 18081 | 多阶段 Node 构建 `dist``/api/` 反代到 `single-admin-api` |
| `single-h5` | `single-shop-22/single_uniapp22miao` | 80 | 18082 | 多阶段 Node 构建 `unpackage/dist/build/h5``/api/` 反代到 `single-front-api` |
> **域名/端口策略**:建议在 docker 主机前再放一层 Nginx 或阿里云 SLB按域名分发到 18080/18081/18082下面的 compose 默认把这三个静态站暴露在宿主机不同端口。
### 共享资源 / 卷
| 卷 / 目录 | 容器内挂载点 | 用途 |
|-----------|-------------|------|
| `redis-data` | `/data` | Redis AOF 持久化 |
| `integral-runtime` | `/app/runtime` | Webman 运行时session、views 缓存等) |
| `integral-upload` | `/app/public/upload` | 积分商城上传图片 |
| `single-images` | `/usr/local/crmeb/crmebimage` | 寄卖商城 `imagePath`admin/front 两个 jar **共享** |
| `single-logs` | `/app/log` | Spring Boot 日志(按需保留) |
### 与外部资源的关系
| 资源 | 地址来源 | 说明 |
|------|---------|------|
| 阿里云 RDS MySQL | `.env``RDS_*` | RDS 白名单需放通宿主机出口 IP建议同地域 VPC |
| OSS可选 | `.env``OSS_*` | 不配置时积分商城走本地 `public/upload`;寄卖商城用 admin 后台界面里配置 |
| 短信(可选) | `.env``SMS_*` | 仅积分商城 `.env` 用到 |
---
## 二、目录布局
```
integral-shop/
├── DOCKER_DEPLOY.md ← 本文档
├── deploy/
│ └── docker/
│ ├── docker-compose.yml
│ ├── .env.example
│ ├── README.md ← 一键启动说明(简版)
│ ├── redis/
│ │ └── redis.conf
│ ├── integral-resell/
│ │ ├── houtai.Dockerfile
│ │ ├── h5.Dockerfile
│ │ ├── nginx-h5.conf
│ │ ├── .env.template ← Webman 后端运行时 .env 模板
│ │ └── docker-entrypoint-h5.sh ← 启动时根据 env 改写 configs.js
│ └── single-shop/
│ ├── admin-api.Dockerfile
│ ├── front-api.Dockerfile
│ ├── admin-web.Dockerfile
│ ├── h5.Dockerfile
│ ├── application-docker.yml ← Spring Boot docker profile
│ ├── nginx-admin-web.conf
│ └── nginx-h5.conf
├── integral-resell/ ← 源码(不改动)
└── single-shop-22/ ← 源码(不改动)
```
> 所有 Dockerfile / compose 都**只读访问**源码目录,不会修改它们。
---
## 三、配置与环境变量
复制一份 `deploy/docker/.env.example``deploy/docker/.env` 并按下面表格修改。
| 变量 | 用途 | 示例 |
|------|------|------|
| `TZ` | 容器时区 | `Asia/Shanghai` |
| `RDS_HOST` | 阿里云 RDS 外网/内网地址 | `rm-bp1a178eq62lxba9xbo.mysql.rds.aliyuncs.com` |
| `RDS_PORT` | RDS 端口 | `3306` |
| `RDS_INTEGRAL_DB` | 积分商城数据库 | `yangtangyoupin` |
| `RDS_INTEGRAL_USER` / `RDS_INTEGRAL_PASS` | 积分商城账号 | 默认 `yangtangyoupin` / 来自原 sxsy80 |
| `RDS_SINGLE_DB` | 寄卖商城数据库(与积分共库) | `yangtangyoupin` |
| `RDS_SINGLE_USER` / `RDS_SINGLE_PASS` | 寄卖商城账号 | 同上 |
| `REDIS_PASSWORD` | 容器 Redis 密码 | 123456 |
| `REDIS_INTEGRAL_DB` | 积分商城使用的 Redis db | `0` |
| `REDIS_SINGLE_ADMIN_DB` | 寄卖 admin Redis db | `25` |
| `REDIS_SINGLE_FRONT_DB` | 寄卖 front Redis db | `26` |
| `INTEGRAL_API_PUBLIC_URL` | H5 调用后端的对外 URL | `https://admin.example.com` |
| `INTEGRAL_IMG_PUBLIC_URL` | H5 引用图片的对外 URL | `https://admin.example.com` |
| `INTEGRAL_H5_PUBLIC_URL` | H5 自身对外 URL | `https://h5.example.com/` |
| `INTEGRAL_SN_ID` | `configs.js``sn_id` | `17533260260405` |
| `INTEGRAL_APP_STR` | `configs.js``appStr`**与寄卖 APP_SECRET 必须一致** | `ZFyTNQTWEkCBczKzyUDJWE9Ecx260405` |
| `SINGLE_ADMIN_BASE_API` | 寄卖管理后台调用 API 的域名/路径 | 留空走同域 `/api/` 即可 |
| `SINGLE_H5_DOMAIN` | uni-app H5 调用 API 的域名 | 留空走同域 `/api/` 即可 |
| `SYNC_SOURCE_ID` / `SYNC_TARGET_MER_ID` | 多商户同步配置(无 MER 时留空) | `""` / `0` |
> **关键一致性**:积分商城 `configs.js#appStr` ↔ 积分商城 Webman `.env#APP_SECRET` ↔ 寄卖商城 admin 后台中的 `appStr` 必须一致;否则双向调用会鉴权失败。
---
## 四、镜像构建策略
### 0. 基础镜像选型(与主机对齐)
| 服务 | 基础镜像 | libc | 选择理由 |
|------|----------|------|----------|
| `redis` | `redis:6.2-alpine` | musl | Redis 官方推荐,无 native 依赖 |
| `integral-houtai` | `php:8.0-cli-bullseye` (Debian 11) | **glibc** | 与宝塔 PHP 8.0.26 版本对齐;已装 pdo_mysql / redis / gd / imagick 等 webman 常用扩展 |
| `integral-h5` | `nginx:1.25-alpine` | musl | 纯静态文件 + nginx无字体/native 依赖 |
| `single-admin-api` / `single-front-api` 构建 | `maven:3.8.8-eclipse-temurin-17` (Debian) | **glibc** | 与部署环境 OpenJDK 17.0.x 对齐pom.xml source/target=1.8Java 17 编译器向下兼容 |
| `single-admin-api` / `single-front-api` 运行 | `eclipse-temurin:17-jre-jammy` (Ubuntu 22.04) | **glibc** | 匹配主机 openjdk 17.0.18Spring Boot 2.2.6 + Java 17 需额外 `--add-opens` JVM 参数(已写入 JAVA_OPTS预装 `fonts-dejavu` + `fonts-wqy-zenhei` |
| `single-admin-web` / `single-h5` 构建 | `node:16-alpine` | musl | 仅打包 JS/CSS无 native 依赖 |
| `single-admin-web` / `single-h5` 运行 | `nginx:1.25-alpine` | musl | 同上 |
> **主机环境**Debian-classLinux kernel 6.1.164/ x86_64 / Docker + BuildKit。
> 所有 `--platform=linux/amd64` 在主机上都是原生执行,**无 QEMU 模拟**;只有在 Apple Silicon 上本地 build 时才会走 QEMU。
> Java 后端最终镜像在 glibc 上运行,与主机 OS 完全同源;这样可避免 Alpine + musl 时验证码 / 中文字体 / POI 个别场景的兼容性问题。
### 1. integral-houtaiPHP Webman 二进制)
- 基础镜像:`debian:bookworm-slim`webman.bin 为 ELF x86_64静态链接glibc 兼容)。
- 直接拷贝 `webman.bin``public/``runtime/views` 模板进镜像。
- `.env` **不打进镜像**,通过 `docker-compose``deploy/docker/integral-resell/.env.template` 渲染后挂进 `/app/.env`
- 启动命令:`./webman.bin start -d`业主指定的守护模式entrypoint 在后台 `tail -F runtime/logs/*.log` 把日志接到容器 stdout并监听主进程退出。收到 `SIGTERM` 时执行 `./webman.bin stop` 优雅退出。
### 2. integral-h5静态站
- 基础镜像:`nginx:1.25-alpine`
- 直接拷贝 `integral-resell/h5/``/usr/share/nginx/html/`
- `docker-entrypoint-h5.sh` 在启动时根据环境变量重写 `static/configs.js`:把 `BASE_URL/IMG_URL/H5_URL/sn_id/appStr` 替换为部署值,**无需重新构建前端**。
### 3. single-admin-api / single-front-apiSpring Boot
- **多阶段构建**
- 构建阶段:`maven:3.8.8-eclipse-temurin-17``mvn package -pl crmeb-admin -am -DskipTests`front 同理。pom.xml 已配置 `source/target=1.8`Java 17 编译器向下兼容,产物字节码级别不变。
- 运行阶段:`eclipse-temurin:17-jre-jammy`Ubuntu 22.04 / glibc与部署环境 `openjdk 17.0.18` 对齐;预装 `fontconfig + fonts-dejavu + fonts-wqy-zenhei`
- **Java 17 兼容性**Spring Boot 2.2.6 使用 cglib、Druid、Quartz 等大量反射Java 17 强模块封装会报 `InaccessibleObjectException`。已在 `JAVA_OPTS` 中加入 7 条 `--add-opens`,覆盖已知触发点(`java.lang / reflect / util / io / math / sun.net.util / net`)。若运行时出现新的 `InaccessibleObjectException`,按报错包名继续追加 `--add-opens`
- 通过 `--spring.profiles.active=docker` + `--spring.config.additional-location=file:/config/` 加载 `application-docker.yml`,所有 DB/Redis/端口参数从 `.env` 注入。
- `imagePath` 指向 `/usr/local/crmeb/crmebimage/`(挂卷 `single-images`,两个 jar 共享)。
### 4. single-admin-webVue 管理后台)
- **多阶段构建**
- 构建阶段:`node:16-alpine``npm ci && npm run build:prod``VUE_APP_BASE_API` 设为空,走同域 `/api/`)。
- 运行阶段:`nginx:1.25-alpine``/api/` 反代到 `single-admin-api:30032`
- 若想**直接复用源码里现成的 `dist/`**可改用「fast」分支见 Dockerfile 注释)。
### 5. single-h5uni-app H5
- 同样多阶段:`node:16-alpine``npm install && npm run build:h5`,再 nginx 服务。
- `config/app.js``domain` 硬编码,需在构建前注入:通过 ARG `H5_API_DOMAIN` 做字符串替换,或留空让同域生效(推荐)。
---
## 五、Spring Boot 接 RDS / Redis 的细节
寄卖商城原本通过 `spring.profiles.active=byjyw149` / `miao80` 等加载不同 yml。**Docker 部署用全新 profile `docker`**
```yaml
# deploy/docker/single-shop/application-docker.yml
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://${MYSQL_HOST}:${MYSQL_PORT:3306}/${MYSQL_DATABASE}?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false
username: ${MYSQL_USERNAME}
password: ${MYSQL_PASSWORD}
redis:
host: ${REDIS_HOST}
port: ${REDIS_PORT:6379}
password: ${REDIS_PASSWORD:}
database: ${REDIS_DATABASE:0}
```
通过 docker-compose 注入:
```
MYSQL_HOST=${RDS_HOST}
MYSQL_DATABASE=${RDS_SINGLE_DB}
MYSQL_USERNAME=${RDS_SINGLE_USER}
MYSQL_PASSWORD=${RDS_SINGLE_PASS}
REDIS_HOST=redis
REDIS_PASSWORD=${REDIS_PASSWORD}
REDIS_DATABASE=${REDIS_SINGLE_ADMIN_DB}
```
> **数据库初始化**:首次部署前请用 `db/` 下的 SQL推荐 `db/yangtangyoupin.sql`、`db/shop22-v2.sql` 等)在 RDS 中初始化对应库;本方案不在容器中建库,**避免误覆盖现网数据**。
---
## 六、首次部署步骤
```bash
# 1. 准备环境变量
cd integral-shop/deploy/docker
cp .env.example .env
vim .env # 填入 RDS / Redis / 域名等
# 2. 准备积分商城 Webman .env容器运行时挂载
cp integral-resell/.env.template integral-resell/.env
vim integral-resell/.env # 至少配置 DB_*、APP_SECRET、SMS_*
# 3. 在阿里云 RDS 上提前导入数据
# - 积分商城db/yangtangyoupin.sql
# - 寄卖商城db/shop22-v2.sql / db/jjy153-mysql.sql (按实际版本)
# 4. 构建并启动
docker compose --env-file .env build
docker compose --env-file .env up -d
# 5. 健康检查
docker compose ps
docker compose logs -f single-admin-api # 看到 "Started CrmebAdminApplication" 即成功
docker compose logs -f integral-houtai # 看到 "Webman start success" 即成功
curl -I http://localhost:18080 # 积分商城 H5
curl -I http://localhost:18081 # 寄卖管理后台
curl -I http://localhost:18082 # 寄卖用户 H5
```
---
## 七、日常运维
| 场景 | 操作 |
|------|------|
| 拉取最新源码后重建 | `docker compose build --no-cache <service>` 然后 `docker compose up -d <service>` |
| 只重启某服务 | `docker compose restart single-admin-api` |
| 看日志 | `docker compose logs -f --tail 200 single-front-api` |
| 进入容器 | `docker compose exec single-admin-api sh` |
| 备份用户上传 | `docker run --rm -v integral-upload:/d -v $(pwd):/b alpine tar czf /b/upload.tgz -C /d .` |
| 备份寄卖商城图片 | 同上,卷名 `single-images` |
| 切换到外部 Redis | 在 `.env``REDIS_HOST` 改成外部地址,并在 compose 里把 `redis` 服务注释 |
| 切换到 Java 17 运行寄卖商城 | 把 `eclipse-temurin:8-jre-alpine` 改成 `17-jre`;本工程经验依旧建议 8 |
---
## 八、性能与资源建议
| 容器 | CPU | 内存(建议) |
|------|----:|------------:|
| `redis` | 0.2 | 256 MB |
| `integral-houtai` | 0.51 | 256512 MBwebman 多 worker 时 ↑) |
| `integral-h5` | 0.1 | 64 MB |
| `single-admin-api` | 1 | **JVM `-Xmx512m`,容器 limit 768 MB** |
| `single-front-api` | 1 | JVM `-Xmx768m`,容器 limit 1 GB |
| `single-admin-web` | 0.1 | 64 MB |
| `single-h5` | 0.1 | 64 MB |
最低配宿主机:**2 vCPU / 4 GB**(建议 4 vCPU / 8 GB 起)。
---
## 九、上线检查清单
- [ ] 阿里云 RDS 白名单已放通 Docker 主机出口 IP
- [ ] RDS 中已导入对应库的 SQL账号/密码权限正确
- [ ] `.env` 中无明文敏感信息提交到 git`.gitignore`
- [ ] `INTEGRAL_APP_STR` 与寄卖商城 admin 后台 + Webman `.env#APP_SECRET` 三处一致
- [ ] 域名 / SSL 在外层 Nginx 或阿里云 SLB 完成 443 卸载
- [ ] OSS 与 SMS 等第三方密钥若启用,已写入对应位置
- [ ] 备份策略RDS 自动备份 + `integral-upload` / `single-images` 卷定期 tar 备份
---
## 十、远端 116.62.83.240 一键部署
服务器已具备的环境(来自宝塔软件商店截图):
- Docker节点管理 → Docker 已部署)
- Nginx 1.28.1**未使用**,本方案的 Nginx 在容器内)
- MySQL 5.7.44**未使用**,本方案走阿里云 RDS
- Redis 8.0.5**默认未使用**,容器内自带 Redis想复用宿主 Redis 见下方"复用宿主 Redis"
- PHP 8.0.26**未使用**webman 走静态二进制)
- rsync 已安装、SSH `root / A@123456`
### 1. 本机一次性配置
```bash
cd deploy/docker/scripts
cp server.env.example server.env
$EDITOR server.env # 默认已写好 116.62.83.240 / root / A@123456
```
> **强烈建议先用 SSH key 替代密码**`ssh-copy-id root@116.62.83.240` 后把 `server.env` 里的 `SSHPASS=` 注释掉即可。脚本会自动切回 SSH key 通道。
### 2. 全量同步并启动
```bash
./sync-to-server.sh up
```
脚本流程:
1. SSH 登录 116.62.83.240,确保 `/root/integral-shop` 目录存在;
2. rsync 增量同步整个工程(自动排除 `node_modules / target / .git / runtime/logs / MER-2.2_2601` 等大目录);
3. 在远端 `cd /root/integral-shop/deploy/docker && docker compose build && docker compose up -d`
4. 输出 `docker compose ps` 结果。
首次会要求你先在远端把 `.env / integral-resell/.env` 改成真实值(如未做,运行下面这一步):
```bash
./bootstrap-remote-env.sh # 在远端基于模板创建 .env再 ssh 上去填写
```
### 3. 日常运维(无需登录服务器)
```bash
./remote-up.sh ps # 服务状态
./remote-up.sh logs single-admin-api # 跟随日志
./remote-up.sh restart single-front-api # 重启某服务
./remote-up.sh build single-admin-web # 只重建某镜像
./remote-up.sh exec single-admin-api sh # 进容器
./remote-up.sh ssh # 直接登录服务器
./sync-to-server.sh up # 改了代码后再同步+重启
```
### 4. 端口规划与宝塔放行
宿主机暴露端口(来自 `.env.example`,可改):
| 端口 | 服务 | 用途 |
|------|------|------|
| 18080 | `integral-h5` | 积分商城 H5 |
| 18081 | `single-admin-web` | 寄卖管理后台 |
| 18082 | `single-h5` | 寄卖用户 H5 |
| 6379 | `redis` | (生产建议关闭)`REDIS_HOST_PORT=` 留空即不暴露 |
**安全组 / 防火墙**:阿里云安全组放通 18080-18082宝塔面板 → 安全 → 放行同样端口。**强烈建议在前面再挂一层域名 + SSL**(宝塔自带 Nginx 反代 / 阿里云 SLB / Cloudflare 都行)。
### 5. 复用宿主已有 Redis 8.0.5(可选)
若想节省一份 Redis直接用宿主机的 Redis
```bash
# 1) 远端编辑 deploy/docker/.env
REDIS_PASSWORD=宿主-Redis-的密码
# 2) 远端编辑 deploy/docker/docker-compose.yml
# a. 注释掉 redis: 整个服务块(包括 healthcheck
# b. single-admin-api / single-front-api 把 REDIS_HOST: redis 改成 172.17.0.1
# docker bridge 网关;宝塔默认端口 6379先确保 Redis 监听 0.0.0.0 且防火墙放行 6379 to docker subnet
# c. integral-resell/.env 把 REDIS_HOST=redis 同步改为 172.17.0.1
# 3) 同步重启
./sync-to-server.sh up
```
### 6. 阿里云 RDS 白名单
到 RDS 控制台 → 白名单 → 加入 `116.62.83.240`(如果 RDS 与 ECS 同 VPC 则用内网地址 + 内网白名单更优)。
### 7. 数据库初始化
```bash
# 本地把 SQL 上传到服务器(默认 db/ 已被 rsync 同步过去)
./remote-up.sh ssh
# 远端
mysql -h <RDS_HOST> -u <RDS_USER> -p<RDS_PASS> < /root/integral-shop/db/yangtangyoupin.sql
mysql -h <RDS_HOST> -u <RDS_USER> -p<RDS_PASS> < /root/integral-shop/db/shop22-v2.sql
```
也可以用宝塔自带的 phpMyAdmin 直接连 RDS 导入。
---
## 十一、各文件清单一览
参见 `deploy/docker/` 下:
- `docker-compose.yml` ← 编排入口
- `.env.example` ← 环境变量模板
- `redis/redis.conf`
- `integral-resell/houtai.Dockerfile`
- `integral-resell/h5.Dockerfile`
- `integral-resell/nginx-h5.conf`
- `integral-resell/.env.template`
- `integral-resell/docker-entrypoint-h5.sh`
- `single-shop/admin-api.Dockerfile`
- `single-shop/front-api.Dockerfile`
- `single-shop/admin-web.Dockerfile`
- `single-shop/h5.Dockerfile`
- `single-shop/application-docker.yml`
- `single-shop/nginx-admin-web.conf`
- `single-shop/nginx-h5.conf`
- `scripts/server.env.example` ← 远端 SSH 配置模板
- `scripts/sync-to-server.sh` ← rsync 增量同步 + 触发远端部署
- `scripts/remote-up.sh` ← 远端 `docker compose` 操作up/build/restart/logs/ps/exec/ssh
- `scripts/bootstrap-remote-env.sh` ← 首次在远端生成 .env 模板
每个文件都已生成可直接使用的版本。

118
README.md
View File

@@ -1,25 +1,125 @@
# 单商户积分商城
管理后台前端 + CRMEB 后端 API 合并仓库
管理后台前端、用户端 H5uni-app与 CRMEB Java 后端合并仓库。项目由 **4 个子项目** 组成,对应 **2 个 jar 包****2 个前端**
---
## 项目架构概览
```mermaid
flowchart TB
subgraph frontends [前端]
AdminVue[backend-adminend / frontend]
UserH5[single_uniapp22miao]
end
subgraph backends [后端 JAR]
AdminJar[miao-admin-2.2.jar]
FrontJar[miao-front-2.2.jar]
end
subgraph sources [源码子项目]
crmebAdmin[crmeb-admin]
crmebFront[crmeb-front]
end
AdminVue --> AdminJar
UserH5 --> FrontJar
crmebAdmin --> AdminJar
crmebFront --> FrontJar
```
### 2 个 jar 包 ↔ 2 个前端
| jar 包 | 对应前端 | 说明 |
|--------|----------|------|
| **miao-admin-2.2.jar** | `backend-adminend`(部分分支为 `frontend` | 管理后台 API + 后台静态站点 |
| **miao-front-2.2.jar** | `single_uniapp22miao` | 积分商城、用户端 H5 / uni-app |
### 4 个子项目(可单独打包部署)
| 子项目 | 产出 | 说明 |
|--------|------|------|
| **crmeb-admin** | `miao-admin-2.2.jar` | 管理后台后端 |
| **crmeb-front** | `miao-front-2.2.jar` | 用户端 API |
| **backend-adminend**(或 `frontend` | `dist/` | 管理后台 Vue 静态 |
| **single_uniapp22miao** | `unpackage/dist/build/h5` | 用户端 H5 静态 |
---
## 目录结构
### 根目录
| 目录/文件 | 说明 |
|-----------|------|
| **backend/** | Java 后端Maven 多模块) |
| **backend-adminend/** | 管理后台 Vue 前端(部分分支为 `frontend` |
| **single_uniapp22miao/** | 用户端 uni-app 前端(积分商城 H5 |
| **backend/deploy.conf** | 多环境部署配置 |
| **backend/DEPLOY.md** | 打包与部署详细说明 |
### backend 子模块
| 子模块 | 产出 | 说明 |
|--------|------|------|
| **crmeb-admin** | `miao-admin-2.2.jar` | 管理后台后端 |
| **crmeb-front** | `miao-front-2.2.jar` | 用户端 API |
| **crmeb-service** | 依赖库 | 业务逻辑、Mapper |
| **crmeb-common** | 依赖库 | 公共组件 |
### single_uniapp22miao 主要目录
| 目录 | 说明 |
|------|------|
| **frontend/** | 管理后台 Vue 前端(原 single_admin22miao |
| **backend/** | CRMEB Java Spring Boot 后端(原 crmeb_22miao |
| **api/** | 后台 API 调用 |
| **components/** | 公共组件 |
| **config/** | 请求地址等配置 |
| **pages/** | 页面(含 integral 积分模块等) |
| **static/** | 静态资源 |
## 前端
### backend-adminend 主要目录
| 目录 | 说明 |
|------|------|
| **src/** | Vue 源码 |
| **public/** | 静态资源 |
| **build/** | 构建脚本 |
---
## 开发与构建
### 管理后台前端
- 技术栈Vue + Vue CLI
- 开发:`cd frontend && npm install && npm run serve`
- 构建:`npm run build`
- 开发:`cd backend-adminend && npm install && npm run serve`(若仓库中为 `frontend` 目录则替换)
- 构建:`npm run build:prod`Node 17+ 可设 `export NODE_OPTIONS="--openssl-legacy-provider"`
- 产出:`backend-adminend/dist/`(或 `frontend/dist/`
##
### 用户端 H5 前
- 技术栈uni-app、Vue 2
- 开发:`cd single_uniapp22miao && npm install && npm run dev:h5`
- 构建:`npm run build:h5`
- 产出:`single_uniapp22miao/unpackage/dist/build/h5/`
### 后端
- 技术栈Spring Boot 2.2.6、Maven、MyBatis Plus
- 开发`cd backend && mvn spring-boot:run -pl crmeb-admin`
- 打包:`mvn clean package -pl crmeb-admin -am -DskipTests`
- 管理后台 API`cd backend && mvn spring-boot:run -pl crmeb-admin`
- 用户端 API`cd backend && mvn spring-boot:run -pl crmeb-front`
- 打包、多模块命令与环境说明见 **[backend/DEPLOY.md](backend/DEPLOY.md)**
---
## 多环境与部署(简要)
- 环境配置:**[backend/deploy.conf](backend/deploy.conf)**by80、miao33、miao50、shjjy153、shccd159 等)
- 部署脚本:`backend/shell/deploy-admin-*.sh``deploy-front-*.sh`
- 详细步骤与变量说明:**[backend/DEPLOY.md](backend/DEPLOY.md)**
---
## Gitea

View File

@@ -3,11 +3,23 @@ ENV = 'development'
# base api
# VUE_APP_BASE_API = '/dev-api'
VUE_APP_BASE_API = 'http://127.0.0.1:30032'
# VUE_APP_BASE_API = 'http://127.0.0.1:30032'
# VUE_APP_BASE_API = 'https://jfadmin.suzhouyuqi.com'
# VUE_APP_BASE_API = 'http://jfanyueadmin.szxingming.com'
# VUE_APP_BASE_API = 'http://jfadmin.wenjinhui.com'
# VUE_APP_BASE_API = 'http://jfadmin-bsy.bosenyuan.com'
# byjyw149 项目(宝应金雅文商贸)
# VUE_APP_BASE_API = 'https://jf.jinyawen.com'
# shjjy153 项目
# VUE_APP_BASE_API = 'http://jjy-jfadmin.fwxgpt.com'
# czleilei240 项目
VUE_APP_BASE_API = 'https://leilei-jf.czchunfang.com'
# hapr191 项目(淮安鹏然商贸)
# VUE_APP_BASE_API = 'http://jfadmin.hapengran.com'
# shccd159 项目
# VUE_APP_BASE_API = 'http://ccd-jfadmin.cichude.com'
# vue-cli uses the VUE_CLI_BABEL_TRANSPILE_MODULES environment variable,

View File

@@ -0,0 +1,26 @@
# just a flag
ENV = 'production'
# base api
# VUE_APP_BASE_API = '/prod-api'
# VUE_APP_BASE_API = 'http://127.0.0.1:8080'
# VUE_APP_BASE_API = 'https://jf.suzhouyuqi.com'
# miao33 项目
# VUE_APP_BASE_API = 'http://jfadmin.xiashengjun.com'
# byjyw149 项目(宝应金雅文商贸)
# VUE_APP_BASE_API = 'https://jf.jinyawen.com'
# shjjy153 项目
# VUE_APP_BASE_API = 'http://jjy-jfadmin.fwxgpt.com'
# czleilei240 项目
VUE_APP_BASE_API = 'https://leilei-jf.czchunfang.com'
# hapr191 项目(淮安鹏然商贸)
# VUE_APP_BASE_API = 'http://jfadmin.hapengran.com'
# shccd159 项目
# VUE_APP_BASE_API = 'http://ccd-jfadmin.cichude.com'
# VUE_APP_BASE_API = 'http://jfanyueadmin.szxingming.com'
# VUE_APP_BASE_API = 'http://jfadmin-bsy.bosenyuan.com'

View File

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@@ -0,0 +1,23 @@
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
import request from '@/utils/request';
/**
* 积分记录分页列表
* @param data
*/
export function integralListApi(data) {
return request({
url: '/admin/user/integral/list',
method: 'post',
data,
});
}

View File

@@ -0,0 +1,97 @@
/**
* 积分外部页面 API免认证
* 使用 requestNoAuth 实例,不注入 token不拦截 401。
* 对应后端ExternalIntegralController → api/external/integral/*
*/
import requestNoAuth from '@/utils/requestNoAuth';
/**
* 积分订单列表
*/
export function getExternalOrderList(params) {
return requestNoAuth({
url: 'external/integral/order/list',
method: 'get',
params,
});
}
/**
* 用户积分列表(含 eb_user 积分字段)
*/
export function getExternalUserList(params) {
return requestNoAuth({
url: 'external/integral/user/list',
method: 'get',
params,
});
}
/**
* 用户积分明细分页列表page/limit 走 query与 /admin/user/integral/list 一致)
*/
export function getExternalIntegralLog(data) {
const { page, limit, ...body } = data;
return requestNoAuth({
url: 'external/integral/log/list',
method: 'post',
params: { page, limit },
data: body,
});
}
/**
* 寄卖订单 列表(免认证)
*/
export function getExternalWaOrderList(params) {
return requestNoAuth({
url: 'external/integral/wa-order/list',
method: 'get',
params,
});
}
/**
* 寄卖订单 详情(免认证)
*/
export function getExternalWaOrderInfo(id) {
return requestNoAuth({
url: 'external/integral/wa-order/info',
method: 'get',
params: { id },
});
}
/**
* 团队每日对账报表(免认证)
*/
export function getExternalTeamDailyReport(params) {
return requestNoAuth({
url: 'external/integral/team-report/daily',
method: 'get',
params,
});
}
/**
* 团队每日对账报表 - Excel 导出(免认证)
*/
export function exportExternalTeamDailyReport(params) {
return requestNoAuth({
url: 'external/integral/team-report/daily/export',
method: 'get',
params,
responseType: 'blob',
});
}
/**
* 今日抢单用户列表(免认证)
*/
export function getExternalGrabUserList(params) {
return requestNoAuth({
url: 'external/integral/grab-user/list',
method: 'get',
params,
});
}

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